@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
@@ -13,26 +13,17 @@ var UiSwitcher_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
13
13
  threshold: {}
14
14
  },
15
15
  setup(__props) {
16
- const hn = { t: (v) => 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) };
17
16
  const props = __props;
18
- /** The resolved values the styles' :host-state() rules test. */
17
+ /** The values the styles' :host-state() rules test. */
19
18
  const hostState = computed(() => [
20
- "gap",
21
- "threshold",
22
- "align"
23
- ].flatMap((name) => {
24
- const value = read(name);
25
- const tokens = hn.t(value) ? [name] : [];
26
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
27
- return tokens;
28
- }).join(" "));
29
- function read(name) {
30
- return props[name];
31
- }
19
+ props.gap && `gap gap=${props.gap}`,
20
+ props.threshold && `threshold threshold=${props.threshold}`,
21
+ props.align && `align align=${props.align}`
22
+ ].filter(Boolean).join(" "));
32
23
  return (_ctx, _cache) => {
33
24
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-switcher" }, _ctx.$attrs, { "data-ui-switcher-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1);
34
25
  };
35
26
  }
36
- }), [["__scopeId", "data-v-e2eb3fd3"]]);
27
+ }), [["__scopeId", "data-v-4c7859e6"]]);
37
28
  //#endregion
38
29
  export { UiSwitcher_default as t };
@@ -1,5 +1,5 @@
1
1
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
- import { Fragment, computed, createElementBlock, createElementVNode, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, shallowRef, toDisplayString, watchEffect } from "vue";
2
+ import { Fragment, computed, createElementBlock, createElementVNode, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, shallowRef, toDisplayString, useTemplateRef, watchEffect } from "vue";
3
3
  import * as controllerModule from "@threadlabs/looma/components/ui-tabs/ui-tabs.js";
4
4
  //#region .build/vue/UiTabs.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = ["data-ui-tabs-state"];
@@ -10,6 +10,10 @@ var _hoisted_3 = [
10
10
  "aria-controls",
11
11
  "aria-selected"
12
12
  ];
13
+ var _hoisted_4 = {
14
+ class: "panels",
15
+ ref: "panels"
16
+ };
13
17
  //#endregion
14
18
  //#region .build/vue/UiTabs.vue
15
19
  var UiTabs_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -19,99 +23,57 @@ var UiTabs_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
19
23
  label: { default: "Tabs" },
20
24
  orientation: { default: "horizontal" },
21
25
  stretch: {
22
- type: [Boolean, null],
26
+ type: Boolean,
23
27
  default: false
24
28
  },
25
29
  value: { default: "" }
26
30
  },
27
- emits: ["select"],
31
+ emits: ["update:value", "select"],
28
32
  setup(__props, { emit: __emit }) {
29
- const hn = {
30
- t: (v) => 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),
31
- n: (v) => typeof v === "number" && v === v ? v : void 0,
32
- text: (v) => v === void 0 || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
33
- attr: (v) => v === void 0 || v === null || v === false ? void 0 : v === true ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? void 0 : String(v),
34
- enumerated: (v) => typeof v === "boolean" ? String(v) : hn.attr(v),
35
- call: (fn, ...args) => {
36
- if (fn === "format") {
37
- let index = 1;
38
- return typeof args[0] === "string" ? args[0].replace(/%s/g, () => index < args.length ? hn.text(args[index++]) : "%s") : void 0;
39
- }
40
- const n = args.map(hn.n);
41
- if (n.some((value) => value === void 0)) return void 0;
42
- const v = n;
43
- switch (fn) {
44
- case "abs": return v.length === 1 ? Math.abs(v[0]) : void 0;
45
- case "round": return v.length === 1 ? Math.round(v[0]) : void 0;
46
- case "min": return v.length > 0 ? Math.min(...v) : void 0;
47
- case "max": return v.length > 0 ? Math.max(...v) : void 0;
48
- case "clamp": return v.length === 3 ? Math.min(Math.max(v[0], v[1]), v[2]) : void 0;
49
- }
50
- },
51
- shape: (items, where, sort, limit) => {
52
- let list = Array.isArray(items) ? items.slice() : [];
53
- if (where !== void 0) list = list.filter((item) => hn.t(where(item)));
54
- if (sort.length > 0) {
55
- const field = (item, path) => item !== null && typeof item === "object" && !Array.isArray(item) ? path.split(".").reduce((value, key) => value?.[key], item) : item;
56
- const compare = (a, b) => typeof a === "number" && typeof b === "number" ? a - b : hn.text(a).localeCompare(hn.text(b));
57
- list.sort((a, b) => {
58
- for (const key of sort) {
59
- const descending = key.startsWith("-");
60
- const order = compare(field(a, descending ? key.slice(1) : key), field(b, descending ? key.slice(1) : key));
61
- if (order !== 0) return descending ? -order : order;
62
- }
63
- return 0;
64
- });
65
- }
66
- return typeof limit === "number" ? list.slice(0, Math.max(0, Math.trunc(limit))) : list;
67
- }
68
- };
69
33
  const props = __props;
70
34
  const emit = __emit;
71
35
  const root = ref(null);
72
- const refs = {};
73
- const state_internalValue = ref("");
74
- const state_tabs = ref([]);
36
+ const listElement = useTemplateRef("list");
37
+ const panelsElement = useTemplateRef("panels");
38
+ const internalValue = ref("");
39
+ const tabs = ref([]);
40
+ /** The values the styles' :host-state() rules test. */
41
+ const hostState = computed(() => [props.stretch && "stretch", props.orientation && `orientation orientation=${props.orientation}`].filter(Boolean).join(" "));
75
42
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
76
- const dispatch = (name, detail) => {
77
- const declared = { "select": {
78
- "bubbles": true,
79
- "composed": true,
80
- "cancelable": false
43
+ function dispatch(name, detail) {
44
+ const declared = { select: {
45
+ bubbles: true,
46
+ composed: true,
47
+ cancelable: false
81
48
  } };
82
- const checks = { "select": (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["value"] === "string" && typeof detail["previousValue"] === "string" && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
49
+ const checks = { select: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["value"] === "string" && typeof detail["previousValue"] === "string" && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
83
50
  "value",
84
51
  "previousValue",
85
52
  "trigger"
86
53
  ].includes(key)) };
87
54
  if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
88
- emit(name, detail);
55
+ const emitEvent = emit;
56
+ emitEvent(name, detail);
57
+ if (detail !== null && typeof detail === "object" && "value" in detail) emitEvent("update:value", detail["value"]);
89
58
  return root.value?.dispatchEvent(new CustomEvent(name, {
90
59
  bubbles: true,
91
60
  composed: true,
92
61
  ...declared[name],
93
62
  detail
94
63
  })) ?? true;
95
- };
96
- /** The resolved values the styles' :host-state() rules test. */
97
- const hostState = computed(() => ["stretch", "orientation"].flatMap((name) => {
98
- const value = read(name);
99
- const tokens = hn.t(value) ? [name] : [];
100
- if (typeof value === "string" || typeof value === "number") tokens.push(`${name}=${encodeURIComponent(String(value))}`);
101
- return tokens;
102
- }).join(" "));
64
+ }
103
65
  function read(name) {
104
- if (name === "internalValue") return state_internalValue.value;
105
- if (name === "tabs") return state_tabs.value;
66
+ if (name === "internalValue") return internalValue.value;
67
+ if (name === "tabs") return tabs.value;
106
68
  return props[name];
107
69
  }
108
70
  function write(name, value) {
109
71
  if (name === "internalValue") {
110
- state_internalValue.value = value;
72
+ internalValue.value = value;
111
73
  return true;
112
74
  }
113
75
  if (name === "tabs") {
114
- state_tabs.value = value;
76
+ tabs.value = value;
115
77
  return true;
116
78
  }
117
79
  throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
@@ -125,7 +87,14 @@ var UiTabs_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
125
87
  get: (_target, name) => typeof name === "string" ? read(name) : void 0,
126
88
  set: (_target, name, value) => typeof name === "string" && write(name, value)
127
89
  }),
128
- refs,
90
+ refs: {
91
+ get list() {
92
+ return listElement.value;
93
+ },
94
+ get panels() {
95
+ return panelsElement.value;
96
+ }
97
+ },
129
98
  elements: new Proxy({}, { get: (_target, name) => {
130
99
  if (typeof name !== "string" || root.value === null) return void 0;
131
100
  return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
@@ -182,29 +151,22 @@ var UiTabs_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
182
151
  }), [createElementVNode("div", {
183
152
  class: "list",
184
153
  role: "tablist",
185
- "aria-label": hn.enumerated(props.label),
186
- "aria-orientation": hn.enumerated(props.orientation),
187
- ref: (element) => {
188
- refs["list"] = element;
189
- }
190
- }, [(openBlock(true), createElementBlock(Fragment, null, renderList(hn.shape(state_tabs.value, void 0, [], void 0), (tab, index) => {
154
+ "aria-label": __props.label,
155
+ "aria-orientation": __props.orientation,
156
+ ref: "list"
157
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(tabs.value, (tab) => {
191
158
  return openBlock(), createElementBlock("button", {
192
- key: tab?.id,
159
+ key: tab.id,
193
160
  type: "button",
194
161
  role: "tab",
195
- id: hn.attr(hn.call("format", "%s-tab", tab?.id)),
196
- value: hn.attr(tab?.id),
197
- "aria-controls": hn.enumerated(tab?.id),
198
- "aria-selected": hn.enumerated(tab?.id === state_internalValue.value)
199
- }, toDisplayString(hn.text(tab?.label)), 9, _hoisted_3);
200
- }), 128))], 8, _hoisted_2), createElementVNode("div", {
201
- class: "panels",
202
- ref: (element) => {
203
- refs["panels"] = element;
204
- }
205
- }, [renderSlot(_ctx.$slots, "default")], 512)], 16, _hoisted_1);
162
+ id: `${tab.id}-tab`,
163
+ value: tab.id,
164
+ "aria-controls": tab.id,
165
+ "aria-selected": tab.id === internalValue.value
166
+ }, toDisplayString(tab.label), 9, _hoisted_3);
167
+ }), 128))], 8, _hoisted_2), createElementVNode("div", _hoisted_4, [renderSlot(_ctx.$slots, "default")], 512)], 16, _hoisted_1);
206
168
  };
207
169
  }
208
- }), [["__scopeId", "data-v-33cbeff4"]]);
170
+ }), [["__scopeId", "data-v-d4ecb8b6"]]);
209
171
  //#endregion
210
172
  export { UiTabs_default as t };
@@ -1,9 +1,8 @@
1
1
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
- import { computed, createElementBlock, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, shallowRef, watchEffect } from "vue";
2
+ import { computed, createElementBlock, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, shallowRef, vModelText, watchEffect, withDirectives } from "vue";
3
3
  import * as controllerModule from "@threadlabs/looma/components/ui-textarea/ui-textarea.js";
4
4
  //#region .build/vue/UiTextarea.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = [
6
- "value",
7
6
  "disabled",
8
7
  "readonly",
9
8
  "required",
@@ -17,19 +16,19 @@ var UiTextarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
17
16
  __name: "UiTextarea",
18
17
  props: {
19
18
  disabled: {
20
- type: [Boolean, null],
19
+ type: Boolean,
21
20
  default: false
22
21
  },
23
22
  invalid: {
24
- type: [Boolean, null],
23
+ type: Boolean,
25
24
  default: false
26
25
  },
27
26
  readonly: {
28
- type: [Boolean, null],
27
+ type: Boolean,
29
28
  default: false
30
29
  },
31
30
  required: {
32
- type: [Boolean, null],
31
+ type: Boolean,
33
32
  default: false
34
33
  },
35
34
  rows: { default: 4 },
@@ -38,24 +37,21 @@ var UiTextarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
38
37
  },
39
38
  emits: ["update:modelValue"],
40
39
  setup(__props, { emit: __emit }) {
41
- const hn = {
42
- text: (v) => v === void 0 || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
43
- attr: (v) => v === void 0 || v === null || v === false ? void 0 : v === true ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? void 0 : String(v),
44
- enumerated: (v) => typeof v === "boolean" ? String(v) : hn.attr(v)
45
- };
46
40
  const props = __props;
47
41
  const emit = __emit;
48
- const updateModel = (event) => emit("update:modelValue", event.target.value);
42
+ const model = computed({
43
+ get: () => props.modelValue ?? props.value ?? void 0,
44
+ set: (value) => emit("update:modelValue", value)
45
+ });
49
46
  const root = ref(null);
50
- const refs = {};
51
47
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
52
- const dispatch = (name, detail) => {
48
+ function dispatch(name, detail) {
53
49
  return root.value?.dispatchEvent(new CustomEvent(name, {
54
50
  bubbles: true,
55
51
  composed: true,
56
52
  detail
57
53
  })) ?? true;
58
- };
54
+ }
59
55
  function read(name) {
60
56
  return props[name];
61
57
  }
@@ -71,7 +67,7 @@ var UiTextarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
71
67
  get: (_target, name) => typeof name === "string" ? read(name) : void 0,
72
68
  set: (_target, name, value) => typeof name === "string" && write(name, value)
73
69
  }),
74
- refs,
70
+ refs: {},
75
71
  elements: new Proxy({}, { get: (_target, name) => {
76
72
  if (typeof name !== "string" || root.value === null) return void 0;
77
73
  return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
@@ -121,19 +117,18 @@ var UiTextarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
121
117
  if (typeof cleanup === "function") cleanup();
122
118
  });
123
119
  return (_ctx, _cache) => {
124
- return openBlock(), createElementBlock("textarea", mergeProps({ "data-component": "ui-textarea" }, _ctx.$attrs, {
125
- value: hn.attr(props.modelValue ?? props.value),
126
- disabled: hn.attr(props.disabled),
127
- readonly: hn.attr(props.readonly),
128
- required: hn.attr(props.required),
129
- "aria-invalid": hn.enumerated(props.invalid),
130
- rows: hn.attr(props.rows),
131
- onInput: updateModel,
120
+ return withDirectives((openBlock(), createElementBlock("textarea", mergeProps({ "data-component": "ui-textarea" }, _ctx.$attrs, {
121
+ disabled: __props.disabled,
122
+ readonly: __props.readonly,
123
+ required: __props.required,
124
+ "aria-invalid": __props.invalid,
125
+ rows: __props.rows,
126
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
132
127
  ref_key: "root",
133
128
  ref: root
134
- }), null, 16, _hoisted_1);
129
+ }), null, 16, _hoisted_1)), [[vModelText, model.value]]);
135
130
  };
136
131
  }
137
- }), [["__scopeId", "data-v-f4e08b37"]]);
132
+ }), [["__scopeId", "data-v-3c990207"]]);
138
133
  //#endregion
139
134
  export { UiTextarea_default as t };
@@ -13,110 +13,76 @@ var UiToastRegion_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
13
13
  __name: "UiToastRegion",
14
14
  props: {
15
15
  auto: {
16
- type: [Boolean, null],
16
+ type: Boolean,
17
17
  default: false
18
18
  },
19
19
  duration: { default: 5e3 },
20
20
  message: { default: "Notification" },
21
21
  open: {
22
- type: [Boolean, null],
22
+ type: Boolean,
23
23
  default: false
24
24
  }
25
25
  },
26
- emits: ["close", "dismiss"],
26
+ emits: [
27
+ "update:open",
28
+ "close",
29
+ "dismiss"
30
+ ],
27
31
  setup(__props, { expose: __expose, emit: __emit }) {
28
- const hn = {
29
- t: (v) => 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),
30
- n: (v) => typeof v === "number" && v === v ? v : void 0,
31
- text: (v) => v === void 0 || v === null ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? "" : String(v),
32
- attr: (v) => v === void 0 || v === null || v === false ? void 0 : v === true ? "" : Array.isArray(v) ? v.map(hn.text).join(" ") : typeof v === "object" ? void 0 : String(v),
33
- call: (fn, ...args) => {
34
- if (fn === "format") {
35
- let index = 1;
36
- return typeof args[0] === "string" ? args[0].replace(/%s/g, () => index < args.length ? hn.text(args[index++]) : "%s") : void 0;
37
- }
38
- const n = args.map(hn.n);
39
- if (n.some((value) => value === void 0)) return void 0;
40
- const v = n;
41
- switch (fn) {
42
- case "abs": return v.length === 1 ? Math.abs(v[0]) : void 0;
43
- case "round": return v.length === 1 ? Math.round(v[0]) : void 0;
44
- case "min": return v.length > 0 ? Math.min(...v) : void 0;
45
- case "max": return v.length > 0 ? Math.max(...v) : void 0;
46
- case "clamp": return v.length === 3 ? Math.min(Math.max(v[0], v[1]), v[2]) : void 0;
47
- }
48
- },
49
- shape: (items, where, sort, limit) => {
50
- let list = Array.isArray(items) ? items.slice() : [];
51
- if (where !== void 0) list = list.filter((item) => hn.t(where(item)));
52
- if (sort.length > 0) {
53
- const field = (item, path) => item !== null && typeof item === "object" && !Array.isArray(item) ? path.split(".").reduce((value, key) => value?.[key], item) : item;
54
- const compare = (a, b) => typeof a === "number" && typeof b === "number" ? a - b : hn.text(a).localeCompare(hn.text(b));
55
- list.sort((a, b) => {
56
- for (const key of sort) {
57
- const descending = key.startsWith("-");
58
- const order = compare(field(a, descending ? key.slice(1) : key), field(b, descending ? key.slice(1) : key));
59
- if (order !== 0) return descending ? -order : order;
60
- }
61
- return 0;
62
- });
63
- }
64
- return typeof limit === "number" ? list.slice(0, Math.max(0, Math.trunc(limit))) : list;
65
- }
66
- };
67
32
  const props = __props;
68
33
  const emit = __emit;
69
34
  const root = ref(null);
70
- const refs = {};
71
- const state_internalOpen = ref(false);
72
- const state_toasts = ref([]);
35
+ const internalOpen = ref(false);
36
+ const toasts = ref([]);
73
37
  /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
74
- const dispatch = (name, detail) => {
38
+ function dispatch(name, detail) {
75
39
  const declared = {
76
- "close": {
77
- "bubbles": true,
78
- "composed": true,
79
- "cancelable": false
40
+ close: {
41
+ bubbles: true,
42
+ composed: true,
43
+ cancelable: false
80
44
  },
81
- "dismiss": {
82
- "bubbles": true,
83
- "composed": true,
84
- "cancelable": false
45
+ dismiss: {
46
+ bubbles: true,
47
+ composed: true,
48
+ cancelable: false
85
49
  }
86
50
  };
87
51
  const checks = {
88
- "close": (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "timeout" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
52
+ close: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "timeout" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
89
53
  "open",
90
54
  "reason",
91
55
  "trigger"
92
56
  ].includes(key)),
93
- "dismiss": (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["id"] === "string" && (detail["reason"] === "action" || detail["reason"] === "timeout") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
57
+ dismiss: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["id"] === "string" && (detail["reason"] === "action" || detail["reason"] === "timeout") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
94
58
  "id",
95
59
  "reason",
96
60
  "trigger"
97
61
  ].includes(key))
98
62
  };
99
63
  if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
100
- emit(name, detail);
64
+ const emitEvent = emit;
65
+ emitEvent(name, detail);
66
+ if (detail !== null && typeof detail === "object" && "open" in detail) emitEvent("update:open", detail["open"]);
101
67
  return root.value?.dispatchEvent(new CustomEvent(name, {
102
68
  bubbles: true,
103
69
  composed: true,
104
70
  ...declared[name],
105
71
  detail
106
72
  })) ?? true;
107
- };
73
+ }
108
74
  function read(name) {
109
- if (name === "internalOpen") return state_internalOpen.value;
110
- if (name === "toasts") return state_toasts.value;
75
+ if (name === "internalOpen") return internalOpen.value;
76
+ if (name === "toasts") return toasts.value;
111
77
  return props[name];
112
78
  }
113
79
  function write(name, value) {
114
80
  if (name === "internalOpen") {
115
- state_internalOpen.value = value;
81
+ internalOpen.value = value;
116
82
  return true;
117
83
  }
118
84
  if (name === "toasts") {
119
- state_toasts.value = value;
85
+ toasts.value = value;
120
86
  return true;
121
87
  }
122
88
  throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
@@ -130,7 +96,7 @@ var UiToastRegion_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
130
96
  get: (_target, name) => typeof name === "string" ? read(name) : void 0,
131
97
  set: (_target, name, value) => typeof name === "string" && write(name, value)
132
98
  }),
133
- refs,
99
+ refs: {},
134
100
  elements: new Proxy({}, { get: (_target, name) => {
135
101
  if (typeof name !== "string" || root.value === null) return void 0;
136
102
  return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
@@ -194,20 +160,20 @@ var UiToastRegion_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
194
160
  }, _ctx.$attrs, {
195
161
  ref_key: "root",
196
162
  ref: root
197
- }), [renderSlot(_ctx.$slots, "default"), (openBlock(true), createElementBlock(Fragment, null, renderList(hn.shape(state_toasts.value, void 0, [], void 0), (toast, index) => {
163
+ }), [renderSlot(_ctx.$slots, "default"), (openBlock(true), createElementBlock(Fragment, null, renderList(toasts.value, (toast) => {
198
164
  return openBlock(), createElementBlock("div", {
199
- key: toast?.id,
200
- class: normalizeClass(["toast", { "closing": hn.t(toast?.closing) }]),
201
- id: hn.attr(toast?.id),
202
- role: hn.attr(toast?.role)
203
- }, [createElementVNode("span", _hoisted_2, toDisplayString(hn.text(toast?.message)), 1), createElementVNode("span", {
165
+ key: toast.id,
166
+ class: normalizeClass(["toast", { closing: toast.closing }]),
167
+ id: toast.id,
168
+ role: toast.role
169
+ }, [createElementVNode("span", _hoisted_2, toDisplayString(toast.message), 1), createElementVNode("span", {
204
170
  class: "dismiss",
205
- "data-toast": hn.attr(toast?.id)
171
+ "data-toast": toast.id
206
172
  }, [createVNode(UiIconButton_default, {
207
173
  size: "sm",
208
174
  variant: "ghost",
209
175
  round: true,
210
- label: hn.call("format", "Dismiss %s", toast?.message)
176
+ label: `Dismiss ${toast.message}`
211
177
  }, {
212
178
  default: withCtx(() => [..._cache[0] || (_cache[0] = [createElementVNode("svg", {
213
179
  viewBox: "0 0 24 24",
@@ -222,6 +188,6 @@ var UiToastRegion_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
222
188
  }), 128))], 16);
223
189
  };
224
190
  }
225
- }), [["__scopeId", "data-v-b607cf88"]]);
191
+ }), [["__scopeId", "data-v-d98878bd"]]);
226
192
  //#endregion
227
193
  export { UiToastRegion_default as t };