@mulmoclaude/collection-plugin 0.5.9 → 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 +14 -0
- package/dist/vue/collectionViewMode.d.ts +10 -1
- package/dist/vue/collectionViewMode.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/index.d.ts +1 -1
- 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 +6 -1
- package/dist/vue/uiContext.d.ts.map +1 -1
- package/dist/vue.cjs +212 -155
- package/dist/vue.cjs.map +1 -1
- package/dist/vue.js +211 -156
- package/dist/vue.js.map +1 -1
- package/package.json +4 -4
package/dist/vue.cjs
CHANGED
|
@@ -84,6 +84,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
84
84
|
chat: "Chat",
|
|
85
85
|
refreshFeed: "Refresh",
|
|
86
86
|
refreshFailed: "Refresh failed: {error}",
|
|
87
|
+
refreshDispatched: "Refresh started in the background.",
|
|
87
88
|
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}",
|
|
88
89
|
feedsTitle: "Data-source feeds",
|
|
89
90
|
feedsEmpty: "No feeds registered yet.",
|
|
@@ -187,6 +188,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
187
188
|
chat: "チャット",
|
|
188
189
|
refreshFeed: "更新",
|
|
189
190
|
refreshFailed: "更新に失敗しました: {error}",
|
|
191
|
+
refreshDispatched: "バックグラウンドで更新を開始しました。",
|
|
190
192
|
feedChatSeed: "フィード「{slug}」はスキーマ `feeds/{slug}/schema.json` で定義され、レコードは `{dataPath}/`(1 レコードにつき `<id>.json` 1 ファイル)に保存されています。このスキーマとデータを使って、次のリクエストに応えてください: {message}",
|
|
191
193
|
feedsTitle: "データソースフィード",
|
|
192
194
|
feedsEmpty: "登録されたフィードはありません。",
|
|
@@ -290,6 +292,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
290
292
|
chat: "对话",
|
|
291
293
|
refreshFeed: "刷新",
|
|
292
294
|
refreshFailed: "刷新失败:{error}",
|
|
295
|
+
refreshDispatched: "已在后台开始刷新。",
|
|
293
296
|
feedChatSeed: "订阅源“{slug}”由 schema `feeds/{slug}/schema.json` 定义,其记录保存在 `{dataPath}/`(每条记录一个 `<id>.json` 文件)。请使用该 schema 和数据来响应以下请求:{message}",
|
|
294
297
|
feedsTitle: "数据源订阅",
|
|
295
298
|
feedsEmpty: "尚未注册任何订阅源。",
|
|
@@ -393,6 +396,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
393
396
|
chat: "채팅",
|
|
394
397
|
refreshFeed: "새로고침",
|
|
395
398
|
refreshFailed: "새로고침 실패: {error}",
|
|
399
|
+
refreshDispatched: "백그라운드에서 새로고침을 시작했습니다.",
|
|
396
400
|
feedChatSeed: "“{slug}” 피드는 스키마 `feeds/{slug}/schema.json`로 정의되며, 레코드는 `{dataPath}/`(레코드당 `<id>.json` 파일 하나)에 저장됩니다. 이 스키마와 데이터를 사용하여 다음 요청에 응답하세요: {message}",
|
|
397
401
|
feedsTitle: "데이터 소스 피드",
|
|
398
402
|
feedsEmpty: "등록된 피드가 없습니다.",
|
|
@@ -496,6 +500,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
496
500
|
chat: "Chat",
|
|
497
501
|
refreshFeed: "Actualizar",
|
|
498
502
|
refreshFailed: "Error al actualizar: {error}",
|
|
503
|
+
refreshDispatched: "Actualización iniciada en segundo plano.",
|
|
499
504
|
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}",
|
|
500
505
|
feedsTitle: "Fuentes de datos",
|
|
501
506
|
feedsEmpty: "Aún no hay fuentes registradas.",
|
|
@@ -599,6 +604,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
599
604
|
chat: "Chat",
|
|
600
605
|
refreshFeed: "Atualizar",
|
|
601
606
|
refreshFailed: "Falha ao atualizar: {error}",
|
|
607
|
+
refreshDispatched: "Atualização iniciada em segundo plano.",
|
|
602
608
|
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}",
|
|
603
609
|
feedsTitle: "Feeds de dados",
|
|
604
610
|
feedsEmpty: "Nenhum feed registrado ainda.",
|
|
@@ -702,6 +708,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
702
708
|
chat: "Discussion",
|
|
703
709
|
refreshFeed: "Actualiser",
|
|
704
710
|
refreshFailed: "Échec de l'actualisation : {error}",
|
|
711
|
+
refreshDispatched: "Actualisation lancée en arrière-plan.",
|
|
705
712
|
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}",
|
|
706
713
|
feedsTitle: "Flux de données",
|
|
707
714
|
feedsEmpty: "Aucun flux enregistré pour le moment.",
|
|
@@ -805,6 +812,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
805
812
|
chat: "Chat",
|
|
806
813
|
refreshFeed: "Aktualisieren",
|
|
807
814
|
refreshFailed: "Aktualisierung fehlgeschlagen: {error}",
|
|
815
|
+
refreshDispatched: "Aktualisierung im Hintergrund gestartet.",
|
|
808
816
|
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}",
|
|
809
817
|
feedsTitle: "Datenquellen-Feeds",
|
|
810
818
|
feedsEmpty: "Noch keine Feeds registriert.",
|
|
@@ -1266,7 +1274,7 @@ var CollectionDayView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
1266
1274
|
return `${String(hour).padStart(2, "0")}:00`;
|
|
1267
1275
|
}
|
|
1268
1276
|
const labelField = (0, vue.computed)(() => (0, _mulmoclaude_core_collection.labelFieldFor)(props.schema));
|
|
1269
|
-
const CHIP_SKIP_TYPES = new Set([
|
|
1277
|
+
const CHIP_SKIP_TYPES = /* @__PURE__ */ new Set([
|
|
1270
1278
|
"date",
|
|
1271
1279
|
"datetime",
|
|
1272
1280
|
"table",
|
|
@@ -1930,7 +1938,7 @@ var _hoisted_74$1 = ["disabled"];
|
|
|
1930
1938
|
//#region src/vue/components/CollectionRecordPanel.vue
|
|
1931
1939
|
var CollectionRecordPanel_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
1932
1940
|
__name: "CollectionRecordPanel",
|
|
1933
|
-
props:
|
|
1941
|
+
props: /*@__PURE__*/ (0, vue.mergeModels)({
|
|
1934
1942
|
collection: {},
|
|
1935
1943
|
viewing: {},
|
|
1936
1944
|
saving: { type: Boolean },
|
|
@@ -1948,7 +1956,7 @@ var CollectionRecordPanel_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
1948
1956
|
"editing": { required: true },
|
|
1949
1957
|
"editingModifiers": {}
|
|
1950
1958
|
}),
|
|
1951
|
-
emits:
|
|
1959
|
+
emits: /*@__PURE__*/ (0, vue.mergeModels)([
|
|
1952
1960
|
"submit",
|
|
1953
1961
|
"cancel",
|
|
1954
1962
|
"edit",
|
|
@@ -2451,7 +2459,7 @@ var _hoisted_3$4 = {
|
|
|
2451
2459
|
var _hoisted_4$4 = ["title", "srcdoc"];
|
|
2452
2460
|
var REMINT_LEAD_MS = 6e4;
|
|
2453
2461
|
var MIN_REMINT_DELAY_MS = 1e4;
|
|
2454
|
-
var CollectionCustomView_vue_vue_type_script_setup_true_lang_default =
|
|
2462
|
+
var CollectionCustomView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vue.defineComponent)({
|
|
2455
2463
|
__name: "CollectionCustomView",
|
|
2456
2464
|
props: {
|
|
2457
2465
|
slug: {},
|
|
@@ -2580,7 +2588,7 @@ var _plugin_vue_export_helper_default = (sfc, props) => {
|
|
|
2580
2588
|
};
|
|
2581
2589
|
//#endregion
|
|
2582
2590
|
//#region src/vue/components/CollectionCustomView.vue
|
|
2583
|
-
var CollectionCustomView_default =
|
|
2591
|
+
var CollectionCustomView_default = /*#__PURE__*/ _plugin_vue_export_helper_default(CollectionCustomView_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-aa6e6c2d"]]);
|
|
2584
2592
|
//#endregion
|
|
2585
2593
|
//#region src/vue/useCollectionRendering.ts
|
|
2586
2594
|
function stepForFieldType(type) {
|
|
@@ -2636,7 +2644,7 @@ function useCollectionRendering(collection, locale) {
|
|
|
2636
2644
|
async function loadLinkedCollections(schema, expectedSlug) {
|
|
2637
2645
|
const refTargets = new Set(uniqueRefTargets(schema));
|
|
2638
2646
|
const embedTargets = new Set(uniqueEmbedTargets(schema));
|
|
2639
|
-
const allTargets = [
|
|
2647
|
+
const allTargets = [.../* @__PURE__ */ new Set([...refTargets, ...embedTargets])];
|
|
2640
2648
|
if (allTargets.length === 0) return;
|
|
2641
2649
|
const binding = collectionUi();
|
|
2642
2650
|
const results = await Promise.all(allTargets.map(async (target) => {
|
|
@@ -2841,6 +2849,24 @@ function useCollectionRendering(collection, locale) {
|
|
|
2841
2849
|
}
|
|
2842
2850
|
//#endregion
|
|
2843
2851
|
//#region src/vue/collectionViewMode.ts
|
|
2852
|
+
/** Build the `custom:<id>` selector key for a custom view. */
|
|
2853
|
+
function customViewKey(viewId) {
|
|
2854
|
+
return `custom:${viewId}`;
|
|
2855
|
+
}
|
|
2856
|
+
/** Every view mode a schema can render, in selector order: `table`
|
|
2857
|
+
* always, `calendar` when a `date`/`datetime` field exists, `kanban`
|
|
2858
|
+
* when an `enum` field exists, then each declared custom view. Mirrors
|
|
2859
|
+
* the field-derived gating inside `CollectionView` (hasCalendar /
|
|
2860
|
+
* hasKanban / customViews) so callers outside that component — e.g. the
|
|
2861
|
+
* dashboard's per-tile view picker — offer exactly the same choices. */
|
|
2862
|
+
function applicableViewModes(schema) {
|
|
2863
|
+
const modes = ["table"];
|
|
2864
|
+
const fields = Object.values(schema.fields);
|
|
2865
|
+
if (fields.some((field) => field.type === "date" || field.type === "datetime")) modes.push("calendar");
|
|
2866
|
+
if (fields.some((field) => field.type === "enum")) modes.push("kanban");
|
|
2867
|
+
for (const view of schema.views ?? []) modes.push(customViewKey(view.id));
|
|
2868
|
+
return modes;
|
|
2869
|
+
}
|
|
2844
2870
|
var STORAGE_KEY = "collection_view_modes";
|
|
2845
2871
|
var SORT_STORAGE_KEY = "collection_sorts";
|
|
2846
2872
|
var BUILT_IN_MODES = [
|
|
@@ -2909,7 +2935,10 @@ function writeCollectionSort(slug, sort) {
|
|
|
2909
2935
|
//#endregion
|
|
2910
2936
|
//#region src/vue/components/CollectionView.vue?vue&type=script&setup=true&lang.ts
|
|
2911
2937
|
var _hoisted_1$4 = { class: "h-full flex flex-col bg-slate-50/30" };
|
|
2912
|
-
var _hoisted_2$3 = {
|
|
2938
|
+
var _hoisted_2$3 = {
|
|
2939
|
+
key: 0,
|
|
2940
|
+
class: "flex items-center gap-3 px-6 py-2 border-b border-slate-200 bg-white"
|
|
2941
|
+
};
|
|
2913
2942
|
var _hoisted_3$3 = ["title", "aria-label"];
|
|
2914
2943
|
var _hoisted_4$3 = {
|
|
2915
2944
|
key: 1,
|
|
@@ -2936,186 +2965,192 @@ var _hoisted_12$2 = {
|
|
|
2936
2965
|
var _hoisted_13$2 = ["title", "aria-label"];
|
|
2937
2966
|
var _hoisted_14$2 = ["title", "aria-label"];
|
|
2938
2967
|
var _hoisted_15$2 = {
|
|
2939
|
-
key:
|
|
2968
|
+
key: 1,
|
|
2969
|
+
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",
|
|
2970
|
+
"data-testid": "collections-refresh-note"
|
|
2971
|
+
};
|
|
2972
|
+
var _hoisted_16$1 = { class: "flex-1" };
|
|
2973
|
+
var _hoisted_17$1 = {
|
|
2974
|
+
key: 2,
|
|
2940
2975
|
class: "px-6 py-3 bg-white border-b border-slate-100 flex items-center justify-between gap-4"
|
|
2941
2976
|
};
|
|
2942
|
-
var
|
|
2977
|
+
var _hoisted_18$1 = {
|
|
2943
2978
|
key: 0,
|
|
2944
2979
|
class: "relative flex-1 max-w-md"
|
|
2945
2980
|
};
|
|
2946
|
-
var
|
|
2947
|
-
var _hoisted_18$1 = ["aria-label"];
|
|
2948
|
-
var _hoisted_19$1 = { class: "flex items-center gap-2" };
|
|
2981
|
+
var _hoisted_19$1 = ["placeholder", "aria-label"];
|
|
2949
2982
|
var _hoisted_20$1 = ["aria-label"];
|
|
2950
|
-
var _hoisted_21$1 =
|
|
2951
|
-
var _hoisted_22$1 = ["aria-
|
|
2983
|
+
var _hoisted_21$1 = { class: "flex items-center gap-2" };
|
|
2984
|
+
var _hoisted_22$1 = ["aria-label"];
|
|
2952
2985
|
var _hoisted_23$1 = ["aria-pressed"];
|
|
2953
|
-
var _hoisted_24 = [
|
|
2986
|
+
var _hoisted_24 = ["aria-pressed"];
|
|
2987
|
+
var _hoisted_25 = ["aria-pressed"];
|
|
2988
|
+
var _hoisted_26 = [
|
|
2954
2989
|
"aria-pressed",
|
|
2955
2990
|
"data-testid",
|
|
2956
2991
|
"onClick"
|
|
2957
2992
|
];
|
|
2958
|
-
var
|
|
2959
|
-
var
|
|
2960
|
-
var
|
|
2961
|
-
var _hoisted_28 = ["value", "aria-label"];
|
|
2962
|
-
var _hoisted_29 = ["value"];
|
|
2993
|
+
var _hoisted_27 = { class: "material-icons text-sm" };
|
|
2994
|
+
var _hoisted_28 = ["title", "aria-label"];
|
|
2995
|
+
var _hoisted_29 = ["title", "aria-label"];
|
|
2963
2996
|
var _hoisted_30 = ["value", "aria-label"];
|
|
2964
2997
|
var _hoisted_31 = ["value"];
|
|
2965
|
-
var _hoisted_32 =
|
|
2998
|
+
var _hoisted_32 = ["value", "aria-label"];
|
|
2999
|
+
var _hoisted_33 = ["value"];
|
|
3000
|
+
var _hoisted_34 = {
|
|
2966
3001
|
key: 3,
|
|
2967
3002
|
class: "text-[10px] text-slate-400 font-bold uppercase tracking-wider select-none"
|
|
2968
3003
|
};
|
|
2969
|
-
var
|
|
2970
|
-
key:
|
|
3004
|
+
var _hoisted_35 = {
|
|
3005
|
+
key: 3,
|
|
2971
3006
|
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",
|
|
2972
3007
|
"data-testid": "collections-data-issues"
|
|
2973
3008
|
};
|
|
2974
|
-
var
|
|
2975
|
-
var
|
|
2976
|
-
var
|
|
3009
|
+
var _hoisted_36 = { class: "flex-1" };
|
|
3010
|
+
var _hoisted_37 = { class: "flex-1 overflow-auto" };
|
|
3011
|
+
var _hoisted_38 = {
|
|
2977
3012
|
key: 0,
|
|
2978
3013
|
class: "flex flex-col items-center justify-center py-20 text-sm text-slate-500 gap-3"
|
|
2979
3014
|
};
|
|
2980
|
-
var
|
|
3015
|
+
var _hoisted_39 = {
|
|
2981
3016
|
key: 1,
|
|
2982
3017
|
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"
|
|
2983
3018
|
};
|
|
2984
|
-
var
|
|
2985
|
-
var
|
|
3019
|
+
var _hoisted_40 = { key: 2 };
|
|
3020
|
+
var _hoisted_41 = {
|
|
2986
3021
|
key: 3,
|
|
2987
3022
|
class: "p-4"
|
|
2988
3023
|
};
|
|
2989
|
-
var
|
|
3024
|
+
var _hoisted_42 = {
|
|
2990
3025
|
key: 4,
|
|
2991
3026
|
class: "h-full flex flex-col"
|
|
2992
3027
|
};
|
|
2993
|
-
var
|
|
3028
|
+
var _hoisted_43 = {
|
|
2994
3029
|
key: 0,
|
|
2995
3030
|
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",
|
|
2996
3031
|
"data-testid": "collections-inline-error"
|
|
2997
3032
|
};
|
|
2998
|
-
var
|
|
2999
|
-
var
|
|
3000
|
-
var
|
|
3001
|
-
var
|
|
3033
|
+
var _hoisted_44 = { class: "flex-1" };
|
|
3034
|
+
var _hoisted_45 = ["aria-label"];
|
|
3035
|
+
var _hoisted_46 = { class: "flex-1 min-h-0 px-3 py-2" };
|
|
3036
|
+
var _hoisted_47 = {
|
|
3002
3037
|
key: 5,
|
|
3003
3038
|
class: "h-full",
|
|
3004
3039
|
"data-testid": "collection-custom-view-body"
|
|
3005
3040
|
};
|
|
3006
|
-
var
|
|
3041
|
+
var _hoisted_48 = {
|
|
3007
3042
|
key: 6,
|
|
3008
3043
|
class: "flex flex-col items-center justify-center py-20 text-sm text-slate-400 gap-2"
|
|
3009
3044
|
};
|
|
3010
|
-
var
|
|
3011
|
-
var
|
|
3045
|
+
var _hoisted_49 = { class: "font-semibold text-slate-600" };
|
|
3046
|
+
var _hoisted_50 = {
|
|
3012
3047
|
key: 7,
|
|
3013
3048
|
class: "flex flex-col items-center justify-center py-20 text-sm text-slate-400 gap-2"
|
|
3014
3049
|
};
|
|
3015
|
-
var
|
|
3016
|
-
var
|
|
3050
|
+
var _hoisted_51 = { class: "font-semibold text-slate-600" };
|
|
3051
|
+
var _hoisted_52 = {
|
|
3017
3052
|
key: 8,
|
|
3018
3053
|
class: "overflow-x-auto [container-type:inline-size]"
|
|
3019
3054
|
};
|
|
3020
|
-
var
|
|
3055
|
+
var _hoisted_53 = {
|
|
3021
3056
|
key: 0,
|
|
3022
3057
|
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",
|
|
3023
3058
|
"data-testid": "collections-inline-error"
|
|
3024
3059
|
};
|
|
3025
|
-
var
|
|
3026
|
-
var
|
|
3027
|
-
var
|
|
3028
|
-
var
|
|
3029
|
-
var
|
|
3030
|
-
var
|
|
3031
|
-
var
|
|
3032
|
-
var
|
|
3060
|
+
var _hoisted_54 = { class: "flex-1" };
|
|
3061
|
+
var _hoisted_55 = ["aria-label"];
|
|
3062
|
+
var _hoisted_56 = { class: "min-w-full text-xs" };
|
|
3063
|
+
var _hoisted_57 = { class: "bg-slate-50 border-b border-slate-200" };
|
|
3064
|
+
var _hoisted_58 = ["aria-sort"];
|
|
3065
|
+
var _hoisted_59 = { class: "flex items-center gap-1" };
|
|
3066
|
+
var _hoisted_60 = ["title"];
|
|
3067
|
+
var _hoisted_61 = [
|
|
3033
3068
|
"data-testid",
|
|
3034
3069
|
"aria-label",
|
|
3035
3070
|
"onClick",
|
|
3036
3071
|
"onPointerenter"
|
|
3037
3072
|
];
|
|
3038
|
-
var
|
|
3039
|
-
var
|
|
3040
|
-
var
|
|
3073
|
+
var _hoisted_62 = { class: "material-icons text-base align-middle" };
|
|
3074
|
+
var _hoisted_63 = { class: "divide-y divide-slate-100 bg-white" };
|
|
3075
|
+
var _hoisted_64 = [
|
|
3041
3076
|
"aria-label",
|
|
3042
3077
|
"data-testid",
|
|
3043
3078
|
"onClick",
|
|
3044
3079
|
"onKeydown"
|
|
3045
3080
|
];
|
|
3046
|
-
var
|
|
3081
|
+
var _hoisted_65 = [
|
|
3047
3082
|
"checked",
|
|
3048
3083
|
"disabled",
|
|
3049
3084
|
"data-testid",
|
|
3050
3085
|
"aria-label",
|
|
3051
3086
|
"onChange"
|
|
3052
3087
|
];
|
|
3053
|
-
var
|
|
3088
|
+
var _hoisted_66 = [
|
|
3054
3089
|
"checked",
|
|
3055
3090
|
"disabled",
|
|
3056
3091
|
"data-testid",
|
|
3057
3092
|
"aria-label",
|
|
3058
3093
|
"onChange"
|
|
3059
3094
|
];
|
|
3060
|
-
var
|
|
3095
|
+
var _hoisted_67 = {
|
|
3061
3096
|
key: 2,
|
|
3062
3097
|
class: "block truncate"
|
|
3063
3098
|
};
|
|
3064
|
-
var
|
|
3099
|
+
var _hoisted_68 = [
|
|
3065
3100
|
"href",
|
|
3066
3101
|
"tabindex",
|
|
3067
3102
|
"data-testid",
|
|
3068
3103
|
"onClick",
|
|
3069
3104
|
"onKeydown"
|
|
3070
3105
|
];
|
|
3071
|
-
var
|
|
3106
|
+
var _hoisted_69 = [
|
|
3072
3107
|
"value",
|
|
3073
3108
|
"disabled",
|
|
3074
3109
|
"data-testid",
|
|
3075
3110
|
"aria-label",
|
|
3076
3111
|
"onChange"
|
|
3077
3112
|
];
|
|
3078
|
-
var
|
|
3113
|
+
var _hoisted_70 = {
|
|
3079
3114
|
key: 0,
|
|
3080
3115
|
value: ""
|
|
3081
3116
|
};
|
|
3082
|
-
var
|
|
3083
|
-
var
|
|
3117
|
+
var _hoisted_71 = ["value"];
|
|
3118
|
+
var _hoisted_72 = {
|
|
3084
3119
|
key: 4,
|
|
3085
3120
|
class: "block truncate tabular-nums font-semibold text-slate-900"
|
|
3086
3121
|
};
|
|
3087
|
-
var
|
|
3122
|
+
var _hoisted_73 = {
|
|
3088
3123
|
key: 5,
|
|
3089
3124
|
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"
|
|
3090
3125
|
};
|
|
3091
|
-
var
|
|
3126
|
+
var _hoisted_74 = {
|
|
3092
3127
|
key: 6,
|
|
3093
3128
|
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"
|
|
3094
3129
|
};
|
|
3095
|
-
var
|
|
3096
|
-
var
|
|
3097
|
-
var
|
|
3130
|
+
var _hoisted_75 = ["href", "data-testid"];
|
|
3131
|
+
var _hoisted_76 = ["href", "data-testid"];
|
|
3132
|
+
var _hoisted_77 = [
|
|
3098
3133
|
"href",
|
|
3099
3134
|
"data-testid",
|
|
3100
3135
|
"onClick"
|
|
3101
3136
|
];
|
|
3102
|
-
var
|
|
3137
|
+
var _hoisted_78 = {
|
|
3103
3138
|
key: 10,
|
|
3104
3139
|
class: "block truncate text-slate-600"
|
|
3105
3140
|
};
|
|
3106
|
-
var
|
|
3107
|
-
var
|
|
3108
|
-
var
|
|
3109
|
-
var
|
|
3141
|
+
var _hoisted_79 = { class: "bg-white rounded-2xl shadow-2xl w-full max-w-xl flex flex-col border border-slate-200 overflow-hidden" };
|
|
3142
|
+
var _hoisted_80 = { class: "px-6 py-4 border-b border-slate-100 flex items-center gap-3 bg-slate-50/50" };
|
|
3143
|
+
var _hoisted_81 = { class: "flex-1" };
|
|
3144
|
+
var _hoisted_82 = {
|
|
3110
3145
|
id: "collections-chat-title",
|
|
3111
3146
|
class: "text-sm font-bold text-slate-800 uppercase tracking-wide"
|
|
3112
3147
|
};
|
|
3113
|
-
var
|
|
3114
|
-
var
|
|
3115
|
-
var
|
|
3116
|
-
var
|
|
3117
|
-
var
|
|
3118
|
-
var
|
|
3148
|
+
var _hoisted_83 = { class: "text-xs text-slate-400 font-semibold" };
|
|
3149
|
+
var _hoisted_84 = ["aria-label"];
|
|
3150
|
+
var _hoisted_85 = { class: "px-6 py-5" };
|
|
3151
|
+
var _hoisted_86 = ["placeholder", "onKeydown"];
|
|
3152
|
+
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" };
|
|
3153
|
+
var _hoisted_88 = ["disabled"];
|
|
3119
3154
|
/** `slug` / `selected` are supplied only in EMBEDDED mode (the
|
|
3120
3155
|
* `presentCollection` chat card mounts this component and drives both
|
|
3121
3156
|
* from the tool result). In standalone route mode (the
|
|
@@ -3137,7 +3172,10 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
3137
3172
|
sendTextMessage: { type: Function },
|
|
3138
3173
|
initialView: {},
|
|
3139
3174
|
initialAnchorField: {},
|
|
3140
|
-
initialGroupField: {}
|
|
3175
|
+
initialGroupField: {},
|
|
3176
|
+
hideViewToggle: { type: Boolean },
|
|
3177
|
+
hideHeader: { type: Boolean },
|
|
3178
|
+
hideSearch: { type: Boolean }
|
|
3141
3179
|
},
|
|
3142
3180
|
emits: ["select", "viewStateChange"],
|
|
3143
3181
|
setup(__props, { emit: __emit }) {
|
|
@@ -3175,6 +3213,11 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
3175
3213
|
});
|
|
3176
3214
|
/** True while a feed collection's manual refresh is in flight. */
|
|
3177
3215
|
const refreshing = (0, vue.ref)(false);
|
|
3216
|
+
/** Transient note shown after an agent-ingest Refresh dispatches a background
|
|
3217
|
+
* worker (records update asynchronously, so there's nothing to show inline).
|
|
3218
|
+
* Auto-clears; `refreshNoteTimer` cancels a pending clear on re-trigger. */
|
|
3219
|
+
const refreshNote = (0, vue.ref)(null);
|
|
3220
|
+
let refreshNoteTimer;
|
|
3178
3221
|
/** Slug already auto-refreshed on first open — prevents a reload loop
|
|
3179
3222
|
* (the auto-refresh reloads the view, which would re-trigger otherwise). */
|
|
3180
3223
|
const autoRefreshedSlug = (0, vue.ref)(null);
|
|
@@ -3357,7 +3400,21 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
3357
3400
|
return;
|
|
3358
3401
|
}
|
|
3359
3402
|
await loadCollection(current.slug);
|
|
3360
|
-
if (result.data.errors.length > 0)
|
|
3403
|
+
if (result.data.errors.length > 0) {
|
|
3404
|
+
inlineError.value = t("collectionsView.refreshFailed", { error: result.data.errors.join("; ") });
|
|
3405
|
+
return;
|
|
3406
|
+
}
|
|
3407
|
+
if (result.data.dispatched) if (result.data.chatId && cui.navigate) cui.navigate(`/chat/${result.data.chatId}`);
|
|
3408
|
+
else showRefreshNote(t("collectionsView.refreshDispatched"));
|
|
3409
|
+
}
|
|
3410
|
+
/** Show a transient refresh note, replacing any pending auto-clear. */
|
|
3411
|
+
function showRefreshNote(message) {
|
|
3412
|
+
refreshNote.value = message;
|
|
3413
|
+
if (refreshNoteTimer !== void 0) clearTimeout(refreshNoteTimer);
|
|
3414
|
+
refreshNoteTimer = setTimeout(() => {
|
|
3415
|
+
refreshNote.value = null;
|
|
3416
|
+
refreshNoteTimer = void 0;
|
|
3417
|
+
}, 6e3);
|
|
3361
3418
|
}
|
|
3362
3419
|
/** Collection-level header actions. No `when` predicate (no record). */
|
|
3363
3420
|
const collectionActions = (0, vue.computed)(() => collection.value?.schema.collectionActions ?? []);
|
|
@@ -3450,11 +3507,11 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
3450
3507
|
* (`feeds/<slug>/schema.json` and `<dataPath>/`) and let it act on the
|
|
3451
3508
|
* request directly. */
|
|
3452
3509
|
function buildChatSeed(slug, message, itemId) {
|
|
3453
|
-
const
|
|
3454
|
-
if (
|
|
3510
|
+
const current = collection.value;
|
|
3511
|
+
if (current?.source !== "feed") return itemId ? `/${slug} id=${itemId} ${message}` : `/${slug} ${message}`;
|
|
3455
3512
|
return t("collectionsView.feedChatSeed", {
|
|
3456
3513
|
slug,
|
|
3457
|
-
dataPath: schema.dataPath ?? `data/feeds/${slug}`,
|
|
3514
|
+
dataPath: current.schema.dataPath ?? `data/feeds/${slug}`,
|
|
3458
3515
|
message: itemId ? `(for record \`${itemId}\`) ${message}` : message
|
|
3459
3516
|
});
|
|
3460
3517
|
}
|
|
@@ -3538,7 +3595,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
3538
3595
|
function maybeAutoRefreshFeed(slug) {
|
|
3539
3596
|
if (embedded.value) return;
|
|
3540
3597
|
const current = collection.value;
|
|
3541
|
-
if (current?.slug !== slug ||
|
|
3598
|
+
if (current?.slug !== slug || current.source !== "feed") return;
|
|
3542
3599
|
if (items.value.length > 0 || autoRefreshedSlug.value === slug) return;
|
|
3543
3600
|
autoRefreshedSlug.value = slug;
|
|
3544
3601
|
refreshFeed();
|
|
@@ -3562,7 +3619,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
3562
3619
|
if (!current) return false;
|
|
3563
3620
|
return current.source === "project" && !current.slug.startsWith("mc-");
|
|
3564
3621
|
});
|
|
3565
|
-
const isFeed = (0, vue.computed)(() =>
|
|
3622
|
+
const isFeed = (0, vue.computed)(() => collection.value?.source === "feed");
|
|
3566
3623
|
const canDeleteFeed = (0, vue.computed)(() => isFeed.value && !embedded.value);
|
|
3567
3624
|
const isFeedRoute = (0, vue.computed)(() => !embedded.value && cui.isFeedRoute());
|
|
3568
3625
|
/** The view to open with: the embedded card's restored `initialView` if
|
|
@@ -3625,7 +3682,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
3625
3682
|
function addCustomView() {
|
|
3626
3683
|
const current = collection.value;
|
|
3627
3684
|
if (!current) return;
|
|
3628
|
-
const base = current.
|
|
3685
|
+
const base = current.source === "feed" ? `feeds/${current.slug}` : `data/skills/${current.slug}`;
|
|
3629
3686
|
const prompt = t("collectionsView.addViewPrompt", {
|
|
3630
3687
|
title: current.title,
|
|
3631
3688
|
base
|
|
@@ -3683,10 +3740,6 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
3683
3740
|
function setCustomView(viewId) {
|
|
3684
3741
|
view.value = `custom:${viewId}`;
|
|
3685
3742
|
}
|
|
3686
|
-
/** Selector-key for a custom view, for active-state comparison in the template. */
|
|
3687
|
-
function customViewKey(viewId) {
|
|
3688
|
-
return `custom:${viewId}`;
|
|
3689
|
-
}
|
|
3690
3743
|
/** A short, slug-safe id not already used by a loaded record. Collisions
|
|
3691
3744
|
* are astronomically unlikely (32 bits), but we still re-roll a few
|
|
3692
3745
|
* times against the in-memory set before giving up and using the last
|
|
@@ -4164,6 +4217,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4164
4217
|
changeUnsub?.();
|
|
4165
4218
|
changeUnsub = null;
|
|
4166
4219
|
clearLiveRefreshTimer();
|
|
4220
|
+
if (refreshNoteTimer !== void 0) clearTimeout(refreshNoteTimer);
|
|
4167
4221
|
});
|
|
4168
4222
|
(0, vue.watch)([
|
|
4169
4223
|
activeView,
|
|
@@ -4189,7 +4243,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4189
4243
|
});
|
|
4190
4244
|
return (_ctx, _cache) => {
|
|
4191
4245
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_1$4, [
|
|
4192
|
-
(0, vue.
|
|
4246
|
+
!__props.hideHeader ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("header", _hoisted_2$3, [
|
|
4193
4247
|
!embedded.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
4194
4248
|
key: 0,
|
|
4195
4249
|
type: "button",
|
|
@@ -4263,25 +4317,26 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4263
4317
|
"data-testid": "feeds-delete",
|
|
4264
4318
|
onClick: confirmFeedDelete
|
|
4265
4319
|
}, [..._cache[27] || (_cache[27] = [(0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "delete_forever", -1)])], 8, _hoisted_14$2)) : (0, vue.createCommentVNode)("", true)
|
|
4266
|
-
]),
|
|
4267
|
-
|
|
4268
|
-
|
|
4320
|
+
])) : (0, vue.createCommentVNode)("", true),
|
|
4321
|
+
refreshNote.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_15$2, [_cache[28] || (_cache[28] = (0, vue.createElementVNode)("span", { class: "material-icons text-base text-indigo-600" }, "hourglass_top", -1)), (0, vue.createElementVNode)("span", _hoisted_16$1, (0, vue.toDisplayString)(refreshNote.value), 1)])) : (0, vue.createCommentVNode)("", true),
|
|
4322
|
+
collection.value && (!__props.hideSearch && items.value.length > 0 || !__props.hideViewToggle && (hasCalendar.value || hasKanban.value || hasCustomViews.value || canAddCustomView.value)) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_17$1, [!__props.hideSearch && items.value.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_18$1, [
|
|
4323
|
+
_cache[30] || (_cache[30] = (0, vue.createElementVNode)("span", { class: "absolute inset-y-0 left-0 flex items-center pl-3 text-slate-400 pointer-events-none" }, [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "search")], -1)),
|
|
4269
4324
|
(0, vue.withDirectives)((0, vue.createElementVNode)("input", {
|
|
4270
4325
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchQuery.value = $event),
|
|
4271
4326
|
type: "text",
|
|
4272
4327
|
placeholder: (0, vue.unref)(t)("collectionsView.searchPlaceholder"),
|
|
4273
4328
|
"aria-label": (0, vue.unref)(t)("collectionsView.searchPlaceholder"),
|
|
4274
4329
|
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"
|
|
4275
|
-
}, null, 8,
|
|
4330
|
+
}, null, 8, _hoisted_19$1), [[vue.vModelText, searchQuery.value]]),
|
|
4276
4331
|
searchQuery.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
4277
4332
|
key: 0,
|
|
4278
4333
|
type: "button",
|
|
4279
4334
|
"aria-label": (0, vue.unref)(t)("collectionsView.clearSearch"),
|
|
4280
4335
|
class: "absolute inset-y-0 right-0 flex items-center pr-2.5 text-slate-400 hover:text-slate-600",
|
|
4281
4336
|
onClick: _cache[1] || (_cache[1] = ($event) => searchQuery.value = "")
|
|
4282
|
-
}, [..._cache[
|
|
4283
|
-
])) : (0, vue.createCommentVNode)("", true), (0, vue.createElementVNode)("div",
|
|
4284
|
-
hasCalendar.value || hasKanban.value || hasCustomViews.value || canAddCustomView.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
|
|
4337
|
+
}, [..._cache[29] || (_cache[29] = [(0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "close", -1)])], 8, _hoisted_20$1)) : (0, vue.createCommentVNode)("", true)
|
|
4338
|
+
])) : (0, vue.createCommentVNode)("", true), (0, vue.createElementVNode)("div", _hoisted_21$1, [
|
|
4339
|
+
!__props.hideViewToggle && (hasCalendar.value || hasKanban.value || hasCustomViews.value || canAddCustomView.value) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
|
|
4285
4340
|
key: 0,
|
|
4286
4341
|
class: "flex gap-0.5",
|
|
4287
4342
|
role: "group",
|
|
@@ -4293,7 +4348,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4293
4348
|
"aria-pressed": activeView.value === "table",
|
|
4294
4349
|
"data-testid": "collection-view-toggle-table",
|
|
4295
4350
|
onClick: _cache[2] || (_cache[2] = ($event) => setView("table"))
|
|
4296
|
-
}, [_cache[
|
|
4351
|
+
}, [_cache[31] || (_cache[31] = (0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "table_rows", -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.viewTable")), 1)], 10, _hoisted_23$1),
|
|
4297
4352
|
hasCalendar.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
4298
4353
|
key: 0,
|
|
4299
4354
|
type: "button",
|
|
@@ -4301,7 +4356,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4301
4356
|
"aria-pressed": activeView.value === "calendar",
|
|
4302
4357
|
"data-testid": "collection-view-toggle-calendar",
|
|
4303
4358
|
onClick: _cache[3] || (_cache[3] = ($event) => setView("calendar"))
|
|
4304
|
-
}, [_cache[
|
|
4359
|
+
}, [_cache[32] || (_cache[32] = (0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "calendar_month", -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.viewCalendar")), 1)], 10, _hoisted_24)) : (0, vue.createCommentVNode)("", true),
|
|
4305
4360
|
hasKanban.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
4306
4361
|
key: 1,
|
|
4307
4362
|
type: "button",
|
|
@@ -4309,16 +4364,16 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4309
4364
|
"aria-pressed": activeView.value === "kanban",
|
|
4310
4365
|
"data-testid": "collection-view-toggle-kanban",
|
|
4311
4366
|
onClick: _cache[4] || (_cache[4] = ($event) => setView("kanban"))
|
|
4312
|
-
}, [_cache[
|
|
4367
|
+
}, [_cache[33] || (_cache[33] = (0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "view_kanban", -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.viewKanban")), 1)], 10, _hoisted_25)) : (0, vue.createCommentVNode)("", true),
|
|
4313
4368
|
((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(customViews.value, (cv) => {
|
|
4314
4369
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
4315
4370
|
key: cv.id,
|
|
4316
4371
|
type: "button",
|
|
4317
|
-
class: (0, vue.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"]),
|
|
4318
|
-
"aria-pressed": activeView.value === customViewKey(cv.id),
|
|
4372
|
+
class: (0, vue.normalizeClass)(["h-8 px-2.5 flex items-center gap-1 rounded text-xs font-bold transition-colors", activeView.value === (0, vue.unref)(customViewKey)(cv.id) ? "bg-indigo-600 text-white" : "bg-white text-slate-500 border border-slate-200 hover:bg-slate-50"]),
|
|
4373
|
+
"aria-pressed": activeView.value === (0, vue.unref)(customViewKey)(cv.id),
|
|
4319
4374
|
"data-testid": `collection-view-custom-${cv.id}`,
|
|
4320
4375
|
onClick: ($event) => setCustomView(cv.id)
|
|
4321
|
-
}, [(0, vue.createElementVNode)("span",
|
|
4376
|
+
}, [(0, vue.createElementVNode)("span", _hoisted_27, (0, vue.toDisplayString)(cv.icon || "dashboard_customize"), 1), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(cv.label), 1)], 10, _hoisted_26);
|
|
4322
4377
|
}), 128)),
|
|
4323
4378
|
canAddCustomView.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
4324
4379
|
key: 2,
|
|
@@ -4328,7 +4383,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4328
4383
|
"aria-label": (0, vue.unref)(t)("collectionsView.addView"),
|
|
4329
4384
|
"data-testid": "collection-view-add",
|
|
4330
4385
|
onClick: addCustomView
|
|
4331
|
-
}, [..._cache[
|
|
4386
|
+
}, [..._cache[34] || (_cache[34] = [(0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "add", -1)])], 8, _hoisted_28)) : (0, vue.createCommentVNode)("", true),
|
|
4332
4387
|
canConfigureViews.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
4333
4388
|
key: 3,
|
|
4334
4389
|
type: "button",
|
|
@@ -4337,8 +4392,8 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4337
4392
|
"aria-label": (0, vue.unref)(t)("collectionsView.config.open"),
|
|
4338
4393
|
"data-testid": "collection-config-open",
|
|
4339
4394
|
onClick: _cache[5] || (_cache[5] = ($event) => configOpen.value = true)
|
|
4340
|
-
}, [..._cache[
|
|
4341
|
-
], 8,
|
|
4395
|
+
}, [..._cache[35] || (_cache[35] = [(0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "settings", -1)])], 8, _hoisted_29)) : (0, vue.createCommentVNode)("", true)
|
|
4396
|
+
], 8, _hoisted_22$1)) : (0, vue.createCommentVNode)("", true),
|
|
4342
4397
|
calendarActive.value && dateFields.value.length > 1 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("select", {
|
|
4343
4398
|
key: 1,
|
|
4344
4399
|
value: calendarAnchorField.value,
|
|
@@ -4350,8 +4405,8 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4350
4405
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("option", {
|
|
4351
4406
|
key,
|
|
4352
4407
|
value: key
|
|
4353
|
-
}, (0, vue.toDisplayString)(collection.value?.schema.fields[key]?.label ?? key), 9,
|
|
4354
|
-
}), 128))], 40,
|
|
4408
|
+
}, (0, vue.toDisplayString)(collection.value?.schema.fields[key]?.label ?? key), 9, _hoisted_31);
|
|
4409
|
+
}), 128))], 40, _hoisted_30)) : (0, vue.createCommentVNode)("", true),
|
|
4355
4410
|
kanbanActive.value && enumFields.value.length > 1 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("select", {
|
|
4356
4411
|
key: 2,
|
|
4357
4412
|
value: kanbanGroupField.value,
|
|
@@ -4363,24 +4418,24 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4363
4418
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("option", {
|
|
4364
4419
|
key,
|
|
4365
4420
|
value: key
|
|
4366
|
-
}, (0, vue.toDisplayString)(collection.value?.schema.fields[key]?.label ?? key), 9,
|
|
4367
|
-
}), 128))], 40,
|
|
4368
|
-
items.value.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div",
|
|
4421
|
+
}, (0, vue.toDisplayString)(collection.value?.schema.fields[key]?.label ?? key), 9, _hoisted_33);
|
|
4422
|
+
}), 128))], 40, _hoisted_32)) : (0, vue.createCommentVNode)("", true),
|
|
4423
|
+
items.value.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_34, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.searchSummary", {
|
|
4369
4424
|
shown: filteredItems.value.length,
|
|
4370
4425
|
total: items.value.length
|
|
4371
4426
|
})), 1)) : (0, vue.createCommentVNode)("", true)
|
|
4372
4427
|
])])) : (0, vue.createCommentVNode)("", true),
|
|
4373
|
-
collection.value && dataIssues.value.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div",
|
|
4374
|
-
_cache[
|
|
4375
|
-
(0, vue.createElementVNode)("span",
|
|
4428
|
+
collection.value && dataIssues.value.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_35, [
|
|
4429
|
+
_cache[37] || (_cache[37] = (0, vue.createElementVNode)("span", { class: "material-icons text-amber-600" }, "warning", -1)),
|
|
4430
|
+
(0, vue.createElementVNode)("span", _hoisted_36, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.dataIssuesDetected", { count: dataIssues.value.length })), 1),
|
|
4376
4431
|
(0, vue.createElementVNode)("button", {
|
|
4377
4432
|
type: "button",
|
|
4378
4433
|
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",
|
|
4379
4434
|
"data-testid": "collections-repair",
|
|
4380
4435
|
onClick: repairCollection
|
|
4381
|
-
}, [_cache[
|
|
4436
|
+
}, [_cache[36] || (_cache[36] = (0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "build", -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.repair")), 1)])
|
|
4382
4437
|
])) : (0, vue.createCommentVNode)("", true),
|
|
4383
|
-
(0, vue.createElementVNode)("div",
|
|
4438
|
+
(0, vue.createElementVNode)("div", _hoisted_37, [loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_38, [_cache[38] || (_cache[38] = (0, vue.createElementVNode)("div", { class: "h-8 w-8 border-2 border-indigo-600/20 border-t-indigo-600 rounded-full animate-spin" }, null, -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("common.loading")), 1)])) : loadError.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_39, [_cache[39] || (_cache[39] = (0, vue.createElementVNode)("span", { class: "material-icons text-red-600" }, "error", -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(loadError.value === "not-found" ? (0, vue.unref)(t)("collectionsView.notFound") : `${(0, vue.unref)(t)("collectionsView.loadFailed")}: ${loadError.value}`), 1)])) : !collection.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_40)) : calendarActive.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_41, [(0, vue.createVNode)(CollectionCalendarView_default, {
|
|
4384
4439
|
schema: collection.value.schema,
|
|
4385
4440
|
items: filteredItems.value,
|
|
4386
4441
|
"anchor-field": calendarAnchorField.value,
|
|
@@ -4465,16 +4520,16 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4465
4520
|
"selected",
|
|
4466
4521
|
"can-create",
|
|
4467
4522
|
"show-detail"
|
|
4468
|
-
])) : (0, vue.createCommentVNode)("", true)])) : kanbanActive.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div",
|
|
4469
|
-
_cache[
|
|
4470
|
-
(0, vue.createElementVNode)("span",
|
|
4523
|
+
])) : (0, vue.createCommentVNode)("", true)])) : kanbanActive.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_42, [inlineError.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_43, [
|
|
4524
|
+
_cache[41] || (_cache[41] = (0, vue.createElementVNode)("span", { class: "material-icons text-red-600" }, "error", -1)),
|
|
4525
|
+
(0, vue.createElementVNode)("span", _hoisted_44, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.inlineSaveFailed", { error: inlineError.value })), 1),
|
|
4471
4526
|
(0, vue.createElementVNode)("button", {
|
|
4472
4527
|
type: "button",
|
|
4473
4528
|
class: "h-8 w-8 flex items-center justify-center rounded text-red-600 hover:bg-red-100",
|
|
4474
4529
|
"aria-label": (0, vue.unref)(t)("common.close"),
|
|
4475
4530
|
onClick: _cache[10] || (_cache[10] = ($event) => inlineError.value = null)
|
|
4476
|
-
}, [..._cache[
|
|
4477
|
-
])) : (0, vue.createCommentVNode)("", true), (0, vue.createElementVNode)("div",
|
|
4531
|
+
}, [..._cache[40] || (_cache[40] = [(0, vue.createElementVNode)("span", { class: "material-icons text-base" }, "close", -1)])], 8, _hoisted_45)
|
|
4532
|
+
])) : (0, vue.createCommentVNode)("", true), (0, vue.createElementVNode)("div", _hoisted_46, [(0, vue.createVNode)(CollectionKanbanView_default, {
|
|
4478
4533
|
schema: collection.value.schema,
|
|
4479
4534
|
items: filteredItems.value,
|
|
4480
4535
|
"group-field": kanbanGroupField.value,
|
|
@@ -4488,37 +4543,37 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4488
4543
|
"group-field",
|
|
4489
4544
|
"selected",
|
|
4490
4545
|
"notified"
|
|
4491
|
-
])])])) : activeCustomView.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div",
|
|
4546
|
+
])])])) : activeCustomView.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_47, [(0, vue.createVNode)(CollectionCustomView_default, {
|
|
4492
4547
|
slug: collection.value.slug,
|
|
4493
4548
|
view: activeCustomView.value,
|
|
4494
4549
|
onOpenItem: onCustomViewOpenItem,
|
|
4495
4550
|
onStartChat: onCustomViewStartChat
|
|
4496
|
-
}, null, 8, ["slug", "view"])])) : items.value.length === 0 && editing.value?.mode !== "create" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div",
|
|
4497
|
-
_cache[
|
|
4498
|
-
(0, vue.createElementVNode)("p",
|
|
4551
|
+
}, 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, [
|
|
4552
|
+
_cache[43] || (_cache[43] = (0, vue.createElementVNode)("span", { class: "material-icons text-4xl text-slate-300" }, "search_off", -1)),
|
|
4553
|
+
(0, vue.createElementVNode)("p", _hoisted_51, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.noMatchingItems")), 1),
|
|
4499
4554
|
(0, vue.createElementVNode)("button", {
|
|
4500
4555
|
type: "button",
|
|
4501
4556
|
class: "text-xs text-indigo-600 font-semibold hover:underline",
|
|
4502
4557
|
onClick: _cache[11] || (_cache[11] = ($event) => searchQuery.value = "")
|
|
4503
4558
|
}, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.clearSearch")), 1)
|
|
4504
|
-
])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div",
|
|
4505
|
-
_cache[
|
|
4506
|
-
(0, vue.createElementVNode)("span",
|
|
4559
|
+
])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_52, [inlineError.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_53, [
|
|
4560
|
+
_cache[45] || (_cache[45] = (0, vue.createElementVNode)("span", { class: "material-icons text-red-600" }, "error", -1)),
|
|
4561
|
+
(0, vue.createElementVNode)("span", _hoisted_54, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.inlineSaveFailed", { error: inlineError.value })), 1),
|
|
4507
4562
|
(0, vue.createElementVNode)("button", {
|
|
4508
4563
|
type: "button",
|
|
4509
4564
|
class: "h-8 w-8 flex items-center justify-center rounded text-red-600 hover:bg-red-100",
|
|
4510
4565
|
"aria-label": (0, vue.unref)(t)("common.close"),
|
|
4511
4566
|
onClick: _cache[12] || (_cache[12] = ($event) => inlineError.value = null)
|
|
4512
|
-
}, [..._cache[
|
|
4513
|
-
])) : (0, vue.createCommentVNode)("", true), (0, vue.createElementVNode)("table",
|
|
4567
|
+
}, [..._cache[44] || (_cache[44] = [(0, vue.createElementVNode)("span", { class: "material-icons text-base" }, "close", -1)])], 8, _hoisted_55)
|
|
4568
|
+
])) : (0, vue.createCommentVNode)("", true), (0, vue.createElementVNode)("table", _hoisted_56, [(0, vue.createElementVNode)("thead", null, [(0, vue.createElementVNode)("tr", _hoisted_57, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(listColumnFields.value, ([key, field]) => {
|
|
4514
4569
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("th", {
|
|
4515
4570
|
key,
|
|
4516
4571
|
"aria-sort": (0, vue.unref)(_mulmoclaude_core_collection.isSortableField)(field) ? sortAriaValue(key) : void 0,
|
|
4517
4572
|
class: "px-5 py-3 font-bold text-slate-500 text-left uppercase tracking-wider whitespace-nowrap"
|
|
4518
|
-
}, [(0, vue.createElementVNode)("div",
|
|
4573
|
+
}, [(0, vue.createElementVNode)("div", _hoisted_59, [(0, vue.createElementVNode)("span", {
|
|
4519
4574
|
class: "truncate max-w-[14rem]",
|
|
4520
4575
|
title: field.label
|
|
4521
|
-
}, (0, vue.toDisplayString)(field.label), 9,
|
|
4576
|
+
}, (0, vue.toDisplayString)(field.label), 9, _hoisted_60), (0, vue.unref)(_mulmoclaude_core_collection.isSortableField)(field) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
4522
4577
|
key: 0,
|
|
4523
4578
|
type: "button",
|
|
4524
4579
|
class: (0, vue.normalizeClass)(["inline-flex items-center justify-center rounded p-0.5 -my-1 leading-none transition-colors", sortButtonClass(key)]),
|
|
@@ -4527,8 +4582,8 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4527
4582
|
onClick: (0, vue.withModifiers)(($event) => cycleSort(key), ["stop"]),
|
|
4528
4583
|
onPointerenter: ($event) => hoveredSortKey.value = key,
|
|
4529
4584
|
onPointerleave: _cache[13] || (_cache[13] = ($event) => hoveredSortKey.value = null)
|
|
4530
|
-
}, [(0, vue.createElementVNode)("span",
|
|
4531
|
-
}), 128))])]), (0, vue.createElementVNode)("tbody",
|
|
4585
|
+
}, [(0, vue.createElementVNode)("span", _hoisted_62, (0, vue.toDisplayString)(sortIconName(key)), 1)], 42, _hoisted_61)) : (0, vue.createCommentVNode)("", true)])], 8, _hoisted_58);
|
|
4586
|
+
}), 128))])]), (0, vue.createElementVNode)("tbody", _hoisted_63, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(sortedItems.value, (item) => {
|
|
4532
4587
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("tr", {
|
|
4533
4588
|
key: String(item[collection.value.schema.primaryKey] ?? ""),
|
|
4534
4589
|
class: (0, vue.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" : ""]),
|
|
@@ -4552,7 +4607,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4552
4607
|
"aria-label": field.label,
|
|
4553
4608
|
onClick: _cache[14] || (_cache[14] = (0, vue.withModifiers)(() => {}, ["stop"])),
|
|
4554
4609
|
onChange: ($event) => commitToggle(item, field)
|
|
4555
|
-
}, null, 40,
|
|
4610
|
+
}, null, 40, _hoisted_65)) : field.type === "boolean" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("input", {
|
|
4556
4611
|
key: 1,
|
|
4557
4612
|
type: "checkbox",
|
|
4558
4613
|
checked: item[key] === true,
|
|
@@ -4562,7 +4617,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4562
4617
|
"aria-label": field.label,
|
|
4563
4618
|
onClick: _cache[15] || (_cache[15] = (0, vue.withModifiers)(() => {}, ["stop"])),
|
|
4564
4619
|
onChange: ($event) => commitInlineEdit(item, String(key), field, $event.target.checked)
|
|
4565
|
-
}, null, 40,
|
|
4620
|
+
}, null, 40, _hoisted_66)) : field.type === "ref" && field.to && typeof item[key] === "string" && item[key] ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_67, [(0, vue.createElementVNode)("a", {
|
|
4566
4621
|
href: (0, vue.unref)(cui).recordHref?.(field.to, String(item[key])),
|
|
4567
4622
|
tabindex: (0, vue.unref)(cui).recordHref?.(field.to, String(item[key])) ? void 0 : 0,
|
|
4568
4623
|
role: "link",
|
|
@@ -4570,7 +4625,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4570
4625
|
"data-testid": `collections-ref-link-${key}-${item[key]}`,
|
|
4571
4626
|
onClick: ($event) => (0, vue.unref)(activateRefLink)($event, field.to, String(item[key]), true),
|
|
4572
4627
|
onKeydown: [(0, vue.withKeys)(($event) => (0, vue.unref)(activateRefLink)($event, field.to, String(item[key]), true), ["enter"]), (0, vue.withKeys)(($event) => (0, vue.unref)(activateRefLink)($event, field.to, String(item[key]), true), ["space"])]
|
|
4573
|
-
}, (0, vue.toDisplayString)((0, vue.unref)(refDisplay)(field.to, String(item[key]))), 41,
|
|
4628
|
+
}, (0, vue.toDisplayString)((0, vue.unref)(refDisplay)(field.to, String(item[key]))), 41, _hoisted_68)])) : field.type === "enum" && Array.isArray(field.values) && field.values.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("select", {
|
|
4574
4629
|
key: 3,
|
|
4575
4630
|
value: item[key] == null ? "" : String(item[key]),
|
|
4576
4631
|
disabled: isRowInlineSaving(item),
|
|
@@ -4579,12 +4634,12 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4579
4634
|
"aria-label": field.label,
|
|
4580
4635
|
onClick: _cache[16] || (_cache[16] = (0, vue.withModifiers)(() => {}, ["stop"])),
|
|
4581
4636
|
onChange: ($event) => commitInlineEdit(item, String(key), field, $event.target.value)
|
|
4582
|
-
}, [showEnumPlaceholder(item, String(key)) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("option",
|
|
4637
|
+
}, [showEnumPlaceholder(item, String(key)) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("option", _hoisted_70, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.selectPlaceholder")), 1)) : (0, vue.createCommentVNode)("", true), ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(field.values, (value) => {
|
|
4583
4638
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("option", {
|
|
4584
4639
|
key: value,
|
|
4585
4640
|
value
|
|
4586
|
-
}, (0, vue.toDisplayString)(value), 9,
|
|
4587
|
-
}), 128))], 42,
|
|
4641
|
+
}, (0, vue.toDisplayString)(value), 9, _hoisted_71);
|
|
4642
|
+
}), 128))], 42, _hoisted_69)) : field.type === "money" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_72, (0, vue.toDisplayString)((0, vue.unref)(formatMoney)(item[key], (0, vue.unref)(resolveCurrency)(field, item), (0, vue.unref)(locale))), 1)) : field.type === "table" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_73, [_cache[46] || (_cache[46] = (0, vue.createElementVNode)("span", { class: "material-icons text-[11px]" }, "list", -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(tableSummary(item[key])), 1)])) : field.type === "derived" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_74, (0, vue.toDisplayString)((0, vue.unref)(derivedDisplay)(field, (0, vue.unref)(evaluateDerivedAgainstItem)(field, String(key), item), item)), 1)) : field.type !== "file" && (0, vue.unref)(isExternalUrl)(item[key]) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
|
|
4588
4643
|
key: 7,
|
|
4589
4644
|
href: String(item[key]),
|
|
4590
4645
|
target: "_blank",
|
|
@@ -4592,7 +4647,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4592
4647
|
class: "block truncate text-blue-600 hover:text-blue-800 hover:underline font-semibold",
|
|
4593
4648
|
"data-testid": `collections-url-link-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
4594
4649
|
onClick: _cache[17] || (_cache[17] = (0, vue.withModifiers)(() => {}, ["stop"]))
|
|
4595
|
-
}, (0, vue.toDisplayString)(String(item[key])), 9,
|
|
4650
|
+
}, (0, vue.toDisplayString)(String(item[key])), 9, _hoisted_75)) : field.type === "file" && (0, vue.unref)(artifactUrl)(item[key]) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
|
|
4596
4651
|
key: 8,
|
|
4597
4652
|
href: (0, vue.unref)(artifactUrl)(item[key]) ?? void 0,
|
|
4598
4653
|
target: "_blank",
|
|
@@ -4600,17 +4655,17 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4600
4655
|
class: "block truncate text-blue-600 hover:text-blue-800 hover:underline font-semibold",
|
|
4601
4656
|
"data-testid": `collections-file-link-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
4602
4657
|
onClick: _cache[18] || (_cache[18] = (0, vue.withModifiers)(() => {}, ["stop"]))
|
|
4603
|
-
}, (0, vue.toDisplayString)(String(item[key])), 9,
|
|
4658
|
+
}, (0, vue.toDisplayString)(String(item[key])), 9, _hoisted_76)) : field.type === "file" && (0, vue.unref)(fileRoutePath)(item[key]) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
|
|
4604
4659
|
key: 9,
|
|
4605
4660
|
href: (0, vue.unref)(fileRoutePath)(item[key]) ?? void 0,
|
|
4606
4661
|
class: "block truncate text-blue-600 hover:text-blue-800 hover:underline font-semibold",
|
|
4607
4662
|
"data-testid": `collections-file-link-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
4608
4663
|
onClick: ($event) => (0, vue.unref)(activatePathLink)($event, (0, vue.unref)(fileRoutePath)(item[key]) ?? "", true)
|
|
4609
|
-
}, (0, vue.toDisplayString)(String(item[key])), 9,
|
|
4610
|
-
}), 128))], 42,
|
|
4664
|
+
}, (0, vue.toDisplayString)(String(item[key])), 9, _hoisted_77)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_78, (0, vue.toDisplayString)((0, vue.unref)(formatCell)(item[key], field.type)), 1))], 64)) : (0, vue.createCommentVNode)("", true)]);
|
|
4665
|
+
}), 128))], 42, _hoisted_64);
|
|
4611
4666
|
}), 128))])])]))]),
|
|
4612
4667
|
collection.value && (viewing.value || editing.value) && !(calendarActive.value && openDay.value) ? ((0, vue.openBlock)(), (0, vue.createBlock)(CollectionRecordModal_default, {
|
|
4613
|
-
key:
|
|
4668
|
+
key: 4,
|
|
4614
4669
|
onClose: closeRecordModal
|
|
4615
4670
|
}, {
|
|
4616
4671
|
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(CollectionRecordPanel_default, {
|
|
@@ -4655,7 +4710,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4655
4710
|
_: 1
|
|
4656
4711
|
})) : (0, vue.createCommentVNode)("", true),
|
|
4657
4712
|
configOpen.value && collection.value ? ((0, vue.openBlock)(), (0, vue.createBlock)(CollectionViewConfigModal_default, {
|
|
4658
|
-
key:
|
|
4713
|
+
key: 5,
|
|
4659
4714
|
slug: collection.value.slug,
|
|
4660
4715
|
title: collection.value.title,
|
|
4661
4716
|
views: customViews.value,
|
|
@@ -4667,7 +4722,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4667
4722
|
"views"
|
|
4668
4723
|
])) : (0, vue.createCommentVNode)("", true),
|
|
4669
4724
|
chatOpen.value && collection.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
|
|
4670
|
-
key:
|
|
4725
|
+
key: 6,
|
|
4671
4726
|
class: "fixed inset-0 z-30 flex items-center justify-center bg-slate-900/60 backdrop-blur-sm p-4 transition-all duration-300",
|
|
4672
4727
|
role: "dialog",
|
|
4673
4728
|
"aria-modal": "true",
|
|
@@ -4675,19 +4730,19 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4675
4730
|
"data-testid": "collections-chat-modal",
|
|
4676
4731
|
onClick: (0, vue.withModifiers)(closeChat, ["self"]),
|
|
4677
4732
|
onKeydown: (0, vue.withKeys)(closeChat, ["esc"])
|
|
4678
|
-
}, [(0, vue.createElementVNode)("div",
|
|
4679
|
-
(0, vue.createElementVNode)("header",
|
|
4680
|
-
_cache[
|
|
4681
|
-
(0, vue.createElementVNode)("div",
|
|
4733
|
+
}, [(0, vue.createElementVNode)("div", _hoisted_79, [
|
|
4734
|
+
(0, vue.createElementVNode)("header", _hoisted_80, [
|
|
4735
|
+
_cache[48] || (_cache[48] = (0, vue.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" }, [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "forum")], -1)),
|
|
4736
|
+
(0, vue.createElementVNode)("div", _hoisted_81, [(0, vue.createElementVNode)("h2", _hoisted_82, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.chatTitle")), 1), (0, vue.createElementVNode)("span", _hoisted_83, (0, vue.toDisplayString)(collection.value.title), 1)]),
|
|
4682
4737
|
(0, vue.createElementVNode)("button", {
|
|
4683
4738
|
type: "button",
|
|
4684
4739
|
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",
|
|
4685
4740
|
"aria-label": (0, vue.unref)(t)("common.close"),
|
|
4686
4741
|
"data-testid": "collections-chat-close",
|
|
4687
4742
|
onClick: closeChat
|
|
4688
|
-
}, [..._cache[
|
|
4743
|
+
}, [..._cache[47] || (_cache[47] = [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "close", -1)])], 8, _hoisted_84)
|
|
4689
4744
|
]),
|
|
4690
|
-
(0, vue.createElementVNode)("div",
|
|
4745
|
+
(0, vue.createElementVNode)("div", _hoisted_85, [(0, vue.withDirectives)((0, vue.createElementVNode)("textarea", {
|
|
4691
4746
|
ref_key: "chatInputEl",
|
|
4692
4747
|
ref: chatInputEl,
|
|
4693
4748
|
"onUpdate:modelValue": _cache[22] || (_cache[22] = ($event) => chatMessage.value = $event),
|
|
@@ -4696,8 +4751,8 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4696
4751
|
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",
|
|
4697
4752
|
"data-testid": "collections-chat-input",
|
|
4698
4753
|
onKeydown: [(0, vue.withKeys)((0, vue.withModifiers)(submitChat, ["meta"]), ["enter"]), (0, vue.withKeys)((0, vue.withModifiers)(submitChat, ["ctrl"]), ["enter"])]
|
|
4699
|
-
}, null, 40,
|
|
4700
|
-
(0, vue.createElementVNode)("footer",
|
|
4754
|
+
}, null, 40, _hoisted_86), [[vue.vModelText, chatMessage.value]])]),
|
|
4755
|
+
(0, vue.createElementVNode)("footer", _hoisted_87, [(0, vue.createElementVNode)("button", {
|
|
4701
4756
|
type: "button",
|
|
4702
4757
|
class: "h-8 px-2.5 rounded text-xs font-bold text-slate-500 hover:bg-slate-200/50 transition-colors",
|
|
4703
4758
|
"data-testid": "collections-chat-cancel",
|
|
@@ -4708,7 +4763,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4708
4763
|
disabled: !chatMessage.value.trim(),
|
|
4709
4764
|
"data-testid": "collections-chat-send",
|
|
4710
4765
|
onClick: submitChat
|
|
4711
|
-
}, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.chatStart")), 9,
|
|
4766
|
+
}, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.chatStart")), 9, _hoisted_88)])
|
|
4712
4767
|
])], 32)) : (0, vue.createCommentVNode)("", true)
|
|
4713
4768
|
]);
|
|
4714
4769
|
};
|
|
@@ -5153,8 +5208,10 @@ exports.CollectionsIndexView = CollectionsIndexView_default;
|
|
|
5153
5208
|
exports.FeedsView = FeedsView_default;
|
|
5154
5209
|
exports.PresentCollectionPreview = Preview_default;
|
|
5155
5210
|
exports.PresentCollectionView = View_default;
|
|
5211
|
+
exports.applicableViewModes = applicableViewModes;
|
|
5156
5212
|
exports.collectionUi = collectionUi;
|
|
5157
5213
|
exports.configureCollectionUi = configureCollectionUi;
|
|
5214
|
+
exports.customViewKey = customViewKey;
|
|
5158
5215
|
exports.plugin = plugin;
|
|
5159
5216
|
exports.readCollectionSort = readCollectionSort;
|
|
5160
5217
|
exports.readCollectionViewMode = readCollectionViewMode;
|