@threadlabs/looma 0.5.0 → 0.5.2

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 (313) hide show
  1. package/README.md +1 -1
  2. package/components/shared/input-modality.d.ts +8 -0
  3. package/components/shared/input-modality.js +2 -0
  4. package/components/ui-button/ui-button.html +42 -1
  5. package/components/ui-combobox/ui-combobox.html +12 -4
  6. package/components/ui-dialog/ui-dialog.html +13 -0
  7. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +1 -1
  8. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +1 -1
  9. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +6 -2
  10. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +20 -4
  11. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +8 -4
  12. package/components/ui-form-field/ui-form-field.html +18 -7
  13. package/components/ui-icon/ui-icon.html +5 -1
  14. package/components/ui-icon-button/ui-icon-button.html +44 -1
  15. package/components/ui-popover/ui-popover.js +10 -2
  16. package/components/ui-search-shell/ui-search-shell.html +7 -0
  17. package/components/ui-search-shell/ui-search-shell.js +9 -0
  18. package/components/ui-tabs/ui-tabs.html +1 -1
  19. package/components/ui-toast-region/ui-toast-region.html +1 -1
  20. package/components/ui-tree-item/ui-tree-item.html +6 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js +2 -2
  23. package/package.json +2 -2
  24. package/styles/ui-affordance-scope.css +1 -1
  25. package/styles/ui-avatar-group.css +1 -1
  26. package/styles/ui-avatar.css +1 -1
  27. package/styles/ui-badge.css +1 -1
  28. package/styles/ui-button.css +42 -2
  29. package/styles/ui-callout.css +1 -1
  30. package/styles/ui-checkbox.css +1 -1
  31. package/styles/ui-cluster.css +1 -1
  32. package/styles/ui-combobox.css +1 -1
  33. package/styles/ui-container.css +1 -1
  34. package/styles/ui-context-menu.css +1 -1
  35. package/styles/ui-dialog.css +18 -1
  36. package/styles/ui-disclosure.css +1 -1
  37. package/styles/ui-editable.css +1 -1
  38. package/styles/ui-editor-insert-table-grid.css +1 -1
  39. package/styles/ui-editor-mention-menu.css +1 -1
  40. package/styles/ui-editor-slash-menu.css +1 -1
  41. package/styles/ui-editor-table-context-menu.css +1 -1
  42. package/styles/ui-editor-table-overlay.css +1 -1
  43. package/styles/ui-editor-table-toolbar.css +1 -1
  44. package/styles/ui-editor-toolbar.css +1 -1
  45. package/styles/ui-floating-action-button.css +1 -1
  46. package/styles/ui-form-field.css +24 -10
  47. package/styles/ui-grid.css +1 -1
  48. package/styles/ui-icon-button.css +52 -2
  49. package/styles/ui-icon.css +1 -1
  50. package/styles/ui-input.css +1 -1
  51. package/styles/ui-menu-item.css +1 -1
  52. package/styles/ui-menu.css +1 -1
  53. package/styles/ui-popover.css +1 -1
  54. package/styles/ui-radio-group.css +1 -1
  55. package/styles/ui-radio.css +1 -1
  56. package/styles/ui-reel.css +1 -1
  57. package/styles/ui-search-result-row.css +1 -1
  58. package/styles/ui-search-shell.css +11 -2
  59. package/styles/ui-select.css +1 -1
  60. package/styles/ui-separator.css +1 -1
  61. package/styles/ui-sidebar.css +1 -1
  62. package/styles/ui-stack.css +1 -1
  63. package/styles/ui-switch.css +1 -1
  64. package/styles/ui-switcher.css +1 -1
  65. package/styles/ui-tabs.css +1 -1
  66. package/styles/ui-textarea.css +1 -1
  67. package/styles/ui-toast-region.css +1 -1
  68. package/styles/ui-tooltip.css +1 -1
  69. package/styles/ui-top-bar.css +1 -1
  70. package/styles/ui-tree-item.css +10 -2
  71. package/styles/ui-tree.css +1 -1
  72. package/vanilla/UiAffordanceScope.d.ts +1 -1
  73. package/vanilla/UiAffordanceScope.js +2 -2
  74. package/vanilla/UiAvatar.d.ts +1 -1
  75. package/vanilla/UiAvatar.js +2 -2
  76. package/vanilla/UiAvatarGroup.d.ts +1 -1
  77. package/vanilla/UiAvatarGroup.js +2 -2
  78. package/vanilla/UiBadge.d.ts +1 -1
  79. package/vanilla/UiBadge.js +2 -2
  80. package/vanilla/UiButton.d.ts +3 -1
  81. package/vanilla/UiButton.js +3 -3
  82. package/vanilla/UiCallout.d.ts +1 -1
  83. package/vanilla/UiCallout.js +2 -2
  84. package/vanilla/UiCheckbox.d.ts +1 -1
  85. package/vanilla/UiCheckbox.js +2 -2
  86. package/vanilla/UiCluster.d.ts +1 -1
  87. package/vanilla/UiCluster.js +2 -2
  88. package/vanilla/UiCombobox.d.ts +1 -1
  89. package/vanilla/UiCombobox.js +3 -3
  90. package/vanilla/UiContainer.d.ts +1 -1
  91. package/vanilla/UiContainer.js +2 -2
  92. package/vanilla/UiContextMenu.d.ts +1 -1
  93. package/vanilla/UiContextMenu.js +2 -2
  94. package/vanilla/UiDialog.d.ts +1 -1
  95. package/vanilla/UiDialog.js +2 -2
  96. package/vanilla/UiDisclosure.d.ts +1 -1
  97. package/vanilla/UiDisclosure.js +2 -2
  98. package/vanilla/UiEditable.d.ts +1 -1
  99. package/vanilla/UiEditable.js +2 -2
  100. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  101. package/vanilla/UiEditorInsertTableGrid.js +3 -3
  102. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  103. package/vanilla/UiEditorMentionMenu.js +3 -3
  104. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  105. package/vanilla/UiEditorSlashMenu.js +2 -2
  106. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  107. package/vanilla/UiEditorTableContextMenu.js +3 -3
  108. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  109. package/vanilla/UiEditorTableOverlay.js +3 -3
  110. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  111. package/vanilla/UiEditorTableToolbar.js +3 -3
  112. package/vanilla/UiEditorToolbar.d.ts +1 -1
  113. package/vanilla/UiEditorToolbar.js +2 -2
  114. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  115. package/vanilla/UiFloatingActionButton.js +2 -2
  116. package/vanilla/UiFormField.d.ts +1 -1
  117. package/vanilla/UiFormField.js +15 -6
  118. package/vanilla/UiGrid.d.ts +1 -1
  119. package/vanilla/UiGrid.js +2 -2
  120. package/vanilla/UiIcon.d.ts +1 -1
  121. package/vanilla/UiIcon.js +3 -3
  122. package/vanilla/UiIconButton.d.ts +1 -1
  123. package/vanilla/UiIconButton.js +2 -2
  124. package/vanilla/UiInput.d.ts +1 -1
  125. package/vanilla/UiInput.js +2 -2
  126. package/vanilla/UiMenu.d.ts +1 -1
  127. package/vanilla/UiMenu.js +2 -2
  128. package/vanilla/UiMenuItem.d.ts +1 -1
  129. package/vanilla/UiMenuItem.js +2 -2
  130. package/vanilla/UiPopover.d.ts +1 -1
  131. package/vanilla/UiPopover.js +2 -2
  132. package/vanilla/UiRadio.d.ts +1 -1
  133. package/vanilla/UiRadio.js +2 -2
  134. package/vanilla/UiRadioGroup.d.ts +1 -1
  135. package/vanilla/UiRadioGroup.js +2 -2
  136. package/vanilla/UiReel.d.ts +1 -1
  137. package/vanilla/UiReel.js +2 -2
  138. package/vanilla/UiSearchResultRow.d.ts +1 -1
  139. package/vanilla/UiSearchResultRow.js +2 -2
  140. package/vanilla/UiSearchShell.d.ts +1 -1
  141. package/vanilla/UiSearchShell.js +2 -2
  142. package/vanilla/UiSelect.d.ts +1 -1
  143. package/vanilla/UiSelect.js +2 -2
  144. package/vanilla/UiSeparator.d.ts +1 -1
  145. package/vanilla/UiSeparator.js +2 -2
  146. package/vanilla/UiSidebar.d.ts +1 -1
  147. package/vanilla/UiSidebar.js +2 -2
  148. package/vanilla/UiStack.d.ts +1 -1
  149. package/vanilla/UiStack.js +2 -2
  150. package/vanilla/UiSwitch.d.ts +1 -1
  151. package/vanilla/UiSwitch.js +2 -2
  152. package/vanilla/UiSwitcher.d.ts +1 -1
  153. package/vanilla/UiSwitcher.js +2 -2
  154. package/vanilla/UiTabs.d.ts +1 -1
  155. package/vanilla/UiTabs.js +3 -3
  156. package/vanilla/UiTextarea.d.ts +1 -1
  157. package/vanilla/UiTextarea.js +2 -2
  158. package/vanilla/UiToastRegion.d.ts +1 -1
  159. package/vanilla/UiToastRegion.js +3 -3
  160. package/vanilla/UiTooltip.d.ts +1 -1
  161. package/vanilla/UiTooltip.js +2 -2
  162. package/vanilla/UiTopBar.d.ts +1 -1
  163. package/vanilla/UiTopBar.js +1 -1
  164. package/vanilla/UiTree.d.ts +1 -1
  165. package/vanilla/UiTree.js +2 -2
  166. package/vanilla/UiTreeItem.d.ts +1 -1
  167. package/vanilla/UiTreeItem.js +2 -2
  168. package/vue/UiAffordanceScope.d.ts +2 -2
  169. package/vue/UiAffordanceScope.vue +92 -73
  170. package/vue/UiAvatar.d.ts +7 -7
  171. package/vue/UiAvatar.vue +145 -105
  172. package/vue/UiAvatarGroup.d.ts +4 -4
  173. package/vue/UiAvatarGroup.vue +134 -118
  174. package/vue/UiBadge.d.ts +4 -4
  175. package/vue/UiBadge.vue +113 -114
  176. package/vue/UiButton.d.ts +10 -6
  177. package/vue/UiButton.vue +289 -220
  178. package/vue/UiCallout.d.ts +2 -2
  179. package/vue/UiCallout.vue +154 -87
  180. package/vue/UiCheckbox.d.ts +14 -10
  181. package/vue/UiCheckbox.vue +228 -162
  182. package/vue/UiCluster.d.ts +2 -2
  183. package/vue/UiCluster.vue +53 -60
  184. package/vue/UiCombobox.d.ts +36 -32
  185. package/vue/UiCombobox.vue +1005 -416
  186. package/vue/UiContainer.d.ts +2 -2
  187. package/vue/UiContainer.vue +48 -51
  188. package/vue/UiContextMenu.d.ts +6 -4
  189. package/vue/UiContextMenu.vue +205 -116
  190. package/vue/UiDialog.d.ts +11 -9
  191. package/vue/UiDialog.vue +287 -212
  192. package/vue/UiDisclosure.d.ts +8 -6
  193. package/vue/UiDisclosure.vue +248 -159
  194. package/vue/UiEditable.d.ts +16 -12
  195. package/vue/UiEditable.vue +325 -205
  196. package/vue/UiEditorInsertTableGrid.d.ts +8 -8
  197. package/vue/UiEditorInsertTableGrid.vue +216 -157
  198. package/vue/UiEditorMentionMenu.d.ts +9 -9
  199. package/vue/UiEditorMentionMenu.vue +265 -222
  200. package/vue/UiEditorSlashMenu.d.ts +7 -7
  201. package/vue/UiEditorSlashMenu.vue +286 -240
  202. package/vue/UiEditorTableContextMenu.d.ts +5 -5
  203. package/vue/UiEditorTableContextMenu.vue +306 -193
  204. package/vue/UiEditorTableOverlay.d.ts +2 -2
  205. package/vue/UiEditorTableOverlay.vue +609 -369
  206. package/vue/UiEditorTableToolbar.d.ts +7 -7
  207. package/vue/UiEditorTableToolbar.vue +443 -268
  208. package/vue/UiEditorToolbar.d.ts +2 -2
  209. package/vue/UiEditorToolbar.vue +134 -121
  210. package/vue/UiFloatingActionButton.d.ts +6 -6
  211. package/vue/UiFloatingActionButton.vue +100 -99
  212. package/vue/UiFormField.d.ts +6 -6
  213. package/vue/UiFormField.vue +112 -80
  214. package/vue/UiGrid.d.ts +2 -2
  215. package/vue/UiGrid.vue +51 -57
  216. package/vue/UiIcon.d.ts +2 -2
  217. package/vue/UiIcon.vue +118 -89
  218. package/vue/UiIconButton.d.ts +11 -11
  219. package/vue/UiIconButton.vue +285 -206
  220. package/vue/UiInput.d.ts +9 -9
  221. package/vue/UiInput.vue +153 -127
  222. package/vue/UiMenu.d.ts +8 -6
  223. package/vue/UiMenu.vue +217 -143
  224. package/vue/UiMenuItem.d.ts +4 -4
  225. package/vue/UiMenuItem.vue +52 -46
  226. package/vue/UiPopover.d.ts +8 -6
  227. package/vue/UiPopover.vue +197 -137
  228. package/vue/UiRadio.d.ts +14 -10
  229. package/vue/UiRadio.vue +183 -117
  230. package/vue/UiRadioGroup.d.ts +14 -12
  231. package/vue/UiRadioGroup.vue +172 -111
  232. package/vue/UiReel.d.ts +3 -3
  233. package/vue/UiReel.vue +77 -77
  234. package/vue/UiSearchResultRow.d.ts +4 -4
  235. package/vue/UiSearchResultRow.vue +124 -115
  236. package/vue/UiSearchShell.d.ts +10 -8
  237. package/vue/UiSearchShell.vue +245 -176
  238. package/vue/UiSelect.d.ts +9 -9
  239. package/vue/UiSelect.vue +162 -134
  240. package/vue/UiSeparator.d.ts +2 -2
  241. package/vue/UiSeparator.vue +22 -27
  242. package/vue/UiSidebar.d.ts +20 -18
  243. package/vue/UiSidebar.vue +312 -224
  244. package/vue/UiStack.d.ts +3 -3
  245. package/vue/UiStack.vue +64 -70
  246. package/vue/UiSwitch.d.ts +12 -8
  247. package/vue/UiSwitch.vue +218 -150
  248. package/vue/UiSwitcher.d.ts +3 -3
  249. package/vue/UiSwitcher.vue +73 -75
  250. package/vue/UiTabs.d.ts +10 -8
  251. package/vue/UiTabs.vue +251 -210
  252. package/vue/UiTextarea.d.ts +11 -11
  253. package/vue/UiTextarea.vue +155 -128
  254. package/vue/UiToastRegion.d.ts +10 -8
  255. package/vue/UiToastRegion.vue +261 -198
  256. package/vue/UiTooltip.d.ts +14 -12
  257. package/vue/UiTooltip.vue +241 -177
  258. package/vue/UiTopBar.vue +51 -42
  259. package/vue/UiTree.d.ts +8 -6
  260. package/vue/UiTree.vue +157 -70
  261. package/vue/UiTreeItem.d.ts +24 -22
  262. package/vue/UiTreeItem.vue +456 -339
  263. package/vue/chunks/UiAffordanceScope.js +9 -16
  264. package/vue/chunks/UiAvatar.js +23 -29
  265. package/vue/chunks/UiAvatarGroup.js +16 -39
  266. package/vue/chunks/UiBadge.js +3 -12
  267. package/vue/chunks/UiButton.js +15 -18
  268. package/vue/chunks/UiCallout.js +8 -17
  269. package/vue/chunks/UiCheckbox.js +37 -40
  270. package/vue/chunks/UiCluster.js +3 -12
  271. package/vue/chunks/UiCombobox.js +224 -266
  272. package/vue/chunks/UiContainer.js +3 -12
  273. package/vue/chunks/UiContextMenu.js +39 -34
  274. package/vue/chunks/UiDialog.js +36 -39
  275. package/vue/chunks/UiDisclosure.js +43 -48
  276. package/vue/chunks/UiEditable.js +55 -57
  277. package/vue/chunks/UiEditorInsertTableGrid.js +55 -73
  278. package/vue/chunks/UiEditorMentionMenu.js +40 -81
  279. package/vue/chunks/UiEditorSlashMenu.js +28 -52
  280. package/vue/chunks/UiEditorTableContextMenu.js +32 -56
  281. package/vue/chunks/UiEditorTableOverlay.js +58 -82
  282. package/vue/chunks/UiEditorTableToolbar.js +61 -85
  283. package/vue/chunks/UiEditorToolbar.js +4 -13
  284. package/vue/chunks/UiFloatingActionButton.js +7 -21
  285. package/vue/chunks/UiFormField.js +15 -12
  286. package/vue/chunks/UiGrid.js +3 -12
  287. package/vue/chunks/UiIcon.js +20 -43
  288. package/vue/chunks/UiIconButton.js +16 -28
  289. package/vue/chunks/UiInput.js +20 -25
  290. package/vue/chunks/UiMenu.js +29 -33
  291. package/vue/chunks/UiMenuItem.js +4 -10
  292. package/vue/chunks/UiPopover.js +28 -29
  293. package/vue/chunks/UiRadio.js +36 -39
  294. package/vue/chunks/UiRadioGroup.js +30 -34
  295. package/vue/chunks/UiReel.js +6 -15
  296. package/vue/chunks/UiSearchResultRow.js +6 -19
  297. package/vue/chunks/UiSearchShell.js +25 -28
  298. package/vue/chunks/UiSelect.js +20 -23
  299. package/vue/chunks/UiSeparator.js +2 -8
  300. package/vue/chunks/UiSidebar.js +39 -44
  301. package/vue/chunks/UiStack.js +6 -15
  302. package/vue/chunks/UiSwitch.js +35 -38
  303. package/vue/chunks/UiSwitcher.js +6 -15
  304. package/vue/chunks/UiTabs.js +47 -85
  305. package/vue/chunks/UiTextarea.js +21 -26
  306. package/vue/chunks/UiToastRegion.js +38 -72
  307. package/vue/chunks/UiTooltip.js +34 -35
  308. package/vue/chunks/UiTopBar.js +1 -1
  309. package/vue/chunks/UiTree.js +20 -15
  310. package/vue/chunks/UiTreeItem.js +85 -102
  311. package/vue/components.css +3994 -3764
  312. package/vue/index.d.ts +1 -0
  313. package/vue/index.js +2 -1
package/vue/UiSelect.vue CHANGED
@@ -1,183 +1,211 @@
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-select/ui-select.js";
5
-
6
- defineOptions({ inheritAttrs: false });
7
-
8
- const hn = {
9
- text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
10
- 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),
11
- enumerated: (v: unknown): any => typeof v === "boolean" ? String(v) : hn.attr(v),
12
- };
13
-
14
- const props = withDefaults(defineProps<{
15
- disabled?: boolean | null;
16
- invalid?: boolean | null;
17
- multiple?: boolean | null;
18
- required?: boolean | null;
19
- value?: string | null;
20
- modelValue?: string | null;
21
- }>(), {
22
- disabled: false,
23
- invalid: false,
24
- multiple: false,
25
- required: false,
26
- });
3
+ import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watchEffect } from 'vue'
4
+ import * as controllerModule from '../components/ui-select/ui-select.js'
5
+
6
+ defineOptions({ inheritAttrs: false })
7
+
8
+ const props = withDefaults(
9
+ defineProps<{
10
+ disabled?: boolean
11
+ invalid?: boolean
12
+ multiple?: boolean
13
+ required?: boolean
14
+ value?: string
15
+ modelValue?: string | null
16
+ }>(),
17
+ {
18
+ disabled: false,
19
+ invalid: false,
20
+ multiple: false,
21
+ required: false,
22
+ },
23
+ )
27
24
  const emit = defineEmits<{
28
- "update:modelValue": [value: string];
29
- }>();
30
- const updateModel = (event: Event): void => emit("update:modelValue", (event.target as HTMLInputElement).value);
31
- const root = ref<HTMLElement | null>(null);
32
- const refs: Record<string, Element | undefined> = {};
25
+ 'update:modelValue': [value: string]
26
+ }>()
27
+ const model = computed({
28
+ get: () => props.modelValue ?? props.value ?? undefined,
29
+ set: (value) => emit('update:modelValue', value as string),
30
+ })
31
+
32
+ const root = ref<HTMLElement | null>(null)
33
33
 
34
34
  /** 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
- return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail })) ?? true;
37
- };
35
+ function dispatch(name: string, detail?: unknown): boolean {
36
+ return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, detail }))
37
+ ?? true
38
+ }
38
39
 
39
40
  function read(name: string): unknown {
40
- return (props as Record<string, unknown>)[name];
41
+ return (props as Record<string, unknown>)[name]
41
42
  }
42
43
 
43
44
  function write(name: string, value: unknown): boolean {
44
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
45
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
45
46
  }
46
47
 
47
- const stops: Array<() => void> = [];
48
+ const stops: Array<() => void> = []
48
49
  const host = {
49
- get element(): Element { return root.value as Element; },
50
+ get element(): Element {
51
+ return root.value as Element
52
+ },
50
53
  state: new Proxy({} as Record<string, unknown>, {
51
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
52
- set: (_target, name, value) => typeof name === "string" && write(name, value),
54
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
55
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
53
56
  }),
54
- refs: refs as Readonly<Record<string, Element>>,
57
+ refs: {} as Readonly<Record<string, Element>>,
55
58
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
56
59
  get: (_target, name) => {
57
- if (typeof name !== "string" || root.value === null) return undefined;
58
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
59
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
60
+ if (typeof name !== 'string' || root.value === null) return undefined
61
+ const form = root.value instanceof HTMLFormElement
62
+ ? root.value
63
+ : root.value.querySelector('form')
64
+ return form?.elements.namedItem(name)
65
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
60
66
  },
61
67
  }),
62
68
  signal<T>(initialValue: T) {
63
- const value = shallowRef(initialValue);
69
+ const value = shallowRef(initialValue)
64
70
  return {
65
71
  get: (): T => value.value,
66
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
67
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
68
- };
72
+ set: (next: T): void => {
73
+ if (!Object.is(value.value, next)) value.value = next
74
+ },
75
+ update: (next: (current: T) => T): void => {
76
+ const updated = next(value.value)
77
+ if (!Object.is(value.value, updated)) value.value = updated
78
+ },
79
+ }
69
80
  },
70
81
  computed<T>(compute: () => T) {
71
- const value = computed(compute);
72
- return { get: (): T => value.value };
82
+ const value = computed(compute)
83
+ return { get: (): T => value.value }
73
84
  },
74
85
  effect(run: () => void | (() => void)): () => void {
75
86
  const stop = watchEffect((onCleanup) => {
76
- const cleanup = run();
77
- if (typeof cleanup === "function") onCleanup(cleanup);
78
- }, { flush: "post" });
79
- stops.push(stop);
80
- return stop;
87
+ const cleanup = run()
88
+ if (typeof cleanup === 'function') onCleanup(cleanup)
89
+ }, { flush: 'post' })
90
+ stops.push(stop)
91
+ return stop
81
92
  },
82
93
  on(event: string, listener: EventListener): () => void {
83
- const element = root.value;
84
- element?.addEventListener(event, listener);
85
- const off = (): void => element?.removeEventListener(event, listener);
86
- stops.push(off);
87
- return off;
94
+ const element = root.value
95
+ element?.addEventListener(event, listener)
96
+ const off = (): void => element?.removeEventListener(event, listener)
97
+ stops.push(off)
98
+ return off
88
99
  },
89
100
  dispatch,
90
- };
101
+ }
91
102
 
92
- let cleanup: void | (() => void);
93
- let ready: Promise<void> | undefined;
103
+ let cleanup: void | (() => void)
104
+ let ready: Promise<void> | undefined
94
105
  onMounted(() => {
95
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
96
- });
106
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
107
+ cleanup = result
108
+ })
109
+ })
97
110
  onBeforeUnmount(() => {
98
- for (const stop of stops.splice(0)) stop();
99
- if (typeof cleanup === "function") cleanup();
100
- });
111
+ for (const stop of stops.splice(0)) stop()
112
+ if (typeof cleanup === 'function') cleanup()
113
+ })
101
114
  </script>
102
115
 
103
116
  <template>
104
- <select data-component="ui-select" v-bind="$attrs" :disabled="hn.attr(props.disabled)" :required="hn.attr(props.required)" :multiple="hn.attr(props.multiple)" :aria-invalid="hn.enumerated(props.invalid)" @change="updateModel" ref="root"><slot></slot></select>
117
+ <select
118
+ data-component="ui-select"
119
+ v-bind="$attrs"
120
+ :disabled="disabled"
121
+ :required="required"
122
+ :multiple="multiple"
123
+ :aria-invalid="invalid"
124
+ v-model="model"
125
+ ref="root"
126
+ >
127
+ <slot />
128
+ </select>
105
129
  </template>
106
130
 
107
131
  <style scoped>
108
132
  [data-component~="ui-select"] {
109
- box-sizing: border-box;
110
- display: inline-block;
111
- inline-size: 100%;
112
- min-inline-size: 0;
113
- min-block-size: var(--ui-control-size-md, 2.5rem);
114
- margin: 0;
115
- padding: var(--ui-space-2) var(--ui-space-3);
116
- border: 1px solid var(--ui-control-border, var(--ui-border-strong));
117
- border-radius: var(--ui-select-radius, var(--ui-radius-2));
118
- background-color: var(--ui-control-surface, var(--ui-surface-elevated));
119
- color: var(--ui-text-primary);
120
- color-scheme: light dark;
121
- font: inherit;
122
- line-height: var(--ui-line-height-md);
123
- box-shadow: var(--ui-select-shadow, var(--ui-control-inset));
124
- transition:
125
- border-color var(--ui-motion-fast) var(--ui-motion-ease),
126
- box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
127
- background-color var(--ui-motion-fast) var(--ui-motion-ease);
128
- }
133
+ box-sizing: border-box;
134
+ display: inline-block;
135
+ inline-size: 100%;
136
+ min-inline-size: 0;
137
+ min-block-size: var(--ui-control-size-md, 2.5rem);
138
+ margin: 0;
139
+ padding: var(--ui-space-2) var(--ui-space-3);
140
+ border: 1px solid var(--ui-control-border, var(--ui-border-strong));
141
+ border-radius: var(--ui-select-radius, var(--ui-radius-2));
142
+ background-color: var(--ui-control-surface, var(--ui-surface-elevated));
143
+ color: var(--ui-text-primary);
144
+ color-scheme: light dark;
145
+ font: inherit;
146
+ line-height: var(--ui-line-height-md);
147
+ box-shadow: var(--ui-select-shadow, var(--ui-control-inset));
148
+ transition:
149
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
150
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease),
151
+ background-color var(--ui-motion-fast) var(--ui-motion-ease);
152
+ }
129
153
 
130
- /* Single selects draw their own chevron: the native caret cannot be inset or sized consistently.
131
- * The root stays a native <s-lect>, so the icon is a background image rather than an element. */
132
- [data-component~="ui-select"]:not([multiple]) {
133
- appearance: none;
134
- padding-inline-end: calc(var(--ui-space-3) + 1.5rem);
135
- background-image: var(
136
- --ui-select-chevron,
137
- url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235c5c58' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E")
138
- );
139
- background-repeat: no-repeat;
140
- background-position: right var(--ui-space-3) center;
141
- background-size: 1.125rem 1.125rem;
142
- }
154
+ /* Single selects draw their own chevron: the native caret cannot be inset or sized consistently.
155
+ * The root stays a native <s-lect>, so the icon is a background image rather than an element. */
156
+ [data-component~="ui-select"]:not([multiple]) {
157
+ appearance: none;
158
+ padding-inline-end: calc(var(--ui-space-3) + 1.5rem);
159
+ background-image: var(
160
+ --ui-select-chevron,
161
+ url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235c5c58' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E")
162
+ );
163
+ background-repeat: no-repeat;
164
+ background-position: right var(--ui-space-3) center;
165
+ background-size: 1.125rem 1.125rem;
166
+ }
143
167
 
144
- [data-component~="ui-select"]:hover:not(:focus):not(:disabled) {
145
- border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
146
- }
168
+ [data-component~="ui-select"]:hover:not(:focus):not(:disabled) {
169
+ border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
170
+ }
147
171
 
148
- [data-component~="ui-select"]:focus-visible {
149
- border-color: var(--ui-control-focus, var(--ui-accent-solid));
150
- outline: none;
151
- box-shadow: var(--ui-select-focus-shadow, var(--ui-control-inset), var(--ui-control-focus-halo-shadow));
152
- }
172
+ [data-component~="ui-select"]:focus-visible {
173
+ border-color: var(--ui-control-focus, var(--ui-accent-solid));
174
+ outline: none;
175
+ box-shadow: var(
176
+ --ui-select-focus-shadow,
177
+ var(--ui-control-inset),
178
+ var(--ui-control-focus-halo-shadow)
179
+ );
180
+ }
153
181
 
154
- /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
155
- [data-component~="ui-select"][aria-invalid="true"],
156
- [data-component~="ui-select"]:is(:user-invalid, [data-user-invalid]) {
157
- border-color: var(--ui-danger-solid);
158
- }
182
+ /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
183
+ [data-component~="ui-select"][aria-invalid="true"],
184
+ [data-component~="ui-select"]:is(:user-invalid, [data-user-invalid]) {
185
+ border-color: var(--ui-danger-solid);
186
+ }
159
187
 
160
- [data-component~="ui-select"]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
161
- box-shadow:
162
- var(--ui-control-inset),
163
- 0 0 0 3px color-mix(in srgb, var(--ui-danger-solid) 22%, transparent);
164
- }
188
+ [data-component~="ui-select"]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
189
+ box-shadow:
190
+ var(--ui-control-inset),
191
+ 0 0 0 3px color-mix(in srgb, var(--ui-danger-solid) 22%, transparent);
192
+ }
165
193
 
166
- [data-component~="ui-select"]:disabled {
167
- background-color: var(--ui-control-surface-disabled, var(--ui-surface-muted));
168
- color: var(--ui-text-muted);
169
- box-shadow: none;
170
- cursor: not-allowed;
171
- }
194
+ [data-component~="ui-select"]:disabled {
195
+ background-color: var(--ui-control-surface-disabled, var(--ui-surface-muted));
196
+ color: var(--ui-text-muted);
197
+ box-shadow: none;
198
+ cursor: not-allowed;
199
+ }
172
200
 
173
- [data-component~="ui-select"][multiple],
174
- [data-component~="ui-select"][size]:not([size="1"]) {
175
- min-block-size: 7rem;
176
- padding: var(--ui-space-2);
177
- }
201
+ [data-component~="ui-select"][multiple],
202
+ [data-component~="ui-select"][size]:not([size="1"]) {
203
+ min-block-size: 7rem;
204
+ padding: var(--ui-space-2);
205
+ }
178
206
 
179
- /* A component that sets its display still honours the hidden attribute on its root. */
180
- [data-component~="ui-select"][hidden] {
181
- display: none;
182
- }
207
+ /* A component that sets its display still honours the hidden attribute on its root. */
208
+ [data-component~="ui-select"][hidden] {
209
+ display: none;
210
+ }
183
211
  </style>
@@ -1,8 +1,8 @@
1
1
  type __VLS_Props = {
2
- orientation?: "horizontal" | "vertical" | null;
2
+ orientation?: 'horizontal' | 'vertical';
3
3
  };
4
4
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
5
- orientation: "horizontal" | "vertical" | null;
5
+ orientation: "horizontal" | "vertical";
6
6
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
7
  declare const _default: typeof __VLS_export;
8
8
  export default _default;
@@ -1,38 +1,33 @@
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
+ defineOptions({ inheritAttrs: false })
3
4
 
4
- defineOptions({ inheritAttrs: false });
5
-
6
- const hn = {
7
- text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
8
- 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),
9
- enumerated: (v: unknown): any => typeof v === "boolean" ? String(v) : hn.attr(v),
10
- };
11
-
12
- const props = withDefaults(defineProps<{
13
- orientation?: "horizontal" | "vertical" | null;
14
- }>(), {
15
- orientation: "horizontal",
16
- });
17
-
5
+ withDefaults(
6
+ defineProps<{
7
+ orientation?: 'horizontal' | 'vertical'
8
+ }>(),
9
+ {
10
+ orientation: 'horizontal',
11
+ },
12
+ )
18
13
  </script>
19
14
 
20
15
  <template>
21
- <hr data-component="ui-separator" v-bind="$attrs" :aria-orientation="hn.enumerated(props.orientation)">
16
+ <hr data-component="ui-separator" v-bind="$attrs" :aria-orientation="orientation">
22
17
  </template>
23
18
 
24
19
  <style scoped>
25
20
  hr {
26
- box-sizing: border-box;
27
- align-self: stretch;
28
- margin: 0;
29
- border: 0;
30
- border-block-start: 1px solid var(--ui-separator-color, var(--ui-border-default));
31
- }
21
+ box-sizing: border-box;
22
+ align-self: stretch;
23
+ margin: 0;
24
+ border: 0;
25
+ border-block-start: 1px solid var(--ui-separator-color, var(--ui-border-default));
26
+ }
32
27
 
33
- hr[aria-orientation="vertical"] {
34
- block-size: auto;
35
- border-block-start: 0;
36
- border-inline-start: 1px solid var(--ui-separator-color, var(--ui-border-default));
37
- }
28
+ hr[aria-orientation="vertical"] {
29
+ block-size: auto;
30
+ border-block-start: 0;
31
+ border-inline-start: 1px solid var(--ui-separator-color, var(--ui-border-default));
32
+ }
38
33
  </style>
@@ -1,13 +1,13 @@
1
1
  type __VLS_Props = {
2
- breakpoint?: "sm" | "md" | "lg" | null;
3
- collapsed?: boolean | null;
4
- maxWidth?: number | null;
5
- minWidth?: number | null;
6
- resizable?: boolean | null;
7
- resizeLabel?: string | null;
8
- resizeStep?: number | null;
9
- side?: "start" | "end" | null;
10
- width?: number | null;
2
+ breakpoint?: 'sm' | 'md' | 'lg';
3
+ collapsed?: boolean;
4
+ maxWidth?: number;
5
+ minWidth?: number;
6
+ resizable?: boolean;
7
+ resizeLabel?: string;
8
+ resizeStep?: number;
9
+ side?: 'start' | 'end';
10
+ width?: number;
11
11
  };
12
12
  declare var __VLS_1: {};
13
13
  type __VLS_Slots = {} & {
@@ -23,6 +23,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
23
23
  readonly mode: "docked" | "drawer";
24
24
  readonly trigger: "keyboard" | "pointer" | "programmatic";
25
25
  }) => any;
26
+ "update:width": (value: number) => any;
26
27
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
27
28
  onResize?: ((detail: {
28
29
  readonly width: number;
@@ -33,16 +34,17 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
33
34
  readonly mode: "docked" | "drawer";
34
35
  readonly trigger: "keyboard" | "pointer" | "programmatic";
35
36
  }) => any) | undefined;
37
+ "onUpdate:width"?: ((value: number) => any) | undefined;
36
38
  }>, {
37
- width: number | null;
38
- breakpoint: "sm" | "md" | "lg" | null;
39
- collapsed: boolean | null;
40
- maxWidth: number | null;
41
- minWidth: number | null;
42
- resizable: boolean | null;
43
- resizeLabel: string | null;
44
- resizeStep: number | null;
45
- side: "start" | "end" | null;
39
+ width: number;
40
+ breakpoint: "sm" | "md" | "lg";
41
+ collapsed: boolean;
42
+ maxWidth: number;
43
+ minWidth: number;
44
+ resizable: boolean;
45
+ resizeLabel: string;
46
+ resizeStep: number;
47
+ side: "start" | "end";
46
48
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
47
49
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
48
50
  declare const _default: typeof __VLS_export;