@threadlabs/looma 0.1.8 → 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.
Files changed (210) hide show
  1. package/dist/{chunk-UMFO4QNN.js → chunk-DYIMEQY7.js} +27 -26
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/looma.cjs.js +1 -1
  4. package/dist/cjs/ui-affordance-scope.cjs.entry.js +152 -0
  5. package/dist/cjs/ui-avatar-group.cjs.entry.js +1 -1
  6. package/dist/cjs/ui-avatar.cjs.entry.js +1 -1
  7. package/dist/cjs/ui-badge.cjs.entry.js +1 -1
  8. package/dist/cjs/ui-button.cjs.entry.js +1 -1
  9. package/dist/cjs/ui-checkbox.cjs.entry.js +1 -1
  10. package/dist/cjs/ui-context-menu.cjs.entry.js +1 -1
  11. package/dist/cjs/ui-dialog.cjs.entry.js +1 -1
  12. package/dist/cjs/ui-disclosure.cjs.entry.js +1 -1
  13. package/dist/cjs/ui-floating-action-button.cjs.entry.js +1 -1
  14. package/dist/cjs/ui-form-field.cjs.entry.js +1 -1
  15. package/dist/cjs/ui-icon-button.cjs.entry.js +4 -2
  16. package/dist/cjs/ui-input.cjs.entry.js +1 -1
  17. package/dist/cjs/ui-menu-item.cjs.entry.js +1 -1
  18. package/dist/cjs/ui-menu.cjs.entry.js +1 -1
  19. package/dist/cjs/ui-popover.cjs.entry.js +1 -1
  20. package/dist/cjs/ui-radio-group.cjs.entry.js +1 -1
  21. package/dist/cjs/ui-radio.cjs.entry.js +1 -1
  22. package/dist/cjs/ui-search-result-row.cjs.entry.js +1 -1
  23. package/dist/cjs/ui-search-shell.cjs.entry.js +1 -1
  24. package/dist/cjs/ui-select.cjs.entry.js +1 -1
  25. package/dist/cjs/ui-switch.cjs.entry.js +2 -2
  26. package/dist/cjs/ui-tabs.cjs.entry.js +1 -1
  27. package/dist/cjs/ui-textarea.cjs.entry.js +1 -1
  28. package/dist/cjs/ui-toast-region.cjs.entry.js +1 -1
  29. package/dist/cjs/ui-tooltip.cjs.entry.js +1 -1
  30. package/dist/cjs/ui-top-bar.cjs.entry.js +1 -1
  31. package/dist/collection/collection-manifest.json +1 -0
  32. package/dist/collection/components/ui-affordance-scope/ui-affordance-scope.css +8 -0
  33. package/dist/collection/components/ui-affordance-scope/ui-affordance-scope.js +70 -0
  34. package/dist/collection/components/ui-avatar/ui-avatar.js +1 -1
  35. package/dist/collection/components/ui-avatar-group/ui-avatar-group.js +1 -1
  36. package/dist/collection/components/ui-badge/ui-badge.js +1 -1
  37. package/dist/collection/components/ui-button/ui-button.js +1 -1
  38. package/dist/collection/components/ui-checkbox/ui-checkbox.js +1 -1
  39. package/dist/collection/components/ui-context-menu/ui-context-menu.js +1 -1
  40. package/dist/collection/components/ui-dialog/ui-dialog.js +1 -1
  41. package/dist/collection/components/ui-disclosure/ui-disclosure.js +1 -1
  42. package/dist/collection/components/ui-floating-action-button/ui-floating-action-button.js +1 -1
  43. package/dist/collection/components/ui-form-field/ui-form-field.js +1 -1
  44. package/dist/collection/components/ui-icon-button/ui-icon-button.css +53 -0
  45. package/dist/collection/components/ui-icon-button/ui-icon-button.js +23 -1
  46. package/dist/collection/components/ui-input/ui-input.js +1 -1
  47. package/dist/collection/components/ui-menu/ui-menu.js +1 -1
  48. package/dist/collection/components/ui-menu-item/ui-menu-item.js +1 -1
  49. package/dist/collection/components/ui-popover/ui-popover.js +1 -1
  50. package/dist/collection/components/ui-radio/ui-radio.js +1 -1
  51. package/dist/collection/components/ui-radio-group/ui-radio-group.js +1 -1
  52. package/dist/collection/components/ui-search-result-row/ui-search-result-row.js +1 -1
  53. package/dist/collection/components/ui-search-shell/ui-search-shell.js +1 -1
  54. package/dist/collection/components/ui-select/ui-select.js +1 -1
  55. package/dist/collection/components/ui-switch/ui-switch.js +2 -2
  56. package/dist/collection/components/ui-tabs/ui-tabs.js +1 -1
  57. package/dist/collection/components/ui-textarea/ui-textarea.js +1 -1
  58. package/dist/collection/components/ui-toast-region/ui-toast-region.js +1 -1
  59. package/dist/collection/components/ui-tooltip/ui-tooltip.js +1 -1
  60. package/dist/collection/components/ui-top-bar/ui-top-bar.js +1 -1
  61. package/dist/collection/overlay/positioning.js +135 -0
  62. package/dist/components/index.d.ts +2 -0
  63. package/dist/components/index.js +1 -1
  64. package/dist/components/{p-gHC_Ei92.js → p-QiwSQmKJ.js} +1 -1
  65. package/dist/components/ui-affordance-scope.d.ts +11 -0
  66. package/dist/components/ui-affordance-scope.js +1 -0
  67. package/dist/components/ui-avatar-group.js +1 -1
  68. package/dist/components/ui-avatar.js +1 -1
  69. package/dist/components/ui-badge.js +1 -1
  70. package/dist/components/ui-button.js +1 -1
  71. package/dist/components/ui-checkbox.js +1 -1
  72. package/dist/components/ui-context-menu.js +1 -1
  73. package/dist/components/ui-dialog.js +1 -1
  74. package/dist/components/ui-disclosure.js +1 -1
  75. package/dist/components/ui-floating-action-button.js +1 -1
  76. package/dist/components/ui-form-field.js +1 -1
  77. package/dist/components/ui-icon-button.js +1 -1
  78. package/dist/components/ui-input.js +1 -1
  79. package/dist/components/ui-menu-item.js +1 -1
  80. package/dist/components/ui-menu.js +1 -1
  81. package/dist/components/ui-popover.js +1 -1
  82. package/dist/components/ui-radio-group.js +1 -1
  83. package/dist/components/ui-radio.js +1 -1
  84. package/dist/components/ui-search-result-row.js +1 -1
  85. package/dist/components/ui-search-shell.js +1 -1
  86. package/dist/components/ui-select.js +1 -1
  87. package/dist/components/ui-switch.js +1 -1
  88. package/dist/components/ui-tabs.js +1 -1
  89. package/dist/components/ui-textarea.js +1 -1
  90. package/dist/components/ui-toast-region.js +1 -1
  91. package/dist/components/ui-tooltip.js +1 -1
  92. package/dist/components/ui-top-bar.js +1 -1
  93. package/dist/esm/loader.js +1 -1
  94. package/dist/esm/looma.js +1 -1
  95. package/dist/esm/ui-affordance-scope.entry.js +150 -0
  96. package/dist/esm/ui-avatar-group.entry.js +1 -1
  97. package/dist/esm/ui-avatar.entry.js +1 -1
  98. package/dist/esm/ui-badge.entry.js +1 -1
  99. package/dist/esm/ui-button.entry.js +1 -1
  100. package/dist/esm/ui-checkbox.entry.js +1 -1
  101. package/dist/esm/ui-context-menu.entry.js +1 -1
  102. package/dist/esm/ui-dialog.entry.js +1 -1
  103. package/dist/esm/ui-disclosure.entry.js +1 -1
  104. package/dist/esm/ui-floating-action-button.entry.js +1 -1
  105. package/dist/esm/ui-form-field.entry.js +1 -1
  106. package/dist/esm/ui-icon-button.entry.js +4 -2
  107. package/dist/esm/ui-input.entry.js +1 -1
  108. package/dist/esm/ui-menu-item.entry.js +1 -1
  109. package/dist/esm/ui-menu.entry.js +1 -1
  110. package/dist/esm/ui-popover.entry.js +1 -1
  111. package/dist/esm/ui-radio-group.entry.js +1 -1
  112. package/dist/esm/ui-radio.entry.js +1 -1
  113. package/dist/esm/ui-search-result-row.entry.js +1 -1
  114. package/dist/esm/ui-search-shell.entry.js +1 -1
  115. package/dist/esm/ui-select.entry.js +1 -1
  116. package/dist/esm/ui-switch.entry.js +2 -2
  117. package/dist/esm/ui-tabs.entry.js +1 -1
  118. package/dist/esm/ui-textarea.entry.js +1 -1
  119. package/dist/esm/ui-toast-region.entry.js +1 -1
  120. package/dist/esm/ui-tooltip.entry.js +1 -1
  121. package/dist/esm/ui-top-bar.entry.js +1 -1
  122. package/dist/index.cjs +306 -29
  123. package/dist/index.d.cts +42 -1
  124. package/dist/index.d.ts +42 -1
  125. package/dist/index.js +127 -2
  126. package/dist/looma/looma.esm.js +1 -1
  127. package/dist/looma/p-0198bb21.entry.js +1 -0
  128. package/dist/looma/{p-d39905f9.entry.js → p-051f578c.entry.js} +1 -1
  129. package/dist/looma/{p-c14233bc.entry.js → p-0584a051.entry.js} +1 -1
  130. package/dist/looma/{p-cb15e8e3.entry.js → p-078f9fb8.entry.js} +1 -1
  131. package/dist/looma/{p-dc857ed4.entry.js → p-0f45c5f0.entry.js} +1 -1
  132. package/dist/looma/{p-201243dc.entry.js → p-1681b218.entry.js} +1 -1
  133. package/dist/looma/{p-41d62a83.entry.js → p-2ae73d5b.entry.js} +1 -1
  134. package/dist/looma/{p-5a645647.entry.js → p-2ed7e241.entry.js} +1 -1
  135. package/dist/looma/{p-5717a4c4.entry.js → p-34417499.entry.js} +1 -1
  136. package/dist/looma/{p-610b2eca.entry.js → p-4b422d40.entry.js} +1 -1
  137. package/dist/looma/{p-15e619fd.entry.js → p-5ba9d496.entry.js} +1 -1
  138. package/dist/looma/p-5d4713a6.entry.js +1 -0
  139. package/dist/looma/{p-96de71ad.entry.js → p-624ba086.entry.js} +1 -1
  140. package/dist/looma/{p-01425a37.entry.js → p-65c25c94.entry.js} +1 -1
  141. package/dist/looma/{p-66a203a1.entry.js → p-7e94d90d.entry.js} +1 -1
  142. package/dist/looma/p-8c09c724.entry.js +1 -0
  143. package/dist/looma/{p-4c54d489.entry.js → p-8d5adb17.entry.js} +1 -1
  144. package/dist/looma/p-95340a13.entry.js +1 -0
  145. package/dist/looma/{p-07167650.entry.js → p-95cd639d.entry.js} +1 -1
  146. package/dist/looma/{p-03f0594b.entry.js → p-96f73d07.entry.js} +1 -1
  147. package/dist/looma/p-a33522a2.entry.js +1 -0
  148. package/dist/looma/{p-ee31c7b4.entry.js → p-a5127c7d.entry.js} +1 -1
  149. package/dist/looma/{p-dfcb2cca.entry.js → p-a9f46811.entry.js} +1 -1
  150. package/dist/looma/{p-93ce1c62.entry.js → p-b7aa4488.entry.js} +1 -1
  151. package/dist/looma/{p-5df568d8.entry.js → p-c6721aba.entry.js} +1 -1
  152. package/dist/looma/{p-3ecd7120.entry.js → p-d273b857.entry.js} +1 -1
  153. package/dist/looma/{p-24d7aa5b.entry.js → p-ed5abf6d.entry.js} +1 -1
  154. package/dist/types/components/ui-affordance-scope/ui-affordance-scope.d.ts +11 -0
  155. package/dist/types/components/ui-icon-button/ui-icon-button.d.ts +2 -0
  156. package/dist/types/components.d.ts +37 -0
  157. package/dist/types/overlay/positioning.d.ts +40 -0
  158. package/dist/ui-affordance-scope.entry-ZKUJ5AT4.js +144 -0
  159. package/dist/{ui-avatar-group.entry-S6DFXYB7.js → ui-avatar-group.entry-I4XM44BI.js} +2 -2
  160. package/dist/{ui-avatar.entry-MDRGXLWQ.js → ui-avatar.entry-ZZAMZAVF.js} +2 -2
  161. package/dist/{ui-badge.entry-RLL4YKPD.js → ui-badge.entry-DQXYMC3E.js} +2 -2
  162. package/dist/{ui-button.entry-IYMYLBFY.js → ui-button.entry-DM7BUZLI.js} +2 -2
  163. package/dist/{ui-checkbox.entry-K5FGWDG2.js → ui-checkbox.entry-X3PPWKIJ.js} +2 -2
  164. package/dist/{ui-context-menu.entry-KWXXJ3ZV.js → ui-context-menu.entry-KAW4NIFE.js} +2 -2
  165. package/dist/{ui-dialog.entry-RKHLQLQM.js → ui-dialog.entry-D23SNXWB.js} +2 -2
  166. package/dist/{ui-disclosure.entry-FRZKGEJP.js → ui-disclosure.entry-DOG6JZU7.js} +2 -2
  167. package/dist/{ui-floating-action-button.entry-BH4FDSTL.js → ui-floating-action-button.entry-VPQ7VBFS.js} +2 -2
  168. package/dist/{ui-form-field.entry-3CR2KSUH.js → ui-form-field.entry-SYZ6XSCG.js} +2 -2
  169. package/dist/ui-icon-button.entry-2SZBOIH5.js +26 -0
  170. package/dist/{ui-input.entry-5PQR37HS.js → ui-input.entry-PALICYLZ.js} +2 -2
  171. package/dist/{ui-menu-item.entry-2T3QWHLK.js → ui-menu-item.entry-W6TEFP5Y.js} +2 -2
  172. package/dist/{ui-menu.entry-Q5Z5YO5P.js → ui-menu.entry-7NARDV6S.js} +2 -2
  173. package/dist/{ui-popover.entry-4P2NWWAY.js → ui-popover.entry-ZXYHLDTP.js} +2 -2
  174. package/dist/{ui-radio-group.entry-QKPRNV26.js → ui-radio-group.entry-XEUKMD6J.js} +2 -2
  175. package/dist/{ui-radio.entry-O4DOMFNU.js → ui-radio.entry-4ABBHDLN.js} +2 -2
  176. package/dist/{ui-search-result-row.entry-BR5O3UCH.js → ui-search-result-row.entry-3HHM7OV4.js} +2 -2
  177. package/dist/{ui-search-shell.entry-2ZBP7SA3.js → ui-search-shell.entry-PJTFOBPT.js} +2 -2
  178. package/dist/{ui-select.entry-L75HQY72.js → ui-select.entry-A3RI5XCG.js} +2 -2
  179. package/dist/{ui-switch.entry-L5QWD3BT.js → ui-switch.entry-JNRS2YTN.js} +3 -3
  180. package/dist/{ui-tabs.entry-KWRD6Y7J.js → ui-tabs.entry-MQ4V5XCP.js} +2 -2
  181. package/dist/{ui-textarea.entry-JC3HPEBS.js → ui-textarea.entry-JJXJQZQR.js} +2 -2
  182. package/dist/{ui-toast-region.entry-C6KK4OM4.js → ui-toast-region.entry-STHVESL5.js} +2 -2
  183. package/dist/{ui-tooltip.entry-G5EOCWP4.js → ui-tooltip.entry-4W7CRIKI.js} +2 -2
  184. package/dist/{ui-top-bar.entry-YLKVAQFH.js → ui-top-bar.entry-WM3SS2HR.js} +2 -2
  185. package/editor/{chunk-OK5NARJI.js → chunk-4VGVEHU2.js} +244 -70
  186. package/editor/{chunk-NJ2KAMS2.js → chunk-CCDKTWYA.js} +70 -34
  187. package/editor/extensions/index.d.ts +2 -2
  188. package/editor/extensions/index.js +1 -1
  189. package/editor/index.d.ts +1 -1
  190. package/editor/index.js +7 -2
  191. package/editor/table-overlay-jjvdARTJ.d.ts +95 -0
  192. package/editor/ui.d.ts +1 -1
  193. package/editor/ui.js +7 -2
  194. package/editor.css +232 -73
  195. package/layout/index.cjs +5 -0
  196. package/layout/index.css +22 -3
  197. package/layout/index.js +5 -0
  198. package/layout.css +24 -3
  199. package/package.json +1 -1
  200. package/tokens.css +9 -0
  201. package/vue/{chunk-KDA4RFLQ.js → chunk-YN4IUYVY.js} +16 -4
  202. package/vue/editor/index.js +94 -37
  203. package/vue/index.d.ts +5 -1
  204. package/vue/index.js +3 -1
  205. package/dist/looma/p-754cfff3.entry.js +0 -1
  206. package/dist/looma/p-940a931a.entry.js +0 -1
  207. package/dist/looma/p-941221ad.entry.js +0 -1
  208. package/dist/looma/p-955fb814.entry.js +0 -1
  209. package/dist/ui-icon-button.entry-LB54U25M.js +0 -24
  210. package/editor/table-overlay-Bq0F5xPg.d.ts +0 -64
package/editor/index.js CHANGED
@@ -1,4 +1,7 @@
1
- import "./chunk-OK5NARJI.js";
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-NJ2KAMS2.js";
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 TableOverlayAction, f as TableOverlayActionEventDetail, d as TableToolbarActionEventDetail } from './table-overlay-Bq0F5xPg.js';
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 "./chunk-OK5NARJI.js";
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
- border: none;
908
- background: none;
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: 20px;
923
- height: 20px;
924
- border: 1px solid var(--ui-border, #e5e7eb);
925
- border-radius: 999px;
926
- background: color-mix(in srgb, var(--ui-surface, #fff) 94%, transparent);
927
- color: var(--ui-text-muted, #6b7280);
928
- font-size: 14px;
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-sm, 0 2px 8px rgb(0 0 0 / 0.08));
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
- transform var(--ui-motion-fast, 120ms) ease,
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-overlay__control:is([data-active="true"], :focus-visible) .ui-editor-table-overlay__handle {
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
- color: var(--ui-accent, #3b82f6);
942
- transform: scale(1.04);
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: 16px;
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: 50%;
957
- left: calc(-1 * var(--ui-space-6, 24px));
958
- transform: translateY(-50%);
976
+ top: -12px;
977
+ left: -36px;
959
978
  }
960
979
 
961
- .ui-editor-table-overlay__control--row::after {
962
- content: "";
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
- left: 0;
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:is([data-active="true"], :focus-visible)::after {
978
- opacity: 1;
979
- background: color-mix(in srgb, var(--ui-accent, #3b82f6) 70%, transparent);
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
- top: 0;
984
- bottom: 0;
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--col .ui-editor-table-overlay__handle {
992
- top: calc(-1 * var(--ui-space-6, 24px));
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-overlay__control--col::after {
998
- content: "";
1012
+ .ui-editor-table-overlay__guide {
999
1013
  position: absolute;
1000
- top: 0;
1001
- bottom: 0;
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: 2px;
1004
- transform: translateX(-50%);
1005
- background: color-mix(in srgb, var(--ui-accent, #3b82f6) 45%, transparent);
1006
- border-radius: 999px;
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
- transition:
1009
- opacity var(--ui-motion-fast, 120ms) ease,
1010
- background var(--ui-motion-fast, 120ms) ease;
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--col:is([data-active="true"], :focus-visible)::after {
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
- background: color-mix(in srgb, var(--ui-accent, #3b82f6) 70%, transparent);
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
- right: -2px;
1186
+ z-index: 3;
1187
+ right: -5px;
1072
1188
  top: 0;
1073
1189
  bottom: 0;
1074
- width: 4px;
1190
+ width: 10px;
1075
1191
  cursor: col-resize;
1076
- background: var(--ui-accent, #3b82f6);
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
- transition: background-color 120ms ease;
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
- transition: background-color 120ms ease;
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threadlabs/looma",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "type": "module",
5
5
  "description": "Looma web components, responsive layout primitives, a complete editor, and supported Vue adapters.",
6
6
  "license": "MIT",
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;