@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/UiPopover.vue CHANGED
@@ -1,188 +1,248 @@
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-popover/ui-popover.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
- };
11
-
12
- const props = withDefaults(defineProps<{
13
- for?: string | null;
14
- open?: boolean | null;
15
- placement?: string | null;
16
- }>(), {
17
- for: "",
18
- open: false,
19
- placement: "bottom-start",
20
- });
3
+ import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watchEffect } from 'vue'
4
+ import * as controllerModule from '../components/ui-popover/ui-popover.js'
5
+
6
+ defineOptions({ inheritAttrs: false })
7
+
8
+ const props = withDefaults(
9
+ defineProps<{
10
+ for?: string
11
+ open?: boolean
12
+ placement?: string
13
+ }>(),
14
+ {
15
+ for: '',
16
+ open: false,
17
+ placement: 'bottom-start',
18
+ },
19
+ )
21
20
  const emit = defineEmits<{
22
- "open": [detail: { readonly open: boolean; readonly reason: "action" | "programmatic" | "light-dismiss" | "escape"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
23
- "close": [detail: { readonly open: boolean; readonly reason: "action" | "programmatic" | "light-dismiss" | "escape"; readonly trigger: "keyboard" | "pointer" | "programmatic" }];
24
- }>();
25
- const root = ref<HTMLElement | null>(null);
26
- const refs: Record<string, Element | undefined> = {};
27
- const state_internalOpen = ref<any>(false);
21
+ 'update:open': [value: boolean]
22
+ open: [
23
+ detail: {
24
+ readonly open: boolean
25
+ readonly reason: 'action' | 'programmatic' | 'light-dismiss' | 'escape'
26
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
27
+ },
28
+ ]
29
+ close: [
30
+ detail: {
31
+ readonly open: boolean
32
+ readonly reason: 'action' | 'programmatic' | 'light-dismiss' | 'escape'
33
+ readonly trigger: 'keyboard' | 'pointer' | 'programmatic'
34
+ },
35
+ ]
36
+ }>()
37
+
38
+ const root = ref<HTMLElement | null>(null)
39
+ const internalOpen = ref(false)
40
+
41
+ /** The values the styles' :host-state() rules test. */
42
+ const hostState = computed(() =>
43
+ [
44
+ internalOpen.value && 'internalOpen',
45
+ ].filter(Boolean).join(' ')
46
+ )
28
47
 
29
48
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
30
- const dispatch = (name: string, detail?: unknown): boolean => {
31
- const declared = {"open":{"bubbles":true,"composed":true,"cancelable":false},"close":{"bubbles":true,"composed":true,"cancelable":false}} as Record<string, EventInit | undefined>;
49
+ function dispatch(name: string, detail?: unknown): boolean {
50
+ const declared: Record<string, EventInit | undefined> = {
51
+ open: { bubbles: true, composed: true, cancelable: false },
52
+ close: { bubbles: true, composed: true, cancelable: false },
53
+ }
32
54
  const checks: Record<string, (detail: unknown) => boolean> = {
33
- "open": (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))),
34
- "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))),
35
- };
55
+ open: (detail) =>
56
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
57
+ && typeof (detail as Record<string, unknown>)['open'] === 'boolean'
58
+ && ((detail as Record<string, unknown>)['reason'] === 'action'
59
+ || (detail as Record<string, unknown>)['reason'] === 'programmatic'
60
+ || (detail as Record<string, unknown>)['reason'] === 'light-dismiss'
61
+ || (detail as Record<string, unknown>)['reason'] === 'escape')
62
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
63
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
64
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
65
+ && Object.keys(detail as object).every((key) => ['open', 'reason', 'trigger'].includes(key)),
66
+ close: (detail) =>
67
+ detail !== null && typeof detail === 'object' && !Array.isArray(detail)
68
+ && typeof (detail as Record<string, unknown>)['open'] === 'boolean'
69
+ && ((detail as Record<string, unknown>)['reason'] === 'action'
70
+ || (detail as Record<string, unknown>)['reason'] === 'programmatic'
71
+ || (detail as Record<string, unknown>)['reason'] === 'light-dismiss'
72
+ || (detail as Record<string, unknown>)['reason'] === 'escape')
73
+ && ((detail as Record<string, unknown>)['trigger'] === 'keyboard'
74
+ || (detail as Record<string, unknown>)['trigger'] === 'pointer'
75
+ || (detail as Record<string, unknown>)['trigger'] === 'programmatic')
76
+ && Object.keys(detail as object).every((key) => ['open', 'reason', 'trigger'].includes(key)),
77
+ }
36
78
  if (detail !== undefined && checks[name] !== undefined && !checks[name]!(detail)) {
37
- throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
79
+ throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`)
80
+ }
81
+ const emitEvent = emit as (name: string, detail: unknown) => void
82
+ emitEvent(name, detail)
83
+ if (detail !== null && typeof detail === 'object' && 'open' in detail) {
84
+ emitEvent('update:open', (detail as Record<string, unknown>)['open'])
38
85
  }
39
- (emit as (name: string, detail: unknown) => void)(name, detail);
40
- return root.value?.dispatchEvent(new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail })) ?? true;
41
- };
42
-
43
- /** The resolved values the styles' :host-state() rules test. */
44
- const hostState = computed(() => (["internalOpen"] as const).flatMap((name) => {
45
- const value = read(name);
46
- const tokens: string[] = hn.t(value) ? [name] : [];
47
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
48
- return tokens;
49
- }).join(" "));
86
+ return root.value?.dispatchEvent(
87
+ new CustomEvent(name, { bubbles: true, composed: true, ...declared[name], detail }),
88
+ ) ?? true
89
+ }
50
90
 
51
91
  function read(name: string): unknown {
52
- if (name === "internalOpen") return state_internalOpen.value;
53
- return (props as Record<string, unknown>)[name];
92
+ if (name === 'internalOpen') return internalOpen.value
93
+ return (props as Record<string, unknown>)[name]
54
94
  }
55
95
 
56
96
  function write(name: string, value: unknown): boolean {
57
- if (name === "internalOpen") { state_internalOpen.value = value; return true; }
58
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
97
+ if (name === 'internalOpen') {
98
+ internalOpen.value = value as never
99
+ return true
100
+ }
101
+ throw new TypeError(`Only declared state is writable; \`${name}\` is not.`)
59
102
  }
60
103
 
61
- const stops: Array<() => void> = [];
104
+ const stops: Array<() => void> = []
62
105
  const host = {
63
- get element(): Element { return root.value as Element; },
106
+ get element(): Element {
107
+ return root.value as Element
108
+ },
64
109
  state: new Proxy({} as Record<string, unknown>, {
65
- get: (_target, name) => typeof name === "string" ? read(name) : undefined,
66
- set: (_target, name, value) => typeof name === "string" && write(name, value),
110
+ get: (_target, name) => typeof name === 'string' ? read(name) : undefined,
111
+ set: (_target, name, value) => typeof name === 'string' && write(name, value),
67
112
  }),
68
- refs: refs as Readonly<Record<string, Element>>,
113
+ refs: {} as Readonly<Record<string, Element>>,
69
114
  elements: new Proxy({} as Record<string, Element | RadioNodeList | undefined>, {
70
115
  get: (_target, name) => {
71
- if (typeof name !== "string" || root.value === null) return undefined;
72
- const form = root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form");
73
- return form?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined;
116
+ if (typeof name !== 'string' || root.value === null) return undefined
117
+ const form = root.value instanceof HTMLFormElement
118
+ ? root.value
119
+ : root.value.querySelector('form')
120
+ return form?.elements.namedItem(name)
121
+ ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? undefined
74
122
  },
75
123
  }),
76
124
  signal<T>(initialValue: T) {
77
- const value = shallowRef(initialValue);
125
+ const value = shallowRef(initialValue)
78
126
  return {
79
127
  get: (): T => value.value,
80
- set: (next: T): void => { if (!Object.is(value.value, next)) value.value = next; },
81
- update: (next: (current: T) => T): void => { const updated = next(value.value); if (!Object.is(value.value, updated)) value.value = updated; },
82
- };
128
+ set: (next: T): void => {
129
+ if (!Object.is(value.value, next)) value.value = next
130
+ },
131
+ update: (next: (current: T) => T): void => {
132
+ const updated = next(value.value)
133
+ if (!Object.is(value.value, updated)) value.value = updated
134
+ },
135
+ }
83
136
  },
84
137
  computed<T>(compute: () => T) {
85
- const value = computed(compute);
86
- return { get: (): T => value.value };
138
+ const value = computed(compute)
139
+ return { get: (): T => value.value }
87
140
  },
88
141
  effect(run: () => void | (() => void)): () => void {
89
142
  const stop = watchEffect((onCleanup) => {
90
- const cleanup = run();
91
- if (typeof cleanup === "function") onCleanup(cleanup);
92
- }, { flush: "post" });
93
- stops.push(stop);
94
- return stop;
143
+ const cleanup = run()
144
+ if (typeof cleanup === 'function') onCleanup(cleanup)
145
+ }, { flush: 'post' })
146
+ stops.push(stop)
147
+ return stop
95
148
  },
96
149
  on(event: string, listener: EventListener): () => void {
97
- const element = root.value;
98
- element?.addEventListener(event, listener);
99
- const off = (): void => element?.removeEventListener(event, listener);
100
- stops.push(off);
101
- return off;
150
+ const element = root.value
151
+ element?.addEventListener(event, listener)
152
+ const off = (): void => element?.removeEventListener(event, listener)
153
+ stops.push(off)
154
+ return off
102
155
  },
103
156
  dispatch,
104
- };
157
+ }
105
158
 
106
- let cleanup: void | (() => void);
107
- let ready: Promise<void> | undefined;
159
+ let cleanup: void | (() => void)
160
+ let ready: Promise<void> | undefined
108
161
  onMounted(() => {
109
- ready = Promise.resolve(controllerModule.default(host as never)).then((result) => { cleanup = result; });
110
- });
162
+ ready = Promise.resolve(controllerModule.default(host as never)).then((result) => {
163
+ cleanup = result
164
+ })
165
+ })
111
166
  onBeforeUnmount(() => {
112
- for (const stop of stops.splice(0)) stop();
113
- if (typeof cleanup === "function") cleanup();
114
- });
167
+ for (const stop of stops.splice(0)) stop()
168
+ if (typeof cleanup === 'function') cleanup()
169
+ })
115
170
  </script>
116
171
 
117
172
  <template>
118
- <span data-component="ui-popover" v-bind="$attrs" :data-ui-popover-state="hostState || undefined" ref="root"><div class="surface"><slot></slot></div></span>
173
+ <span
174
+ data-component="ui-popover"
175
+ v-bind="$attrs"
176
+ :data-ui-popover-state="hostState || undefined"
177
+ ref="root"
178
+ ><div class="surface"><slot /></div></span>
119
179
  </template>
120
180
 
121
181
  <style scoped>
122
182
  [data-component~="ui-popover"] {
123
- box-sizing: border-box;
124
- max-inline-size: min(
125
- 20rem,
126
- calc(100vw - var(--ui-popover-viewport-gap, var(--ui-space-2, 0.5rem)) * 2)
127
- );
128
- max-block-size: calc(100dvh - var(--ui-popover-viewport-gap, var(--ui-space-2, 0.5rem)) * 2);
129
- overflow: visible;
130
- padding: 0;
131
- border: 0;
132
- outline: 0;
133
- border-radius: 0;
134
- background: transparent;
135
- box-shadow: none;
136
- }
183
+ box-sizing: border-box;
184
+ max-inline-size: min(
185
+ 20rem,
186
+ calc(100vw - var(--ui-popover-viewport-gap, var(--ui-space-2, 0.5rem)) * 2)
187
+ );
188
+ max-block-size: calc(100dvh - var(--ui-popover-viewport-gap, var(--ui-space-2, 0.5rem)) * 2);
189
+ overflow: visible;
190
+ padding: 0;
191
+ border: 0;
192
+ outline: 0;
193
+ border-radius: 0;
194
+ background: transparent;
195
+ box-shadow: none;
196
+ }
137
197
 
138
- .surface {
139
- box-sizing: border-box;
140
- max-inline-size: inherit;
141
- max-block-size: inherit;
142
- overflow: auto;
143
- padding: var(--ui-space-3);
144
- background: var(--ui-surface-elevated);
145
- border: 1px solid var(--ui-border-default);
146
- border-radius: var(--ui-radius-3);
147
- box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
148
- }
198
+ .surface {
199
+ box-sizing: border-box;
200
+ max-inline-size: inherit;
201
+ max-block-size: inherit;
202
+ overflow: auto;
203
+ padding: var(--ui-space-3);
204
+ background: var(--ui-surface-elevated);
205
+ border: 1px solid var(--ui-border-default);
206
+ border-radius: var(--ui-radius-3);
207
+ box-shadow: var(--ui-elevation-overlay, var(--ui-shadow-lg));
208
+ }
149
209
 
150
- [data-component~="ui-popover"]:not([data-component~="ui-popover"][data-ui-popover-state~="internalOpen"]) {
151
- display: none;
152
- }
210
+ [data-component~="ui-popover"]:not([data-component~="ui-popover"][data-ui-popover-state~="internalOpen"]) {
211
+ display: none;
212
+ }
153
213
 
154
- [data-component~="ui-popover"][popover] {
155
- position: fixed;
156
- inset: auto;
157
- margin: 0;
158
- opacity: 0;
159
- transform: translateY(-4px) scale(0.99);
160
- transition:
161
- opacity var(--ui-motion-fast) var(--ui-motion-ease),
162
- transform var(--ui-motion-fast) var(--ui-motion-ease),
163
- display var(--ui-motion-fast) allow-discrete,
164
- overlay var(--ui-motion-fast) allow-discrete;
165
- }
214
+ [data-component~="ui-popover"][popover] {
215
+ position: fixed;
216
+ inset: auto;
217
+ margin: 0;
218
+ opacity: 0;
219
+ transform: translateY(-4px) scale(0.99);
220
+ transition:
221
+ opacity var(--ui-motion-fast) var(--ui-motion-ease),
222
+ transform var(--ui-motion-fast) var(--ui-motion-ease),
223
+ display var(--ui-motion-fast) allow-discrete,
224
+ overlay var(--ui-motion-fast) allow-discrete;
225
+ }
166
226
 
167
- [data-component~="ui-popover"][popover]:popover-open {
168
- opacity: 1;
169
- transform: translateY(0) scale(1);
170
- }
227
+ [data-component~="ui-popover"][popover]:popover-open {
228
+ opacity: 1;
229
+ transform: translateY(0) scale(1);
230
+ }
171
231
 
172
- @starting-style {
173
- [data-component~="ui-popover"][popover]:popover-open {
174
- opacity: 0;
175
- transform: translateY(-4px) scale(0.99);
176
- }
177
- }
232
+ @starting-style {
233
+ [data-component~="ui-popover"][popover]:popover-open {
234
+ opacity: 0;
235
+ transform: translateY(-4px) scale(0.99);
236
+ }
237
+ }
178
238
 
179
- [data-component~="ui-popover"][hidden] {
180
- display: none;
181
- }
239
+ [data-component~="ui-popover"][hidden] {
240
+ display: none;
241
+ }
182
242
 
183
- @media (prefers-reduced-motion: reduce) {
184
- [data-component~="ui-popover"][popover] {
185
- transition: none;
186
- }
187
- }
243
+ @media (prefers-reduced-motion: reduce) {
244
+ [data-component~="ui-popover"][popover] {
245
+ transition: none;
246
+ }
247
+ }
188
248
  </style>
package/vue/UiRadio.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  type __VLS_Props = {
2
- checked?: boolean | null;
3
- disabled?: boolean | null;
4
- name?: string | null;
5
- required?: boolean | null;
6
- value?: string | null;
2
+ checked?: boolean;
3
+ disabled?: boolean;
4
+ name?: string;
5
+ required?: boolean;
6
+ value?: string;
7
7
  };
8
8
  declare var __VLS_1: {};
9
9
  type __VLS_Slots = {} & {
@@ -15,18 +15,22 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
15
15
  readonly value: string;
16
16
  readonly trigger: "keyboard" | "pointer" | "programmatic";
17
17
  }) => any;
18
+ "update:checked": (value: boolean) => any;
19
+ "update:value": (value: string) => any;
18
20
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
19
21
  onChange?: ((detail: {
20
22
  readonly checked: boolean;
21
23
  readonly value: string;
22
24
  readonly trigger: "keyboard" | "pointer" | "programmatic";
23
25
  }) => any) | undefined;
26
+ "onUpdate:checked"?: ((value: boolean) => any) | undefined;
27
+ "onUpdate:value"?: ((value: string) => any) | undefined;
24
28
  }>, {
25
- name: string | null;
26
- disabled: boolean | null;
27
- checked: boolean | null;
28
- required: boolean | null;
29
- value: string | null;
29
+ name: string;
30
+ value: string;
31
+ disabled: boolean;
32
+ checked: boolean;
33
+ required: boolean;
30
34
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
31
35
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
32
36
  declare const _default: typeof __VLS_export;