@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
@@ -1,233 +1,302 @@
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-search-shell/ui-search-shell.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
- dismissible?: boolean | null;
16
- label?: string | null;
17
- modal?: boolean | null;
18
- open?: boolean | null;
19
- }>(), {
20
- dismissible: false,
21
- label: "Search",
22
- modal: false,
23
- open: false,
24
- });
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-search-shell/ui-search-shell.js'
13
+
14
+ defineOptions({ inheritAttrs: false })
15
+
16
+ const props = withDefaults(
17
+ defineProps<{
18
+ dismissible?: boolean
19
+ label?: string
20
+ modal?: boolean
21
+ open?: boolean
22
+ }>(),
23
+ {
24
+ dismissible: false,
25
+ label: 'Search',
26
+ modal: false,
27
+ open: false,
28
+ },
29
+ )
25
30
  const emit = defineEmits<{
26
- "close": [detail: { readonly open: boolean; readonly reason: "action" | "programmatic" | "light-dismiss" | "escape"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
27
- }>();
28
- const root = ref<HTMLElement | null>(null);
29
- const refs: Record<string, Element | undefined> = {};
30
- const state_internalOpen = ref<any>(false);
31
+ 'update:open': [value: boolean]
32
+ close: [
33
+ detail: {
34
+ readonly open: boolean
35
+ readonly reason: 'action' | 'programmatic' | 'light-dismiss' | 'escape'
36
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
37
+ },
38
+ ]
39
+ }>()
40
+
41
+ const root = ref<HTMLElement | null>(null)
42
+ const dialogElement = useTemplateRef<HTMLElement>('dialog')
43
+ const internalOpen = ref(false)
31
44
 
32
45
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
33
- const dispatch = (name: string, detail?: unknown): boolean => {
34
- const declared = {"close":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
46
+ function dispatch(name: string, detail?: unknown): boolean {
47
+ const declared: Record<string, EventInit | undefined> = {
48
+ close: { bubbles: true, composed: true, cancelable: false },
49
+ }
35
50
  const checks: Record<string, (detail: unknown) => boolean> = {
36
- "close": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["open"] === "boolean" && ((detail as Record<string, unknown>)["reason"] === "action" || (detail as Record<string, unknown>)["reason"] === "programmatic" || (detail as Record<string, unknown>)["reason"] === "light-dismiss" || (detail as Record<string, unknown>)["reason"] === "escape") && ((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) => ["open","reason","trigger"].includes(key))),
37
- };
51
+ close: (detail) =>
52
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
53
+ && typeof (detail as Record<string, unknown>)['open'] === 'boolean'
54
+ && ((detail as Record<string, unknown>)['reason'] === 'action'
55
+ || (detail as Record<string, unknown>)['reason'] === 'programmatic'
56
+ || (detail as Record<string, unknown>)['reason'] === 'light-dismiss'
57
+ || (detail as Record<string, unknown>)['reason'] === 'escape')
58
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
59
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
60
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
61
+ && Object.keys(detail as object).every((key) => ['open', 'reason', 'trigger'].includes(key)),
62
+ }
38
63
  if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
39
- throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
64
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`)
65
+ }
66
+ const emitEvent = emit as (name: string, detail: unknown) => void
67
+ emitEvent(name, detail)
68
+ if (detail !== null && typeof detail === 'object' && 'open' in detail) {
69
+ emitEvent('update:open', (detail as Record<string, unknown>)['open'])
40
70
  }
41
- (emit as (name: string, detail: unknown) => void)(name, detail);
42
- return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail })) ?? true;
43
- };
71
+ return root.value?.dispatchEvent(
72
+ new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail }),
73
+ ) ?? true
74
+ }
44
75
 
45
76
  function read(name: string): unknown {
46
- if (name === "internalOpen") return state_internalOpen.value;
47
- return (props as Record<string, unknown>)[name];
77
+ if (name === 'internalOpen') return internalOpen.value
78
+ return (props as Record<string, unknown>)[name]
48
79
  }
49
80
 
50
81
  function write(name: string, value: unknown): boolean {
51
- if (name === "internalOpen") { state_internalOpen.value = value; return true; }
52
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
82
+ if (name === 'internalOpen') {
83
+ internalOpen.value = value as never
84
+ return true
85
+ }
86
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
53
87
  }
54
88
 
55
- const stops: Array<() => void> = [];
89
+ const stops: Array<() => void> = []
56
90
  const host = {
57
- get element(): Element { return root.value as Element; },
91
+ get element(): Element {
92
+ return root.value as Element
93
+ },
58
94
  state: new Proxy({} as Record<string, unknown>, {
59
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
60
- set: (_target, name, value) => typeof name === "string" && write(name, value),
95
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
96
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
61
97
  }),
62
- refs: refs as Readonly<Record<string, Element>>,
98
+ refs: {
99
+ get dialog(): Element {
100
+ return dialogElement.value as Element
101
+ },
102
+ } as Readonly<Record<string, Element>>,
63
103
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
64
104
  get: (_target, name) => {
65
- if (typeof name !== "string" || root.value === null) return undefined;
66
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
67
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
105
+ if (typeof name !== 'string' || root.value === null) return undefined
106
+ const form = root.value instanceof HTMLFormElement
107
+ ? root.value
108
+ : root.value.querySelector('form')
109
+ return form?.elements.namedItem(name)
110
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
68
111
  },
69
112
  }),
70
113
  signal<T>(initialValue: T) {
71
- const value = shallowRef(initialValue);
114
+ const value = shallowRef(initialValue)
72
115
  return {
73
116
  get: (): T => value.value,
74
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
75
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
76
- };
117
+ set: (next: T): void => {
118
+ if (!Object.is(value.value, next)) value.value = next
119
+ },
120
+ update: (next: (current: T) => T): void => {
121
+ const updated = next(value.value)
122
+ if (!Object.is(value.value, updated)) value.value = updated
123
+ },
124
+ }
77
125
  },
78
126
  computed<T>(compute: () => T) {
79
- const value = computed(compute);
80
- return { get: (): T => value.value };
127
+ const value = computed(compute)
128
+ return { get: (): T => value.value }
81
129
  },
82
130
  effect(run: () => void | (() => void)): () => void {
83
131
  const stop = watchEffect((onCleanup) => {
84
- const cleanup = run();
85
- if (typeof cleanup === "function") onCleanup(cleanup);
86
- }, { flush: "post" });
87
- stops.push(stop);
88
- return stop;
132
+ const cleanup = run()
133
+ if (typeof cleanup === 'function') onCleanup(cleanup)
134
+ }, { flush: 'post' })
135
+ stops.push(stop)
136
+ return stop
89
137
  },
90
138
  on(event: string, listener: EventListener): () => void {
91
- const element = root.value;
92
- element?.addEventListener(event, listener);
93
- const off = (): void => element?.removeEventListener(event, listener);
94
- stops.push(off);
95
- return off;
139
+ const element = root.value
140
+ element?.addEventListener(event, listener)
141
+ const off = (): void => element?.removeEventListener(event, listener)
142
+ stops.push(off)
143
+ return off
96
144
  },
97
145
  dispatch,
98
- };
146
+ }
99
147
 
100
- let cleanup: void | (() => void);
101
- let ready: Promise<void> | undefined;
148
+ let cleanup: void | (() => void)
149
+ let ready: Promise<void> | undefined
102
150
  onMounted(() => {
103
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
104
- });
151
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
152
+ cleanup = result
153
+ })
154
+ })
105
155
  onBeforeUnmount(() => {
106
- for (const stop of stops.splice(0)) stop();
107
- if (typeof cleanup === "function") cleanup();
108
- });
156
+ for (const stop of stops.splice(0)) stop()
157
+ if (typeof cleanup === 'function') cleanup()
158
+ })
109
159
  </script>
110
160
 
111
161
  <template>
112
- <div data-component="ui-search-shell" v-bind="$attrs" ref="root"><dialog :aria-label="hn.enumerated(props.label)" :ref="(element) => { refs['dialog'] = element as Element }"><div class="panel"><div class="search"><slot name="search"></slot></div><div class="status"><slot name="status"></slot></div><div class="body"><slot name="body"></slot></div><div class="footer"><slot name="footer"></slot></div></div></dialog></div>
162
+ <div data-component="ui-search-shell" v-bind="$attrs" ref="root">
163
+ <dialog :aria-label="label" ref="dialog">
164
+ <div class="panel">
165
+ <div class="search"><slot name="search" /></div>
166
+ <div class="status"><slot name="status" /></div>
167
+ <div class="body"><slot name="body" /></div>
168
+ <div class="footer"><slot name="footer" /></div>
169
+ </div>
170
+ </dialog>
171
+ </div>
113
172
  </template>
114
173
 
115
174
  <style scoped>
116
175
  [data-component~="ui-search-shell"] {
117
- display: contents;
118
- }
176
+ display: contents;
177
+ }
119
178
 
120
- dialog {
121
- position: fixed;
122
- inset: 0;
123
- z-index: var(--ui-search-shell-z-index, 400);
124
- box-sizing: border-box;
125
- inline-size: 100%;
126
- max-inline-size: none;
127
- block-size: 100%;
128
- max-block-size: none;
129
- margin: 0;
130
- padding: var(--ui-search-shell-padding-top, 10vh) var(--ui-search-shell-viewport-gap, var(--ui-space-4))
131
- var(--ui-search-shell-viewport-gap, var(--ui-space-4));
132
- overflow: auto;
133
- border: 0;
134
- background: var(--ui-overlay-backdrop);
135
- color: var(--ui-text-primary);
136
- }
179
+ dialog {
180
+ position: fixed;
181
+ inset: 0;
182
+ z-index: var(--ui-search-shell-z-index, 400);
183
+ box-sizing: border-box;
184
+ inline-size: 100%;
185
+ max-inline-size: none;
186
+ block-size: 100%;
187
+ max-block-size: none;
188
+ margin: 0;
189
+ padding: var(--ui-search-shell-padding-top, 10vh)
190
+ var(--ui-search-shell-viewport-gap, var(--ui-space-4))
191
+ var(--ui-search-shell-viewport-gap, var(--ui-space-4));
192
+ overflow: auto;
193
+ border: 0;
194
+ background: var(--ui-overlay-backdrop);
195
+ color: var(--ui-text-primary);
196
+ }
137
197
 
138
- dialog::backdrop {
139
- background: var(--ui-overlay-backdrop);
140
- }
198
+ dialog::backdrop {
199
+ background: var(--ui-overlay-backdrop);
200
+ }
141
201
 
142
- .panel {
143
- position: relative;
144
- display: flex;
145
- flex-direction: column;
146
- inline-size: min(100%, var(--ui-search-shell-max-width, 40rem));
147
- max-block-size: var(--ui-search-shell-max-height, 80vh);
148
- margin-inline: auto;
149
- overflow: hidden;
150
- background: var(--ui-search-shell-bg, var(--ui-surface-elevated));
151
- border: 1px solid var(--ui-search-shell-border, var(--ui-border-default));
152
- border-radius: var(--ui-search-shell-radius, var(--ui-radius-dialog));
153
- box-shadow: var(--ui-search-shell-shadow, var(--ui-elevation-dialog, var(--ui-shadow-xl)));
154
- }
202
+ .panel {
203
+ position: relative;
204
+ display: flex;
205
+ flex-direction: column;
206
+ inline-size: min(100%, var(--ui-search-shell-max-width, 40rem));
207
+ max-block-size: var(--ui-search-shell-max-height, 80vh);
208
+ margin-inline: auto;
209
+ overflow: hidden;
210
+ background: var(--ui-search-shell-bg, var(--ui-surface-elevated));
211
+ border: 1px solid var(--ui-search-shell-border, var(--ui-border-default));
212
+ border-radius: var(--ui-search-shell-radius, var(--ui-radius-dialog));
213
+ box-shadow: var(--ui-search-shell-shadow, var(--ui-elevation-dialog, var(--ui-shadow-xl)));
214
+ }
155
215
 
156
- .search {
157
- padding: var(--ui-space-3);
158
- border-block-end: 1px solid var(--ui-border-default);
159
- }
216
+ .search {
217
+ padding: var(--ui-space-3);
218
+ border-block-end: 1px solid var(--ui-border-default);
219
+ transition:
220
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
221
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
222
+ }
160
223
 
161
- :slotted(input[slot="search"]) {
162
- box-sizing: border-box;
163
- inline-size: 100%;
164
- min-block-size: var(--ui-control-min-block-size);
165
- padding: var(--ui-space-2) var(--ui-space-3);
166
- border: 1px solid var(--ui-control-border);
167
- border-radius: var(--ui-radius-2);
168
- background: var(--ui-control-surface);
169
- color: var(--ui-text-primary);
170
- font: inherit;
171
- box-shadow: var(--ui-shadow-xs);
172
- }
224
+ /* The search region shows where typing goes, whatever the author put in it. */
225
+ .search:focus-within {
226
+ border-block-end-color: var(--ui-search-shell-focus-color, var(--ui-control-focus));
227
+ box-shadow: inset 0 -1px 0 var(--ui-search-shell-focus-color, var(--ui-control-focus));
228
+ }
173
229
 
174
- :slotted(input[slot="search"]:focus-visible) {
175
- border-color: var(--ui-control-focus);
176
- outline: 2px solid var(--ui-focus-ring, currentColor);
177
- outline-offset: 2px;
178
- }
230
+ :slotted(input[slot="search"]) {
231
+ box-sizing: border-box;
232
+ inline-size: 100%;
233
+ min-block-size: var(--ui-control-min-block-size);
234
+ padding: var(--ui-space-2) var(--ui-space-3);
235
+ border: 1px solid var(--ui-control-border);
236
+ border-radius: var(--ui-radius-2);
237
+ background: var(--ui-control-surface);
238
+ color: var(--ui-text-primary);
239
+ font: inherit;
240
+ box-shadow: var(--ui-shadow-xs);
241
+ }
179
242
 
180
- .status,
181
- .footer {
182
- flex-shrink: 0;
183
- padding: var(--ui-space-2) var(--ui-space-4);
184
- color: var(--ui-text-secondary);
185
- font-size: var(--ui-font-size-sm);
186
- }
243
+ :slotted(input[slot="search"]:focus-visible) {
244
+ border-color: var(--ui-control-focus);
245
+ outline: 2px solid var(--ui-focus-ring, currentColor);
246
+ outline-offset: 2px;
247
+ }
187
248
 
188
- .status {
189
- border-block-end: 1px solid var(--ui-border-default);
190
- }
249
+ .status,
250
+ .footer {
251
+ flex-shrink: 0;
252
+ padding: var(--ui-space-2) var(--ui-space-4);
253
+ color: var(--ui-text-secondary);
254
+ font-size: var(--ui-font-size-sm);
255
+ }
191
256
 
192
- /* Laid out like the dialog's action row: actions right-aligned, spaced as buttons, no fill. */
193
- .footer {
194
- display: flex;
195
- flex-wrap: wrap;
196
- align-items: center;
197
- justify-content: flex-end;
198
- gap: var(--ui-space-2);
199
- padding: var(--ui-space-3) var(--ui-space-4);
200
- border-block-start: 1px solid var(--ui-border-default);
201
- }
257
+ .status {
258
+ border-block-end: 1px solid var(--ui-border-default);
259
+ }
202
260
 
203
- .status:empty,
204
- .footer:empty {
205
- display: none;
206
- }
261
+ /* Laid out like the dialog's action row: actions right-aligned, spaced as buttons, no fill. */
262
+ .footer {
263
+ display: flex;
264
+ flex-wrap: wrap;
265
+ align-items: center;
266
+ justify-content: flex-end;
267
+ gap: var(--ui-space-2);
268
+ padding: var(--ui-space-3) var(--ui-space-4);
269
+ border-block-start: 1px solid var(--ui-border-default);
270
+ }
207
271
 
208
- .body {
209
- flex: 1;
210
- min-block-size: 0;
211
- overflow: auto;
212
- padding: var(--ui-space-2);
213
- }
272
+ .status:empty,
273
+ .footer:empty {
274
+ display: none;
275
+ }
214
276
 
215
- @media (max-width: 47.9375rem) {
216
- dialog {
217
- padding: 0;
218
- }
219
-
220
- .panel {
221
- inline-size: 100%;
222
- min-block-size: 100dvh;
223
- max-block-size: none;
224
- border: 0;
225
- border-radius: 0;
226
- }
227
- }
277
+ .body {
278
+ flex: 1;
279
+ min-block-size: 0;
280
+ overflow: auto;
281
+ padding: var(--ui-space-2);
282
+ }
228
283
 
229
- /* A component that sets its display still honours the hidden attribute on its root. */
230
- [data-component~="ui-search-shell"][hidden] {
231
- display: none;
232
- }
284
+ @media (max-width: 47.9375rem) {
285
+ dialog {
286
+ padding: 0;
287
+ }
288
+
289
+ .panel {
290
+ inline-size: 100%;
291
+ min-block-size: 100dvh;
292
+ max-block-size: none;
293
+ border: 0;
294
+ border-radius: 0;
295
+ }
296
+ }
297
+
298
+ /* A component that sets its display still honours the hidden attribute on its root. */
299
+ [data-component~="ui-search-shell"][hidden] {
300
+ display: none;
301
+ }
233
302
  </style>
package/vue/UiSelect.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  type __VLS_Props = {
2
- disabled?: boolean | null;
3
- invalid?: boolean | null;
4
- multiple?: boolean | null;
5
- required?: boolean | null;
6
- value?: string | null;
2
+ disabled?: boolean;
3
+ invalid?: boolean;
4
+ multiple?: boolean;
5
+ required?: boolean;
6
+ value?: string;
7
7
  modelValue?: string | null;
8
8
  };
9
9
  declare var __VLS_1: {};
@@ -15,10 +15,10 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
15
15
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
16
16
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
17
17
  }>, {
18
- invalid: boolean | null;
19
- disabled: boolean | null;
20
- required: boolean | null;
21
- multiple: boolean | null;
18
+ invalid: boolean;
19
+ disabled: boolean;
20
+ required: boolean;
21
+ multiple: boolean;
22
22
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
23
23
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
24
24
  declare const _default: typeof __VLS_export;