Repository navigation
Releases
v0.2.1
第三个正式版,代码和 v0.2.1-alpha.10 一样,只把版本号里的 alpha 去掉了。alpha 这一路上他一直在真机上试。
从 v0.2.0 到现在,一共这些:
- 可以把几张卡片编成一组(逻辑组):鼠标停在这一组附近,底下浮出一层淡背景,这时候右键那块空白处就是整组菜单。拖动默认整组一起走,按住
Alt只拖抓住的那一张。 - 画布上多了两个独立对象:能写字的文本框(没有底色,下面的色块透得上来)和只能改颜色的矩形方框。两个都能拖、能改大小、能框选、能染色、能编组,卡片永远压在它们上面。
- 每张卡片可以有自己的宽高(右下角手柄拖着改),自动排列按实际尺寸给旁边让位。
- 拖动和改大小都能对齐吸附,差 6px 以内贴上去、画一根细线;现在要按住
Shift才生效,不按就完全自由摆放。 - 卡片之间不会重叠:松手时要是压到了别的卡片,动的那一组整体挪到最近的空位,而且只挑还留在画面里的方向(文本框和方框不受这条约束)。
- 拖动 / 改大小的时候,手里那几张会抬到所有卡片上面,免得被别的卡盖住看不见。
- 右下角那颗「缩略图」:整块画布换成只留标题的小牌子,相对位置一个不差、距离缩到一屏里,改过宽高的卡片照它自己的比例画;点一张牌子就回到那张卡。
- 右键双击那条线可以直接删掉它。
- 底部状态栏最多两行,面板变窄时从最上面往下藏,右边那几颗按钮永远完整。
- 会话标题栏那颗「剧本档案」按钮去掉了白色方框,跟旁边宿主的按钮一个样子。
两套无头测试现在是 42 + 959 条(裸克隆里 host 那套的 D/E 两段因缺 zod 跳过;在 profile 里跑是 171 + 959),tests/visual.mjs 十三幕。
v0.2.1-alpha.9
手里那张抬到最上面
原话:「即使是相同种类的卡片,其实层级是不同的,所以说要把移动时的卡片提高到最高层级」。画布上的叠放顺序本来是 DOM 顺序(同一种卡片谁在前谁在后完全随机),于是拖着的那张经常被别的卡压住、看不见自己要放到哪儿。
现在拖动 / 改大小时,手里那几张(整组拖动就是整组)临时加一层 .lift(z-index:3),松手那一帧摘掉、回到 DOM 顺序。层级仍守在辅助线、框选、连线名字之下,而且只管卡片 —— 「方框 → 文字 → 卡片」那条层序一个字没动,.sc-obj 依旧不给 z-index。
让开时不许把卡片推出画面
他同一句里还说「你这个弹开的功能可能会受到卡片的尺寸的影响而不灵敏」,并选了「我给你一个能重现的例子」,所以这一版没有动让开的规则,只修了我顺手查出来的那个真缺陷:「同样近时优先不让卡片跑出可视范围」原本只查了左、上两条边 —— 卡片被推出右 / 下边根本没人管,而卡片越大越容易一头撞出右下角。现在四条边都看。
两套无头测试现在是 42 + 947 条,visual 多出第十三幕 lift(两对叠在一起的卡片:一对里带 .lift 的那张故意排在 DOM 前面,不抬就必输;另一对没 lift 当对照,必须由 DOM 顺序决定叠放)。新增的断言照旧反着验过:把 .lift 拿掉(代码里不挂类名 + CSS 那条删掉)→ smoke 四条红;只把那条约定的四条边改回两条 → smoke 两条红(卡片停在 x=705、右边出界 5px);把 CSS 那条删掉 → lift 那一幕三条红(z-index 是 auto、辅助线不再压着它、摸到的是 DOM 在后那张)。
v0.2.1-alpha.8
对齐全看 Shift
原话:「拖动之后按住 shift 出现引导线,如果不按 shift,那就不出现引导线,这样子自由一点」。问下来他选的是完全不吸、也没有线(不是「照旧吸、只是不出线」),并且改大小也照同一个规矩。
所以现在:按住 Shift 拖卡片 / 改大小=原来那套吸附 + 辅助线;不按 Shift 时位置就是指针算出来的那个,一个像素都不改,线也不出现。拖到一半再按住 Shift 也算数(每一次鼠标移动都看一眼 Shift),松开又立刻放开。文本框和方框走的是同一套吸附,一并在内。状态栏最后多了一句「· 按住 Shift 拖动 / 改大小=对齐吸附」—— 放在最后是因为面板一窄、状态栏是从最上面往下藏的,最后一行才是永远看得见的;也因此这句话只能占两行以内(第一版写长了,窄面板那一幕直接报「最下面那行提示整行都在可视区外」,改成短句才过)。
新写的断言反着验过:把吸附开关临时改成「一直吸」,九条红(不按 Shift 时的自由位置、没有辅助线、松开 Shift 又放开、写进图谱的是自由那一版、改大小时的原始宽度、文本框那两条,等等)。状态栏那句提示也有一条断言钉着,它在旧版面上本来就不存在,同样是红的。两套无头测试现在是 42 + 930 条。
v0.2.1-alpha.7
卡片之间不许重叠
原话:「除了文本框,和颜色框之外的卡片,它不能重叠」(这句也回答了他上一轮那句「其他卡片要互斥」)。问下来他选的是松手后自动让开:拖动 / 改大小的时候允许压着走,一松手就把动的这一组整体挪到最近的空位。
「最近」按最小平移量算:和谁压上了,就在「往左 / 往右 / 往上 / 往下贴住它」四个里挑挪得最少的那一个,一轮轮消解(上限 40 轮)。两个方向一样近时(比如往左 116、往下 120 差一点点)优先不让卡片跑出可视范围,免得为了躲一下被推到画布外面去。整组拖动时整组一起平移 —— 组内的相对位置一个不差;混在选区里的文本框 / 方框跟着走,但它们既不算障碍、也不会被推开(这是用户点名的例外)。引用卡算卡片,从抽屉里拖出来落在别人身上时同样让开;从堆叠条拖上来的卡片也照它自己的宽高算。画布上已经压着的老卡片不动(他选的「先不动」),等他自己拖一下或者点一次自动排列。
右键双击那条线=删掉它
原话:「加一个右键双击连线…取消连线的快捷方式」。现在第一下右键照旧弹那个小菜单(重命名 / 删除),紧接着 450ms 内的第二下右键就直接删线 —— 第二下多半正好打在刚弹出来的菜单上(菜单就压在线那一处),也可能落在线的另一段(那一下落在遮罩上),两种都算。遮罩那条路还要求离第一下 40px 以内,免得「右键第一条线、立刻去右键别处」也被当成双击。菜单顶上多了一行「点一下这条线=起名字 · 右键双击=直接删掉」,状态栏那句提示也改成了「· 点连线起名字 · 右键双击线=删线」。
两套无头测试现在是 42 + 907 条(裸克隆里 host 那套的 D/E 两段因缺 zod 跳过;在 profile 里跑是 171 + 907),visual 仍是十二幕(这两条是交互规矩,不进截图)。新增的断言照旧反着验过:松手不让开 → 五条红(含原有两条改写的);去掉「别推出可见范围」那个罚分 → 三条红(改大小的卡片往左跑到 −76、引用卡被推到画布外);把右键双击关掉 → 三条红;让方框也变成障碍 → 两条红。
v0.2.1-alpha.6
右下角多了一颗「缩略图」
原话:「右下角加一个缩略图按钮,按下之后所有卡片相对位置不变,但是只显示标题(分为两行,这样大小合适),同时相对距离随之缩小,这个还要适配已经改变长宽比的卡片」。
按下去整块画布换成一屏小牌子:每张卡只剩标题(两行封顶),相对位置一个不差,距离整体按一个比例 k 缩到一屏里(k 由所有卡片包围盒和画布尺寸算出来,夹在 0.05~0.55),连线也照牌子画。
牌子的大小分两步算:高度取「缩小后的卡片高度」,夹在 2442px(两行 10px 标题刚好装下);宽度=高度 × 这张卡自己的 宽高比,只在 34160px 两头夹住。所以改过宽高的卡片在缩略图里还是那个形状 —— 加宽过的卡片就是一块宽牌子,竖卡就是一块窄牌子,不会一律画成同样的小方块。画布上的方框和文本框也照比例缩成一小块(只有颜色,不写字)。
点一张牌子=退出缩略图并回到那张卡(画布自动把这张卡摆到中间,缩放不动);点空白处、或再按一次按钮同样退出;换一层画布也会退出。画布上什么都没有时这颗按钮是灰的,按下去写着「这块画布上还没有卡片」。
状态栏最右边那一颗就是它(「右下角」)。它自己吃滚轮、也停掉右键菜单:在缩略图里缩放那层看不见的画布、弹画布菜单都没有意义。
两套无头测试现在是 42 + 863 条(裸克隆里 host 那套的 D/E 两段因缺 zod 跳过;在 profile 里跑是 171 + 863),tests/visual.mjs 多出 mini 一幕(一共十二幕),量的是牌子有没有跑出画布、标题是不是真的封在两行、宽度有没有跟着卡片的长宽比走、这一层是不是不透明。新增的断言照旧反着验过:位置不乘 k,smoke 两条变红(「相对位置不变、距离缩小」那两条);牌子宽度改成不认宽高比,四条变红;把两行封顶去掉,mini 那一幕从三个角度报出来(line-clamp 是 none、标题占了 3 行和 6 行、标题越出牌子);把这一层的底色改成透明,smoke 一条 + 那一幕一条变红。
v0.2.1-alpha.10
标题栏那颗按钮的白色方框没了
原话:「把剧本档案按钮底部的那个白色框删掉,保持风格一致」;问一句之后他确认连外面那圈细边也不要,只留图标和字。
那颗按钮原来跟面板里的按钮共用 .sc-btn —— 一件带底色、带描边的小方框。会话标题栏的底色是 --dsw-specific-sidebar-fill,上面再垫一层 bg-layer-1,浅色主题里就是一块白方框。现在它单独一份样式:不挂 .sc-btn、没有底色也没有边框,尺寸照旁边宿主那几颗按钮抄(24px 高、11px 字、圆角 radius-sm、悬停用宿主自己的 --dsw-alias-interactive-bg-hover),所以鼠标划过还有反应,平时平贴在标题栏上。
两套无头测试现在是 42 + 959 条。新增的断言照旧反着验过:把 sc-btn sc-dockbtn 那件旧外衣和旧的 .sc-dockbtn(只有一句对齐)换回去 → 七条红(类名、底色、边框、高、字号、悬停底色,以及「不再套 .sc-btn」那条)。
v0.2.1-alpha.5
文本框不要底
原话:「文本框不要底」。文本框原来填着一层深色(rgba(21,21,23,.72)),压在色块上就把底下的颜色挡住了。现在不填底色,只留文字和一圈淡虚线 —— 空文本框也得看得见、抓得到(它没有内容,没边框就等于没了)。
层序改成:方框 → 文字 → 卡片
原话:「还有层的顺序为,有颜色的方框,文字,其他所有卡片(其他卡片要互斥)」。以前是卡片画在最下面、方框和文字盖在卡片上;现在从下往上是 有颜色的方框 → 文字 → 其他所有卡片(含引用卡),也就是方框和文本框都垫在卡片下面,卡片永远压在最上面、三层互不穿插。DOM 顺序就是叠放顺序,没有一处 z-index 参与。
两套无头测试现在是 171 + 817 条,tests/visual.mjs 的 objects 那一幕同时量三层叠在一起的那个点(摸到的必须是卡片)。新增的那几条照旧反着验过:层序换回旧写法,smoke 两条变红;给 .sc-obj 加一个 z-index,窄那一幕之外的对象幕立刻报「摸到的是 sc-objbody」;把文本框的底色加回来,smoke 一条 + 对象幕一条变红。
v0.2.1-alpha.4
底部那条提示不再越长越高
面板一窄,底下那几句提示就换行,整条状态栏跟着长高、把画布往上挤(原话:「他在界面缩短的时候会抬高」)。现在提示整块最多两行,超出来的从最上面往下藏;右边的「自动排列」「横排」和缩放按钮在它外面,永远完整可见。
一份操作指南
新增 操作指南.md:三个入口在哪、怎么新建和编辑卡片、画布上怎么摆和连线、怎么编组、对齐与改大小、文本框与方框、文档里怎么录台词、引用卡、角色色、快捷键、东西存在哪,最后是几条常见问题。README 开头加了一行链接。
对齐线那条他说不改,所以这版没动它。
两套无头测试现在是 171 + 810 条,tests/visual.mjs 多出「窄面板状态栏」与「宽面板状态栏」两幕(一共十一幕)。新增的那几条照旧反着验过:把提示整块的限高去掉,窄面板那一幕立刻报「状态栏长到 154px 了」(正是他说的毛病);把 align-content:flex-end 去掉,三条变红;把提示整块的类名改掉,smoke 里四条变红。
v0.2.1-alpha.3
alpha.2 之后他在真机上试出来的四条,全是画布上的。
改大小的时候也会对齐
以前只有拖动才吸附,拖右下角手柄改大小的时候不吸。现在改大小时把右下角那两条边也对齐到别的卡片(只动宽高,位置不动)。
对齐的线不再横贯整块画布
以前辅助线铺满整个画布(±4000px 撑开)。现在只画到和它对齐的那张卡片为止,两端用渐变淡掉。
分组有了明确的入口
上一版把「编成一组」只放在批量菜单里 —— 得先框选、或者 shift+右键加选,再右键点选中的卡片,才会出现。他说「并没有看到你的分组功能出现在哪里,右键菜单没有」。现在:
- 单选一张卡片右键:菜单里有「编成一组(先框选、或 shift+右键加选)」,没选够时是灰的,但写清了怎么选
- 选中两张以上再右键:那一项变成可点的「把选中的 N 个编成一组」
- 空白处右键的菜单里也有同一项
自动排列能横着排了
自动排列原来只有一种排法:按连线分层,层往右推进、同一层的卡片上下堆叠。现在多一个横排:同一层的卡片左右并排、层与层往下走。状态栏多一颗「横排」按钮,空白处菜单和批量菜单里也各有一条(批量菜单里那两条会写清「这 N 个」)。
两套无头测试现在是 171 + 801 条。新增的 18 条照旧反着验过:把改大小时的吸附、辅助线的长度、分组的入口、横排这几处改回旧写法,对应断言(7 条)立刻变红。
v0.2.1-alpha.2
alpha.1 之后他要的四件事,都在画布上。
卡片能改宽高了
卡片右下角有个手柄(指着或者选中时才明显),拖着就能改这张卡片的宽高;上下限挡着,拖不出一个 1px 宽的卡片来。右键菜单里多了一项「重置为默认大小」,回到这一档卡片的默认尺寸。
改过的宽高写进 分支.json 里这张卡片的记录(跟坐标、染色同一处),所以跟着项目走、能进 git,换机器也一样。
自动排列按卡片实际的宽高算占位 —— 把一张卡拖宽了,它右边的层会跟着让开(他特意点的「记得要适配自动排列」)。
拖动时会对齐
拖卡片(或文本框 / 方框)的时候,如果它的边或中线和别的卡片差得不多(6px 以内),会自动贴上去,并在对齐的那条线上画一根细辅助线,松手就消失。整组拖动时按整组的包围盒吸。
自动排列可以只排选中的几张
选中两张以上,状态栏那颗按钮变成「自动排列(选中的 N 张)」,点它只排这几张,别的卡片一个都不动;排完还落回它们原来所在的位置附近,不会跳到画布左上角。右键的批量菜单里也有「自动排列这 N 个」。
名字与时间分两行
节点卡以前是「名字在左、时间在右」挤在一行,卡片一窄名字就被省略号截断、时间还贴着它。现在名字一行、时间在下面一行(小字靠左),互不重叠。
两套无头测试现在是 171 + 783 条。这一批新加的断言照样反着验过:把自定义尺寸、吸附范围、只排选中这几条改回旧写法(以及把时间挪回标题那一行),对应断言立刻变红。