@threadlabs/looma 0.32.1 → 0.33.1

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 (366) hide show
  1. package/README.md +15 -0
  2. package/bin/looma-docs.mjs +3 -0
  3. package/components/shared/icons.js +1 -0
  4. package/components/shared/overlay.js +1 -1
  5. package/components/ui-action-bar/ui-action-bar.html +11 -11
  6. package/components/ui-affordance-scope/ui-affordance-scope.html +2 -2
  7. package/components/ui-avatar/ui-avatar.html +8 -8
  8. package/components/ui-avatar-group/ui-avatar-group.html +14 -14
  9. package/components/ui-avatar-group/ui-avatar-group.js +3 -2
  10. package/components/ui-badge/ui-badge.html +43 -43
  11. package/components/ui-breadcrumb-item/ui-breadcrumb-item.html +13 -13
  12. package/components/ui-breadcrumbs/ui-breadcrumbs.html +8 -8
  13. package/components/ui-button/ui-button.html +32 -29
  14. package/components/ui-callout/ui-callout.html +9 -9
  15. package/components/ui-card/ui-card.html +11 -11
  16. package/components/ui-checkbox/ui-checkbox.html +52 -33
  17. package/components/ui-cluster/ui-cluster.html +21 -21
  18. package/components/ui-color-picker/ui-color-picker.html +135 -0
  19. package/components/ui-color-picker/ui-color-picker.js +76 -0
  20. package/components/ui-combobox/ui-combobox.html +43 -43
  21. package/components/ui-container/ui-container.html +7 -7
  22. package/components/ui-context-menu/ui-context-menu.html +9 -9
  23. package/components/ui-cover/ui-cover.html +8 -8
  24. package/components/ui-description-item/ui-description-item.html +7 -7
  25. package/components/ui-description-list/ui-description-list.html +4 -4
  26. package/components/ui-dialog/ui-dialog.html +26 -26
  27. package/components/ui-disclosure/ui-disclosure.html +23 -23
  28. package/components/ui-editable/ui-editable.html +16 -16
  29. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +9 -9
  30. package/components/ui-editor-link-form/ui-editor-link-form.html +1 -2
  31. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +23 -23
  32. package/components/ui-editor-mention-menu-item/ui-editor-mention-menu-item.html +10 -10
  33. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +29 -29
  34. package/components/ui-editor-slash-menu-group/ui-editor-slash-menu-group.html +5 -5
  35. package/components/ui-editor-slash-menu-item/ui-editor-slash-menu-item.html +11 -11
  36. package/components/ui-editor-surface/ui-editor-surface.html +2 -2
  37. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +25 -25
  38. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +13 -13
  39. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +31 -31
  40. package/components/ui-editor-toolbar/ui-editor-toolbar.html +13 -13
  41. package/components/ui-floating-action-button/ui-floating-action-button.html +8 -8
  42. package/components/ui-form-field/ui-form-field.html +15 -15
  43. package/components/ui-form-field/ui-form-field.js +12 -4
  44. package/components/ui-grid/ui-grid.html +4 -4
  45. package/components/ui-icon/ui-icon.html +3 -2
  46. package/components/ui-icon-button/ui-icon-button.html +15 -14
  47. package/components/ui-image/ui-image.html +14 -14
  48. package/components/ui-input/ui-input.html +8 -8
  49. package/components/ui-input-group/ui-input-group.html +18 -18
  50. package/components/ui-list/ui-list.html +11 -11
  51. package/components/ui-list-item/ui-list-item.html +18 -18
  52. package/components/ui-listbox/ui-listbox.html +10 -10
  53. package/components/ui-menu/ui-menu.html +18 -17
  54. package/components/ui-menu-group/ui-menu-group.html +4 -4
  55. package/components/ui-menu-item/ui-menu-item.html +20 -20
  56. package/components/ui-meter/ui-meter.html +5 -5
  57. package/components/ui-nav-item/ui-nav-item.html +20 -20
  58. package/components/ui-page-header/ui-page-header.html +18 -17
  59. package/components/ui-popover/ui-popover.html +8 -8
  60. package/components/ui-radio/ui-radio.html +25 -17
  61. package/components/ui-radio-group/ui-radio-group.html +10 -10
  62. package/components/ui-reel/ui-reel.html +5 -5
  63. package/components/ui-scroll-area/ui-scroll-area.html +10 -10
  64. package/components/ui-search-result-row/ui-search-result-row.html +19 -19
  65. package/components/ui-search-shell/ui-search-shell.html +22 -22
  66. package/components/ui-section/ui-section.html +24 -23
  67. package/components/ui-select/ui-select.html +10 -10
  68. package/components/ui-separator/ui-separator.html +2 -2
  69. package/components/ui-sidebar/ui-sidebar.html +8 -8
  70. package/components/ui-spinner/ui-spinner.html +6 -6
  71. package/components/ui-stack/ui-stack.html +12 -12
  72. package/components/ui-status-message/ui-status-message.html +17 -17
  73. package/components/ui-swatch/ui-swatch.html +2 -2
  74. package/components/ui-switch/ui-switch.html +36 -26
  75. package/components/ui-switcher/ui-switcher.html +7 -7
  76. package/components/ui-table/ui-table.html +6 -6
  77. package/components/ui-tabs/ui-tabs.html +16 -15
  78. package/components/ui-text/ui-text.html +3 -2
  79. package/components/ui-textarea/ui-textarea.html +10 -10
  80. package/components/ui-toast/ui-toast.html +9 -9
  81. package/components/ui-toast-region/ui-toast-region.html +12 -12
  82. package/components/ui-tooltip/ui-tooltip.html +15 -15
  83. package/components/ui-top-bar/ui-top-bar.html +11 -11
  84. package/components/ui-tree/ui-tree.html +5 -5
  85. package/components/ui-tree-item/ui-tree-item.html +36 -36
  86. package/dist/index.js +46 -45
  87. package/docs/README.md +116 -0
  88. package/docs/card.html +63 -0
  89. package/docs/card.js +32 -0
  90. package/docs/catalog-view.js +18 -0
  91. package/docs/catalog-view.mjs +11 -0
  92. package/docs/catalog.json +22974 -0
  93. package/docs/catalog.mjs +131 -0
  94. package/docs/cli.mjs +26 -0
  95. package/docs/commands.mjs +94 -0
  96. package/docs/customizer-render.mjs +40 -0
  97. package/docs/customizer.js +118 -0
  98. package/docs/documentation.css +8 -0
  99. package/docs/examples/ui-action-bar/examples/01-form-footer.behavior.js +7 -0
  100. package/docs/examples/ui-button/examples/08-loading.behavior.js +21 -0
  101. package/docs/examples/ui-checkbox/examples/02-checked-indeterminate-and-disabled.behavior.js +30 -0
  102. package/docs/examples/ui-combobox/examples/06-selected-values.behavior.js +11 -0
  103. package/docs/examples/ui-search-shell/examples/02-label-dismissible-status-and-footer.behavior.js +34 -0
  104. package/docs/examples/ui-toast/examples/01-authored.behavior.js +15 -0
  105. package/docs/examples/ui-toast/examples/02-danger.behavior.js +2 -0
  106. package/docs/examples/ui-tree/examples/03-max-depth-2-and-hover-expand-delay-300.behavior.js +30 -0
  107. package/docs/examples/ui-tree/examples/06-move-without-dragging.behavior.js +2 -0
  108. package/docs/examples/ui-tree/examples/07-multiple-selection.behavior.js +16 -0
  109. package/docs/examples/ui-tree-item/examples/02-container.behavior.js +1 -0
  110. package/docs/index.d.ts +54 -0
  111. package/docs/index.mjs +4 -0
  112. package/docs/local-server.mjs +68 -0
  113. package/docs/preview.js +20 -0
  114. package/docs/reference.html +1 -0
  115. package/docs/reference.js +36 -0
  116. package/docs/render.mjs +84 -0
  117. package/docs/site.mjs +198 -0
  118. package/docs/store.mjs +92 -0
  119. package/docs/theme.mjs +100 -0
  120. package/docs/workspace.mjs +32 -0
  121. package/package.json +28 -3
  122. package/styles/ui-action-bar.css +11 -11
  123. package/styles/ui-affordance-scope.css +2 -2
  124. package/styles/ui-avatar-group.css +14 -14
  125. package/styles/ui-avatar.css +8 -8
  126. package/styles/ui-badge.css +41 -41
  127. package/styles/ui-breadcrumb-item.css +13 -13
  128. package/styles/ui-breadcrumbs.css +8 -8
  129. package/styles/ui-button.css +30 -28
  130. package/styles/ui-callout.css +9 -9
  131. package/styles/ui-card.css +11 -11
  132. package/styles/ui-checkbox.css +52 -33
  133. package/styles/ui-cluster.css +21 -21
  134. package/styles/ui-color-picker.css +120 -0
  135. package/styles/ui-combobox.css +86 -86
  136. package/styles/ui-container.css +7 -7
  137. package/styles/ui-context-menu.css +9 -9
  138. package/styles/ui-cover.css +8 -8
  139. package/styles/ui-description-item.css +7 -7
  140. package/styles/ui-description-list.css +4 -4
  141. package/styles/ui-dialog.css +52 -52
  142. package/styles/ui-disclosure.css +23 -23
  143. package/styles/ui-editable.css +16 -16
  144. package/styles/ui-editor-insert-table-grid.css +9 -9
  145. package/styles/ui-editor-mention-menu-item.css +10 -10
  146. package/styles/ui-editor-mention-menu.css +23 -23
  147. package/styles/ui-editor-slash-menu-group.css +5 -5
  148. package/styles/ui-editor-slash-menu-item.css +11 -11
  149. package/styles/ui-editor-slash-menu.css +29 -29
  150. package/styles/ui-editor-surface.css +2 -2
  151. package/styles/ui-editor-table-context-menu.css +25 -25
  152. package/styles/ui-editor-table-overlay.css +13 -13
  153. package/styles/ui-editor-table-toolbar.css +31 -31
  154. package/styles/ui-editor-toolbar.css +13 -13
  155. package/styles/ui-floating-action-button.css +8 -8
  156. package/styles/ui-form-field.css +13 -13
  157. package/styles/ui-grid.css +4 -4
  158. package/styles/ui-icon-button.css +13 -13
  159. package/styles/ui-icon.css +2 -2
  160. package/styles/ui-image.css +14 -14
  161. package/styles/ui-input-group.css +18 -18
  162. package/styles/ui-input.css +8 -8
  163. package/styles/ui-list-item.css +18 -18
  164. package/styles/ui-list.css +11 -11
  165. package/styles/ui-listbox.css +20 -20
  166. package/styles/ui-menu-group.css +4 -4
  167. package/styles/ui-menu-item.css +20 -20
  168. package/styles/ui-menu.css +16 -16
  169. package/styles/ui-meter.css +5 -5
  170. package/styles/ui-nav-item.css +20 -20
  171. package/styles/ui-page-header.css +18 -17
  172. package/styles/ui-popover.css +8 -8
  173. package/styles/ui-radio-group.css +10 -10
  174. package/styles/ui-radio.css +26 -18
  175. package/styles/ui-reel.css +5 -5
  176. package/styles/ui-scroll-area.css +10 -10
  177. package/styles/ui-search-result-row.css +19 -19
  178. package/styles/ui-search-shell.css +22 -22
  179. package/styles/ui-section.css +24 -23
  180. package/styles/ui-select.css +10 -10
  181. package/styles/ui-separator.css +2 -2
  182. package/styles/ui-sidebar.css +8 -8
  183. package/styles/ui-spinner.css +6 -6
  184. package/styles/ui-stack.css +12 -12
  185. package/styles/ui-status-message.css +17 -17
  186. package/styles/ui-swatch.css +2 -2
  187. package/styles/ui-switch.css +36 -28
  188. package/styles/ui-switcher.css +7 -7
  189. package/styles/ui-table.css +6 -6
  190. package/styles/ui-tabs.css +11 -11
  191. package/styles/ui-text.css +3 -2
  192. package/styles/ui-textarea.css +10 -10
  193. package/styles/ui-toast-region.css +24 -24
  194. package/styles/ui-toast.css +18 -18
  195. package/styles/ui-tooltip.css +15 -15
  196. package/styles/ui-top-bar.css +11 -11
  197. package/styles/ui-tree-item.css +71 -71
  198. package/styles/ui-tree.css +5 -5
  199. package/theme-system.css +80 -0
  200. package/tokens.css +14 -3
  201. package/vanilla/UiColorPicker.d.ts +30 -0
  202. package/vanilla/UiColorPicker.js +77 -0
  203. package/vanilla/UiIcon.js +1 -1
  204. package/vanilla/index.js +1 -0
  205. package/vue/UiActionBar.vue +11 -11
  206. package/vue/UiAffordanceScope.vue +2 -2
  207. package/vue/UiAvatar.vue +8 -8
  208. package/vue/UiAvatarGroup.vue +14 -14
  209. package/vue/UiBadge.vue +43 -42
  210. package/vue/UiBreadcrumbItem.vue +13 -13
  211. package/vue/UiBreadcrumbs.vue +8 -8
  212. package/vue/UiButton.vue +34 -29
  213. package/vue/UiCallout.vue +9 -9
  214. package/vue/UiCard.vue +11 -11
  215. package/vue/UiCheckbox.vue +57 -34
  216. package/vue/UiCluster.vue +21 -21
  217. package/vue/UiColorPicker.d.ts +65 -0
  218. package/vue/UiColorPicker.js +2 -0
  219. package/vue/UiColorPicker.vue +422 -0
  220. package/vue/UiCombobox.vue +86 -86
  221. package/vue/UiContainer.vue +7 -7
  222. package/vue/UiContextMenu.vue +9 -9
  223. package/vue/UiCover.vue +8 -8
  224. package/vue/UiDescriptionItem.vue +7 -7
  225. package/vue/UiDescriptionList.vue +4 -4
  226. package/vue/UiDialog.vue +52 -52
  227. package/vue/UiDisclosure.vue +23 -23
  228. package/vue/UiEditable.vue +16 -16
  229. package/vue/UiEditorInsertTableGrid.vue +9 -9
  230. package/vue/UiEditorMentionMenu.vue +23 -23
  231. package/vue/UiEditorMentionMenuItem.vue +10 -10
  232. package/vue/UiEditorSlashMenu.vue +29 -29
  233. package/vue/UiEditorSlashMenuGroup.vue +5 -5
  234. package/vue/UiEditorSlashMenuItem.vue +11 -11
  235. package/vue/UiEditorSurface.vue +2 -2
  236. package/vue/UiEditorTableContextMenu.vue +25 -25
  237. package/vue/UiEditorTableOverlay.vue +13 -13
  238. package/vue/UiEditorTableToolbar.vue +31 -31
  239. package/vue/UiEditorToolbar.vue +13 -13
  240. package/vue/UiFloatingActionButton.vue +8 -8
  241. package/vue/UiFormField.vue +14 -14
  242. package/vue/UiGrid.vue +4 -4
  243. package/vue/UiIcon.vue +6 -2
  244. package/vue/UiIconButton.vue +14 -14
  245. package/vue/UiImage.vue +14 -14
  246. package/vue/UiInput.vue +9 -8
  247. package/vue/UiInputGroup.vue +18 -18
  248. package/vue/UiList.vue +11 -11
  249. package/vue/UiListItem.vue +18 -18
  250. package/vue/UiListbox.vue +20 -20
  251. package/vue/UiMenu.vue +16 -16
  252. package/vue/UiMenuGroup.vue +4 -4
  253. package/vue/UiMenuItem.vue +20 -20
  254. package/vue/UiMeter.vue +5 -5
  255. package/vue/UiNavItem.vue +20 -20
  256. package/vue/UiPageHeader.vue +18 -17
  257. package/vue/UiPopover.vue +8 -8
  258. package/vue/UiRadio.vue +28 -17
  259. package/vue/UiRadioGroup.vue +10 -10
  260. package/vue/UiReel.vue +5 -5
  261. package/vue/UiScrollArea.vue +10 -10
  262. package/vue/UiSearchResultRow.vue +19 -19
  263. package/vue/UiSearchShell.vue +22 -22
  264. package/vue/UiSection.vue +24 -23
  265. package/vue/UiSelect.vue +11 -10
  266. package/vue/UiSeparator.vue +2 -2
  267. package/vue/UiSidebar.vue +8 -8
  268. package/vue/UiSpinner.vue +6 -6
  269. package/vue/UiStack.vue +12 -12
  270. package/vue/UiStatusMessage.vue +17 -17
  271. package/vue/UiSwatch.vue +2 -2
  272. package/vue/UiSwitch.vue +38 -25
  273. package/vue/UiSwitcher.vue +7 -7
  274. package/vue/UiTable.vue +6 -6
  275. package/vue/UiTabs.vue +13 -13
  276. package/vue/UiText.vue +3 -2
  277. package/vue/UiTextarea.vue +10 -10
  278. package/vue/UiToast.vue +18 -18
  279. package/vue/UiToastRegion.vue +24 -24
  280. package/vue/UiTooltip.vue +15 -15
  281. package/vue/UiTopBar.vue +11 -11
  282. package/vue/UiTree.vue +5 -5
  283. package/vue/UiTreeItem.vue +73 -71
  284. package/vue/chunks/UiActionBar.js +1 -1
  285. package/vue/chunks/UiAffordanceScope.js +1 -1
  286. package/vue/chunks/UiAvatar.js +1 -1
  287. package/vue/chunks/UiAvatarGroup.js +1 -1
  288. package/vue/chunks/UiBadge.js +2 -2
  289. package/vue/chunks/UiBreadcrumbItem.js +1 -1
  290. package/vue/chunks/UiBreadcrumbs.js +1 -1
  291. package/vue/chunks/UiButton.js +2 -2
  292. package/vue/chunks/UiCallout.js +1 -1
  293. package/vue/chunks/UiCard.js +1 -1
  294. package/vue/chunks/UiCheckbox.js +1 -1
  295. package/vue/chunks/UiCluster.js +1 -1
  296. package/vue/chunks/UiColorPicker.js +326 -0
  297. package/vue/chunks/UiCombobox.js +1 -1
  298. package/vue/chunks/UiContainer.js +1 -1
  299. package/vue/chunks/UiContextMenu.js +1 -1
  300. package/vue/chunks/UiCover.js +1 -1
  301. package/vue/chunks/UiDescriptionItem.js +1 -1
  302. package/vue/chunks/UiDescriptionList.js +1 -1
  303. package/vue/chunks/UiDialog.js +1 -1
  304. package/vue/chunks/UiDisclosure.js +1 -1
  305. package/vue/chunks/UiEditable.js +1 -1
  306. package/vue/chunks/UiEditorImageToolbar.js +1 -1
  307. package/vue/chunks/UiEditorInsertTableGrid.js +1 -1
  308. package/vue/chunks/UiEditorLinkForm.js +1 -1
  309. package/vue/chunks/UiEditorMentionMenu.js +1 -1
  310. package/vue/chunks/UiEditorMentionMenuItem.js +1 -1
  311. package/vue/chunks/UiEditorSlashMenu.js +1 -1
  312. package/vue/chunks/UiEditorSlashMenuGroup.js +1 -1
  313. package/vue/chunks/UiEditorSlashMenuItem.js +1 -1
  314. package/vue/chunks/UiEditorSurface.js +1 -1
  315. package/vue/chunks/UiEditorTableContextMenu.js +1 -1
  316. package/vue/chunks/UiEditorTableOverlay.js +1 -1
  317. package/vue/chunks/UiEditorTableToolbar.js +1 -1
  318. package/vue/chunks/UiEditorToolbar.js +1 -1
  319. package/vue/chunks/UiFloatingActionButton.js +1 -1
  320. package/vue/chunks/UiFormField.js +2 -2
  321. package/vue/chunks/UiGrid.js +1 -1
  322. package/vue/chunks/UiIcon.js +5 -1
  323. package/vue/chunks/UiIconButton.js +2 -2
  324. package/vue/chunks/UiImage.js +1 -1
  325. package/vue/chunks/UiInput.js +1 -1
  326. package/vue/chunks/UiInputGroup.js +1 -1
  327. package/vue/chunks/UiList.js +1 -1
  328. package/vue/chunks/UiListItem.js +1 -1
  329. package/vue/chunks/UiListbox.js +1 -1
  330. package/vue/chunks/UiMenu.js +1 -1
  331. package/vue/chunks/UiMenuGroup.js +1 -1
  332. package/vue/chunks/UiMenuItem.js +1 -1
  333. package/vue/chunks/UiMeter.js +1 -1
  334. package/vue/chunks/UiNavItem.js +1 -1
  335. package/vue/chunks/UiPageHeader.js +1 -1
  336. package/vue/chunks/UiPopover.js +1 -1
  337. package/vue/chunks/UiRadio.js +1 -1
  338. package/vue/chunks/UiRadioGroup.js +1 -1
  339. package/vue/chunks/UiReel.js +1 -1
  340. package/vue/chunks/UiScrollArea.js +1 -1
  341. package/vue/chunks/UiSearchResultRow.js +1 -1
  342. package/vue/chunks/UiSearchShell.js +1 -1
  343. package/vue/chunks/UiSection.js +1 -1
  344. package/vue/chunks/UiSelect.js +1 -1
  345. package/vue/chunks/UiSeparator.js +1 -1
  346. package/vue/chunks/UiSidebar.js +1 -1
  347. package/vue/chunks/UiSpinner.js +1 -1
  348. package/vue/chunks/UiStack.js +1 -1
  349. package/vue/chunks/UiStatusMessage.js +1 -1
  350. package/vue/chunks/UiSwatch.js +1 -1
  351. package/vue/chunks/UiSwitch.js +1 -1
  352. package/vue/chunks/UiSwitcher.js +1 -1
  353. package/vue/chunks/UiTable.js +1 -1
  354. package/vue/chunks/UiTabs.js +3 -3
  355. package/vue/chunks/UiText.js +1 -1
  356. package/vue/chunks/UiTextarea.js +1 -1
  357. package/vue/chunks/UiToast.js +1 -1
  358. package/vue/chunks/UiToastRegion.js +1 -1
  359. package/vue/chunks/UiTooltip.js +1 -1
  360. package/vue/chunks/UiTopBar.js +1 -1
  361. package/vue/chunks/UiTree.js +1 -1
  362. package/vue/chunks/UiTreeItem.js +1 -1
  363. package/vue/components.css +1857 -1654
  364. package/vue/editor/index.js +28 -11
  365. package/vue/index.d.ts +1 -0
  366. package/vue/index.js +3 -2
@@ -41,16 +41,16 @@
41
41
  --_tree-disclosure-size: 16px;
42
42
 
43
43
  position: relative;
44
- display: block;
44
+ display: block !important;
45
45
  min-inline-size: 0;
46
- margin-inline-start: calc(var(--_ui-tree-item-indent-step, 0) * var(--_ui-tree-indent, 16px));
46
+ margin-inline-start: calc(var(--_ui-tree-item-indent-step, 0) * var(--_ui-tree-indent, 16px)) !important;
47
47
  }
48
48
 
49
49
  .row {
50
50
  position: relative;
51
- display: grid;
51
+ display: grid !important;
52
52
  grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr);
53
- align-items: center;
53
+ align-items: center !important;
54
54
  min-block-size: var(--_ui-tree-item-min-block-size, var(--_tree-row-min-height));
55
55
  min-inline-size: 0;
56
56
  font-size: var(--_ui-tree-item-font-size, var(--ui-font-size-sm));
@@ -119,10 +119,10 @@
119
119
  }
120
120
 
121
121
  .disclosure {
122
- display: grid;
122
+ display: grid !important;
123
123
  /* Start-aligned: the chevron's ink, not its hit area, aligns with the content above it. */
124
124
  place-items: center start;
125
- padding: 0;
125
+ padding: 0 !important;
126
126
  color: var(--ui-text-muted);
127
127
  background: transparent;
128
128
  border: 0;
@@ -131,11 +131,11 @@
131
131
  }
132
132
 
133
133
  .disclosure[hidden] {
134
- display: none;
134
+ display: none !important;
135
135
  }
136
136
 
137
137
  .selection-hit {
138
- display: none;
138
+ display: none !important;
139
139
  grid-column: 2;
140
140
  grid-row: 1;
141
141
  place-items: center;
@@ -146,7 +146,7 @@
146
146
  .selection-checkbox {
147
147
  inline-size: 1rem;
148
148
  block-size: 1rem;
149
- margin: 0;
149
+ margin: 0 !important;
150
150
  accent-color: var(--ui-accent-solid);
151
151
  }
152
152
 
@@ -154,7 +154,7 @@
154
154
  grid-template-columns: var(--_tree-disclosure-size) 1.25rem auto minmax(0, 1fr);
155
155
  }
156
156
  :scope:where([data-component~="ui-tree-item"])[data-selection-mode="multiple"] > .row > .selection-hit {
157
- display: grid;
157
+ display: grid !important;
158
158
  }
159
159
  :scope:where([data-component~="ui-tree-item"])[data-selection-mode="multiple"] > .row > .leading {
160
160
  grid-column: 3;
@@ -169,7 +169,7 @@
169
169
  }
170
170
 
171
171
  .disclosure-icon {
172
- display: grid;
172
+ display: grid !important;
173
173
  place-items: center;
174
174
  inline-size: 12px;
175
175
  block-size: 12px;
@@ -178,7 +178,7 @@
178
178
  }
179
179
 
180
180
  .disclosure-icon:where(:not([data-component], [data-slotted]))::before {
181
- display: block;
181
+ display: block !important;
182
182
  inline-size: 0.375rem;
183
183
  block-size: 0.375rem;
184
184
  border-inline-end: 1.5px solid currentColor;
@@ -194,20 +194,20 @@
194
194
 
195
195
  /* Lucide grip-vertical, filling the handle as in Looma 0.2. */
196
196
  .drag-handle svg {
197
- display: block;
197
+ display: block !important;
198
198
  inline-size: 100%;
199
199
  block-size: 100%;
200
200
  }
201
201
 
202
202
  /* Slotted content is outside this scope, so :has() cannot see it; hide only a truly empty slot. */
203
203
  .leading {
204
- display: inline-grid;
204
+ display: inline-grid !important;
205
205
  place-items: center;
206
206
  grid-column: 2;
207
207
  grid-row: 1;
208
208
  inline-size: 1em;
209
209
  block-size: 1em;
210
- margin-inline-start: var(--ui-space-1);
210
+ margin-inline-start: var(--ui-space-1) !important;
211
211
  color: var(--ui-text-muted);
212
212
  /* Above the label, so a sliding name passes under the icon. */
213
213
  position: relative;
@@ -215,7 +215,7 @@
215
215
  }
216
216
 
217
217
  .leading:empty {
218
- display: none;
218
+ display: none !important;
219
219
  }
220
220
 
221
221
  /* Icons match the label's size (as in Knit's tree): an unsized SVG would otherwise render 300×150. */
@@ -226,22 +226,22 @@
226
226
  grid-column: 3;
227
227
  grid-row: 1;
228
228
  align-self: stretch;
229
- display: flex;
230
- align-items: center;
229
+ display: flex !important;
230
+ align-items: center !important;
231
231
  min-inline-size: 0;
232
232
  /* The cell clips: a name longer than the row slides inside it rather than over its icons. */
233
233
  overflow: hidden;
234
- padding: var(--_ui-tree-item-label-padding-block, var(--ui-space-1)) var(--_ui-tree-item-label-padding-inline, var(--ui-space-2));
234
+ padding: var(--_ui-tree-item-label-padding-block, var(--ui-space-1)) var(--_ui-tree-item-label-padding-inline, var(--ui-space-2)) !important;
235
235
  /* The length of the fade before the controls. The label's one flex child lays out no gap; this
236
236
  is where the controller reads the length in pixels to stop a sliding name before the fade. */
237
- column-gap: var(--ui-space-1);
237
+ column-gap: var(--ui-space-1) !important;
238
238
  }
239
239
 
240
240
  /* Slotted label content fills the cell, so a link is the row's hit area rather than sizing to
241
241
  its own text and reading as overflow. */
242
242
  .label-text {
243
- display: flex;
244
- align-items: center;
243
+ display: flex !important;
244
+ align-items: center !important;
245
245
  /* Stretches, so slotted content can still be the row's full-height hit area. */
246
246
  align-self: stretch;
247
247
  block-size: 100%;
@@ -291,8 +291,8 @@
291
291
  where it was, and fades out across the gap before the icon, fully gone where the icon begins
292
292
  to cover it: the name slips under the icon rather than stopping at a hard edge beside it. */
293
293
  .row[data-ui-marquee] > .label {
294
- margin-inline-start: calc(-1 * var(--_marquee-lead, 0px));
295
- padding-inline-start: calc(var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2)));
294
+ margin-inline-start: calc(-1 * var(--_marquee-lead, 0px)) !important;
295
+ padding-inline-start: calc(var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))) !important;
296
296
  mask-image: linear-gradient(
297
297
  to right,
298
298
  transparent var(--_marquee-icon-width, 0px),
@@ -334,8 +334,8 @@
334
334
  z-index: 1;
335
335
  inset-block: 0;
336
336
  inset-inline-end: 0;
337
- display: inline-flex;
338
- align-items: center;
337
+ display: inline-flex !important;
338
+ align-items: center !important;
339
339
  min-inline-size: 0;
340
340
  opacity: 0;
341
341
  pointer-events: none;
@@ -360,7 +360,7 @@
360
360
  position: static;
361
361
  grid-column: 4;
362
362
  grid-row: 1;
363
- padding-inline-start: 0;
363
+ padding-inline-start: 0 !important;
364
364
  background: none;
365
365
  opacity: 1;
366
366
  pointer-events: auto;
@@ -417,9 +417,9 @@
417
417
  inset-inline-start: 0;
418
418
  inline-size: var(--_tree-disclosure-size);
419
419
  block-size: 24px;
420
- display: grid;
420
+ display: grid !important;
421
421
  place-items: center;
422
- padding: 5px 2px;
422
+ padding: 5px 2px !important;
423
423
  color: var(--ui-text-muted);
424
424
  background: transparent;
425
425
  border: 0;
@@ -457,7 +457,7 @@
457
457
  position: absolute;
458
458
  z-index: 3;
459
459
  inset-inline: 1px;
460
- display: none;
460
+ display: none !important;
461
461
  block-size: var(--ui-accent-line-width);
462
462
  border-radius: var(--ui-radius-round);
463
463
  background: var(--_ui-tree-drop-color, var(--ui-accent-solid));
@@ -485,17 +485,17 @@
485
485
  }
486
486
 
487
487
  :scope:where([data-component~="ui-tree-item"])[data-drop-position="before"] > .row > .row-drop-indicator {
488
- display: block;
488
+ display: block !important;
489
489
  inset-block-start: calc(-0.5 * var(--ui-accent-line-width));
490
490
  }
491
491
 
492
492
  :scope:where([data-component~="ui-tree-item"])[data-drop-position="after"] > .subtree-drop-indicator {
493
- display: block;
493
+ display: block !important;
494
494
  inset-block-end: calc(-0.5 * var(--ui-accent-line-width));
495
495
  }
496
496
 
497
497
  .children[hidden] {
498
- display: none;
498
+ display: none !important;
499
499
  }
500
500
 
501
501
  html[data-ui-input-modality="touch"] :scope:where([data-component~="ui-tree-item"]) {
@@ -514,7 +514,7 @@
514
514
  inset: auto;
515
515
  inline-size: 44px;
516
516
  block-size: 44px;
517
- padding: 14px;
517
+ padding: 14px !important;
518
518
  opacity: 1;
519
519
  transform: none;
520
520
  cursor: pointer;
@@ -584,7 +584,7 @@
584
584
 
585
585
  /* A component that sets its display still honours the hidden attribute on its root. */
586
586
  :scope:where([data-component~="ui-tree-item"])[hidden] {
587
- display: none;
587
+ display: none !important;
588
588
  }
589
589
  }
590
590
  @scope ([data-component~="ui-tree-item"]) to ([data-component]) {
@@ -601,7 +601,7 @@
601
601
  /* Icons match the label's size (as in Knit's tree): an unsized SVG would otherwise render 300×150. */
602
602
  :where([data-slotted], [data-slotted] *):is(svg),
603
603
  :where([data-slotted], [data-slotted] *):is(img) {
604
- display: block;
604
+ display: block !important;
605
605
  inline-size: 1em;
606
606
  block-size: 1em;
607
607
  flex: none;
@@ -697,16 +697,16 @@
697
697
  --_tree-disclosure-size: 16px;
698
698
 
699
699
  position: relative;
700
- display: block;
700
+ display: block !important;
701
701
  min-inline-size: 0;
702
- margin-inline-start: calc(var(--_ui-tree-item-indent-step, 0) * var(--_ui-tree-indent, 16px));
702
+ margin-inline-start: calc(var(--_ui-tree-item-indent-step, 0) * var(--_ui-tree-indent, 16px)) !important;
703
703
  }
704
704
 
705
705
  .row:where(:scope, :scope *) {
706
706
  position: relative;
707
- display: grid;
707
+ display: grid !important;
708
708
  grid-template-columns: var(--_tree-disclosure-size) auto minmax(0, 1fr);
709
- align-items: center;
709
+ align-items: center !important;
710
710
  min-block-size: var(--_ui-tree-item-min-block-size, var(--_tree-row-min-height));
711
711
  min-inline-size: 0;
712
712
  font-size: var(--_ui-tree-item-font-size, var(--ui-font-size-sm));
@@ -772,10 +772,10 @@
772
772
  }
773
773
 
774
774
  .disclosure:where(:scope, :scope *) {
775
- display: grid;
775
+ display: grid !important;
776
776
  /* Start-aligned: the chevron's ink, not its hit area, aligns with the content above it. */
777
777
  place-items: center start;
778
- padding: 0;
778
+ padding: 0 !important;
779
779
  color: var(--ui-text-muted);
780
780
  background: transparent;
781
781
  border: 0;
@@ -784,11 +784,11 @@
784
784
  }
785
785
 
786
786
  .disclosure[hidden]:where(:scope, :scope *) {
787
- display: none;
787
+ display: none !important;
788
788
  }
789
789
 
790
790
  .selection-hit:where(:scope, :scope *) {
791
- display: none;
791
+ display: none !important;
792
792
  grid-column: 2;
793
793
  grid-row: 1;
794
794
  place-items: center;
@@ -799,7 +799,7 @@
799
799
  .selection-checkbox:where(:scope, :scope *) {
800
800
  inline-size: 1rem;
801
801
  block-size: 1rem;
802
- margin: 0;
802
+ margin: 0 !important;
803
803
  accent-color: var(--ui-accent-solid);
804
804
  }
805
805
 
@@ -807,7 +807,7 @@
807
807
  grid-template-columns: var(--_tree-disclosure-size) 1.25rem auto minmax(0, 1fr);
808
808
  }
809
809
  :where([data-component~="ui-tree-item"])[data-selection-mode="multiple"] > .row > .selection-hit:where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-tree-item"]))) {
810
- display: grid;
810
+ display: grid !important;
811
811
  }
812
812
  :where([data-component~="ui-tree-item"])[data-selection-mode="multiple"] > .row > .leading:where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-tree-item"]))) {
813
813
  grid-column: 3;
@@ -822,7 +822,7 @@
822
822
  }
823
823
 
824
824
  .disclosure-icon:where(:scope, :scope *) {
825
- display: grid;
825
+ display: grid !important;
826
826
  place-items: center;
827
827
  inline-size: 12px;
828
828
  block-size: 12px;
@@ -831,7 +831,7 @@
831
831
  }
832
832
 
833
833
  .disclosure-icon:where(:not([data-component], [data-slotted]:not([data-slotted~="ui-tree-item"]))):where(:scope, :scope *)::before {
834
- display: block;
834
+ display: block !important;
835
835
  inline-size: 0.375rem;
836
836
  block-size: 0.375rem;
837
837
  border-inline-end: 1.5px solid currentColor;
@@ -847,20 +847,20 @@
847
847
 
848
848
  /* Lucide grip-vertical, filling the handle as in Looma 0.2. */
849
849
  .drag-handle:where(:scope, :scope *) svg {
850
- display: block;
850
+ display: block !important;
851
851
  inline-size: 100%;
852
852
  block-size: 100%;
853
853
  }
854
854
 
855
855
  /* Slotted content is outside this scope, so :has() cannot see it; hide only a truly empty slot. */
856
856
  .leading:where(:scope, :scope *) {
857
- display: inline-grid;
857
+ display: inline-grid !important;
858
858
  place-items: center;
859
859
  grid-column: 2;
860
860
  grid-row: 1;
861
861
  inline-size: 1em;
862
862
  block-size: 1em;
863
- margin-inline-start: var(--ui-space-1);
863
+ margin-inline-start: var(--ui-space-1) !important;
864
864
  color: var(--ui-text-muted);
865
865
  /* Above the label, so a sliding name passes under the icon. */
866
866
  position: relative;
@@ -868,7 +868,7 @@
868
868
  }
869
869
 
870
870
  .leading:empty:where(:scope, :scope *) {
871
- display: none;
871
+ display: none !important;
872
872
  }
873
873
 
874
874
  /* Icons match the label's size (as in Knit's tree): an unsized SVG would otherwise render 300×150. */
@@ -879,22 +879,22 @@
879
879
  grid-column: 3;
880
880
  grid-row: 1;
881
881
  align-self: stretch;
882
- display: flex;
883
- align-items: center;
882
+ display: flex !important;
883
+ align-items: center !important;
884
884
  min-inline-size: 0;
885
885
  /* The cell clips: a name longer than the row slides inside it rather than over its icons. */
886
886
  overflow: hidden;
887
- padding: var(--_ui-tree-item-label-padding-block, var(--ui-space-1)) var(--_ui-tree-item-label-padding-inline, var(--ui-space-2));
887
+ padding: var(--_ui-tree-item-label-padding-block, var(--ui-space-1)) var(--_ui-tree-item-label-padding-inline, var(--ui-space-2)) !important;
888
888
  /* The length of the fade before the controls. The label's one flex child lays out no gap; this
889
889
  is where the controller reads the length in pixels to stop a sliding name before the fade. */
890
- column-gap: var(--ui-space-1);
890
+ column-gap: var(--ui-space-1) !important;
891
891
  }
892
892
 
893
893
  /* Slotted label content fills the cell, so a link is the row's hit area rather than sizing to
894
894
  its own text and reading as overflow. */
895
895
  .label-text:where(:scope, :scope *) {
896
- display: flex;
897
- align-items: center;
896
+ display: flex !important;
897
+ align-items: center !important;
898
898
  /* Stretches, so slotted content can still be the row's full-height hit area. */
899
899
  align-self: stretch;
900
900
  block-size: 100%;
@@ -938,8 +938,8 @@
938
938
  where it was, and fades out across the gap before the icon, fully gone where the icon begins
939
939
  to cover it: the name slips under the icon rather than stopping at a hard edge beside it. */
940
940
  .row[data-ui-marquee]:where(:scope, :scope *) > .label {
941
- margin-inline-start: calc(-1 * var(--_marquee-lead, 0px));
942
- padding-inline-start: calc(var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2)));
941
+ margin-inline-start: calc(-1 * var(--_marquee-lead, 0px)) !important;
942
+ padding-inline-start: calc(var(--_marquee-lead, 0px) + var(--_ui-tree-item-label-padding-inline, var(--ui-space-2))) !important;
943
943
  mask-image: linear-gradient(
944
944
  to right,
945
945
  transparent var(--_marquee-icon-width, 0px),
@@ -981,8 +981,8 @@
981
981
  z-index: 1;
982
982
  inset-block: 0;
983
983
  inset-inline-end: 0;
984
- display: inline-flex;
985
- align-items: center;
984
+ display: inline-flex !important;
985
+ align-items: center !important;
986
986
  min-inline-size: 0;
987
987
  opacity: 0;
988
988
  pointer-events: none;
@@ -1004,7 +1004,7 @@
1004
1004
  position: static;
1005
1005
  grid-column: 4;
1006
1006
  grid-row: 1;
1007
- padding-inline-start: 0;
1007
+ padding-inline-start: 0 !important;
1008
1008
  background: none;
1009
1009
  opacity: 1;
1010
1010
  pointer-events: auto;
@@ -1058,9 +1058,9 @@
1058
1058
  inset-inline-start: 0;
1059
1059
  inline-size: var(--_tree-disclosure-size);
1060
1060
  block-size: 24px;
1061
- display: grid;
1061
+ display: grid !important;
1062
1062
  place-items: center;
1063
- padding: 5px 2px;
1063
+ padding: 5px 2px !important;
1064
1064
  color: var(--ui-text-muted);
1065
1065
  background: transparent;
1066
1066
  border: 0;
@@ -1094,7 +1094,7 @@
1094
1094
  position: absolute;
1095
1095
  z-index: 3;
1096
1096
  inset-inline: 1px;
1097
- display: none;
1097
+ display: none !important;
1098
1098
  block-size: var(--ui-accent-line-width);
1099
1099
  border-radius: var(--ui-radius-round);
1100
1100
  background: var(--_ui-tree-drop-color, var(--ui-accent-solid));
@@ -1121,17 +1121,17 @@
1121
1121
  }
1122
1122
 
1123
1123
  :where([data-component~="ui-tree-item"])[data-drop-position="before"] > .row > .row-drop-indicator:where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-tree-item"]))) {
1124
- display: block;
1124
+ display: block !important;
1125
1125
  inset-block-start: calc(-0.5 * var(--ui-accent-line-width));
1126
1126
  }
1127
1127
 
1128
1128
  :where([data-component~="ui-tree-item"])[data-drop-position="after"] > .subtree-drop-indicator:where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-tree-item"]))) {
1129
- display: block;
1129
+ display: block !important;
1130
1130
  inset-block-end: calc(-0.5 * var(--ui-accent-line-width));
1131
1131
  }
1132
1132
 
1133
1133
  .children[hidden]:where(:scope, :scope *) {
1134
- display: none;
1134
+ display: none !important;
1135
1135
  }
1136
1136
 
1137
1137
  html[data-ui-input-modality="touch"] :where([data-component~="ui-tree-item"]):where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-tree-item"]))) {
@@ -1149,7 +1149,7 @@
1149
1149
  inset: auto;
1150
1150
  inline-size: 44px;
1151
1151
  block-size: 44px;
1152
- padding: 14px;
1152
+ padding: 14px !important;
1153
1153
  opacity: 1;
1154
1154
  transform: none;
1155
1155
  cursor: pointer;
@@ -1217,6 +1217,6 @@
1217
1217
 
1218
1218
  /* A component that sets its display still honours the hidden attribute on its root. */
1219
1219
  :where([data-component~="ui-tree-item"])[hidden]:where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-tree-item"]))) {
1220
- display: none;
1220
+ display: none !important;
1221
1221
  }
1222
1222
  }
@@ -43,22 +43,22 @@
43
43
  --_ui-default-tree-item-min-block-size: initial;
44
44
  --_ui-default-tree-item-font-size: initial;
45
45
  --_ui-default-tree-item-label-padding-block: initial;
46
- display: block;
46
+ display: block !important;
47
47
  min-inline-size: 0;
48
- padding-inline-start: var(--ui-tree-gutter, 0px);
48
+ padding-inline-start: var(--ui-tree-gutter, 0px) !important;
49
49
  }
50
50
 
51
51
  :scope:where([data-component~="ui-tree"])[data-move-mode]::after {
52
52
  content: "Choose a destination row, or use Up and Down; Right nests inside a branch. Enter places it, Escape cancels.";
53
- display: block;
54
- padding: var(--ui-space-2);
53
+ display: block !important;
54
+ padding: var(--ui-space-2) !important;
55
55
  color: var(--ui-text-secondary);
56
56
  font-size: var(--ui-font-size-sm);
57
57
  }
58
58
 
59
59
  /* A component that sets its display still honours the hidden attribute on its root. */
60
60
  :scope:where([data-component~="ui-tree"])[hidden] {
61
- display: none;
61
+ display: none !important;
62
62
  }
63
63
  }
64
64
  @scope ([data-component~="ui-tree"]) to ([data-component]) {
@@ -0,0 +1,80 @@
1
+ /* Optional shared recipe. Load after tokens.css and the chosen palette.
2
+ Existing public roles remain the customization interface; no component selectors. */
3
+ @layer theme {
4
+ :root {
5
+ --ui-density: 1;
6
+ --ui-scale-ratio: 1.2;
7
+ --ui-space-curve: 1;
8
+ --ui-outer-depth: 0.6;
9
+ --ui-inner-depth: 0.3;
10
+ --ui-edge-light: 0;
11
+ --ui-overlay-translucency: 0;
12
+ }
13
+
14
+ :where(:root, [data-theme], [data-contrast]) {
15
+ /* Controls use a ratio. Spacing uses an independent curve, so increasing the size
16
+ contrast cannot unexpectedly turn linear spacing into quadratic spacing. */
17
+ --_ui-theme-ratio: max(1, var(--ui-scale-ratio));
18
+ --_ui-theme-unit: calc(var(--ui-control-size) * 0.1 * max(0, var(--ui-density)));
19
+ --_ui-theme-curve: max(0, var(--ui-space-curve));
20
+ --ui-control-size-sm: calc(var(--ui-control-size) / var(--_ui-theme-ratio));
21
+ --ui-control-size-md: var(--ui-control-size);
22
+ --ui-control-size-lg: calc(var(--ui-control-size) * var(--_ui-theme-ratio));
23
+ --ui-space-1: var(--_ui-theme-unit);
24
+ --ui-space-2: calc(var(--_ui-theme-unit) * pow(2, var(--_ui-theme-curve)));
25
+ --ui-space-3: calc(var(--_ui-theme-unit) * pow(3, var(--_ui-theme-curve)));
26
+ --ui-space-4: calc(var(--_ui-theme-unit) * pow(4, var(--_ui-theme-curve)));
27
+ --ui-space-0-5: calc(var(--ui-space-1) * 0.5);
28
+ --ui-space-5: calc(var(--_ui-theme-unit) * pow(6, var(--_ui-theme-curve)));
29
+ --ui-space-6: calc(var(--_ui-theme-unit) * pow(8, var(--_ui-theme-curve)));
30
+ /* Vertical editing/action insets fit the shared box instead of growing with the
31
+ page spacing curve. Multi-line content can still grow intrinsically. */
32
+ --ui-control-inset-block-sm: max(0px, calc((var(--ui-control-size-sm) - var(--ui-font-size-sm) * var(--ui-line-height-tight) - 2 * var(--ui-border-width)) / 2));
33
+ --ui-control-inset-block-md: max(0px, calc((var(--ui-control-size-md) - var(--ui-font-size-md) * var(--ui-line-height-tight) - 2 * var(--ui-border-width)) / 2));
34
+ --ui-control-inset-block-lg: max(0px, calc((var(--ui-control-size-lg) - var(--ui-font-size-md) * var(--ui-line-height-tight) - 2 * var(--ui-border-width)) / 2));
35
+ --ui-action-inset-sm: calc(var(--ui-control-size-sm) * 0.625 * var(--ui-density));
36
+ --ui-action-inset-md: calc(var(--ui-control-size-md) * 0.625 * var(--ui-density));
37
+ --ui-action-inset-lg: calc(var(--ui-control-size-lg) * 0.625 * var(--ui-density));
38
+
39
+ --ui-radius-sm: calc(var(--ui-radius-md) * 0.5);
40
+ --ui-radius-lg: calc(var(--ui-radius-md) * 1.5);
41
+ --ui-action-radius: var(--ui-radius-md);
42
+ --ui-field-radius: var(--ui-radius-md);
43
+ --ui-overlay-radius: calc(var(--ui-radius-md) * 1.75);
44
+
45
+ /* Depth changes elevation and recession, not motion amplitude. Neutral shadows
46
+ work across palettes without an extra ornamental brand colour. */
47
+ --_ui-theme-outer: max(0, var(--ui-outer-depth));
48
+ --_ui-theme-inner: max(0, var(--ui-inner-depth));
49
+ --_ui-theme-edge: clamp(0, var(--ui-edge-light), 1);
50
+ --_ui-theme-edge-paint: inset 1px 1px 0 rgb(255 255 255 / calc(var(--_ui-theme-edge) * 0.08)), inset -1px -1px 0 rgb(0 0 0 / calc(var(--_ui-theme-edge) * 0.08));
51
+ --ui-action-edge: var(--_ui-theme-edge-paint);
52
+ --ui-shadow-xs: 0 calc(1px * var(--_ui-theme-outer)) calc(2px * var(--_ui-theme-outer)) rgb(0 0 0 / 0.08);
53
+ --ui-shadow-sm: 0 calc(1px * var(--_ui-theme-outer)) calc(3px * var(--_ui-theme-outer)) rgb(0 0 0 / 0.12), 0 calc(4px * var(--_ui-theme-outer)) calc(12px * var(--_ui-theme-outer)) rgb(0 0 0 / 0.06);
54
+ --ui-shadow-md: var(--ui-shadow-sm);
55
+ --ui-shadow-lg: 0 calc(8px * var(--_ui-theme-outer)) calc(24px * var(--_ui-theme-outer)) rgb(0 0 0 / 0.12), 0 calc(4px * var(--_ui-theme-outer)) calc(8px * var(--_ui-theme-outer)) rgb(0 0 0 / 0.06);
56
+ --ui-shadow-xl: var(--ui-shadow-lg);
57
+ --ui-action-shadow: var(--ui-shadow-sm);
58
+ --ui-raised: var(--ui-shadow-sm);
59
+ --ui-elevation-tooltip: var(--ui-shadow-sm);
60
+ --ui-elevation-overlay: var(--ui-shadow-lg);
61
+ --ui-elevation-dialog: var(--ui-shadow-lg);
62
+ --ui-control-inset: inset 0 calc(1px * var(--_ui-theme-inner)) calc(3px * var(--_ui-theme-inner)) rgb(0 0 0 / 0.15), inset 0 -1px 0 rgb(255 255 255 / calc(var(--_ui-theme-edge) * 0.18));
63
+ --ui-pressed: inset 0 calc(2px * var(--_ui-theme-inner)) calc(4px * var(--_ui-theme-inner)) rgb(0 0 0 / 0.2);
64
+ --ui-overlay-surface: color-mix(in srgb, var(--ui-surface-raised) calc((1 - clamp(0, var(--ui-overlay-translucency), 1)) * 100%), transparent);
65
+
66
+ /* Existing timing and easing names stay canonical. */
67
+ --ui-motion-press: calc(var(--ui-motion-fast) / 3);
68
+ --ui-motion-base: calc(var(--ui-motion-fast) * 1.2);
69
+ --ui-motion-ease-out: var(--ui-motion-ease);
70
+ --ui-press-scale: 0.98;
71
+ }
72
+
73
+ @media (prefers-reduced-motion: reduce) {
74
+ :where(:root, [data-theme], [data-contrast]) {
75
+ --ui-motion-press: 0ms;
76
+ --ui-motion-base: 0ms;
77
+ --ui-press-scale: 1;
78
+ }
79
+ }
80
+ }
package/tokens.css CHANGED
@@ -106,6 +106,12 @@
106
106
  --ui-font-family-sans: var(--ui-font-sans);
107
107
  --ui-font-family-mono: var(--ui-font-mono);
108
108
 
109
+ /* Text actions share the spacing scale; a theme may derive roomier action insets from its
110
+ control sizes without altering field padding or the common control height. */
111
+ --ui-action-inset-sm: var(--ui-space-2);
112
+ --ui-action-inset-md: var(--ui-space-3);
113
+ --ui-action-inset-lg: var(--ui-space-4);
114
+
109
115
  /* Space steps either side of the contract's four. */
110
116
  --ui-space-0-5: calc(var(--ui-space-1) * 0.5);
111
117
  --ui-space-5: calc(var(--ui-space-4) * 1.5);
@@ -243,6 +249,11 @@
243
249
  --ui-control-size-md: var(--ui-control-size);
244
250
  --ui-control-size-lg: calc(var(--ui-control-size) * 1.2);
245
251
 
252
+ /* Choice marks follow typography; row heights follow the shared control scale. */
253
+ --ui-choice-mark-size: calc(var(--ui-font-size) * 1.125);
254
+ --ui-choice-track-height: calc(var(--ui-font-size) * 1.5);
255
+ --ui-choice-track-width: calc(var(--ui-font-size) * 2.5);
256
+
246
257
  /* Icon sizes, used by icon buttons and field affordances. */
247
258
  --ui-icon-size-sm: var(--ui-font-size);
248
259
  --ui-icon-size-md: calc(var(--ui-font-size) * 1.25);
@@ -355,14 +366,14 @@
355
366
  [data-ui-choice-option][data-multiple]::before {
356
367
  content: "";
357
368
  flex: none;
358
- inline-size: 1.125rem;
359
- block-size: 1.125rem;
369
+ inline-size: var(--ui-choice-mark-size);
370
+ block-size: var(--ui-choice-mark-size);
360
371
  border: var(--ui-border-width) solid var(--ui-control-border-hover, var(--ui-border-strong));
361
372
  border-radius: var(--ui-radius-sm);
362
373
  background-color: var(--ui-control-surface);
363
374
  background-repeat: no-repeat;
364
375
  background-position: center;
365
- background-size: 0.7rem;
376
+ background-size: calc(var(--ui-font-size) * 0.7);
366
377
  }
367
378
 
368
379
  [data-ui-choice-option][data-multiple][aria-selected="true"]::before {
@@ -0,0 +1,30 @@
1
+ // Generated by HTML Next 1.0.0-alpha.69 for Vanilla DOM. Do not edit.
2
+ export interface UiColorPickerEventMap {
3
+ input: CustomEvent<{ readonly value: string }>;
4
+ change: CustomEvent<{ readonly value: string }>;
5
+ }
6
+ export interface UiColorPickerElement extends HTMLSpanElement {
7
+ addEventListener<K extends keyof UiColorPickerEventMap>(type: K, listener: (this: UiColorPickerElement, event: UiColorPickerEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
8
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: UiColorPickerElement, event: HTMLElementEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
9
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
10
+ removeEventListener<K extends keyof UiColorPickerEventMap>(type: K, listener: (this: UiColorPickerElement, event: UiColorPickerEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
11
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: UiColorPickerElement, event: HTMLElementEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
12
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
13
+ }
14
+ export interface UiColorPickerProps {
15
+ disabled?: boolean | null;
16
+ label?: string | null;
17
+ name?: string | null;
18
+ round?: boolean | null;
19
+ size?: "sm" | "md" | "lg" | null;
20
+ value?: string | null;
21
+ attributes?: Readonly<Record<string, string | number | boolean | null | undefined>>;
22
+ children?: readonly (string | Node)[];
23
+ slots?: Readonly<Record<string, readonly (string | Node)[]>>;
24
+ }
25
+ export declare function createUiColorPicker(props?: UiColorPickerProps): UiColorPickerElement;
26
+ declare global {
27
+ interface ComponentTagMap {
28
+ "ui-color-picker": { element: UiColorPickerElement; props: Omit<UiColorPickerProps, "attributes" | "children" | "slots"> };
29
+ }
30
+ }