@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/UiStack.vue CHANGED
@@ -1,85 +1,79 @@
1
- <!-- Generated by HTML Next 1.0.0-alpha.1 for Vue 3.5. Do not edit. -->
1
+ <!-- Generated by HTML Next 1.0.0-alpha.2 for Vue 3.5. Do not edit. -->
2
2
  <script setup lang="ts">
3
- import { computed } from "vue";
3
+ import { computed } from 'vue'
4
4
 
5
- defineOptions({ inheritAttrs: false });
6
-
7
- const hn = {
8
- t: (v: unknown): boolean => v === true || (typeof v === "string" ? v.length > 0 : typeof v === "number" ? v !== 0 && v === v : Array.isArray(v) ? v.length > 0 : v !== null && typeof v === "object" ? Object.keys(v).length > 0 : false),
9
- };
5
+ defineOptions({ inheritAttrs: false })
10
6
 
11
7
  const props = defineProps<{
12
- align?: "start" | "center" | "end" | "stretch" | null;
13
- gap?: "xs" | "s" | "m" | "l" | "xl" | null;
14
- justify?: "start" | "center" | "end" | "between" | null;
15
- }>();
16
-
17
- /** The resolved values the styles' :host-state() rules test. */
18
- const hostState = computed(() => (["gap","align","justify"] as const).flatMap((name) => {
19
- const value = read(name);
20
- const tokens: string[] = hn.t(value) ? [name] : [];
21
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
22
- return tokens;
23
- }).join(" "));
24
-
25
- function read(name: string): unknown {
26
- return (props as Record<string, unknown>)[name];
27
- }
8
+ align?: 'start' | 'center' | 'end' | 'stretch'
9
+ gap?: 'xs' | 's' | 'm' | 'l' | 'xl'
10
+ justify?: 'start' | 'center' | 'end' | 'between'
11
+ }>()
28
12
 
13
+ /** The values the styles' :host-state() rules test. */
14
+ const hostState = computed(() =>
15
+ [
16
+ props.gap && `gap gap=${props.gap}`,
17
+ props.align && `align align=${props.align}`,
18
+ props.justify && `justify justify=${props.justify}`,
19
+ ].filter(Boolean).join(' ')
20
+ )
29
21
  </script>
30
22
 
31
23
  <template>
32
- <div data-component="ui-stack" v-bind="$attrs" :data-ui-stack-state="hostState || undefined"><slot></slot></div>
24
+ <div data-component="ui-stack" v-bind="$attrs" :data-ui-stack-state="hostState || undefined">
25
+ <slot />
26
+ </div>
33
27
  </template>
34
28
 
35
29
  <style scoped>
36
30
  [data-component~="ui-stack"] {
37
- --_layout-gap: var(--ui-space-4, 1rem);
38
- display: flex;
39
- flex-direction: column;
40
- align-items: stretch;
41
- gap: var(--ui-layout-gap, var(--_layout-gap));
42
- min-inline-size: 0;
43
- max-inline-size: 100%;
44
- margin: 0;
45
- }
31
+ --_layout-gap: var(--ui-space-4, 1rem);
32
+ display: flex;
33
+ flex-direction: column;
34
+ align-items: stretch;
35
+ gap: var(--ui-layout-gap, var(--_layout-gap));
36
+ min-inline-size: 0;
37
+ max-inline-size: 100%;
38
+ margin: 0;
39
+ }
46
40
 
47
- [data-component~="ui-stack"][data-ui-stack-state~="gap=xs"] {
48
- --_layout-gap: var(--ui-space-2, 0.5rem);
49
- }
50
- [data-component~="ui-stack"][data-ui-stack-state~="gap=s"] {
51
- --_layout-gap: var(--ui-space-3, 0.75rem);
52
- }
53
- [data-component~="ui-stack"][data-ui-stack-state~="gap=m"] {
54
- --_layout-gap: var(--ui-space-4, 1rem);
55
- }
56
- [data-component~="ui-stack"][data-ui-stack-state~="gap=l"] {
57
- --_layout-gap: var(--ui-space-5, 1.5rem);
58
- }
59
- [data-component~="ui-stack"][data-ui-stack-state~="gap=xl"] {
60
- --_layout-gap: var(--ui-space-6, 2rem);
61
- }
62
- [data-component~="ui-stack"][data-ui-stack-state~="align=start"] {
63
- align-items: flex-start;
64
- }
65
- [data-component~="ui-stack"][data-ui-stack-state~="align=center"] {
66
- align-items: center;
67
- }
68
- [data-component~="ui-stack"][data-ui-stack-state~="align=end"] {
69
- align-items: flex-end;
70
- }
71
- [data-component~="ui-stack"][data-ui-stack-state~="justify=center"] {
72
- justify-content: center;
73
- }
74
- [data-component~="ui-stack"][data-ui-stack-state~="justify=end"] {
75
- justify-content: flex-end;
76
- }
77
- [data-component~="ui-stack"][data-ui-stack-state~="justify=between"] {
78
- justify-content: space-between;
79
- }
41
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=xs"] {
42
+ --_layout-gap: var(--ui-space-2, 0.5rem);
43
+ }
44
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=s"] {
45
+ --_layout-gap: var(--ui-space-3, 0.75rem);
46
+ }
47
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=m"] {
48
+ --_layout-gap: var(--ui-space-4, 1rem);
49
+ }
50
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=l"] {
51
+ --_layout-gap: var(--ui-space-5, 1.5rem);
52
+ }
53
+ [data-component~="ui-stack"][data-ui-stack-state~="gap=xl"] {
54
+ --_layout-gap: var(--ui-space-6, 2rem);
55
+ }
56
+ [data-component~="ui-stack"][data-ui-stack-state~="align=start"] {
57
+ align-items: flex-start;
58
+ }
59
+ [data-component~="ui-stack"][data-ui-stack-state~="align=center"] {
60
+ align-items: center;
61
+ }
62
+ [data-component~="ui-stack"][data-ui-stack-state~="align=end"] {
63
+ align-items: flex-end;
64
+ }
65
+ [data-component~="ui-stack"][data-ui-stack-state~="justify=center"] {
66
+ justify-content: center;
67
+ }
68
+ [data-component~="ui-stack"][data-ui-stack-state~="justify=end"] {
69
+ justify-content: flex-end;
70
+ }
71
+ [data-component~="ui-stack"][data-ui-stack-state~="justify=between"] {
72
+ justify-content: space-between;
73
+ }
80
74
 
81
- /* A component that sets its display still honours the hidden attribute on its root. */
82
- [data-component~="ui-stack"][hidden] {
83
- display: none;
84
- }
75
+ /* A component that sets its display still honours the hidden attribute on its root. */
76
+ [data-component~="ui-stack"][hidden] {
77
+ display: none;
78
+ }
85
79
  </style>
package/vue/UiSwitch.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  type __VLS_Props = {
2
- checked?: boolean | null;
3
- disabled?: boolean | null;
4
- required?: boolean | null;
5
- value?: string | null;
2
+ checked?: boolean;
3
+ disabled?: boolean;
4
+ required?: boolean;
5
+ value?: string;
6
6
  };
7
7
  declare var __VLS_1: {};
8
8
  type __VLS_Slots = {} & {
@@ -14,17 +14,21 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
14
14
  readonly value: string;
15
15
  readonly trigger: "keyboard" | "pointer" | "programmatic";
16
16
  }) => any;
17
+ "update:checked": (value: boolean) => any;
18
+ "update:value": (value: string) => any;
17
19
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
18
20
  onChange?: ((detail: {
19
21
  readonly checked: boolean;
20
22
  readonly value: string;
21
23
  readonly trigger: "keyboard" | "pointer" | "programmatic";
22
24
  }) => any) | undefined;
25
+ "onUpdate:checked"?: ((value: boolean) => any) | undefined;
26
+ "onUpdate:value"?: ((value: string) => any) | undefined;
23
27
  }>, {
24
- disabled: boolean | null;
25
- checked: boolean | null;
26
- required: boolean | null;
27
- value: string | null;
28
+ value: string;
29
+ disabled: boolean;
30
+ checked: boolean;
31
+ required: boolean;
28
32
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
29
33
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
30
34
  declare const _default: typeof __VLS_export;
package/vue/UiSwitch.vue CHANGED
@@ -1,203 +1,271 @@
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-switch/ui-switch.js";
5
-
6
- defineOptions({ inheritAttrs: false });
7
-
8
- const hn = {
9
- t: (v: unknown): boolean => v === true || (typeof v === "string" ? v.length > 0 : typeof v === "number" ? v !== 0 && v === v : Array.isArray(v) ? v.length > 0 : v !== null && typeof v === "object" ? Object.keys(v).length > 0 : false),
10
- text: (v: unknown): string => v === undefined || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
11
- attr: (v: unknown): any => v === undefined || v === null || v === false ? undefined : v === true ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? undefined : String(v),
12
- };
13
-
14
- const props = withDefaults(defineProps<{
15
- checked?: boolean | null;
16
- disabled?: boolean | null;
17
- required?: boolean | null;
18
- value?: string | null;
19
- }>(), {
20
- checked: false,
21
- disabled: false,
22
- required: false,
23
- value: "on",
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-switch/ui-switch.js'
13
+
14
+ defineOptions({ inheritAttrs: false })
15
+
16
+ const props = withDefaults(
17
+ defineProps<{
18
+ checked?: boolean
19
+ disabled?: boolean
20
+ required?: boolean
21
+ value?: string
22
+ }>(),
23
+ {
24
+ checked: false,
25
+ disabled: false,
26
+ required: false,
27
+ value: 'on',
28
+ },
29
+ )
25
30
  const emit = defineEmits<{
26
- "change": [detail: { readonly checked: boolean; readonly value: string; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
27
- }>();
28
- const root = ref<HTMLElement | null>(null);
29
- const refs: Record<string, Element | undefined> = {};
30
- const state_internalChecked = ref<any>(false);
31
+ 'update:checked': [value: boolean]
32
+ 'update:value': [value: string]
33
+ change: [
34
+ detail: {
35
+ readonly checked: boolean
36
+ readonly value: string
37
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
38
+ },
39
+ ]
40
+ }>()
41
+
42
+ const root = ref<HTMLElement | null>(null)
43
+ const inputElement = useTemplateRef<HTMLElement>('input')
44
+ const internalChecked = ref(false)
45
+
46
+ /** The values the styles' :host-state() rules test. */
47
+ const hostState = computed(() =>
48
+ [
49
+ props.disabled && 'disabled',
50
+ ].filter(Boolean).join(' ')
51
+ )
31
52
 
32
53
  /** 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 = {"change":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
54
+ function dispatch(name: string, detail?: unknown): boolean {
55
+ const declared: Record<string, EventInit | undefined> = {
56
+ change: { bubbles: true, composed: true, cancelable: false },
57
+ }
35
58
  const checks: Record<string, (detail: unknown) => boolean> = {
36
- "change": (detail: unknown) => (detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof (detail as Record<string, unknown>)["checked"] === "boolean" && typeof (detail as Record<string, unknown>)["value"] === "string" && ((detail as Record<string, unknown>)["trigger"] === "keyboard" || (detail as Record<string, unknown>)["trigger"] === "pointer" || (detail as Record<string, unknown>)["trigger"] === "programmatic") && Object.keys(detail as object).every((key) => ["checked","value","trigger"].includes(key))),
37
- };
59
+ change: (detail) =>
60
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
61
+ && typeof (detail as Record<string, unknown>)['checked'] === 'boolean'
62
+ && typeof (detail as Record<string, unknown>)['value'] === 'string'
63
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
64
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
65
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
66
+ && Object.keys(detail as object).every((key) =>
67
+ ['checked', 'value', 'trigger'].includes(key)
68
+ ),
69
+ }
38
70
  if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
39
- throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
71
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`)
72
+ }
73
+ const emitEvent = emit as (name: string, detail: unknown) => void
74
+ emitEvent(name, detail)
75
+ if (detail !== null && typeof detail === 'object' && 'checked' in detail) {
76
+ emitEvent('update:checked', (detail as Record<string, unknown>)['checked'])
77
+ }
78
+ if (detail !== null && typeof detail === 'object' && 'value' in detail) {
79
+ emitEvent('update:value', (detail as Record<string, unknown>)['value'])
40
80
  }
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
- };
44
-
45
- /** The resolved values the styles' :host-state() rules test. */
46
- const hostState = computed(() => (["disabled"] as const).flatMap((name) => {
47
- const value = read(name);
48
- const tokens: string[] = hn.t(value) ? [name] : [];
49
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
50
- return tokens;
51
- }).join(" "));
81
+ return root.value?.dispatchEvent(
82
+ new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail }),
83
+ ) ?? true
84
+ }
52
85
 
53
86
  function read(name: string): unknown {
54
- if (name === "internalChecked") return state_internalChecked.value;
55
- return (props as Record<string, unknown>)[name];
87
+ if (name === 'internalChecked') return internalChecked.value
88
+ return (props as Record<string, unknown>)[name]
56
89
  }
57
90
 
58
91
  function write(name: string, value: unknown): boolean {
59
- if (name === "internalChecked") { state_internalChecked.value = value; return true; }
60
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
92
+ if (name === 'internalChecked') {
93
+ internalChecked.value = value as never
94
+ return true
95
+ }
96
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
61
97
  }
62
98
 
63
- const stops: Array<() => void> = [];
99
+ const stops: Array<() => void> = []
64
100
  const host = {
65
- get element(): Element { return root.value as Element; },
101
+ get element(): Element {
102
+ return root.value as Element
103
+ },
66
104
  state: new Proxy({} as Record<string, unknown>, {
67
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
68
- set: (_target, name, value) => typeof name === "string" && write(name, value),
105
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
106
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
69
107
  }),
70
- refs: refs as Readonly<Record<string, Element>>,
108
+ refs: {
109
+ get input(): Element {
110
+ return inputElement.value as Element
111
+ },
112
+ } as Readonly<Record<string, Element>>,
71
113
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
72
114
  get: (_target, name) => {
73
- if (typeof name !== "string" || root.value === null) return undefined;
74
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
75
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
115
+ if (typeof name !== 'string' || root.value === null) return undefined
116
+ const form = root.value instanceof HTMLFormElement
117
+ ? root.value
118
+ : root.value.querySelector('form')
119
+ return form?.elements.namedItem(name)
120
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
76
121
  },
77
122
  }),
78
123
  signal<T>(initialValue: T) {
79
- const value = shallowRef(initialValue);
124
+ const value = shallowRef(initialValue)
80
125
  return {
81
126
  get: (): T => value.value,
82
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
83
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
84
- };
127
+ set: (next: T): void => {
128
+ if (!Object.is(value.value, next)) value.value = next
129
+ },
130
+ update: (next: (current: T) => T): void => {
131
+ const updated = next(value.value)
132
+ if (!Object.is(value.value, updated)) value.value = updated
133
+ },
134
+ }
85
135
  },
86
136
  computed<T>(compute: () => T) {
87
- const value = computed(compute);
88
- return { get: (): T => value.value };
137
+ const value = computed(compute)
138
+ return { get: (): T => value.value }
89
139
  },
90
140
  effect(run: () => void | (() => void)): () => void {
91
141
  const stop = watchEffect((onCleanup) => {
92
- const cleanup = run();
93
- if (typeof cleanup === "function") onCleanup(cleanup);
94
- }, { flush: "post" });
95
- stops.push(stop);
96
- return stop;
142
+ const cleanup = run()
143
+ if (typeof cleanup === 'function') onCleanup(cleanup)
144
+ }, { flush: 'post' })
145
+ stops.push(stop)
146
+ return stop
97
147
  },
98
148
  on(event: string, listener: EventListener): () => void {
99
- const element = root.value;
100
- element?.addEventListener(event, listener);
101
- const off = (): void => element?.removeEventListener(event, listener);
102
- stops.push(off);
103
- return off;
149
+ const element = root.value
150
+ element?.addEventListener(event, listener)
151
+ const off = (): void => element?.removeEventListener(event, listener)
152
+ stops.push(off)
153
+ return off
104
154
  },
105
155
  dispatch,
106
- };
156
+ }
107
157
 
108
- let cleanup: void | (() => void);
109
- let ready: Promise<void> | undefined;
158
+ let cleanup: void | (() => void)
159
+ let ready: Promise<void> | undefined
110
160
  onMounted(() => {
111
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
112
- });
161
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
162
+ cleanup = result
163
+ })
164
+ })
113
165
  onBeforeUnmount(() => {
114
- for (const stop of stops.splice(0)) stop();
115
- if (typeof cleanup === "function") cleanup();
116
- });
166
+ for (const stop of stops.splice(0)) stop()
167
+ if (typeof cleanup === 'function') cleanup()
168
+ })
117
169
  </script>
118
170
 
119
171
  <template>
120
- <label data-component="ui-switch" v-bind="$attrs" :data-ui-switch-state="hostState || undefined" ref="root"><input type="checkbox" role="switch" :checked.prop="(state_internalChecked) as any" :disabled="hn.attr(props.disabled)" :required="hn.attr(props.required)" :value="hn.attr(props.value)" :ref="(element) => { refs['input'] = element as Element }"><span class="label"><slot></slot></span></label>
172
+ <label
173
+ data-component="ui-switch"
174
+ v-bind="$attrs"
175
+ :data-ui-switch-state="hostState || undefined"
176
+ ref="root"
177
+ ><input
178
+ type="checkbox"
179
+ role="switch"
180
+ :checked.prop="internalChecked"
181
+ :disabled="disabled"
182
+ :required="required"
183
+ :value="value"
184
+ ref="input"
185
+ >
186
+ <span class="label"><slot /></span></label>
121
187
  </template>
122
188
 
123
189
  <style scoped>
124
190
  [data-component~="ui-switch"] {
125
- display: inline-flex;
126
- align-items: flex-start;
127
- gap: var(--ui-switch-gap, var(--ui-space-2));
128
- max-inline-size: 100%;
129
- color: var(--ui-text-primary);
130
- cursor: pointer;
131
- }
191
+ display: inline-flex;
192
+ align-items: flex-start;
193
+ gap: var(--ui-switch-gap, var(--ui-space-2));
194
+ max-inline-size: 100%;
195
+ color: var(--ui-text-primary);
196
+ cursor: pointer;
197
+ }
132
198
 
133
- .label {
134
- min-inline-size: 0;
135
- line-height: var(--ui-line-height-md);
136
- }
199
+ .label {
200
+ min-inline-size: 0;
201
+ line-height: var(--ui-line-height-md);
202
+ }
137
203
 
138
- input {
139
- appearance: none;
140
- -webkit-appearance: none;
141
- position: relative;
142
- flex: 0 0 auto;
143
- width: var(--ui-switch-track-width, 2.5rem);
144
- height: var(--ui-switch-track-height, 1.5rem);
145
- padding: 0;
146
- border: 1px solid var(--ui-control-border-hover, var(--ui-border-strong));
147
- border-radius: 999px;
148
- background: var(--ui-control-surface, var(--ui-surface-default));
149
- box-shadow: inset 0 1px 2px color-mix(in srgb, var(--ui-text-primary) 10%, transparent);
150
- cursor: pointer;
151
- transition: background-color var(--ui-motion-fast) var(--ui-motion-ease), border-color var(--ui-motion-fast) var(--ui-motion-ease);
152
- margin: 0;
153
- }
204
+ input {
205
+ appearance: none;
206
+ -webkit-appearance: none;
207
+ position: relative;
208
+ flex: 0 0 auto;
209
+ width: var(--ui-switch-track-width, 2.5rem);
210
+ height: var(--ui-switch-track-height, 1.5rem);
211
+ padding: 0;
212
+ border: 1px solid var(--ui-control-border-hover, var(--ui-border-strong));
213
+ border-radius: 999px;
214
+ background: var(--ui-control-surface, var(--ui-surface-default));
215
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--ui-text-primary) 10%, transparent);
216
+ cursor: pointer;
217
+ transition:
218
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
219
+ border-color var(--ui-motion-fast) var(--ui-motion-ease);
220
+ margin: 0;
221
+ }
154
222
 
155
- input::after {
156
- content: "";
157
- position: absolute;
158
- top: 3px;
159
- left: 3px;
160
- width: 1rem;
161
- height: 1rem;
162
- border-radius: 999px;
163
- background: var(--ui-text-secondary);
164
- box-shadow: var(--ui-shadow-xs);
165
- transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
166
- }
223
+ input::after {
224
+ content: "";
225
+ position: absolute;
226
+ top: 3px;
227
+ left: 3px;
228
+ width: 1rem;
229
+ height: 1rem;
230
+ border-radius: 999px;
231
+ background: var(--ui-text-secondary);
232
+ box-shadow: var(--ui-shadow-xs);
233
+ transition: transform var(--ui-motion-fast) var(--ui-motion-ease);
234
+ }
167
235
 
168
- input:checked {
169
- background: var(--ui-accent-solid);
170
- border-color: var(--ui-accent-solid);
171
- }
236
+ input:checked {
237
+ background: var(--ui-accent-solid);
238
+ border-color: var(--ui-accent-solid);
239
+ }
172
240
 
173
- input:checked::after {
174
- transform: translateX(1rem);
175
- background: var(--ui-text-on-accent);
176
- }
241
+ input:checked::after {
242
+ transform: translateX(1rem);
243
+ background: var(--ui-text-on-accent);
244
+ }
177
245
 
178
- input:focus-visible {
179
- outline: 2px solid var(--ui-focus-ring, var(--ui-accent-solid));
180
- outline-offset: 2px;
181
- }
246
+ input:focus-visible {
247
+ outline: 2px solid var(--ui-focus-ring, var(--ui-accent-solid));
248
+ outline-offset: 2px;
249
+ }
182
250
 
183
- [data-component~="ui-switch"][data-ui-switch-state~="disabled"] {
184
- color: var(--ui-text-muted);
185
- cursor: not-allowed;
186
- }
187
- [data-component~="ui-switch"][data-ui-switch-state~="disabled"] input {
188
- border-color: var(--ui-border-default);
189
- background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
190
- cursor: not-allowed;
191
- }
251
+ [data-component~="ui-switch"][data-ui-switch-state~="disabled"] {
252
+ color: var(--ui-text-muted);
253
+ cursor: not-allowed;
254
+ }
255
+ [data-component~="ui-switch"][data-ui-switch-state~="disabled"] input {
256
+ border-color: var(--ui-border-default);
257
+ background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
258
+ cursor: not-allowed;
259
+ }
192
260
 
193
- @media (prefers-reduced-motion: reduce) {
194
- input, input::after {
195
- transition: none;
196
- }
197
- }
261
+ @media (prefers-reduced-motion: reduce) {
262
+ input, input::after {
263
+ transition: none;
264
+ }
265
+ }
198
266
 
199
- /* A component that sets its display still honours the hidden attribute on its root. */
200
- [data-component~="ui-switch"][hidden] {
201
- display: none;
202
- }
267
+ /* A component that sets its display still honours the hidden attribute on its root. */
268
+ [data-component~="ui-switch"][hidden] {
269
+ display: none;
270
+ }
203
271
  </style>
@@ -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
- threshold?: "xs" | "sm" | "md" | "lg" | null;
2
+ align?: 'start' | 'center' | 'end' | 'stretch';
3
+ gap?: 'xs' | 's' | 'm' | 'l' | 'xl';
4
+ threshold?: 'xs' | 'sm' | 'md' | 'lg';
5
5
  };
6
6
  declare var __VLS_1: {};
7
7
  type __VLS_Slots = {} & {