@threadlabs/looma 0.6.4 → 0.6.5

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