@threadlabs/looma 0.5.1 → 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 (309) hide show
  1. package/README.md +1 -1
  2. package/components/ui-button/ui-button.html +13 -0
  3. package/components/ui-combobox/ui-combobox.html +12 -4
  4. package/components/ui-dialog/ui-dialog.html +13 -0
  5. package/components/ui-editor-insert-table-grid/ui-editor-insert-table-grid.html +1 -1
  6. package/components/ui-editor-mention-menu/ui-editor-mention-menu.html +1 -1
  7. package/components/ui-editor-table-context-menu/ui-editor-table-context-menu.html +6 -2
  8. package/components/ui-editor-table-overlay/ui-editor-table-overlay.html +20 -4
  9. package/components/ui-editor-table-toolbar/ui-editor-table-toolbar.html +8 -4
  10. package/components/ui-form-field/ui-form-field.html +18 -7
  11. package/components/ui-icon/ui-icon.html +5 -1
  12. package/components/ui-icon-button/ui-icon-button.html +30 -0
  13. package/components/ui-popover/ui-popover.js +10 -2
  14. package/components/ui-search-shell/ui-search-shell.html +7 -0
  15. package/components/ui-search-shell/ui-search-shell.js +9 -0
  16. package/components/ui-tabs/ui-tabs.html +1 -1
  17. package/components/ui-toast-region/ui-toast-region.html +1 -1
  18. package/components/ui-tree-item/ui-tree-item.html +6 -1
  19. package/dist/index.d.ts +1 -1
  20. package/dist/index.js +2 -2
  21. package/package.json +2 -2
  22. package/styles/ui-affordance-scope.css +1 -1
  23. package/styles/ui-avatar-group.css +1 -1
  24. package/styles/ui-avatar.css +1 -1
  25. package/styles/ui-badge.css +1 -1
  26. package/styles/ui-button.css +11 -1
  27. package/styles/ui-callout.css +1 -1
  28. package/styles/ui-checkbox.css +1 -1
  29. package/styles/ui-cluster.css +1 -1
  30. package/styles/ui-combobox.css +1 -1
  31. package/styles/ui-container.css +1 -1
  32. package/styles/ui-context-menu.css +1 -1
  33. package/styles/ui-dialog.css +18 -1
  34. package/styles/ui-disclosure.css +1 -1
  35. package/styles/ui-editable.css +1 -1
  36. package/styles/ui-editor-insert-table-grid.css +1 -1
  37. package/styles/ui-editor-mention-menu.css +1 -1
  38. package/styles/ui-editor-slash-menu.css +1 -1
  39. package/styles/ui-editor-table-context-menu.css +1 -1
  40. package/styles/ui-editor-table-overlay.css +1 -1
  41. package/styles/ui-editor-table-toolbar.css +1 -1
  42. package/styles/ui-editor-toolbar.css +1 -1
  43. package/styles/ui-floating-action-button.css +1 -1
  44. package/styles/ui-form-field.css +24 -10
  45. package/styles/ui-grid.css +1 -1
  46. package/styles/ui-icon-button.css +36 -1
  47. package/styles/ui-icon.css +1 -1
  48. package/styles/ui-input.css +1 -1
  49. package/styles/ui-menu-item.css +1 -1
  50. package/styles/ui-menu.css +1 -1
  51. package/styles/ui-popover.css +1 -1
  52. package/styles/ui-radio-group.css +1 -1
  53. package/styles/ui-radio.css +1 -1
  54. package/styles/ui-reel.css +1 -1
  55. package/styles/ui-search-result-row.css +1 -1
  56. package/styles/ui-search-shell.css +11 -2
  57. package/styles/ui-select.css +1 -1
  58. package/styles/ui-separator.css +1 -1
  59. package/styles/ui-sidebar.css +1 -1
  60. package/styles/ui-stack.css +1 -1
  61. package/styles/ui-switch.css +1 -1
  62. package/styles/ui-switcher.css +1 -1
  63. package/styles/ui-tabs.css +1 -1
  64. package/styles/ui-textarea.css +1 -1
  65. package/styles/ui-toast-region.css +1 -1
  66. package/styles/ui-tooltip.css +1 -1
  67. package/styles/ui-top-bar.css +1 -1
  68. package/styles/ui-tree-item.css +10 -2
  69. package/styles/ui-tree.css +1 -1
  70. package/vanilla/UiAffordanceScope.d.ts +1 -1
  71. package/vanilla/UiAffordanceScope.js +2 -2
  72. package/vanilla/UiAvatar.d.ts +1 -1
  73. package/vanilla/UiAvatar.js +2 -2
  74. package/vanilla/UiAvatarGroup.d.ts +1 -1
  75. package/vanilla/UiAvatarGroup.js +2 -2
  76. package/vanilla/UiBadge.d.ts +1 -1
  77. package/vanilla/UiBadge.js +2 -2
  78. package/vanilla/UiButton.d.ts +3 -1
  79. package/vanilla/UiButton.js +3 -3
  80. package/vanilla/UiCallout.d.ts +1 -1
  81. package/vanilla/UiCallout.js +2 -2
  82. package/vanilla/UiCheckbox.d.ts +1 -1
  83. package/vanilla/UiCheckbox.js +2 -2
  84. package/vanilla/UiCluster.d.ts +1 -1
  85. package/vanilla/UiCluster.js +2 -2
  86. package/vanilla/UiCombobox.d.ts +1 -1
  87. package/vanilla/UiCombobox.js +3 -3
  88. package/vanilla/UiContainer.d.ts +1 -1
  89. package/vanilla/UiContainer.js +2 -2
  90. package/vanilla/UiContextMenu.d.ts +1 -1
  91. package/vanilla/UiContextMenu.js +2 -2
  92. package/vanilla/UiDialog.d.ts +1 -1
  93. package/vanilla/UiDialog.js +2 -2
  94. package/vanilla/UiDisclosure.d.ts +1 -1
  95. package/vanilla/UiDisclosure.js +2 -2
  96. package/vanilla/UiEditable.d.ts +1 -1
  97. package/vanilla/UiEditable.js +2 -2
  98. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  99. package/vanilla/UiEditorInsertTableGrid.js +3 -3
  100. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  101. package/vanilla/UiEditorMentionMenu.js +3 -3
  102. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  103. package/vanilla/UiEditorSlashMenu.js +2 -2
  104. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  105. package/vanilla/UiEditorTableContextMenu.js +3 -3
  106. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  107. package/vanilla/UiEditorTableOverlay.js +3 -3
  108. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  109. package/vanilla/UiEditorTableToolbar.js +3 -3
  110. package/vanilla/UiEditorToolbar.d.ts +1 -1
  111. package/vanilla/UiEditorToolbar.js +2 -2
  112. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  113. package/vanilla/UiFloatingActionButton.js +2 -2
  114. package/vanilla/UiFormField.d.ts +1 -1
  115. package/vanilla/UiFormField.js +15 -6
  116. package/vanilla/UiGrid.d.ts +1 -1
  117. package/vanilla/UiGrid.js +2 -2
  118. package/vanilla/UiIcon.d.ts +1 -1
  119. package/vanilla/UiIcon.js +3 -3
  120. package/vanilla/UiIconButton.d.ts +1 -1
  121. package/vanilla/UiIconButton.js +2 -2
  122. package/vanilla/UiInput.d.ts +1 -1
  123. package/vanilla/UiInput.js +2 -2
  124. package/vanilla/UiMenu.d.ts +1 -1
  125. package/vanilla/UiMenu.js +2 -2
  126. package/vanilla/UiMenuItem.d.ts +1 -1
  127. package/vanilla/UiMenuItem.js +2 -2
  128. package/vanilla/UiPopover.d.ts +1 -1
  129. package/vanilla/UiPopover.js +2 -2
  130. package/vanilla/UiRadio.d.ts +1 -1
  131. package/vanilla/UiRadio.js +2 -2
  132. package/vanilla/UiRadioGroup.d.ts +1 -1
  133. package/vanilla/UiRadioGroup.js +2 -2
  134. package/vanilla/UiReel.d.ts +1 -1
  135. package/vanilla/UiReel.js +2 -2
  136. package/vanilla/UiSearchResultRow.d.ts +1 -1
  137. package/vanilla/UiSearchResultRow.js +2 -2
  138. package/vanilla/UiSearchShell.d.ts +1 -1
  139. package/vanilla/UiSearchShell.js +2 -2
  140. package/vanilla/UiSelect.d.ts +1 -1
  141. package/vanilla/UiSelect.js +2 -2
  142. package/vanilla/UiSeparator.d.ts +1 -1
  143. package/vanilla/UiSeparator.js +2 -2
  144. package/vanilla/UiSidebar.d.ts +1 -1
  145. package/vanilla/UiSidebar.js +2 -2
  146. package/vanilla/UiStack.d.ts +1 -1
  147. package/vanilla/UiStack.js +2 -2
  148. package/vanilla/UiSwitch.d.ts +1 -1
  149. package/vanilla/UiSwitch.js +2 -2
  150. package/vanilla/UiSwitcher.d.ts +1 -1
  151. package/vanilla/UiSwitcher.js +2 -2
  152. package/vanilla/UiTabs.d.ts +1 -1
  153. package/vanilla/UiTabs.js +3 -3
  154. package/vanilla/UiTextarea.d.ts +1 -1
  155. package/vanilla/UiTextarea.js +2 -2
  156. package/vanilla/UiToastRegion.d.ts +1 -1
  157. package/vanilla/UiToastRegion.js +3 -3
  158. package/vanilla/UiTooltip.d.ts +1 -1
  159. package/vanilla/UiTooltip.js +2 -2
  160. package/vanilla/UiTopBar.d.ts +1 -1
  161. package/vanilla/UiTopBar.js +1 -1
  162. package/vanilla/UiTree.d.ts +1 -1
  163. package/vanilla/UiTree.js +2 -2
  164. package/vanilla/UiTreeItem.d.ts +1 -1
  165. package/vanilla/UiTreeItem.js +2 -2
  166. package/vue/UiAffordanceScope.d.ts +2 -2
  167. package/vue/UiAffordanceScope.vue +92 -73
  168. package/vue/UiAvatar.d.ts +7 -7
  169. package/vue/UiAvatar.vue +145 -105
  170. package/vue/UiAvatarGroup.d.ts +4 -4
  171. package/vue/UiAvatarGroup.vue +134 -118
  172. package/vue/UiBadge.d.ts +4 -4
  173. package/vue/UiBadge.vue +113 -114
  174. package/vue/UiButton.d.ts +10 -6
  175. package/vue/UiButton.vue +289 -248
  176. package/vue/UiCallout.d.ts +2 -2
  177. package/vue/UiCallout.vue +154 -87
  178. package/vue/UiCheckbox.d.ts +14 -10
  179. package/vue/UiCheckbox.vue +228 -162
  180. package/vue/UiCluster.d.ts +2 -2
  181. package/vue/UiCluster.vue +53 -60
  182. package/vue/UiCombobox.d.ts +36 -32
  183. package/vue/UiCombobox.vue +1005 -416
  184. package/vue/UiContainer.d.ts +2 -2
  185. package/vue/UiContainer.vue +48 -51
  186. package/vue/UiContextMenu.d.ts +6 -4
  187. package/vue/UiContextMenu.vue +205 -116
  188. package/vue/UiDialog.d.ts +11 -9
  189. package/vue/UiDialog.vue +287 -212
  190. package/vue/UiDisclosure.d.ts +8 -6
  191. package/vue/UiDisclosure.vue +248 -159
  192. package/vue/UiEditable.d.ts +16 -12
  193. package/vue/UiEditable.vue +325 -205
  194. package/vue/UiEditorInsertTableGrid.d.ts +8 -8
  195. package/vue/UiEditorInsertTableGrid.vue +216 -157
  196. package/vue/UiEditorMentionMenu.d.ts +9 -9
  197. package/vue/UiEditorMentionMenu.vue +265 -222
  198. package/vue/UiEditorSlashMenu.d.ts +7 -7
  199. package/vue/UiEditorSlashMenu.vue +286 -240
  200. package/vue/UiEditorTableContextMenu.d.ts +5 -5
  201. package/vue/UiEditorTableContextMenu.vue +306 -193
  202. package/vue/UiEditorTableOverlay.d.ts +2 -2
  203. package/vue/UiEditorTableOverlay.vue +609 -369
  204. package/vue/UiEditorTableToolbar.d.ts +7 -7
  205. package/vue/UiEditorTableToolbar.vue +443 -268
  206. package/vue/UiEditorToolbar.d.ts +2 -2
  207. package/vue/UiEditorToolbar.vue +134 -121
  208. package/vue/UiFloatingActionButton.d.ts +6 -6
  209. package/vue/UiFloatingActionButton.vue +100 -99
  210. package/vue/UiFormField.d.ts +6 -6
  211. package/vue/UiFormField.vue +112 -80
  212. package/vue/UiGrid.d.ts +2 -2
  213. package/vue/UiGrid.vue +51 -57
  214. package/vue/UiIcon.d.ts +2 -2
  215. package/vue/UiIcon.vue +118 -89
  216. package/vue/UiIconButton.d.ts +11 -11
  217. package/vue/UiIconButton.vue +283 -217
  218. package/vue/UiInput.d.ts +9 -9
  219. package/vue/UiInput.vue +153 -127
  220. package/vue/UiMenu.d.ts +8 -6
  221. package/vue/UiMenu.vue +217 -143
  222. package/vue/UiMenuItem.d.ts +4 -4
  223. package/vue/UiMenuItem.vue +52 -46
  224. package/vue/UiPopover.d.ts +8 -6
  225. package/vue/UiPopover.vue +197 -137
  226. package/vue/UiRadio.d.ts +14 -10
  227. package/vue/UiRadio.vue +183 -117
  228. package/vue/UiRadioGroup.d.ts +14 -12
  229. package/vue/UiRadioGroup.vue +172 -111
  230. package/vue/UiReel.d.ts +3 -3
  231. package/vue/UiReel.vue +77 -77
  232. package/vue/UiSearchResultRow.d.ts +4 -4
  233. package/vue/UiSearchResultRow.vue +124 -115
  234. package/vue/UiSearchShell.d.ts +10 -8
  235. package/vue/UiSearchShell.vue +245 -176
  236. package/vue/UiSelect.d.ts +9 -9
  237. package/vue/UiSelect.vue +162 -134
  238. package/vue/UiSeparator.d.ts +2 -2
  239. package/vue/UiSeparator.vue +22 -27
  240. package/vue/UiSidebar.d.ts +20 -18
  241. package/vue/UiSidebar.vue +312 -224
  242. package/vue/UiStack.d.ts +3 -3
  243. package/vue/UiStack.vue +64 -70
  244. package/vue/UiSwitch.d.ts +12 -8
  245. package/vue/UiSwitch.vue +218 -150
  246. package/vue/UiSwitcher.d.ts +3 -3
  247. package/vue/UiSwitcher.vue +73 -75
  248. package/vue/UiTabs.d.ts +10 -8
  249. package/vue/UiTabs.vue +251 -210
  250. package/vue/UiTextarea.d.ts +11 -11
  251. package/vue/UiTextarea.vue +155 -128
  252. package/vue/UiToastRegion.d.ts +10 -8
  253. package/vue/UiToastRegion.vue +261 -198
  254. package/vue/UiTooltip.d.ts +14 -12
  255. package/vue/UiTooltip.vue +241 -177
  256. package/vue/UiTopBar.vue +51 -42
  257. package/vue/UiTree.d.ts +8 -6
  258. package/vue/UiTree.vue +157 -70
  259. package/vue/UiTreeItem.d.ts +24 -22
  260. package/vue/UiTreeItem.vue +456 -339
  261. package/vue/chunks/UiAffordanceScope.js +9 -16
  262. package/vue/chunks/UiAvatar.js +23 -29
  263. package/vue/chunks/UiAvatarGroup.js +16 -39
  264. package/vue/chunks/UiBadge.js +3 -12
  265. package/vue/chunks/UiButton.js +15 -18
  266. package/vue/chunks/UiCallout.js +8 -17
  267. package/vue/chunks/UiCheckbox.js +37 -40
  268. package/vue/chunks/UiCluster.js +3 -12
  269. package/vue/chunks/UiCombobox.js +224 -266
  270. package/vue/chunks/UiContainer.js +3 -12
  271. package/vue/chunks/UiContextMenu.js +39 -34
  272. package/vue/chunks/UiDialog.js +36 -39
  273. package/vue/chunks/UiDisclosure.js +43 -48
  274. package/vue/chunks/UiEditable.js +55 -57
  275. package/vue/chunks/UiEditorInsertTableGrid.js +55 -73
  276. package/vue/chunks/UiEditorMentionMenu.js +40 -81
  277. package/vue/chunks/UiEditorSlashMenu.js +28 -52
  278. package/vue/chunks/UiEditorTableContextMenu.js +32 -56
  279. package/vue/chunks/UiEditorTableOverlay.js +58 -82
  280. package/vue/chunks/UiEditorTableToolbar.js +61 -85
  281. package/vue/chunks/UiEditorToolbar.js +4 -13
  282. package/vue/chunks/UiFloatingActionButton.js +7 -21
  283. package/vue/chunks/UiFormField.js +15 -12
  284. package/vue/chunks/UiGrid.js +3 -12
  285. package/vue/chunks/UiIcon.js +20 -43
  286. package/vue/chunks/UiIconButton.js +16 -28
  287. package/vue/chunks/UiInput.js +20 -25
  288. package/vue/chunks/UiMenu.js +29 -33
  289. package/vue/chunks/UiMenuItem.js +4 -10
  290. package/vue/chunks/UiPopover.js +28 -29
  291. package/vue/chunks/UiRadio.js +36 -39
  292. package/vue/chunks/UiRadioGroup.js +30 -34
  293. package/vue/chunks/UiReel.js +6 -15
  294. package/vue/chunks/UiSearchResultRow.js +6 -19
  295. package/vue/chunks/UiSearchShell.js +25 -28
  296. package/vue/chunks/UiSelect.js +20 -23
  297. package/vue/chunks/UiSeparator.js +2 -8
  298. package/vue/chunks/UiSidebar.js +39 -44
  299. package/vue/chunks/UiStack.js +6 -15
  300. package/vue/chunks/UiSwitch.js +35 -38
  301. package/vue/chunks/UiSwitcher.js +6 -15
  302. package/vue/chunks/UiTabs.js +47 -85
  303. package/vue/chunks/UiTextarea.js +21 -26
  304. package/vue/chunks/UiToastRegion.js +38 -72
  305. package/vue/chunks/UiTooltip.js +34 -35
  306. package/vue/chunks/UiTopBar.js +1 -1
  307. package/vue/chunks/UiTree.js +20 -15
  308. package/vue/chunks/UiTreeItem.js +85 -102
  309. package/vue/components.css +3994 -3801
package/vue/UiSidebar.vue CHANGED
@@ -1,288 +1,376 @@
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-sidebar/ui-sidebar.js";
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-sidebar/ui-sidebar.js'
5
13
 
6
- defineOptions({ inheritAttrs: false });
14
+ defineOptions({ inheritAttrs: false })
7
15
 
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
- enumerated: (v: unknown): any => typeof v === "boolean" ? String(v) : hn.attr(v),
13
- };
14
-
15
- const props = withDefaults(defineProps<{
16
- breakpoint?: "sm" | "md" | "lg" | null;
17
- collapsed?: boolean | null;
18
- maxWidth?: number | null;
19
- minWidth?: number | null;
20
- resizable?: boolean | null;
21
- resizeLabel?: string | null;
22
- resizeStep?: number | null;
23
- side?: "start" | "end" | null;
24
- width?: number | null;
25
- }>(), {
26
- breakpoint: "md",
27
- collapsed: false,
28
- maxWidth: 480,
29
- minWidth: 200,
30
- resizable: false,
31
- resizeLabel: "Resize sidebar",
32
- resizeStep: 16,
33
- side: "start",
34
- width: 0,
35
- });
16
+ const props = withDefaults(
17
+ defineProps<{
18
+ breakpoint?: 'sm' | 'md' | 'lg'
19
+ collapsed?: boolean
20
+ maxWidth?: number
21
+ minWidth?: number
22
+ resizable?: boolean
23
+ resizeLabel?: string
24
+ resizeStep?: number
25
+ side?: 'start' | 'end'
26
+ width?: number
27
+ }>(),
28
+ {
29
+ breakpoint: 'md',
30
+ collapsed: false,
31
+ maxWidth: 480,
32
+ minWidth: 200,
33
+ resizable: false,
34
+ resizeLabel: 'Resize sidebar',
35
+ resizeStep: 16,
36
+ side: 'start',
37
+ width: 0,
38
+ },
39
+ )
36
40
  const emit = defineEmits<{
37
- "resize": [detail: { readonly width: number; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
38
- "toggle": [detail: { readonly open: boolean; readonly mode: "docked" | "drawer"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
39
- }>();
40
- const root = ref<HTMLElement | null>(null);
41
- const refs: Record<string, Element | undefined> = {};
42
- const state_internalCollapsed = ref<any>(false);
43
- const state_drawer = ref<any>(false);
41
+ 'update:width': [value: number]
42
+ resize: [
43
+ detail: { readonly width: number; readonly trigger: 'keyboard' | 'pointer' | 'programmatic' },
44
+ ]
45
+ toggle: [
46
+ detail: {
47
+ readonly open: boolean
48
+ readonly mode: 'docked' | 'drawer'
49
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
50
+ },
51
+ ]
52
+ }>()
53
+
54
+ const root = ref<HTMLElement | null>(null)
55
+ const resizerElement = useTemplateRef<HTMLElement>('resizer')
56
+ const internalCollapsed = ref(false)
57
+ const drawer = ref(false)
58
+
59
+ /** The values the styles' :host-state() rules test. */
60
+ const hostState = computed(() =>
61
+ [
62
+ props.side && `side side=${props.side}`,
63
+ internalCollapsed.value && 'internalCollapsed',
64
+ ].filter(Boolean).join(' ')
65
+ )
44
66
 
45
67
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
46
- const dispatch = (name: string, detail?: unknown): boolean => {
47
- const declared = {"resize":{"bubbles":true,"composed":true,"cancelable":false},"toggle":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
68
+ function dispatch(name: string, detail?: unknown): boolean {
69
+ const declared: Record<string, EventInit | undefined> = {
70
+ resize: { bubbles: true, composed: true, cancelable: false },
71
+ toggle: { bubbles: true, composed: true, cancelable: false },
72
+ }
48
73
  const checks: Record<string, (detail: unknown) => boolean> = {
49
- "resize": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && (typeof (detail as Record<string, unknown>)["width"] === "number" && Number.isFinite((detail as Record<string, unknown>)["width"])) && ((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) => ["width","trigger"].includes(key))),
50
- "toggle": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["open"] === "boolean" && ((detail as Record<string, unknown>)["mode"] === "docked" || (detail as Record<string, unknown>)["mode"] === "drawer") && ((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","mode","trigger"].includes(key))),
51
- };
74
+ resize: (detail) =>
75
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
76
+ && (typeof (detail as Record<string, unknown>)['width'] === 'number'
77
+ && Number.isFinite((detail as Record<string, unknown>)['width']))
78
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
79
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
80
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
81
+ && Object.keys(detail as object).every((key) => ['width', 'trigger'].includes(key)),
82
+ toggle: (detail) =>
83
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
84
+ && typeof (detail as Record<string, unknown>)['open'] === 'boolean'
85
+ && ((detail as Record<string, unknown>)['mode'] === 'docked'
86
+ || (detail as Record<string, unknown>)['mode'] === 'drawer')
87
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
88
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
89
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
90
+ && Object.keys(detail as object).every((key) => ['open', 'mode', 'trigger'].includes(key)),
91
+ }
52
92
  if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
53
- throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
93
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`)
54
94
  }
55
- (emit as (name: string, detail: unknown) => void)(name, detail);
56
- return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail })) ?? true;
57
- };
58
-
59
- /** The resolved values the styles' :host-state() rules test. */
60
- const hostState = computed(() => (["side","internalCollapsed"] as const).flatMap((name) => {
61
- const value = read(name);
62
- const tokens: string[] = hn.t(value) ? [name] : [];
63
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
64
- return tokens;
65
- }).join(" "));
95
+ const emitEvent = emit as (name: string, detail: unknown) => void
96
+ emitEvent(name, detail)
97
+ if (detail !== null && typeof detail === 'object' && 'width' in detail) {
98
+ emitEvent('update:width', (detail as Record<string, unknown>)['width'])
99
+ }
100
+ return root.value?.dispatchEvent(
101
+ new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail }),
102
+ ) ?? true
103
+ }
66
104
 
67
105
  function read(name: string): unknown {
68
- if (name === "internalCollapsed") return state_internalCollapsed.value;
69
- if (name === "drawer") return state_drawer.value;
70
- return (props as Record<string, unknown>)[name];
106
+ if (name === 'internalCollapsed') return internalCollapsed.value
107
+ if (name === 'drawer') return drawer.value
108
+ return (props as Record<string, unknown>)[name]
71
109
  }
72
110
 
73
111
  function write(name: string, value: unknown): boolean {
74
- if (name === "internalCollapsed") { state_internalCollapsed.value = value; return true; }
75
- if (name === "drawer") { state_drawer.value = value; return true; }
76
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
112
+ if (name === 'internalCollapsed') {
113
+ internalCollapsed.value = value as never
114
+ return true
115
+ }
116
+ if (name === 'drawer') {
117
+ drawer.value = value as never
118
+ return true
119
+ }
120
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
77
121
  }
78
122
 
79
- const stops: Array<() => void> = [];
123
+ const stops: Array<() => void> = []
80
124
  const host = {
81
- get element(): Element { return root.value as Element; },
125
+ get element(): Element {
126
+ return root.value as Element
127
+ },
82
128
  state: new Proxy({} as Record<string, unknown>, {
83
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
84
- set: (_target, name, value) => typeof name === "string" && write(name, value),
129
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
130
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
85
131
  }),
86
- refs: refs as Readonly<Record<string, Element>>,
132
+ refs: {
133
+ get resizer(): Element {
134
+ return resizerElement.value as Element
135
+ },
136
+ } as Readonly<Record<string, Element>>,
87
137
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
88
138
  get: (_target, name) => {
89
- if (typeof name !== "string" || root.value === null) return undefined;
90
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
91
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
139
+ if (typeof name !== 'string' || root.value === null) return undefined
140
+ const form = root.value instanceof HTMLFormElement
141
+ ? root.value
142
+ : root.value.querySelector('form')
143
+ return form?.elements.namedItem(name)
144
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
92
145
  },
93
146
  }),
94
147
  signal<T>(initialValue: T) {
95
- const value = shallowRef(initialValue);
148
+ const value = shallowRef(initialValue)
96
149
  return {
97
150
  get: (): T => value.value,
98
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
99
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
100
- };
151
+ set: (next: T): void => {
152
+ if (!Object.is(value.value, next)) value.value = next
153
+ },
154
+ update: (next: (current: T) => T): void => {
155
+ const updated = next(value.value)
156
+ if (!Object.is(value.value, updated)) value.value = updated
157
+ },
158
+ }
101
159
  },
102
160
  computed<T>(compute: () => T) {
103
- const value = computed(compute);
104
- return { get: (): T => value.value };
161
+ const value = computed(compute)
162
+ return { get: (): T => value.value }
105
163
  },
106
164
  effect(run: () => void | (() => void)): () => void {
107
165
  const stop = watchEffect((onCleanup) => {
108
- const cleanup = run();
109
- if (typeof cleanup === "function") onCleanup(cleanup);
110
- }, { flush: "post" });
111
- stops.push(stop);
112
- return stop;
166
+ const cleanup = run()
167
+ if (typeof cleanup === 'function') onCleanup(cleanup)
168
+ }, { flush: 'post' })
169
+ stops.push(stop)
170
+ return stop
113
171
  },
114
172
  on(event: string, listener: EventListener): () => void {
115
- const element = root.value;
116
- element?.addEventListener(event, listener);
117
- const off = (): void => element?.removeEventListener(event, listener);
118
- stops.push(off);
119
- return off;
173
+ const element = root.value
174
+ element?.addEventListener(event, listener)
175
+ const off = (): void => element?.removeEventListener(event, listener)
176
+ stops.push(off)
177
+ return off
120
178
  },
121
179
  dispatch,
122
- };
180
+ }
123
181
 
124
- let cleanup: void | (() => void);
125
- let ready: Promise<void> | undefined;
182
+ let cleanup: void | (() => void)
183
+ let ready: Promise<void> | undefined
126
184
  onMounted(() => {
127
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
128
- });
185
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
186
+ cleanup = result
187
+ })
188
+ })
129
189
  onBeforeUnmount(() => {
130
- for (const stop of stops.splice(0)) stop();
131
- if (typeof cleanup === "function") cleanup();
132
- });
190
+ for (const stop of stops.splice(0)) stop()
191
+ if (typeof cleanup === 'function') cleanup()
192
+ })
133
193
  </script>
134
194
 
135
195
  <template>
136
- <aside data-component="ui-sidebar" v-bind="$attrs" :data-ui-sidebar-state="hostState || undefined" ref="root"><div class="content"><slot></slot></div><div class="resizer" role="separator" aria-orientation="vertical" tabindex="0" data-ui-affordance="resize" :aria-label="hn.enumerated(props.resizeLabel)" :hidden="hn.attr((hn.t((hn.t(!hn.t(props.resizable)) || hn.t(state_drawer))) || hn.t(state_internalCollapsed)))" :ref="(element) => { refs['resizer'] = element as Element }"><span class="guide" aria-hidden="true"></span></div></aside>
196
+ <aside
197
+ data-component="ui-sidebar"
198
+ v-bind="$attrs"
199
+ :data-ui-sidebar-state="hostState || undefined"
200
+ ref="root"
201
+ >
202
+ <div class="content"><slot /></div>
203
+ <div
204
+ class="resizer"
205
+ role="separator"
206
+ aria-orientation="vertical"
207
+ tabindex="0"
208
+ data-ui-affordance="resize"
209
+ :aria-label="resizeLabel"
210
+ :hidden="!resizable || drawer || internalCollapsed"
211
+ ref="resizer"
212
+ >
213
+ <span class="guide" aria-hidden="true"></span>
214
+ </div>
215
+ </aside>
137
216
  </template>
138
217
 
139
218
  <style scoped>
140
219
  [data-component~="ui-sidebar"] {
141
- position: relative;
142
- box-sizing: border-box;
143
- display: flex;
144
- flex-direction: column;
145
- flex: none;
146
- inline-size: var(--_sidebar-width, var(--ui-sidebar-width, 280px));
147
- max-inline-size: 100%;
148
- min-block-size: 0;
149
- background: var(--ui-sidebar-surface, var(--ui-surface-default));
150
- border-inline-end: 1px solid var(--ui-sidebar-border, var(--ui-border-default));
151
- }
220
+ position: relative;
221
+ box-sizing: border-box;
222
+ display: flex;
223
+ flex-direction: column;
224
+ flex: none;
225
+ inline-size: var(--_sidebar-width, var(--ui-sidebar-width, 280px));
226
+ max-inline-size: 100%;
227
+ min-block-size: 0;
228
+ background: var(--ui-sidebar-surface, var(--ui-surface-default));
229
+ border-inline-end: 1px solid var(--ui-sidebar-border, var(--ui-border-default));
230
+ }
152
231
 
153
- [data-component~="ui-sidebar"][data-ui-sidebar-state~="side=end"] {
154
- border-inline-end: 0;
155
- border-inline-start: 1px solid var(--ui-sidebar-border, var(--ui-border-default));
156
- }
232
+ [data-component~="ui-sidebar"][data-ui-sidebar-state~="side=end"] {
233
+ border-inline-end: 0;
234
+ border-inline-start: 1px solid var(--ui-sidebar-border, var(--ui-border-default));
235
+ }
157
236
 
158
- .content {
159
- flex: 1;
160
- min-block-size: 0;
161
- overflow: auto;
162
- }
237
+ .content {
238
+ flex: 1;
239
+ min-block-size: 0;
240
+ overflow: auto;
241
+ }
163
242
 
164
- /* Collapsed while docked. */
165
- [data-component~="ui-sidebar"][data-ui-sidebar-state~="internalCollapsed"]:not([popover]) {
166
- display: none;
167
- }
243
+ /* Collapsed while docked. */
244
+ [data-component~="ui-sidebar"][data-ui-sidebar-state~="internalCollapsed"]:not([popover]) {
245
+ display: none;
246
+ }
168
247
 
169
- .resizer {
170
- position: absolute;
171
- z-index: 1;
172
- inset-block: 0;
173
- /* On the panel's inner edge: the end edge of a start sidebar. */
174
- inset-inline-end: 0;
175
- inline-size: 8px;
176
- min-inline-size: 8px;
177
- transform: translateX(50%);
178
- cursor: col-resize;
179
- touch-action: none;
180
- outline: none;
181
- }
248
+ .resizer {
249
+ position: absolute;
250
+ z-index: 1;
251
+ inset-block: 0;
252
+ /* On the panel's inner edge: the end edge of a start sidebar. */
253
+ inset-inline-end: 0;
254
+ inline-size: 8px;
255
+ min-inline-size: 8px;
256
+ transform: translateX(50%);
257
+ cursor: col-resize;
258
+ touch-action: none;
259
+ outline: none;
260
+ }
182
261
 
183
- .resizer[hidden] {
184
- display: none;
185
- }
262
+ .resizer[hidden] {
263
+ display: none;
264
+ }
186
265
 
187
- [data-component~="ui-sidebar"][data-ui-sidebar-state~="side=end"] .resizer {
188
- inset-inline-end: auto;
189
- inset-inline-start: 0;
190
- transform: translateX(-50%);
191
- }
266
+ [data-component~="ui-sidebar"][data-ui-sidebar-state~="side=end"] .resizer {
267
+ inset-inline-end: auto;
268
+ inset-inline-start: 0;
269
+ transform: translateX(-50%);
270
+ }
192
271
 
193
- .resizer::after {
194
- content: "";
195
- position: absolute;
196
- inset-block: 0;
197
- inset-inline-start: 3px;
198
- inline-size: 2px;
199
- background: color-mix(in srgb, var(--ui-affordance-guide-color, var(--ui-border-strong)) 45%, transparent);
200
- opacity: var(--ui-affordance-guide-opacity, 0.42);
201
- transition:
202
- background-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease),
203
- opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
204
- }
272
+ .resizer::after {
273
+ content: "";
274
+ position: absolute;
275
+ inset-block: 0;
276
+ inset-inline-start: 3px;
277
+ inline-size: 2px;
278
+ background: color-mix(
279
+ in srgb,
280
+ var(--ui-affordance-guide-color, var(--ui-border-strong)) 45%,
281
+ transparent
282
+ );
283
+ opacity: var(--ui-affordance-guide-opacity, 0.42);
284
+ transition:
285
+ background-color var(--ui-affordance-motion, var(--ui-motion-fast, 120ms))
286
+ var(--ui-motion-ease, ease),
287
+ opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
288
+ }
205
289
 
206
- .guide {
207
- position: absolute;
208
- inset-block-start: 50%;
209
- inset-inline-start: 50%;
210
- inline-size: 6px;
211
- block-size: 22px;
212
- border: 1px solid var(--ui-border-strong, #c8c8c4);
213
- border-radius: var(--ui-radius-round, 999px);
214
- background: var(--ui-surface-elevated, #fff);
215
- opacity: 0;
216
- transform: translate(-50%, -50%);
217
- transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms)) var(--ui-motion-ease, ease);
218
- pointer-events: none;
219
- }
290
+ .guide {
291
+ position: absolute;
292
+ inset-block-start: 50%;
293
+ inset-inline-start: 50%;
294
+ inline-size: 6px;
295
+ block-size: 22px;
296
+ border: 1px solid var(--ui-border-strong, #c8c8c4);
297
+ border-radius: var(--ui-radius-round, 999px);
298
+ background: var(--ui-surface-elevated, #fff);
299
+ opacity: 0;
300
+ transform: translate(-50%, -50%);
301
+ transition: opacity var(--ui-affordance-motion, var(--ui-motion-fast, 120ms))
302
+ var(--ui-motion-ease, ease);
303
+ pointer-events: none;
304
+ }
220
305
 
221
- .resizer:is(:hover, :focus-visible)::after {
222
- background: var(--ui-affordance-direct-color, var(--ui-accent-solid, var(--ui-color-focus, Highlight)));
223
- opacity: 1;
224
- }
306
+ .resizer:is(:hover, :focus-visible)::after {
307
+ background: var(
308
+ --ui-affordance-direct-color,
309
+ var(--ui-accent-solid, var(--ui-color-focus, Highlight))
310
+ );
311
+ opacity: 1;
312
+ }
225
313
 
226
- .resizer:is(:hover, :focus-visible) > .guide {
227
- opacity: 1;
228
- }
314
+ .resizer:is(:hover, :focus-visible) > .guide {
315
+ opacity: 1;
316
+ }
229
317
 
230
- /* Drawer: a popover in the top layer, sliding in from its edge. Closed popovers are hidden by the UA. */
231
- [data-component~="ui-sidebar"][popover] {
232
- position: fixed;
233
- inset-block: 0;
234
- inset-inline-start: 0;
235
- inset-inline-end: auto;
236
- margin: 0;
237
- padding: 0;
238
- inline-size: min(var(--_sidebar-width, var(--ui-sidebar-width, 280px)), 85vw);
239
- max-block-size: none;
240
- block-size: 100dvh;
241
- border-block: 0;
242
- box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
243
- transform: translateX(0);
244
- transition:
245
- transform var(--ui-motion-base, 0.2s) var(--ui-motion-ease-out, ease-out),
246
- display var(--ui-motion-base, 0.2s) allow-discrete,
247
- overlay var(--ui-motion-base, 0.2s) allow-discrete;
248
- }
318
+ /* Drawer: a popover in the top layer, sliding in from its edge. Closed popovers are hidden by the UA. */
319
+ [data-component~="ui-sidebar"][popover] {
320
+ position: fixed;
321
+ inset-block: 0;
322
+ inset-inline-start: 0;
323
+ inset-inline-end: auto;
324
+ margin: 0;
325
+ padding: 0;
326
+ inline-size: min(var(--_sidebar-width, var(--ui-sidebar-width, 280px)), 85vw);
327
+ max-block-size: none;
328
+ block-size: 100dvh;
329
+ border-block: 0;
330
+ box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
331
+ transform: translateX(0);
332
+ transition:
333
+ transform var(--ui-motion-base, 0.2s) var(--ui-motion-ease-out, ease-out),
334
+ display var(--ui-motion-base, 0.2s) allow-discrete,
335
+ overlay var(--ui-motion-base, 0.2s) allow-discrete;
336
+ }
249
337
 
250
- /* The author display above would otherwise override the UA rule that hides a closed popover. */
251
- [data-component~="ui-sidebar"][popover]:not(:popover-open) {
252
- display: none;
253
- transform: translateX(-100%);
254
- }
338
+ /* The author display above would otherwise override the UA rule that hides a closed popover. */
339
+ [data-component~="ui-sidebar"][popover]:not(:popover-open) {
340
+ display: none;
341
+ transform: translateX(-100%);
342
+ }
255
343
 
256
- [data-component~="ui-sidebar"][data-ui-sidebar-state~="side=end"][popover] {
257
- inset-inline-start: auto;
258
- inset-inline-end: 0;
259
- }
344
+ [data-component~="ui-sidebar"][data-ui-sidebar-state~="side=end"][popover] {
345
+ inset-inline-start: auto;
346
+ inset-inline-end: 0;
347
+ }
260
348
 
261
- [data-component~="ui-sidebar"][data-ui-sidebar-state~="side=end"][popover]:not(:popover-open) {
262
- transform: translateX(100%);
263
- }
349
+ [data-component~="ui-sidebar"][data-ui-sidebar-state~="side=end"][popover]:not(:popover-open) {
350
+ transform: translateX(100%);
351
+ }
264
352
 
265
- @starting-style {
266
- [data-component~="ui-sidebar"][popover]:popover-open {
267
- transform: translateX(-100%);
268
- }
269
- [data-component~="ui-sidebar"][data-ui-sidebar-state~="side=end"][popover]:popover-open {
270
- transform: translateX(100%);
271
- }
272
- }
353
+ @starting-style {
354
+ [data-component~="ui-sidebar"][popover]:popover-open {
355
+ transform: translateX(-100%);
356
+ }
357
+ [data-component~="ui-sidebar"][data-ui-sidebar-state~="side=end"][popover]:popover-open {
358
+ transform: translateX(100%);
359
+ }
360
+ }
273
361
 
274
- [data-component~="ui-sidebar"][popover]::backdrop {
275
- background: var(--ui-sidebar-backdrop, rgb(0 0 0 / 0.32));
276
- }
362
+ [data-component~="ui-sidebar"][popover]::backdrop {
363
+ background: var(--ui-sidebar-backdrop, rgb(0 0 0 / 0.32));
364
+ }
277
365
 
278
- @media (prefers-reduced-motion: reduce) {
279
- [data-component~="ui-sidebar"][popover] {
280
- transition: none;
281
- }
282
- }
366
+ @media (prefers-reduced-motion: reduce) {
367
+ [data-component~="ui-sidebar"][popover] {
368
+ transition: none;
369
+ }
370
+ }
283
371
 
284
- /* A component that sets its display still honours the hidden attribute on its root. */
285
- [data-component~="ui-sidebar"][hidden] {
286
- display: none;
287
- }
372
+ /* A component that sets its display still honours the hidden attribute on its root. */
373
+ [data-component~="ui-sidebar"][hidden] {
374
+ display: none;
375
+ }
288
376
  </style>
package/vue/UiStack.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  type __VLS_Props = {
2
- align?: "start" | "center" | "end" | "stretch" | null;
3
- gap?: "xs" | "s" | "m" | "l" | "xl" | null;
4
- justify?: "start" | "center" | "end" | "between" | null;
2
+ align?: 'start' | 'center' | 'end' | 'stretch';
3
+ gap?: 'xs' | 's' | 'm' | 'l' | 'xl';
4
+ justify?: 'start' | 'center' | 'end' | 'between';
5
5
  };
6
6
  declare var __VLS_1: {};
7
7
  type __VLS_Slots = {} & {