@threadlabs/looma 0.1.9 → 0.1.10
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/dist/{chunk-UMFO4QNN.js → chunk-DYIMEQY7.js} +27 -26
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/looma.cjs.js +1 -1
- package/dist/cjs/ui-affordance-scope.cjs.entry.js +152 -0
- package/dist/cjs/ui-avatar-group.cjs.entry.js +1 -1
- package/dist/cjs/ui-avatar.cjs.entry.js +1 -1
- package/dist/cjs/ui-badge.cjs.entry.js +1 -1
- package/dist/cjs/ui-button.cjs.entry.js +1 -1
- package/dist/cjs/ui-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/ui-context-menu.cjs.entry.js +1 -1
- package/dist/cjs/ui-dialog.cjs.entry.js +1 -1
- package/dist/cjs/ui-disclosure.cjs.entry.js +1 -1
- package/dist/cjs/ui-floating-action-button.cjs.entry.js +1 -1
- package/dist/cjs/ui-form-field.cjs.entry.js +1 -1
- package/dist/cjs/ui-icon-button.cjs.entry.js +4 -2
- package/dist/cjs/ui-input.cjs.entry.js +1 -1
- package/dist/cjs/ui-menu-item.cjs.entry.js +1 -1
- package/dist/cjs/ui-menu.cjs.entry.js +1 -1
- package/dist/cjs/ui-popover.cjs.entry.js +1 -1
- package/dist/cjs/ui-radio-group.cjs.entry.js +1 -1
- package/dist/cjs/ui-radio.cjs.entry.js +1 -1
- package/dist/cjs/ui-search-result-row.cjs.entry.js +1 -1
- package/dist/cjs/ui-search-shell.cjs.entry.js +1 -1
- package/dist/cjs/ui-select.cjs.entry.js +1 -1
- package/dist/cjs/ui-switch.cjs.entry.js +2 -2
- package/dist/cjs/ui-tabs.cjs.entry.js +1 -1
- package/dist/cjs/ui-textarea.cjs.entry.js +1 -1
- package/dist/cjs/ui-toast-region.cjs.entry.js +1 -1
- package/dist/cjs/ui-tooltip.cjs.entry.js +1 -1
- package/dist/cjs/ui-top-bar.cjs.entry.js +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/ui-affordance-scope/ui-affordance-scope.css +8 -0
- package/dist/collection/components/ui-affordance-scope/ui-affordance-scope.js +70 -0
- package/dist/collection/components/ui-avatar/ui-avatar.js +1 -1
- package/dist/collection/components/ui-avatar-group/ui-avatar-group.js +1 -1
- package/dist/collection/components/ui-badge/ui-badge.js +1 -1
- package/dist/collection/components/ui-button/ui-button.js +1 -1
- package/dist/collection/components/ui-checkbox/ui-checkbox.js +1 -1
- package/dist/collection/components/ui-context-menu/ui-context-menu.js +1 -1
- package/dist/collection/components/ui-dialog/ui-dialog.js +1 -1
- package/dist/collection/components/ui-disclosure/ui-disclosure.js +1 -1
- package/dist/collection/components/ui-floating-action-button/ui-floating-action-button.js +1 -1
- package/dist/collection/components/ui-form-field/ui-form-field.js +1 -1
- package/dist/collection/components/ui-icon-button/ui-icon-button.css +53 -0
- package/dist/collection/components/ui-icon-button/ui-icon-button.js +23 -1
- package/dist/collection/components/ui-input/ui-input.js +1 -1
- package/dist/collection/components/ui-menu/ui-menu.js +1 -1
- package/dist/collection/components/ui-menu-item/ui-menu-item.js +1 -1
- package/dist/collection/components/ui-popover/ui-popover.js +1 -1
- package/dist/collection/components/ui-radio/ui-radio.js +1 -1
- package/dist/collection/components/ui-radio-group/ui-radio-group.js +1 -1
- package/dist/collection/components/ui-search-result-row/ui-search-result-row.js +1 -1
- package/dist/collection/components/ui-search-shell/ui-search-shell.js +1 -1
- package/dist/collection/components/ui-select/ui-select.js +1 -1
- package/dist/collection/components/ui-switch/ui-switch.js +2 -2
- package/dist/collection/components/ui-tabs/ui-tabs.js +1 -1
- package/dist/collection/components/ui-textarea/ui-textarea.js +1 -1
- package/dist/collection/components/ui-toast-region/ui-toast-region.js +1 -1
- package/dist/collection/components/ui-tooltip/ui-tooltip.js +1 -1
- package/dist/collection/components/ui-top-bar/ui-top-bar.js +1 -1
- package/dist/collection/overlay/positioning.js +135 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +1 -1
- package/dist/components/{p-gHC_Ei92.js → p-QiwSQmKJ.js} +1 -1
- package/dist/components/ui-affordance-scope.d.ts +11 -0
- package/dist/components/ui-affordance-scope.js +1 -0
- package/dist/components/ui-avatar-group.js +1 -1
- package/dist/components/ui-avatar.js +1 -1
- package/dist/components/ui-badge.js +1 -1
- package/dist/components/ui-button.js +1 -1
- package/dist/components/ui-checkbox.js +1 -1
- package/dist/components/ui-context-menu.js +1 -1
- package/dist/components/ui-dialog.js +1 -1
- package/dist/components/ui-disclosure.js +1 -1
- package/dist/components/ui-floating-action-button.js +1 -1
- package/dist/components/ui-form-field.js +1 -1
- package/dist/components/ui-icon-button.js +1 -1
- package/dist/components/ui-input.js +1 -1
- package/dist/components/ui-menu-item.js +1 -1
- package/dist/components/ui-menu.js +1 -1
- package/dist/components/ui-popover.js +1 -1
- package/dist/components/ui-radio-group.js +1 -1
- package/dist/components/ui-radio.js +1 -1
- package/dist/components/ui-search-result-row.js +1 -1
- package/dist/components/ui-search-shell.js +1 -1
- package/dist/components/ui-select.js +1 -1
- package/dist/components/ui-switch.js +1 -1
- package/dist/components/ui-tabs.js +1 -1
- package/dist/components/ui-textarea.js +1 -1
- package/dist/components/ui-toast-region.js +1 -1
- package/dist/components/ui-tooltip.js +1 -1
- package/dist/components/ui-top-bar.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/looma.js +1 -1
- package/dist/esm/ui-affordance-scope.entry.js +150 -0
- package/dist/esm/ui-avatar-group.entry.js +1 -1
- package/dist/esm/ui-avatar.entry.js +1 -1
- package/dist/esm/ui-badge.entry.js +1 -1
- package/dist/esm/ui-button.entry.js +1 -1
- package/dist/esm/ui-checkbox.entry.js +1 -1
- package/dist/esm/ui-context-menu.entry.js +1 -1
- package/dist/esm/ui-dialog.entry.js +1 -1
- package/dist/esm/ui-disclosure.entry.js +1 -1
- package/dist/esm/ui-floating-action-button.entry.js +1 -1
- package/dist/esm/ui-form-field.entry.js +1 -1
- package/dist/esm/ui-icon-button.entry.js +4 -2
- package/dist/esm/ui-input.entry.js +1 -1
- package/dist/esm/ui-menu-item.entry.js +1 -1
- package/dist/esm/ui-menu.entry.js +1 -1
- package/dist/esm/ui-popover.entry.js +1 -1
- package/dist/esm/ui-radio-group.entry.js +1 -1
- package/dist/esm/ui-radio.entry.js +1 -1
- package/dist/esm/ui-search-result-row.entry.js +1 -1
- package/dist/esm/ui-search-shell.entry.js +1 -1
- package/dist/esm/ui-select.entry.js +1 -1
- package/dist/esm/ui-switch.entry.js +2 -2
- package/dist/esm/ui-tabs.entry.js +1 -1
- package/dist/esm/ui-textarea.entry.js +1 -1
- package/dist/esm/ui-toast-region.entry.js +1 -1
- package/dist/esm/ui-tooltip.entry.js +1 -1
- package/dist/esm/ui-top-bar.entry.js +1 -1
- package/dist/index.cjs +306 -29
- package/dist/index.d.cts +42 -1
- package/dist/index.d.ts +42 -1
- package/dist/index.js +127 -2
- package/dist/looma/looma.esm.js +1 -1
- package/dist/looma/p-0198bb21.entry.js +1 -0
- package/dist/looma/{p-d39905f9.entry.js → p-051f578c.entry.js} +1 -1
- package/dist/looma/{p-c14233bc.entry.js → p-0584a051.entry.js} +1 -1
- package/dist/looma/{p-cb15e8e3.entry.js → p-078f9fb8.entry.js} +1 -1
- package/dist/looma/{p-dc857ed4.entry.js → p-0f45c5f0.entry.js} +1 -1
- package/dist/looma/{p-201243dc.entry.js → p-1681b218.entry.js} +1 -1
- package/dist/looma/{p-41d62a83.entry.js → p-2ae73d5b.entry.js} +1 -1
- package/dist/looma/{p-5a645647.entry.js → p-2ed7e241.entry.js} +1 -1
- package/dist/looma/{p-5717a4c4.entry.js → p-34417499.entry.js} +1 -1
- package/dist/looma/{p-610b2eca.entry.js → p-4b422d40.entry.js} +1 -1
- package/dist/looma/{p-15e619fd.entry.js → p-5ba9d496.entry.js} +1 -1
- package/dist/looma/p-5d4713a6.entry.js +1 -0
- package/dist/looma/{p-96de71ad.entry.js → p-624ba086.entry.js} +1 -1
- package/dist/looma/{p-01425a37.entry.js → p-65c25c94.entry.js} +1 -1
- package/dist/looma/{p-66a203a1.entry.js → p-7e94d90d.entry.js} +1 -1
- package/dist/looma/p-8c09c724.entry.js +1 -0
- package/dist/looma/{p-4c54d489.entry.js → p-8d5adb17.entry.js} +1 -1
- package/dist/looma/p-95340a13.entry.js +1 -0
- package/dist/looma/{p-07167650.entry.js → p-95cd639d.entry.js} +1 -1
- package/dist/looma/{p-03f0594b.entry.js → p-96f73d07.entry.js} +1 -1
- package/dist/looma/p-a33522a2.entry.js +1 -0
- package/dist/looma/{p-ee31c7b4.entry.js → p-a5127c7d.entry.js} +1 -1
- package/dist/looma/{p-dfcb2cca.entry.js → p-a9f46811.entry.js} +1 -1
- package/dist/looma/{p-93ce1c62.entry.js → p-b7aa4488.entry.js} +1 -1
- package/dist/looma/{p-5df568d8.entry.js → p-c6721aba.entry.js} +1 -1
- package/dist/looma/{p-3ecd7120.entry.js → p-d273b857.entry.js} +1 -1
- package/dist/looma/{p-24d7aa5b.entry.js → p-ed5abf6d.entry.js} +1 -1
- package/dist/types/components/ui-affordance-scope/ui-affordance-scope.d.ts +11 -0
- package/dist/types/components/ui-icon-button/ui-icon-button.d.ts +2 -0
- package/dist/types/components.d.ts +37 -0
- package/dist/types/overlay/positioning.d.ts +40 -0
- package/dist/ui-affordance-scope.entry-ZKUJ5AT4.js +144 -0
- package/dist/{ui-avatar-group.entry-S6DFXYB7.js → ui-avatar-group.entry-I4XM44BI.js} +2 -2
- package/dist/{ui-avatar.entry-MDRGXLWQ.js → ui-avatar.entry-ZZAMZAVF.js} +2 -2
- package/dist/{ui-badge.entry-RLL4YKPD.js → ui-badge.entry-DQXYMC3E.js} +2 -2
- package/dist/{ui-button.entry-IYMYLBFY.js → ui-button.entry-DM7BUZLI.js} +2 -2
- package/dist/{ui-checkbox.entry-K5FGWDG2.js → ui-checkbox.entry-X3PPWKIJ.js} +2 -2
- package/dist/{ui-context-menu.entry-KWXXJ3ZV.js → ui-context-menu.entry-KAW4NIFE.js} +2 -2
- package/dist/{ui-dialog.entry-RKHLQLQM.js → ui-dialog.entry-D23SNXWB.js} +2 -2
- package/dist/{ui-disclosure.entry-FRZKGEJP.js → ui-disclosure.entry-DOG6JZU7.js} +2 -2
- package/dist/{ui-floating-action-button.entry-BH4FDSTL.js → ui-floating-action-button.entry-VPQ7VBFS.js} +2 -2
- package/dist/{ui-form-field.entry-3CR2KSUH.js → ui-form-field.entry-SYZ6XSCG.js} +2 -2
- package/dist/ui-icon-button.entry-2SZBOIH5.js +26 -0
- package/dist/{ui-input.entry-5PQR37HS.js → ui-input.entry-PALICYLZ.js} +2 -2
- package/dist/{ui-menu-item.entry-2T3QWHLK.js → ui-menu-item.entry-W6TEFP5Y.js} +2 -2
- package/dist/{ui-menu.entry-Q5Z5YO5P.js → ui-menu.entry-7NARDV6S.js} +2 -2
- package/dist/{ui-popover.entry-4P2NWWAY.js → ui-popover.entry-ZXYHLDTP.js} +2 -2
- package/dist/{ui-radio-group.entry-QKPRNV26.js → ui-radio-group.entry-XEUKMD6J.js} +2 -2
- package/dist/{ui-radio.entry-O4DOMFNU.js → ui-radio.entry-4ABBHDLN.js} +2 -2
- package/dist/{ui-search-result-row.entry-BR5O3UCH.js → ui-search-result-row.entry-3HHM7OV4.js} +2 -2
- package/dist/{ui-search-shell.entry-2ZBP7SA3.js → ui-search-shell.entry-PJTFOBPT.js} +2 -2
- package/dist/{ui-select.entry-L75HQY72.js → ui-select.entry-A3RI5XCG.js} +2 -2
- package/dist/{ui-switch.entry-L5QWD3BT.js → ui-switch.entry-JNRS2YTN.js} +3 -3
- package/dist/{ui-tabs.entry-KWRD6Y7J.js → ui-tabs.entry-MQ4V5XCP.js} +2 -2
- package/dist/{ui-textarea.entry-JC3HPEBS.js → ui-textarea.entry-JJXJQZQR.js} +2 -2
- package/dist/{ui-toast-region.entry-C6KK4OM4.js → ui-toast-region.entry-STHVESL5.js} +2 -2
- package/dist/{ui-tooltip.entry-G5EOCWP4.js → ui-tooltip.entry-4W7CRIKI.js} +2 -2
- package/dist/{ui-top-bar.entry-YLKVAQFH.js → ui-top-bar.entry-WM3SS2HR.js} +2 -2
- package/editor/{chunk-OK5NARJI.js → chunk-4VGVEHU2.js} +244 -70
- package/editor/{chunk-NJ2KAMS2.js → chunk-CCDKTWYA.js} +70 -34
- package/editor/extensions/index.d.ts +2 -2
- package/editor/extensions/index.js +1 -1
- package/editor/index.d.ts +1 -1
- package/editor/index.js +7 -2
- package/editor/table-overlay-jjvdARTJ.d.ts +95 -0
- package/editor/ui.d.ts +1 -1
- package/editor/ui.js +7 -2
- package/editor.css +232 -73
- package/layout/index.cjs +5 -0
- package/layout/index.css +22 -3
- package/layout/index.js +5 -0
- package/layout.css +24 -3
- package/package.json +1 -1
- package/tokens.css +9 -0
- package/vue/{chunk-5ELJ4UPG.js → chunk-YN4IUYVY.js} +14 -2
- package/vue/editor/index.js +94 -37
- package/vue/index.d.ts +5 -1
- package/vue/index.js +3 -1
- package/dist/looma/p-754cfff3.entry.js +0 -1
- package/dist/looma/p-940a931a.entry.js +0 -1
- package/dist/looma/p-941221ad.entry.js +0 -1
- package/dist/looma/p-955fb814.entry.js +0 -1
- package/dist/ui-icon-button.entry-LB54U25M.js +0 -24
- package/editor/table-overlay-Bq0F5xPg.d.ts +0 -64
package/editor/index.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
measureTableOverlayGeometry,
|
|
3
|
+
resolveTableCellAt
|
|
4
|
+
} from "./chunk-4VGVEHU2.js";
|
|
2
5
|
import {
|
|
3
6
|
LoomaSlashCommand,
|
|
4
7
|
LoomaTable,
|
|
@@ -19,7 +22,7 @@ import {
|
|
|
19
22
|
setActiveTableCellAlignment,
|
|
20
23
|
setActiveTableCellBackground,
|
|
21
24
|
shouldShowTextFormattingToolbar
|
|
22
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-CCDKTWYA.js";
|
|
23
26
|
import {
|
|
24
27
|
TABLE_CELL_BACKGROUND_OPTIONS,
|
|
25
28
|
TABLE_CELL_BACKGROUND_PRESETS
|
|
@@ -42,7 +45,9 @@ export {
|
|
|
42
45
|
handleTableAction,
|
|
43
46
|
handleTableOverlayAction,
|
|
44
47
|
insertTableAtRange,
|
|
48
|
+
measureTableOverlayGeometry,
|
|
45
49
|
normalizeActiveTableColumnWidths,
|
|
50
|
+
resolveTableCellAt,
|
|
46
51
|
setActiveTableCellAlignment,
|
|
47
52
|
setActiveTableCellBackground,
|
|
48
53
|
shouldShowTextFormattingToolbar
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
declare const TABLE_CELL_BACKGROUND_PRESETS: {
|
|
2
|
+
readonly none: null;
|
|
3
|
+
readonly gray: "#f3f4f6";
|
|
4
|
+
readonly yellow: "#fef3c7";
|
|
5
|
+
readonly blue: "#dbeafe";
|
|
6
|
+
readonly green: "#dcfce7";
|
|
7
|
+
readonly red: "#fee2e2";
|
|
8
|
+
};
|
|
9
|
+
declare const TABLE_CELL_BACKGROUND_OPTIONS: readonly [{
|
|
10
|
+
readonly action: "background-none";
|
|
11
|
+
readonly label: "Default";
|
|
12
|
+
readonly value: null;
|
|
13
|
+
readonly swatch: null;
|
|
14
|
+
}, {
|
|
15
|
+
readonly action: "background-gray";
|
|
16
|
+
readonly label: "Gray";
|
|
17
|
+
readonly value: "#f3f4f6";
|
|
18
|
+
readonly swatch: "#f3f4f6";
|
|
19
|
+
}, {
|
|
20
|
+
readonly action: "background-yellow";
|
|
21
|
+
readonly label: "Yellow";
|
|
22
|
+
readonly value: "#fef3c7";
|
|
23
|
+
readonly swatch: "#fef3c7";
|
|
24
|
+
}, {
|
|
25
|
+
readonly action: "background-blue";
|
|
26
|
+
readonly label: "Blue";
|
|
27
|
+
readonly value: "#dbeafe";
|
|
28
|
+
readonly swatch: "#dbeafe";
|
|
29
|
+
}, {
|
|
30
|
+
readonly action: "background-green";
|
|
31
|
+
readonly label: "Green";
|
|
32
|
+
readonly value: "#dcfce7";
|
|
33
|
+
readonly swatch: "#dcfce7";
|
|
34
|
+
}, {
|
|
35
|
+
readonly action: "background-red";
|
|
36
|
+
readonly label: "Red";
|
|
37
|
+
readonly value: "#fee2e2";
|
|
38
|
+
readonly swatch: "#fee2e2";
|
|
39
|
+
}];
|
|
40
|
+
type TableCellBackgroundAction = typeof TABLE_CELL_BACKGROUND_OPTIONS[number]["action"];
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* ui-editor-table-context-menu — web component for table cell context menu.
|
|
44
|
+
* Emits custom events for each action; the adapter (Vue/React) wires Tiptap commands.
|
|
45
|
+
* Domain-neutral: no Tiptap dependency.
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
type TableContextMenuAction = "align-left" | "align-center" | "align-right" | TableCellBackgroundAction | "add-row-before" | "add-row-after" | "add-column-before" | "add-column-after" | "delete-row" | "delete-column" | "delete-table" | "clear-cells" | "merge-cells" | "split-cell";
|
|
49
|
+
interface TableContextMenuActionEventDetail {
|
|
50
|
+
action: TableContextMenuAction;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* ui-editor-table-overlay — anticipatory table affordances.
|
|
55
|
+
* Domain-neutral: it emits intent while the adapter owns editor commands.
|
|
56
|
+
*/
|
|
57
|
+
type TableInsertionAction = "add-row-before" | "add-row-after" | "add-column-before" | "add-column-after";
|
|
58
|
+
type TableOverlayAction = TableInsertionAction | "select-row" | "select-column" | "open-cell-menu";
|
|
59
|
+
type TableOverlayActionEventDetail = {
|
|
60
|
+
action: TableInsertionAction;
|
|
61
|
+
boundaryIndex: number;
|
|
62
|
+
} | {
|
|
63
|
+
action: "select-row" | "select-column";
|
|
64
|
+
rowIndex: number;
|
|
65
|
+
columnIndex: number;
|
|
66
|
+
} | {
|
|
67
|
+
action: "open-cell-menu";
|
|
68
|
+
rowIndex: number;
|
|
69
|
+
columnIndex: number;
|
|
70
|
+
anchor: {
|
|
71
|
+
left: number;
|
|
72
|
+
top: number;
|
|
73
|
+
right: number;
|
|
74
|
+
bottom: number;
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
interface ActiveCellRect {
|
|
78
|
+
left: number;
|
|
79
|
+
top: number;
|
|
80
|
+
width: number;
|
|
81
|
+
height: number;
|
|
82
|
+
rowIndex: number;
|
|
83
|
+
columnIndex: number;
|
|
84
|
+
}
|
|
85
|
+
interface TableOverlayGeometry {
|
|
86
|
+
rowBoundaries: number[];
|
|
87
|
+
columnBoundaries: number[];
|
|
88
|
+
activeCell: ActiveCellRect | null;
|
|
89
|
+
}
|
|
90
|
+
/** Resolves a logical table coordinate, including cells that span rows or columns. */
|
|
91
|
+
declare function resolveTableCellAt(table: HTMLTableElement, rowIndex: number, columnIndex: number): HTMLTableCellElement | null;
|
|
92
|
+
/** Measures real rendered boundaries, including non-uniform and merged cells. */
|
|
93
|
+
declare function measureTableOverlayGeometry(table: HTMLTableElement, activeCell: HTMLTableCellElement | null): TableOverlayGeometry;
|
|
94
|
+
|
|
95
|
+
export { type ActiveCellRect as A, TABLE_CELL_BACKGROUND_OPTIONS as T, TABLE_CELL_BACKGROUND_PRESETS as a, type TableCellBackgroundAction as b, type TableContextMenuAction as c, type TableContextMenuActionEventDetail as d, type TableInsertionAction as e, type TableOverlayAction as f, type TableOverlayActionEventDetail as g, type TableOverlayGeometry as h, measureTableOverlayGeometry as m, resolveTableCellAt as r };
|
package/editor/ui.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { T as TABLE_CELL_BACKGROUND_OPTIONS, a as TABLE_CELL_BACKGROUND_PRESETS, b as TableCellBackgroundAction, c as TableContextMenuAction, d as TableContextMenuActionEventDetail, e as
|
|
1
|
+
export { A as ActiveCellRect, T as TABLE_CELL_BACKGROUND_OPTIONS, a as TABLE_CELL_BACKGROUND_PRESETS, b as TableCellBackgroundAction, c as TableContextMenuAction, d as TableContextMenuActionEventDetail, e as TableInsertionAction, f as TableOverlayAction, g as TableOverlayActionEventDetail, h as TableOverlayGeometry, d as TableToolbarActionEventDetail, m as measureTableOverlayGeometry, r as resolveTableCellAt } from './table-overlay-jjvdARTJ.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* ui-editor-insert-table-grid — web component for picking table dimensions.
|
package/editor/ui.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
measureTableOverlayGeometry,
|
|
3
|
+
resolveTableCellAt
|
|
4
|
+
} from "./chunk-4VGVEHU2.js";
|
|
2
5
|
import {
|
|
3
6
|
TABLE_CELL_BACKGROUND_OPTIONS,
|
|
4
7
|
TABLE_CELL_BACKGROUND_PRESETS
|
|
5
8
|
} from "./chunk-CX4QDKSV.js";
|
|
6
9
|
export {
|
|
7
10
|
TABLE_CELL_BACKGROUND_OPTIONS,
|
|
8
|
-
TABLE_CELL_BACKGROUND_PRESETS
|
|
11
|
+
TABLE_CELL_BACKGROUND_PRESETS,
|
|
12
|
+
measureTableOverlayGeometry,
|
|
13
|
+
resolveTableCellAt
|
|
9
14
|
};
|
package/editor.css
CHANGED
|
@@ -878,10 +878,19 @@ ui-editor-toolbar[floating] {
|
|
|
878
878
|
}
|
|
879
879
|
|
|
880
880
|
/* Table overlay controls */
|
|
881
|
+
ui-editor-table-overlay {
|
|
882
|
+
display: block;
|
|
883
|
+
width: 100%;
|
|
884
|
+
height: 100%;
|
|
885
|
+
overflow: visible;
|
|
886
|
+
pointer-events: none;
|
|
887
|
+
}
|
|
888
|
+
|
|
881
889
|
.ui-editor-table-overlay {
|
|
882
890
|
position: relative;
|
|
883
891
|
width: 100%;
|
|
884
892
|
height: 100%;
|
|
893
|
+
overflow: visible;
|
|
885
894
|
pointer-events: none;
|
|
886
895
|
}
|
|
887
896
|
|
|
@@ -902,16 +911,9 @@ ui-editor-toolbar[floating] {
|
|
|
902
911
|
}
|
|
903
912
|
|
|
904
913
|
.ui-editor-table-overlay__control {
|
|
905
|
-
pointer-events: none;
|
|
906
914
|
position: absolute;
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
cursor: pointer;
|
|
910
|
-
outline: none;
|
|
911
|
-
transition:
|
|
912
|
-
opacity var(--ui-motion-fast, 120ms) ease,
|
|
913
|
-
transform var(--ui-motion-fast, 120ms) ease,
|
|
914
|
-
color var(--ui-motion-fast, 120ms) ease;
|
|
915
|
+
z-index: 1;
|
|
916
|
+
pointer-events: none;
|
|
915
917
|
}
|
|
916
918
|
|
|
917
919
|
.ui-editor-table-overlay__handle {
|
|
@@ -919,100 +921,213 @@ ui-editor-toolbar[floating] {
|
|
|
919
921
|
display: inline-flex;
|
|
920
922
|
align-items: center;
|
|
921
923
|
justify-content: center;
|
|
922
|
-
width:
|
|
923
|
-
height:
|
|
924
|
-
|
|
925
|
-
border
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
924
|
+
width: 24px;
|
|
925
|
+
height: 24px;
|
|
926
|
+
padding: 0;
|
|
927
|
+
border: 1px solid var(--ui-affordance-near-color, var(--ui-border-strong, #c8c8c4));
|
|
928
|
+
border-radius: var(--ui-radius-round, 999px);
|
|
929
|
+
background: color-mix(in srgb, var(--ui-surface-elevated, #fff) 96%, transparent);
|
|
930
|
+
color: var(--ui-affordance-near-color, var(--ui-text-secondary, #5c5c5c));
|
|
931
|
+
font: inherit;
|
|
932
|
+
font-size: 16px;
|
|
929
933
|
line-height: 1;
|
|
930
|
-
box-shadow: var(--ui-shadow-
|
|
934
|
+
box-shadow: var(--ui-shadow-xs, 0 1px 2px rgb(0 0 0 / 0.05));
|
|
931
935
|
opacity: 0;
|
|
936
|
+
scale: 0.72;
|
|
932
937
|
transition:
|
|
933
|
-
opacity var(--ui-motion-fast, 120ms) ease,
|
|
934
|
-
|
|
935
|
-
color var(--ui-motion-fast, 120ms) ease
|
|
938
|
+
opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
|
|
939
|
+
scale var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
|
|
940
|
+
color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
|
|
941
|
+
background-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
|
|
942
|
+
border-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
|
|
936
943
|
pointer-events: auto;
|
|
944
|
+
cursor: pointer;
|
|
937
945
|
}
|
|
938
946
|
|
|
939
|
-
.ui-editor-table-
|
|
947
|
+
.ui-editor-table-overlay__handle[data-ui-proximity="near"],
|
|
948
|
+
.ui-editor-table-overlay__control[data-active="true"] .ui-editor-table-overlay__handle,
|
|
949
|
+
.ui-editor-table-overlay__handle:focus-visible {
|
|
940
950
|
opacity: 1;
|
|
941
|
-
|
|
942
|
-
|
|
951
|
+
scale: 1;
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
.ui-editor-table-overlay__control[data-active="true"] .ui-editor-table-overlay__handle,
|
|
955
|
+
.ui-editor-table-overlay__handle:focus-visible {
|
|
956
|
+
border-color: var(--ui-affordance-direct-color, var(--ui-accent-solid, #5b55d6));
|
|
957
|
+
background: var(--ui-affordance-direct-color, var(--ui-accent-solid, #5b55d6));
|
|
958
|
+
color: var(--ui-text-on-accent, #fff);
|
|
959
|
+
box-shadow: var(--ui-shadow-sm, 0 1px 3px rgb(0 0 0 / 0.1));
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
.ui-editor-table-overlay__handle:focus-visible,
|
|
963
|
+
.ui-editor-table-overlay__selector:focus-visible,
|
|
964
|
+
.ui-editor-table-overlay__cell-menu:focus-visible {
|
|
965
|
+
outline: 2px solid var(--ui-focus-ring, #5b55d6);
|
|
966
|
+
outline-offset: 2px;
|
|
943
967
|
}
|
|
944
968
|
|
|
945
969
|
.ui-editor-table-overlay__control--row {
|
|
946
|
-
pointer-events: auto;
|
|
947
970
|
left: 0;
|
|
948
|
-
right: 0;
|
|
949
|
-
top: calc(var(--ui-editor-table-overlay-boundary-index) * 100% / var(--ui-editor-table-overlay-segments));
|
|
950
971
|
width: 100%;
|
|
951
|
-
height:
|
|
952
|
-
transform: translateY(-50%);
|
|
972
|
+
height: 0;
|
|
953
973
|
}
|
|
954
974
|
|
|
955
975
|
.ui-editor-table-overlay__control--row .ui-editor-table-overlay__handle {
|
|
956
|
-
top:
|
|
957
|
-
left:
|
|
958
|
-
transform: translateY(-50%);
|
|
976
|
+
top: -12px;
|
|
977
|
+
left: -36px;
|
|
959
978
|
}
|
|
960
979
|
|
|
961
|
-
.ui-editor-table-overlay__control--
|
|
962
|
-
|
|
980
|
+
.ui-editor-table-overlay__control--col {
|
|
981
|
+
top: 0;
|
|
982
|
+
width: 0;
|
|
983
|
+
height: 100%;
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
.ui-editor-table-overlay__control--col .ui-editor-table-overlay__handle {
|
|
987
|
+
top: -36px;
|
|
988
|
+
left: -12px;
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
.ui-editor-table-overlay__line {
|
|
963
992
|
position: absolute;
|
|
964
|
-
|
|
965
|
-
right: 0;
|
|
966
|
-
top: 50%;
|
|
967
|
-
height: 2px;
|
|
968
|
-
transform: translateY(-50%);
|
|
969
|
-
background: color-mix(in srgb, var(--ui-accent, #3b82f6) 45%, transparent);
|
|
970
|
-
border-radius: 999px;
|
|
993
|
+
background: var(--ui-affordance-direct-color, var(--ui-accent-solid, #5b55d6));
|
|
971
994
|
opacity: 0;
|
|
972
|
-
transition:
|
|
973
|
-
opacity var(--ui-motion-fast, 120ms) ease,
|
|
974
|
-
background var(--ui-motion-fast, 120ms) ease;
|
|
995
|
+
transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
|
|
975
996
|
}
|
|
976
997
|
|
|
977
|
-
.ui-editor-table-overlay__control--row
|
|
978
|
-
|
|
979
|
-
|
|
998
|
+
.ui-editor-table-overlay__control--row .ui-editor-table-overlay__line {
|
|
999
|
+
inset: -1px 0 auto;
|
|
1000
|
+
height: 2px;
|
|
980
1001
|
}
|
|
981
1002
|
|
|
982
|
-
.ui-editor-table-overlay__control--col {
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
left: calc(var(--ui-editor-table-overlay-boundary-index) * 100% / var(--ui-editor-table-overlay-segments));
|
|
986
|
-
width: 16px;
|
|
987
|
-
height: 100%;
|
|
988
|
-
transform: translateX(-50%);
|
|
1003
|
+
.ui-editor-table-overlay__control--col .ui-editor-table-overlay__line {
|
|
1004
|
+
inset: 0 auto 0 -1px;
|
|
1005
|
+
width: 2px;
|
|
989
1006
|
}
|
|
990
1007
|
|
|
991
|
-
.ui-editor-table-overlay__control
|
|
992
|
-
|
|
993
|
-
left: 50%;
|
|
994
|
-
transform: translateX(-50%);
|
|
1008
|
+
.ui-editor-table-overlay__control[data-active="true"] .ui-editor-table-overlay__line {
|
|
1009
|
+
opacity: 0.8;
|
|
995
1010
|
}
|
|
996
1011
|
|
|
997
|
-
.ui-editor-table-
|
|
998
|
-
content: "";
|
|
1012
|
+
.ui-editor-table-overlay__guide {
|
|
999
1013
|
position: absolute;
|
|
1000
|
-
|
|
1001
|
-
|
|
1014
|
+
width: var(--ui-affordance-guide-size, 4px);
|
|
1015
|
+
height: var(--ui-affordance-guide-size, 4px);
|
|
1016
|
+
border-radius: var(--ui-radius-round, 999px);
|
|
1017
|
+
background: var(--ui-affordance-guide-color, var(--ui-border-strong, #c8c8c4));
|
|
1018
|
+
opacity: var(--ui-affordance-guide-opacity, 0.42);
|
|
1019
|
+
transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
.ui-editor-table-overlay__control--row .ui-editor-table-overlay__guide {
|
|
1023
|
+
left: -10px;
|
|
1024
|
+
top: -2px;
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
.ui-editor-table-overlay__control--col .ui-editor-table-overlay__guide {
|
|
1028
|
+
left: -2px;
|
|
1029
|
+
top: -10px;
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
.ui-editor-table-overlay__control:has(.ui-editor-table-overlay__handle[data-ui-proximity="near"]) .ui-editor-table-overlay__guide,
|
|
1033
|
+
.ui-editor-table-overlay__control[data-active="true"] .ui-editor-table-overlay__guide {
|
|
1034
|
+
opacity: 0;
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
.ui-editor-table-overlay__tooltip {
|
|
1038
|
+
position: absolute;
|
|
1039
|
+
z-index: 2;
|
|
1040
|
+
top: calc(100% + 6px);
|
|
1002
1041
|
left: 50%;
|
|
1003
|
-
width:
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
border-radius:
|
|
1042
|
+
width: max-content;
|
|
1043
|
+
max-width: 14rem;
|
|
1044
|
+
padding: var(--ui-space-1, 4px) var(--ui-space-2, 8px);
|
|
1045
|
+
border-radius: var(--ui-radius-1, 4px);
|
|
1046
|
+
background: var(--ui-text-primary, #1a1a1a);
|
|
1047
|
+
color: var(--ui-surface-elevated, #fff);
|
|
1048
|
+
font-size: var(--ui-font-size-xs, 0.75rem);
|
|
1049
|
+
font-weight: var(--ui-font-medium, 500);
|
|
1050
|
+
line-height: var(--ui-line-height-md, 1.4);
|
|
1007
1051
|
opacity: 0;
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1052
|
+
transform: translateX(-50%);
|
|
1053
|
+
transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
|
|
1054
|
+
pointer-events: none;
|
|
1011
1055
|
}
|
|
1012
1056
|
|
|
1013
|
-
.ui-editor-table-overlay__control--
|
|
1057
|
+
.ui-editor-table-overlay__control--row .ui-editor-table-overlay__tooltip {
|
|
1058
|
+
top: 50%;
|
|
1059
|
+
left: auto;
|
|
1060
|
+
right: calc(100% + 8px);
|
|
1061
|
+
transform: translateY(-50%);
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
.ui-editor-table-overlay__control[data-active="true"] .ui-editor-table-overlay__tooltip,
|
|
1065
|
+
.ui-editor-table-overlay__handle:focus-visible .ui-editor-table-overlay__tooltip {
|
|
1014
1066
|
opacity: 1;
|
|
1015
|
-
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
.ui-editor-table-overlay__selector,
|
|
1070
|
+
.ui-editor-table-overlay__cell-menu {
|
|
1071
|
+
position: absolute;
|
|
1072
|
+
z-index: 2;
|
|
1073
|
+
display: inline-flex;
|
|
1074
|
+
align-items: center;
|
|
1075
|
+
justify-content: center;
|
|
1076
|
+
padding: 0;
|
|
1077
|
+
border: 1px solid var(--ui-border-strong, #c8c8c4);
|
|
1078
|
+
background: var(--ui-surface-elevated, #fff);
|
|
1079
|
+
color: var(--ui-text-secondary, #5c5c5c);
|
|
1080
|
+
box-shadow: var(--ui-shadow-xs, 0 1px 2px rgb(0 0 0 / 0.05));
|
|
1081
|
+
pointer-events: auto;
|
|
1082
|
+
cursor: pointer;
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1085
|
+
.ui-editor-table-overlay__selector:hover,
|
|
1086
|
+
.ui-editor-table-overlay__cell-menu:hover {
|
|
1087
|
+
border-color: var(--ui-affordance-direct-color, var(--ui-accent-solid, #5b55d6));
|
|
1088
|
+
color: var(--ui-affordance-direct-color, var(--ui-accent-solid, #5b55d6));
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
.ui-editor-table-overlay__selector {
|
|
1092
|
+
border-radius: var(--ui-radius-round, 999px);
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1095
|
+
.ui-editor-table-overlay__selector span {
|
|
1096
|
+
display: block;
|
|
1097
|
+
border-radius: var(--ui-radius-round, 999px);
|
|
1098
|
+
background: currentColor;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
.ui-editor-table-overlay__selector--row {
|
|
1102
|
+
left: -26px;
|
|
1103
|
+
width: 14px;
|
|
1104
|
+
height: 30px;
|
|
1105
|
+
transform: translateY(-50%);
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
.ui-editor-table-overlay__selector--row span {
|
|
1109
|
+
width: 4px;
|
|
1110
|
+
height: 16px;
|
|
1111
|
+
}
|
|
1112
|
+
|
|
1113
|
+
.ui-editor-table-overlay__selector--column {
|
|
1114
|
+
top: -26px;
|
|
1115
|
+
width: 30px;
|
|
1116
|
+
height: 14px;
|
|
1117
|
+
transform: translateX(-50%);
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
.ui-editor-table-overlay__selector--column span {
|
|
1121
|
+
width: 16px;
|
|
1122
|
+
height: 4px;
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
.ui-editor-table-overlay__cell-menu {
|
|
1126
|
+
width: 24px;
|
|
1127
|
+
height: 24px;
|
|
1128
|
+
border-radius: var(--ui-radius-1, 4px);
|
|
1129
|
+
font-size: 16px;
|
|
1130
|
+
line-height: 1;
|
|
1016
1131
|
}
|
|
1017
1132
|
|
|
1018
1133
|
.ProseMirror .tableWrapper {
|
|
@@ -1068,10 +1183,54 @@ ui-editor-toolbar[floating] {
|
|
|
1068
1183
|
|
|
1069
1184
|
.ProseMirror .column-resize-handle {
|
|
1070
1185
|
position: absolute;
|
|
1071
|
-
|
|
1186
|
+
z-index: 3;
|
|
1187
|
+
right: -5px;
|
|
1072
1188
|
top: 0;
|
|
1073
1189
|
bottom: 0;
|
|
1074
|
-
width:
|
|
1190
|
+
width: 10px;
|
|
1075
1191
|
cursor: col-resize;
|
|
1076
|
-
background:
|
|
1192
|
+
background: transparent;
|
|
1193
|
+
touch-action: none;
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
.ProseMirror .column-resize-handle::after {
|
|
1197
|
+
content: "";
|
|
1198
|
+
position: absolute;
|
|
1199
|
+
inset-block: 0;
|
|
1200
|
+
inset-inline-start: 4px;
|
|
1201
|
+
width: 2px;
|
|
1202
|
+
border-radius: var(--ui-radius-round, 999px);
|
|
1203
|
+
background: color-mix(in srgb, var(--ui-affordance-near-color, var(--ui-border-strong, #c8c8c4)) 72%, transparent);
|
|
1204
|
+
transition:
|
|
1205
|
+
width var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
|
|
1206
|
+
background-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
.ProseMirror .column-resize-handle:hover::after,
|
|
1210
|
+
.ProseMirror.resize-cursor .column-resize-handle::after {
|
|
1211
|
+
width: 3px;
|
|
1212
|
+
background: var(--ui-affordance-direct-color, var(--ui-accent-solid, #5b55d6));
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
.ProseMirror .column-resize-handle::before {
|
|
1216
|
+
content: "Drag to resize column";
|
|
1217
|
+
position: absolute;
|
|
1218
|
+
z-index: 4;
|
|
1219
|
+
top: -32px;
|
|
1220
|
+
left: 50%;
|
|
1221
|
+
width: max-content;
|
|
1222
|
+
padding: var(--ui-space-1, 4px) var(--ui-space-2, 8px);
|
|
1223
|
+
border-radius: var(--ui-radius-1, 4px);
|
|
1224
|
+
background: var(--ui-text-primary, #1a1a1a);
|
|
1225
|
+
color: var(--ui-surface-elevated, #fff);
|
|
1226
|
+
font-size: var(--ui-font-size-xs, 0.75rem);
|
|
1227
|
+
line-height: var(--ui-line-height-md, 1.4);
|
|
1228
|
+
opacity: 0;
|
|
1229
|
+
transform: translateX(-50%);
|
|
1230
|
+
transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
|
|
1231
|
+
pointer-events: none;
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
.ProseMirror .column-resize-handle:hover::before {
|
|
1235
|
+
opacity: 1;
|
|
1077
1236
|
}
|
package/layout/index.cjs
CHANGED
|
@@ -295,9 +295,14 @@ if (typeof HTMLElement !== "undefined") {
|
|
|
295
295
|
if (!this.resizeHandle) {
|
|
296
296
|
this.resizeHandle = document.createElement("div");
|
|
297
297
|
this.resizeHandle.setAttribute("data-ui-sidebar-resizer", "");
|
|
298
|
+
this.resizeHandle.setAttribute("data-ui-affordance", "resize");
|
|
298
299
|
this.resizeHandle.setAttribute("role", "separator");
|
|
299
300
|
this.resizeHandle.setAttribute("aria-orientation", "vertical");
|
|
300
301
|
this.resizeHandle.setAttribute("tabindex", "0");
|
|
302
|
+
const guide = document.createElement("span");
|
|
303
|
+
guide.setAttribute("data-ui-guide", "");
|
|
304
|
+
guide.setAttribute("aria-hidden", "true");
|
|
305
|
+
this.resizeHandle.append(guide);
|
|
301
306
|
this.append(this.resizeHandle);
|
|
302
307
|
}
|
|
303
308
|
this.resizeHandle.setAttribute("aria-label", this.getAttribute("resize-label") || "Resize sidebar");
|
package/layout/index.css
CHANGED
|
@@ -297,12 +297,31 @@
|
|
|
297
297
|
inset-block: 0;
|
|
298
298
|
inset-inline-start: 3px;
|
|
299
299
|
inline-size: 2px;
|
|
300
|
-
background: transparent;
|
|
301
|
-
|
|
300
|
+
background: color-mix(in srgb, var(--ui-affordance-guide-color, var(--ui-border-strong)) 45%, transparent);
|
|
301
|
+
opacity: var(--ui-affordance-guide-opacity, 0.42);
|
|
302
|
+
transition: background-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease), opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
|
|
303
|
+
}
|
|
304
|
+
ui-sidebar > [data-ui-sidebar-resizer] > [data-ui-guide] {
|
|
305
|
+
position: absolute;
|
|
306
|
+
inset-block-start: 50%;
|
|
307
|
+
inset-inline-start: 50%;
|
|
308
|
+
inline-size: 6px;
|
|
309
|
+
block-size: 22px;
|
|
310
|
+
border: 1px solid var(--ui-border-strong, #c8c8c4);
|
|
311
|
+
border-radius: var(--ui-radius-round, 999px);
|
|
312
|
+
background: var(--ui-surface-elevated, #fff);
|
|
313
|
+
opacity: 0;
|
|
314
|
+
transform: translate(-50%, -50%);
|
|
315
|
+
transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
|
|
316
|
+
pointer-events: none;
|
|
302
317
|
}
|
|
303
318
|
ui-sidebar > [data-ui-sidebar-resizer]:hover::after,
|
|
304
319
|
ui-sidebar > [data-ui-sidebar-resizer]:focus-visible::after {
|
|
305
|
-
background: var(--ui-color-focus, Highlight);
|
|
320
|
+
background: var(--ui-affordance-direct-color, var(--ui-accent-solid, var(--ui-color-focus, Highlight)));
|
|
321
|
+
opacity: 1;
|
|
322
|
+
}
|
|
323
|
+
ui-sidebar > [data-ui-sidebar-resizer]:is(:hover, :focus-visible) > [data-ui-guide] {
|
|
324
|
+
opacity: 1;
|
|
306
325
|
}
|
|
307
326
|
ui-reel {
|
|
308
327
|
--ui-reel-gap: var(--ui-space-4, 1rem);
|
package/layout/index.js
CHANGED
|
@@ -271,9 +271,14 @@ if (typeof HTMLElement !== "undefined") {
|
|
|
271
271
|
if (!this.resizeHandle) {
|
|
272
272
|
this.resizeHandle = document.createElement("div");
|
|
273
273
|
this.resizeHandle.setAttribute("data-ui-sidebar-resizer", "");
|
|
274
|
+
this.resizeHandle.setAttribute("data-ui-affordance", "resize");
|
|
274
275
|
this.resizeHandle.setAttribute("role", "separator");
|
|
275
276
|
this.resizeHandle.setAttribute("aria-orientation", "vertical");
|
|
276
277
|
this.resizeHandle.setAttribute("tabindex", "0");
|
|
278
|
+
const guide = document.createElement("span");
|
|
279
|
+
guide.setAttribute("data-ui-guide", "");
|
|
280
|
+
guide.setAttribute("aria-hidden", "true");
|
|
281
|
+
this.resizeHandle.append(guide);
|
|
277
282
|
this.append(this.resizeHandle);
|
|
278
283
|
}
|
|
279
284
|
this.resizeHandle.setAttribute("aria-label", this.getAttribute("resize-label") || "Resize sidebar");
|
package/layout.css
CHANGED
|
@@ -218,12 +218,33 @@
|
|
|
218
218
|
inset-block: 0;
|
|
219
219
|
inset-inline-start: 3px;
|
|
220
220
|
inline-size: 2px;
|
|
221
|
-
background: transparent;
|
|
222
|
-
|
|
221
|
+
background: color-mix(in srgb, var(--ui-affordance-guide-color, var(--ui-border-strong)) 45%, transparent);
|
|
222
|
+
opacity: var(--ui-affordance-guide-opacity, 0.42);
|
|
223
|
+
transition:
|
|
224
|
+
background-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
|
|
225
|
+
opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
|
|
226
|
+
}
|
|
227
|
+
ui-sidebar > [data-ui-sidebar-resizer] > [data-ui-guide] {
|
|
228
|
+
position: absolute;
|
|
229
|
+
inset-block-start: 50%;
|
|
230
|
+
inset-inline-start: 50%;
|
|
231
|
+
inline-size: 6px;
|
|
232
|
+
block-size: 22px;
|
|
233
|
+
border: 1px solid var(--ui-border-strong, #c8c8c4);
|
|
234
|
+
border-radius: var(--ui-radius-round, 999px);
|
|
235
|
+
background: var(--ui-surface-elevated, #fff);
|
|
236
|
+
opacity: 0;
|
|
237
|
+
transform: translate(-50%, -50%);
|
|
238
|
+
transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
|
|
239
|
+
pointer-events: none;
|
|
223
240
|
}
|
|
224
241
|
ui-sidebar > [data-ui-sidebar-resizer]:hover::after,
|
|
225
242
|
ui-sidebar > [data-ui-sidebar-resizer]:focus-visible::after {
|
|
226
|
-
background: var(--ui-color-focus, Highlight);
|
|
243
|
+
background: var(--ui-affordance-direct-color, var(--ui-accent-solid, var(--ui-color-focus, Highlight)));
|
|
244
|
+
opacity: 1;
|
|
245
|
+
}
|
|
246
|
+
ui-sidebar > [data-ui-sidebar-resizer]:is(:hover, :focus-visible) > [data-ui-guide] {
|
|
247
|
+
opacity: 1;
|
|
227
248
|
}
|
|
228
249
|
|
|
229
250
|
ui-reel {
|
package/package.json
CHANGED
package/tokens.css
CHANGED
|
@@ -72,6 +72,15 @@
|
|
|
72
72
|
--ui-motion-base: 180ms;
|
|
73
73
|
--ui-motion-ease: cubic-bezier(0.2, 0, 0.2, 1);
|
|
74
74
|
|
|
75
|
+
/* Anticipatory interaction: guide → near → direct → active. */
|
|
76
|
+
--ui-affordance-guide-size: 0.25rem;
|
|
77
|
+
--ui-affordance-guide-opacity: 0.42;
|
|
78
|
+
--ui-affordance-guide-color: var(--ui-border-strong);
|
|
79
|
+
--ui-affordance-near-color: var(--ui-text-secondary);
|
|
80
|
+
--ui-affordance-direct-color: var(--ui-accent-solid);
|
|
81
|
+
--ui-affordance-active-color: var(--ui-accent-active);
|
|
82
|
+
--ui-affordance-motion: var(--ui-motion-fast);
|
|
83
|
+
|
|
75
84
|
--ui-surface-canvas: #ffffff;
|
|
76
85
|
--ui-surface-default: #ffffff;
|
|
77
86
|
--ui-surface-muted: #f8f8f6;
|