@mulmoclaude/collection-plugin 0.13.0 → 0.13.1
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 +13 -4
- package/dist/vue/components/CollectionView.vue.d.ts.map +1 -1
- package/dist/vue/lang/en.d.ts +1 -1
- package/dist/vue/lang/index.d.ts +1 -1
- package/dist/vue.cjs +258 -186
- package/dist/vue.cjs.map +1 -1
- package/dist/vue.js +258 -186
- package/dist/vue.js.map +1 -1
- package/package.json +3 -3
package/dist/vue.cjs
CHANGED
|
@@ -114,7 +114,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
114
114
|
searchSummary: "Showing {shown} of {total}",
|
|
115
115
|
noMatchingItems: "No matching items",
|
|
116
116
|
clearSearch: "Clear search",
|
|
117
|
-
|
|
117
|
+
flagFilterButton: "Filters",
|
|
118
118
|
flagFilterAll: "Filter by {label}",
|
|
119
119
|
flagFilterHide: "Hiding {label}",
|
|
120
120
|
flagFilterOnly: "Only {label}",
|
|
@@ -262,7 +262,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
262
262
|
searchSummary: "{total} 件中 {shown} 件を表示",
|
|
263
263
|
noMatchingItems: "一致する項目がありません",
|
|
264
264
|
clearSearch: "検索をクリア",
|
|
265
|
-
|
|
265
|
+
flagFilterButton: "絞り込み",
|
|
266
266
|
flagFilterAll: "{label} で絞り込む",
|
|
267
267
|
flagFilterHide: "{label} を非表示中",
|
|
268
268
|
flagFilterOnly: "{label} のみ表示中",
|
|
@@ -410,7 +410,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
410
410
|
searchSummary: "显示 {total} 条中的 {shown} 条",
|
|
411
411
|
noMatchingItems: "没有匹配的项目",
|
|
412
412
|
clearSearch: "清除搜索",
|
|
413
|
-
|
|
413
|
+
flagFilterButton: "筛选",
|
|
414
414
|
flagFilterAll: "按{label}筛选",
|
|
415
415
|
flagFilterHide: "已隐藏{label}",
|
|
416
416
|
flagFilterOnly: "仅显示{label}",
|
|
@@ -558,7 +558,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
558
558
|
searchSummary: "{total}개 중 {shown}개 표시",
|
|
559
559
|
noMatchingItems: "일치하는 항목이 없습니다",
|
|
560
560
|
clearSearch: "검색 지우기",
|
|
561
|
-
|
|
561
|
+
flagFilterButton: "필터",
|
|
562
562
|
flagFilterAll: "{label}(으)로 필터",
|
|
563
563
|
flagFilterHide: "{label} 숨김",
|
|
564
564
|
flagFilterOnly: "{label}만 표시",
|
|
@@ -706,7 +706,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
706
706
|
searchSummary: "Mostrando {shown} de {total}",
|
|
707
707
|
noMatchingItems: "No hay elementos coincidentes",
|
|
708
708
|
clearSearch: "Borrar búsqueda",
|
|
709
|
-
|
|
709
|
+
flagFilterButton: "Filtros",
|
|
710
710
|
flagFilterAll: "Filtrar por {label}",
|
|
711
711
|
flagFilterHide: "Ocultando {label}",
|
|
712
712
|
flagFilterOnly: "Solo {label}",
|
|
@@ -854,7 +854,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
854
854
|
searchSummary: "Mostrando {shown} de {total}",
|
|
855
855
|
noMatchingItems: "Nenhum item correspondente",
|
|
856
856
|
clearSearch: "Limpar busca",
|
|
857
|
-
|
|
857
|
+
flagFilterButton: "Filtros",
|
|
858
858
|
flagFilterAll: "Filtrar por {label}",
|
|
859
859
|
flagFilterHide: "Ocultando {label}",
|
|
860
860
|
flagFilterOnly: "Somente {label}",
|
|
@@ -1002,7 +1002,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
1002
1002
|
searchSummary: "Affichage de {shown} sur {total}",
|
|
1003
1003
|
noMatchingItems: "Aucun élément correspondant",
|
|
1004
1004
|
clearSearch: "Effacer la recherche",
|
|
1005
|
-
|
|
1005
|
+
flagFilterButton: "Filtres",
|
|
1006
1006
|
flagFilterAll: "Filtrer par {label}",
|
|
1007
1007
|
flagFilterHide: "{label} masqué",
|
|
1008
1008
|
flagFilterOnly: "Uniquement {label}",
|
|
@@ -1150,7 +1150,7 @@ var i18n = (0, vue_i18n.createI18n)({
|
|
|
1150
1150
|
searchSummary: "{shown} von {total} werden angezeigt",
|
|
1151
1151
|
noMatchingItems: "Keine passenden Einträge",
|
|
1152
1152
|
clearSearch: "Suche zurücksetzen",
|
|
1153
|
-
|
|
1153
|
+
flagFilterButton: "Filter",
|
|
1154
1154
|
flagFilterAll: "Nach {label} filtern",
|
|
1155
1155
|
flagFilterHide: "{label} ausgeblendet",
|
|
1156
1156
|
flagFilterOnly: "Nur {label}",
|
|
@@ -4043,199 +4043,201 @@ var _hoisted_21$3 = {
|
|
|
4043
4043
|
var _hoisted_22$3 = ["placeholder", "aria-label"];
|
|
4044
4044
|
var _hoisted_23$2 = ["aria-label"];
|
|
4045
4045
|
var _hoisted_24$1 = { class: "flex items-center gap-2" };
|
|
4046
|
-
var _hoisted_25$1 = ["aria-label"];
|
|
4047
|
-
var _hoisted_26$1 =
|
|
4046
|
+
var _hoisted_25$1 = ["aria-label", "aria-expanded"];
|
|
4047
|
+
var _hoisted_26$1 = {
|
|
4048
|
+
key: 0,
|
|
4049
|
+
class: "min-w-4 h-4 px-1 flex items-center justify-center rounded-full bg-indigo-600 text-white text-[10px] font-bold"
|
|
4050
|
+
};
|
|
4051
|
+
var _hoisted_27$1 = ["aria-label"];
|
|
4052
|
+
var _hoisted_28 = [
|
|
4048
4053
|
"title",
|
|
4049
4054
|
"aria-label",
|
|
4050
4055
|
"aria-pressed",
|
|
4051
4056
|
"data-testid",
|
|
4052
4057
|
"onClick"
|
|
4053
4058
|
];
|
|
4054
|
-
var
|
|
4055
|
-
|
|
4056
|
-
"aria-hidden": "true"
|
|
4057
|
-
};
|
|
4058
|
-
var _hoisted_28 = ["aria-label"];
|
|
4059
|
-
var _hoisted_29 = ["aria-pressed"];
|
|
4060
|
-
var _hoisted_30 = ["aria-pressed"];
|
|
4059
|
+
var _hoisted_29 = { class: "flex-1 text-left" };
|
|
4060
|
+
var _hoisted_30 = ["aria-label"];
|
|
4061
4061
|
var _hoisted_31 = ["aria-pressed"];
|
|
4062
|
-
var _hoisted_32 = [
|
|
4062
|
+
var _hoisted_32 = ["aria-pressed"];
|
|
4063
|
+
var _hoisted_33 = ["aria-pressed"];
|
|
4064
|
+
var _hoisted_34 = [
|
|
4063
4065
|
"aria-pressed",
|
|
4064
4066
|
"data-testid",
|
|
4065
4067
|
"onClick"
|
|
4066
4068
|
];
|
|
4067
|
-
var
|
|
4068
|
-
var
|
|
4069
|
+
var _hoisted_35 = { class: "material-icons text-sm" };
|
|
4070
|
+
var _hoisted_36 = [
|
|
4069
4071
|
"title",
|
|
4070
4072
|
"aria-label",
|
|
4071
4073
|
"aria-expanded"
|
|
4072
4074
|
];
|
|
4073
|
-
var
|
|
4075
|
+
var _hoisted_37 = {
|
|
4074
4076
|
key: 0,
|
|
4075
4077
|
class: "absolute left-0 top-full mt-1 z-20 min-w-max rounded border border-slate-200 bg-white shadow-lg py-1",
|
|
4076
4078
|
"data-testid": "collection-view-add-menu"
|
|
4077
4079
|
};
|
|
4078
|
-
var
|
|
4079
|
-
var _hoisted_37 = ["value", "aria-label"];
|
|
4080
|
-
var _hoisted_38 = ["value"];
|
|
4080
|
+
var _hoisted_38 = ["title", "aria-label"];
|
|
4081
4081
|
var _hoisted_39 = ["value", "aria-label"];
|
|
4082
4082
|
var _hoisted_40 = ["value"];
|
|
4083
|
-
var _hoisted_41 =
|
|
4083
|
+
var _hoisted_41 = ["value", "aria-label"];
|
|
4084
|
+
var _hoisted_42 = ["value"];
|
|
4085
|
+
var _hoisted_43 = {
|
|
4084
4086
|
key: 4,
|
|
4085
4087
|
class: "text-[10px] text-slate-400 font-bold uppercase tracking-wider select-none"
|
|
4086
4088
|
};
|
|
4087
|
-
var
|
|
4089
|
+
var _hoisted_44 = {
|
|
4088
4090
|
key: 3,
|
|
4089
4091
|
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",
|
|
4090
4092
|
"data-testid": "collections-data-issues"
|
|
4091
4093
|
};
|
|
4092
|
-
var
|
|
4093
|
-
var
|
|
4094
|
-
var
|
|
4094
|
+
var _hoisted_45 = { class: "flex-1" };
|
|
4095
|
+
var _hoisted_46 = { class: "flex-1 overflow-auto" };
|
|
4096
|
+
var _hoisted_47 = {
|
|
4095
4097
|
key: 0,
|
|
4096
4098
|
class: "flex flex-col items-center justify-center py-20 text-sm text-slate-500 gap-3"
|
|
4097
4099
|
};
|
|
4098
|
-
var
|
|
4100
|
+
var _hoisted_48 = {
|
|
4099
4101
|
key: 1,
|
|
4100
4102
|
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"
|
|
4101
4103
|
};
|
|
4102
|
-
var
|
|
4103
|
-
var
|
|
4104
|
+
var _hoisted_49 = { key: 2 };
|
|
4105
|
+
var _hoisted_50 = {
|
|
4104
4106
|
key: 3,
|
|
4105
4107
|
class: "p-4"
|
|
4106
4108
|
};
|
|
4107
|
-
var
|
|
4109
|
+
var _hoisted_51 = {
|
|
4108
4110
|
key: 4,
|
|
4109
4111
|
class: "h-full flex flex-col"
|
|
4110
4112
|
};
|
|
4111
|
-
var
|
|
4113
|
+
var _hoisted_52 = {
|
|
4112
4114
|
key: 0,
|
|
4113
4115
|
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",
|
|
4114
4116
|
"data-testid": "collections-inline-error"
|
|
4115
4117
|
};
|
|
4116
|
-
var
|
|
4117
|
-
var
|
|
4118
|
-
var
|
|
4119
|
-
var
|
|
4118
|
+
var _hoisted_53 = { class: "flex-1" };
|
|
4119
|
+
var _hoisted_54 = ["aria-label"];
|
|
4120
|
+
var _hoisted_55 = { class: "flex-1 min-h-0 px-3 py-2" };
|
|
4121
|
+
var _hoisted_56 = {
|
|
4120
4122
|
key: 5,
|
|
4121
4123
|
class: "h-full",
|
|
4122
4124
|
"data-testid": "collection-custom-view-body"
|
|
4123
4125
|
};
|
|
4124
|
-
var
|
|
4126
|
+
var _hoisted_57 = {
|
|
4125
4127
|
key: 6,
|
|
4126
4128
|
class: "flex flex-col items-center justify-center py-20 text-sm text-slate-400 gap-2"
|
|
4127
4129
|
};
|
|
4128
|
-
var
|
|
4129
|
-
var
|
|
4130
|
+
var _hoisted_58 = { class: "font-semibold text-slate-600" };
|
|
4131
|
+
var _hoisted_59 = {
|
|
4130
4132
|
key: 7,
|
|
4131
4133
|
class: "flex flex-col items-center justify-center py-20 text-sm text-slate-400 gap-2"
|
|
4132
4134
|
};
|
|
4133
|
-
var
|
|
4134
|
-
var
|
|
4135
|
+
var _hoisted_60 = { class: "font-semibold text-slate-600" };
|
|
4136
|
+
var _hoisted_61 = {
|
|
4135
4137
|
key: 8,
|
|
4136
4138
|
class: "overflow-x-auto [container-type:inline-size]"
|
|
4137
4139
|
};
|
|
4138
|
-
var
|
|
4140
|
+
var _hoisted_62 = {
|
|
4139
4141
|
key: 0,
|
|
4140
4142
|
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",
|
|
4141
4143
|
"data-testid": "collections-inline-error"
|
|
4142
4144
|
};
|
|
4143
|
-
var
|
|
4144
|
-
var
|
|
4145
|
-
var
|
|
4146
|
-
var
|
|
4147
|
-
var
|
|
4148
|
-
var
|
|
4149
|
-
var
|
|
4150
|
-
var
|
|
4145
|
+
var _hoisted_63 = { class: "flex-1" };
|
|
4146
|
+
var _hoisted_64 = ["aria-label"];
|
|
4147
|
+
var _hoisted_65 = { class: "min-w-full text-xs" };
|
|
4148
|
+
var _hoisted_66 = { class: "bg-slate-50 border-b border-slate-200" };
|
|
4149
|
+
var _hoisted_67 = ["aria-sort"];
|
|
4150
|
+
var _hoisted_68 = { class: "flex items-center gap-1" };
|
|
4151
|
+
var _hoisted_69 = ["title"];
|
|
4152
|
+
var _hoisted_70 = [
|
|
4151
4153
|
"data-testid",
|
|
4152
4154
|
"aria-label",
|
|
4153
4155
|
"onClick",
|
|
4154
4156
|
"onPointerenter"
|
|
4155
4157
|
];
|
|
4156
|
-
var
|
|
4157
|
-
var
|
|
4158
|
-
var
|
|
4158
|
+
var _hoisted_71 = { class: "material-icons text-base align-middle" };
|
|
4159
|
+
var _hoisted_72 = { class: "divide-y divide-slate-100 bg-white" };
|
|
4160
|
+
var _hoisted_73 = [
|
|
4159
4161
|
"aria-label",
|
|
4160
4162
|
"data-testid",
|
|
4161
4163
|
"onClick",
|
|
4162
4164
|
"onKeydown"
|
|
4163
4165
|
];
|
|
4164
|
-
var
|
|
4166
|
+
var _hoisted_74 = [
|
|
4165
4167
|
"checked",
|
|
4166
4168
|
"disabled",
|
|
4167
4169
|
"data-testid",
|
|
4168
4170
|
"aria-label",
|
|
4169
4171
|
"onChange"
|
|
4170
4172
|
];
|
|
4171
|
-
var
|
|
4173
|
+
var _hoisted_75 = [
|
|
4172
4174
|
"checked",
|
|
4173
4175
|
"disabled",
|
|
4174
4176
|
"data-testid",
|
|
4175
4177
|
"aria-label",
|
|
4176
4178
|
"onChange"
|
|
4177
4179
|
];
|
|
4178
|
-
var
|
|
4179
|
-
var
|
|
4180
|
+
var _hoisted_76 = ["data-testid", "aria-label"];
|
|
4181
|
+
var _hoisted_77 = {
|
|
4180
4182
|
key: 3,
|
|
4181
4183
|
class: "block truncate"
|
|
4182
4184
|
};
|
|
4183
|
-
var
|
|
4185
|
+
var _hoisted_78 = [
|
|
4184
4186
|
"href",
|
|
4185
4187
|
"tabindex",
|
|
4186
4188
|
"data-testid",
|
|
4187
4189
|
"onClick",
|
|
4188
4190
|
"onKeydown"
|
|
4189
4191
|
];
|
|
4190
|
-
var
|
|
4192
|
+
var _hoisted_79 = [
|
|
4191
4193
|
"value",
|
|
4192
4194
|
"disabled",
|
|
4193
4195
|
"data-testid",
|
|
4194
4196
|
"aria-label",
|
|
4195
4197
|
"onChange"
|
|
4196
4198
|
];
|
|
4197
|
-
var
|
|
4199
|
+
var _hoisted_80 = {
|
|
4198
4200
|
key: 0,
|
|
4199
4201
|
value: ""
|
|
4200
4202
|
};
|
|
4201
|
-
var
|
|
4202
|
-
var
|
|
4203
|
+
var _hoisted_81 = ["value"];
|
|
4204
|
+
var _hoisted_82 = {
|
|
4203
4205
|
key: 5,
|
|
4204
4206
|
class: "block truncate tabular-nums font-semibold text-slate-900"
|
|
4205
4207
|
};
|
|
4206
|
-
var
|
|
4208
|
+
var _hoisted_83 = {
|
|
4207
4209
|
key: 6,
|
|
4208
4210
|
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"
|
|
4209
4211
|
};
|
|
4210
|
-
var
|
|
4212
|
+
var _hoisted_84 = {
|
|
4211
4213
|
key: 7,
|
|
4212
4214
|
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"
|
|
4213
4215
|
};
|
|
4214
|
-
var
|
|
4215
|
-
var
|
|
4216
|
-
var
|
|
4217
|
-
var
|
|
4216
|
+
var _hoisted_85 = ["data-testid"];
|
|
4217
|
+
var _hoisted_86 = ["href", "data-testid"];
|
|
4218
|
+
var _hoisted_87 = ["href", "data-testid"];
|
|
4219
|
+
var _hoisted_88 = [
|
|
4218
4220
|
"href",
|
|
4219
4221
|
"data-testid",
|
|
4220
4222
|
"onClick"
|
|
4221
4223
|
];
|
|
4222
|
-
var
|
|
4224
|
+
var _hoisted_89 = {
|
|
4223
4225
|
key: 12,
|
|
4224
4226
|
class: "block truncate text-slate-600"
|
|
4225
4227
|
};
|
|
4226
|
-
var
|
|
4227
|
-
var
|
|
4228
|
-
var
|
|
4229
|
-
var
|
|
4228
|
+
var _hoisted_90 = { class: "bg-white rounded-2xl shadow-2xl w-full max-w-xl flex flex-col border border-slate-200 overflow-hidden" };
|
|
4229
|
+
var _hoisted_91 = { class: "px-6 py-4 border-b border-slate-100 flex items-center gap-3 bg-slate-50/50" };
|
|
4230
|
+
var _hoisted_92 = { class: "flex-1" };
|
|
4231
|
+
var _hoisted_93 = {
|
|
4230
4232
|
id: "collections-chat-title",
|
|
4231
4233
|
class: "text-sm font-bold text-slate-800 uppercase tracking-wide"
|
|
4232
4234
|
};
|
|
4233
|
-
var
|
|
4234
|
-
var
|
|
4235
|
-
var
|
|
4236
|
-
var
|
|
4237
|
-
var
|
|
4238
|
-
var
|
|
4235
|
+
var _hoisted_94 = { class: "text-xs text-slate-400 font-semibold" };
|
|
4236
|
+
var _hoisted_95 = ["aria-label"];
|
|
4237
|
+
var _hoisted_96 = { class: "px-6 py-5" };
|
|
4238
|
+
var _hoisted_97 = ["placeholder", "onKeydown"];
|
|
4239
|
+
var _hoisted_98 = { class: "px-6 py-3.5 border-t border-slate-100 flex items-center justify-end gap-2 bg-slate-50/50" };
|
|
4240
|
+
var _hoisted_99 = ["disabled"];
|
|
4239
4241
|
/** `slug` / `selected` are supplied only in EMBEDDED mode (the
|
|
4240
4242
|
* `presentCollection` chat card mounts this component and drives both
|
|
4241
4243
|
* from the tool result). In standalone route mode (the
|
|
@@ -4247,6 +4249,10 @@ var _hoisted_97 = ["disabled"];
|
|
|
4247
4249
|
* actions send into the current session instead of spawning a new
|
|
4248
4250
|
* chat (see `runAction` / `submitChat`). */
|
|
4249
4251
|
var COMPLETION_CHIP_KEY = "__completion";
|
|
4252
|
+
/** The field types that earn a filter-menu entry: declared predicates
|
|
4253
|
+
* (`flag`) plus the fields that ARE a predicate already — a stored
|
|
4254
|
+
* `boolean` and a `toggle`'s projected on/off state. Enums stay out:
|
|
4255
|
+
* they need a value picker, and kanban already slices by enum. */
|
|
4250
4256
|
var LIVE_REFRESH_DEBOUNCE_MS = 150;
|
|
4251
4257
|
//#endregion
|
|
4252
4258
|
//#region src/vue/components/CollectionView.vue
|
|
@@ -4382,14 +4388,34 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4382
4388
|
return slug ? readCollectionFlagFilters(slug) : {};
|
|
4383
4389
|
}
|
|
4384
4390
|
const flagFilters = (0, vue.ref)(storedFlagFiltersFor(activeSlug.value));
|
|
4391
|
+
const CHIP_FIELD_TYPES = /* @__PURE__ */ new Set([
|
|
4392
|
+
"flag",
|
|
4393
|
+
"boolean",
|
|
4394
|
+
"toggle"
|
|
4395
|
+
]);
|
|
4396
|
+
/** True when an existing FIELD chip already expresses the legacy
|
|
4397
|
+
* completion predicate exactly, so a synthesized "done" chip would be a
|
|
4398
|
+
* duplicate: a boolean `completionField` (done ⇔ `"true"` ⇔ the
|
|
4399
|
+
* boolean's own chip), or a `toggle` projecting the `completionField`
|
|
4400
|
+
* whose `onValue` is the single done value (the todos-schema shape:
|
|
4401
|
+
* toggle "Done" on `status` + `completionDoneValues: ["done"]`). A
|
|
4402
|
+
* superset pair (extra done values) still synthesizes — no field chip
|
|
4403
|
+
* covers it. */
|
|
4404
|
+
function completionCoveredByFieldChip(schema) {
|
|
4405
|
+
const { completionField, completionDoneValues } = schema;
|
|
4406
|
+
if (completionDoneValues?.length !== 1) return false;
|
|
4407
|
+
const [doneValue] = completionDoneValues;
|
|
4408
|
+
if (schema.fields[completionField ?? ""]?.type === "boolean") return doneValue === "true";
|
|
4409
|
+
return Object.values(schema.fields).some((field) => field.type === "toggle" && field.field === completionField && field.onValue === doneValue);
|
|
4410
|
+
}
|
|
4385
4411
|
const flagChips = (0, vue.computed)(() => {
|
|
4386
4412
|
const schema = collection.value?.schema;
|
|
4387
4413
|
if (!schema) return [];
|
|
4388
|
-
const chips = Object.entries(schema.fields).filter(([, field]) => field.type
|
|
4414
|
+
const chips = Object.entries(schema.fields).filter(([, field]) => CHIP_FIELD_TYPES.has(field.type)).map(([key, field]) => ({
|
|
4389
4415
|
key,
|
|
4390
4416
|
label: field.label ?? key
|
|
4391
4417
|
}));
|
|
4392
|
-
if (schema.completionField && schema.completionDoneValues && schema.fields[schema.completionField]?.type !== "flag" && schema.fields[COMPLETION_CHIP_KEY] === void 0) chips.push({
|
|
4418
|
+
if (schema.completionField && schema.completionDoneValues && schema.fields[schema.completionField]?.type !== "flag" && !completionCoveredByFieldChip(schema) && schema.fields[COMPLETION_CHIP_KEY] === void 0) chips.push({
|
|
4393
4419
|
key: COMPLETION_CHIP_KEY,
|
|
4394
4420
|
label: t("collectionsView.flagDoneChip"),
|
|
4395
4421
|
synthetic: true
|
|
@@ -4412,11 +4438,16 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4412
4438
|
return render.deriveRecord(item)[key] === true;
|
|
4413
4439
|
}
|
|
4414
4440
|
/** The chip's boolean for one row — `itemIsDone` for the synthesized
|
|
4415
|
-
* completion chip, the
|
|
4441
|
+
* completion chip, the stored/projected value for `boolean`/`toggle`
|
|
4442
|
+
* fields, the computed flag value otherwise. */
|
|
4416
4443
|
function chipMatches(chip, item) {
|
|
4417
4444
|
const schema = collection.value?.schema;
|
|
4418
4445
|
if (!schema) return false;
|
|
4419
|
-
|
|
4446
|
+
if (chip.synthetic) return (0, _mulmoclaude_core_collection.itemIsDone)(schema, item);
|
|
4447
|
+
const field = schema.fields[chip.key];
|
|
4448
|
+
if (field?.type === "toggle") return toggleChecked(item, field);
|
|
4449
|
+
if (field?.type === "boolean") return item[chip.key] === true;
|
|
4450
|
+
return flagValueOf(chip.key, item);
|
|
4420
4451
|
}
|
|
4421
4452
|
/** `filteredItems` further narrowed by every ACTIVE chip (AND). Consumed
|
|
4422
4453
|
* only by the table (sortedItems / count summary / empty state). */
|
|
@@ -4436,15 +4467,31 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
4436
4467
|
} : rest;
|
|
4437
4468
|
}
|
|
4438
4469
|
function flagChipIcon(key) {
|
|
4470
|
+
return flagFilterMode(key) === "only" ? "check_box" : "check_box_outline_blank";
|
|
4471
|
+
}
|
|
4472
|
+
function flagChipIconClass(key) {
|
|
4439
4473
|
const mode = flagFilterMode(key);
|
|
4440
|
-
|
|
4474
|
+
if (mode === "hide") return "text-slate-600";
|
|
4475
|
+
if (mode === "only") return "text-indigo-600";
|
|
4476
|
+
return "text-slate-300";
|
|
4441
4477
|
}
|
|
4442
4478
|
function flagChipClass(key) {
|
|
4443
4479
|
const mode = flagFilterMode(key);
|
|
4444
|
-
if (mode === "hide") return "bg-slate-
|
|
4445
|
-
if (mode === "only") return "bg-indigo-
|
|
4446
|
-
return "
|
|
4447
|
-
}
|
|
4480
|
+
if (mode === "hide") return "bg-slate-100 text-slate-700";
|
|
4481
|
+
if (mode === "only") return "bg-indigo-50 text-indigo-700";
|
|
4482
|
+
return "text-slate-500";
|
|
4483
|
+
}
|
|
4484
|
+
/** How many chips currently filter (badge on the menu trigger). */
|
|
4485
|
+
const activeFlagFilterCount = (0, vue.computed)(() => flagChips.value.filter((chip) => flagFilterMode(chip.key) !== void 0).length);
|
|
4486
|
+
const filterMenuOpen = (0, vue.ref)(false);
|
|
4487
|
+
const filterMenuRef = (0, vue.ref)(null);
|
|
4488
|
+
function closeFilterMenuOnOutsideClick(event) {
|
|
4489
|
+
if (!filterMenuRef.value?.contains(event.target)) filterMenuOpen.value = false;
|
|
4490
|
+
}
|
|
4491
|
+
(0, vue.watch)(filterMenuOpen, (open) => {
|
|
4492
|
+
if (open) document.addEventListener("mousedown", closeFilterMenuOnOutsideClick);
|
|
4493
|
+
else document.removeEventListener("mousedown", closeFilterMenuOnOutsideClick);
|
|
4494
|
+
});
|
|
4448
4495
|
function flagChipTitle(chip) {
|
|
4449
4496
|
const mode = flagFilterMode(chip.key);
|
|
4450
4497
|
if (mode === "hide") return t("collectionsView.flagFilterHide", { label: chip.label });
|
|
@@ -5463,6 +5510,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5463
5510
|
anchorOverride.value = null;
|
|
5464
5511
|
kanbanOverride.value = null;
|
|
5465
5512
|
addMenuOpen.value = false;
|
|
5513
|
+
filterMenuOpen.value = false;
|
|
5466
5514
|
sortState.value = storedSortFor(slug);
|
|
5467
5515
|
flagFilters.value = storedFlagFiltersFor(slug);
|
|
5468
5516
|
}
|
|
@@ -5513,6 +5561,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5513
5561
|
clearLiveRefreshTimer();
|
|
5514
5562
|
if (refreshNoteTimer !== void 0) clearTimeout(refreshNoteTimer);
|
|
5515
5563
|
document.removeEventListener("mousedown", closeAddMenuOnOutsideClick);
|
|
5564
|
+
document.removeEventListener("mousedown", closeFilterMenuOnOutsideClick);
|
|
5516
5565
|
});
|
|
5517
5566
|
(0, vue.watch)([
|
|
5518
5567
|
activeView,
|
|
@@ -5549,9 +5598,9 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5549
5598
|
"aria-label": (0, vue.unref)(t)("collectionsView.backToIndex"),
|
|
5550
5599
|
"data-testid": "collections-back",
|
|
5551
5600
|
onClick: goBack
|
|
5552
|
-
}, [..._cache[
|
|
5601
|
+
}, [..._cache[28] || (_cache[28] = [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "arrow_back", -1)])], 8, _hoisted_3$5)) : (0, vue.createCommentVNode)("", true),
|
|
5553
5602
|
collection.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_4$5, [(0, vue.createElementVNode)("span", _hoisted_5$5, (0, vue.toDisplayString)(collection.value.icon), 1)])) : (0, vue.createCommentVNode)("", true),
|
|
5554
|
-
(0, vue.createElementVNode)("div", _hoisted_6$4, [(0, vue.createElementVNode)("h1", _hoisted_7$4, (0, vue.toDisplayString)(collection.value?.title ?? (0, vue.unref)(t)("collectionsView.title")), 1), collection.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_8$4, [(0, vue.createTextVNode)((0, vue.toDisplayString)(collection.value.slug) + " ", 1), isReadOnly.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createElementVNode)("span", _hoisted_9$4, [_cache[
|
|
5603
|
+
(0, vue.createElementVNode)("div", _hoisted_6$4, [(0, vue.createElementVNode)("h1", _hoisted_7$4, (0, vue.toDisplayString)(collection.value?.title ?? (0, vue.unref)(t)("collectionsView.title")), 1), collection.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_8$4, [(0, vue.createTextVNode)((0, vue.toDisplayString)(collection.value.slug) + " ", 1), isReadOnly.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [(0, vue.createElementVNode)("span", _hoisted_9$4, [_cache[29] || (_cache[29] = (0, vue.createElementVNode)("span", { class: "material-icons text-[11px]" }, "lock", -1)), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.readonlyChip")), 1)]), dataSourceRoute.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
|
|
5555
5604
|
key: 0,
|
|
5556
5605
|
href: dataSourceRoute.value ?? void 0,
|
|
5557
5606
|
class: "ml-1 normal-case tracking-normal font-mono font-normal text-slate-500 hover:text-indigo-700 hover:underline",
|
|
@@ -5584,7 +5633,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5584
5633
|
class: "h-8 px-2.5 flex items-center gap-1 rounded border border-indigo-200 bg-white hover:bg-indigo-50 text-indigo-600 font-bold text-xs transition-colors",
|
|
5585
5634
|
"data-testid": "collections-chat",
|
|
5586
5635
|
onClick: openChat
|
|
5587
|
-
}, [_cache[
|
|
5636
|
+
}, [_cache[30] || (_cache[30] = (0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "forum", -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.chat")), 1)])) : (0, vue.createCommentVNode)("", true),
|
|
5588
5637
|
((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(collectionActions.value, (action) => {
|
|
5589
5638
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
5590
5639
|
key: action.id,
|
|
@@ -5601,7 +5650,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5601
5650
|
class: "h-8 px-2.5 flex items-center gap-1 rounded bg-indigo-600 hover:bg-indigo-700 text-white font-bold text-xs transition-colors shadow-sm",
|
|
5602
5651
|
"data-testid": "collections-add-item",
|
|
5603
5652
|
onClick: openCreate
|
|
5604
|
-
}, [_cache[
|
|
5653
|
+
}, [_cache[31] || (_cache[31] = (0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "add", -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("common.add")), 1)])) : (0, vue.createCommentVNode)("", true),
|
|
5605
5654
|
canDeleteCollection.value && !embedded.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
5606
5655
|
key: 6,
|
|
5607
5656
|
type: "button",
|
|
@@ -5610,7 +5659,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5610
5659
|
"aria-label": (0, vue.unref)(t)("collectionsView.deleteCollection"),
|
|
5611
5660
|
"data-testid": "collections-delete",
|
|
5612
5661
|
onClick: confirmCollectionDelete
|
|
5613
|
-
}, [..._cache[
|
|
5662
|
+
}, [..._cache[32] || (_cache[32] = [(0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "delete_forever", -1)])], 8, _hoisted_16$4)) : (0, vue.createCommentVNode)("", true),
|
|
5614
5663
|
canDeleteFeed.value && !embedded.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
5615
5664
|
key: 7,
|
|
5616
5665
|
type: "button",
|
|
@@ -5619,11 +5668,11 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5619
5668
|
"aria-label": (0, vue.unref)(t)("collectionsView.deleteFeed"),
|
|
5620
5669
|
"data-testid": "feeds-delete",
|
|
5621
5670
|
onClick: confirmFeedDelete
|
|
5622
|
-
}, [..._cache[
|
|
5671
|
+
}, [..._cache[33] || (_cache[33] = [(0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "delete_forever", -1)])], 8, _hoisted_17$4)) : (0, vue.createCommentVNode)("", true)
|
|
5623
5672
|
])) : (0, vue.createCommentVNode)("", true),
|
|
5624
|
-
refreshNote.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_18$4, [_cache[
|
|
5673
|
+
refreshNote.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_18$4, [_cache[34] || (_cache[34] = (0, vue.createElementVNode)("span", { class: "material-icons text-base text-indigo-600" }, "hourglass_top", -1)), (0, vue.createElementVNode)("span", _hoisted_19$3, (0, vue.toDisplayString)(refreshNote.value), 1)])) : (0, vue.createCommentVNode)("", true),
|
|
5625
5674
|
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_20$3, [!__props.hideSearch && items.value.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_21$3, [
|
|
5626
|
-
_cache[
|
|
5675
|
+
_cache[36] || (_cache[36] = (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)),
|
|
5627
5676
|
(0, vue.withDirectives)((0, vue.createElementVNode)("input", {
|
|
5628
5677
|
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => searchQuery.value = $event),
|
|
5629
5678
|
type: "text",
|
|
@@ -5637,25 +5686,48 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5637
5686
|
"aria-label": (0, vue.unref)(t)("collectionsView.clearSearch"),
|
|
5638
5687
|
class: "absolute inset-y-0 right-0 flex items-center pr-2.5 text-slate-400 hover:text-slate-600",
|
|
5639
5688
|
onClick: _cache[2] || (_cache[2] = ($event) => searchQuery.value = "")
|
|
5640
|
-
}, [..._cache[
|
|
5689
|
+
}, [..._cache[35] || (_cache[35] = [(0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "close", -1)])], 8, _hoisted_23$2)) : (0, vue.createCommentVNode)("", true)
|
|
5641
5690
|
])) : (0, vue.createCommentVNode)("", true), (0, vue.createElementVNode)("div", _hoisted_24$1, [
|
|
5642
5691
|
activeView.value === "table" && flagChips.value.length > 0 && items.value.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
|
|
5643
5692
|
key: 0,
|
|
5644
|
-
|
|
5693
|
+
ref_key: "filterMenuRef",
|
|
5694
|
+
ref: filterMenuRef,
|
|
5695
|
+
class: "relative"
|
|
5696
|
+
}, [(0, vue.createElementVNode)("button", {
|
|
5697
|
+
type: "button",
|
|
5698
|
+
class: (0, vue.normalizeClass)(["h-8 px-2.5 flex items-center gap-1 rounded-full text-xs font-medium transition-colors", activeFlagFilterCount.value > 0 ? "bg-indigo-50 text-indigo-700 border border-indigo-300" : "bg-transparent text-slate-500 border border-dashed border-slate-300 hover:bg-slate-50"]),
|
|
5699
|
+
"aria-label": (0, vue.unref)(t)("collectionsView.flagFilterButton"),
|
|
5700
|
+
"aria-expanded": filterMenuOpen.value,
|
|
5701
|
+
"data-testid": "collections-filter-menu",
|
|
5702
|
+
onClick: _cache[3] || (_cache[3] = ($event) => filterMenuOpen.value = !filterMenuOpen.value)
|
|
5703
|
+
}, [
|
|
5704
|
+
_cache[37] || (_cache[37] = (0, vue.createElementVNode)("span", {
|
|
5705
|
+
class: "material-icons text-sm",
|
|
5706
|
+
"aria-hidden": "true"
|
|
5707
|
+
}, "filter_alt", -1)),
|
|
5708
|
+
(0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.flagFilterButton")), 1),
|
|
5709
|
+
activeFlagFilterCount.value > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_26$1, (0, vue.toDisplayString)(activeFlagFilterCount.value), 1)) : (0, vue.createCommentVNode)("", true)
|
|
5710
|
+
], 10, _hoisted_25$1), filterMenuOpen.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
|
|
5711
|
+
key: 0,
|
|
5712
|
+
class: "absolute left-0 top-full mt-1 z-20 min-w-max rounded border border-slate-200 bg-white shadow-lg py-1",
|
|
5645
5713
|
role: "group",
|
|
5646
|
-
"aria-label": (0, vue.unref)(t)("collectionsView.
|
|
5714
|
+
"aria-label": (0, vue.unref)(t)("collectionsView.flagFilterButton"),
|
|
5715
|
+
"data-testid": "collections-filter-menu-panel"
|
|
5647
5716
|
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(flagChips.value, (chip) => {
|
|
5648
5717
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
5649
5718
|
key: chip.key,
|
|
5650
5719
|
type: "button",
|
|
5651
|
-
class: (0, vue.normalizeClass)(["h-8 px-
|
|
5720
|
+
class: (0, vue.normalizeClass)(["w-full h-8 px-3 flex items-center gap-2 text-xs font-medium transition-colors hover:bg-slate-50", flagChipClass(chip.key)]),
|
|
5652
5721
|
title: flagChipTitle(chip),
|
|
5653
5722
|
"aria-label": flagChipTitle(chip),
|
|
5654
5723
|
"aria-pressed": flagFilterMode(chip.key) !== void 0,
|
|
5655
5724
|
"data-testid": `collections-flag-chip-${chip.key}`,
|
|
5656
5725
|
onClick: ($event) => cycleFlagFilter(chip.key)
|
|
5657
|
-
}, [(0, vue.createElementVNode)("span",
|
|
5658
|
-
|
|
5726
|
+
}, [(0, vue.createElementVNode)("span", {
|
|
5727
|
+
class: (0, vue.normalizeClass)(["material-icons text-sm", flagChipIconClass(chip.key)]),
|
|
5728
|
+
"aria-hidden": "true"
|
|
5729
|
+
}, (0, vue.toDisplayString)(flagChipIcon(chip.key)), 3), (0, vue.createElementVNode)("span", _hoisted_29, (0, vue.toDisplayString)(chip.label), 1)], 10, _hoisted_28);
|
|
5730
|
+
}), 128))], 8, _hoisted_27$1)) : (0, vue.createCommentVNode)("", true)], 512)) : (0, vue.createCommentVNode)("", true),
|
|
5659
5731
|
!__props.hideViewToggle && (hasCalendar.value || hasKanban.value || hasCustomViews.value || canAddCustomView.value) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
|
|
5660
5732
|
key: 1,
|
|
5661
5733
|
class: "flex gap-0.5",
|
|
@@ -5667,24 +5739,24 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5667
5739
|
class: (0, vue.normalizeClass)(["h-8 px-2.5 flex items-center gap-1 rounded text-xs font-bold transition-colors", activeView.value === "table" ? "bg-indigo-600 text-white" : "bg-white text-slate-500 border border-slate-200 hover:bg-slate-50"]),
|
|
5668
5740
|
"aria-pressed": activeView.value === "table",
|
|
5669
5741
|
"data-testid": "collection-view-toggle-table",
|
|
5670
|
-
onClick: _cache[
|
|
5671
|
-
}, [_cache[
|
|
5742
|
+
onClick: _cache[4] || (_cache[4] = ($event) => setView("table"))
|
|
5743
|
+
}, [_cache[38] || (_cache[38] = (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_31),
|
|
5672
5744
|
hasCalendar.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
5673
5745
|
key: 0,
|
|
5674
5746
|
type: "button",
|
|
5675
5747
|
class: (0, vue.normalizeClass)(["h-8 px-2.5 flex items-center gap-1 rounded text-xs font-bold transition-colors", activeView.value === "calendar" ? "bg-indigo-600 text-white" : "bg-white text-slate-500 border border-slate-200 hover:bg-slate-50"]),
|
|
5676
5748
|
"aria-pressed": activeView.value === "calendar",
|
|
5677
5749
|
"data-testid": "collection-view-toggle-calendar",
|
|
5678
|
-
onClick: _cache[
|
|
5679
|
-
}, [_cache[
|
|
5750
|
+
onClick: _cache[5] || (_cache[5] = ($event) => setView("calendar"))
|
|
5751
|
+
}, [_cache[39] || (_cache[39] = (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_32)) : (0, vue.createCommentVNode)("", true),
|
|
5680
5752
|
hasKanban.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
5681
5753
|
key: 1,
|
|
5682
5754
|
type: "button",
|
|
5683
5755
|
class: (0, vue.normalizeClass)(["h-8 px-2.5 flex items-center gap-1 rounded text-xs font-bold transition-colors", activeView.value === "kanban" ? "bg-indigo-600 text-white" : "bg-white text-slate-500 border border-slate-200 hover:bg-slate-50"]),
|
|
5684
5756
|
"aria-pressed": activeView.value === "kanban",
|
|
5685
5757
|
"data-testid": "collection-view-toggle-kanban",
|
|
5686
|
-
onClick: _cache[
|
|
5687
|
-
}, [_cache[
|
|
5758
|
+
onClick: _cache[6] || (_cache[6] = ($event) => setView("kanban"))
|
|
5759
|
+
}, [_cache[40] || (_cache[40] = (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_33)) : (0, vue.createCommentVNode)("", true),
|
|
5688
5760
|
((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(customViews.value, (cv) => {
|
|
5689
5761
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
5690
5762
|
key: cv.id,
|
|
@@ -5693,7 +5765,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5693
5765
|
"aria-pressed": activeView.value === (0, vue.unref)(customViewKey)(cv.id),
|
|
5694
5766
|
"data-testid": `collection-view-custom-${cv.id}`,
|
|
5695
5767
|
onClick: ($event) => setCustomView(cv.id)
|
|
5696
|
-
}, [(0, vue.createElementVNode)("span",
|
|
5768
|
+
}, [(0, vue.createElementVNode)("span", _hoisted_35, (0, vue.toDisplayString)(cv.icon || (cv.target === "mobile" ? "smartphone" : "dashboard_customize")), 1), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)(cv.label), 1)], 10, _hoisted_34);
|
|
5697
5769
|
}), 128)),
|
|
5698
5770
|
canAddCustomView.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
|
|
5699
5771
|
key: 2,
|
|
@@ -5708,17 +5780,17 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5708
5780
|
"aria-expanded": addMenuOpen.value,
|
|
5709
5781
|
"data-testid": "collection-view-add",
|
|
5710
5782
|
onClick: onAddViewClick
|
|
5711
|
-
}, [..._cache[
|
|
5783
|
+
}, [..._cache[41] || (_cache[41] = [(0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "add", -1)])], 8, _hoisted_36), addMenuOpen.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_37, [(0, vue.createElementVNode)("button", {
|
|
5712
5784
|
type: "button",
|
|
5713
5785
|
class: "w-full h-8 px-3 flex items-center gap-2 text-xs font-bold text-slate-600 hover:bg-slate-50",
|
|
5714
5786
|
"data-testid": "collection-view-add-desktop",
|
|
5715
|
-
onClick: _cache[
|
|
5716
|
-
}, [_cache[
|
|
5787
|
+
onClick: _cache[7] || (_cache[7] = ($event) => addCustomView("desktop"))
|
|
5788
|
+
}, [_cache[42] || (_cache[42] = (0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "dashboard_customize", -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.addViewDesktop")), 1)]), (0, vue.createElementVNode)("button", {
|
|
5717
5789
|
type: "button",
|
|
5718
5790
|
class: "w-full h-8 px-3 flex items-center gap-2 text-xs font-bold text-slate-600 hover:bg-slate-50",
|
|
5719
5791
|
"data-testid": "collection-view-add-mobile",
|
|
5720
|
-
onClick: _cache[
|
|
5721
|
-
}, [_cache[
|
|
5792
|
+
onClick: _cache[8] || (_cache[8] = ($event) => addCustomView("mobile"))
|
|
5793
|
+
}, [_cache[43] || (_cache[43] = (0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "smartphone", -1)), (0, vue.createElementVNode)("span", null, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.addViewMobile")), 1)])])) : (0, vue.createCommentVNode)("", true)], 512)) : (0, vue.createCommentVNode)("", true),
|
|
5722
5794
|
canConfigureViews.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
5723
5795
|
key: 3,
|
|
5724
5796
|
type: "button",
|
|
@@ -5726,51 +5798,51 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5726
5798
|
title: (0, vue.unref)(t)("collectionsView.config.open"),
|
|
5727
5799
|
"aria-label": (0, vue.unref)(t)("collectionsView.config.open"),
|
|
5728
5800
|
"data-testid": "collection-config-open",
|
|
5729
|
-
onClick: _cache[
|
|
5730
|
-
}, [..._cache[
|
|
5731
|
-
], 8,
|
|
5801
|
+
onClick: _cache[9] || (_cache[9] = ($event) => configOpen.value = true)
|
|
5802
|
+
}, [..._cache[44] || (_cache[44] = [(0, vue.createElementVNode)("span", { class: "material-icons text-sm" }, "settings", -1)])], 8, _hoisted_38)) : (0, vue.createCommentVNode)("", true)
|
|
5803
|
+
], 8, _hoisted_30)) : (0, vue.createCommentVNode)("", true),
|
|
5732
5804
|
calendarActive.value && dateFields.value.length > 1 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("select", {
|
|
5733
5805
|
key: 2,
|
|
5734
5806
|
value: calendarAnchorField.value,
|
|
5735
5807
|
class: "h-8 px-2 rounded border border-slate-200 bg-white text-xs font-semibold text-slate-600 focus:outline-none focus:border-indigo-500 cursor-pointer",
|
|
5736
5808
|
"aria-label": (0, vue.unref)(t)("collectionsView.calendarFieldLabel"),
|
|
5737
5809
|
"data-testid": "collection-calendar-field",
|
|
5738
|
-
onChange: _cache[
|
|
5810
|
+
onChange: _cache[10] || (_cache[10] = ($event) => anchorOverride.value = $event.target.value)
|
|
5739
5811
|
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(dateFields.value, (key) => {
|
|
5740
5812
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("option", {
|
|
5741
5813
|
key,
|
|
5742
5814
|
value: key
|
|
5743
|
-
}, (0, vue.toDisplayString)(collection.value?.schema.fields[key]?.label ?? key), 9,
|
|
5744
|
-
}), 128))], 40,
|
|
5815
|
+
}, (0, vue.toDisplayString)(collection.value?.schema.fields[key]?.label ?? key), 9, _hoisted_40);
|
|
5816
|
+
}), 128))], 40, _hoisted_39)) : (0, vue.createCommentVNode)("", true),
|
|
5745
5817
|
kanbanActive.value && enumFields.value.length > 1 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("select", {
|
|
5746
5818
|
key: 3,
|
|
5747
5819
|
value: kanbanGroupField.value,
|
|
5748
5820
|
class: "h-8 px-2 rounded border border-slate-200 bg-white text-xs font-semibold text-slate-600 focus:outline-none focus:border-indigo-500 cursor-pointer",
|
|
5749
5821
|
"aria-label": (0, vue.unref)(t)("collectionsView.kanbanFieldLabel"),
|
|
5750
5822
|
"data-testid": "collection-kanban-field",
|
|
5751
|
-
onChange: _cache[
|
|
5823
|
+
onChange: _cache[11] || (_cache[11] = ($event) => kanbanOverride.value = $event.target.value)
|
|
5752
5824
|
}, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(enumFields.value, (key) => {
|
|
5753
5825
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("option", {
|
|
5754
5826
|
key,
|
|
5755
5827
|
value: key
|
|
5756
|
-
}, (0, vue.toDisplayString)(collection.value?.schema.fields[key]?.label ?? key), 9,
|
|
5757
|
-
}), 128))], 40,
|
|
5758
|
-
items.value.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div",
|
|
5828
|
+
}, (0, vue.toDisplayString)(collection.value?.schema.fields[key]?.label ?? key), 9, _hoisted_42);
|
|
5829
|
+
}), 128))], 40, _hoisted_41)) : (0, vue.createCommentVNode)("", true),
|
|
5830
|
+
items.value.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_43, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.searchSummary", {
|
|
5759
5831
|
shown: activeView.value === "table" ? tableFilteredItems.value.length : filteredItems.value.length,
|
|
5760
5832
|
total: items.value.length
|
|
5761
5833
|
})), 1)) : (0, vue.createCommentVNode)("", true)
|
|
5762
5834
|
])])) : (0, vue.createCommentVNode)("", true),
|
|
5763
|
-
collection.value && dataIssues.value.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div",
|
|
5764
|
-
_cache[
|
|
5765
|
-
(0, vue.createElementVNode)("span",
|
|
5835
|
+
collection.value && dataIssues.value.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_44, [
|
|
5836
|
+
_cache[46] || (_cache[46] = (0, vue.createElementVNode)("span", { class: "material-icons text-amber-600" }, "warning", -1)),
|
|
5837
|
+
(0, vue.createElementVNode)("span", _hoisted_45, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.dataIssuesDetected", { count: dataIssues.value.length })), 1),
|
|
5766
5838
|
(0, vue.createElementVNode)("button", {
|
|
5767
5839
|
type: "button",
|
|
5768
5840
|
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",
|
|
5769
5841
|
"data-testid": "collections-repair",
|
|
5770
5842
|
onClick: repairCollection
|
|
5771
|
-
}, [_cache[
|
|
5843
|
+
}, [_cache[45] || (_cache[45] = (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)])
|
|
5772
5844
|
])) : (0, vue.createCommentVNode)("", true),
|
|
5773
|
-
(0, vue.createElementVNode)("div",
|
|
5845
|
+
(0, vue.createElementVNode)("div", _hoisted_46, [loading.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_47, [_cache[47] || (_cache[47] = (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_48, [_cache[48] || (_cache[48] = (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_49)) : calendarActive.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_50, [(0, vue.createVNode)(CollectionCalendarView_default, {
|
|
5774
5846
|
schema: collection.value.schema,
|
|
5775
5847
|
items: filteredItems.value,
|
|
5776
5848
|
"anchor-field": calendarAnchorField.value,
|
|
@@ -5806,7 +5878,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5806
5878
|
}, {
|
|
5807
5879
|
detail: (0, vue.withCtx)(() => [(0, vue.createVNode)(CollectionRecordPanel_default, {
|
|
5808
5880
|
editing: editing.value,
|
|
5809
|
-
"onUpdate:editing": _cache[
|
|
5881
|
+
"onUpdate:editing": _cache[12] || (_cache[12] = ($event) => editing.value = $event),
|
|
5810
5882
|
collection: collection.value,
|
|
5811
5883
|
viewing: viewing.value,
|
|
5812
5884
|
saving: saving.value,
|
|
@@ -5826,7 +5898,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5826
5898
|
onCancel: cancelEditor,
|
|
5827
5899
|
onEdit: editFromView,
|
|
5828
5900
|
onClose: onDayClose,
|
|
5829
|
-
onDelete: _cache[
|
|
5901
|
+
onDelete: _cache[13] || (_cache[13] = ($event) => viewing.value && confirmDelete(viewing.value)),
|
|
5830
5902
|
onRunAction: runAction,
|
|
5831
5903
|
onItemChat
|
|
5832
5904
|
}, null, 8, [
|
|
@@ -5859,16 +5931,16 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5859
5931
|
"selected",
|
|
5860
5932
|
"can-create",
|
|
5861
5933
|
"show-detail"
|
|
5862
|
-
])) : (0, vue.createCommentVNode)("", true)])) : kanbanActive.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div",
|
|
5863
|
-
_cache[
|
|
5864
|
-
(0, vue.createElementVNode)("span",
|
|
5934
|
+
])) : (0, vue.createCommentVNode)("", true)])) : kanbanActive.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_51, [inlineError.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_52, [
|
|
5935
|
+
_cache[50] || (_cache[50] = (0, vue.createElementVNode)("span", { class: "material-icons text-red-600" }, "error", -1)),
|
|
5936
|
+
(0, vue.createElementVNode)("span", _hoisted_53, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.inlineSaveFailed", { error: inlineError.value })), 1),
|
|
5865
5937
|
(0, vue.createElementVNode)("button", {
|
|
5866
5938
|
type: "button",
|
|
5867
5939
|
class: "h-8 w-8 flex items-center justify-center rounded text-red-600 hover:bg-red-100",
|
|
5868
5940
|
"aria-label": (0, vue.unref)(t)("common.close"),
|
|
5869
|
-
onClick: _cache[
|
|
5870
|
-
}, [..._cache[
|
|
5871
|
-
])) : (0, vue.createCommentVNode)("", true), (0, vue.createElementVNode)("div",
|
|
5941
|
+
onClick: _cache[14] || (_cache[14] = ($event) => inlineError.value = null)
|
|
5942
|
+
}, [..._cache[49] || (_cache[49] = [(0, vue.createElementVNode)("span", { class: "material-icons text-base" }, "close", -1)])], 8, _hoisted_54)
|
|
5943
|
+
])) : (0, vue.createCommentVNode)("", true), (0, vue.createElementVNode)("div", _hoisted_55, [(0, vue.createVNode)(CollectionKanbanView_default, {
|
|
5872
5944
|
schema: collection.value.schema,
|
|
5873
5945
|
items: filteredItems.value,
|
|
5874
5946
|
"group-field": kanbanGroupField.value,
|
|
@@ -5884,7 +5956,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5884
5956
|
"selected",
|
|
5885
5957
|
"notified",
|
|
5886
5958
|
"readonly"
|
|
5887
|
-
])])])) : activeCustomView.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div",
|
|
5959
|
+
])])])) : activeCustomView.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_56, [activeCustomView.value.target === "mobile" ? ((0, vue.openBlock)(), (0, vue.createBlock)(CollectionRemoteViewPreview_default, {
|
|
5888
5960
|
key: 0,
|
|
5889
5961
|
slug: collection.value.slug,
|
|
5890
5962
|
view: activeCustomView.value,
|
|
@@ -5895,32 +5967,32 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5895
5967
|
view: activeCustomView.value,
|
|
5896
5968
|
onOpenItem: onCustomViewOpenItem,
|
|
5897
5969
|
onStartChat: onCustomViewStartChat
|
|
5898
|
-
}, null, 8, ["slug", "view"]))])) : items.value.length === 0 && editing.value?.mode !== "create" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div",
|
|
5899
|
-
_cache[
|
|
5900
|
-
(0, vue.createElementVNode)("p",
|
|
5970
|
+
}, null, 8, ["slug", "view"]))])) : items.value.length === 0 && editing.value?.mode !== "create" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_57, [_cache[51] || (_cache[51] = (0, vue.createElementVNode)("span", { class: "material-icons text-4xl text-slate-300" }, "folder_open", -1)), (0, vue.createElementVNode)("p", _hoisted_58, (0, vue.toDisplayString)((0, vue.unref)(t)(isReadOnly.value ? "collectionsView.itemsEmptyReadonly" : "collectionsView.itemsEmpty")), 1)])) : tableFilteredItems.value.length === 0 && editing.value?.mode !== "create" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_59, [
|
|
5971
|
+
_cache[52] || (_cache[52] = (0, vue.createElementVNode)("span", { class: "material-icons text-4xl text-slate-300" }, "search_off", -1)),
|
|
5972
|
+
(0, vue.createElementVNode)("p", _hoisted_60, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.noMatchingItems")), 1),
|
|
5901
5973
|
(0, vue.createElementVNode)("button", {
|
|
5902
5974
|
type: "button",
|
|
5903
5975
|
class: "text-xs text-indigo-600 font-semibold hover:underline",
|
|
5904
|
-
onClick: _cache[
|
|
5976
|
+
onClick: _cache[15] || (_cache[15] = ($event) => (searchQuery.value = "", flagFilters.value = {}))
|
|
5905
5977
|
}, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.clearSearch")), 1)
|
|
5906
|
-
])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div",
|
|
5907
|
-
_cache[
|
|
5908
|
-
(0, vue.createElementVNode)("span",
|
|
5978
|
+
])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_61, [inlineError.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_62, [
|
|
5979
|
+
_cache[54] || (_cache[54] = (0, vue.createElementVNode)("span", { class: "material-icons text-red-600" }, "error", -1)),
|
|
5980
|
+
(0, vue.createElementVNode)("span", _hoisted_63, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.inlineSaveFailed", { error: inlineError.value })), 1),
|
|
5909
5981
|
(0, vue.createElementVNode)("button", {
|
|
5910
5982
|
type: "button",
|
|
5911
5983
|
class: "h-8 w-8 flex items-center justify-center rounded text-red-600 hover:bg-red-100",
|
|
5912
5984
|
"aria-label": (0, vue.unref)(t)("common.close"),
|
|
5913
|
-
onClick: _cache[
|
|
5914
|
-
}, [..._cache[
|
|
5915
|
-
])) : (0, vue.createCommentVNode)("", true), (0, vue.createElementVNode)("table",
|
|
5985
|
+
onClick: _cache[16] || (_cache[16] = ($event) => inlineError.value = null)
|
|
5986
|
+
}, [..._cache[53] || (_cache[53] = [(0, vue.createElementVNode)("span", { class: "material-icons text-base" }, "close", -1)])], 8, _hoisted_64)
|
|
5987
|
+
])) : (0, vue.createCommentVNode)("", true), (0, vue.createElementVNode)("table", _hoisted_65, [(0, vue.createElementVNode)("thead", null, [(0, vue.createElementVNode)("tr", _hoisted_66, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(listColumnFields.value, ([key, field]) => {
|
|
5916
5988
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("th", {
|
|
5917
5989
|
key,
|
|
5918
5990
|
"aria-sort": (0, vue.unref)(_mulmoclaude_core_collection.isSortableField)(field) ? sortAriaValue(key) : void 0,
|
|
5919
5991
|
class: "px-5 py-3 font-bold text-slate-500 text-left uppercase tracking-wider whitespace-nowrap"
|
|
5920
|
-
}, [(0, vue.createElementVNode)("div",
|
|
5992
|
+
}, [(0, vue.createElementVNode)("div", _hoisted_68, [(0, vue.createElementVNode)("span", {
|
|
5921
5993
|
class: "truncate max-w-[14rem]",
|
|
5922
5994
|
title: field.label
|
|
5923
|
-
}, (0, vue.toDisplayString)(field.label), 9,
|
|
5995
|
+
}, (0, vue.toDisplayString)(field.label), 9, _hoisted_69), (0, vue.unref)(_mulmoclaude_core_collection.isSortableField)(field) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("button", {
|
|
5924
5996
|
key: 0,
|
|
5925
5997
|
type: "button",
|
|
5926
5998
|
class: (0, vue.normalizeClass)(["inline-flex items-center justify-center rounded p-0.5 -my-1 leading-none transition-colors", sortButtonClass(key)]),
|
|
@@ -5928,9 +6000,9 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5928
6000
|
"aria-label": (0, vue.unref)(t)("collectionsView.sortBy", { field: field.label }),
|
|
5929
6001
|
onClick: (0, vue.withModifiers)(($event) => cycleSort(key), ["stop"]),
|
|
5930
6002
|
onPointerenter: ($event) => hoveredSortKey.value = key,
|
|
5931
|
-
onPointerleave: _cache[
|
|
5932
|
-
}, [(0, vue.createElementVNode)("span",
|
|
5933
|
-
}), 128))])]), (0, vue.createElementVNode)("tbody",
|
|
6003
|
+
onPointerleave: _cache[17] || (_cache[17] = ($event) => hoveredSortKey.value = null)
|
|
6004
|
+
}, [(0, vue.createElementVNode)("span", _hoisted_71, (0, vue.toDisplayString)(sortIconName(key)), 1)], 42, _hoisted_70)) : (0, vue.createCommentVNode)("", true)])], 8, _hoisted_67);
|
|
6005
|
+
}), 128))])]), (0, vue.createElementVNode)("tbody", _hoisted_72, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(sortedItems.value, (item) => {
|
|
5934
6006
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("tr", {
|
|
5935
6007
|
key: String(item[collection.value.schema.primaryKey] ?? ""),
|
|
5936
6008
|
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" : ""]),
|
|
@@ -5952,9 +6024,9 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5952
6024
|
class: "h-5 w-5 rounded border-slate-300 text-indigo-600 focus:ring-indigo-500/20 cursor-pointer align-middle disabled:opacity-50 disabled:cursor-not-allowed",
|
|
5953
6025
|
"data-testid": `collections-inline-toggle-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
5954
6026
|
"aria-label": field.label,
|
|
5955
|
-
onClick: _cache[
|
|
6027
|
+
onClick: _cache[18] || (_cache[18] = (0, vue.withModifiers)(() => {}, ["stop"])),
|
|
5956
6028
|
onChange: ($event) => commitToggle(item, field)
|
|
5957
|
-
}, null, 40,
|
|
6029
|
+
}, null, 40, _hoisted_74)) : field.type === "boolean" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("input", {
|
|
5958
6030
|
key: 1,
|
|
5959
6031
|
type: "checkbox",
|
|
5960
6032
|
checked: item[key] === true,
|
|
@@ -5962,15 +6034,15 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5962
6034
|
class: "h-5 w-5 rounded border-slate-300 text-indigo-600 focus:ring-indigo-500/20 cursor-pointer align-middle disabled:opacity-50 disabled:cursor-not-allowed",
|
|
5963
6035
|
"data-testid": `collections-inline-bool-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
5964
6036
|
"aria-label": field.label,
|
|
5965
|
-
onClick: _cache[
|
|
6037
|
+
onClick: _cache[19] || (_cache[19] = (0, vue.withModifiers)(() => {}, ["stop"])),
|
|
5966
6038
|
onChange: ($event) => commitInlineEdit(item, String(key), field, $event.target.checked)
|
|
5967
|
-
}, null, 40,
|
|
6039
|
+
}, null, 40, _hoisted_75)) : field.type === "flag" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
|
|
5968
6040
|
key: 2,
|
|
5969
6041
|
class: (0, vue.normalizeClass)(["material-icons text-lg align-middle", flagValueOf(String(key), item) ? "text-emerald-600" : "text-slate-300"]),
|
|
5970
6042
|
"data-testid": `collections-flag-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
5971
6043
|
"aria-label": `${field.label}: ${(0, vue.unref)(t)(flagValueOf(String(key), item) ? "common.yes" : "common.no")}`,
|
|
5972
6044
|
role: "img"
|
|
5973
|
-
}, (0, vue.toDisplayString)(flagValueOf(String(key), item) ? "check_circle" : "radio_button_unchecked"), 11,
|
|
6045
|
+
}, (0, vue.toDisplayString)(flagValueOf(String(key), item) ? "check_circle" : "radio_button_unchecked"), 11, _hoisted_76)) : field.type === "ref" && field.to && typeof item[key] === "string" && item[key] ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_77, [(0, vue.createElementVNode)("a", {
|
|
5974
6046
|
href: (0, vue.unref)(cui).recordHref?.(field.to, String(item[key])),
|
|
5975
6047
|
tabindex: (0, vue.unref)(cui).recordHref?.(field.to, String(item[key])) ? void 0 : 0,
|
|
5976
6048
|
role: "link",
|
|
@@ -5978,48 +6050,48 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
5978
6050
|
"data-testid": `collections-ref-link-${key}-${item[key]}`,
|
|
5979
6051
|
onClick: ($event) => (0, vue.unref)(activateRefLink)($event, field.to, String(item[key]), true),
|
|
5980
6052
|
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"])]
|
|
5981
|
-
}, (0, vue.toDisplayString)((0, vue.unref)(refDisplay)(field.to, String(item[key]))), 41,
|
|
6053
|
+
}, (0, vue.toDisplayString)((0, vue.unref)(refDisplay)(field.to, String(item[key]))), 41, _hoisted_78)])) : field.type === "enum" && Array.isArray(field.values) && field.values.length > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("select", {
|
|
5982
6054
|
key: 4,
|
|
5983
6055
|
value: item[key] == null ? "" : String(item[key]),
|
|
5984
6056
|
disabled: isReadOnly.value || isRowInlineSaving(item),
|
|
5985
6057
|
class: (0, vue.normalizeClass)(["rounded-lg border px-2 py-0.5 text-[11px] font-semibold focus:border-indigo-500 focus:ring-2 focus:ring-indigo-500/20 focus:outline-none cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed", enumControlClass(String(key), item[key])]),
|
|
5986
6058
|
"data-testid": `collections-inline-enum-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
5987
6059
|
"aria-label": field.label,
|
|
5988
|
-
onClick: _cache[
|
|
6060
|
+
onClick: _cache[20] || (_cache[20] = (0, vue.withModifiers)(() => {}, ["stop"])),
|
|
5989
6061
|
onChange: ($event) => commitInlineEdit(item, String(key), field, $event.target.value)
|
|
5990
|
-
}, [showEnumPlaceholder(item, String(key)) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("option",
|
|
6062
|
+
}, [showEnumPlaceholder(item, String(key)) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("option", _hoisted_80, (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) => {
|
|
5991
6063
|
return (0, vue.openBlock)(), (0, vue.createElementBlock)("option", {
|
|
5992
6064
|
key: value,
|
|
5993
6065
|
value
|
|
5994
|
-
}, (0, vue.toDisplayString)(value), 9,
|
|
5995
|
-
}), 128))], 42,
|
|
6066
|
+
}, (0, vue.toDisplayString)(value), 9, _hoisted_81);
|
|
6067
|
+
}), 128))], 42, _hoisted_79)) : field.type === "money" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_82, (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_83, [_cache[55] || (_cache[55] = (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_84, (0, vue.toDisplayString)((0, vue.unref)(derivedDisplay)(field, (0, vue.unref)(evaluateDerivedAgainstItem)(field, String(key), item), item)), 1)) : field.type === "rollup" ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", {
|
|
5996
6068
|
key: 8,
|
|
5997
6069
|
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",
|
|
5998
6070
|
"data-testid": `collections-rollup-${key}-${item[collection.value.schema.primaryKey]}`
|
|
5999
|
-
}, (0, vue.toDisplayString)((0, vue.unref)(render).rollupDisplay(field, item)), 9,
|
|
6071
|
+
}, (0, vue.toDisplayString)((0, vue.unref)(render).rollupDisplay(field, item)), 9, _hoisted_85)) : field.type !== "file" && (0, vue.unref)(isExternalUrl)(item[key]) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
|
|
6000
6072
|
key: 9,
|
|
6001
6073
|
href: String(item[key]),
|
|
6002
6074
|
target: "_blank",
|
|
6003
6075
|
rel: "noopener noreferrer",
|
|
6004
6076
|
class: "block truncate text-blue-600 hover:text-blue-800 hover:underline font-semibold",
|
|
6005
6077
|
"data-testid": `collections-url-link-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
6006
|
-
onClick: _cache[
|
|
6007
|
-
}, (0, vue.toDisplayString)(String(item[key])), 9,
|
|
6078
|
+
onClick: _cache[21] || (_cache[21] = (0, vue.withModifiers)(() => {}, ["stop"]))
|
|
6079
|
+
}, (0, vue.toDisplayString)(String(item[key])), 9, _hoisted_86)) : field.type === "file" && (0, vue.unref)(artifactUrl)(item[key]) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
|
|
6008
6080
|
key: 10,
|
|
6009
6081
|
href: (0, vue.unref)(artifactUrl)(item[key]) ?? void 0,
|
|
6010
6082
|
target: "_blank",
|
|
6011
6083
|
rel: "noopener noreferrer",
|
|
6012
6084
|
class: "block truncate text-blue-600 hover:text-blue-800 hover:underline font-semibold",
|
|
6013
6085
|
"data-testid": `collections-file-link-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
6014
|
-
onClick: _cache[
|
|
6015
|
-
}, (0, vue.toDisplayString)(String(item[key])), 9,
|
|
6086
|
+
onClick: _cache[22] || (_cache[22] = (0, vue.withModifiers)(() => {}, ["stop"]))
|
|
6087
|
+
}, (0, vue.toDisplayString)(String(item[key])), 9, _hoisted_87)) : field.type === "file" && (0, vue.unref)(fileRoutePath)(item[key]) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("a", {
|
|
6016
6088
|
key: 11,
|
|
6017
6089
|
href: (0, vue.unref)(fileRoutePath)(item[key]) ?? void 0,
|
|
6018
6090
|
class: "block truncate text-blue-600 hover:text-blue-800 hover:underline font-semibold",
|
|
6019
6091
|
"data-testid": `collections-file-link-${key}-${item[collection.value.schema.primaryKey]}`,
|
|
6020
6092
|
onClick: ($event) => (0, vue.unref)(activatePathLink)($event, (0, vue.unref)(fileRoutePath)(item[key]) ?? "", true)
|
|
6021
|
-
}, (0, vue.toDisplayString)(String(item[key])), 9,
|
|
6022
|
-
}), 128))], 42,
|
|
6093
|
+
}, (0, vue.toDisplayString)(String(item[key])), 9, _hoisted_88)) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_89, (0, vue.toDisplayString)((0, vue.unref)(formatCell)(item[key], field.type)), 1))], 64)) : (0, vue.createCommentVNode)("", true)]);
|
|
6094
|
+
}), 128))], 42, _hoisted_73);
|
|
6023
6095
|
}), 128))])])]))]),
|
|
6024
6096
|
collection.value && (viewing.value || editing.value) && !(calendarActive.value && openDay.value) ? ((0, vue.openBlock)(), (0, vue.createBlock)(CollectionRecordModal_default, {
|
|
6025
6097
|
key: 4,
|
|
@@ -6027,7 +6099,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
6027
6099
|
}, {
|
|
6028
6100
|
default: (0, vue.withCtx)(() => [(0, vue.createVNode)(CollectionRecordPanel_default, {
|
|
6029
6101
|
editing: editing.value,
|
|
6030
|
-
"onUpdate:editing": _cache[
|
|
6102
|
+
"onUpdate:editing": _cache[23] || (_cache[23] = ($event) => editing.value = $event),
|
|
6031
6103
|
collection: collection.value,
|
|
6032
6104
|
viewing: viewing.value,
|
|
6033
6105
|
saving: saving.value,
|
|
@@ -6047,7 +6119,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
6047
6119
|
onCancel: cancelEditor,
|
|
6048
6120
|
onEdit: editFromView,
|
|
6049
6121
|
onClose: closeView,
|
|
6050
|
-
onDelete: _cache[
|
|
6122
|
+
onDelete: _cache[24] || (_cache[24] = ($event) => viewing.value && confirmDelete(viewing.value)),
|
|
6051
6123
|
onRunAction: runAction,
|
|
6052
6124
|
onItemChat
|
|
6053
6125
|
}, null, 8, [
|
|
@@ -6075,7 +6147,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
6075
6147
|
action: mutateModal.value.action,
|
|
6076
6148
|
pending: mutatePending.value,
|
|
6077
6149
|
error: mutateError.value,
|
|
6078
|
-
onClose: _cache[
|
|
6150
|
+
onClose: _cache[25] || (_cache[25] = ($event) => mutateModal.value = null),
|
|
6079
6151
|
onSubmit: submitMutateParams
|
|
6080
6152
|
}, null, 8, [
|
|
6081
6153
|
"action",
|
|
@@ -6088,7 +6160,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
6088
6160
|
title: collection.value.title,
|
|
6089
6161
|
views: customViews.value,
|
|
6090
6162
|
onChanged: onViewsChanged,
|
|
6091
|
-
onClose: _cache[
|
|
6163
|
+
onClose: _cache[26] || (_cache[26] = ($event) => configOpen.value = false)
|
|
6092
6164
|
}, null, 8, [
|
|
6093
6165
|
"slug",
|
|
6094
6166
|
"title",
|
|
@@ -6103,29 +6175,29 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
6103
6175
|
"data-testid": "collections-chat-modal",
|
|
6104
6176
|
onClick: (0, vue.withModifiers)(closeChat, ["self"]),
|
|
6105
6177
|
onKeydown: (0, vue.withKeys)(closeChat, ["esc"])
|
|
6106
|
-
}, [(0, vue.createElementVNode)("div",
|
|
6107
|
-
(0, vue.createElementVNode)("header",
|
|
6108
|
-
_cache[
|
|
6109
|
-
(0, vue.createElementVNode)("div",
|
|
6178
|
+
}, [(0, vue.createElementVNode)("div", _hoisted_90, [
|
|
6179
|
+
(0, vue.createElementVNode)("header", _hoisted_91, [
|
|
6180
|
+
_cache[57] || (_cache[57] = (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)),
|
|
6181
|
+
(0, vue.createElementVNode)("div", _hoisted_92, [(0, vue.createElementVNode)("h2", _hoisted_93, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.chatTitle")), 1), (0, vue.createElementVNode)("span", _hoisted_94, (0, vue.toDisplayString)(collection.value.title), 1)]),
|
|
6110
6182
|
(0, vue.createElementVNode)("button", {
|
|
6111
6183
|
type: "button",
|
|
6112
6184
|
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",
|
|
6113
6185
|
"aria-label": (0, vue.unref)(t)("common.close"),
|
|
6114
6186
|
"data-testid": "collections-chat-close",
|
|
6115
6187
|
onClick: closeChat
|
|
6116
|
-
}, [..._cache[
|
|
6188
|
+
}, [..._cache[56] || (_cache[56] = [(0, vue.createElementVNode)("span", { class: "material-icons text-lg" }, "close", -1)])], 8, _hoisted_95)
|
|
6117
6189
|
]),
|
|
6118
|
-
(0, vue.createElementVNode)("div",
|
|
6190
|
+
(0, vue.createElementVNode)("div", _hoisted_96, [(0, vue.withDirectives)((0, vue.createElementVNode)("textarea", {
|
|
6119
6191
|
ref_key: "chatInputEl",
|
|
6120
6192
|
ref: chatInputEl,
|
|
6121
|
-
"onUpdate:modelValue": _cache[
|
|
6193
|
+
"onUpdate:modelValue": _cache[27] || (_cache[27] = ($event) => chatMessage.value = $event),
|
|
6122
6194
|
rows: "4",
|
|
6123
6195
|
placeholder: (0, vue.unref)(t)("collectionsView.chatPlaceholder"),
|
|
6124
6196
|
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",
|
|
6125
6197
|
"data-testid": "collections-chat-input",
|
|
6126
6198
|
onKeydown: [(0, vue.withKeys)((0, vue.withModifiers)(submitChat, ["meta"]), ["enter"]), (0, vue.withKeys)((0, vue.withModifiers)(submitChat, ["ctrl"]), ["enter"])]
|
|
6127
|
-
}, null, 40,
|
|
6128
|
-
(0, vue.createElementVNode)("footer",
|
|
6199
|
+
}, null, 40, _hoisted_97), [[vue.vModelText, chatMessage.value]])]),
|
|
6200
|
+
(0, vue.createElementVNode)("footer", _hoisted_98, [(0, vue.createElementVNode)("button", {
|
|
6129
6201
|
type: "button",
|
|
6130
6202
|
class: "h-8 px-2.5 rounded text-xs font-bold text-slate-500 hover:bg-slate-200/50 transition-colors",
|
|
6131
6203
|
"data-testid": "collections-chat-cancel",
|
|
@@ -6136,7 +6208,7 @@ var CollectionView_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
6136
6208
|
disabled: !chatMessage.value.trim(),
|
|
6137
6209
|
"data-testid": "collections-chat-send",
|
|
6138
6210
|
onClick: submitChat
|
|
6139
|
-
}, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.chatStart")), 9,
|
|
6211
|
+
}, (0, vue.toDisplayString)((0, vue.unref)(t)("collectionsView.chatStart")), 9, _hoisted_99)])
|
|
6140
6212
|
])], 32)) : (0, vue.createCommentVNode)("", true)
|
|
6141
6213
|
]);
|
|
6142
6214
|
};
|