@aiquants/spreadsheet 0.15.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +75 -0
- package/README.md +206 -21
- package/dist/index.cjs +8 -8
- package/dist/index.d.cts +107 -5
- package/dist/index.d.ts +107 -5
- package/dist/index.js +4314 -4166
- package/dist/styles/spreadsheet.css +1 -1
- package/dist/styles/spreadsheet.standalone.css +1 -1
- package/dist/tsv.cjs +8 -1
- package/dist/tsv.d.cts +63 -4
- package/dist/tsv.d.ts +63 -4
- package/dist/tsv.js +78 -3
- package/dist/view-BkwCUzTl.cjs +1 -0
- package/dist/view-DycJZi_t.js +41 -0
- package/dist/view.cjs +1 -1
- package/dist/view.d.cts +31 -7
- package/dist/view.d.ts +31 -7
- package/dist/view.js +12 -12
- package/package.json +1 -1
- package/src/Spreadsheet.tsx +110 -14
- package/src/clipboard/tsv.ts +167 -72
- package/src/clipboard/useClipboard.ts +3 -2
- package/src/commands/useCommands.ts +43 -1
- package/src/grid/GridBody.tsx +51 -6
- package/src/header/resizeGates.ts +34 -0
- package/src/header/useHeaderResize.ts +83 -16
- package/src/index.ts +1 -1
- package/src/keyboard/shortcuts.ts +67 -0
- package/src/model/dataAdapter.ts +74 -0
- package/src/overlay/SelectionOverlay.tsx +22 -2
- package/src/styles/spreadsheet.css +193 -123
- package/src/tsv.ts +15 -10
- package/src/view.ts +67 -14
- package/dist/tsv-B6TDExlk.js +0 -91
- package/dist/tsv-BHXbWK5W.cjs +0 -8
|
@@ -16,25 +16,82 @@
|
|
|
16
16
|
box-sizing: border-box;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
/*
|
|
20
|
+
* 色と文字の設計の値 (ホストの上書きの口)。公開の変数 `--aqsp-*` はパッケージが宣言せずに読むだけの入力で、
|
|
21
|
+
* 各値はここの別名 `--_aqsp-*` の中で 1 度だけ読み、明るい既定を 1 度だけ書く — ホストはルートでも祖先 (:root やダークの
|
|
22
|
+
* クラス) でも公開の変数を置けば、グリッドが塗る全ての色が従う。文字と背景の対はどれも 7:1 以上 (WCAG 1.4.6)、値は
|
|
23
|
+
* styles/designTokens.spec.ts が CSS の文字から計算して固定する。
|
|
24
|
+
*/
|
|
19
25
|
.aqsp-root {
|
|
20
|
-
|
|
21
|
-
--
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
--
|
|
25
|
-
--
|
|
26
|
-
--
|
|
27
|
-
--
|
|
26
|
+
/* 帯の寸法 (TS の SPREADSHEET_ROW_HEADER_WIDTH_PX / SPREADSHEET_COLUMN_HEADER_HEIGHT_PX と同値。上書きするホストは箱の計算も揃える) */
|
|
27
|
+
--_aqsp-row-header-width: var(--aqsp-row-header-width, 64px); /* 7 桁行番号 (1,000,000) が 13px tabular-nums で収まる幅 */
|
|
28
|
+
--_aqsp-col-header-height: var(--aqsp-col-header-height, 24px);
|
|
29
|
+
/* 文字の大きさの 1 つの基準 (既定 13px)。ほかの大きさはこの比で導く */
|
|
30
|
+
--_aqsp-font-size: var(--aqsp-font-size, 0.8125rem);
|
|
31
|
+
--_aqsp-font-size-small: calc(var(--_aqsp-font-size) * 12 / 13);
|
|
32
|
+
--_aqsp-font-size-x-small: calc(var(--_aqsp-font-size) * 11 / 13);
|
|
33
|
+
--_aqsp-font-size-glyph: calc(var(--_aqsp-font-size) * 16 / 13);
|
|
34
|
+
--_aqsp-editor-font-size: var(--_aqsp-font-size);
|
|
35
|
+
--_aqsp-surface: var(--aqsp-surface, #ffffff);
|
|
36
|
+
--_aqsp-text: var(--aqsp-text, #1f2937);
|
|
37
|
+
--_aqsp-grid-line: var(--aqsp-grid-line, #e5e7eb);
|
|
38
|
+
--_aqsp-border: var(--aqsp-border, #d1d5db);
|
|
39
|
+
--_aqsp-input-border: var(--aqsp-input-border, #8b95a4);
|
|
40
|
+
--_aqsp-accent: var(--aqsp-accent, #2563eb);
|
|
41
|
+
--_aqsp-header-surface: var(--aqsp-header-surface, #f3f4f6);
|
|
42
|
+
--_aqsp-header-text: var(--aqsp-header-text, #4a5361);
|
|
43
|
+
--_aqsp-header-selected-surface: var(--aqsp-header-selected-surface, #dbeafe);
|
|
44
|
+
--_aqsp-header-selected-text: var(--aqsp-header-selected-text, #1841b4);
|
|
45
|
+
--_aqsp-header-row-surface: var(--aqsp-header-row-surface, #f3f4f6);
|
|
46
|
+
--_aqsp-header-row-text: var(--aqsp-header-row-text, #1f2937);
|
|
47
|
+
--_aqsp-header-row-font-weight: var(--aqsp-header-row-font-weight, 700);
|
|
48
|
+
--_aqsp-link: var(--aqsp-link, #163ba5);
|
|
49
|
+
--_aqsp-note-marker: var(--aqsp-note-marker, #4b5563);
|
|
50
|
+
--_aqsp-comment-marker: var(--aqsp-comment-marker, #eb6406);
|
|
51
|
+
--_aqsp-danger: var(--aqsp-danger, #dc2626);
|
|
52
|
+
--_aqsp-danger-fill: var(--aqsp-danger-fill, rgb(220 38 38 / 0.08));
|
|
53
|
+
--_aqsp-danger-text: var(--aqsp-danger-text, #a41919);
|
|
54
|
+
--_aqsp-danger-surface: var(--aqsp-danger-surface, #fef2f2);
|
|
55
|
+
--_aqsp-selection-fill: var(--aqsp-selection-fill, rgb(59 130 246 / 0.18));
|
|
56
|
+
--_aqsp-selection-border: var(--aqsp-selection-border, rgb(37 99 235 / 0.85));
|
|
57
|
+
--_aqsp-drag-fill: var(--aqsp-drag-fill, rgb(59 130 246 / 0.1));
|
|
58
|
+
--_aqsp-reference: var(--aqsp-reference, #16a24a);
|
|
59
|
+
--_aqsp-reference-fill: var(--aqsp-reference-fill, rgb(22 163 74 / 0.08));
|
|
60
|
+
--_aqsp-fill-preview: var(--aqsp-fill-preview, #16a24a);
|
|
61
|
+
--_aqsp-divider-color: var(--aqsp-divider-color, #858e9d);
|
|
62
|
+
--_aqsp-popover-shadow: var(--aqsp-popover-shadow, 0 1px 2px rgb(0 0 0 / 0.08), 0 8px 24px rgb(0 0 0 / 0.14));
|
|
63
|
+
--_aqsp-note-tip-surface: var(--aqsp-note-tip-surface, #fffbeb);
|
|
64
|
+
--_aqsp-note-tip-border: var(--aqsp-note-tip-border, #f59e0b);
|
|
65
|
+
--_aqsp-note-tip-shadow: var(--aqsp-note-tip-shadow, 0 2px 8px rgb(0 0 0 / 0.12));
|
|
66
|
+
--_aqsp-title-text: var(--aqsp-title-text, #374151);
|
|
67
|
+
--_aqsp-muted-text: var(--aqsp-muted-text, #4e535e);
|
|
68
|
+
--_aqsp-strong-text: var(--aqsp-strong-text, #111827);
|
|
69
|
+
--_aqsp-separator: var(--aqsp-separator, #f3f4f6);
|
|
70
|
+
--_aqsp-button-surface: var(--aqsp-button-surface, #f9fafb);
|
|
71
|
+
--_aqsp-hover-surface: var(--aqsp-hover-surface, #f3f4f6);
|
|
72
|
+
--_aqsp-hover-border: var(--aqsp-hover-border, #9ca3af);
|
|
73
|
+
--_aqsp-primary-surface: var(--aqsp-primary-surface, #134dce);
|
|
74
|
+
--_aqsp-primary-hover-surface: var(--aqsp-primary-hover-surface, #173faf);
|
|
75
|
+
--_aqsp-primary-text: var(--aqsp-primary-text, #ffffff);
|
|
76
|
+
--_aqsp-option-selected-surface: var(--aqsp-option-selected-surface, #dbeafe);
|
|
77
|
+
--_aqsp-option-selected-text: var(--aqsp-option-selected-text, #1e3a8a);
|
|
28
78
|
position: relative;
|
|
29
79
|
width: 100%;
|
|
30
80
|
height: 100%;
|
|
31
81
|
overflow: hidden;
|
|
32
|
-
background:
|
|
33
|
-
color:
|
|
34
|
-
font-size:
|
|
82
|
+
background: var(--_aqsp-surface);
|
|
83
|
+
color: var(--_aqsp-text);
|
|
84
|
+
font-size: var(--_aqsp-font-size);
|
|
35
85
|
line-height: 1;
|
|
36
86
|
}
|
|
37
87
|
|
|
88
|
+
/* 粗いポインタ (タッチ) の編集は 16 CSS px 以上 — iOS は 16px 未満の入力にフォーカスするとページを拡大する */
|
|
89
|
+
@media (pointer: coarse) {
|
|
90
|
+
.aqsp-root {
|
|
91
|
+
--_aqsp-editor-font-size: max(1rem, 16px);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
38
95
|
/*
|
|
39
96
|
* ズームラッパー (v0.3): grid レイアウトの実体。視覚は transform: scale(z)、レイアウトは
|
|
40
97
|
* 100%/z (インライン上書き — z=1 は無スタイルで v0.2 幾何と同一)。origin 0 0 で左上アンカー。
|
|
@@ -48,9 +105,9 @@
|
|
|
48
105
|
*/
|
|
49
106
|
.aqsp-zoom {
|
|
50
107
|
display: grid;
|
|
51
|
-
grid-template-columns: var(--
|
|
108
|
+
grid-template-columns: var(--_aqsp-row-header-width) minmax(0, 1fr);
|
|
52
109
|
/* 横バー行は無い — v0.4 から横バーは VirtualGrid 内在 (§7-1。v0.3 の第 3 行 auto は退役) */
|
|
53
|
-
grid-template-rows: var(--
|
|
110
|
+
grid-template-rows: var(--_aqsp-col-header-height) minmax(0, 1fr);
|
|
54
111
|
width: 100%;
|
|
55
112
|
height: 100%;
|
|
56
113
|
transform-origin: 0 0;
|
|
@@ -59,9 +116,9 @@
|
|
|
59
116
|
.aqsp-corner {
|
|
60
117
|
grid-column: 1;
|
|
61
118
|
grid-row: 1;
|
|
62
|
-
border-right: 1px solid
|
|
63
|
-
border-bottom: 1px solid
|
|
64
|
-
background:
|
|
119
|
+
border-right: 1px solid var(--_aqsp-border);
|
|
120
|
+
border-bottom: 1px solid var(--_aqsp-border);
|
|
121
|
+
background: var(--_aqsp-header-surface);
|
|
65
122
|
}
|
|
66
123
|
|
|
67
124
|
.aqsp-col-header {
|
|
@@ -69,8 +126,8 @@
|
|
|
69
126
|
grid-row: 1;
|
|
70
127
|
position: relative;
|
|
71
128
|
overflow: hidden;
|
|
72
|
-
border-bottom: 1px solid
|
|
73
|
-
background:
|
|
129
|
+
border-bottom: 1px solid var(--_aqsp-border);
|
|
130
|
+
background: var(--_aqsp-header-surface);
|
|
74
131
|
user-select: none;
|
|
75
132
|
}
|
|
76
133
|
|
|
@@ -108,10 +165,10 @@
|
|
|
108
165
|
display: flex;
|
|
109
166
|
align-items: center;
|
|
110
167
|
justify-content: center;
|
|
111
|
-
border-right: 1px solid
|
|
168
|
+
border-right: 1px solid var(--_aqsp-grid-line);
|
|
112
169
|
overflow: hidden;
|
|
113
170
|
white-space: nowrap;
|
|
114
|
-
color:
|
|
171
|
+
color: var(--_aqsp-header-text);
|
|
115
172
|
}
|
|
116
173
|
|
|
117
174
|
.aqsp-row-header {
|
|
@@ -121,8 +178,8 @@
|
|
|
121
178
|
overflow: hidden;
|
|
122
179
|
/* 下端の横バー帯ぶんの margin-bottom は RowHeader.tsx が SPREADSHEET_SCROLLBAR_SIZE_PX (src/view.ts) からインライン
|
|
123
180
|
指定する (TS 定数の単一 SSOT — SelectionOverlay の right / bottom と同方式) */
|
|
124
|
-
border-right: 1px solid
|
|
125
|
-
background:
|
|
181
|
+
border-right: 1px solid var(--_aqsp-border);
|
|
182
|
+
background: var(--_aqsp-header-surface);
|
|
126
183
|
user-select: none;
|
|
127
184
|
}
|
|
128
185
|
|
|
@@ -143,10 +200,10 @@
|
|
|
143
200
|
align-items: center;
|
|
144
201
|
justify-content: flex-end;
|
|
145
202
|
padding-right: 6px;
|
|
146
|
-
border-bottom: 1px solid
|
|
203
|
+
border-bottom: 1px solid var(--_aqsp-grid-line);
|
|
147
204
|
overflow: hidden;
|
|
148
205
|
white-space: nowrap;
|
|
149
|
-
color:
|
|
206
|
+
color: var(--_aqsp-header-text);
|
|
150
207
|
font-variant-numeric: tabular-nums;
|
|
151
208
|
}
|
|
152
209
|
|
|
@@ -178,10 +235,18 @@
|
|
|
178
235
|
display: flex;
|
|
179
236
|
align-items: center;
|
|
180
237
|
padding: 0 4px;
|
|
181
|
-
border-right: 1px solid
|
|
182
|
-
border-bottom: 1px solid
|
|
238
|
+
border-right: 1px solid var(--_aqsp-grid-line);
|
|
239
|
+
border-bottom: 1px solid var(--_aqsp-grid-line);
|
|
183
240
|
white-space: nowrap;
|
|
184
|
-
background:
|
|
241
|
+
background: var(--_aqsp-surface);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/* 見出しの行 (headerRows — role="columnheader") の塗り。書式のインライン style が勝つ (インライン > クラス)。
|
|
245
|
+
リンクの色は後置の [data-aqsp-link] 規則が勝つ (同じ詳細度は出現順) */
|
|
246
|
+
.aqsp-cell[data-aqsp-header-row] {
|
|
247
|
+
background: var(--_aqsp-header-row-surface);
|
|
248
|
+
color: var(--_aqsp-header-row-text);
|
|
249
|
+
font-weight: var(--_aqsp-header-row-font-weight);
|
|
185
250
|
}
|
|
186
251
|
|
|
187
252
|
/*
|
|
@@ -217,14 +282,14 @@
|
|
|
217
282
|
width: 0;
|
|
218
283
|
height: 0;
|
|
219
284
|
border: 5px solid transparent;
|
|
220
|
-
border-top-color:
|
|
221
|
-
border-right-color:
|
|
285
|
+
border-top-color: var(--_aqsp-note-marker);
|
|
286
|
+
border-right-color: var(--_aqsp-note-marker);
|
|
222
287
|
pointer-events: none;
|
|
223
288
|
}
|
|
224
289
|
|
|
225
290
|
.aqsp-cell[data-aqsp-comment]::after {
|
|
226
|
-
border-top-color:
|
|
227
|
-
border-right-color:
|
|
291
|
+
border-top-color: var(--_aqsp-comment-marker);
|
|
292
|
+
border-right-color: var(--_aqsp-comment-marker);
|
|
228
293
|
}
|
|
229
294
|
|
|
230
295
|
.aqsp-cell[data-aqsp-invalid]::before {
|
|
@@ -235,15 +300,15 @@
|
|
|
235
300
|
width: 0;
|
|
236
301
|
height: 0;
|
|
237
302
|
border: 5px solid transparent;
|
|
238
|
-
border-bottom-color:
|
|
239
|
-
border-left-color:
|
|
303
|
+
border-bottom-color: var(--_aqsp-danger);
|
|
304
|
+
border-left-color: var(--_aqsp-danger);
|
|
240
305
|
pointer-events: none;
|
|
241
306
|
}
|
|
242
307
|
|
|
243
308
|
/* リンクセル — 書式の color インライン指定が優先する (インライン > クラス) */
|
|
244
309
|
.aqsp-cell[data-aqsp-link] {
|
|
245
310
|
text-decoration: underline;
|
|
246
|
-
color:
|
|
311
|
+
color: var(--_aqsp-link);
|
|
247
312
|
}
|
|
248
313
|
|
|
249
314
|
/*
|
|
@@ -263,6 +328,12 @@
|
|
|
263
328
|
* (実測済みの既知事故類型)。右オフセット (縦バー幅) は JSX インラインが SSOT (§6.7.2-1)。
|
|
264
329
|
*/
|
|
265
330
|
.aqsp-overlay {
|
|
331
|
+
/* 強調帯の既定パレット (計画 §1.9)。highlightColors prop の layout effect がこの要素へ公開の名前をインラインで書く
|
|
332
|
+
(要素自身の宣言なので祖先の値に勝つ)。書かれていなければ祖先 (ホスト) の値、無ければ既定。毎フレームの repaint は書かない */
|
|
333
|
+
--_aqsp-band-row: var(--aqsp-band-row, #0084ff);
|
|
334
|
+
--_aqsp-band-column: var(--aqsp-band-column, #42ff4f);
|
|
335
|
+
--_aqsp-band-intersection: var(--aqsp-band-intersection, #e1ff00);
|
|
336
|
+
--_aqsp-band-opacity: var(--aqsp-band-opacity, 0.2);
|
|
266
337
|
position: absolute;
|
|
267
338
|
inset: 0;
|
|
268
339
|
overflow: hidden;
|
|
@@ -289,8 +360,8 @@
|
|
|
289
360
|
position: absolute;
|
|
290
361
|
top: 0;
|
|
291
362
|
left: 0;
|
|
292
|
-
background:
|
|
293
|
-
border: 1px solid
|
|
363
|
+
background: var(--_aqsp-selection-fill);
|
|
364
|
+
border: 1px solid var(--_aqsp-selection-border);
|
|
294
365
|
mix-blend-mode: multiply;
|
|
295
366
|
}
|
|
296
367
|
|
|
@@ -298,7 +369,7 @@
|
|
|
298
369
|
position: absolute;
|
|
299
370
|
top: 0;
|
|
300
371
|
left: 0;
|
|
301
|
-
border: 2px solid
|
|
372
|
+
border: 2px solid var(--_aqsp-accent);
|
|
302
373
|
box-sizing: border-box;
|
|
303
374
|
}
|
|
304
375
|
|
|
@@ -306,20 +377,20 @@
|
|
|
306
377
|
position: absolute;
|
|
307
378
|
top: 0;
|
|
308
379
|
left: 0;
|
|
309
|
-
border: 1px solid
|
|
310
|
-
background:
|
|
380
|
+
border: 1px solid var(--_aqsp-accent);
|
|
381
|
+
background: var(--_aqsp-drag-fill);
|
|
311
382
|
}
|
|
312
383
|
|
|
313
384
|
/* 減算ドラッグ (§3.2): writeDragFrame が data-aqsp-drag-mode を set / clear する */
|
|
314
385
|
.aqsp-drag-rect[data-aqsp-drag-mode="subtract"] {
|
|
315
|
-
border: 1px dashed
|
|
316
|
-
background:
|
|
386
|
+
border: 1px dashed var(--_aqsp-danger);
|
|
387
|
+
background: var(--_aqsp-danger-fill);
|
|
317
388
|
}
|
|
318
389
|
|
|
319
390
|
/* 参照ドラッグ (v0.8 ポインティング): 数式へ挿入するレンジの矩形 — 緑の破線 */
|
|
320
391
|
.aqsp-drag-rect[data-aqsp-drag-mode="point"] {
|
|
321
|
-
border: 1px dashed
|
|
322
|
-
background:
|
|
392
|
+
border: 1px dashed var(--_aqsp-reference);
|
|
393
|
+
background: var(--_aqsp-reference-fill);
|
|
323
394
|
}
|
|
324
395
|
|
|
325
396
|
/*
|
|
@@ -331,20 +402,20 @@
|
|
|
331
402
|
position: absolute;
|
|
332
403
|
top: 0;
|
|
333
404
|
left: 0;
|
|
334
|
-
opacity: var(--
|
|
405
|
+
opacity: var(--_aqsp-band-opacity);
|
|
335
406
|
pointer-events: none;
|
|
336
407
|
}
|
|
337
408
|
|
|
338
409
|
.aqsp-band[data-aqsp-band="row"] {
|
|
339
|
-
background: var(--
|
|
410
|
+
background: var(--_aqsp-band-row);
|
|
340
411
|
}
|
|
341
412
|
|
|
342
413
|
.aqsp-band[data-aqsp-band="column"] {
|
|
343
|
-
background: var(--
|
|
414
|
+
background: var(--_aqsp-band-column);
|
|
344
415
|
}
|
|
345
416
|
|
|
346
417
|
.aqsp-band[data-aqsp-band="intersection"] {
|
|
347
|
-
background: var(--
|
|
418
|
+
background: var(--_aqsp-band-intersection);
|
|
348
419
|
}
|
|
349
420
|
|
|
350
421
|
/*
|
|
@@ -378,7 +449,9 @@
|
|
|
378
449
|
left: var(--aqsp-clip-outset-left, -3px);
|
|
379
450
|
/* 二色 (青 / 白 — Excel 同型): 透明コマだと下地が青リング / 青塗りのとき「青一色の実線」に
|
|
380
451
|
化けてアンツが知覚不能になる (R2(H) 画素実測)。白コマはどの下地でも必ず対比を作る */
|
|
381
|
-
background-image:
|
|
452
|
+
background-image:
|
|
453
|
+
linear-gradient(90deg, var(--_aqsp-accent) 50%, var(--_aqsp-surface) 50%), linear-gradient(90deg, var(--_aqsp-accent) 50%, var(--_aqsp-surface) 50%), linear-gradient(0deg, var(--_aqsp-accent) 50%, var(--_aqsp-surface) 50%),
|
|
454
|
+
linear-gradient(0deg, var(--_aqsp-accent) 50%, var(--_aqsp-surface) 50%);
|
|
382
455
|
background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;
|
|
383
456
|
background-size:
|
|
384
457
|
8px 2px,
|
|
@@ -430,8 +503,7 @@
|
|
|
430
503
|
top: 0;
|
|
431
504
|
height: 100%;
|
|
432
505
|
cursor: col-resize;
|
|
433
|
-
background: repeating-linear-gradient(90deg,
|
|
434
|
-
opacity: 0.7;
|
|
506
|
+
background: repeating-linear-gradient(90deg, var(--_aqsp-accent) 0 1px, transparent 1px 3px);
|
|
435
507
|
}
|
|
436
508
|
|
|
437
509
|
.aqsp-row-header .aqsp-unhide-marker {
|
|
@@ -439,8 +511,7 @@
|
|
|
439
511
|
left: 0;
|
|
440
512
|
right: 0;
|
|
441
513
|
cursor: row-resize;
|
|
442
|
-
background: repeating-linear-gradient(180deg,
|
|
443
|
-
opacity: 0.7;
|
|
514
|
+
background: repeating-linear-gradient(180deg, var(--_aqsp-accent) 0 1px, transparent 1px 3px);
|
|
444
515
|
}
|
|
445
516
|
|
|
446
517
|
/* §7.2 リサイズガイドライン (overlay 常設ノード — writer が寸法 / 位置を直書き) */
|
|
@@ -448,7 +519,7 @@
|
|
|
448
519
|
position: absolute;
|
|
449
520
|
top: 0;
|
|
450
521
|
left: 0;
|
|
451
|
-
background:
|
|
522
|
+
background: var(--_aqsp-accent);
|
|
452
523
|
pointer-events: none;
|
|
453
524
|
}
|
|
454
525
|
|
|
@@ -459,8 +530,8 @@
|
|
|
459
530
|
left: 0;
|
|
460
531
|
width: 6px;
|
|
461
532
|
height: 6px;
|
|
462
|
-
background:
|
|
463
|
-
border: 1px solid
|
|
533
|
+
background: var(--_aqsp-accent);
|
|
534
|
+
border: 1px solid var(--_aqsp-surface);
|
|
464
535
|
box-sizing: content-box;
|
|
465
536
|
pointer-events: auto;
|
|
466
537
|
cursor: crosshair;
|
|
@@ -471,7 +542,7 @@
|
|
|
471
542
|
position: absolute;
|
|
472
543
|
top: 0;
|
|
473
544
|
left: 0;
|
|
474
|
-
border: 1px dashed
|
|
545
|
+
border: 1px dashed var(--_aqsp-fill-preview);
|
|
475
546
|
}
|
|
476
547
|
|
|
477
548
|
/*
|
|
@@ -518,8 +589,8 @@
|
|
|
518
589
|
/* ヘッダー強調 (§6.8-4 — ドラッグ中は凍結 = 既知特性) */
|
|
519
590
|
.aqsp-col-header-cell[data-aqsp-in-selection],
|
|
520
591
|
.aqsp-row-header-cell[data-aqsp-in-selection] {
|
|
521
|
-
background:
|
|
522
|
-
color:
|
|
592
|
+
background: var(--_aqsp-header-selected-surface);
|
|
593
|
+
color: var(--_aqsp-header-selected-text);
|
|
523
594
|
font-weight: 600;
|
|
524
595
|
}
|
|
525
596
|
|
|
@@ -567,15 +638,15 @@
|
|
|
567
638
|
z-index: 1;
|
|
568
639
|
box-sizing: border-box;
|
|
569
640
|
padding: 0 4px; /* 上パディングはオーバーレイが行高から動的直書き — セル flex 中央と一致 */
|
|
570
|
-
background:
|
|
571
|
-
color:
|
|
572
|
-
caret-color:
|
|
641
|
+
background: var(--_aqsp-surface);
|
|
642
|
+
color: var(--_aqsp-text);
|
|
643
|
+
caret-color: var(--_aqsp-text);
|
|
573
644
|
font-family: inherit;
|
|
574
|
-
font-size:
|
|
645
|
+
font-size: var(--_aqsp-editor-font-size);
|
|
575
646
|
line-height: 1;
|
|
576
647
|
white-space: pre;
|
|
577
648
|
overflow: hidden;
|
|
578
|
-
outline: 2px solid
|
|
649
|
+
outline: 2px solid var(--_aqsp-accent);
|
|
579
650
|
outline-offset: -2px;
|
|
580
651
|
/* 編集中だけキャレット (I ビーム) — 編集セルの文字上でキャレットを出す (利用者要望)。非編集は
|
|
581
652
|
.aqsp-row / 待機シンクとも既定矢印なので、カーソル値が変わるのは編集開始の 1 回のみ。旧
|
|
@@ -590,7 +661,7 @@
|
|
|
590
661
|
* エディタが input / 処理済みキー / selectionchange で書く (漸進的・非依存)。遷移は書かない
|
|
591
662
|
*/
|
|
592
663
|
.aqsp-sink[data-aqsp-pointing] {
|
|
593
|
-
caret-color:
|
|
664
|
+
caret-color: var(--_aqsp-reference);
|
|
594
665
|
}
|
|
595
666
|
|
|
596
667
|
/*
|
|
@@ -640,15 +711,13 @@
|
|
|
640
711
|
width: 320px;
|
|
641
712
|
max-width: 320px;
|
|
642
713
|
overflow: hidden;
|
|
643
|
-
border: 1px solid
|
|
714
|
+
border: 1px solid var(--_aqsp-border);
|
|
644
715
|
border-radius: 8px;
|
|
645
|
-
background:
|
|
646
|
-
color:
|
|
647
|
-
box-shadow:
|
|
648
|
-
0 1px 2px rgb(0 0 0 / 0.08),
|
|
649
|
-
0 8px 24px rgb(0 0 0 / 0.14);
|
|
716
|
+
background: var(--_aqsp-surface);
|
|
717
|
+
color: var(--_aqsp-text);
|
|
718
|
+
box-shadow: var(--_aqsp-popover-shadow);
|
|
650
719
|
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans JP", sans-serif;
|
|
651
|
-
font-size:
|
|
720
|
+
font-size: var(--_aqsp-font-size);
|
|
652
721
|
line-height: 1.4;
|
|
653
722
|
text-align: start;
|
|
654
723
|
white-space: normal;
|
|
@@ -658,15 +727,15 @@
|
|
|
658
727
|
|
|
659
728
|
/* 消費者レンダラ (autofocus 対象なし) はフレーム自体が焦点着地点 — 内側リングで所在を示す */
|
|
660
729
|
.aqsp-popover:focus-visible {
|
|
661
|
-
outline: 2px solid
|
|
730
|
+
outline: 2px solid var(--_aqsp-accent);
|
|
662
731
|
outline-offset: -2px;
|
|
663
732
|
}
|
|
664
733
|
|
|
665
734
|
/* ホバー tip のフレーム (kind はフレームの data-aqsp-popover-frame、中身の data-aqsp-popover は部品側のフック) */
|
|
666
735
|
.aqsp-popover[data-aqsp-popover-frame="note-tip"] {
|
|
667
|
-
border-color:
|
|
668
|
-
background:
|
|
669
|
-
box-shadow:
|
|
736
|
+
border-color: var(--_aqsp-note-tip-border);
|
|
737
|
+
background: var(--_aqsp-note-tip-surface);
|
|
738
|
+
box-shadow: var(--_aqsp-note-tip-shadow);
|
|
670
739
|
}
|
|
671
740
|
|
|
672
741
|
/*
|
|
@@ -706,7 +775,7 @@
|
|
|
706
775
|
* 下書きが跳ねる)。forced-colors では border が CanvasText へ再着色されて太い縦線として残る
|
|
707
776
|
*/
|
|
708
777
|
[data-aqsp-popover][data-aqsp-popover-rejected] {
|
|
709
|
-
border-inline-start: 3px solid
|
|
778
|
+
border-inline-start: 3px solid var(--_aqsp-danger);
|
|
710
779
|
padding-inline-start: 9px;
|
|
711
780
|
}
|
|
712
781
|
|
|
@@ -715,14 +784,14 @@
|
|
|
715
784
|
align-items: baseline;
|
|
716
785
|
gap: 6px;
|
|
717
786
|
margin: 0 0 6px;
|
|
718
|
-
font-size:
|
|
787
|
+
font-size: var(--_aqsp-font-size-small);
|
|
719
788
|
font-weight: 600;
|
|
720
|
-
color:
|
|
789
|
+
color: var(--_aqsp-title-text);
|
|
721
790
|
}
|
|
722
791
|
|
|
723
792
|
.aqsp-popover-count {
|
|
724
793
|
font-weight: 400;
|
|
725
|
-
color:
|
|
794
|
+
color: var(--_aqsp-muted-text);
|
|
726
795
|
}
|
|
727
796
|
|
|
728
797
|
/*
|
|
@@ -736,9 +805,10 @@
|
|
|
736
805
|
width: 100%;
|
|
737
806
|
margin: 0;
|
|
738
807
|
padding: 5px 8px;
|
|
739
|
-
|
|
808
|
+
/* 入力欄の境界は欄を見分ける唯一の手がかり — 3:1 (WCAG 1.4.11) の専用の値 */
|
|
809
|
+
border: 1px solid var(--_aqsp-input-border);
|
|
740
810
|
border-radius: 6px;
|
|
741
|
-
background:
|
|
811
|
+
background: var(--_aqsp-surface);
|
|
742
812
|
color: inherit;
|
|
743
813
|
font: inherit;
|
|
744
814
|
line-height: 1.4;
|
|
@@ -770,31 +840,31 @@
|
|
|
770
840
|
|
|
771
841
|
.aqsp-popover-textarea:focus-visible,
|
|
772
842
|
.aqsp-popover-input:focus-visible {
|
|
773
|
-
border-color:
|
|
774
|
-
outline: 2px solid
|
|
843
|
+
border-color: var(--_aqsp-accent);
|
|
844
|
+
outline: 2px solid var(--_aqsp-accent);
|
|
775
845
|
outline-offset: -1px;
|
|
776
846
|
}
|
|
777
847
|
|
|
778
848
|
.aqsp-popover-textarea[aria-invalid="true"],
|
|
779
849
|
.aqsp-popover-input[aria-invalid="true"] {
|
|
780
|
-
border-color:
|
|
850
|
+
border-color: var(--_aqsp-danger);
|
|
781
851
|
}
|
|
782
852
|
|
|
783
853
|
.aqsp-popover-textarea[aria-invalid="true"]:focus-visible,
|
|
784
854
|
.aqsp-popover-input[aria-invalid="true"]:focus-visible {
|
|
785
|
-
border-color:
|
|
786
|
-
outline-color:
|
|
855
|
+
border-color: var(--_aqsp-danger);
|
|
856
|
+
outline-color: var(--_aqsp-danger);
|
|
787
857
|
}
|
|
788
858
|
|
|
789
859
|
/* ヒント (Escape の挙動 / 拒否の再試行案内) — 12px の控えめ色、拒否時は赤 */
|
|
790
860
|
.aqsp-popover-hint {
|
|
791
861
|
margin: 4px 0 0;
|
|
792
|
-
font-size:
|
|
793
|
-
color:
|
|
862
|
+
font-size: var(--_aqsp-font-size-small);
|
|
863
|
+
color: var(--_aqsp-muted-text);
|
|
794
864
|
}
|
|
795
865
|
|
|
796
866
|
[data-aqsp-popover-rejected] .aqsp-popover-hint {
|
|
797
|
-
color:
|
|
867
|
+
color: var(--_aqsp-danger-text);
|
|
798
868
|
}
|
|
799
869
|
|
|
800
870
|
/* リンク編集の欄 (ラベル + 入力) */
|
|
@@ -807,8 +877,8 @@
|
|
|
807
877
|
}
|
|
808
878
|
|
|
809
879
|
.aqsp-popover-field-label {
|
|
810
|
-
font-size:
|
|
811
|
-
color:
|
|
880
|
+
font-size: var(--_aqsp-font-size-small);
|
|
881
|
+
color: var(--_aqsp-muted-text);
|
|
812
882
|
}
|
|
813
883
|
|
|
814
884
|
/* 操作列: 主操作が先頭、閉じる (×) は margin-inline-start: auto で終端へ */
|
|
@@ -828,24 +898,24 @@
|
|
|
828
898
|
height: 26px;
|
|
829
899
|
margin: 0;
|
|
830
900
|
padding: 0 10px;
|
|
831
|
-
border: 1px solid
|
|
901
|
+
border: 1px solid var(--_aqsp-border);
|
|
832
902
|
border-radius: 6px;
|
|
833
|
-
background:
|
|
834
|
-
color:
|
|
903
|
+
background: var(--_aqsp-button-surface);
|
|
904
|
+
color: var(--_aqsp-text);
|
|
835
905
|
font: inherit;
|
|
836
|
-
font-size:
|
|
906
|
+
font-size: var(--_aqsp-font-size-small);
|
|
837
907
|
font-weight: 500;
|
|
838
908
|
line-height: 1;
|
|
839
909
|
cursor: pointer;
|
|
840
910
|
}
|
|
841
911
|
|
|
842
912
|
.aqsp-popover-button:not(:disabled):hover {
|
|
843
|
-
border-color:
|
|
844
|
-
background:
|
|
913
|
+
border-color: var(--_aqsp-hover-border);
|
|
914
|
+
background: var(--_aqsp-hover-surface);
|
|
845
915
|
}
|
|
846
916
|
|
|
847
917
|
.aqsp-popover-button:focus-visible {
|
|
848
|
-
outline: 2px solid
|
|
918
|
+
outline: 2px solid var(--_aqsp-accent);
|
|
849
919
|
outline-offset: 1px;
|
|
850
920
|
}
|
|
851
921
|
|
|
@@ -857,15 +927,15 @@
|
|
|
857
927
|
/* 主操作 (保存 / 投稿 — 部品の役割属性で判別) */
|
|
858
928
|
.aqsp-popover-button[data-aqsp-popover-save],
|
|
859
929
|
.aqsp-popover-button[data-aqsp-popover-post] {
|
|
860
|
-
border-color:
|
|
861
|
-
background:
|
|
862
|
-
color:
|
|
930
|
+
border-color: var(--_aqsp-primary-surface);
|
|
931
|
+
background: var(--_aqsp-primary-surface);
|
|
932
|
+
color: var(--_aqsp-primary-text);
|
|
863
933
|
}
|
|
864
934
|
|
|
865
935
|
.aqsp-popover-button[data-aqsp-popover-save]:not(:disabled):hover,
|
|
866
936
|
.aqsp-popover-button[data-aqsp-popover-post]:not(:disabled):hover {
|
|
867
|
-
border-color:
|
|
868
|
-
background:
|
|
937
|
+
border-color: var(--_aqsp-primary-hover-surface);
|
|
938
|
+
background: var(--_aqsp-primary-hover-surface);
|
|
869
939
|
}
|
|
870
940
|
|
|
871
941
|
/* 閉じる (×): 終端のゴースト正方形 */
|
|
@@ -876,15 +946,15 @@
|
|
|
876
946
|
padding: 0;
|
|
877
947
|
border-color: transparent;
|
|
878
948
|
background: transparent;
|
|
879
|
-
color:
|
|
880
|
-
font-size:
|
|
949
|
+
color: var(--_aqsp-muted-text);
|
|
950
|
+
font-size: var(--_aqsp-font-size-glyph);
|
|
881
951
|
font-weight: 400;
|
|
882
952
|
}
|
|
883
953
|
|
|
884
954
|
.aqsp-popover-button[data-aqsp-popover-close]:not(:disabled):hover {
|
|
885
955
|
border-color: transparent;
|
|
886
|
-
background:
|
|
887
|
-
color:
|
|
956
|
+
background: var(--_aqsp-hover-surface);
|
|
957
|
+
color: var(--_aqsp-text);
|
|
888
958
|
}
|
|
889
959
|
|
|
890
960
|
/* コメントスレッド: 可変領域 (縮んでスクロール)。項目は薄い区切り線、先頭は線なし */
|
|
@@ -901,7 +971,7 @@
|
|
|
901
971
|
|
|
902
972
|
.aqsp-popover-comment-item {
|
|
903
973
|
padding: 6px 0;
|
|
904
|
-
border-top: 1px solid
|
|
974
|
+
border-top: 1px solid var(--_aqsp-separator);
|
|
905
975
|
}
|
|
906
976
|
|
|
907
977
|
.aqsp-popover-comment-item:first-child {
|
|
@@ -910,15 +980,15 @@
|
|
|
910
980
|
}
|
|
911
981
|
|
|
912
982
|
.aqsp-popover-comment-author {
|
|
913
|
-
font-size:
|
|
983
|
+
font-size: var(--_aqsp-font-size-small);
|
|
914
984
|
font-weight: 600;
|
|
915
|
-
color:
|
|
985
|
+
color: var(--_aqsp-strong-text);
|
|
916
986
|
}
|
|
917
987
|
|
|
918
988
|
.aqsp-popover-comment-time {
|
|
919
989
|
margin-inline-start: 6px;
|
|
920
|
-
font-size:
|
|
921
|
-
color:
|
|
990
|
+
font-size: var(--_aqsp-font-size-x-small);
|
|
991
|
+
color: var(--_aqsp-muted-text);
|
|
922
992
|
font-variant-numeric: tabular-nums;
|
|
923
993
|
}
|
|
924
994
|
|
|
@@ -951,23 +1021,23 @@
|
|
|
951
1021
|
}
|
|
952
1022
|
|
|
953
1023
|
.aqsp-popover-option:hover {
|
|
954
|
-
background:
|
|
1024
|
+
background: var(--_aqsp-hover-surface);
|
|
955
1025
|
}
|
|
956
1026
|
|
|
957
1027
|
.aqsp-popover-option[aria-selected="true"] {
|
|
958
|
-
background:
|
|
959
|
-
color:
|
|
1028
|
+
background: var(--_aqsp-option-selected-surface);
|
|
1029
|
+
color: var(--_aqsp-option-selected-text);
|
|
960
1030
|
}
|
|
961
1031
|
|
|
962
1032
|
.aqsp-popover-option:focus-visible {
|
|
963
|
-
outline: 2px solid
|
|
1033
|
+
outline: 2px solid var(--_aqsp-accent);
|
|
964
1034
|
outline-offset: -2px;
|
|
965
1035
|
}
|
|
966
1036
|
|
|
967
1037
|
.aqsp-popover-empty {
|
|
968
1038
|
padding: 6px 8px;
|
|
969
|
-
font-size:
|
|
970
|
-
color:
|
|
1039
|
+
font-size: var(--_aqsp-font-size-small);
|
|
1040
|
+
color: var(--_aqsp-muted-text);
|
|
971
1041
|
}
|
|
972
1042
|
|
|
973
1043
|
/* 検証メッセージ (受動 — role="status"): 閉じるボタンは右上へ絶対配置、本文はその幅を空ける */
|
|
@@ -994,11 +1064,11 @@
|
|
|
994
1064
|
|
|
995
1065
|
/* 拒否メッセージ (strict 検証の拒否再提示): 淡い赤地 + 赤い見出し (アクセント線は共通規則) */
|
|
996
1066
|
.aqsp-popover-message[data-aqsp-popover-rejected] {
|
|
997
|
-
background:
|
|
1067
|
+
background: var(--_aqsp-danger-surface);
|
|
998
1068
|
}
|
|
999
1069
|
|
|
1000
1070
|
.aqsp-popover-message[data-aqsp-popover-rejected] .aqsp-popover-title {
|
|
1001
|
-
color:
|
|
1071
|
+
color: var(--_aqsp-danger-text);
|
|
1002
1072
|
}
|
|
1003
1073
|
|
|
1004
1074
|
/*
|
|
@@ -1031,15 +1101,15 @@
|
|
|
1031
1101
|
/*
|
|
1032
1102
|
* v0.9 凍結分割線 (計画 §2.4 — ADR-20 / ADR-24): 全凍結境界の強い Excel / Sheets 風の線。
|
|
1033
1103
|
* consumer 面は CSS 変数 2 つだけ (--aqsp-divider-color / --aqsp-divider-width — パッケージは
|
|
1034
|
-
* 読むだけで書き手は consumer
|
|
1035
|
-
*
|
|
1104
|
+
* 読むだけで書き手は consumer スタイルシート単独。色の既定は .aqsp-root の別名 --_aqsp-divider-color が 1 度だけ書く)。
|
|
1105
|
+
* 既定は 2px の #9ca3af (gray-400 — 既存全罫線より 1 段濃い)。width 0px は逃げ道 — 象限別 fill 断片の継ぎ目が再露出し forced-colors も
|
|
1036
1106
|
* 無描画 (意図的、README / 分冊 05 §8 登記)。位置 (leading 縁 0 / trailing 縁 0) と長さは
|
|
1037
1107
|
* 各セグメントの静的インライン幾何 + ホストクリップが供給し、このブロックは太さと色だけを持つ。
|
|
1038
1108
|
* pointer-events: none — バーは不活性で、リサイズの operand は帯側隣接ストリップ (ADR-20)。
|
|
1039
1109
|
*/
|
|
1040
1110
|
.aqsp-freeze-divider {
|
|
1041
1111
|
position: absolute;
|
|
1042
|
-
background: var(--
|
|
1112
|
+
background: var(--_aqsp-divider-color);
|
|
1043
1113
|
pointer-events: none;
|
|
1044
1114
|
}
|
|
1045
1115
|
|