@threadlabs/looma 0.5.1 → 0.6.0-rc.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 (341) hide show
  1. package/README.md +1 -1
  2. package/components/shared/overlay.js +3 -0
  3. package/components/ui-button/ui-button.html +27 -14
  4. package/components/ui-callout/ui-callout.html +1 -1
  5. package/components/ui-checkbox/ui-checkbox.html +1 -1
  6. package/components/ui-cluster/ui-cluster.html +6 -6
  7. package/components/ui-combobox/ui-combobox.html +35 -27
  8. package/components/ui-container/ui-container.html +4 -4
  9. package/components/ui-context-menu/ui-context-menu.html +2 -2
  10. package/components/ui-dialog/ui-dialog.html +21 -8
  11. package/components/ui-disclosure/ui-disclosure.html +19 -4
  12. package/components/ui-editable/ui-editable.html +6 -6
  13. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +21 -21
  14. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +26 -26
  15. package/components/ui-editor-slash-menu/ui-editor-slash-menu.html +39 -39
  16. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +26 -22
  17. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +68 -52
  18. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +42 -38
  19. package/components/ui-editor-toolbar/ui-editor-toolbar.html +9 -9
  20. package/components/ui-floating-action-button/ui-floating-action-button.html +16 -22
  21. package/components/ui-form-field/ui-form-field.html +18 -7
  22. package/components/ui-grid/ui-grid.html +6 -6
  23. package/components/ui-icon/ui-icon.html +5 -1
  24. package/components/ui-icon-button/ui-icon-button.html +68 -34
  25. package/components/ui-input/ui-input.html +2 -2
  26. package/components/ui-menu/ui-menu.html +15 -4
  27. package/components/ui-menu-item/ui-menu-item.html +5 -5
  28. package/components/ui-popover/ui-popover.html +3 -3
  29. package/components/ui-popover/ui-popover.js +10 -2
  30. package/components/ui-reel/ui-reel.html +6 -6
  31. package/components/ui-search-result-row/ui-search-result-row.html +9 -9
  32. package/components/ui-search-shell/ui-search-shell.html +10 -3
  33. package/components/ui-search-shell/ui-search-shell.js +9 -0
  34. package/components/ui-select/ui-select.html +2 -2
  35. package/components/ui-sidebar/ui-sidebar.html +11 -11
  36. package/components/ui-stack/ui-stack.html +6 -6
  37. package/components/ui-switcher/ui-switcher.html +6 -6
  38. package/components/ui-tabs/ui-tabs.html +19 -5
  39. package/components/ui-textarea/ui-textarea.html +2 -2
  40. package/components/ui-toast-region/ui-toast-region.html +3 -3
  41. package/components/ui-tooltip/ui-tooltip.html +1 -1
  42. package/components/ui-top-bar/ui-top-bar.html +5 -5
  43. package/components/ui-tree/ui-tree.html +7 -0
  44. package/components/ui-tree-item/ui-tree-item.html +20 -7
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.js +2 -2
  47. package/package.json +2 -2
  48. package/styles/ui-affordance-scope.css +1 -1
  49. package/styles/ui-avatar-group.css +1 -1
  50. package/styles/ui-avatar.css +1 -1
  51. package/styles/ui-badge.css +1 -1
  52. package/styles/ui-button.css +25 -15
  53. package/styles/ui-callout.css +2 -2
  54. package/styles/ui-checkbox.css +2 -2
  55. package/styles/ui-cluster.css +7 -7
  56. package/styles/ui-combobox.css +24 -24
  57. package/styles/ui-container.css +5 -5
  58. package/styles/ui-context-menu.css +3 -3
  59. package/styles/ui-dialog.css +26 -9
  60. package/styles/ui-disclosure.css +23 -7
  61. package/styles/ui-editable.css +7 -7
  62. package/styles/ui-editor-insert-table-grid.css +21 -21
  63. package/styles/ui-editor-mention-menu.css +26 -26
  64. package/styles/ui-editor-slash-menu.css +40 -40
  65. package/styles/ui-editor-table-context-menu.css +21 -21
  66. package/styles/ui-editor-table-overlay.css +49 -49
  67. package/styles/ui-editor-table-toolbar.css +35 -35
  68. package/styles/ui-editor-toolbar.css +10 -10
  69. package/styles/ui-floating-action-button.css +17 -23
  70. package/styles/ui-form-field.css +24 -10
  71. package/styles/ui-grid.css +7 -7
  72. package/styles/ui-icon-button.css +74 -35
  73. package/styles/ui-icon.css +1 -1
  74. package/styles/ui-input.css +3 -3
  75. package/styles/ui-menu-item.css +6 -6
  76. package/styles/ui-menu.css +19 -7
  77. package/styles/ui-popover.css +4 -4
  78. package/styles/ui-radio-group.css +1 -1
  79. package/styles/ui-radio.css +1 -1
  80. package/styles/ui-reel.css +7 -7
  81. package/styles/ui-search-result-row.css +10 -10
  82. package/styles/ui-search-shell.css +14 -5
  83. package/styles/ui-select.css +3 -3
  84. package/styles/ui-separator.css +1 -1
  85. package/styles/ui-sidebar.css +12 -12
  86. package/styles/ui-stack.css +7 -7
  87. package/styles/ui-switch.css +1 -1
  88. package/styles/ui-switcher.css +7 -7
  89. package/styles/ui-tabs.css +21 -7
  90. package/styles/ui-textarea.css +3 -3
  91. package/styles/ui-toast-region.css +3 -3
  92. package/styles/ui-tooltip.css +2 -2
  93. package/styles/ui-top-bar.css +6 -6
  94. package/styles/ui-tree-item.css +30 -9
  95. package/styles/ui-tree.css +8 -2
  96. package/theme-dark.css +42 -103
  97. package/theme-high-contrast.css +18 -22
  98. package/theme-light.css +15 -41
  99. package/tokens.css +149 -201
  100. package/vanilla/UiAffordanceScope.d.ts +1 -1
  101. package/vanilla/UiAffordanceScope.js +2 -2
  102. package/vanilla/UiAvatar.d.ts +1 -1
  103. package/vanilla/UiAvatar.js +2 -2
  104. package/vanilla/UiAvatarGroup.d.ts +1 -1
  105. package/vanilla/UiAvatarGroup.js +2 -2
  106. package/vanilla/UiBadge.d.ts +1 -1
  107. package/vanilla/UiBadge.js +2 -2
  108. package/vanilla/UiButton.d.ts +3 -1
  109. package/vanilla/UiButton.js +3 -3
  110. package/vanilla/UiCallout.d.ts +1 -1
  111. package/vanilla/UiCallout.js +2 -2
  112. package/vanilla/UiCheckbox.d.ts +1 -1
  113. package/vanilla/UiCheckbox.js +2 -2
  114. package/vanilla/UiCluster.d.ts +1 -1
  115. package/vanilla/UiCluster.js +2 -2
  116. package/vanilla/UiCombobox.d.ts +1 -1
  117. package/vanilla/UiCombobox.js +3 -3
  118. package/vanilla/UiContainer.d.ts +1 -1
  119. package/vanilla/UiContainer.js +2 -2
  120. package/vanilla/UiContextMenu.d.ts +1 -1
  121. package/vanilla/UiContextMenu.js +2 -2
  122. package/vanilla/UiDialog.d.ts +1 -1
  123. package/vanilla/UiDialog.js +2 -2
  124. package/vanilla/UiDisclosure.d.ts +2 -1
  125. package/vanilla/UiDisclosure.js +3 -3
  126. package/vanilla/UiEditable.d.ts +1 -1
  127. package/vanilla/UiEditable.js +2 -2
  128. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  129. package/vanilla/UiEditorInsertTableGrid.js +3 -3
  130. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  131. package/vanilla/UiEditorMentionMenu.js +3 -3
  132. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  133. package/vanilla/UiEditorSlashMenu.js +2 -2
  134. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  135. package/vanilla/UiEditorTableContextMenu.js +3 -3
  136. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  137. package/vanilla/UiEditorTableOverlay.js +3 -3
  138. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  139. package/vanilla/UiEditorTableToolbar.js +3 -3
  140. package/vanilla/UiEditorToolbar.d.ts +1 -1
  141. package/vanilla/UiEditorToolbar.js +2 -2
  142. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  143. package/vanilla/UiFloatingActionButton.js +2 -2
  144. package/vanilla/UiFormField.d.ts +1 -1
  145. package/vanilla/UiFormField.js +15 -6
  146. package/vanilla/UiGrid.d.ts +1 -1
  147. package/vanilla/UiGrid.js +2 -2
  148. package/vanilla/UiIcon.d.ts +1 -1
  149. package/vanilla/UiIcon.js +3 -3
  150. package/vanilla/UiIconButton.d.ts +1 -1
  151. package/vanilla/UiIconButton.js +2 -2
  152. package/vanilla/UiInput.d.ts +1 -1
  153. package/vanilla/UiInput.js +2 -2
  154. package/vanilla/UiMenu.d.ts +2 -1
  155. package/vanilla/UiMenu.js +3 -3
  156. package/vanilla/UiMenuItem.d.ts +1 -1
  157. package/vanilla/UiMenuItem.js +2 -2
  158. package/vanilla/UiPopover.d.ts +1 -1
  159. package/vanilla/UiPopover.js +2 -2
  160. package/vanilla/UiRadio.d.ts +1 -1
  161. package/vanilla/UiRadio.js +2 -2
  162. package/vanilla/UiRadioGroup.d.ts +1 -1
  163. package/vanilla/UiRadioGroup.js +2 -2
  164. package/vanilla/UiReel.d.ts +1 -1
  165. package/vanilla/UiReel.js +2 -2
  166. package/vanilla/UiSearchResultRow.d.ts +1 -1
  167. package/vanilla/UiSearchResultRow.js +2 -2
  168. package/vanilla/UiSearchShell.d.ts +1 -1
  169. package/vanilla/UiSearchShell.js +2 -2
  170. package/vanilla/UiSelect.d.ts +1 -1
  171. package/vanilla/UiSelect.js +2 -2
  172. package/vanilla/UiSeparator.d.ts +1 -1
  173. package/vanilla/UiSeparator.js +2 -2
  174. package/vanilla/UiSidebar.d.ts +1 -1
  175. package/vanilla/UiSidebar.js +2 -2
  176. package/vanilla/UiStack.d.ts +1 -1
  177. package/vanilla/UiStack.js +2 -2
  178. package/vanilla/UiSwitch.d.ts +1 -1
  179. package/vanilla/UiSwitch.js +2 -2
  180. package/vanilla/UiSwitcher.d.ts +1 -1
  181. package/vanilla/UiSwitcher.js +2 -2
  182. package/vanilla/UiTabs.d.ts +2 -1
  183. package/vanilla/UiTabs.js +3 -3
  184. package/vanilla/UiTextarea.d.ts +1 -1
  185. package/vanilla/UiTextarea.js +2 -2
  186. package/vanilla/UiToastRegion.d.ts +1 -1
  187. package/vanilla/UiToastRegion.js +3 -3
  188. package/vanilla/UiTooltip.d.ts +1 -1
  189. package/vanilla/UiTooltip.js +2 -2
  190. package/vanilla/UiTopBar.d.ts +1 -1
  191. package/vanilla/UiTopBar.js +1 -1
  192. package/vanilla/UiTree.d.ts +2 -1
  193. package/vanilla/UiTree.js +3 -3
  194. package/vanilla/UiTreeItem.d.ts +1 -1
  195. package/vanilla/UiTreeItem.js +2 -2
  196. package/vue/UiAffordanceScope.d.ts +2 -2
  197. package/vue/UiAffordanceScope.vue +92 -73
  198. package/vue/UiAvatar.d.ts +7 -7
  199. package/vue/UiAvatar.vue +145 -105
  200. package/vue/UiAvatarGroup.d.ts +4 -4
  201. package/vue/UiAvatarGroup.vue +134 -118
  202. package/vue/UiBadge.d.ts +4 -4
  203. package/vue/UiBadge.vue +113 -114
  204. package/vue/UiButton.d.ts +10 -6
  205. package/vue/UiButton.vue +295 -248
  206. package/vue/UiCallout.d.ts +2 -2
  207. package/vue/UiCallout.vue +154 -87
  208. package/vue/UiCheckbox.d.ts +14 -10
  209. package/vue/UiCheckbox.vue +228 -162
  210. package/vue/UiCluster.d.ts +2 -2
  211. package/vue/UiCluster.vue +53 -60
  212. package/vue/UiCombobox.d.ts +36 -32
  213. package/vue/UiCombobox.vue +1005 -416
  214. package/vue/UiContainer.d.ts +2 -2
  215. package/vue/UiContainer.vue +48 -51
  216. package/vue/UiContextMenu.d.ts +6 -4
  217. package/vue/UiContextMenu.vue +205 -116
  218. package/vue/UiDialog.d.ts +11 -9
  219. package/vue/UiDialog.vue +287 -212
  220. package/vue/UiDisclosure.d.ts +10 -6
  221. package/vue/UiDisclosure.vue +265 -159
  222. package/vue/UiEditable.d.ts +16 -12
  223. package/vue/UiEditable.vue +325 -205
  224. package/vue/UiEditorInsertTableGrid.d.ts +8 -8
  225. package/vue/UiEditorInsertTableGrid.vue +216 -157
  226. package/vue/UiEditorMentionMenu.d.ts +9 -9
  227. package/vue/UiEditorMentionMenu.vue +265 -222
  228. package/vue/UiEditorSlashMenu.d.ts +7 -7
  229. package/vue/UiEditorSlashMenu.vue +286 -240
  230. package/vue/UiEditorTableContextMenu.d.ts +5 -5
  231. package/vue/UiEditorTableContextMenu.vue +306 -193
  232. package/vue/UiEditorTableOverlay.d.ts +2 -2
  233. package/vue/UiEditorTableOverlay.vue +600 -369
  234. package/vue/UiEditorTableToolbar.d.ts +7 -7
  235. package/vue/UiEditorTableToolbar.vue +443 -268
  236. package/vue/UiEditorToolbar.d.ts +2 -2
  237. package/vue/UiEditorToolbar.vue +134 -121
  238. package/vue/UiFloatingActionButton.d.ts +6 -6
  239. package/vue/UiFloatingActionButton.vue +95 -99
  240. package/vue/UiFormField.d.ts +6 -6
  241. package/vue/UiFormField.vue +112 -80
  242. package/vue/UiGrid.d.ts +2 -2
  243. package/vue/UiGrid.vue +51 -57
  244. package/vue/UiIcon.d.ts +2 -2
  245. package/vue/UiIcon.vue +118 -89
  246. package/vue/UiIconButton.d.ts +11 -11
  247. package/vue/UiIconButton.vue +287 -217
  248. package/vue/UiInput.d.ts +9 -9
  249. package/vue/UiInput.vue +153 -127
  250. package/vue/UiMenu.d.ts +10 -6
  251. package/vue/UiMenu.vue +227 -143
  252. package/vue/UiMenuItem.d.ts +4 -4
  253. package/vue/UiMenuItem.vue +53 -46
  254. package/vue/UiPopover.d.ts +8 -6
  255. package/vue/UiPopover.vue +197 -137
  256. package/vue/UiRadio.d.ts +14 -10
  257. package/vue/UiRadio.vue +183 -117
  258. package/vue/UiRadioGroup.d.ts +14 -12
  259. package/vue/UiRadioGroup.vue +172 -111
  260. package/vue/UiReel.d.ts +3 -3
  261. package/vue/UiReel.vue +77 -77
  262. package/vue/UiSearchResultRow.d.ts +4 -4
  263. package/vue/UiSearchResultRow.vue +121 -115
  264. package/vue/UiSearchShell.d.ts +10 -8
  265. package/vue/UiSearchShell.vue +245 -176
  266. package/vue/UiSelect.d.ts +9 -9
  267. package/vue/UiSelect.vue +162 -134
  268. package/vue/UiSeparator.d.ts +2 -2
  269. package/vue/UiSeparator.vue +22 -27
  270. package/vue/UiSidebar.d.ts +20 -18
  271. package/vue/UiSidebar.vue +307 -224
  272. package/vue/UiStack.d.ts +3 -3
  273. package/vue/UiStack.vue +64 -70
  274. package/vue/UiSwitch.d.ts +12 -8
  275. package/vue/UiSwitch.vue +218 -150
  276. package/vue/UiSwitcher.d.ts +3 -3
  277. package/vue/UiSwitcher.vue +73 -75
  278. package/vue/UiTabs.d.ts +12 -8
  279. package/vue/UiTabs.vue +268 -210
  280. package/vue/UiTextarea.d.ts +11 -11
  281. package/vue/UiTextarea.vue +155 -128
  282. package/vue/UiToastRegion.d.ts +10 -8
  283. package/vue/UiToastRegion.vue +261 -198
  284. package/vue/UiTooltip.d.ts +14 -12
  285. package/vue/UiTooltip.vue +241 -177
  286. package/vue/UiTopBar.vue +51 -42
  287. package/vue/UiTree.d.ts +10 -6
  288. package/vue/UiTree.vue +180 -70
  289. package/vue/UiTreeItem.d.ts +24 -22
  290. package/vue/UiTreeItem.vue +464 -339
  291. package/vue/chunks/UiAffordanceScope.js +9 -16
  292. package/vue/chunks/UiAvatar.js +23 -29
  293. package/vue/chunks/UiAvatarGroup.js +16 -39
  294. package/vue/chunks/UiBadge.js +3 -12
  295. package/vue/chunks/UiButton.js +15 -18
  296. package/vue/chunks/UiCallout.js +8 -17
  297. package/vue/chunks/UiCheckbox.js +37 -40
  298. package/vue/chunks/UiCluster.js +3 -12
  299. package/vue/chunks/UiCombobox.js +224 -266
  300. package/vue/chunks/UiContainer.js +3 -12
  301. package/vue/chunks/UiContextMenu.js +39 -34
  302. package/vue/chunks/UiDialog.js +36 -39
  303. package/vue/chunks/UiDisclosure.js +44 -48
  304. package/vue/chunks/UiEditable.js +55 -57
  305. package/vue/chunks/UiEditorInsertTableGrid.js +55 -73
  306. package/vue/chunks/UiEditorMentionMenu.js +40 -81
  307. package/vue/chunks/UiEditorSlashMenu.js +28 -52
  308. package/vue/chunks/UiEditorTableContextMenu.js +32 -56
  309. package/vue/chunks/UiEditorTableOverlay.js +58 -82
  310. package/vue/chunks/UiEditorTableToolbar.js +61 -85
  311. package/vue/chunks/UiEditorToolbar.js +4 -13
  312. package/vue/chunks/UiFloatingActionButton.js +7 -21
  313. package/vue/chunks/UiFormField.js +15 -12
  314. package/vue/chunks/UiGrid.js +3 -12
  315. package/vue/chunks/UiIcon.js +20 -43
  316. package/vue/chunks/UiIconButton.js +16 -28
  317. package/vue/chunks/UiInput.js +20 -25
  318. package/vue/chunks/UiMenu.js +30 -33
  319. package/vue/chunks/UiMenuItem.js +4 -10
  320. package/vue/chunks/UiPopover.js +28 -29
  321. package/vue/chunks/UiRadio.js +36 -39
  322. package/vue/chunks/UiRadioGroup.js +30 -34
  323. package/vue/chunks/UiReel.js +6 -15
  324. package/vue/chunks/UiSearchResultRow.js +6 -19
  325. package/vue/chunks/UiSearchShell.js +25 -28
  326. package/vue/chunks/UiSelect.js +20 -23
  327. package/vue/chunks/UiSeparator.js +2 -8
  328. package/vue/chunks/UiSidebar.js +39 -44
  329. package/vue/chunks/UiStack.js +6 -15
  330. package/vue/chunks/UiSwitch.js +35 -38
  331. package/vue/chunks/UiSwitcher.js +6 -15
  332. package/vue/chunks/UiTabs.js +52 -85
  333. package/vue/chunks/UiTextarea.js +21 -26
  334. package/vue/chunks/UiToastRegion.js +38 -72
  335. package/vue/chunks/UiTooltip.js +34 -35
  336. package/vue/chunks/UiTopBar.js +1 -1
  337. package/vue/chunks/UiTree.js +27 -16
  338. package/vue/chunks/UiTreeItem.js +85 -102
  339. package/vue/components.css +4027 -3800
  340. package/vue/editor/LoomaEditor.d.ts +11 -0
  341. package/vue/editor/index.js +9 -0
@@ -1,216 +1,282 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.1 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.2 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
- import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watchEffect } from "vue";
4
- import * as controllerModule from "../components/ui-checkbox/ui-checkbox.js";
5
-
6
- defineOptions({ inheritAttrs: false });
7
-
8
- const hn = {
9
- t: (v: unknown): boolean => v === true || (typeof v === "string" ? v.length > 0 : typeof v === "number" ? v !== 0 && v === v : Array.isArray(v) ? v.length > 0 : v !== null && typeof v === "object" ? Object.keys(v).length > 0 : false),
10
- text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
11
- attr: (v: unknown): any => v === undefined || v === null || v === false ? undefined : v === true ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? undefined : String(v),
12
- };
13
-
14
- const props = withDefaults(defineProps<{
15
- checked?: boolean | null;
16
- disabled?: boolean | null;
17
- indeterminate?: boolean | null;
18
- required?: boolean | null;
19
- value?: string | null;
20
- }>(), {
21
- checked: false,
22
- disabled: false,
23
- indeterminate: false,
24
- required: false,
25
- value: "on",
26
- });
3
+ import {
4
+ computed,
5
+ onBeforeUnmount,
6
+ onMounted,
7
+ ref,
8
+ shallowRef,
9
+ useTemplateRef,
10
+ watchEffect,
11
+ } from 'vue'
12
+ import * as controllerModule from '../components/ui-checkbox/ui-checkbox.js'
13
+
14
+ defineOptions({ inheritAttrs: false })
15
+
16
+ const props = withDefaults(
17
+ defineProps<{
18
+ checked?: boolean
19
+ disabled?: boolean
20
+ indeterminate?: boolean
21
+ required?: boolean
22
+ value?: string
23
+ }>(),
24
+ {
25
+ checked: false,
26
+ disabled: false,
27
+ indeterminate: false,
28
+ required: false,
29
+ value: 'on',
30
+ },
31
+ )
27
32
  const emit = defineEmits<{
28
- "change": [detail: { readonly checked: boolean; readonly value: string; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
29
- }>();
30
- const root = ref<HTMLElement | null>(null);
31
- const refs: Record<string, Element | undefined> = {};
32
- const state_internalChecked = ref<any>(false);
33
+ 'update:checked': [value: boolean]
34
+ 'update:value': [value: string]
35
+ change: [
36
+ detail: {
37
+ readonly checked: boolean
38
+ readonly value: string
39
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
40
+ },
41
+ ]
42
+ }>()
43
+
44
+ const root = ref<HTMLElement | null>(null)
45
+ const inputElement = useTemplateRef<HTMLElement>('input')
46
+ const internalChecked = ref(false)
47
+
48
+ /** The values the styles' :host-state() rules test. */
49
+ const hostState = computed(() =>
50
+ [
51
+ props.disabled && 'disabled',
52
+ ].filter(Boolean).join(' ')
53
+ )
33
54
 
34
55
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
35
- const dispatch = (name: string, detail?: unknown): boolean => {
36
- const declared = {"change":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
56
+ function dispatch(name: string, detail?: unknown): boolean {
57
+ const declared: Record<string, EventInit | undefined> = {
58
+ change: { bubbles: true, composed: true, cancelable: false },
59
+ }
37
60
  const checks: Record<string, (detail: unknown) => boolean> = {
38
- "change": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["checked"] === "boolean" && typeof (detail as Record<string, unknown>)["value"] === "string" && ((detail as Record<string, unknown>)["trigger"] === "keyboard" || (detail as Record<string, unknown>)["trigger"] === "pointer" || (detail as Record<string, unknown>)["trigger"] === "programmatic") && Object.keys(detail as object).every((key) => ["checked","value","trigger"].includes(key))),
39
- };
61
+ change: (detail) =>
62
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
63
+ && typeof (detail as Record<string, unknown>)['checked'] === 'boolean'
64
+ && typeof (detail as Record<string, unknown>)['value'] === 'string'
65
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
66
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
67
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
68
+ && Object.keys(detail as object).every((key) =>
69
+ ['checked', 'value', 'trigger'].includes(key)
70
+ ),
71
+ }
40
72
  if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
41
- throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
73
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`)
74
+ }
75
+ const emitEvent = emit as (name: string, detail: unknown) => void
76
+ emitEvent(name, detail)
77
+ if (detail !== null && typeof detail === 'object' && 'checked' in detail) {
78
+ emitEvent('update:checked', (detail as Record<string, unknown>)['checked'])
79
+ }
80
+ if (detail !== null && typeof detail === 'object' && 'value' in detail) {
81
+ emitEvent('update:value', (detail as Record<string, unknown>)['value'])
42
82
  }
43
- (emit as (name: string, detail: unknown) => void)(name, detail);
44
- return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail })) ?? true;
45
- };
46
-
47
- /** The resolved values the styles' :host-state() rules test. */
48
- const hostState = computed(() => (["disabled"] as const).flatMap((name) => {
49
- const value = read(name);
50
- const tokens: string[] = hn.t(value) ? [name] : [];
51
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
52
- return tokens;
53
- }).join(" "));
83
+ return root.value?.dispatchEvent(
84
+ new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail }),
85
+ ) ?? true
86
+ }
54
87
 
55
88
  function read(name: string): unknown {
56
- if (name === "internalChecked") return state_internalChecked.value;
57
- return (props as Record<string, unknown>)[name];
89
+ if (name === 'internalChecked') return internalChecked.value
90
+ return (props as Record<string, unknown>)[name]
58
91
  }
59
92
 
60
93
  function write(name: string, value: unknown): boolean {
61
- if (name === "internalChecked") { state_internalChecked.value = value; return true; }
62
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
94
+ if (name === 'internalChecked') {
95
+ internalChecked.value = value as never
96
+ return true
97
+ }
98
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
63
99
  }
64
100
 
65
- const stops: Array<() => void> = [];
101
+ const stops: Array<() => void> = []
66
102
  const host = {
67
- get element(): Element { return root.value as Element; },
103
+ get element(): Element {
104
+ return root.value as Element
105
+ },
68
106
  state: new Proxy({} as Record<string, unknown>, {
69
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
70
- set: (_target, name, value) => typeof name === "string" && write(name, value),
107
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
108
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
71
109
  }),
72
- refs: refs as Readonly<Record<string, Element>>,
110
+ refs: {
111
+ get input(): Element {
112
+ return inputElement.value as Element
113
+ },
114
+ } as Readonly<Record<string, Element>>,
73
115
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
74
116
  get: (_target, name) => {
75
- if (typeof name !== "string" || root.value === null) return undefined;
76
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
77
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
117
+ if (typeof name !== 'string' || root.value === null) return undefined
118
+ const form = root.value instanceof HTMLFormElement
119
+ ? root.value
120
+ : root.value.querySelector('form')
121
+ return form?.elements.namedItem(name)
122
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
78
123
  },
79
124
  }),
80
125
  signal<T>(initialValue: T) {
81
- const value = shallowRef(initialValue);
126
+ const value = shallowRef(initialValue)
82
127
  return {
83
128
  get: (): T => value.value,
84
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
85
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
86
- };
129
+ set: (next: T): void => {
130
+ if (!Object.is(value.value, next)) value.value = next
131
+ },
132
+ update: (next: (current: T) => T): void => {
133
+ const updated = next(value.value)
134
+ if (!Object.is(value.value, updated)) value.value = updated
135
+ },
136
+ }
87
137
  },
88
138
  computed<T>(compute: () => T) {
89
- const value = computed(compute);
90
- return { get: (): T => value.value };
139
+ const value = computed(compute)
140
+ return { get: (): T => value.value }
91
141
  },
92
142
  effect(run: () => void | (() => void)): () => void {
93
143
  const stop = watchEffect((onCleanup) => {
94
- const cleanup = run();
95
- if (typeof cleanup === "function") onCleanup(cleanup);
96
- }, { flush: "post" });
97
- stops.push(stop);
98
- return stop;
144
+ const cleanup = run()
145
+ if (typeof cleanup === 'function') onCleanup(cleanup)
146
+ }, { flush: 'post' })
147
+ stops.push(stop)
148
+ return stop
99
149
  },
100
150
  on(event: string, listener: EventListener): () => void {
101
- const element = root.value;
102
- element?.addEventListener(event, listener);
103
- const off = (): void => element?.removeEventListener(event, listener);
104
- stops.push(off);
105
- return off;
151
+ const element = root.value
152
+ element?.addEventListener(event, listener)
153
+ const off = (): void => element?.removeEventListener(event, listener)
154
+ stops.push(off)
155
+ return off
106
156
  },
107
157
  dispatch,
108
- };
158
+ }
109
159
 
110
- let cleanup: void | (() => void);
111
- let ready: Promise<void> | undefined;
160
+ let cleanup: void | (() => void)
161
+ let ready: Promise<void> | undefined
112
162
  onMounted(() => {
113
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
114
- });
163
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
164
+ cleanup = result
165
+ })
166
+ })
115
167
  onBeforeUnmount(() => {
116
- for (const stop of stops.splice(0)) stop();
117
- if (typeof cleanup === "function") cleanup();
118
- });
168
+ for (const stop of stops.splice(0)) stop()
169
+ if (typeof cleanup === 'function') cleanup()
170
+ })
119
171
  </script>
120
172
 
121
173
  <template>
122
- <label data-component="ui-checkbox" v-bind="$attrs" :data-ui-checkbox-state="hostState || undefined" ref="root"><input type="checkbox" :checked.prop="(state_internalChecked) as any" :indeterminate.prop="(props.indeterminate) as any" :disabled="hn.attr(props.disabled)" :required="hn.attr(props.required)" :value="hn.attr(props.value)" :ref="(element) => { refs['input'] = element as Element }"><span class="label"><slot></slot></span></label>
174
+ <label
175
+ data-component="ui-checkbox"
176
+ v-bind="$attrs"
177
+ :data-ui-checkbox-state="hostState || undefined"
178
+ ref="root"
179
+ ><input
180
+ type="checkbox"
181
+ :checked.prop="internalChecked"
182
+ :indeterminate.prop="indeterminate"
183
+ :disabled="disabled"
184
+ :required="required"
185
+ :value="value"
186
+ ref="input"
187
+ >
188
+ <span class="label"><slot /></span></label>
123
189
  </template>
124
190
 
125
191
  <style scoped>
126
192
  [data-component~="ui-checkbox"] {
127
- display: inline-flex;
128
- align-items: flex-start;
129
- gap: var(--ui-checkbox-gap, var(--ui-space-2));
130
- max-inline-size: 100%;
131
- color: var(--ui-text-primary);
132
- cursor: pointer;
133
- }
193
+ display: inline-flex;
194
+ align-items: flex-start;
195
+ gap: var(--ui-checkbox-gap, var(--ui-space-2));
196
+ max-inline-size: 100%;
197
+ color: var(--ui-text-primary);
198
+ cursor: pointer;
199
+ }
134
200
 
135
- .label {
136
- min-inline-size: 0;
137
- line-height: var(--ui-line-height-md);
138
- }
201
+ .label {
202
+ min-inline-size: 0;
203
+ line-height: var(--ui-line-height-md);
204
+ }
139
205
 
140
- input {
141
- appearance: none;
142
- -webkit-appearance: none;
143
- position: relative;
144
- flex: 0 0 auto;
145
- inline-size: var(--ui-checkbox-size, 1.125rem);
146
- block-size: var(--ui-checkbox-size, 1.125rem);
147
- margin: 0.125em 0 0;
148
- border: 1px solid var(--ui-control-border-hover, var(--ui-border-strong));
149
- border-radius: var(--ui-radius-1);
150
- background: var(--ui-control-surface, var(--ui-surface-default));
151
- box-shadow: inset 0 1px 2px color-mix(in srgb, var(--ui-text-primary) 8%, transparent);
152
- cursor: pointer;
153
- transition:
154
- background-color var(--ui-motion-fast) var(--ui-motion-ease),
155
- border-color var(--ui-motion-fast) var(--ui-motion-ease),
156
- box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
157
- }
206
+ input {
207
+ appearance: none;
208
+ -webkit-appearance: none;
209
+ position: relative;
210
+ flex: 0 0 auto;
211
+ inline-size: var(--ui-checkbox-size, 1.125rem);
212
+ block-size: var(--ui-checkbox-size, 1.125rem);
213
+ margin: 0.125em 0 0;
214
+ border: 1px solid var(--ui-control-border-hover, var(--ui-border-strong));
215
+ border-radius: var(--ui-radius-sm);
216
+ background: var(--ui-control-surface, var(--ui-surface-default));
217
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--ui-text-primary) 8%, transparent);
218
+ cursor: pointer;
219
+ transition:
220
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
221
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
222
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
223
+ }
158
224
 
159
- input::after {
160
- content: "";
161
- position: absolute;
162
- opacity: 0;
163
- }
225
+ input::after {
226
+ content: "";
227
+ position: absolute;
228
+ opacity: 0;
229
+ }
164
230
 
165
- input:checked,
166
- input:indeterminate {
167
- border-color: var(--ui-accent-solid);
168
- background: var(--ui-accent-solid);
169
- box-shadow: inset 0 1px 2px color-mix(in srgb, #000 16%, transparent);
170
- }
231
+ input:checked,
232
+ input:indeterminate {
233
+ border-color: var(--ui-accent-solid);
234
+ background: var(--ui-accent-solid);
235
+ box-shadow: inset 0 1px 2px color-mix(in srgb, #000 16%, transparent);
236
+ }
171
237
 
172
- /* Centre the tick's box, then lift it: a rotated L's ink sits ~0.11rem below its box centre. */
173
- input:checked::after {
174
- inset: 0;
175
- margin: auto;
176
- inline-size: 0.32rem;
177
- block-size: 0.58rem;
178
- border: solid var(--ui-text-on-accent);
179
- border-width: 0 0.125rem 0.125rem 0;
180
- opacity: 1;
181
- transform: translateY(-0.11rem) rotate(45deg);
182
- }
238
+ /* Centre the tick's box, then lift it: a rotated L's ink sits ~0.11rem below its box centre. */
239
+ input:checked::after {
240
+ inset: 0;
241
+ margin: auto;
242
+ inline-size: 0.32rem;
243
+ block-size: 0.58rem;
244
+ border: solid var(--ui-text-on-accent);
245
+ border-width: 0 0.125rem 0.125rem 0;
246
+ opacity: 1;
247
+ transform: translateY(-0.11rem) rotate(45deg);
248
+ }
183
249
 
184
- input:indeterminate::after {
185
- inset: 50% 0.23rem auto;
186
- block-size: 0.125rem;
187
- border-radius: var(--ui-radius-round);
188
- background: var(--ui-text-on-accent);
189
- opacity: 1;
190
- transform: translateY(-50%);
191
- }
250
+ input:indeterminate::after {
251
+ inset: 50% 0.23rem auto;
252
+ block-size: 0.125rem;
253
+ border-radius: var(--ui-radius-round);
254
+ background: var(--ui-text-on-accent);
255
+ opacity: 1;
256
+ transform: translateY(-50%);
257
+ }
192
258
 
193
- input:hover:enabled {
194
- border-color: var(--ui-accent-solid);
195
- }
259
+ input:hover:enabled {
260
+ border-color: var(--ui-accent-solid);
261
+ }
196
262
 
197
- input:focus-visible {
198
- outline: 2px solid var(--ui-focus-ring, var(--ui-accent-solid));
199
- outline-offset: 2px;
200
- }
263
+ input:focus-visible {
264
+ outline: 2px solid var(--ui-focus-ring, var(--ui-accent-solid));
265
+ outline-offset: 2px;
266
+ }
201
267
 
202
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"] {
203
- color: var(--ui-text-muted);
204
- cursor: not-allowed;
205
- }
206
- [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"] input {
207
- border-color: var(--ui-border-default);
208
- background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
209
- cursor: not-allowed;
210
- }
268
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"] {
269
+ color: var(--ui-text-muted);
270
+ cursor: not-allowed;
271
+ }
272
+ [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"] input {
273
+ border-color: var(--ui-border-default);
274
+ background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
275
+ cursor: not-allowed;
276
+ }
211
277
 
212
- /* A component that sets its display still honours the hidden attribute on its root. */
213
- [data-component~="ui-checkbox"][hidden] {
214
- display: none;
215
- }
278
+ /* A component that sets its display still honours the hidden attribute on its root. */
279
+ [data-component~="ui-checkbox"][hidden] {
280
+ display: none;
281
+ }
216
282
  </style>
@@ -1,6 +1,6 @@
1
1
  type __VLS_Props = {
2
- align?: "start" | "center" | "end" | "stretch" | null;
3
- gap?: "xs" | "s" | "m" | "l" | "xl" | null;
2
+ align?: 'start' | 'center' | 'end' | 'stretch';
3
+ gap?: 'xs' | 's' | 'm' | 'l' | 'xl';
4
4
  };
5
5
  declare var __VLS_1: {};
6
6
  type __VLS_Slots = {} & {
package/vue/UiCluster.vue CHANGED
@@ -1,75 +1,68 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.1 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.2 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
- import { computed } from "vue";
3
+ import { computed } from 'vue'
4
4
 
5
- defineOptions({ inheritAttrs: false });
6
-
7
- const hn = {
8
- t: (v: unknown): boolean => v === true || (typeof v === "string" ? v.length > 0 : typeof v === "number" ? v !== 0 && v === v : Array.isArray(v) ? v.length > 0 : v !== null && typeof v === "object" ? Object.keys(v).length > 0 : false),
9
- };
5
+ defineOptions({ inheritAttrs: false })
10
6
 
11
7
  const props = defineProps<{
12
- align?: "start" | "center" | "end" | "stretch" | null;
13
- gap?: "xs" | "s" | "m" | "l" | "xl" | null;
14
- }>();
15
-
16
- /** The resolved values the styles' :host-state() rules test. */
17
- const hostState = computed(() => (["gap","align"] as const).flatMap((name) => {
18
- const value = read(name);
19
- const tokens: string[] = hn.t(value) ? [name] : [];
20
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
21
- return tokens;
22
- }).join(" "));
23
-
24
- function read(name: string): unknown {
25
- return (props as Record<string, unknown>)[name];
26
- }
8
+ align?: 'start' | 'center' | 'end' | 'stretch'
9
+ gap?: 'xs' | 's' | 'm' | 'l' | 'xl'
10
+ }>()
27
11
 
12
+ /** The values the styles' :host-state() rules test. */
13
+ const hostState = computed(() =>
14
+ [
15
+ props.gap && `gap gap=${props.gap}`,
16
+ props.align && `align align=${props.align}`,
17
+ ].filter(Boolean).join(' ')
18
+ )
28
19
  </script>
29
20
 
30
21
  <template>
31
- <div data-component="ui-cluster" v-bind="$attrs" :data-ui-cluster-state="hostState || undefined"><slot></slot></div>
22
+ <div data-component="ui-cluster" v-bind="$attrs" :data-ui-cluster-state="hostState || undefined">
23
+ <slot />
24
+ </div>
32
25
  </template>
33
26
 
34
27
  <style scoped>
35
28
  [data-component~="ui-cluster"] {
36
- --_layout-gap: var(--ui-space-3, 0.75rem);
37
- display: flex;
38
- flex-wrap: wrap;
39
- align-items: center;
40
- gap: var(--ui-layout-gap, var(--_layout-gap));
41
- min-inline-size: 0;
42
- max-inline-size: 100%;
43
- margin: 0;
44
- }
29
+ --_layout-gap: var(--ui-space-3);
30
+ display: flex;
31
+ flex-wrap: wrap;
32
+ align-items: center;
33
+ gap: var(--ui-layout-gap, var(--_layout-gap));
34
+ min-inline-size: 0;
35
+ max-inline-size: 100%;
36
+ margin: 0;
37
+ }
45
38
 
46
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=xs"] {
47
- --_layout-gap: var(--ui-space-2, 0.5rem);
48
- }
49
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=s"] {
50
- --_layout-gap: var(--ui-space-3, 0.75rem);
51
- }
52
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=m"] {
53
- --_layout-gap: var(--ui-space-4, 1rem);
54
- }
55
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=l"] {
56
- --_layout-gap: var(--ui-space-5, 1.5rem);
57
- }
58
- [data-component~="ui-cluster"][data-ui-cluster-state~="gap=xl"] {
59
- --_layout-gap: var(--ui-space-6, 2rem);
60
- }
61
- [data-component~="ui-cluster"][data-ui-cluster-state~="align=start"] {
62
- align-items: flex-start;
63
- }
64
- [data-component~="ui-cluster"][data-ui-cluster-state~="align=end"] {
65
- align-items: flex-end;
66
- }
67
- [data-component~="ui-cluster"][data-ui-cluster-state~="align=stretch"] {
68
- align-items: stretch;
69
- }
39
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=xs"] {
40
+ --_layout-gap: var(--ui-space-2);
41
+ }
42
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=s"] {
43
+ --_layout-gap: var(--ui-space-3);
44
+ }
45
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=m"] {
46
+ --_layout-gap: var(--ui-space-4);
47
+ }
48
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=l"] {
49
+ --_layout-gap: var(--ui-space-5);
50
+ }
51
+ [data-component~="ui-cluster"][data-ui-cluster-state~="gap=xl"] {
52
+ --_layout-gap: var(--ui-space-6);
53
+ }
54
+ [data-component~="ui-cluster"][data-ui-cluster-state~="align=start"] {
55
+ align-items: flex-start;
56
+ }
57
+ [data-component~="ui-cluster"][data-ui-cluster-state~="align=end"] {
58
+ align-items: flex-end;
59
+ }
60
+ [data-component~="ui-cluster"][data-ui-cluster-state~="align=stretch"] {
61
+ align-items: stretch;
62
+ }
70
63
 
71
- /* A component that sets its display still honours the hidden attribute on its root. */
72
- [data-component~="ui-cluster"][hidden] {
73
- display: none;
74
- }
64
+ /* A component that sets its display still honours the hidden attribute on its root. */
65
+ [data-component~="ui-cluster"][hidden] {
66
+ display: none;
67
+ }
75
68
  </style>