@mulmoclaude/collection-plugin 0.5.8 → 0.5.11
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/style.css +15 -248
- package/dist/vue/collectionViewMode.d.ts +10 -1
- package/dist/vue/collectionViewMode.d.ts.map +1 -1
- package/dist/vue/components/CollectionCalendarView.vue.d.ts +1 -2
- package/dist/vue/components/CollectionCalendarView.vue.d.ts.map +1 -1
- package/dist/vue/components/CollectionCustomView.vue.d.ts +1 -1
- package/dist/vue/components/CollectionCustomView.vue.d.ts.map +1 -1
- package/dist/vue/components/CollectionDayView.vue.d.ts +1 -2
- package/dist/vue/components/CollectionDayView.vue.d.ts.map +1 -1
- package/dist/vue/components/CollectionEmbedView.vue.d.ts +1 -1
- package/dist/vue/components/CollectionEmbedView.vue.d.ts.map +1 -1
- package/dist/vue/components/CollectionKanbanView.vue.d.ts +1 -2
- package/dist/vue/components/CollectionKanbanView.vue.d.ts.map +1 -1
- package/dist/vue/components/CollectionRecordPanel.vue.d.ts +5 -6
- package/dist/vue/components/CollectionRecordPanel.vue.d.ts.map +1 -1
- package/dist/vue/components/CollectionView.vue.d.ts +18 -3
- package/dist/vue/components/CollectionView.vue.d.ts.map +1 -1
- package/dist/vue/components/CollectionViewConfigModal.vue.d.ts +1 -1
- package/dist/vue/components/CollectionViewConfigModal.vue.d.ts.map +1 -1
- package/dist/vue/index.d.ts +2 -2
- package/dist/vue/index.d.ts.map +1 -1
- package/dist/vue/lang/de.d.ts.map +1 -1
- package/dist/vue/lang/en.d.ts +1 -0
- package/dist/vue/lang/en.d.ts.map +1 -1
- package/dist/vue/lang/es.d.ts.map +1 -1
- package/dist/vue/lang/fr.d.ts.map +1 -1
- package/dist/vue/lang/index.d.ts +1 -0
- package/dist/vue/lang/index.d.ts.map +1 -1
- package/dist/vue/lang/ja.d.ts.map +1 -1
- package/dist/vue/lang/ko.d.ts.map +1 -1
- package/dist/vue/lang/ptBR.d.ts.map +1 -1
- package/dist/vue/lang/zh.d.ts.map +1 -1
- package/dist/vue/uiContext.d.ts +7 -3
- package/dist/vue/uiContext.d.ts.map +1 -1
- package/dist/vue/useCollectionRendering.d.ts +1 -2
- package/dist/vue/useCollectionRendering.d.ts.map +1 -1
- package/dist/vue.cjs +296 -219
- package/dist/vue.cjs.map +1 -1
- package/dist/vue.js +213 -159
- package/dist/vue.js.map +1 -1
- package/package.json +10 -20
- package/dist/chunk-CKQMccvm.cjs +0 -28
- package/dist/core/actionVisible.d.ts +0 -35
- package/dist/core/actionVisible.d.ts.map +0 -1
- package/dist/core/calendarGrid.d.ts +0 -121
- package/dist/core/calendarGrid.d.ts.map +0 -1
- package/dist/core/deriveAll.d.ts +0 -39
- package/dist/core/deriveAll.d.ts.map +0 -1
- package/dist/core/derivedFormula.d.ts +0 -19
- package/dist/core/derivedFormula.d.ts.map +0 -1
- package/dist/core/draft.d.ts +0 -19
- package/dist/core/draft.d.ts.map +0 -1
- package/dist/core/enumColors.d.ts +0 -34
- package/dist/core/enumColors.d.ts.map +0 -1
- package/dist/core/errorMessage.d.ts +0 -5
- package/dist/core/errorMessage.d.ts.map +0 -1
- package/dist/core/itemLabel.d.ts +0 -13
- package/dist/core/itemLabel.d.ts.map +0 -1
- package/dist/core/presentCollection.d.ts +0 -14
- package/dist/core/presentCollection.d.ts.map +0 -1
- package/dist/core/promptSafety.d.ts +0 -2
- package/dist/core/promptSafety.d.ts.map +0 -1
- package/dist/core/schema.d.ts +0 -356
- package/dist/core/schema.d.ts.map +0 -1
- package/dist/core/shortHexId.d.ts +0 -9
- package/dist/core/shortHexId.d.ts.map +0 -1
- package/dist/core/sortItems.d.ts +0 -30
- package/dist/core/sortItems.d.ts.map +0 -1
- package/dist/core/uiTypes.d.ts +0 -107
- package/dist/core/uiTypes.d.ts.map +0 -1
- package/dist/deriveAll-BHcs1erT.js +0 -342
- package/dist/deriveAll-BHcs1erT.js.map +0 -1
- package/dist/deriveAll-BJ0Lvm1Q.cjs +0 -359
- package/dist/deriveAll-BJ0Lvm1Q.cjs.map +0 -1
- package/dist/index.cjs +0 -57
- package/dist/index.d.ts +0 -15
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -4
- package/dist/promptSafety-B0pPJkfQ.cjs +0 -1020
- package/dist/promptSafety-B0pPJkfQ.cjs.map +0 -1
- package/dist/promptSafety-DIQ2yDca.js +0 -739
- package/dist/promptSafety-DIQ2yDca.js.map +0 -1
- package/dist/schema-5P5ZJPrY.cjs +0 -42
- package/dist/schema-5P5ZJPrY.cjs.map +0 -1
- package/dist/schema-BcnitlL8.js +0 -25
- package/dist/schema-BcnitlL8.js.map +0 -1
- package/dist/server/atomic.d.ts +0 -2
- package/dist/server/atomic.d.ts.map +0 -1
- package/dist/server/delete.d.ts +0 -39
- package/dist/server/delete.d.ts.map +0 -1
- package/dist/server/derive.d.ts +0 -9
- package/dist/server/derive.d.ts.map +0 -1
- package/dist/server/discoveredCollection.d.ts +0 -19
- package/dist/server/discoveredCollection.d.ts.map +0 -1
- package/dist/server/discovery.d.ts +0 -228
- package/dist/server/discovery.d.ts.map +0 -1
- package/dist/server/host.d.ts +0 -78
- package/dist/server/host.d.ts.map +0 -1
- package/dist/server/index.d.ts +0 -12
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/io.d.ts +0 -115
- package/dist/server/io.d.ts.map +0 -1
- package/dist/server/paths.d.ts +0 -53
- package/dist/server/paths.d.ts.map +0 -1
- package/dist/server/spawn.d.ts +0 -56
- package/dist/server/spawn.d.ts.map +0 -1
- package/dist/server/templatePath.d.ts +0 -26
- package/dist/server/templatePath.d.ts.map +0 -1
- package/dist/server/util.d.ts +0 -4
- package/dist/server/util.d.ts.map +0 -1
- package/dist/server/validate.d.ts +0 -20
- package/dist/server/validate.d.ts.map +0 -1
- package/dist/server/views.d.ts +0 -21
- package/dist/server/views.d.ts.map +0 -1
- package/dist/server.cjs +0 -1759
- package/dist/server.cjs.map +0 -1
- package/dist/server.js +0 -1709
- package/dist/server.js.map +0 -1
package/dist/vue.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as deriveAll } from "./deriveAll-BHcs1erT.js";
|
|
1
|
+
import { MINUTES_PER_DAY, TOOL_DEFINITION, actionVisible, assignLanes, boolSortValue, bucketRecords, buildMonthGrid, buildUpdatedRecord, coerceInlineValue, dateOf, dateSortValue, daySlice, defangForPrompt, deriveAll, draftToRecord, emptyRow, enumSortValue, errorMessage, executePresentCollection, fieldVisible, firstMissingRequiredField, isSortableField, itemIdOf, itemLabelOf, labelFieldFor, nextSortDirection, numericSortValue, resolveEnumColor, rowFromItem, shortHexId, sortItems, stringSortValue, ymdKey } from "@mulmoclaude/core/collection";
|
|
3
2
|
import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, effectScope, mergeModels, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, onUnmounted, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, useModel, vModelCheckbox, vModelDynamic, vModelSelect, vModelText, watch, watchEffect, withCtx, withDirectives, withKeys, withModifiers } from "vue";
|
|
4
3
|
import { createI18n } from "vue-i18n";
|
|
5
4
|
import draggable from "vuedraggable";
|
|
@@ -61,6 +60,7 @@ var i18n = createI18n({
|
|
|
61
60
|
chat: "Chat",
|
|
62
61
|
refreshFeed: "Refresh",
|
|
63
62
|
refreshFailed: "Refresh failed: {error}",
|
|
63
|
+
refreshDispatched: "Refresh started in the background.",
|
|
64
64
|
feedChatSeed: "The \"{slug}\" feed is defined by the schema at `feeds/{slug}/schema.json` and its records live in `{dataPath}/` (one `<id>.json` per record). Using that schema and data, respond to this request: {message}",
|
|
65
65
|
feedsTitle: "Data-source feeds",
|
|
66
66
|
feedsEmpty: "No feeds registered yet.",
|
|
@@ -164,6 +164,7 @@ var i18n = createI18n({
|
|
|
164
164
|
chat: "チャット",
|
|
165
165
|
refreshFeed: "更新",
|
|
166
166
|
refreshFailed: "更新に失敗しました: {error}",
|
|
167
|
+
refreshDispatched: "バックグラウンドで更新を開始しました。",
|
|
167
168
|
feedChatSeed: "フィード「{slug}」はスキーマ `feeds/{slug}/schema.json` で定義され、レコードは `{dataPath}/`(1 レコードにつき `<id>.json` 1 ファイル)に保存されています。このスキーマとデータを使って、次のリクエストに応えてください: {message}",
|
|
168
169
|
feedsTitle: "データソースフィード",
|
|
169
170
|
feedsEmpty: "登録されたフィードはありません。",
|
|
@@ -267,6 +268,7 @@ var i18n = createI18n({
|
|
|
267
268
|
chat: "对话",
|
|
268
269
|
refreshFeed: "刷新",
|
|
269
270
|
refreshFailed: "刷新失败:{error}",
|
|
271
|
+
refreshDispatched: "已在后台开始刷新。",
|
|
270
272
|
feedChatSeed: "订阅源“{slug}”由 schema `feeds/{slug}/schema.json` 定义,其记录保存在 `{dataPath}/`(每条记录一个 `<id>.json` 文件)。请使用该 schema 和数据来响应以下请求:{message}",
|
|
271
273
|
feedsTitle: "数据源订阅",
|
|
272
274
|
feedsEmpty: "尚未注册任何订阅源。",
|
|
@@ -370,6 +372,7 @@ var i18n = createI18n({
|
|
|
370
372
|
chat: "채팅",
|
|
371
373
|
refreshFeed: "새로고침",
|
|
372
374
|
refreshFailed: "새로고침 실패: {error}",
|
|
375
|
+
refreshDispatched: "백그라운드에서 새로고침을 시작했습니다.",
|
|
373
376
|
feedChatSeed: "“{slug}” 피드는 스키마 `feeds/{slug}/schema.json`로 정의되며, 레코드는 `{dataPath}/`(레코드당 `<id>.json` 파일 하나)에 저장됩니다. 이 스키마와 데이터를 사용하여 다음 요청에 응답하세요: {message}",
|
|
374
377
|
feedsTitle: "데이터 소스 피드",
|
|
375
378
|
feedsEmpty: "등록된 피드가 없습니다.",
|
|
@@ -473,6 +476,7 @@ var i18n = createI18n({
|
|
|
473
476
|
chat: "Chat",
|
|
474
477
|
refreshFeed: "Actualizar",
|
|
475
478
|
refreshFailed: "Error al actualizar: {error}",
|
|
479
|
+
refreshDispatched: "Actualización iniciada en segundo plano.",
|
|
476
480
|
feedChatSeed: "El feed «{slug}» está definido por el esquema `feeds/{slug}/schema.json` y sus registros se guardan en `{dataPath}/` (un archivo `<id>.json` por registro). Usa ese esquema y esos datos para responder a esta solicitud: {message}",
|
|
477
481
|
feedsTitle: "Fuentes de datos",
|
|
478
482
|
feedsEmpty: "Aún no hay fuentes registradas.",
|
|
@@ -576,6 +580,7 @@ var i18n = createI18n({
|
|
|
576
580
|
chat: "Chat",
|
|
577
581
|
refreshFeed: "Atualizar",
|
|
578
582
|
refreshFailed: "Falha ao atualizar: {error}",
|
|
583
|
+
refreshDispatched: "Atualização iniciada em segundo plano.",
|
|
579
584
|
feedChatSeed: "O feed \"{slug}\" é definido pelo esquema `feeds/{slug}/schema.json` e seus registros ficam em `{dataPath}/` (um arquivo `<id>.json` por registro). Use esse esquema e esses dados para responder a esta solicitação: {message}",
|
|
580
585
|
feedsTitle: "Feeds de dados",
|
|
581
586
|
feedsEmpty: "Nenhum feed registrado ainda.",
|
|
@@ -679,6 +684,7 @@ var i18n = createI18n({
|
|
|
679
684
|
chat: "Discussion",
|
|
680
685
|
refreshFeed: "Actualiser",
|
|
681
686
|
refreshFailed: "Échec de l'actualisation : {error}",
|
|
687
|
+
refreshDispatched: "Actualisation lancée en arrière-plan.",
|
|
682
688
|
feedChatSeed: "Le flux « {slug} » est défini par le schéma `feeds/{slug}/schema.json` et ses enregistrements se trouvent dans `{dataPath}/` (un fichier `<id>.json` par enregistrement). Utilise ce schéma et ces données pour répondre à cette demande : {message}",
|
|
683
689
|
feedsTitle: "Flux de données",
|
|
684
690
|
feedsEmpty: "Aucun flux enregistré pour le moment.",
|
|
@@ -782,6 +788,7 @@ var i18n = createI18n({
|
|
|
782
788
|
chat: "Chat",
|
|
783
789
|
refreshFeed: "Aktualisieren",
|
|
784
790
|
refreshFailed: "Aktualisierung fehlgeschlagen: {error}",
|
|
791
|
+
refreshDispatched: "Aktualisierung im Hintergrund gestartet.",
|
|
785
792
|
feedChatSeed: "Der Feed {slug} ist durch das Schema `feeds/{slug}/schema.json` definiert und seine Datensätze liegen in `{dataPath}/` (eine `<id>.json`-Datei pro Datensatz). Nutze dieses Schema und diese Daten, um auf die folgende Anfrage zu antworten: {message}",
|
|
786
793
|
feedsTitle: "Datenquellen-Feeds",
|
|
787
794
|
feedsEmpty: "Noch keine Feeds registriert.",
|
|
@@ -1243,7 +1250,7 @@ var CollectionDayView_default = /* @__PURE__ */ defineComponent({
|
|
|
1243
1250
|
return `${String(hour).padStart(2, "0")}:00`;
|
|
1244
1251
|
}
|
|
1245
1252
|
const labelField = computed(() => labelFieldFor(props.schema));
|
|
1246
|
-
const CHIP_SKIP_TYPES = new Set([
|
|
1253
|
+
const CHIP_SKIP_TYPES = /* @__PURE__ */ new Set([
|
|
1247
1254
|
"date",
|
|
1248
1255
|
"datetime",
|
|
1249
1256
|
"table",
|
|
@@ -1326,7 +1333,7 @@ var CollectionDayView_default = /* @__PURE__ */ defineComponent({
|
|
|
1326
1333
|
await nextTick();
|
|
1327
1334
|
dialogEl.value?.focus();
|
|
1328
1335
|
const earliest = timedEntries.value.reduce((min, entry) => Math.min(min, entry.slice.startMin), MINUTES_PER_DAY);
|
|
1329
|
-
if (earliest >=
|
|
1336
|
+
if (earliest >= MINUTES_PER_DAY) return;
|
|
1330
1337
|
if (scrollEl.value) scrollEl.value.scrollTop = Math.max(0, (earliest - 60) * PX_PER_MIN);
|
|
1331
1338
|
});
|
|
1332
1339
|
return (_ctx, _cache) => {
|
|
@@ -1907,7 +1914,7 @@ var _hoisted_74$1 = ["disabled"];
|
|
|
1907
1914
|
//#region src/vue/components/CollectionRecordPanel.vue
|
|
1908
1915
|
var CollectionRecordPanel_default = /* @__PURE__ */ defineComponent({
|
|
1909
1916
|
__name: "CollectionRecordPanel",
|
|
1910
|
-
props:
|
|
1917
|
+
props: /*@__PURE__*/ mergeModels({
|
|
1911
1918
|
collection: {},
|
|
1912
1919
|
viewing: {},
|
|
1913
1920
|
saving: { type: Boolean },
|
|
@@ -1925,7 +1932,7 @@ var CollectionRecordPanel_default = /* @__PURE__ */ defineComponent({
|
|
|
1925
1932
|
"editing": { required: true },
|
|
1926
1933
|
"editingModifiers": {}
|
|
1927
1934
|
}),
|
|
1928
|
-
emits:
|
|
1935
|
+
emits: /*@__PURE__*/ mergeModels([
|
|
1929
1936
|
"submit",
|
|
1930
1937
|
"cancel",
|
|
1931
1938
|
"edit",
|
|
@@ -2428,7 +2435,7 @@ var _hoisted_3$4 = {
|
|
|
2428
2435
|
var _hoisted_4$4 = ["title", "srcdoc"];
|
|
2429
2436
|
var REMINT_LEAD_MS = 6e4;
|
|
2430
2437
|
var MIN_REMINT_DELAY_MS = 1e4;
|
|
2431
|
-
var CollectionCustomView_vue_vue_type_script_setup_true_lang_default =
|
|
2438
|
+
var CollectionCustomView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
2432
2439
|
__name: "CollectionCustomView",
|
|
2433
2440
|
props: {
|
|
2434
2441
|
slug: {},
|
|
@@ -2557,7 +2564,7 @@ var _plugin_vue_export_helper_default = (sfc, props) => {
|
|
|
2557
2564
|
};
|
|
2558
2565
|
//#endregion
|
|
2559
2566
|
//#region src/vue/components/CollectionCustomView.vue
|
|
2560
|
-
var CollectionCustomView_default =
|
|
2567
|
+
var CollectionCustomView_default = /*#__PURE__*/ _plugin_vue_export_helper_default(CollectionCustomView_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-aa6e6c2d"]]);
|
|
2561
2568
|
//#endregion
|
|
2562
2569
|
//#region src/vue/useCollectionRendering.ts
|
|
2563
2570
|
function stepForFieldType(type) {
|
|
@@ -2613,7 +2620,7 @@ function useCollectionRendering(collection, locale) {
|
|
|
2613
2620
|
async function loadLinkedCollections(schema, expectedSlug) {
|
|
2614
2621
|
const refTargets = new Set(uniqueRefTargets(schema));
|
|
2615
2622
|
const embedTargets = new Set(uniqueEmbedTargets(schema));
|
|
2616
|
-
const allTargets = [
|
|
2623
|
+
const allTargets = [.../* @__PURE__ */ new Set([...refTargets, ...embedTargets])];
|
|
2617
2624
|
if (allTargets.length === 0) return;
|
|
2618
2625
|
const binding = collectionUi();
|
|
2619
2626
|
const results = await Promise.all(allTargets.map(async (target) => {
|
|
@@ -2818,6 +2825,24 @@ function useCollectionRendering(collection, locale) {
|
|
|
2818
2825
|
}
|
|
2819
2826
|
//#endregion
|
|
2820
2827
|
//#region src/vue/collectionViewMode.ts
|
|
2828
|
+
/** Build the `custom:<id>` selector key for a custom view. */
|
|
2829
|
+
function customViewKey(viewId) {
|
|
2830
|
+
return `custom:${viewId}`;
|
|
2831
|
+
}
|
|
2832
|
+
/** Every view mode a schema can render, in selector order: `table`
|
|
2833
|
+
* always, `calendar` when a `date`/`datetime` field exists, `kanban`
|
|
2834
|
+
* when an `enum` field exists, then each declared custom view. Mirrors
|
|
2835
|
+
* the field-derived gating inside `CollectionView` (hasCalendar /
|
|
2836
|
+
* hasKanban / customViews) so callers outside that component — e.g. the
|
|
2837
|
+
* dashboard's per-tile view picker — offer exactly the same choices. */
|
|
2838
|
+
function applicableViewModes(schema) {
|
|
2839
|
+
const modes = ["table"];
|
|
2840
|
+
const fields = Object.values(schema.fields);
|
|
2841
|
+
if (fields.some((field) => field.type === "date" || field.type === "datetime")) modes.push("calendar");
|
|
2842
|
+
if (fields.some((field) => field.type === "enum")) modes.push("kanban");
|
|
2843
|
+
for (const view of schema.views ?? []) modes.push(customViewKey(view.id));
|
|
2844
|
+
return modes;
|
|
2845
|
+
}
|
|
2821
2846
|
var STORAGE_KEY = "collection_view_modes";
|
|
2822
2847
|
var SORT_STORAGE_KEY = "collection_sorts";
|
|
2823
2848
|
var BUILT_IN_MODES = [
|
|
@@ -2886,7 +2911,10 @@ function writeCollectionSort(slug, sort) {
|
|
|
2886
2911
|
//#endregion
|
|
2887
2912
|
//#region src/vue/components/CollectionView.vue?vue&type=script&setup=true&lang.ts
|
|
2888
2913
|
var _hoisted_1$4 = { class: "h-full flex flex-col bg-slate-50/30" };
|
|
2889
|
-
var _hoisted_2$3 = {
|
|
2914
|
+
var _hoisted_2$3 = {
|
|
2915
|
+
key: 0,
|
|
2916
|
+
class: "flex items-center gap-3 px-6 py-2 border-b border-slate-200 bg-white"
|
|
2917
|
+
};
|
|
2890
2918
|
var _hoisted_3$3 = ["title", "aria-label"];
|
|
2891
2919
|
var _hoisted_4$3 = {
|
|
2892
2920
|
key: 1,
|
|
@@ -2913,186 +2941,192 @@ var _hoisted_12$2 = {
|
|
|
2913
2941
|
var _hoisted_13$2 = ["title", "aria-label"];
|
|
2914
2942
|
var _hoisted_14$2 = ["title", "aria-label"];
|
|
2915
2943
|
var _hoisted_15$2 = {
|
|
2916
|
-
key:
|
|
2944
|
+
key: 1,
|
|
2945
|
+
class: "mx-6 mt-2 rounded-lg border border-indigo-200 bg-indigo-50/60 px-4 py-2 text-sm text-indigo-800 flex items-center gap-2",
|
|
2946
|
+
"data-testid": "collections-refresh-note"
|
|
2947
|
+
};
|
|
2948
|
+
var _hoisted_16$1 = { class: "flex-1" };
|
|
2949
|
+
var _hoisted_17$1 = {
|
|
2950
|
+
key: 2,
|
|
2917
2951
|
class: "px-6 py-3 bg-white border-b border-slate-100 flex items-center justify-between gap-4"
|
|
2918
2952
|
};
|
|
2919
|
-
var
|
|
2953
|
+
var _hoisted_18$1 = {
|
|
2920
2954
|
key: 0,
|
|
2921
2955
|
class: "relative flex-1 max-w-md"
|
|
2922
2956
|
};
|
|
2923
|
-
var
|
|
2924
|
-
var _hoisted_18$1 = ["aria-label"];
|
|
2925
|
-
var _hoisted_19$1 = { class: "flex items-center gap-2" };
|
|
2957
|
+
var _hoisted_19$1 = ["placeholder", "aria-label"];
|
|
2926
2958
|
var _hoisted_20$1 = ["aria-label"];
|
|
2927
|
-
var _hoisted_21$1 =
|
|
2928
|
-
var _hoisted_22$1 = ["aria-
|
|
2959
|
+
var _hoisted_21$1 = { class: "flex items-center gap-2" };
|
|
2960
|
+
var _hoisted_22$1 = ["aria-label"];
|
|
2929
2961
|
var _hoisted_23$1 = ["aria-pressed"];
|
|
2930
|
-
var _hoisted_24 = [
|
|
2962
|
+
var _hoisted_24 = ["aria-pressed"];
|
|
2963
|
+
var _hoisted_25 = ["aria-pressed"];
|
|
2964
|
+
var _hoisted_26 = [
|
|
2931
2965
|
"aria-pressed",
|
|
2932
2966
|
"data-testid",
|
|
2933
2967
|
"onClick"
|
|
2934
2968
|
];
|
|
2935
|
-
var
|
|
2936
|
-
var
|
|
2937
|
-
var
|
|
2938
|
-
var _hoisted_28 = ["value", "aria-label"];
|
|
2939
|
-
var _hoisted_29 = ["value"];
|
|
2969
|
+
var _hoisted_27 = { class: "material-icons text-sm" };
|
|
2970
|
+
var _hoisted_28 = ["title", "aria-label"];
|
|
2971
|
+
var _hoisted_29 = ["title", "aria-label"];
|
|
2940
2972
|
var _hoisted_30 = ["value", "aria-label"];
|
|
2941
2973
|
var _hoisted_31 = ["value"];
|
|
2942
|
-
var _hoisted_32 =
|
|
2974
|
+
var _hoisted_32 = ["value", "aria-label"];
|
|
2975
|
+
var _hoisted_33 = ["value"];
|
|
2976
|
+
var _hoisted_34 = {
|
|
2943
2977
|
key: 3,
|
|
2944
2978
|
class: "text-[10px] text-slate-400 font-bold uppercase tracking-wider select-none"
|
|
2945
2979
|
};
|
|
2946
|
-
var
|
|
2947
|
-
key:
|
|
2980
|
+
var _hoisted_35 = {
|
|
2981
|
+
key: 3,
|
|
2948
2982
|
class: "mx-6 mt-4 rounded-xl border border-amber-200 bg-amber-50/60 p-4 text-sm text-amber-900 shadow-sm flex items-center gap-3",
|
|
2949
2983
|
"data-testid": "collections-data-issues"
|
|
2950
2984
|
};
|
|
2951
|
-
var
|
|
2952
|
-
var
|
|
2953
|
-
var
|
|
2985
|
+
var _hoisted_36 = { class: "flex-1" };
|
|
2986
|
+
var _hoisted_37 = { class: "flex-1 overflow-auto" };
|
|
2987
|
+
var _hoisted_38 = {
|
|
2954
2988
|
key: 0,
|
|
2955
2989
|
class: "flex flex-col items-center justify-center py-20 text-sm text-slate-500 gap-3"
|
|
2956
2990
|
};
|
|
2957
|
-
var
|
|
2991
|
+
var _hoisted_39 = {
|
|
2958
2992
|
key: 1,
|
|
2959
2993
|
class: "m-6 rounded-xl border border-red-200 bg-red-50/50 p-4 text-sm text-red-800 shadow-sm flex items-center gap-3"
|
|
2960
2994
|
};
|
|
2961
|
-
var
|
|
2962
|
-
var
|
|
2995
|
+
var _hoisted_40 = { key: 2 };
|
|
2996
|
+
var _hoisted_41 = {
|
|
2963
2997
|
key: 3,
|
|
2964
2998
|
class: "p-4"
|
|
2965
2999
|
};
|
|
2966
|
-
var
|
|
3000
|
+
var _hoisted_42 = {
|
|
2967
3001
|
key: 4,
|
|
2968
3002
|
class: "h-full flex flex-col"
|
|
2969
3003
|
};
|
|
2970
|
-
var
|
|
3004
|
+
var _hoisted_43 = {
|
|
2971
3005
|
key: 0,
|
|
2972
3006
|
class: "m-3 mb-0 rounded-xl border border-red-200 bg-red-50/50 p-4 text-sm text-red-800 shadow-sm flex items-center gap-3",
|
|
2973
3007
|
"data-testid": "collections-inline-error"
|
|
2974
3008
|
};
|
|
2975
|
-
var
|
|
2976
|
-
var
|
|
2977
|
-
var
|
|
2978
|
-
var
|
|
3009
|
+
var _hoisted_44 = { class: "flex-1" };
|
|
3010
|
+
var _hoisted_45 = ["aria-label"];
|
|
3011
|
+
var _hoisted_46 = { class: "flex-1 min-h-0 px-3 py-2" };
|
|
3012
|
+
var _hoisted_47 = {
|
|
2979
3013
|
key: 5,
|
|
2980
3014
|
class: "h-full",
|
|
2981
3015
|
"data-testid": "collection-custom-view-body"
|
|
2982
3016
|
};
|
|
2983
|
-
var
|
|
3017
|
+
var _hoisted_48 = {
|
|
2984
3018
|
key: 6,
|
|
2985
3019
|
class: "flex flex-col items-center justify-center py-20 text-sm text-slate-400 gap-2"
|
|
2986
3020
|
};
|
|
2987
|
-
var
|
|
2988
|
-
var
|
|
3021
|
+
var _hoisted_49 = { class: "font-semibold text-slate-600" };
|
|
3022
|
+
var _hoisted_50 = {
|
|
2989
3023
|
key: 7,
|
|
2990
3024
|
class: "flex flex-col items-center justify-center py-20 text-sm text-slate-400 gap-2"
|
|
2991
3025
|
};
|
|
2992
|
-
var
|
|
2993
|
-
var
|
|
3026
|
+
var _hoisted_51 = { class: "font-semibold text-slate-600" };
|
|
3027
|
+
var _hoisted_52 = {
|
|
2994
3028
|
key: 8,
|
|
2995
3029
|
class: "overflow-x-auto [container-type:inline-size]"
|
|
2996
3030
|
};
|
|
2997
|
-
var
|
|
3031
|
+
var _hoisted_53 = {
|
|
2998
3032
|
key: 0,
|
|
2999
3033
|
class: "m-4 rounded-xl border border-red-200 bg-red-50/50 p-4 text-sm text-red-800 shadow-sm flex items-center gap-3",
|
|
3000
3034
|
"data-testid": "collections-inline-error"
|
|
3001
3035
|
};
|
|
3002
|
-
var
|
|
3003
|
-
var
|
|
3004
|
-
var
|
|
3005
|
-
var
|
|
3006
|
-
var
|
|
3007
|
-
var
|
|
3008
|
-
var
|
|
3009
|
-
var
|
|
3036
|
+
var _hoisted_54 = { class: "flex-1" };
|
|
3037
|
+
var _hoisted_55 = ["aria-label"];
|
|
3038
|
+
var _hoisted_56 = { class: "min-w-full text-xs" };
|
|
3039
|
+
var _hoisted_57 = { class: "bg-slate-50 border-b border-slate-200" };
|
|
3040
|
+
var _hoisted_58 = ["aria-sort"];
|
|
3041
|
+
var _hoisted_59 = { class: "flex items-center gap-1" };
|
|
3042
|
+
var _hoisted_60 = ["title"];
|
|
3043
|
+
var _hoisted_61 = [
|
|
3010
3044
|
"data-testid",
|
|
3011
3045
|
"aria-label",
|
|
3012
3046
|
"onClick",
|
|
3013
3047
|
"onPointerenter"
|
|
3014
3048
|
];
|
|
3015
|
-
var
|
|
3016
|
-
var
|
|
3017
|
-
var
|
|
3049
|
+
var _hoisted_62 = { class: "material-icons text-base align-middle" };
|
|
3050
|
+
var _hoisted_63 = { class: "divide-y divide-slate-100 bg-white" };
|
|
3051
|
+
var _hoisted_64 = [
|
|
3018
3052
|
"aria-label",
|
|
3019
3053
|
"data-testid",
|
|
3020
3054
|
"onClick",
|
|
3021
3055
|
"onKeydown"
|
|
3022
3056
|
];
|
|
3023
|
-
var
|
|
3057
|
+
var _hoisted_65 = [
|
|
3024
3058
|
"checked",
|
|
3025
3059
|
"disabled",
|
|
3026
3060
|
"data-testid",
|
|
3027
3061
|
"aria-label",
|
|
3028
3062
|
"onChange"
|
|
3029
3063
|
];
|
|
3030
|
-
var
|
|
3064
|
+
var _hoisted_66 = [
|
|
3031
3065
|
"checked",
|
|
3032
3066
|
"disabled",
|
|
3033
3067
|
"data-testid",
|
|
3034
3068
|
"aria-label",
|
|
3035
3069
|
"onChange"
|
|
3036
3070
|
];
|
|
3037
|
-
var
|
|
3071
|
+
var _hoisted_67 = {
|
|
3038
3072
|
key: 2,
|
|
3039
3073
|
class: "block truncate"
|
|
3040
3074
|
};
|
|
3041
|
-
var
|
|
3075
|
+
var _hoisted_68 = [
|
|
3042
3076
|
"href",
|
|
3043
3077
|
"tabindex",
|
|
3044
3078
|
"data-testid",
|
|
3045
3079
|
"onClick",
|
|
3046
3080
|
"onKeydown"
|
|
3047
3081
|
];
|
|
3048
|
-
var
|
|
3082
|
+
var _hoisted_69 = [
|
|
3049
3083
|
"value",
|
|
3050
3084
|
"disabled",
|
|
3051
3085
|
"data-testid",
|
|
3052
3086
|
"aria-label",
|
|
3053
3087
|
"onChange"
|
|
3054
3088
|
];
|
|
3055
|
-
var
|
|
3089
|
+
var _hoisted_70 = {
|
|
3056
3090
|
key: 0,
|
|
3057
3091
|
value: ""
|
|
3058
3092
|
};
|
|
3059
|
-
var
|
|
3060
|
-
var
|
|
3093
|
+
var _hoisted_71 = ["value"];
|
|
3094
|
+
var _hoisted_72 = {
|
|
3061
3095
|
key: 4,
|
|
3062
3096
|
class: "block truncate tabular-nums font-semibold text-slate-900"
|
|
3063
3097
|
};
|
|
3064
|
-
var
|
|
3098
|
+
var _hoisted_73 = {
|
|
3065
3099
|
key: 5,
|
|
3066
3100
|
class: "inline-flex items-center gap-1 px-2 py-0.5 rounded-lg text-[10px] font-bold bg-slate-100 text-slate-600 border border-slate-200/40"
|
|
3067
3101
|
};
|
|
3068
|
-
var
|
|
3102
|
+
var _hoisted_74 = {
|
|
3069
3103
|
key: 6,
|
|
3070
3104
|
class: "inline-block truncate tabular-nums font-bold text-indigo-900 bg-indigo-50/50 px-1.5 py-0.5 rounded border border-indigo-100/50"
|
|
3071
3105
|
};
|
|
3072
|
-
var
|
|
3073
|
-
var
|
|
3074
|
-
var
|
|
3106
|
+
var _hoisted_75 = ["href", "data-testid"];
|
|
3107
|
+
var _hoisted_76 = ["href", "data-testid"];
|
|
3108
|
+
var _hoisted_77 = [
|
|
3075
3109
|
"href",
|
|
3076
3110
|
"data-testid",
|
|
3077
3111
|
"onClick"
|
|
3078
3112
|
];
|
|
3079
|
-
var
|
|
3113
|
+
var _hoisted_78 = {
|
|
3080
3114
|
key: 10,
|
|
3081
3115
|
class: "block truncate text-slate-600"
|
|
3082
3116
|
};
|
|
3083
|
-
var
|
|
3084
|
-
var
|
|
3085
|
-
var
|
|
3086
|
-
var
|
|
3117
|
+
var _hoisted_79 = { class: "bg-white rounded-2xl shadow-2xl w-full max-w-xl flex flex-col border border-slate-200 overflow-hidden" };
|
|
3118
|
+
var _hoisted_80 = { class: "px-6 py-4 border-b border-slate-100 flex items-center gap-3 bg-slate-50/50" };
|
|
3119
|
+
var _hoisted_81 = { class: "flex-1" };
|
|
3120
|
+
var _hoisted_82 = {
|
|
3087
3121
|
id: "collections-chat-title",
|
|
3088
3122
|
class: "text-sm font-bold text-slate-800 uppercase tracking-wide"
|
|
3089
3123
|
};
|
|
3090
|
-
var
|
|
3091
|
-
var
|
|
3092
|
-
var
|
|
3093
|
-
var
|
|
3094
|
-
var
|
|
3095
|
-
var
|
|
3124
|
+
var _hoisted_83 = { class: "text-xs text-slate-400 font-semibold" };
|
|
3125
|
+
var _hoisted_84 = ["aria-label"];
|
|
3126
|
+
var _hoisted_85 = { class: "px-6 py-5" };
|
|
3127
|
+
var _hoisted_86 = ["placeholder", "onKeydown"];
|
|
3128
|
+
var _hoisted_87 = { class: "px-6 py-3.5 border-t border-slate-100 flex items-center justify-end gap-2 bg-slate-50/50" };
|
|
3129
|
+
var _hoisted_88 = ["disabled"];
|
|
3096
3130
|
/** `slug` / `selected` are supplied only in EMBEDDED mode (the
|
|
3097
3131
|
* `presentCollection` chat card mounts this component and drives both
|
|
3098
3132
|
* from the tool result). In standalone route mode (the
|
|
@@ -3114,7 +3148,10 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
3114
3148
|
sendTextMessage: { type: Function },
|
|
3115
3149
|
initialView: {},
|
|
3116
3150
|
initialAnchorField: {},
|
|
3117
|
-
initialGroupField: {}
|
|
3151
|
+
initialGroupField: {},
|
|
3152
|
+
hideViewToggle: { type: Boolean },
|
|
3153
|
+
hideHeader: { type: Boolean },
|
|
3154
|
+
hideSearch: { type: Boolean }
|
|
3118
3155
|
},
|
|
3119
3156
|
emits: ["select", "viewStateChange"],
|
|
3120
3157
|
setup(__props, { emit: __emit }) {
|
|
@@ -3152,6 +3189,11 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
3152
3189
|
});
|
|
3153
3190
|
/** True while a feed collection's manual refresh is in flight. */
|
|
3154
3191
|
const refreshing = ref(false);
|
|
3192
|
+
/** Transient note shown after an agent-ingest Refresh dispatches a background
|
|
3193
|
+
* worker (records update asynchronously, so there's nothing to show inline).
|
|
3194
|
+
* Auto-clears; `refreshNoteTimer` cancels a pending clear on re-trigger. */
|
|
3195
|
+
const refreshNote = ref(null);
|
|
3196
|
+
let refreshNoteTimer;
|
|
3155
3197
|
/** Slug already auto-refreshed on first open — prevents a reload loop
|
|
3156
3198
|
* (the auto-refresh reloads the view, which would re-trigger otherwise). */
|
|
3157
3199
|
const autoRefreshedSlug = ref(null);
|
|
@@ -3334,7 +3376,21 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
3334
3376
|
return;
|
|
3335
3377
|
}
|
|
3336
3378
|
await loadCollection(current.slug);
|
|
3337
|
-
if (result.data.errors.length > 0)
|
|
3379
|
+
if (result.data.errors.length > 0) {
|
|
3380
|
+
inlineError.value = t("collectionsView.refreshFailed", { error: result.data.errors.join("; ") });
|
|
3381
|
+
return;
|
|
3382
|
+
}
|
|
3383
|
+
if (result.data.dispatched) if (result.data.chatId && cui.navigate) cui.navigate(`/chat/${result.data.chatId}`);
|
|
3384
|
+
else showRefreshNote(t("collectionsView.refreshDispatched"));
|
|
3385
|
+
}
|
|
3386
|
+
/** Show a transient refresh note, replacing any pending auto-clear. */
|
|
3387
|
+
function showRefreshNote(message) {
|
|
3388
|
+
refreshNote.value = message;
|
|
3389
|
+
if (refreshNoteTimer !== void 0) clearTimeout(refreshNoteTimer);
|
|
3390
|
+
refreshNoteTimer = setTimeout(() => {
|
|
3391
|
+
refreshNote.value = null;
|
|
3392
|
+
refreshNoteTimer = void 0;
|
|
3393
|
+
}, 6e3);
|
|
3338
3394
|
}
|
|
3339
3395
|
/** Collection-level header actions. No `when` predicate (no record). */
|
|
3340
3396
|
const collectionActions = computed(() => collection.value?.schema.collectionActions ?? []);
|
|
@@ -3427,11 +3483,11 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
3427
3483
|
* (`feeds/<slug>/schema.json` and `<dataPath>/`) and let it act on the
|
|
3428
3484
|
* request directly. */
|
|
3429
3485
|
function buildChatSeed(slug, message, itemId) {
|
|
3430
|
-
const
|
|
3431
|
-
if (
|
|
3486
|
+
const current = collection.value;
|
|
3487
|
+
if (current?.source !== "feed") return itemId ? `/${slug} id=${itemId} ${message}` : `/${slug} ${message}`;
|
|
3432
3488
|
return t("collectionsView.feedChatSeed", {
|
|
3433
3489
|
slug,
|
|
3434
|
-
dataPath: schema.dataPath ?? `data/feeds/${slug}`,
|
|
3490
|
+
dataPath: current.schema.dataPath ?? `data/feeds/${slug}`,
|
|
3435
3491
|
message: itemId ? `(for record \`${itemId}\`) ${message}` : message
|
|
3436
3492
|
});
|
|
3437
3493
|
}
|
|
@@ -3515,7 +3571,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
3515
3571
|
function maybeAutoRefreshFeed(slug) {
|
|
3516
3572
|
if (embedded.value) return;
|
|
3517
3573
|
const current = collection.value;
|
|
3518
|
-
if (current?.slug !== slug ||
|
|
3574
|
+
if (current?.slug !== slug || current.source !== "feed") return;
|
|
3519
3575
|
if (items.value.length > 0 || autoRefreshedSlug.value === slug) return;
|
|
3520
3576
|
autoRefreshedSlug.value = slug;
|
|
3521
3577
|
refreshFeed();
|
|
@@ -3539,7 +3595,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
3539
3595
|
if (!current) return false;
|
|
3540
3596
|
return current.source === "project" && !current.slug.startsWith("mc-");
|
|
3541
3597
|
});
|
|
3542
|
-
const isFeed = computed(() =>
|
|
3598
|
+
const isFeed = computed(() => collection.value?.source === "feed");
|
|
3543
3599
|
const canDeleteFeed = computed(() => isFeed.value && !embedded.value);
|
|
3544
3600
|
const isFeedRoute = computed(() => !embedded.value && cui.isFeedRoute());
|
|
3545
3601
|
/** The view to open with: the embedded card's restored `initialView` if
|
|
@@ -3602,7 +3658,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
3602
3658
|
function addCustomView() {
|
|
3603
3659
|
const current = collection.value;
|
|
3604
3660
|
if (!current) return;
|
|
3605
|
-
const base = current.
|
|
3661
|
+
const base = current.source === "feed" ? `feeds/${current.slug}` : `data/skills/${current.slug}`;
|
|
3606
3662
|
const prompt = t("collectionsView.addViewPrompt", {
|
|
3607
3663
|
title: current.title,
|
|
3608
3664
|
base
|
|
@@ -3660,10 +3716,6 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
3660
3716
|
function setCustomView(viewId) {
|
|
3661
3717
|
view.value = `custom:${viewId}`;
|
|
3662
3718
|
}
|
|
3663
|
-
/** Selector-key for a custom view, for active-state comparison in the template. */
|
|
3664
|
-
function customViewKey(viewId) {
|
|
3665
|
-
return `custom:${viewId}`;
|
|
3666
|
-
}
|
|
3667
3719
|
/** A short, slug-safe id not already used by a loaded record. Collisions
|
|
3668
3720
|
* are astronomically unlikely (32 bits), but we still re-roll a few
|
|
3669
3721
|
* times against the in-memory set before giving up and using the last
|
|
@@ -4141,6 +4193,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4141
4193
|
changeUnsub?.();
|
|
4142
4194
|
changeUnsub = null;
|
|
4143
4195
|
clearLiveRefreshTimer();
|
|
4196
|
+
if (refreshNoteTimer !== void 0) clearTimeout(refreshNoteTimer);
|
|
4144
4197
|
});
|
|
4145
4198
|
watch([
|
|
4146
4199
|
activeView,
|
|
@@ -4166,7 +4219,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4166
4219
|
});
|
|
4167
4220
|
return (_ctx, _cache) => {
|
|
4168
4221
|
return openBlock(), createElementBlock("div", _hoisted_1$4, [
|
|
4169
|
-
|
|
4222
|
+
!__props.hideHeader ? (openBlock(), createElementBlock("header", _hoisted_2$3, [
|
|
4170
4223
|
!embedded.value ? (openBlock(), createElementBlock("button", {
|
|
4171
4224
|
key: 0,
|
|
4172
4225
|
type: "button",
|
|
@@ -4240,25 +4293,26 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4240
4293
|
"data-testid": "feeds-delete",
|
|
4241
4294
|
onClick: confirmFeedDelete
|
|
4242
4295
|
}, [..._cache[27] || (_cache[27] = [createElementVNode("span", { class: "material-icons text-sm" }, "delete_forever", -1)])], 8, _hoisted_14$2)) : createCommentVNode("", true)
|
|
4243
|
-
]),
|
|
4244
|
-
|
|
4245
|
-
|
|
4296
|
+
])) : createCommentVNode("", true),
|
|
4297
|
+
refreshNote.value ? (openBlock(), createElementBlock("div", _hoisted_15$2, [_cache[28] || (_cache[28] = createElementVNode("span", { class: "material-icons text-base text-indigo-600" }, "hourglass_top", -1)), createElementVNode("span", _hoisted_16$1, toDisplayString(refreshNote.value), 1)])) : createCommentVNode("", true),
|
|
4298
|
+
collection.value && (!__props.hideSearch && items.value.length > 0 || !__props.hideViewToggle && (hasCalendar.value || hasKanban.value || hasCustomViews.value || canAddCustomView.value)) ? (openBlock(), createElementBlock("div", _hoisted_17$1, [!__props.hideSearch && items.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_18$1, [
|
|
4299
|
+
_cache[30] || (_cache[30] = createElementVNode("span", { class: "absolute inset-y-0 left-0 flex items-center pl-3 text-slate-400 pointer-events-none" }, [createElementVNode("span", { class: "material-icons text-lg" }, "search")], -1)),
|
|
4246
4300
|
withDirectives(createElementVNode("input", {
|
|
4247
4301
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchQuery.value = $event),
|
|
4248
4302
|
type: "text",
|
|
4249
4303
|
placeholder: unref(t)("collectionsView.searchPlaceholder"),
|
|
4250
4304
|
"aria-label": unref(t)("collectionsView.searchPlaceholder"),
|
|
4251
4305
|
class: "w-full bg-slate-50 border border-slate-200/80 rounded-xl pl-9 pr-8 py-1.5 text-xs placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-500 focus:bg-white transition-all font-medium"
|
|
4252
|
-
}, null, 8,
|
|
4306
|
+
}, null, 8, _hoisted_19$1), [[vModelText, searchQuery.value]]),
|
|
4253
4307
|
searchQuery.value ? (openBlock(), createElementBlock("button", {
|
|
4254
4308
|
key: 0,
|
|
4255
4309
|
type: "button",
|
|
4256
4310
|
"aria-label": unref(t)("collectionsView.clearSearch"),
|
|
4257
4311
|
class: "absolute inset-y-0 right-0 flex items-center pr-2.5 text-slate-400 hover:text-slate-600",
|
|
4258
4312
|
onClick: _cache[1] || (_cache[1] = ($event) => searchQuery.value = "")
|
|
4259
|
-
}, [..._cache[
|
|
4260
|
-
])) : createCommentVNode("", true), createElementVNode("div",
|
|
4261
|
-
hasCalendar.value || hasKanban.value || hasCustomViews.value || canAddCustomView.value ? (openBlock(), createElementBlock("div", {
|
|
4313
|
+
}, [..._cache[29] || (_cache[29] = [createElementVNode("span", { class: "material-icons text-sm" }, "close", -1)])], 8, _hoisted_20$1)) : createCommentVNode("", true)
|
|
4314
|
+
])) : createCommentVNode("", true), createElementVNode("div", _hoisted_21$1, [
|
|
4315
|
+
!__props.hideViewToggle && (hasCalendar.value || hasKanban.value || hasCustomViews.value || canAddCustomView.value) ? (openBlock(), createElementBlock("div", {
|
|
4262
4316
|
key: 0,
|
|
4263
4317
|
class: "flex gap-0.5",
|
|
4264
4318
|
role: "group",
|
|
@@ -4270,7 +4324,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4270
4324
|
"aria-pressed": activeView.value === "table",
|
|
4271
4325
|
"data-testid": "collection-view-toggle-table",
|
|
4272
4326
|
onClick: _cache[2] || (_cache[2] = ($event) => setView("table"))
|
|
4273
|
-
}, [_cache[
|
|
4327
|
+
}, [_cache[31] || (_cache[31] = createElementVNode("span", { class: "material-icons text-sm" }, "table_rows", -1)), createElementVNode("span", null, toDisplayString(unref(t)("collectionsView.viewTable")), 1)], 10, _hoisted_23$1),
|
|
4274
4328
|
hasCalendar.value ? (openBlock(), createElementBlock("button", {
|
|
4275
4329
|
key: 0,
|
|
4276
4330
|
type: "button",
|
|
@@ -4278,7 +4332,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4278
4332
|
"aria-pressed": activeView.value === "calendar",
|
|
4279
4333
|
"data-testid": "collection-view-toggle-calendar",
|
|
4280
4334
|
onClick: _cache[3] || (_cache[3] = ($event) => setView("calendar"))
|
|
4281
|
-
}, [_cache[
|
|
4335
|
+
}, [_cache[32] || (_cache[32] = createElementVNode("span", { class: "material-icons text-sm" }, "calendar_month", -1)), createElementVNode("span", null, toDisplayString(unref(t)("collectionsView.viewCalendar")), 1)], 10, _hoisted_24)) : createCommentVNode("", true),
|
|
4282
4336
|
hasKanban.value ? (openBlock(), createElementBlock("button", {
|
|
4283
4337
|
key: 1,
|
|
4284
4338
|
type: "button",
|
|
@@ -4286,16 +4340,16 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4286
4340
|
"aria-pressed": activeView.value === "kanban",
|
|
4287
4341
|
"data-testid": "collection-view-toggle-kanban",
|
|
4288
4342
|
onClick: _cache[4] || (_cache[4] = ($event) => setView("kanban"))
|
|
4289
|
-
}, [_cache[
|
|
4343
|
+
}, [_cache[33] || (_cache[33] = createElementVNode("span", { class: "material-icons text-sm" }, "view_kanban", -1)), createElementVNode("span", null, toDisplayString(unref(t)("collectionsView.viewKanban")), 1)], 10, _hoisted_25)) : createCommentVNode("", true),
|
|
4290
4344
|
(openBlock(true), createElementBlock(Fragment, null, renderList(customViews.value, (cv) => {
|
|
4291
4345
|
return openBlock(), createElementBlock("button", {
|
|
4292
4346
|
key: cv.id,
|
|
4293
4347
|
type: "button",
|
|
4294
|
-
class: normalizeClass(["h-8 px-2.5 flex items-center gap-1 rounded text-xs font-bold transition-colors", activeView.value === customViewKey(cv.id) ? "bg-indigo-600 text-white" : "bg-white text-slate-500 border border-slate-200 hover:bg-slate-50"]),
|
|
4295
|
-
"aria-pressed": activeView.value === customViewKey(cv.id),
|
|
4348
|
+
class: normalizeClass(["h-8 px-2.5 flex items-center gap-1 rounded text-xs font-bold transition-colors", activeView.value === unref(customViewKey)(cv.id) ? "bg-indigo-600 text-white" : "bg-white text-slate-500 border border-slate-200 hover:bg-slate-50"]),
|
|
4349
|
+
"aria-pressed": activeView.value === unref(customViewKey)(cv.id),
|
|
4296
4350
|
"data-testid": `collection-view-custom-${cv.id}`,
|
|
4297
4351
|
onClick: ($event) => setCustomView(cv.id)
|
|
4298
|
-
}, [createElementVNode("span",
|
|
4352
|
+
}, [createElementVNode("span", _hoisted_27, toDisplayString(cv.icon || "dashboard_customize"), 1), createElementVNode("span", null, toDisplayString(cv.label), 1)], 10, _hoisted_26);
|
|
4299
4353
|
}), 128)),
|
|
4300
4354
|
canAddCustomView.value ? (openBlock(), createElementBlock("button", {
|
|
4301
4355
|
key: 2,
|
|
@@ -4305,7 +4359,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4305
4359
|
"aria-label": unref(t)("collectionsView.addView"),
|
|
4306
4360
|
"data-testid": "collection-view-add",
|
|
4307
4361
|
onClick: addCustomView
|
|
4308
|
-
}, [..._cache[
|
|
4362
|
+
}, [..._cache[34] || (_cache[34] = [createElementVNode("span", { class: "material-icons text-sm" }, "add", -1)])], 8, _hoisted_28)) : createCommentVNode("", true),
|
|
4309
4363
|
canConfigureViews.value ? (openBlock(), createElementBlock("button", {
|
|
4310
4364
|
key: 3,
|
|
4311
4365
|
type: "button",
|
|
@@ -4314,8 +4368,8 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4314
4368
|
"aria-label": unref(t)("collectionsView.config.open"),
|
|
4315
4369
|
"data-testid": "collection-config-open",
|
|
4316
4370
|
onClick: _cache[5] || (_cache[5] = ($event) => configOpen.value = true)
|
|
4317
|
-
}, [..._cache[
|
|
4318
|
-
], 8,
|
|
4371
|
+
}, [..._cache[35] || (_cache[35] = [createElementVNode("span", { class: "material-icons text-sm" }, "settings", -1)])], 8, _hoisted_29)) : createCommentVNode("", true)
|
|
4372
|
+
], 8, _hoisted_22$1)) : createCommentVNode("", true),
|
|
4319
4373
|
calendarActive.value && dateFields.value.length > 1 ? (openBlock(), createElementBlock("select", {
|
|
4320
4374
|
key: 1,
|
|
4321
4375
|
value: calendarAnchorField.value,
|
|
@@ -4327,8 +4381,8 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4327
4381
|
return openBlock(), createElementBlock("option", {
|
|
4328
4382
|
key,
|
|
4329
4383
|
value: key
|
|
4330
|
-
}, toDisplayString(collection.value?.schema.fields[key]?.label ?? key), 9,
|
|
4331
|
-
}), 128))], 40,
|
|
4384
|
+
}, toDisplayString(collection.value?.schema.fields[key]?.label ?? key), 9, _hoisted_31);
|
|
4385
|
+
}), 128))], 40, _hoisted_30)) : createCommentVNode("", true),
|
|
4332
4386
|
kanbanActive.value && enumFields.value.length > 1 ? (openBlock(), createElementBlock("select", {
|
|
4333
4387
|
key: 2,
|
|
4334
4388
|
value: kanbanGroupField.value,
|
|
@@ -4340,24 +4394,24 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4340
4394
|
return openBlock(), createElementBlock("option", {
|
|
4341
4395
|
key,
|
|
4342
4396
|
value: key
|
|
4343
|
-
}, toDisplayString(collection.value?.schema.fields[key]?.label ?? key), 9,
|
|
4344
|
-
}), 128))], 40,
|
|
4345
|
-
items.value.length > 0 ? (openBlock(), createElementBlock("div",
|
|
4397
|
+
}, toDisplayString(collection.value?.schema.fields[key]?.label ?? key), 9, _hoisted_33);
|
|
4398
|
+
}), 128))], 40, _hoisted_32)) : createCommentVNode("", true),
|
|
4399
|
+
items.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_34, toDisplayString(unref(t)("collectionsView.searchSummary", {
|
|
4346
4400
|
shown: filteredItems.value.length,
|
|
4347
4401
|
total: items.value.length
|
|
4348
4402
|
})), 1)) : createCommentVNode("", true)
|
|
4349
4403
|
])])) : createCommentVNode("", true),
|
|
4350
|
-
collection.value && dataIssues.value.length > 0 ? (openBlock(), createElementBlock("div",
|
|
4351
|
-
_cache[
|
|
4352
|
-
createElementVNode("span",
|
|
4404
|
+
collection.value && dataIssues.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_35, [
|
|
4405
|
+
_cache[37] || (_cache[37] = createElementVNode("span", { class: "material-icons text-amber-600" }, "warning", -1)),
|
|
4406
|
+
createElementVNode("span", _hoisted_36, toDisplayString(unref(t)("collectionsView.dataIssuesDetected", { count: dataIssues.value.length })), 1),
|
|
4353
4407
|
createElementVNode("button", {
|
|
4354
4408
|
type: "button",
|
|
4355
4409
|
class: "h-8 px-2.5 flex items-center gap-1 rounded border border-amber-300 bg-white hover:bg-amber-100 text-amber-700 font-bold text-xs transition-colors",
|
|
4356
4410
|
"data-testid": "collections-repair",
|
|
4357
4411
|
onClick: repairCollection
|
|
4358
|
-
}, [_cache[
|
|
4412
|
+
}, [_cache[36] || (_cache[36] = createElementVNode("span", { class: "material-icons text-sm" }, "build", -1)), createElementVNode("span", null, toDisplayString(unref(t)("collectionsView.repair")), 1)])
|
|
4359
4413
|
])) : createCommentVNode("", true),
|
|
4360
|
-
createElementVNode("div",
|
|
4414
|
+
createElementVNode("div", _hoisted_37, [loading.value ? (openBlock(), createElementBlock("div", _hoisted_38, [_cache[38] || (_cache[38] = createElementVNode("div", { class: "h-8 w-8 border-2 border-indigo-600/20 border-t-indigo-600 rounded-full animate-spin" }, null, -1)), createElementVNode("span", null, toDisplayString(unref(t)("common.loading")), 1)])) : loadError.value ? (openBlock(), createElementBlock("div", _hoisted_39, [_cache[39] || (_cache[39] = createElementVNode("span", { class: "material-icons text-red-600" }, "error", -1)), createElementVNode("span", null, toDisplayString(loadError.value === "not-found" ? unref(t)("collectionsView.notFound") : `${unref(t)("collectionsView.loadFailed")}: ${loadError.value}`), 1)])) : !collection.value ? (openBlock(), createElementBlock("div", _hoisted_40)) : calendarActive.value ? (openBlock(), createElementBlock("div", _hoisted_41, [createVNode(CollectionCalendarView_default, {
|
|
4361
4415
|
schema: collection.value.schema,
|
|
4362
4416
|
items: filteredItems.value,
|
|
4363
4417
|
"anchor-field": calendarAnchorField.value,
|
|
@@ -4442,16 +4496,16 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4442
4496
|
"selected",
|
|
4443
4497
|
"can-create",
|
|
4444
4498
|
"show-detail"
|
|
4445
|
-
])) : createCommentVNode("", true)])) : kanbanActive.value ? (openBlock(), createElementBlock("div",
|
|
4446
|
-
_cache[
|
|
4447
|
-
createElementVNode("span",
|
|
4499
|
+
])) : createCommentVNode("", true)])) : kanbanActive.value ? (openBlock(), createElementBlock("div", _hoisted_42, [inlineError.value ? (openBlock(), createElementBlock("div", _hoisted_43, [
|
|
4500
|
+
_cache[41] || (_cache[41] = createElementVNode("span", { class: "material-icons text-red-600" }, "error", -1)),
|
|
4501
|
+
createElementVNode("span", _hoisted_44, toDisplayString(unref(t)("collectionsView.inlineSaveFailed", { error: inlineError.value })), 1),
|
|
4448
4502
|
createElementVNode("button", {
|
|
4449
4503
|
type: "button",
|
|
4450
4504
|
class: "h-8 w-8 flex items-center justify-center rounded text-red-600 hover:bg-red-100",
|
|
4451
4505
|
"aria-label": unref(t)("common.close"),
|
|
4452
4506
|
onClick: _cache[10] || (_cache[10] = ($event) => inlineError.value = null)
|
|
4453
|
-
}, [..._cache[
|
|
4454
|
-
])) : createCommentVNode("", true), createElementVNode("div",
|
|
4507
|
+
}, [..._cache[40] || (_cache[40] = [createElementVNode("span", { class: "material-icons text-base" }, "close", -1)])], 8, _hoisted_45)
|
|
4508
|
+
])) : createCommentVNode("", true), createElementVNode("div", _hoisted_46, [createVNode(CollectionKanbanView_default, {
|
|
4455
4509
|
schema: collection.value.schema,
|
|
4456
4510
|
items: filteredItems.value,
|
|
4457
4511
|
"group-field": kanbanGroupField.value,
|
|
@@ -4465,37 +4519,37 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4465
4519
|
"group-field",
|
|
4466
4520
|
"selected",
|
|
4467
4521
|
"notified"
|
|
4468
|
-
])])])) : activeCustomView.value ? (openBlock(), createElementBlock("div",
|
|
4522
|
+
])])])) : activeCustomView.value ? (openBlock(), createElementBlock("div", _hoisted_47, [createVNode(CollectionCustomView_default, {
|
|
4469
4523
|
slug: collection.value.slug,
|
|
4470
4524
|
view: activeCustomView.value,
|
|
4471
4525
|
onOpenItem: onCustomViewOpenItem,
|
|
4472
4526
|
onStartChat: onCustomViewStartChat
|
|
4473
|
-
}, null, 8, ["slug", "view"])])) : items.value.length === 0 && editing.value?.mode !== "create" ? (openBlock(), createElementBlock("div",
|
|
4474
|
-
_cache[
|
|
4475
|
-
createElementVNode("p",
|
|
4527
|
+
}, null, 8, ["slug", "view"])])) : items.value.length === 0 && editing.value?.mode !== "create" ? (openBlock(), createElementBlock("div", _hoisted_48, [_cache[42] || (_cache[42] = createElementVNode("span", { class: "material-icons text-4xl text-slate-300" }, "folder_open", -1)), createElementVNode("p", _hoisted_49, toDisplayString(unref(t)("collectionsView.itemsEmpty")), 1)])) : filteredItems.value.length === 0 && editing.value?.mode !== "create" ? (openBlock(), createElementBlock("div", _hoisted_50, [
|
|
4528
|
+
_cache[43] || (_cache[43] = createElementVNode("span", { class: "material-icons text-4xl text-slate-300" }, "search_off", -1)),
|
|
4529
|
+
createElementVNode("p", _hoisted_51, toDisplayString(unref(t)("collectionsView.noMatchingItems")), 1),
|
|
4476
4530
|
createElementVNode("button", {
|
|
4477
4531
|
type: "button",
|
|
4478
4532
|
class: "text-xs text-indigo-600 font-semibold hover:underline",
|
|
4479
4533
|
onClick: _cache[11] || (_cache[11] = ($event) => searchQuery.value = "")
|
|
4480
4534
|
}, toDisplayString(unref(t)("collectionsView.clearSearch")), 1)
|
|
4481
|
-
])) : (openBlock(), createElementBlock("div",
|
|
4482
|
-
_cache[
|
|
4483
|
-
createElementVNode("span",
|
|
4535
|
+
])) : (openBlock(), createElementBlock("div", _hoisted_52, [inlineError.value ? (openBlock(), createElementBlock("div", _hoisted_53, [
|
|
4536
|
+
_cache[45] || (_cache[45] = createElementVNode("span", { class: "material-icons text-red-600" }, "error", -1)),
|
|
4537
|
+
createElementVNode("span", _hoisted_54, toDisplayString(unref(t)("collectionsView.inlineSaveFailed", { error: inlineError.value })), 1),
|
|
4484
4538
|
createElementVNode("button", {
|
|
4485
4539
|
type: "button",
|
|
4486
4540
|
class: "h-8 w-8 flex items-center justify-center rounded text-red-600 hover:bg-red-100",
|
|
4487
4541
|
"aria-label": unref(t)("common.close"),
|
|
4488
4542
|
onClick: _cache[12] || (_cache[12] = ($event) => inlineError.value = null)
|
|
4489
|
-
}, [..._cache[
|
|
4490
|
-
])) : createCommentVNode("", true), createElementVNode("table",
|
|
4543
|
+
}, [..._cache[44] || (_cache[44] = [createElementVNode("span", { class: "material-icons text-base" }, "close", -1)])], 8, _hoisted_55)
|
|
4544
|
+
])) : createCommentVNode("", true), createElementVNode("table", _hoisted_56, [createElementVNode("thead", null, [createElementVNode("tr", _hoisted_57, [(openBlock(true), createElementBlock(Fragment, null, renderList(listColumnFields.value, ([key, field]) => {
|
|
4491
4545
|
return openBlock(), createElementBlock("th", {
|
|
4492
4546
|
key,
|
|
4493
4547
|
"aria-sort": unref(isSortableField)(field) ? sortAriaValue(key) : void 0,
|
|
4494
4548
|
class: "px-5 py-3 font-bold text-slate-500 text-left uppercase tracking-wider whitespace-nowrap"
|
|
4495
|
-
}, [createElementVNode("div",
|
|
4549
|
+
}, [createElementVNode("div", _hoisted_59, [createElementVNode("span", {
|
|
4496
4550
|
class: "truncate max-w-[14rem]",
|
|
4497
4551
|
title: field.label
|
|
4498
|
-
}, toDisplayString(field.label), 9,
|
|
4552
|
+
}, toDisplayString(field.label), 9, _hoisted_60), unref(isSortableField)(field) ? (openBlock(), createElementBlock("button", {
|
|
4499
4553
|
key: 0,
|
|
4500
4554
|
type: "button",
|
|
4501
4555
|
class: normalizeClass(["inline-flex items-center justify-center rounded p-0.5 -my-1 leading-none transition-colors", sortButtonClass(key)]),
|
|
@@ -4504,8 +4558,8 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4504
4558
|
onClick: withModifiers(($event) => cycleSort(key), ["stop"]),
|
|
4505
4559
|
onPointerenter: ($event) => hoveredSortKey.value = key,
|
|
4506
4560
|
onPointerleave: _cache[13] || (_cache[13] = ($event) => hoveredSortKey.value = null)
|
|
4507
|
-
}, [createElementVNode("span",
|
|
4508
|
-
}), 128))])]), createElementVNode("tbody",
|
|
4561
|
+
}, [createElementVNode("span", _hoisted_62, toDisplayString(sortIconName(key)), 1)], 42, _hoisted_61)) : createCommentVNode("", true)])], 8, _hoisted_58);
|
|
4562
|
+
}), 128))])]), createElementVNode("tbody", _hoisted_63, [(openBlock(true), createElementBlock(Fragment, null, renderList(sortedItems.value, (item) => {
|
|
4509
4563
|
return openBlock(), createElementBlock("tr", {
|
|
4510
4564
|
key: String(item[collection.value.schema.primaryKey] ?? ""),
|
|
4511
4565
|
class: normalizeClass(["hover:bg-slate-50/70 cursor-pointer transition-colors focus:outline-none focus:bg-indigo-50/30", isRowOpen(item) || isEditingRow(item) ? "bg-indigo-50/40" : ""]),
|
|
@@ -4529,7 +4583,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4529
4583
|
"aria-label": field.label,
|
|
4530
4584
|
onClick: _cache[14] || (_cache[14] = withModifiers(() => {}, ["stop"])),
|
|
4531
4585
|
onChange: ($event) => commitToggle(item, field)
|
|
4532
|
-
}, null, 40,
|
|
4586
|
+
}, null, 40, _hoisted_65)) : field.type === "boolean" ? (openBlock(), createElementBlock("input", {
|
|
4533
4587
|
key: 1,
|
|
4534
4588
|
type: "checkbox",
|
|
4535
4589
|
checked: item[key] === true,
|
|
@@ -4539,7 +4593,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4539
4593
|
"aria-label": field.label,
|
|
4540
4594
|
onClick: _cache[15] || (_cache[15] = withModifiers(() => {}, ["stop"])),
|
|
4541
4595
|
onChange: ($event) => commitInlineEdit(item, String(key), field, $event.target.checked)
|
|
4542
|
-
}, null, 40,
|
|
4596
|
+
}, null, 40, _hoisted_66)) : field.type === "ref" && field.to && typeof item[key] === "string" && item[key] ? (openBlock(), createElementBlock("span", _hoisted_67, [createElementVNode("a", {
|
|
4543
4597
|
href: unref(cui).recordHref?.(field.to, String(item[key])),
|
|
4544
4598
|
tabindex: unref(cui).recordHref?.(field.to, String(item[key])) ? void 0 : 0,
|
|
4545
4599
|
role: "link",
|
|
@@ -4547,7 +4601,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4547
4601
|
"data-testid": `collections-ref-link-${key}-${item[key]}`,
|
|
4548
4602
|
onClick: ($event) => unref(activateRefLink)($event, field.to, String(item[key]), true),
|
|
4549
4603
|
onKeydown: [withKeys(($event) => unref(activateRefLink)($event, field.to, String(item[key]), true), ["enter"]), withKeys(($event) => unref(activateRefLink)($event, field.to, String(item[key]), true), ["space"])]
|
|
4550
|
-
}, toDisplayString(unref(refDisplay)(field.to, String(item[key]))), 41,
|
|
4604
|
+
}, toDisplayString(unref(refDisplay)(field.to, String(item[key]))), 41, _hoisted_68)])) : field.type === "enum" && Array.isArray(field.values) && field.values.length > 0 ? (openBlock(), createElementBlock("select", {
|
|
4551
4605
|
key: 3,
|
|
4552
4606
|
value: item[key] == null ? "" : String(item[key]),
|
|
4553
4607
|
disabled: isRowInlineSaving(item),
|
|
@@ -4556,12 +4610,12 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4556
4610
|
"aria-label": field.label,
|
|
4557
4611
|
onClick: _cache[16] || (_cache[16] = withModifiers(() => {}, ["stop"])),
|
|
4558
4612
|
onChange: ($event) => commitInlineEdit(item, String(key), field, $event.target.value)
|
|
4559
|
-
}, [showEnumPlaceholder(item, String(key)) ? (openBlock(), createElementBlock("option",
|
|
4613
|
+
}, [showEnumPlaceholder(item, String(key)) ? (openBlock(), createElementBlock("option", _hoisted_70, toDisplayString(unref(t)("collectionsView.selectPlaceholder")), 1)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(field.values, (value) => {
|
|
4560
4614
|
return openBlock(), createElementBlock("option", {
|
|
4561
4615
|
key: value,
|
|
4562
4616
|
value
|
|
4563
|
-
}, toDisplayString(value), 9,
|
|
4564
|
-
}), 128))], 42,
|
|
4617
|
+
}, toDisplayString(value), 9, _hoisted_71);
|
|
4618
|
+
}), 128))], 42, _hoisted_69)) : field.type === "money" ? (openBlock(), createElementBlock("span", _hoisted_72, toDisplayString(unref(formatMoney)(item[key], unref(resolveCurrency)(field, item), unref(locale))), 1)) : field.type === "table" ? (openBlock(), createElementBlock("span", _hoisted_73, [_cache[46] || (_cache[46] = createElementVNode("span", { class: "material-icons text-[11px]" }, "list", -1)), createElementVNode("span", null, toDisplayString(tableSummary(item[key])), 1)])) : field.type === "derived" ? (openBlock(), createElementBlock("span", _hoisted_74, toDisplayString(unref(derivedDisplay)(field, unref(evaluateDerivedAgainstItem)(field, String(key), item), item)), 1)) : field.type !== "file" && unref(isExternalUrl)(item[key]) ? (openBlock(), createElementBlock("a", {
|
|
4565
4619
|
key: 7,
|
|
4566
4620
|
href: String(item[key]),
|
|
4567
4621
|
target: "_blank",
|
|
@@ -4569,7 +4623,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4569
4623
|
class: "block truncate text-blue-600 hover:text-blue-800 hover:underline font-semibold",
|
|
4570
4624
|
"data-testid": `collections-url-link-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
4571
4625
|
onClick: _cache[17] || (_cache[17] = withModifiers(() => {}, ["stop"]))
|
|
4572
|
-
}, toDisplayString(String(item[key])), 9,
|
|
4626
|
+
}, toDisplayString(String(item[key])), 9, _hoisted_75)) : field.type === "file" && unref(artifactUrl)(item[key]) ? (openBlock(), createElementBlock("a", {
|
|
4573
4627
|
key: 8,
|
|
4574
4628
|
href: unref(artifactUrl)(item[key]) ?? void 0,
|
|
4575
4629
|
target: "_blank",
|
|
@@ -4577,17 +4631,17 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4577
4631
|
class: "block truncate text-blue-600 hover:text-blue-800 hover:underline font-semibold",
|
|
4578
4632
|
"data-testid": `collections-file-link-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
4579
4633
|
onClick: _cache[18] || (_cache[18] = withModifiers(() => {}, ["stop"]))
|
|
4580
|
-
}, toDisplayString(String(item[key])), 9,
|
|
4634
|
+
}, toDisplayString(String(item[key])), 9, _hoisted_76)) : field.type === "file" && unref(fileRoutePath)(item[key]) ? (openBlock(), createElementBlock("a", {
|
|
4581
4635
|
key: 9,
|
|
4582
4636
|
href: unref(fileRoutePath)(item[key]) ?? void 0,
|
|
4583
4637
|
class: "block truncate text-blue-600 hover:text-blue-800 hover:underline font-semibold",
|
|
4584
4638
|
"data-testid": `collections-file-link-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
4585
4639
|
onClick: ($event) => unref(activatePathLink)($event, unref(fileRoutePath)(item[key]) ?? "", true)
|
|
4586
|
-
}, toDisplayString(String(item[key])), 9,
|
|
4587
|
-
}), 128))], 42,
|
|
4640
|
+
}, toDisplayString(String(item[key])), 9, _hoisted_77)) : (openBlock(), createElementBlock("span", _hoisted_78, toDisplayString(unref(formatCell)(item[key], field.type)), 1))], 64)) : createCommentVNode("", true)]);
|
|
4641
|
+
}), 128))], 42, _hoisted_64);
|
|
4588
4642
|
}), 128))])])]))]),
|
|
4589
4643
|
collection.value && (viewing.value || editing.value) && !(calendarActive.value && openDay.value) ? (openBlock(), createBlock(CollectionRecordModal_default, {
|
|
4590
|
-
key:
|
|
4644
|
+
key: 4,
|
|
4591
4645
|
onClose: closeRecordModal
|
|
4592
4646
|
}, {
|
|
4593
4647
|
default: withCtx(() => [createVNode(CollectionRecordPanel_default, {
|
|
@@ -4632,7 +4686,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4632
4686
|
_: 1
|
|
4633
4687
|
})) : createCommentVNode("", true),
|
|
4634
4688
|
configOpen.value && collection.value ? (openBlock(), createBlock(CollectionViewConfigModal_default, {
|
|
4635
|
-
key:
|
|
4689
|
+
key: 5,
|
|
4636
4690
|
slug: collection.value.slug,
|
|
4637
4691
|
title: collection.value.title,
|
|
4638
4692
|
views: customViews.value,
|
|
@@ -4644,7 +4698,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4644
4698
|
"views"
|
|
4645
4699
|
])) : createCommentVNode("", true),
|
|
4646
4700
|
chatOpen.value && collection.value ? (openBlock(), createElementBlock("div", {
|
|
4647
|
-
key:
|
|
4701
|
+
key: 6,
|
|
4648
4702
|
class: "fixed inset-0 z-30 flex items-center justify-center bg-slate-900/60 backdrop-blur-sm p-4 transition-all duration-300",
|
|
4649
4703
|
role: "dialog",
|
|
4650
4704
|
"aria-modal": "true",
|
|
@@ -4652,19 +4706,19 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4652
4706
|
"data-testid": "collections-chat-modal",
|
|
4653
4707
|
onClick: withModifiers(closeChat, ["self"]),
|
|
4654
4708
|
onKeydown: withKeys(closeChat, ["esc"])
|
|
4655
|
-
}, [createElementVNode("div",
|
|
4656
|
-
createElementVNode("header",
|
|
4657
|
-
_cache[
|
|
4658
|
-
createElementVNode("div",
|
|
4709
|
+
}, [createElementVNode("div", _hoisted_79, [
|
|
4710
|
+
createElementVNode("header", _hoisted_80, [
|
|
4711
|
+
_cache[48] || (_cache[48] = createElementVNode("div", { class: "h-9 w-9 flex items-center justify-center rounded-xl bg-indigo-50 text-indigo-600 border border-indigo-100/50" }, [createElementVNode("span", { class: "material-icons text-lg" }, "forum")], -1)),
|
|
4712
|
+
createElementVNode("div", _hoisted_81, [createElementVNode("h2", _hoisted_82, toDisplayString(unref(t)("collectionsView.chatTitle")), 1), createElementVNode("span", _hoisted_83, toDisplayString(collection.value.title), 1)]),
|
|
4659
4713
|
createElementVNode("button", {
|
|
4660
4714
|
type: "button",
|
|
4661
4715
|
class: "h-8 w-8 flex items-center justify-center rounded text-slate-400 hover:bg-slate-200/50 hover:text-slate-600 transition-colors",
|
|
4662
4716
|
"aria-label": unref(t)("common.close"),
|
|
4663
4717
|
"data-testid": "collections-chat-close",
|
|
4664
4718
|
onClick: closeChat
|
|
4665
|
-
}, [..._cache[
|
|
4719
|
+
}, [..._cache[47] || (_cache[47] = [createElementVNode("span", { class: "material-icons text-lg" }, "close", -1)])], 8, _hoisted_84)
|
|
4666
4720
|
]),
|
|
4667
|
-
createElementVNode("div",
|
|
4721
|
+
createElementVNode("div", _hoisted_85, [withDirectives(createElementVNode("textarea", {
|
|
4668
4722
|
ref_key: "chatInputEl",
|
|
4669
4723
|
ref: chatInputEl,
|
|
4670
4724
|
"onUpdate:modelValue": _cache[22] || (_cache[22] = ($event) => chatMessage.value = $event),
|
|
@@ -4673,8 +4727,8 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4673
4727
|
class: "w-full bg-slate-50 border border-slate-200/80 rounded-xl px-3 py-2.5 text-sm placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-indigo-500/20 focus:border-indigo-500 focus:bg-white transition-all resize-none",
|
|
4674
4728
|
"data-testid": "collections-chat-input",
|
|
4675
4729
|
onKeydown: [withKeys(withModifiers(submitChat, ["meta"]), ["enter"]), withKeys(withModifiers(submitChat, ["ctrl"]), ["enter"])]
|
|
4676
|
-
}, null, 40,
|
|
4677
|
-
createElementVNode("footer",
|
|
4730
|
+
}, null, 40, _hoisted_86), [[vModelText, chatMessage.value]])]),
|
|
4731
|
+
createElementVNode("footer", _hoisted_87, [createElementVNode("button", {
|
|
4678
4732
|
type: "button",
|
|
4679
4733
|
class: "h-8 px-2.5 rounded text-xs font-bold text-slate-500 hover:bg-slate-200/50 transition-colors",
|
|
4680
4734
|
"data-testid": "collections-chat-cancel",
|
|
@@ -4685,7 +4739,7 @@ var CollectionView_default = /* @__PURE__ */ defineComponent({
|
|
|
4685
4739
|
disabled: !chatMessage.value.trim(),
|
|
4686
4740
|
"data-testid": "collections-chat-send",
|
|
4687
4741
|
onClick: submitChat
|
|
4688
|
-
}, toDisplayString(unref(t)("collectionsView.chatStart")), 9,
|
|
4742
|
+
}, toDisplayString(unref(t)("collectionsView.chatStart")), 9, _hoisted_88)])
|
|
4689
4743
|
])], 32)) : createCommentVNode("", true)
|
|
4690
4744
|
]);
|
|
4691
4745
|
};
|
|
@@ -5117,6 +5171,6 @@ var plugin = {
|
|
|
5117
5171
|
previewComponent: Preview_default
|
|
5118
5172
|
};
|
|
5119
5173
|
//#endregion
|
|
5120
|
-
export { CollectionCalendarView_default as CollectionCalendarView, CollectionCustomView_default as CollectionCustomView, CollectionDayView_default as CollectionDayView, CollectionEmbedView_default as CollectionEmbedView, CollectionKanbanView_default as CollectionKanbanView, CollectionRecordModal_default as CollectionRecordModal, CollectionRecordPanel_default as CollectionRecordPanel, CollectionView_default as CollectionView, CollectionViewConfigModal_default as CollectionViewConfigModal, CollectionsIndexView_default as CollectionsIndexView, FeedsView_default as FeedsView, Preview_default as PresentCollectionPreview, View_default as PresentCollectionView, collectionUi, configureCollectionUi, plugin, readCollectionSort, readCollectionViewMode, useCollectionRendering, writeCollectionSort, writeCollectionViewMode };
|
|
5174
|
+
export { CollectionCalendarView_default as CollectionCalendarView, CollectionCustomView_default as CollectionCustomView, CollectionDayView_default as CollectionDayView, CollectionEmbedView_default as CollectionEmbedView, CollectionKanbanView_default as CollectionKanbanView, CollectionRecordModal_default as CollectionRecordModal, CollectionRecordPanel_default as CollectionRecordPanel, CollectionView_default as CollectionView, CollectionViewConfigModal_default as CollectionViewConfigModal, CollectionsIndexView_default as CollectionsIndexView, FeedsView_default as FeedsView, Preview_default as PresentCollectionPreview, View_default as PresentCollectionView, applicableViewModes, collectionUi, configureCollectionUi, customViewKey, plugin, readCollectionSort, readCollectionViewMode, useCollectionRendering, writeCollectionSort, writeCollectionViewMode };
|
|
5121
5175
|
|
|
5122
5176
|
//# sourceMappingURL=vue.js.map
|