@threadlabs/looma 0.6.4 → 0.7.0

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 (259) hide show
  1. package/components/ui-button/ui-button.html +103 -81
  2. package/components/ui-checkbox/ui-checkbox.html +4 -1
  3. package/components/ui-combobox/ui-combobox.html +40 -3
  4. package/components/ui-combobox/ui-combobox.js +27 -5
  5. package/components/ui-select/ui-select.html +3 -5
  6. package/dist/index.js +1 -1
  7. package/package.json +2 -2
  8. package/styles/ui-affordance-scope.css +1 -1
  9. package/styles/ui-avatar-group.css +1 -1
  10. package/styles/ui-avatar.css +1 -1
  11. package/styles/ui-badge.css +1 -1
  12. package/styles/ui-button.css +112 -80
  13. package/styles/ui-callout.css +1 -1
  14. package/styles/ui-checkbox.css +5 -2
  15. package/styles/ui-cluster.css +1 -1
  16. package/styles/ui-combobox.css +38 -1
  17. package/styles/ui-container.css +1 -1
  18. package/styles/ui-context-menu.css +1 -1
  19. package/styles/ui-dialog.css +1 -1
  20. package/styles/ui-disclosure.css +1 -1
  21. package/styles/ui-editable.css +1 -1
  22. package/styles/ui-editor-insert-table-grid.css +1 -1
  23. package/styles/ui-editor-mention-menu.css +1 -1
  24. package/styles/ui-editor-slash-menu.css +1 -1
  25. package/styles/ui-editor-table-context-menu.css +1 -1
  26. package/styles/ui-editor-table-overlay.css +1 -1
  27. package/styles/ui-editor-table-toolbar.css +1 -1
  28. package/styles/ui-editor-toolbar.css +1 -1
  29. package/styles/ui-floating-action-button.css +1 -1
  30. package/styles/ui-form-field.css +1 -1
  31. package/styles/ui-grid.css +1 -1
  32. package/styles/ui-icon-button.css +1 -1
  33. package/styles/ui-icon.css +1 -1
  34. package/styles/ui-input.css +1 -1
  35. package/styles/ui-menu-item.css +1 -1
  36. package/styles/ui-menu.css +1 -1
  37. package/styles/ui-popover.css +1 -1
  38. package/styles/ui-radio-group.css +1 -1
  39. package/styles/ui-radio.css +1 -1
  40. package/styles/ui-reel.css +1 -1
  41. package/styles/ui-search-result-row.css +1 -1
  42. package/styles/ui-search-shell.css +1 -1
  43. package/styles/ui-select.css +4 -5
  44. package/styles/ui-separator.css +1 -1
  45. package/styles/ui-sidebar.css +1 -1
  46. package/styles/ui-stack.css +1 -1
  47. package/styles/ui-switch.css +1 -1
  48. package/styles/ui-switcher.css +1 -1
  49. package/styles/ui-tabs.css +1 -1
  50. package/styles/ui-textarea.css +1 -1
  51. package/styles/ui-toast-region.css +1 -1
  52. package/styles/ui-tooltip.css +1 -1
  53. package/styles/ui-top-bar.css +1 -1
  54. package/styles/ui-tree-item.css +1 -1
  55. package/styles/ui-tree.css +1 -1
  56. package/theme-dark.css +6 -30
  57. package/theme-high-contrast.css +30 -20
  58. package/theme-light.css +2 -16
  59. package/tokens.css +33 -24
  60. package/vanilla/UiAffordanceScope.d.ts +1 -1
  61. package/vanilla/UiAffordanceScope.js +1 -1
  62. package/vanilla/UiAvatar.d.ts +1 -1
  63. package/vanilla/UiAvatar.js +1 -1
  64. package/vanilla/UiAvatarGroup.d.ts +1 -1
  65. package/vanilla/UiAvatarGroup.js +1 -1
  66. package/vanilla/UiBadge.d.ts +1 -1
  67. package/vanilla/UiBadge.js +1 -1
  68. package/vanilla/UiButton.d.ts +2 -2
  69. package/vanilla/UiButton.js +2 -2
  70. package/vanilla/UiCallout.d.ts +1 -1
  71. package/vanilla/UiCallout.js +1 -1
  72. package/vanilla/UiCheckbox.d.ts +1 -1
  73. package/vanilla/UiCheckbox.js +1 -1
  74. package/vanilla/UiCluster.d.ts +1 -1
  75. package/vanilla/UiCluster.js +1 -1
  76. package/vanilla/UiCombobox.d.ts +1 -1
  77. package/vanilla/UiCombobox.js +2 -2
  78. package/vanilla/UiContainer.d.ts +1 -1
  79. package/vanilla/UiContainer.js +1 -1
  80. package/vanilla/UiContextMenu.d.ts +1 -1
  81. package/vanilla/UiContextMenu.js +1 -1
  82. package/vanilla/UiDialog.d.ts +1 -1
  83. package/vanilla/UiDialog.js +1 -1
  84. package/vanilla/UiDisclosure.d.ts +1 -1
  85. package/vanilla/UiDisclosure.js +1 -1
  86. package/vanilla/UiEditable.d.ts +1 -1
  87. package/vanilla/UiEditable.js +1 -1
  88. package/vanilla/UiEditorInsertTableGrid.d.ts +1 -1
  89. package/vanilla/UiEditorInsertTableGrid.js +1 -1
  90. package/vanilla/UiEditorMentionMenu.d.ts +1 -1
  91. package/vanilla/UiEditorMentionMenu.js +1 -1
  92. package/vanilla/UiEditorSlashMenu.d.ts +1 -1
  93. package/vanilla/UiEditorSlashMenu.js +1 -1
  94. package/vanilla/UiEditorTableContextMenu.d.ts +1 -1
  95. package/vanilla/UiEditorTableContextMenu.js +1 -1
  96. package/vanilla/UiEditorTableOverlay.d.ts +1 -1
  97. package/vanilla/UiEditorTableOverlay.js +1 -1
  98. package/vanilla/UiEditorTableToolbar.d.ts +1 -1
  99. package/vanilla/UiEditorTableToolbar.js +1 -1
  100. package/vanilla/UiEditorToolbar.d.ts +1 -1
  101. package/vanilla/UiEditorToolbar.js +1 -1
  102. package/vanilla/UiFloatingActionButton.d.ts +1 -1
  103. package/vanilla/UiFloatingActionButton.js +1 -1
  104. package/vanilla/UiFormField.d.ts +1 -1
  105. package/vanilla/UiFormField.js +1 -1
  106. package/vanilla/UiGrid.d.ts +1 -1
  107. package/vanilla/UiGrid.js +1 -1
  108. package/vanilla/UiIcon.d.ts +1 -1
  109. package/vanilla/UiIcon.js +1 -1
  110. package/vanilla/UiIconButton.d.ts +1 -1
  111. package/vanilla/UiIconButton.js +1 -1
  112. package/vanilla/UiInput.d.ts +1 -1
  113. package/vanilla/UiInput.js +1 -1
  114. package/vanilla/UiMenu.d.ts +1 -1
  115. package/vanilla/UiMenu.js +1 -1
  116. package/vanilla/UiMenuItem.d.ts +1 -1
  117. package/vanilla/UiMenuItem.js +1 -1
  118. package/vanilla/UiPopover.d.ts +1 -1
  119. package/vanilla/UiPopover.js +1 -1
  120. package/vanilla/UiRadio.d.ts +1 -1
  121. package/vanilla/UiRadio.js +1 -1
  122. package/vanilla/UiRadioGroup.d.ts +1 -1
  123. package/vanilla/UiRadioGroup.js +1 -1
  124. package/vanilla/UiReel.d.ts +1 -1
  125. package/vanilla/UiReel.js +1 -1
  126. package/vanilla/UiSearchResultRow.d.ts +1 -1
  127. package/vanilla/UiSearchResultRow.js +1 -1
  128. package/vanilla/UiSearchShell.d.ts +1 -1
  129. package/vanilla/UiSearchShell.js +1 -1
  130. package/vanilla/UiSelect.d.ts +1 -2
  131. package/vanilla/UiSelect.js +4 -7
  132. package/vanilla/UiSeparator.d.ts +1 -1
  133. package/vanilla/UiSeparator.js +1 -1
  134. package/vanilla/UiSidebar.d.ts +1 -1
  135. package/vanilla/UiSidebar.js +1 -1
  136. package/vanilla/UiStack.d.ts +1 -1
  137. package/vanilla/UiStack.js +1 -1
  138. package/vanilla/UiSwitch.d.ts +1 -1
  139. package/vanilla/UiSwitch.js +1 -1
  140. package/vanilla/UiSwitcher.d.ts +1 -1
  141. package/vanilla/UiSwitcher.js +1 -1
  142. package/vanilla/UiTabs.d.ts +1 -1
  143. package/vanilla/UiTabs.js +1 -1
  144. package/vanilla/UiTextarea.d.ts +1 -1
  145. package/vanilla/UiTextarea.js +1 -1
  146. package/vanilla/UiToastRegion.d.ts +1 -1
  147. package/vanilla/UiToastRegion.js +1 -1
  148. package/vanilla/UiTooltip.d.ts +1 -1
  149. package/vanilla/UiTooltip.js +1 -1
  150. package/vanilla/UiTopBar.d.ts +1 -1
  151. package/vanilla/UiTopBar.js +1 -1
  152. package/vanilla/UiTree.d.ts +1 -1
  153. package/vanilla/UiTree.js +1 -1
  154. package/vanilla/UiTreeItem.d.ts +1 -1
  155. package/vanilla/UiTreeItem.js +1 -1
  156. package/vue/UiAffordanceScope.vue +8 -84
  157. package/vue/UiAvatar.d.ts +1 -1
  158. package/vue/UiAvatar.vue +9 -106
  159. package/vue/UiAvatarGroup.vue +9 -96
  160. package/vue/UiBadge.vue +1 -1
  161. package/vue/UiButton.d.ts +2 -2
  162. package/vue/UiButton.vue +104 -97
  163. package/vue/UiCallout.vue +1 -1
  164. package/vue/UiCheckbox.vue +26 -124
  165. package/vue/UiCluster.vue +1 -1
  166. package/vue/UiCombobox.d.ts +1 -1
  167. package/vue/UiCombobox.vue +270 -479
  168. package/vue/UiContainer.vue +1 -1
  169. package/vue/UiContextMenu.vue +34 -141
  170. package/vue/UiDialog.vue +25 -126
  171. package/vue/UiDisclosure.vue +26 -138
  172. package/vue/UiEditable.vue +46 -158
  173. package/vue/UiEditorInsertTableGrid.vue +19 -138
  174. package/vue/UiEditorMentionMenu.vue +17 -124
  175. package/vue/UiEditorSlashMenu.vue +17 -109
  176. package/vue/UiEditorTableContextMenu.vue +34 -122
  177. package/vue/UiEditorTableOverlay.vue +61 -167
  178. package/vue/UiEditorTableToolbar.vue +34 -142
  179. package/vue/UiEditorToolbar.vue +1 -1
  180. package/vue/UiFloatingActionButton.vue +1 -1
  181. package/vue/UiFormField.vue +7 -79
  182. package/vue/UiGrid.vue +1 -1
  183. package/vue/UiIcon.vue +8 -84
  184. package/vue/UiIconButton.vue +7 -79
  185. package/vue/UiInput.vue +7 -79
  186. package/vue/UiMenu.vue +42 -127
  187. package/vue/UiMenuItem.vue +1 -1
  188. package/vue/UiPopover.vue +25 -121
  189. package/vue/UiRadio.vue +22 -123
  190. package/vue/UiRadioGroup.d.ts +1 -1
  191. package/vue/UiRadioGroup.vue +32 -119
  192. package/vue/UiReel.vue +1 -1
  193. package/vue/UiSearchResultRow.vue +1 -1
  194. package/vue/UiSearchShell.vue +25 -121
  195. package/vue/UiSelect.d.ts +0 -2
  196. package/vue/UiSelect.vue +9 -85
  197. package/vue/UiSeparator.vue +1 -1
  198. package/vue/UiSidebar.vue +32 -133
  199. package/vue/UiStack.vue +1 -1
  200. package/vue/UiSwitch.vue +22 -123
  201. package/vue/UiSwitcher.vue +1 -1
  202. package/vue/UiTabs.vue +24 -128
  203. package/vue/UiTextarea.vue +7 -79
  204. package/vue/UiToastRegion.vue +37 -126
  205. package/vue/UiTooltip.vue +25 -124
  206. package/vue/UiTopBar.vue +1 -1
  207. package/vue/UiTree.vue +56 -137
  208. package/vue/UiTreeItem.vue +28 -144
  209. package/vue/chunks/UiAffordanceScope.js +9 -78
  210. package/vue/chunks/UiAvatar.js +13 -89
  211. package/vue/chunks/UiAvatarGroup.js +10 -80
  212. package/vue/chunks/UiBadge.js +1 -1
  213. package/vue/chunks/UiButton.js +3 -3
  214. package/vue/chunks/UiCallout.js +1 -1
  215. package/vue/chunks/UiCheckbox.js +17 -95
  216. package/vue/chunks/UiCluster.js +1 -1
  217. package/vue/chunks/UiCombobox.js +115 -326
  218. package/vue/chunks/UiContainer.js +1 -1
  219. package/vue/chunks/UiContextMenu.js +21 -113
  220. package/vue/chunks/UiDialog.js +20 -99
  221. package/vue/chunks/UiDisclosure.js +22 -112
  222. package/vue/chunks/UiEditable.js +32 -128
  223. package/vue/chunks/UiEditorInsertTableGrid.js +22 -116
  224. package/vue/chunks/UiEditorMentionMenu.js +18 -116
  225. package/vue/chunks/UiEditorSlashMenu.js +15 -101
  226. package/vue/chunks/UiEditorTableContextMenu.js +12 -91
  227. package/vue/chunks/UiEditorTableOverlay.js +29 -120
  228. package/vue/chunks/UiEditorTableToolbar.js +16 -111
  229. package/vue/chunks/UiEditorToolbar.js +1 -1
  230. package/vue/chunks/UiFloatingActionButton.js +1 -1
  231. package/vue/chunks/UiFormField.js +8 -73
  232. package/vue/chunks/UiGrid.js +1 -1
  233. package/vue/chunks/UiIcon.js +9 -78
  234. package/vue/chunks/UiIconButton.js +8 -73
  235. package/vue/chunks/UiInput.js +8 -73
  236. package/vue/chunks/UiMenu.js +25 -111
  237. package/vue/chunks/UiMenuItem.js +1 -1
  238. package/vue/chunks/UiPopover.js +18 -105
  239. package/vue/chunks/UiRadio.js +17 -95
  240. package/vue/chunks/UiRadioGroup.js +23 -105
  241. package/vue/chunks/UiReel.js +1 -1
  242. package/vue/chunks/UiSearchResultRow.js +1 -1
  243. package/vue/chunks/UiSearchShell.js +17 -94
  244. package/vue/chunks/UiSelect.js +8 -79
  245. package/vue/chunks/UiSeparator.js +1 -1
  246. package/vue/chunks/UiSidebar.js +23 -108
  247. package/vue/chunks/UiStack.js +1 -1
  248. package/vue/chunks/UiSwitch.js +17 -95
  249. package/vue/chunks/UiSwitcher.js +1 -1
  250. package/vue/chunks/UiTabs.js +22 -103
  251. package/vue/chunks/UiTextarea.js +8 -73
  252. package/vue/chunks/UiToastRegion.js +27 -112
  253. package/vue/chunks/UiTooltip.js +18 -106
  254. package/vue/chunks/UiTopBar.js +1 -1
  255. package/vue/chunks/UiTree.js +31 -109
  256. package/vue/chunks/UiTreeItem.js +29 -119
  257. package/vue/chunks/host.js +101 -0
  258. package/vue/components.css +844 -797
  259. package/vue/host.ts +154 -0
@@ -1,5 +1,6 @@
1
+ import { n as useComponentHost, t as createDispatch } from "./host.js";
1
2
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
- import { computed, createElementBlock, createElementVNode, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, shallowRef, useTemplateRef, watchEffect } from "vue";
3
+ import { createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, renderSlot, useTemplateRef } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-context-menu/ui-context-menu.js";
4
5
  //#region .build/vue/UiContextMenu.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = {
@@ -32,119 +33,26 @@ var UiContextMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
32
33
  const root = ref(null);
33
34
  const menuElement = useTemplateRef("menu");
34
35
  const internalOpen = ref(false);
35
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
36
- function dispatch(name, detail) {
37
- const declared = {
38
- open: {
39
- bubbles: true,
40
- composed: true,
41
- cancelable: false
42
- },
43
- close: {
44
- bubbles: true,
45
- composed: true,
46
- cancelable: false
47
- },
48
- select: {
49
- bubbles: true,
50
- composed: true,
51
- cancelable: false
52
- }
53
- };
54
- const checks = {
55
- open: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
56
- "open",
57
- "reason",
58
- "trigger"
59
- ].includes(key)),
60
- close: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
61
- "open",
62
- "reason",
63
- "trigger"
64
- ].includes(key)),
65
- select: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["value"] === "string" && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => ["value", "trigger"].includes(key))
66
- };
67
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
68
- const emitEvent = emit;
69
- emitEvent(name, detail);
70
- if (detail !== null && typeof detail === "object" && "open" in detail) emitEvent("update:open", detail["open"]);
71
- return root.value?.dispatchEvent(new CustomEvent(name, {
72
- bubbles: true,
73
- composed: true,
74
- ...declared[name],
75
- detail
76
- })) ?? true;
77
- }
78
- function read(name) {
79
- if (name === "internalOpen") return internalOpen.value;
80
- return props[name];
81
- }
82
- function write(name, value) {
83
- if (name === "internalOpen") {
84
- internalOpen.value = value;
85
- return true;
86
- }
87
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
88
- }
89
- const stops = [];
90
- const host = {
91
- get element() {
92
- return root.value;
93
- },
94
- state: new Proxy({}, {
95
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
96
- set: (_target, name, value) => typeof name === "string" && write(name, value)
97
- }),
98
- refs: { get menu() {
99
- return menuElement.value;
100
- } },
101
- elements: new Proxy({}, { get: (_target, name) => {
102
- if (typeof name !== "string" || root.value === null) return void 0;
103
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
104
- } }),
105
- signal(initialValue) {
106
- const value = shallowRef(initialValue);
107
- return {
108
- get: () => value.value,
109
- set: (next) => {
110
- if (!Object.is(value.value, next)) value.value = next;
111
- },
112
- update: (next) => {
113
- const updated = next(value.value);
114
- if (!Object.is(value.value, updated)) value.value = updated;
115
- }
116
- };
36
+ const isOpenDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
37
+ "open",
38
+ "reason",
39
+ "trigger"
40
+ ].includes(key));
41
+ const isSelectDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["value"] === "string" && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => ["value", "trigger"].includes(key));
42
+ const dispatch = createDispatch(root, emit, {
43
+ checks: {
44
+ open: isOpenDetail,
45
+ close: isOpenDetail,
46
+ select: isSelectDetail
117
47
  },
118
- computed(compute) {
119
- const value = computed(compute);
120
- return { get: () => value.value };
121
- },
122
- effect(run) {
123
- const stop = watchEffect((onCleanup) => {
124
- const cleanup = run();
125
- if (typeof cleanup === "function") onCleanup(cleanup);
126
- }, { flush: "post" });
127
- stops.push(stop);
128
- return stop;
129
- },
130
- on(event, listener) {
131
- const element = root.value;
132
- element?.addEventListener(event, listener);
133
- const off = () => element?.removeEventListener(event, listener);
134
- stops.push(off);
135
- return off;
136
- },
137
- dispatch
138
- };
139
- let cleanup;
140
- onMounted(() => {
141
- Promise.resolve(controllerModule.default(host)).then((result) => {
142
- cleanup = result;
143
- });
48
+ modeled: ["open"]
144
49
  });
145
- onBeforeUnmount(() => {
146
- for (const stop of stops.splice(0)) stop();
147
- if (typeof cleanup === "function") cleanup();
50
+ useComponentHost(controllerModule.default, {
51
+ root,
52
+ dispatch,
53
+ props,
54
+ refs: { menu: menuElement },
55
+ state: { internalOpen }
148
56
  });
149
57
  return (_ctx, _cache) => {
150
58
  return openBlock(), createElementBlock("span", mergeProps({ "data-component": "ui-context-menu" }, _ctx.$attrs, {
@@ -153,6 +61,6 @@ var UiContextMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
153
61
  }), [createElementVNode("div", _hoisted_1, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 512)], 16);
154
62
  };
155
63
  }
156
- }), [["__scopeId", "data-v-39e418e5"]]);
64
+ }), [["__scopeId", "data-v-607c2847"]]);
157
65
  //#endregion
158
66
  export { UiContextMenu_default as t };
@@ -1,5 +1,6 @@
1
+ import { n as useComponentHost, t as createDispatch } from "./host.js";
1
2
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
- import { computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, shallowRef, toDisplayString, useTemplateRef, watchEffect } from "vue";
3
+ import { createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, renderSlot, toDisplayString, useTemplateRef } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-dialog/ui-dialog.js";
4
5
  //#region .build/vue/UiDialog.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["aria-label"];
@@ -43,104 +44,24 @@ var UiDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
43
44
  const closeElement = useTemplateRef("close");
44
45
  const internalOpen = ref(false);
45
46
  const accessibleLabel = ref("Dialog");
46
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
47
- function dispatch(name, detail) {
48
- const declared = { close: {
49
- bubbles: true,
50
- composed: true,
51
- cancelable: false
52
- } };
53
- const checks = { close: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
54
- "open",
55
- "reason",
56
- "trigger"
57
- ].includes(key)) };
58
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
59
- const emitEvent = emit;
60
- emitEvent(name, detail);
61
- if (detail !== null && typeof detail === "object" && "open" in detail) emitEvent("update:open", detail["open"]);
62
- return root.value?.dispatchEvent(new CustomEvent(name, {
63
- bubbles: true,
64
- composed: true,
65
- ...declared[name],
66
- detail
67
- })) ?? true;
68
- }
69
- function read(name) {
70
- if (name === "internalOpen") return internalOpen.value;
71
- if (name === "accessibleLabel") return accessibleLabel.value;
72
- return props[name];
73
- }
74
- function write(name, value) {
75
- if (name === "internalOpen") {
76
- internalOpen.value = value;
77
- return true;
78
- }
79
- if (name === "accessibleLabel") {
80
- accessibleLabel.value = value;
81
- return true;
82
- }
83
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
84
- }
85
- const stops = [];
86
- const host = {
87
- get element() {
88
- return root.value;
89
- },
90
- state: new Proxy({}, {
91
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
92
- set: (_target, name, value) => typeof name === "string" && write(name, value)
93
- }),
94
- refs: { get close() {
95
- return closeElement.value;
96
- } },
97
- elements: new Proxy({}, { get: (_target, name) => {
98
- if (typeof name !== "string" || root.value === null) return void 0;
99
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
100
- } }),
101
- signal(initialValue) {
102
- const value = shallowRef(initialValue);
103
- return {
104
- get: () => value.value,
105
- set: (next) => {
106
- if (!Object.is(value.value, next)) value.value = next;
107
- },
108
- update: (next) => {
109
- const updated = next(value.value);
110
- if (!Object.is(value.value, updated)) value.value = updated;
111
- }
112
- };
113
- },
114
- computed(compute) {
115
- const value = computed(compute);
116
- return { get: () => value.value };
117
- },
118
- effect(run) {
119
- const stop = watchEffect((onCleanup) => {
120
- const cleanup = run();
121
- if (typeof cleanup === "function") onCleanup(cleanup);
122
- }, { flush: "post" });
123
- stops.push(stop);
124
- return stop;
125
- },
126
- on(event, listener) {
127
- const element = root.value;
128
- element?.addEventListener(event, listener);
129
- const off = () => element?.removeEventListener(event, listener);
130
- stops.push(off);
131
- return off;
132
- },
133
- dispatch
134
- };
135
- let cleanup;
136
- onMounted(() => {
137
- Promise.resolve(controllerModule.default(host)).then((result) => {
138
- cleanup = result;
139
- });
47
+ const isCloseDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
48
+ "open",
49
+ "reason",
50
+ "trigger"
51
+ ].includes(key));
52
+ const dispatch = createDispatch(root, emit, {
53
+ checks: { close: isCloseDetail },
54
+ modeled: ["open"]
140
55
  });
141
- onBeforeUnmount(() => {
142
- for (const stop of stops.splice(0)) stop();
143
- if (typeof cleanup === "function") cleanup();
56
+ useComponentHost(controllerModule.default, {
57
+ root,
58
+ dispatch,
59
+ props,
60
+ refs: { close: closeElement },
61
+ state: {
62
+ internalOpen,
63
+ accessibleLabel
64
+ }
144
65
  });
145
66
  return (_ctx, _cache) => {
146
67
  return openBlock(), createElementBlock("dialog", mergeProps({ "data-component": "ui-dialog" }, _ctx.$attrs, {
@@ -154,6 +75,6 @@ var UiDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
154
75
  ], 16, _hoisted_1);
155
76
  };
156
77
  }
157
- }), [["__scopeId", "data-v-05ac1756"]]);
78
+ }), [["__scopeId", "data-v-cac753c9"]]);
158
79
  //#endregion
159
80
  export { UiDialog_default as t };
@@ -1,5 +1,6 @@
1
+ import { n as useComponentHost, t as createDispatch } from "./host.js";
1
2
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
- import { computed, createElementBlock, createElementVNode, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, shallowRef, toDisplayString, useTemplateRef, watchEffect } from "vue";
3
+ import { computed, createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, renderSlot, toDisplayString, useTemplateRef } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-disclosure/ui-disclosure.js";
4
5
  //#region .build/vue/UiDisclosure.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["data-ui-disclosure-state"];
@@ -41,118 +42,27 @@ var UiDisclosure_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
41
42
  const contentId = ref("");
42
43
  /** The values the styles' :host-state() rules test. */
43
44
  const hostState = computed(() => [props.density && `density density=${props.density}`, internalOpen.value && "internalOpen"].filter(Boolean).join(" "));
44
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
45
- function dispatch(name, detail) {
46
- const declared = {
47
- open: {
48
- bubbles: true,
49
- composed: true,
50
- cancelable: false
51
- },
52
- close: {
53
- bubbles: true,
54
- composed: true,
55
- cancelable: false
56
- }
57
- };
58
- const checks = {
59
- open: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
60
- "open",
61
- "reason",
62
- "trigger"
63
- ].includes(key)),
64
- close: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
65
- "open",
66
- "reason",
67
- "trigger"
68
- ].includes(key))
69
- };
70
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
71
- const emitEvent = emit;
72
- emitEvent(name, detail);
73
- if (detail !== null && typeof detail === "object" && "open" in detail) emitEvent("update:open", detail["open"]);
74
- return root.value?.dispatchEvent(new CustomEvent(name, {
75
- bubbles: true,
76
- composed: true,
77
- ...declared[name],
78
- detail
79
- })) ?? true;
80
- }
81
- function read(name) {
82
- if (name === "internalOpen") return internalOpen.value;
83
- if (name === "contentId") return contentId.value;
84
- return props[name];
85
- }
86
- function write(name, value) {
87
- if (name === "internalOpen") {
88
- internalOpen.value = value;
89
- return true;
90
- }
91
- if (name === "contentId") {
92
- contentId.value = value;
93
- return true;
94
- }
95
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
96
- }
97
- const stops = [];
98
- const host = {
99
- get element() {
100
- return root.value;
101
- },
102
- state: new Proxy({}, {
103
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
104
- set: (_target, name, value) => typeof name === "string" && write(name, value)
105
- }),
106
- refs: { get trigger() {
107
- return triggerElement.value;
108
- } },
109
- elements: new Proxy({}, { get: (_target, name) => {
110
- if (typeof name !== "string" || root.value === null) return void 0;
111
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
112
- } }),
113
- signal(initialValue) {
114
- const value = shallowRef(initialValue);
115
- return {
116
- get: () => value.value,
117
- set: (next) => {
118
- if (!Object.is(value.value, next)) value.value = next;
119
- },
120
- update: (next) => {
121
- const updated = next(value.value);
122
- if (!Object.is(value.value, updated)) value.value = updated;
123
- }
124
- };
125
- },
126
- computed(compute) {
127
- const value = computed(compute);
128
- return { get: () => value.value };
45
+ const isOpenDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["open"] === "boolean" && (detail["reason"] === "action" || detail["reason"] === "programmatic" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
46
+ "open",
47
+ "reason",
48
+ "trigger"
49
+ ].includes(key));
50
+ const dispatch = createDispatch(root, emit, {
51
+ checks: {
52
+ open: isOpenDetail,
53
+ close: isOpenDetail
129
54
  },
130
- effect(run) {
131
- const stop = watchEffect((onCleanup) => {
132
- const cleanup = run();
133
- if (typeof cleanup === "function") onCleanup(cleanup);
134
- }, { flush: "post" });
135
- stops.push(stop);
136
- return stop;
137
- },
138
- on(event, listener) {
139
- const element = root.value;
140
- element?.addEventListener(event, listener);
141
- const off = () => element?.removeEventListener(event, listener);
142
- stops.push(off);
143
- return off;
144
- },
145
- dispatch
146
- };
147
- let cleanup;
148
- onMounted(() => {
149
- Promise.resolve(controllerModule.default(host)).then((result) => {
150
- cleanup = result;
151
- });
55
+ modeled: ["open"]
152
56
  });
153
- onBeforeUnmount(() => {
154
- for (const stop of stops.splice(0)) stop();
155
- if (typeof cleanup === "function") cleanup();
57
+ useComponentHost(controllerModule.default, {
58
+ root,
59
+ dispatch,
60
+ props,
61
+ refs: { trigger: triggerElement },
62
+ state: {
63
+ internalOpen,
64
+ contentId
65
+ }
156
66
  });
157
67
  return (_ctx, _cache) => {
158
68
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-disclosure" }, _ctx.$attrs, {
@@ -176,6 +86,6 @@ var UiDisclosure_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
176
86
  }, [createElementVNode("div", _hoisted_4, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 8, _hoisted_3)], 16, _hoisted_1);
177
87
  };
178
88
  }
179
- }), [["__scopeId", "data-v-d9a330a8"]]);
89
+ }), [["__scopeId", "data-v-20cbcb83"]]);
180
90
  //#endregion
181
91
  export { UiDisclosure_default as t };
@@ -1,5 +1,6 @@
1
+ import { n as useComponentHost, t as createDispatch } from "./host.js";
1
2
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
2
- import { computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, shallowRef, toDisplayString, useTemplateRef, watchEffect } from "vue";
3
+ import { computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, toDisplayString, useTemplateRef } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-editable/ui-editable.js";
4
5
  //#region .build/vue/UiEditable.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = ["data-ui-editable-state"];
@@ -60,135 +61,38 @@ var UiEditable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
60
61
  const draft = ref("");
61
62
  /** The values the styles' :host-state() rules test. */
62
63
  const hostState = computed(() => [internalEdit.value && "internalEdit", props.disabled && "disabled"].filter(Boolean).join(" "));
63
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
64
- function dispatch(name, detail) {
65
- const declared = {
66
- input: {
67
- bubbles: true,
68
- composed: true,
69
- cancelable: false
70
- },
71
- change: {
72
- bubbles: true,
73
- composed: true,
74
- cancelable: false
75
- },
76
- "edit-change": {
77
- bubbles: true,
78
- composed: true,
79
- cancelable: false
80
- }
81
- };
82
- const checks = {
83
- input: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["value"] === "string" && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => ["value", "trigger"].includes(key)),
84
- change: (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) => [
85
- "value",
86
- "previousValue",
87
- "trigger"
88
- ].includes(key)),
89
- "edit-change": (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["edit"] === "boolean" && (detail["reason"] === "activate" || detail["reason"] === "commit" || detail["reason"] === "cancel" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape" || detail["reason"] === "programmatic") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
90
- "edit",
91
- "reason",
92
- "trigger"
93
- ].includes(key))
94
- };
95
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
96
- const emitEvent = emit;
97
- emitEvent(name, detail);
98
- if (detail !== null && typeof detail === "object" && "edit" in detail) emitEvent("update:edit", detail["edit"]);
99
- if (detail !== null && typeof detail === "object" && "value" in detail) emitEvent("update:value", detail["value"]);
100
- return root.value?.dispatchEvent(new CustomEvent(name, {
101
- bubbles: true,
102
- composed: true,
103
- ...declared[name],
104
- detail
105
- })) ?? true;
106
- }
107
- function read(name) {
108
- if (name === "internalEdit") return internalEdit.value;
109
- if (name === "internalValue") return internalValue.value;
110
- if (name === "draft") return draft.value;
111
- return props[name];
112
- }
113
- function write(name, value) {
114
- if (name === "internalEdit") {
115
- internalEdit.value = value;
116
- return true;
117
- }
118
- if (name === "internalValue") {
119
- internalValue.value = value;
120
- return true;
121
- }
122
- if (name === "draft") {
123
- draft.value = value;
124
- return true;
125
- }
126
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
127
- }
128
- const stops = [];
129
- const host = {
130
- get element() {
131
- return root.value;
64
+ const isInputDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["value"] === "string" && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => ["value", "trigger"].includes(key));
65
+ const isChangeDetail = (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) => [
66
+ "value",
67
+ "previousValue",
68
+ "trigger"
69
+ ].includes(key));
70
+ const isEditChangeDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && typeof detail["edit"] === "boolean" && (detail["reason"] === "activate" || detail["reason"] === "commit" || detail["reason"] === "cancel" || detail["reason"] === "light-dismiss" || detail["reason"] === "escape" || detail["reason"] === "programmatic") && (detail["trigger"] === "keyboard" || detail["trigger"] === "pointer" || detail["trigger"] === "programmatic") && Object.keys(detail).every((key) => [
71
+ "edit",
72
+ "reason",
73
+ "trigger"
74
+ ].includes(key));
75
+ const dispatch = createDispatch(root, emit, {
76
+ checks: {
77
+ input: isInputDetail,
78
+ change: isChangeDetail,
79
+ "edit-change": isEditChangeDetail
132
80
  },
133
- state: new Proxy({}, {
134
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
135
- set: (_target, name, value) => typeof name === "string" && write(name, value)
136
- }),
81
+ modeled: ["edit", "value"]
82
+ });
83
+ useComponentHost(controllerModule.default, {
84
+ root,
85
+ dispatch,
86
+ props,
137
87
  refs: {
138
- get preview() {
139
- return previewElement.value;
140
- },
141
- get input() {
142
- return inputElement.value;
143
- }
144
- },
145
- elements: new Proxy({}, { get: (_target, name) => {
146
- if (typeof name !== "string" || root.value === null) return void 0;
147
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
148
- } }),
149
- signal(initialValue) {
150
- const value = shallowRef(initialValue);
151
- return {
152
- get: () => value.value,
153
- set: (next) => {
154
- if (!Object.is(value.value, next)) value.value = next;
155
- },
156
- update: (next) => {
157
- const updated = next(value.value);
158
- if (!Object.is(value.value, updated)) value.value = updated;
159
- }
160
- };
161
- },
162
- computed(compute) {
163
- const value = computed(compute);
164
- return { get: () => value.value };
88
+ preview: previewElement,
89
+ input: inputElement
165
90
  },
166
- effect(run) {
167
- const stop = watchEffect((onCleanup) => {
168
- const cleanup = run();
169
- if (typeof cleanup === "function") onCleanup(cleanup);
170
- }, { flush: "post" });
171
- stops.push(stop);
172
- return stop;
173
- },
174
- on(event, listener) {
175
- const element = root.value;
176
- element?.addEventListener(event, listener);
177
- const off = () => element?.removeEventListener(event, listener);
178
- stops.push(off);
179
- return off;
180
- },
181
- dispatch
182
- };
183
- let cleanup;
184
- onMounted(() => {
185
- Promise.resolve(controllerModule.default(host)).then((result) => {
186
- cleanup = result;
187
- });
188
- });
189
- onBeforeUnmount(() => {
190
- for (const stop of stops.splice(0)) stop();
191
- if (typeof cleanup === "function") cleanup();
91
+ state: {
92
+ internalEdit,
93
+ internalValue,
94
+ draft
95
+ }
192
96
  });
193
97
  return (_ctx, _cache) => {
194
98
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-editable" }, _ctx.$attrs, {
@@ -216,6 +120,6 @@ var UiEditable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
216
120
  }, "Cancel", -1)])])) : createCommentVNode("v-if", true)], 16, _hoisted_1);
217
121
  };
218
122
  }
219
- }), [["__scopeId", "data-v-3707d050"]]);
123
+ }), [["__scopeId", "data-v-c1b523c6"]]);
220
124
  //#endregion
221
125
  export { UiEditable_default as t };