@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,6 +1,7 @@
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
3
  import { t as UiIcon_default } from "./UiIcon.js";
3
- import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, renderList, shallowRef, toDisplayString, watchEffect } from "vue";
4
+ import { Fragment, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, normalizeStyle, openBlock, ref, renderList, toDisplayString } from "vue";
4
5
  import * as controllerModule from "@threadlabs/looma/components/ui-editor-table-overlay/ui-editor-table-overlay.js";
5
6
  //#region .build/vue/UiEditorTableOverlay.vue?vue&type=script&setup=true&lang.ts
6
7
  var _hoisted_1 = ["hidden"];
@@ -55,125 +56,33 @@ var UiEditorTableOverlay_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
55
56
  const hovered = ref(null);
56
57
  const active = ref(null);
57
58
  const activeKey = ref("");
58
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
59
- function dispatch(name, detail) {
60
- const declared = { action: {
61
- bubbles: true,
62
- composed: true,
63
- cancelable: false
64
- } };
65
- const checks = { action: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && (detail["action"] === "add-row-before" || detail["action"] === "add-row-after" || detail["action"] === "add-column-before" || detail["action"] === "add-column-after") && Number.isInteger(detail["boundaryIndex"]) && Object.keys(detail).every((key) => ["action", "boundaryIndex"].includes(key)) || detail !== null && typeof detail === "object" && !Array.isArray(detail) && (detail["action"] === "select-row" || detail["action"] === "select-column") && Number.isInteger(detail["rowIndex"]) && Number.isInteger(detail["columnIndex"]) && Object.keys(detail).every((key) => [
66
- "action",
67
- "rowIndex",
68
- "columnIndex"
69
- ].includes(key)) || detail !== null && typeof detail === "object" && !Array.isArray(detail) && detail["action"] === "open-cell-menu" && Number.isInteger(detail["rowIndex"]) && Number.isInteger(detail["columnIndex"]) && detail["anchor"] !== null && typeof detail["anchor"] === "object" && !Array.isArray(detail["anchor"]) && typeof detail["anchor"]["left"] === "number" && Number.isFinite(detail["anchor"]["left"]) && typeof detail["anchor"]["top"] === "number" && Number.isFinite(detail["anchor"]["top"]) && typeof detail["anchor"]["right"] === "number" && Number.isFinite(detail["anchor"]["right"]) && typeof detail["anchor"]["bottom"] === "number" && Number.isFinite(detail["anchor"]["bottom"]) && Object.keys(detail["anchor"]).every((key) => [
70
- "left",
71
- "top",
72
- "right",
73
- "bottom"
74
- ].includes(key)) && Object.keys(detail).every((key) => [
75
- "action",
76
- "rowIndex",
77
- "columnIndex",
78
- "anchor"
79
- ].includes(key)) };
80
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
81
- emit(name, detail);
82
- return root.value?.dispatchEvent(new CustomEvent(name, {
83
- bubbles: true,
84
- composed: true,
85
- ...declared[name],
86
- detail
87
- })) ?? true;
88
- }
89
- function read(name) {
90
- if (name === "rows") return rows.value;
91
- if (name === "cols") return cols.value;
92
- if (name === "hovered") return hovered.value;
93
- if (name === "active") return active.value;
94
- if (name === "activeKey") return activeKey.value;
95
- return props[name];
96
- }
97
- function write(name, value) {
98
- if (name === "rows") {
99
- rows.value = value;
100
- return true;
101
- }
102
- if (name === "cols") {
103
- cols.value = value;
104
- return true;
105
- }
106
- if (name === "hovered") {
107
- hovered.value = value;
108
- return true;
109
- }
110
- if (name === "active") {
111
- active.value = value;
112
- return true;
59
+ const isActionDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && (detail["action"] === "add-row-before" || detail["action"] === "add-row-after" || detail["action"] === "add-column-before" || detail["action"] === "add-column-after") && Number.isInteger(detail["boundaryIndex"]) && Object.keys(detail).every((key) => ["action", "boundaryIndex"].includes(key)) || detail !== null && typeof detail === "object" && !Array.isArray(detail) && (detail["action"] === "select-row" || detail["action"] === "select-column") && Number.isInteger(detail["rowIndex"]) && Number.isInteger(detail["columnIndex"]) && Object.keys(detail).every((key) => [
60
+ "action",
61
+ "rowIndex",
62
+ "columnIndex"
63
+ ].includes(key)) || detail !== null && typeof detail === "object" && !Array.isArray(detail) && detail["action"] === "open-cell-menu" && Number.isInteger(detail["rowIndex"]) && Number.isInteger(detail["columnIndex"]) && detail["anchor"] !== null && typeof detail["anchor"] === "object" && !Array.isArray(detail["anchor"]) && typeof detail["anchor"]["left"] === "number" && Number.isFinite(detail["anchor"]["left"]) && typeof detail["anchor"]["top"] === "number" && Number.isFinite(detail["anchor"]["top"]) && typeof detail["anchor"]["right"] === "number" && Number.isFinite(detail["anchor"]["right"]) && typeof detail["anchor"]["bottom"] === "number" && Number.isFinite(detail["anchor"]["bottom"]) && Object.keys(detail["anchor"]).every((key) => [
64
+ "left",
65
+ "top",
66
+ "right",
67
+ "bottom"
68
+ ].includes(key)) && Object.keys(detail).every((key) => [
69
+ "action",
70
+ "rowIndex",
71
+ "columnIndex",
72
+ "anchor"
73
+ ].includes(key));
74
+ const dispatch = createDispatch(root, emit, { checks: { action: isActionDetail } });
75
+ useComponentHost(controllerModule.default, {
76
+ root,
77
+ dispatch,
78
+ props,
79
+ state: {
80
+ rows,
81
+ cols,
82
+ hovered,
83
+ active,
84
+ activeKey
113
85
  }
114
- if (name === "activeKey") {
115
- activeKey.value = value;
116
- return true;
117
- }
118
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
119
- }
120
- const stops = [];
121
- const host = {
122
- get element() {
123
- return root.value;
124
- },
125
- state: new Proxy({}, {
126
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
127
- set: (_target, name, value) => typeof name === "string" && write(name, value)
128
- }),
129
- refs: {},
130
- elements: new Proxy({}, { get: (_target, name) => {
131
- if (typeof name !== "string" || root.value === null) return void 0;
132
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
133
- } }),
134
- signal(initialValue) {
135
- const value = shallowRef(initialValue);
136
- return {
137
- get: () => value.value,
138
- set: (next) => {
139
- if (!Object.is(value.value, next)) value.value = next;
140
- },
141
- update: (next) => {
142
- const updated = next(value.value);
143
- if (!Object.is(value.value, updated)) value.value = updated;
144
- }
145
- };
146
- },
147
- computed(compute) {
148
- const value = computed(compute);
149
- return { get: () => value.value };
150
- },
151
- effect(run) {
152
- const stop = watchEffect((onCleanup) => {
153
- const cleanup = run();
154
- if (typeof cleanup === "function") onCleanup(cleanup);
155
- }, { flush: "post" });
156
- stops.push(stop);
157
- return stop;
158
- },
159
- on(event, listener) {
160
- const element = root.value;
161
- element?.addEventListener(event, listener);
162
- const off = () => element?.removeEventListener(event, listener);
163
- stops.push(off);
164
- return off;
165
- },
166
- dispatch
167
- };
168
- let cleanup;
169
- onMounted(() => {
170
- Promise.resolve(controllerModule.default(host)).then((result) => {
171
- cleanup = result;
172
- });
173
- });
174
- onBeforeUnmount(() => {
175
- for (const stop of stops.splice(0)) stop();
176
- if (typeof cleanup === "function") cleanup();
177
86
  });
178
87
  return (_ctx, _cache) => {
179
88
  return openBlock(), createElementBlock("div", mergeProps({
@@ -272,6 +181,6 @@ var UiEditorTableOverlay_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
272
181
  ], 16, _hoisted_1);
273
182
  };
274
183
  }
275
- }), [["__scopeId", "data-v-d5963c35"]]);
184
+ }), [["__scopeId", "data-v-61a70a30"]]);
276
185
  //#endregion
277
186
  export { UiEditorTableOverlay_default as t };
@@ -1,6 +1,7 @@
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
3
  import { t as UiIcon_default } from "./UiIcon.js";
3
- import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, renderList, shallowRef, toDisplayString, watchEffect } from "vue";
4
+ import { Fragment, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, mergeProps, normalizeClass, normalizeStyle, openBlock, ref, renderList, toDisplayString } from "vue";
4
5
  import * as controllerModule from "@threadlabs/looma/components/ui-editor-table-toolbar/ui-editor-table-toolbar.js";
5
6
  //#region .build/vue/UiEditorTableToolbar.vue?vue&type=script&setup=true&lang.ts
6
7
  var _hoisted_1 = ["hidden"];
@@ -86,116 +87,20 @@ var UiEditorTableToolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
86
87
  const sections = ref([]);
87
88
  const hasOverflow = ref(false);
88
89
  const overflowOpen = ref(false);
89
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
90
- function dispatch(name, detail) {
91
- const declared = { action: {
92
- bubbles: true,
93
- composed: true,
94
- cancelable: false
95
- } };
96
- const checks = { action: (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && (detail["action"] === "align-left" || detail["action"] === "align-center" || detail["action"] === "align-right" || detail["action"] === "background-none" || detail["action"] === "background-gray" || detail["action"] === "background-yellow" || detail["action"] === "background-blue" || detail["action"] === "background-green" || detail["action"] === "background-red" || detail["action"] === "add-row-before" || detail["action"] === "add-row-after" || detail["action"] === "add-column-before" || detail["action"] === "add-column-after" || detail["action"] === "clear-cells" || detail["action"] === "merge-cells" || detail["action"] === "split-cell" || detail["action"] === "delete-row" || detail["action"] === "delete-column" || detail["action"] === "delete-table") && Object.keys(detail).every((key) => ["action"].includes(key)) };
97
- if (detail !== void 0 && checks[name] !== void 0 && !checks[name](detail)) throw new TypeError(`HR002: Event \`${name}\` detail does not satisfy its declared type.`);
98
- emit(name, detail);
99
- return root.value?.dispatchEvent(new CustomEvent(name, {
100
- bubbles: true,
101
- composed: true,
102
- ...declared[name],
103
- detail
104
- })) ?? true;
105
- }
106
- function read(name) {
107
- if (name === "alignments") return alignments.value;
108
- if (name === "structure") return structure.value;
109
- if (name === "swatches") return swatches.value;
110
- if (name === "sections") return sections.value;
111
- if (name === "hasOverflow") return hasOverflow.value;
112
- if (name === "overflowOpen") return overflowOpen.value;
113
- return props[name];
114
- }
115
- function write(name, value) {
116
- if (name === "alignments") {
117
- alignments.value = value;
118
- return true;
119
- }
120
- if (name === "structure") {
121
- structure.value = value;
122
- return true;
123
- }
124
- if (name === "swatches") {
125
- swatches.value = value;
126
- return true;
127
- }
128
- if (name === "sections") {
129
- sections.value = value;
130
- return true;
90
+ const isActionDetail = (detail) => detail !== null && typeof detail === "object" && !Array.isArray(detail) && (detail["action"] === "align-left" || detail["action"] === "align-center" || detail["action"] === "align-right" || detail["action"] === "background-none" || detail["action"] === "background-gray" || detail["action"] === "background-yellow" || detail["action"] === "background-blue" || detail["action"] === "background-green" || detail["action"] === "background-red" || detail["action"] === "add-row-before" || detail["action"] === "add-row-after" || detail["action"] === "add-column-before" || detail["action"] === "add-column-after" || detail["action"] === "clear-cells" || detail["action"] === "merge-cells" || detail["action"] === "split-cell" || detail["action"] === "delete-row" || detail["action"] === "delete-column" || detail["action"] === "delete-table") && Object.keys(detail).every((key) => ["action"].includes(key));
91
+ const dispatch = createDispatch(root, emit, { checks: { action: isActionDetail } });
92
+ useComponentHost(controllerModule.default, {
93
+ root,
94
+ dispatch,
95
+ props,
96
+ state: {
97
+ alignments,
98
+ structure,
99
+ swatches,
100
+ sections,
101
+ hasOverflow,
102
+ overflowOpen
131
103
  }
132
- if (name === "hasOverflow") {
133
- hasOverflow.value = value;
134
- return true;
135
- }
136
- if (name === "overflowOpen") {
137
- overflowOpen.value = value;
138
- return true;
139
- }
140
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
141
- }
142
- const stops = [];
143
- const host = {
144
- get element() {
145
- return root.value;
146
- },
147
- state: new Proxy({}, {
148
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
149
- set: (_target, name, value) => typeof name === "string" && write(name, value)
150
- }),
151
- refs: {},
152
- elements: new Proxy({}, { get: (_target, name) => {
153
- if (typeof name !== "string" || root.value === null) return void 0;
154
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
155
- } }),
156
- signal(initialValue) {
157
- const value = shallowRef(initialValue);
158
- return {
159
- get: () => value.value,
160
- set: (next) => {
161
- if (!Object.is(value.value, next)) value.value = next;
162
- },
163
- update: (next) => {
164
- const updated = next(value.value);
165
- if (!Object.is(value.value, updated)) value.value = updated;
166
- }
167
- };
168
- },
169
- computed(compute) {
170
- const value = computed(compute);
171
- return { get: () => value.value };
172
- },
173
- effect(run) {
174
- const stop = watchEffect((onCleanup) => {
175
- const cleanup = run();
176
- if (typeof cleanup === "function") onCleanup(cleanup);
177
- }, { flush: "post" });
178
- stops.push(stop);
179
- return stop;
180
- },
181
- on(event, listener) {
182
- const element = root.value;
183
- element?.addEventListener(event, listener);
184
- const off = () => element?.removeEventListener(event, listener);
185
- stops.push(off);
186
- return off;
187
- },
188
- dispatch
189
- };
190
- let cleanup;
191
- onMounted(() => {
192
- Promise.resolve(controllerModule.default(host)).then((result) => {
193
- cleanup = result;
194
- });
195
- });
196
- onBeforeUnmount(() => {
197
- for (const stop of stops.splice(0)) stop();
198
- if (typeof cleanup === "function") cleanup();
199
104
  });
200
105
  return (_ctx, _cache) => {
201
106
  return openBlock(), createElementBlock("div", mergeProps({
@@ -270,6 +175,6 @@ var UiEditorTableToolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_defau
270
175
  ], 16, _hoisted_1);
271
176
  };
272
177
  }
273
- }), [["__scopeId", "data-v-1066cfb2"]]);
178
+ }), [["__scopeId", "data-v-31b70e7c"]]);
274
179
  //#endregion
275
180
  export { UiEditorTableToolbar_default as t };
@@ -23,6 +23,6 @@ var UiEditorToolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
23
23
  }, _ctx.$attrs, { "data-ui-editor-toolbar-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1);
24
24
  };
25
25
  }
26
- }), [["__scopeId", "data-v-0da1a114"]]);
26
+ }), [["__scopeId", "data-v-b71db5ba"]]);
27
27
  //#endregion
28
28
  export { UiEditorToolbar_default as t };
@@ -37,6 +37,6 @@ var UiFloatingActionButton_default = /*#__PURE__*/ _plugin_vue_export_helper_def
37
37
  }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1);
38
38
  };
39
39
  }
40
- }), [["__scopeId", "data-v-b66a2428"]]);
40
+ }), [["__scopeId", "data-v-62b77471"]]);
41
41
  //#endregion
42
42
  export { UiFloatingActionButton_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, watchEffect } from "vue";
3
+ import { createElementBlock, createElementVNode, defineComponent, mergeProps, openBlock, ref, renderSlot } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-form-field/ui-form-field.js";
4
5
  //#region .build/vue/UiFormField.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = { class: "label" };
@@ -27,77 +28,11 @@ var UiFormField_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
27
28
  setup(__props) {
28
29
  const props = __props;
29
30
  const root = ref(null);
30
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
31
- function dispatch(name, detail) {
32
- return root.value?.dispatchEvent(new CustomEvent(name, {
33
- bubbles: true,
34
- composed: true,
35
- detail
36
- })) ?? true;
37
- }
38
- function read(name) {
39
- return props[name];
40
- }
41
- function write(name, value) {
42
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
43
- }
44
- const stops = [];
45
- const host = {
46
- get element() {
47
- return root.value;
48
- },
49
- state: new Proxy({}, {
50
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
51
- set: (_target, name, value) => typeof name === "string" && write(name, value)
52
- }),
53
- refs: {},
54
- elements: new Proxy({}, { get: (_target, name) => {
55
- if (typeof name !== "string" || root.value === null) return void 0;
56
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
57
- } }),
58
- signal(initialValue) {
59
- const value = shallowRef(initialValue);
60
- return {
61
- get: () => value.value,
62
- set: (next) => {
63
- if (!Object.is(value.value, next)) value.value = next;
64
- },
65
- update: (next) => {
66
- const updated = next(value.value);
67
- if (!Object.is(value.value, updated)) value.value = updated;
68
- }
69
- };
70
- },
71
- computed(compute) {
72
- const value = computed(compute);
73
- return { get: () => value.value };
74
- },
75
- effect(run) {
76
- const stop = watchEffect((onCleanup) => {
77
- const cleanup = run();
78
- if (typeof cleanup === "function") onCleanup(cleanup);
79
- }, { flush: "post" });
80
- stops.push(stop);
81
- return stop;
82
- },
83
- on(event, listener) {
84
- const element = root.value;
85
- element?.addEventListener(event, listener);
86
- const off = () => element?.removeEventListener(event, listener);
87
- stops.push(off);
88
- return off;
89
- },
90
- dispatch
91
- };
92
- let cleanup;
93
- onMounted(() => {
94
- Promise.resolve(controllerModule.default(host)).then((result) => {
95
- cleanup = result;
96
- });
97
- });
98
- onBeforeUnmount(() => {
99
- for (const stop of stops.splice(0)) stop();
100
- if (typeof cleanup === "function") cleanup();
31
+ const dispatch = createDispatch(root);
32
+ useComponentHost(controllerModule.default, {
33
+ root,
34
+ dispatch,
35
+ props
101
36
  });
102
37
  return (_ctx, _cache) => {
103
38
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-form-field" }, _ctx.$attrs, {
@@ -111,6 +46,6 @@ var UiFormField_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
111
46
  ], 16);
112
47
  };
113
48
  }
114
- }), [["__scopeId", "data-v-ae3bcdfb"]]);
49
+ }), [["__scopeId", "data-v-605db5c0"]]);
115
50
  //#endregion
116
51
  export { UiFormField_default as t };
@@ -19,6 +19,6 @@ var UiGrid_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
19
19
  return openBlock(), createElementBlock("div", mergeProps({ "data-component": "ui-grid" }, _ctx.$attrs, { "data-ui-grid-state": hostState.value || void 0 }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1);
20
20
  };
21
21
  }
22
- }), [["__scopeId", "data-v-356b2957"]]);
22
+ }), [["__scopeId", "data-v-9635be0b"]]);
23
23
  //#endregion
24
24
  export { UiGrid_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, createCommentVNode, createElementBlock, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderList, shallowRef, watchEffect } from "vue";
3
+ import { Fragment, createCommentVNode, createElementBlock, defineComponent, mergeProps, openBlock, ref, renderList } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-icon/ui-icon.js";
4
5
  //#region .build/vue/UiIcon.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = {
@@ -34,82 +35,12 @@ var UiIcon_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
34
35
  const props = __props;
35
36
  const root = ref(null);
36
37
  const shapes = ref([]);
37
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
38
- function dispatch(name, detail) {
39
- return root.value?.dispatchEvent(new CustomEvent(name, {
40
- bubbles: true,
41
- composed: true,
42
- detail
43
- })) ?? true;
44
- }
45
- function read(name) {
46
- if (name === "shapes") return shapes.value;
47
- return props[name];
48
- }
49
- function write(name, value) {
50
- if (name === "shapes") {
51
- shapes.value = value;
52
- return true;
53
- }
54
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
55
- }
56
- const stops = [];
57
- const host = {
58
- get element() {
59
- return root.value;
60
- },
61
- state: new Proxy({}, {
62
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
63
- set: (_target, name, value) => typeof name === "string" && write(name, value)
64
- }),
65
- refs: {},
66
- elements: new Proxy({}, { get: (_target, name) => {
67
- if (typeof name !== "string" || root.value === null) return void 0;
68
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
69
- } }),
70
- signal(initialValue) {
71
- const value = shallowRef(initialValue);
72
- return {
73
- get: () => value.value,
74
- set: (next) => {
75
- if (!Object.is(value.value, next)) value.value = next;
76
- },
77
- update: (next) => {
78
- const updated = next(value.value);
79
- if (!Object.is(value.value, updated)) value.value = updated;
80
- }
81
- };
82
- },
83
- computed(compute) {
84
- const value = computed(compute);
85
- return { get: () => value.value };
86
- },
87
- effect(run) {
88
- const stop = watchEffect((onCleanup) => {
89
- const cleanup = run();
90
- if (typeof cleanup === "function") onCleanup(cleanup);
91
- }, { flush: "post" });
92
- stops.push(stop);
93
- return stop;
94
- },
95
- on(event, listener) {
96
- const element = root.value;
97
- element?.addEventListener(event, listener);
98
- const off = () => element?.removeEventListener(event, listener);
99
- stops.push(off);
100
- return off;
101
- },
102
- dispatch
103
- };
104
- let cleanup;
105
- onMounted(() => {
106
- Promise.resolve(controllerModule.default(host)).then((result) => {
107
- cleanup = result;
108
- });
109
- });
110
- onBeforeUnmount(() => {
111
- for (const stop of stops.splice(0)) stop();
112
- if (typeof cleanup === "function") cleanup();
38
+ const dispatch = createDispatch(root);
39
+ useComponentHost(controllerModule.default, {
40
+ root,
41
+ dispatch,
42
+ props,
43
+ state: { shapes }
113
44
  });
114
45
  return (_ctx, _cache) => {
115
46
  return openBlock(), createElementBlock("span", mergeProps({
@@ -142,6 +73,6 @@ var UiIcon_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
142
73
  }), 128))]))], 16);
143
74
  };
144
75
  }
145
- }), [["__scopeId", "data-v-b2b50d17"]]);
76
+ }), [["__scopeId", "data-v-7b1048a0"]]);
146
77
  //#endregion
147
78
  export { UiIcon_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, defineComponent, mergeProps, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, shallowRef, watchEffect } from "vue";
3
+ import { computed, createElementBlock, defineComponent, mergeProps, openBlock, ref, renderSlot } from "vue";
3
4
  import * as controllerModule from "@threadlabs/looma/components/ui-icon-button/ui-icon-button.js";
4
5
  //#region .build/vue/UiIconButton.vue?vue&type=script&setup=true&lang.ts
5
6
  var _hoisted_1 = [
@@ -39,77 +40,11 @@ var UiIconButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
39
40
  props.size && `size size=${props.size}`,
40
41
  props.round && "round"
41
42
  ].filter(Boolean).join(" "));
42
- /** Dispatches a component event to Vue listeners and, for controllers and page code, on the root. */
43
- function dispatch(name, detail) {
44
- return root.value?.dispatchEvent(new CustomEvent(name, {
45
- bubbles: true,
46
- composed: true,
47
- detail
48
- })) ?? true;
49
- }
50
- function read(name) {
51
- return props[name];
52
- }
53
- function write(name, value) {
54
- throw new TypeError(`Only declared state is writable; \`${name}\` is not.`);
55
- }
56
- const stops = [];
57
- const host = {
58
- get element() {
59
- return root.value;
60
- },
61
- state: new Proxy({}, {
62
- get: (_target, name) => typeof name === "string" ? read(name) : void 0,
63
- set: (_target, name, value) => typeof name === "string" && write(name, value)
64
- }),
65
- refs: {},
66
- elements: new Proxy({}, { get: (_target, name) => {
67
- if (typeof name !== "string" || root.value === null) return void 0;
68
- return (root.value instanceof HTMLFormElement ? root.value : root.value.querySelector("form"))?.elements.namedItem(name) ?? root.value.querySelector(`[name="${CSS.escape(name)}"]`) ?? void 0;
69
- } }),
70
- signal(initialValue) {
71
- const value = shallowRef(initialValue);
72
- return {
73
- get: () => value.value,
74
- set: (next) => {
75
- if (!Object.is(value.value, next)) value.value = next;
76
- },
77
- update: (next) => {
78
- const updated = next(value.value);
79
- if (!Object.is(value.value, updated)) value.value = updated;
80
- }
81
- };
82
- },
83
- computed(compute) {
84
- const value = computed(compute);
85
- return { get: () => value.value };
86
- },
87
- effect(run) {
88
- const stop = watchEffect((onCleanup) => {
89
- const cleanup = run();
90
- if (typeof cleanup === "function") onCleanup(cleanup);
91
- }, { flush: "post" });
92
- stops.push(stop);
93
- return stop;
94
- },
95
- on(event, listener) {
96
- const element = root.value;
97
- element?.addEventListener(event, listener);
98
- const off = () => element?.removeEventListener(event, listener);
99
- stops.push(off);
100
- return off;
101
- },
102
- dispatch
103
- };
104
- let cleanup;
105
- onMounted(() => {
106
- Promise.resolve(controllerModule.default(host)).then((result) => {
107
- cleanup = result;
108
- });
109
- });
110
- onBeforeUnmount(() => {
111
- for (const stop of stops.splice(0)) stop();
112
- if (typeof cleanup === "function") cleanup();
43
+ const dispatch = createDispatch(root);
44
+ useComponentHost(controllerModule.default, {
45
+ root,
46
+ dispatch,
47
+ props
113
48
  });
114
49
  return (_ctx, _cache) => {
115
50
  return openBlock(), createElementBlock("button", mergeProps({
@@ -124,6 +59,6 @@ var UiIconButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
124
59
  }), [renderSlot(_ctx.$slots, "default")], 16, _hoisted_1);
125
60
  };
126
61
  }
127
- }), [["__scopeId", "data-v-80722d12"]]);
62
+ }), [["__scopeId", "data-v-23aa723d"]]);
128
63
  //#endregion
129
64
  export { UiIconButton_default as t };