@mulmoclaude/collection-plugin 0.5.21 → 0.6.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.
package/dist/vue.cjs CHANGED
@@ -26,6 +26,7 @@ let vue = require("vue");
26
26
  let vue_i18n = require("vue-i18n");
27
27
  let vuedraggable = require("vuedraggable");
28
28
  vuedraggable = __toESM(vuedraggable, 1);
29
+ let _mulmoclaude_core_remote_view = require("@mulmoclaude/core/remote-view");
29
30
  let _mulmoclaude_core_translation_client = require("@mulmoclaude/core/translation/client");
30
31
  //#region src/vue/uiContext.ts
31
32
  var current = null;
@@ -1209,18 +1210,18 @@ var CollectionRecordModal_default = /* @__PURE__ */ (0, vue.defineComponent)({
1209
1210
  });
1210
1211
  //#endregion
1211
1212
  //#region src/vue/components/CollectionCalendarView.vue?vue&type=script&setup=true&lang.ts
1212
- var _hoisted_1$13 = {
1213
+ var _hoisted_1$14 = {
1213
1214
  class: "flex flex-col gap-3",
1214
1215
  "data-testid": "collection-calendar"
1215
1216
  };
1216
- var _hoisted_2$12 = { class: "flex items-center gap-2" };
1217
- var _hoisted_3$12 = ["aria-label"];
1218
- var _hoisted_4$12 = ["aria-label"];
1219
- var _hoisted_5$11 = {
1217
+ var _hoisted_2$13 = { class: "flex items-center gap-2" };
1218
+ var _hoisted_3$13 = ["aria-label"];
1219
+ var _hoisted_4$13 = ["aria-label"];
1220
+ var _hoisted_5$12 = {
1220
1221
  class: "text-sm font-bold text-slate-800 flex-1",
1221
1222
  "data-testid": "collection-calendar-month"
1222
1223
  };
1223
- var _hoisted_6$10 = { class: "grid grid-cols-7 gap-1 text-[10px] font-bold text-slate-400 uppercase tracking-wider select-none" };
1224
+ var _hoisted_6$11 = { class: "grid grid-cols-7 gap-1 text-[10px] font-bold text-slate-400 uppercase tracking-wider select-none" };
1224
1225
  var _hoisted_7$10 = { class: "grid grid-cols-7 gap-1" };
1225
1226
  var _hoisted_8$10 = [
1226
1227
  "aria-label",
@@ -1350,23 +1351,23 @@ var CollectionCalendarView_default = /* @__PURE__ */ (0, vue.defineComponent)({
1350
1351
  viewMonth.value = now.getMonth() + 1;
1351
1352
  }
1352
1353
  return (_ctx, _cache) => {
1353
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$13, [
1354
- (0, vue.createElementVNode)("div", _hoisted_2$12, [
1354
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$14, [
1355
+ (0, vue.createElementVNode)("div", _hoisted_2$13, [
1355
1356
  (0, vue.createElementVNode)("button", {
1356
1357
  type: "button",
1357
1358
  class: "h-8 w-8 flex items-center justify-center rounded text-slate-500 hover:bg-slate-100 transition-colors",
1358
1359
  "aria-label": (0, vue.unref)(t)("collectionsView.calendarPrevMonth"),
1359
1360
  "data-testid": "collection-calendar-prev",
1360
1361
  onClick: _cache[0] || (_cache[0] = ($event) => stepMonth(-1))
1361
- }, [..._cache[2] || (_cache[2] = [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "chevron_left", -1)])], 8, _hoisted_3$12),
1362
+ }, [..._cache[2] || (_cache[2] = [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "chevron_left", -1)])], 8, _hoisted_3$13),
1362
1363
  (0, vue.createElementVNode)("button", {
1363
1364
  type: "button",
1364
1365
  class: "h-8 w-8 flex items-center justify-center rounded text-slate-500 hover:bg-slate-100 transition-colors",
1365
1366
  "aria-label": (0, vue.unref)(t)("collectionsView.calendarNextMonth"),
1366
1367
  "data-testid": "collection-calendar-next",
1367
1368
  onClick: _cache[1] || (_cache[1] = ($event) => stepMonth(1))
1368
- }, [..._cache[3] || (_cache[3] = [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "chevron_right", -1)])], 8, _hoisted_4$12),
1369
- (0, vue.createElementVNode)("h3", _hoisted_5$11, (0, vue.toDisplayString)(monthLabel.value), 1),
1369
+ }, [..._cache[3] || (_cache[3] = [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "chevron_right", -1)])], 8, _hoisted_4$13),
1370
+ (0, vue.createElementVNode)("h3", _hoisted_5$12, (0, vue.toDisplayString)(monthLabel.value), 1),
1370
1371
  (0, vue.createElementVNode)("button", {
1371
1372
  type: "button",
1372
1373
  class: "h-8 px-2.5 flex items-center gap-1 rounded border border-slate-200 bg-white text-slate-600 hover:bg-slate-50 text-xs font-bold transition-colors",
@@ -1374,7 +1375,7 @@ var CollectionCalendarView_default = /* @__PURE__ */ (0, vue.defineComponent)({
1374
1375
  onClick: goToday
1375
1376
  }, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.calendarToday")), 1)
1376
1377
  ]),
1377
- (0, vue.createElementVNode)("div", _hoisted_6$10, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(weekdayLabels.value, (label, idx) => {
1378
+ (0, vue.createElementVNode)("div", _hoisted_6$11, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(weekdayLabels.value, (label, idx) => {
1378
1379
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
1379
1380
  key: idx,
1380
1381
  class: "px-1 py-1 text-center"
@@ -1415,18 +1416,18 @@ var CollectionCalendarView_default = /* @__PURE__ */ (0, vue.defineComponent)({
1415
1416
  });
1416
1417
  //#endregion
1417
1418
  //#region src/vue/components/CollectionDayView.vue?vue&type=script&setup=true&lang.ts
1418
- var _hoisted_1$12 = { class: "flex items-center gap-2 border-b border-slate-200 px-4 py-3" };
1419
- var _hoisted_2$11 = {
1419
+ var _hoisted_1$13 = { class: "flex items-center gap-2 border-b border-slate-200 px-4 py-3" };
1420
+ var _hoisted_2$12 = {
1420
1421
  class: "flex-1 text-sm font-bold text-slate-800",
1421
1422
  "data-testid": "collection-day-view-title"
1422
1423
  };
1423
- var _hoisted_3$11 = ["aria-label"];
1424
- var _hoisted_4$11 = ["aria-label"];
1425
- var _hoisted_5$10 = {
1424
+ var _hoisted_3$12 = ["aria-label"];
1425
+ var _hoisted_4$12 = ["aria-label"];
1426
+ var _hoisted_5$11 = {
1426
1427
  key: 0,
1427
1428
  class: "px-4 py-10 text-center text-sm text-slate-400"
1428
1429
  };
1429
- var _hoisted_6$9 = { class: "absolute -top-2 left-0 w-10 pr-1 text-right text-[10px] tabular-nums text-slate-400" };
1430
+ var _hoisted_6$10 = { class: "absolute -top-2 left-0 w-10 pr-1 text-right text-[10px] tabular-nums text-slate-400" };
1430
1431
  var _hoisted_7$9 = {
1431
1432
  class: "absolute inset-y-0 right-0",
1432
1433
  style: { "left": "2.75rem" }
@@ -1607,8 +1608,8 @@ var CollectionDayView_default = /* @__PURE__ */ (0, vue.defineComponent)({
1607
1608
  role: "dialog",
1608
1609
  "aria-modal": "true"
1609
1610
  }, [(0, vue.createElementVNode)("div", { class: (0, vue.normalizeClass)(["flex min-h-0 flex-col", __props.showDetail ? "w-80 shrink-0 border-r border-slate-200" : "w-full"]) }, [
1610
- (0, vue.createElementVNode)("div", _hoisted_1$12, [
1611
- (0, vue.createElementVNode)("h3", _hoisted_2$11, (0, vue.toDisplayString)(dayLabel.value), 1),
1611
+ (0, vue.createElementVNode)("div", _hoisted_1$13, [
1612
+ (0, vue.createElementVNode)("h3", _hoisted_2$12, (0, vue.toDisplayString)(dayLabel.value), 1),
1612
1613
  __props.canCreate ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
1613
1614
  key: 0,
1614
1615
  type: "button",
@@ -1616,16 +1617,16 @@ var CollectionDayView_default = /* @__PURE__ */ (0, vue.defineComponent)({
1616
1617
  "aria-label": (0, vue.unref)(t)("collectionsView.calendarCreateOn", { date: dayKey.value }),
1617
1618
  "data-testid": "collection-day-view-create",
1618
1619
  onClick: onCreate
1619
- }, [..._cache[3] || (_cache[3] = [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "add", -1)])], 8, _hoisted_3$11)) : (0, vue.createCommentVNode)("", true),
1620
+ }, [..._cache[3] || (_cache[3] = [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "add", -1)])], 8, _hoisted_3$12)) : (0, vue.createCommentVNode)("", true),
1620
1621
  (0, vue.createElementVNode)("button", {
1621
1622
  type: "button",
1622
1623
  class: "h-8 w-8 flex items-center justify-center rounded text-slate-500 hover:bg-slate-100 transition-colors",
1623
1624
  "aria-label": (0, vue.unref)(t)("collectionsView.dayViewClose"),
1624
1625
  "data-testid": "collection-day-view-close",
1625
1626
  onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
1626
- }, [..._cache[4] || (_cache[4] = [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "close", -1)])], 8, _hoisted_4$11)
1627
+ }, [..._cache[4] || (_cache[4] = [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "close", -1)])], 8, _hoisted_4$12)
1627
1628
  ]),
1628
- timedEntries.value.length === 0 && allDayEntries.value.length === 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_5$10, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.dayViewEmpty")), 1)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
1629
+ timedEntries.value.length === 0 && allDayEntries.value.length === 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_5$11, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.dayViewEmpty")), 1)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
1629
1630
  key: 1,
1630
1631
  ref_key: "scrollEl",
1631
1632
  ref: scrollEl,
@@ -1639,7 +1640,7 @@ var CollectionDayView_default = /* @__PURE__ */ (0, vue.defineComponent)({
1639
1640
  key: hour,
1640
1641
  class: "absolute left-0 right-0 border-t border-slate-100",
1641
1642
  style: (0, vue.normalizeStyle)({ top: `${(hour - 1) * HOUR_PX}px` })
1642
- }, [(0, vue.createElementVNode)("span", _hoisted_6$9, (0, vue.toDisplayString)(hourLabel(hour - 1)), 1)], 4);
1643
+ }, [(0, vue.createElementVNode)("span", _hoisted_6$10, (0, vue.toDisplayString)(hourLabel(hour - 1)), 1)], 4);
1643
1644
  }), 64)), (0, vue.createElementVNode)("div", _hoisted_7$9, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(timedEntries.value, (entry) => {
1644
1645
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
1645
1646
  key: entry.id,
@@ -1674,15 +1675,15 @@ var CollectionDayView_default = /* @__PURE__ */ (0, vue.defineComponent)({
1674
1675
  });
1675
1676
  //#endregion
1676
1677
  //#region src/vue/components/CollectionKanbanView.vue?vue&type=script&setup=true&lang.ts
1677
- var _hoisted_1$11 = {
1678
+ var _hoisted_1$12 = {
1678
1679
  class: "h-full overflow-x-auto overflow-y-hidden",
1679
1680
  "data-testid": "collection-kanban"
1680
1681
  };
1681
- var _hoisted_2$10 = { class: "flex gap-3 h-full p-1 min-w-max" };
1682
- var _hoisted_3$10 = ["data-testid"];
1683
- var _hoisted_4$10 = { class: "flex items-center justify-between px-3 py-2 border-b border-slate-200" };
1684
- var _hoisted_5$9 = { class: "flex items-center gap-2 min-w-0" };
1685
- var _hoisted_6$8 = ["title"];
1682
+ var _hoisted_2$11 = { class: "flex gap-3 h-full p-1 min-w-max" };
1683
+ var _hoisted_3$11 = ["data-testid"];
1684
+ var _hoisted_4$11 = { class: "flex items-center justify-between px-3 py-2 border-b border-slate-200" };
1685
+ var _hoisted_5$10 = { class: "flex items-center gap-2 min-w-0" };
1686
+ var _hoisted_6$9 = ["title"];
1686
1687
  var _hoisted_7$8 = { class: "text-[11px] text-slate-400 shrink-0" };
1687
1688
  var _hoisted_8$8 = [
1688
1689
  "data-testid",
@@ -1795,15 +1796,15 @@ var CollectionKanbanView_default = /* @__PURE__ */ (0, vue.defineComponent)({
1795
1796
  emit("move", itemId(item), next);
1796
1797
  }
1797
1798
  return (_ctx, _cache) => {
1798
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$11, [(0, vue.createElementVNode)("div", _hoisted_2$10, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(columns.value, (column) => {
1799
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$12, [(0, vue.createElementVNode)("div", _hoisted_2$11, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(columns.value, (column) => {
1799
1800
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
1800
1801
  key: column.value,
1801
1802
  "data-testid": `collection-kanban-column-${column.value || "uncategorized"}`,
1802
1803
  class: "w-72 shrink-0 flex flex-col bg-slate-100 rounded-lg"
1803
- }, [(0, vue.createElementVNode)("div", _hoisted_4$10, [(0, vue.createElementVNode)("div", _hoisted_5$9, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(["w-2 h-2 rounded-full shrink-0", (0, vue.unref)(_mulmoclaude_core_collection.resolveEnumColor)(__props.schema, __props.groupField, column.value).dot]) }, null, 2), (0, vue.createElementVNode)("span", {
1804
+ }, [(0, vue.createElementVNode)("div", _hoisted_4$11, [(0, vue.createElementVNode)("div", _hoisted_5$10, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(["w-2 h-2 rounded-full shrink-0", (0, vue.unref)(_mulmoclaude_core_collection.resolveEnumColor)(__props.schema, __props.groupField, column.value).dot]) }, null, 2), (0, vue.createElementVNode)("span", {
1804
1805
  class: "font-semibold text-xs text-slate-600 truncate",
1805
1806
  title: column.label
1806
- }, (0, vue.toDisplayString)(column.label), 9, _hoisted_6$8)]), (0, vue.createElementVNode)("span", _hoisted_7$8, (0, vue.toDisplayString)(itemsByColumn(column.value).length), 1)]), (0, vue.createVNode)((0, vue.unref)(vuedraggable.default), {
1807
+ }, (0, vue.toDisplayString)(column.label), 9, _hoisted_6$9)]), (0, vue.createElementVNode)("span", _hoisted_7$8, (0, vue.toDisplayString)(itemsByColumn(column.value).length), 1)]), (0, vue.createVNode)((0, vue.unref)(vuedraggable.default), {
1807
1808
  "model-value": itemsByColumn(column.value),
1808
1809
  "item-key": __props.schema.primaryKey,
1809
1810
  group: "collection-kanban-cards",
@@ -1834,7 +1835,7 @@ var CollectionKanbanView_default = /* @__PURE__ */ (0, vue.defineComponent)({
1834
1835
  "model-value",
1835
1836
  "item-key",
1836
1837
  "onChange"
1837
- ])], 8, _hoisted_3$10);
1838
+ ])], 8, _hoisted_3$11);
1838
1839
  }), 128))])]);
1839
1840
  };
1840
1841
  }
@@ -1864,16 +1865,16 @@ function activatePathLink(event, path, stop = false) {
1864
1865
  }
1865
1866
  //#endregion
1866
1867
  //#region src/vue/components/CollectionEmbedView.vue?vue&type=script&setup=true&lang.ts
1867
- var _hoisted_1$10 = [
1868
+ var _hoisted_1$11 = [
1868
1869
  "href",
1869
1870
  "tabindex",
1870
1871
  "data-testid"
1871
1872
  ];
1872
- var _hoisted_2$9 = { class: "flex items-center justify-between text-[10px] font-bold text-indigo-600/90 tracking-wider uppercase" };
1873
- var _hoisted_3$9 = { class: "flex items-center gap-1.5" };
1874
- var _hoisted_4$9 = { class: "bg-indigo-100/60 text-indigo-700 px-1.5 py-0.5 rounded font-mono font-medium lowercase" };
1875
- var _hoisted_5$8 = { class: "grid gap-x-4 gap-y-3 grid-cols-2" };
1876
- var _hoisted_6$7 = { class: "text-[10px] font-semibold text-slate-400 uppercase tracking-wide" };
1873
+ var _hoisted_2$10 = { class: "flex items-center justify-between text-[10px] font-bold text-indigo-600/90 tracking-wider uppercase" };
1874
+ var _hoisted_3$10 = { class: "flex items-center gap-1.5" };
1875
+ var _hoisted_4$10 = { class: "bg-indigo-100/60 text-indigo-700 px-1.5 py-0.5 rounded font-mono font-medium lowercase" };
1876
+ var _hoisted_5$9 = { class: "grid gap-x-4 gap-y-3 grid-cols-2" };
1877
+ var _hoisted_6$8 = { class: "text-[10px] font-semibold text-slate-400 uppercase tracking-wide" };
1877
1878
  var _hoisted_7$7 = ["data-testid"];
1878
1879
  var _hoisted_8$7 = {
1879
1880
  key: 0,
@@ -1917,17 +1918,17 @@ var CollectionEmbedView_default = /* @__PURE__ */ (0, vue.defineComponent)({
1917
1918
  onKeydown: [_cache[1] || (_cache[1] = (0, vue.withKeys)(($event) => (0, vue.unref)(activateRefLink)($event, __props.view.targetSlug, __props.view.recordId), ["enter"])), _cache[2] || (_cache[2] = (0, vue.withKeys)(($event) => (0, vue.unref)(activateRefLink)($event, __props.view.targetSlug, __props.view.recordId), ["space"]))]
1918
1919
  }, [
1919
1920
  _cache[7] || (_cache[7] = (0, vue.createElementVNode)("div", { class: "absolute left-0 top-0 bottom-0 w-1 bg-indigo-500 rounded-l-xl transition-all duration-300 group-hover:w-1.5 group-hover:bg-indigo-600" }, null, -1)),
1920
- (0, vue.createElementVNode)("div", _hoisted_2$9, [(0, vue.createElementVNode)("div", _hoisted_3$9, [_cache[6] || (_cache[6] = (0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "link", -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(__props.view.targetSlug), 1)]), (0, vue.createElementVNode)("span", _hoisted_4$9, (0, vue.toDisplayString)(__props.view.recordId), 1)]),
1921
- (0, vue.createElementVNode)("div", _hoisted_5$8, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.view.rows, (row) => {
1921
+ (0, vue.createElementVNode)("div", _hoisted_2$10, [(0, vue.createElementVNode)("div", _hoisted_3$10, [_cache[6] || (_cache[6] = (0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "link", -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(__props.view.targetSlug), 1)]), (0, vue.createElementVNode)("span", _hoisted_4$10, (0, vue.toDisplayString)(__props.view.recordId), 1)]),
1922
+ (0, vue.createElementVNode)("div", _hoisted_5$9, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.view.rows, (row) => {
1922
1923
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
1923
1924
  key: row.key,
1924
1925
  class: "space-y-0.5"
1925
- }, [(0, vue.createElementVNode)("div", _hoisted_6$7, (0, vue.toDisplayString)(row.label), 1), (0, vue.createElementVNode)("div", {
1926
+ }, [(0, vue.createElementVNode)("div", _hoisted_6$8, (0, vue.toDisplayString)(row.label), 1), (0, vue.createElementVNode)("div", {
1926
1927
  class: "text-xs text-slate-700 font-medium break-words",
1927
1928
  "data-testid": `collections-embed-${__props.fieldKey}-${row.key}`
1928
1929
  }, [row.type === "boolean" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [row.value === true ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_8$7, "check_circle")) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_9$7, "—"))], 64)) : row.type === "markdown" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", _hoisted_10$7, (0, vue.toDisplayString)(row.display), 1)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_11$7, (0, vue.toDisplayString)(row.display), 1))], 8, _hoisted_7$7)]);
1929
1930
  }), 128))])
1930
- ], 40, _hoisted_1$10)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
1931
+ ], 40, _hoisted_1$11)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
1931
1932
  key: 1,
1932
1933
  class: "relative rounded-xl border border-red-100 bg-red-50/30 p-4 pl-5 shadow-sm",
1933
1934
  "data-testid": `collections-embed-${__props.fieldKey}`
@@ -1955,12 +1956,12 @@ var CollectionEmbedView_default = /* @__PURE__ */ (0, vue.defineComponent)({
1955
1956
  });
1956
1957
  //#endregion
1957
1958
  //#region src/vue/components/CollectionRecordPanel.vue?vue&type=script&setup=true&lang.ts
1958
- var _hoisted_1$9 = { class: "flex items-center gap-2 mb-4" };
1959
- var _hoisted_2$8 = { class: "flex-1 min-w-0" };
1960
- var _hoisted_3$8 = { class: "block text-[9px] font-bold text-slate-400 uppercase tracking-wider" };
1961
- var _hoisted_4$8 = ["data-testid"];
1962
- var _hoisted_5$7 = ["disabled"];
1963
- var _hoisted_6$6 = {
1959
+ var _hoisted_1$10 = { class: "flex items-center gap-2 mb-4" };
1960
+ var _hoisted_2$9 = { class: "flex-1 min-w-0" };
1961
+ var _hoisted_3$9 = { class: "block text-[9px] font-bold text-slate-400 uppercase tracking-wider" };
1962
+ var _hoisted_4$9 = ["data-testid"];
1963
+ var _hoisted_5$8 = ["disabled"];
1964
+ var _hoisted_6$7 = {
1964
1965
  key: 1,
1965
1966
  class: "flex items-center gap-2"
1966
1967
  };
@@ -2324,10 +2325,10 @@ var CollectionRecordPanel_default = /* @__PURE__ */ (0, vue.defineComponent)({
2324
2325
  onSubmit: _cache[5] || (_cache[5] = (0, vue.withModifiers)(($event) => emit("submit"), ["prevent"]))
2325
2326
  }, {
2326
2327
  default: (0, vue.withCtx)(() => [
2327
- (0, vue.createElementVNode)("div", _hoisted_1$9, [(0, vue.createElementVNode)("div", _hoisted_2$8, [(0, vue.createElementVNode)("span", _hoisted_3$8, (0, vue.toDisplayString)(__props.collection.title), 1), (0, vue.createElementVNode)("h2", {
2328
+ (0, vue.createElementVNode)("div", _hoisted_1$10, [(0, vue.createElementVNode)("div", _hoisted_2$9, [(0, vue.createElementVNode)("span", _hoisted_3$9, (0, vue.toDisplayString)(__props.collection.title), 1), (0, vue.createElementVNode)("h2", {
2328
2329
  class: "text-base font-bold text-slate-800 truncate",
2329
2330
  "data-testid": editing.value ? "collections-edit-title" : "collections-detail-title"
2330
- }, (0, vue.toDisplayString)(headerTitle.value), 9, _hoisted_4$8)]), editing.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createElementVNode)("button", {
2331
+ }, (0, vue.toDisplayString)(headerTitle.value), 9, _hoisted_4$9)]), editing.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createElementVNode)("button", {
2331
2332
  type: "button",
2332
2333
  class: "h-8 px-2.5 rounded text-xs font-bold text-slate-500 hover:bg-slate-200/50 transition-colors",
2333
2334
  "data-testid": "collections-editor-cancel",
@@ -2337,7 +2338,7 @@ var CollectionRecordPanel_default = /* @__PURE__ */ (0, vue.defineComponent)({
2337
2338
  class: "h-8 px-2.5 rounded bg-indigo-600 text-white font-bold text-xs hover:bg-indigo-700 disabled:opacity-50 transition-all shadow-sm shadow-indigo-600/10",
2338
2339
  disabled: __props.saving,
2339
2340
  "data-testid": "collections-editor-save"
2340
- }, (0, vue.toDisplayString)(__props.saving ? (0, vue.unref)(t)("common.saving") : (0, vue.unref)(t)("common.save")), 9, _hoisted_5$7)], 64)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_6$6, [
2341
+ }, (0, vue.toDisplayString)(__props.saving ? (0, vue.unref)(t)("common.saving") : (0, vue.unref)(t)("common.save")), 9, _hoisted_5$8)], 64)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_6$7, [
2341
2342
  ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.visibleActions, (action) => {
2342
2343
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
2343
2344
  key: action.id,
@@ -2618,15 +2619,15 @@ var CollectionRecordPanel_default = /* @__PURE__ */ (0, vue.defineComponent)({
2618
2619
  });
2619
2620
  //#endregion
2620
2621
  //#region src/vue/components/CollectionViewConfigModal.vue?vue&type=script&setup=true&lang.ts
2621
- var _hoisted_1$8 = {
2622
+ var _hoisted_1$9 = {
2622
2623
  "data-testid": "collection-config-modal",
2623
2624
  class: "flex flex-col overflow-hidden"
2624
2625
  };
2625
- var _hoisted_2$7 = { class: "flex items-center justify-between gap-2 border-b border-slate-100 px-5 py-3" };
2626
- var _hoisted_3$7 = { class: "text-sm font-bold text-slate-700" };
2627
- var _hoisted_4$7 = ["title", "aria-label"];
2628
- var _hoisted_5$6 = { class: "overflow-y-auto px-5 py-4" };
2629
- var _hoisted_6$5 = { class: "mb-2 text-[10px] font-bold uppercase tracking-wider text-slate-400" };
2626
+ var _hoisted_2$8 = { class: "flex items-center justify-between gap-2 border-b border-slate-100 px-5 py-3" };
2627
+ var _hoisted_3$8 = { class: "text-sm font-bold text-slate-700" };
2628
+ var _hoisted_4$8 = ["title", "aria-label"];
2629
+ var _hoisted_5$7 = { class: "overflow-y-auto px-5 py-4" };
2630
+ var _hoisted_6$6 = { class: "mb-2 text-[10px] font-bold uppercase tracking-wider text-slate-400" };
2630
2631
  var _hoisted_7$5 = {
2631
2632
  key: 0,
2632
2633
  class: "mb-3 rounded border border-rose-200 bg-rose-50 px-3 py-2 text-xs font-medium text-rose-600",
@@ -2690,15 +2691,15 @@ var CollectionViewConfigModal_default = /* @__PURE__ */ (0, vue.defineComponent)
2690
2691
  }
2691
2692
  return (_ctx, _cache) => {
2692
2693
  return (0, vue.openBlock)(), (0, vue.createBlock)(CollectionRecordModal_default, { onClose: _cache[1] || (_cache[1] = ($event) => emit("close")) }, {
2693
- default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", _hoisted_1$8, [(0, vue.createElementVNode)("header", _hoisted_2$7, [(0, vue.createElementVNode)("h2", _hoisted_3$7, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.config.title", { title: __props.title })), 1), (0, vue.createElementVNode)("button", {
2694
+ default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", _hoisted_1$9, [(0, vue.createElementVNode)("header", _hoisted_2$8, [(0, vue.createElementVNode)("h2", _hoisted_3$8, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.config.title", { title: __props.title })), 1), (0, vue.createElementVNode)("button", {
2694
2695
  type: "button",
2695
2696
  class: "h-8 w-8 flex items-center justify-center rounded text-slate-400 hover:bg-slate-50 hover:text-slate-600",
2696
2697
  title: (0, vue.unref)(t)("common.close"),
2697
2698
  "aria-label": (0, vue.unref)(t)("common.close"),
2698
2699
  "data-testid": "collection-config-close",
2699
2700
  onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
2700
- }, [..._cache[2] || (_cache[2] = [(0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "close", -1)])], 8, _hoisted_4$7)]), (0, vue.createElementVNode)("div", _hoisted_5$6, [
2701
- (0, vue.createElementVNode)("h3", _hoisted_6$5, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.config.viewsHeading")), 1),
2701
+ }, [..._cache[2] || (_cache[2] = [(0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "close", -1)])], 8, _hoisted_4$8)]), (0, vue.createElementVNode)("div", _hoisted_5$7, [
2702
+ (0, vue.createElementVNode)("h3", _hoisted_6$6, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.config.viewsHeading")), 1),
2702
2703
  error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("p", _hoisted_7$5, (0, vue.toDisplayString)(error.value), 1)) : (0, vue.createCommentVNode)("", true),
2703
2704
  __props.views.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("ul", _hoisted_8$5, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.views, (view) => {
2704
2705
  return (0, vue.openBlock)(), (0, vue.createElementBlock)("li", {
@@ -2726,19 +2727,19 @@ var CollectionViewConfigModal_default = /* @__PURE__ */ (0, vue.defineComponent)
2726
2727
  });
2727
2728
  //#endregion
2728
2729
  //#region src/vue/components/CollectionCustomView.vue?vue&type=script&setup=true&lang.ts
2729
- var _hoisted_1$7 = { class: "custom-view-container" };
2730
- var _hoisted_2$6 = {
2730
+ var _hoisted_1$8 = { class: "custom-view-container" };
2731
+ var _hoisted_2$7 = {
2731
2732
  key: 0,
2732
2733
  class: "custom-view-message",
2733
2734
  role: "alert",
2734
2735
  "data-testid": "collection-custom-view-error"
2735
2736
  };
2736
- var _hoisted_3$6 = {
2737
+ var _hoisted_3$7 = {
2737
2738
  key: 1,
2738
2739
  class: "custom-view-message",
2739
2740
  "data-testid": "collection-custom-view-loading"
2740
2741
  };
2741
- var _hoisted_4$6 = ["title", "srcdoc"];
2742
+ var _hoisted_4$7 = ["title", "srcdoc"];
2742
2743
  var REMINT_LEAD_MS = 6e4;
2743
2744
  var MIN_REMINT_DELAY_MS = 1e4;
2744
2745
  var CollectionCustomView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vue.defineComponent)({
@@ -2860,7 +2861,7 @@ var CollectionCustomView_vue_vue_type_script_setup_true_lang_default = /*@__PURE
2860
2861
  window.removeEventListener("message", onWindowMessage);
2861
2862
  });
2862
2863
  return (_ctx, _cache) => {
2863
- return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$7, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$6, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.customViewError", { error: error.value })), 1)) : loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$6, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.customViewLoading")), 1)) : srcdoc.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("iframe", {
2864
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$8, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$7, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.customViewError", { error: error.value })), 1)) : loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$7, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.customViewLoading")), 1)) : srcdoc.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("iframe", {
2864
2865
  ref_key: "iframeEl",
2865
2866
  ref: iframeEl,
2866
2867
  key: __props.view.id,
@@ -2869,7 +2870,7 @@ var CollectionCustomView_vue_vue_type_script_setup_true_lang_default = /*@__PURE
2869
2870
  srcdoc: srcdoc.value,
2870
2871
  sandbox: "allow-scripts allow-popups allow-popups-to-escape-sandbox",
2871
2872
  class: "w-full h-full border-0"
2872
- }, null, 8, _hoisted_4$6)) : (0, vue.createCommentVNode)("", true)]);
2873
+ }, null, 8, _hoisted_4$7)) : (0, vue.createCommentVNode)("", true)]);
2873
2874
  };
2874
2875
  }
2875
2876
  });
@@ -2884,6 +2885,110 @@ var _plugin_vue_export_helper_default = (sfc, props) => {
2884
2885
  //#region src/vue/components/CollectionCustomView.vue
2885
2886
  var CollectionCustomView_default = /*#__PURE__*/ _plugin_vue_export_helper_default(CollectionCustomView_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-b22228db"]]);
2886
2887
  //#endregion
2888
+ //#region src/vue/components/CollectionRemoteViewPreview.vue?vue&type=script&setup=true&lang.ts
2889
+ var _hoisted_1$7 = {
2890
+ class: "remote-preview-container",
2891
+ "data-testid": "collection-remote-view-preview"
2892
+ };
2893
+ var _hoisted_2$6 = {
2894
+ key: 0,
2895
+ class: "remote-preview-message",
2896
+ role: "alert",
2897
+ "data-testid": "collection-remote-view-error"
2898
+ };
2899
+ var _hoisted_3$6 = {
2900
+ key: 1,
2901
+ class: "remote-preview-message",
2902
+ "data-testid": "collection-remote-view-loading"
2903
+ };
2904
+ var _hoisted_4$6 = { class: "phone-frame" };
2905
+ var _hoisted_5$6 = ["title", "srcdoc"];
2906
+ var _hoisted_6$5 = {
2907
+ class: "remote-preview-caption",
2908
+ "data-testid": "collection-remote-view-size"
2909
+ };
2910
+ //#endregion
2911
+ //#region src/vue/components/CollectionRemoteViewPreview.vue
2912
+ var CollectionRemoteViewPreview_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ (0, vue.defineComponent)({
2913
+ __name: "CollectionRemoteViewPreview",
2914
+ props: {
2915
+ slug: {},
2916
+ view: {},
2917
+ primaryKey: {},
2918
+ items: {}
2919
+ },
2920
+ emits: ["startChat"],
2921
+ setup(__props, { emit: __emit }) {
2922
+ const { t } = useCollectionI18n();
2923
+ const props = __props;
2924
+ const emit = __emit;
2925
+ const loading = (0, vue.ref)(true);
2926
+ const error = (0, vue.ref)(null);
2927
+ const srcdoc = (0, vue.ref)(null);
2928
+ const bytes = (0, vue.ref)(0);
2929
+ const iframeEl = (0, vue.ref)(null);
2930
+ const sizeCaption = (0, vue.computed)(() => `${Math.max(1, Math.round(bytes.value / 1024))} KB / ${Math.round(_mulmoclaude_core_remote_view.REMOTE_VIEW_MAX_BYTES / 1024)} KB`);
2931
+ let loadSeq = 0;
2932
+ async function load() {
2933
+ const seq = ++loadSeq;
2934
+ const stale = () => seq !== loadSeq;
2935
+ loading.value = true;
2936
+ error.value = null;
2937
+ srcdoc.value = null;
2938
+ const binding = collectionUi();
2939
+ try {
2940
+ const resp = await binding.fetchRemoteView?.(props.slug, props.view.id, binding.localeTag());
2941
+ if (stale()) return;
2942
+ if (!resp) {
2943
+ error.value = "fetchRemoteView is not wired on this host";
2944
+ return;
2945
+ }
2946
+ if (!resp.ok) {
2947
+ error.value = resp.error;
2948
+ return;
2949
+ }
2950
+ bytes.value = resp.data.bytes;
2951
+ srcdoc.value = resp.data.srcdoc;
2952
+ } catch (err) {
2953
+ if (!stale()) error.value = (0, _mulmoclaude_core_collection.errorMessage)(err);
2954
+ } finally {
2955
+ if (!stale()) loading.value = false;
2956
+ }
2957
+ }
2958
+ (0, vue.watch)([
2959
+ () => props.slug,
2960
+ () => props.view.id,
2961
+ () => collectionUi().localeTag()
2962
+ ], () => void load(), { immediate: true });
2963
+ function onWindowMessage(event) {
2964
+ const target = event.source;
2965
+ if (!target || target !== iframeEl.value?.contentWindow) return;
2966
+ (0, _mulmoclaude_core_remote_view.handleRemoteViewMessage)(event.data, {
2967
+ slug: props.slug,
2968
+ getPage: (request) => (0, _mulmoclaude_core_remote_view.pageFromItems)(props.items, request, props.primaryKey),
2969
+ onStartChat: (prompt, role) => emit("startChat", {
2970
+ prompt,
2971
+ role
2972
+ })
2973
+ }, (message) => target.postMessage(message, "*"));
2974
+ }
2975
+ (0, vue.onMounted)(() => window.addEventListener("message", onWindowMessage));
2976
+ (0, vue.onBeforeUnmount)(() => window.removeEventListener("message", onWindowMessage));
2977
+ return (_ctx, _cache) => {
2978
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$7, [error.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_2$6, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.customViewError", { error: error.value })), 1)) : loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_3$6, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.customViewLoading")), 1)) : srcdoc.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, [(0, vue.createElementVNode)("div", _hoisted_4$6, [((0, vue.openBlock)(), (0, vue.createElementBlock)("iframe", {
2979
+ ref_key: "iframeEl",
2980
+ ref: iframeEl,
2981
+ key: __props.view.id,
2982
+ "data-testid": "collection-remote-view-iframe",
2983
+ title: __props.view.label,
2984
+ srcdoc: srcdoc.value,
2985
+ sandbox: "allow-scripts allow-popups allow-popups-to-escape-sandbox",
2986
+ class: "phone-screen"
2987
+ }, null, 8, _hoisted_5$6))]), (0, vue.createElementVNode)("div", _hoisted_6$5, (0, vue.toDisplayString)(sizeCaption.value), 1)], 64)) : (0, vue.createCommentVNode)("", true)]);
2988
+ };
2989
+ }
2990
+ }), [["__scopeId", "data-v-b9e3d51f"]]);
2991
+ //#endregion
2887
2992
  //#region src/vue/useCollectionRendering.ts
2888
2993
  function stepForFieldType(type) {
2889
2994
  if (type === "money") return "0.01";
@@ -3963,8 +4068,13 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
3963
4068
  * vanished (e.g. `view = "kanban"` after switching to an enum-less
3964
4069
  * collection) back to "table". Single source of truth for the toggle and
3965
4070
  * the body branches. */
3966
- /** Custom (LLM-authored) HTML views declared on the schema. */
3967
- const customViews = (0, vue.computed)(() => collection.value?.schema.views ?? []);
4071
+ /** Custom (LLM-authored) HTML views declared on the schema. Mobile-target
4072
+ * views need the host's `fetchRemoteView` binding (the phone-frame preview's
4073
+ * data source) — on a host without it they're hidden from the selector. */
4074
+ const customViews = (0, vue.computed)(() => {
4075
+ const views = collection.value?.schema.views ?? [];
4076
+ return cui.fetchRemoteView ? views : views.filter((entry) => entry.target !== "mobile");
4077
+ });
3968
4078
  const hasCustomViews = (0, vue.computed)(() => customViews.value.length > 0);
3969
4079
  const activeView = (0, vue.computed)(() => {
3970
4080
  if (view.value === "calendar" && hasCalendar.value) return "calendar";
@@ -4690,7 +4800,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
4690
4800
  "aria-pressed": activeView.value === (0, vue.unref)(customViewKey)(cv.id),
4691
4801
  "data-testid": `collection-view-custom-${cv.id}`,
4692
4802
  onClick: ($event) => setCustomView(cv.id)
4693
- }, [(0, vue.createElementVNode)("span", _hoisted_27$1, (0, vue.toDisplayString)(cv.icon || "dashboard_customize"), 1), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(cv.label), 1)], 10, _hoisted_26$1);
4803
+ }, [(0, vue.createElementVNode)("span", _hoisted_27$1, (0, vue.toDisplayString)(cv.icon || (cv.target === "mobile" ? "smartphone" : "dashboard_customize")), 1), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(cv.label), 1)], 10, _hoisted_26$1);
4694
4804
  }), 128)),
4695
4805
  canAddCustomView.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
4696
4806
  key: 2,
@@ -4860,12 +4970,25 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
4860
4970
  "group-field",
4861
4971
  "selected",
4862
4972
  "notified"
4863
- ])])])) : activeCustomView.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_47, [(0, vue.createVNode)(CollectionCustomView_default, {
4973
+ ])])])) : activeCustomView.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_47, [activeCustomView.value.target === "mobile" ? ((0, vue.openBlock)(), (0, vue.createBlock)(CollectionRemoteViewPreview_default, {
4974
+ key: 0,
4975
+ slug: collection.value.slug,
4976
+ view: activeCustomView.value,
4977
+ "primary-key": collection.value.schema.primaryKey,
4978
+ items: items.value,
4979
+ onStartChat: onCustomViewStartChat
4980
+ }, null, 8, [
4981
+ "slug",
4982
+ "view",
4983
+ "primary-key",
4984
+ "items"
4985
+ ])) : ((0, vue.openBlock)(), (0, vue.createBlock)(CollectionCustomView_default, {
4986
+ key: 1,
4864
4987
  slug: collection.value.slug,
4865
4988
  view: activeCustomView.value,
4866
4989
  onOpenItem: onCustomViewOpenItem,
4867
4990
  onStartChat: onCustomViewStartChat
4868
- }, null, 8, ["slug", "view"])])) : items.value.length === 0 && editing.value?.mode !== "create" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_48, [_cache[42] || (_cache[42] = (0, vue.createElementVNode)("span", { class: "material-icons text-4xl text-slate-300" }, "folder_open", -1)), (0, vue.createElementVNode)("p", _hoisted_49, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.itemsEmpty")), 1)])) : filteredItems.value.length === 0 && editing.value?.mode !== "create" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_50, [
4991
+ }, null, 8, ["slug", "view"]))])) : items.value.length === 0 && editing.value?.mode !== "create" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_48, [_cache[42] || (_cache[42] = (0, vue.createElementVNode)("span", { class: "material-icons text-4xl text-slate-300" }, "folder_open", -1)), (0, vue.createElementVNode)("p", _hoisted_49, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.itemsEmpty")), 1)])) : filteredItems.value.length === 0 && editing.value?.mode !== "create" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_50, [
4869
4992
  _cache[43] || (_cache[43] = (0, vue.createElementVNode)("span", { class: "material-icons text-4xl text-slate-300" }, "search_off", -1)),
4870
4993
  (0, vue.createElementVNode)("p", _hoisted_51, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.noMatchingItems")), 1),
4871
4994
  (0, vue.createElementVNode)("button", {