@micacms/editor-ui 0.2.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/assets/ChangesView-DoLhwPxu.js +7 -0
  2. package/dist/assets/ChangesView-DoLhwPxu.js.map +1 -0
  3. package/dist/assets/{CollectionView-BL9-uTTb.js → CollectionView-D3W4tRXa.js} +2 -2
  4. package/dist/assets/{CollectionView-BL9-uTTb.js.map → CollectionView-D3W4tRXa.js.map} +1 -1
  5. package/dist/assets/ConfirmDialog.vue_vue_type_script_setup_true_lang-BhOQwoeA.js +2 -0
  6. package/dist/assets/ConfirmDialog.vue_vue_type_script_setup_true_lang-BhOQwoeA.js.map +1 -0
  7. package/dist/assets/{DashboardView-Dn6J5mjy.js → DashboardView-JZ2Eaw1_.js} +2 -2
  8. package/dist/assets/{DashboardView-Dn6J5mjy.js.map → DashboardView-JZ2Eaw1_.js.map} +1 -1
  9. package/dist/assets/{EntryView-EdKf-RGT.js → EntryView-BwERaZkJ.js} +2 -2
  10. package/dist/assets/EntryView-BwERaZkJ.js.map +1 -0
  11. package/dist/assets/InterVariable-DiVDrmQJ.woff2 +0 -0
  12. package/dist/assets/LoginView-BCrrdqnf.js +2 -0
  13. package/dist/assets/LoginView-BCrrdqnf.js.map +1 -0
  14. package/dist/assets/{MediaView-DZ8c7Ftz.js → MediaView-KlQHfWAi.js} +2 -2
  15. package/dist/assets/MediaView-KlQHfWAi.js.map +1 -0
  16. package/dist/assets/{NotFoundView-DAJd7RdP.js → NotFoundView-C9bEHUGC.js} +2 -2
  17. package/dist/assets/{NotFoundView-DAJd7RdP.js.map → NotFoundView-C9bEHUGC.js.map} +1 -1
  18. package/dist/assets/{ObjectField-BWAzmqNb.js → ObjectField-gxr2a2pp.js} +2 -2
  19. package/dist/assets/{ObjectField-BWAzmqNb.js.map → ObjectField-gxr2a2pp.js.map} +1 -1
  20. package/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-B-fBJAjn.js +7 -0
  21. package/dist/assets/{PageHeader.vue_vue_type_script_setup_true_lang-BHQH-Q7U.js.map → PageHeader.vue_vue_type_script_setup_true_lang-B-fBJAjn.js.map} +1 -1
  22. package/dist/assets/{RepeaterField-Dk1Wne4m.js → RepeaterField-obOWml_P.js} +2 -2
  23. package/dist/assets/{RepeaterField-Dk1Wne4m.js.map → RepeaterField-obOWml_P.js.map} +1 -1
  24. package/dist/assets/SingletonView-BNJCcl7V.js +2 -0
  25. package/dist/assets/SingletonView-BNJCcl7V.js.map +1 -0
  26. package/dist/assets/SystemView-CB8CT0Pa.js +3 -0
  27. package/dist/assets/SystemView-CB8CT0Pa.js.map +1 -0
  28. package/dist/assets/{SystemView-BQLC-ZJl.css → SystemView-CBvzzAoO.css} +1 -1
  29. package/dist/assets/{arrow-right-DY4A7pBS.js → arrow-right-DJTAYrz5.js} +2 -2
  30. package/dist/assets/{arrow-right-DY4A7pBS.js.map → arrow-right-DJTAYrz5.js.map} +1 -1
  31. package/dist/assets/{arrow-up-jX6XH6AV.js → arrow-up-CibOjHj-.js} +2 -2
  32. package/dist/assets/{arrow-up-jX6XH6AV.js.map → arrow-up-CibOjHj-.js.map} +1 -1
  33. package/dist/assets/{chevron-down-DOqSqKRs.js → chevron-down-Bmt8sf-v.js} +2 -2
  34. package/dist/assets/{chevron-down-DOqSqKRs.js.map → chevron-down-Bmt8sf-v.js.map} +1 -1
  35. package/dist/assets/{index-BsCcwhm6.js → index-Colfqb-9.js} +26 -26
  36. package/dist/assets/index-Colfqb-9.js.map +1 -0
  37. package/dist/assets/index-bRiiEobC.css +1 -0
  38. package/dist/assets/{plus-CFEffUqP.js → plus-D_aoCFbi.js} +2 -2
  39. package/dist/assets/{plus-CFEffUqP.js.map → plus-D_aoCFbi.js.map} +1 -1
  40. package/dist/assets/{useField-Czeyhihg.js → useField-BDSV5ZPo.js} +2 -2
  41. package/dist/assets/{useField-Czeyhihg.js.map → useField-BDSV5ZPo.js.map} +1 -1
  42. package/dist/assets/{useUnsavedChanges-CCE0XMQT.js → useUnsavedChanges-B0WVqgI4.js} +5 -5
  43. package/dist/assets/useUnsavedChanges-B0WVqgI4.js.map +1 -0
  44. package/dist/brand/apple-touch-icon.png +0 -0
  45. package/dist/brand/favicon.ico +0 -0
  46. package/dist/brand/micacms-favicon.svg +1 -0
  47. package/dist/brand/micacms-wordmark-light.svg +1 -0
  48. package/dist/brand/micacms-wordmark.svg +1 -0
  49. package/dist/fonts/InterVariable-LICENSE.txt +92 -0
  50. package/dist/index.html +6 -4
  51. package/package.json +2 -2
  52. package/dist/assets/ChangesView-aU_TiQsk.js +0 -7
  53. package/dist/assets/ChangesView-aU_TiQsk.js.map +0 -1
  54. package/dist/assets/ConfirmDialog.vue_vue_type_script_setup_true_lang-A3xi1Pww.js +0 -2
  55. package/dist/assets/ConfirmDialog.vue_vue_type_script_setup_true_lang-A3xi1Pww.js.map +0 -1
  56. package/dist/assets/EntryView-EdKf-RGT.js.map +0 -1
  57. package/dist/assets/LoginView-CNEoMKDH.js +0 -2
  58. package/dist/assets/LoginView-CNEoMKDH.js.map +0 -1
  59. package/dist/assets/MediaView-DZ8c7Ftz.js.map +0 -1
  60. package/dist/assets/PageHeader.vue_vue_type_script_setup_true_lang-BHQH-Q7U.js +0 -7
  61. package/dist/assets/SingletonView-Cq9s9GNX.js +0 -2
  62. package/dist/assets/SingletonView-Cq9s9GNX.js.map +0 -1
  63. package/dist/assets/SystemView-D6jgVaUD.js +0 -3
  64. package/dist/assets/SystemView-D6jgVaUD.js.map +0 -1
  65. package/dist/assets/index-BsCcwhm6.js.map +0 -1
  66. package/dist/assets/index-D9ZqpwC5.css +0 -1
  67. package/dist/assets/useUnsavedChanges-CCE0XMQT.js.map +0 -1
  68. package/dist/brand/mica-favicon.svg +0 -14
  69. package/dist/brand/mica-logo-glimmer-light.svg +0 -15
  70. package/dist/brand/mica-logo-glimmer.svg +0 -15
  71. package/dist/brand/mica-mark-glimmer.svg +0 -14
@@ -1 +1 @@
1
- {"version":3,"file":"NotFoundView-DAJd7RdP.js","sources":["../../src/views/NotFoundView.vue"],"sourcesContent":["<template>\n <div class=\"grid min-h-[60vh] place-items-center p-6 text-center\">\n <div>\n <p class=\"text-sm font-semibold text-muted\">Not found</p>\n <h1 class=\"mt-1 text-xl font-semibold tracking-tight\">This page does not exist</h1>\n <p class=\"mt-1.5 text-sm text-muted\">\n The link may be out of date, or the content may have been deleted.\n </p>\n <RouterLink :to=\"{ name: 'dashboard' }\" class=\"btn-primary mt-5\">Back to overview</RouterLink>\n </div>\n </div>\n</template>\n"],"names":["_hoisted_1","_openBlock","_createElementBlock","_createElementVNode","_cache","_createVNode","_component_RouterLink"],"mappings":"oGACOA,EAAA,CAAA,MAAM,sDAAsD,0CAAjE,OAAAC,EAAA,EAAAC,EASM,MATNF,EASM,CARJG,EAOM,MAAA,KAAA,CANJC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,EAAyD,IAAA,CAAtD,MAAM,kCAAkC,EAAC,YAAS,EAAA,GACrDC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,EAAmF,KAAA,CAA/E,MAAM,2CAA2C,EAAC,2BAAwB,EAAA,GAC9EC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,EAEI,IAAA,CAFD,MAAM,2BAA2B,EAAC,uEAErC,EAAA,GACAE,EAA8FC,EAAA,CAAjF,GAAI,CAAA,KAAA,WAAA,EAAuB,MAAM,+BAAmB,IAAgB,CAAA,GAAAF,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,GAAhB,mBAAgB,EAAA"}
1
+ {"version":3,"file":"NotFoundView-C9bEHUGC.js","sources":["../../src/views/NotFoundView.vue"],"sourcesContent":["<template>\n <div class=\"grid min-h-[60vh] place-items-center p-6 text-center\">\n <div>\n <p class=\"text-sm font-semibold text-muted\">Not found</p>\n <h1 class=\"mt-1 text-xl font-semibold tracking-tight\">This page does not exist</h1>\n <p class=\"mt-1.5 text-sm text-muted\">\n The link may be out of date, or the content may have been deleted.\n </p>\n <RouterLink :to=\"{ name: 'dashboard' }\" class=\"btn-primary mt-5\">Back to overview</RouterLink>\n </div>\n </div>\n</template>\n"],"names":["_hoisted_1","_openBlock","_createElementBlock","_createElementVNode","_cache","_createVNode","_component_RouterLink"],"mappings":"oGACOA,EAAA,CAAA,MAAM,sDAAsD,0CAAjE,OAAAC,EAAA,EAAAC,EASM,MATNF,EASM,CARJG,EAOM,MAAA,KAAA,CANJC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,EAAyD,IAAA,CAAtD,MAAM,kCAAkC,EAAC,YAAS,EAAA,GACrDC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,EAAmF,KAAA,CAA/E,MAAM,2CAA2C,EAAC,2BAAwB,EAAA,GAC9EC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAD,EAEI,IAAA,CAFD,MAAM,2BAA2B,EAAC,uEAErC,EAAA,GACAE,EAA8FC,EAAA,CAAjF,GAAI,CAAA,KAAA,WAAA,EAAuB,MAAM,+BAAmB,IAAgB,CAAA,GAAAF,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,GAAhB,mBAAgB,EAAA"}
@@ -1,2 +1,2 @@
1
- import{d as C,r as k,h as a,c as d,a as m,t as n,l as o,x,w,b as u,C as y,S as B,s as S,Z as D,j as N,g as c}from"./index-BsCcwhm6.js";import{_ as j}from"./useUnsavedChanges-CCE0XMQT.js";import{u as $}from"./useField-Czeyhihg.js";import{C as z}from"./chevron-down-DOqSqKRs.js";import"./arrow-right-DY4A7pBS.js";import"./plus-CFEffUqP.js";const F={class:"card overflow-hidden"},I={class:"sr-only"},E={class:"text-sm font-semibold"},O={key:0,class:"badge bg-danger-soft text-danger"},U={class:"border-t border-line p-4 sm:p-5"},W={key:0,class:"mb-4 text-xs text-muted"},Z={key:0,class:"px-4 pb-3 text-xs font-medium text-danger"},L=C({__name:"ObjectField",props:{field:{},path:{},issues:{},disabled:{type:Boolean},modelValue:{},collection:{},entrySlug:{}},emits:["update:modelValue"],setup(t,{emit:g}){const s=t,V=g,e=c(()=>s.field),{label:p,error:v}=$(s),f=k(!e.value.collapsed),_=c(()=>s.modelValue&&typeof s.modelValue=="object"?s.modelValue:{}),b=c(()=>{var r;return((r=s.issues)==null?void 0:r.some(l=>l.path.startsWith(`${s.path}.`)))??!1}),i=c(()=>f.value||b.value);return(r,l)=>(a(),d("fieldset",F,[m("legend",I,n(o(p)),1),(a(),x(B(e.value.collapsible?"button":"div"),{type:e.value.collapsible?"button":void 0,"aria-expanded":e.value.collapsible?i.value:void 0,class:y(["flex w-full items-center gap-2 px-4 py-3 text-left",e.value.collapsible&&"hover:bg-canvas"]),onClick:l[0]||(l[0]=h=>e.value.collapsible?f.value=!i.value:void 0)},{default:w(()=>[m("span",E,n(o(p)),1),b.value?(a(),d("span",O," Needs attention ")):u("",!0),e.value.collapsible?(a(),x(o(z),{key:1,size:16,class:y(["ml-auto h-4 w-4 text-muted transition",i.value&&"rotate-180"]),"aria-hidden":"true"},null,8,["class"])):u("",!0)]),_:1},8,["type","aria-expanded","class"])),S(m("div",U,[e.value.description?(a(),d("p",W,n(e.value.description),1)):u("",!0),N(j,{fields:e.value.fields,"model-value":_.value,path:t.path,issues:t.issues,disabled:t.disabled||e.value.readonly,collection:t.collection,"entry-slug":t.entrySlug,"onUpdate:modelValue":l[1]||(l[1]=h=>V("update:modelValue",h))},null,8,["fields","model-value","path","issues","disabled","collection","entry-slug"])],512),[[D,i.value]]),o(v)?(a(),d("p",Z,n(o(v)),1)):u("",!0)]))}});export{L as default};
2
- //# sourceMappingURL=ObjectField-BWAzmqNb.js.map
1
+ import{d as C,r as k,h as a,c as d,a as m,t as n,l as o,x,w,b as u,C as y,S as B,s as S,Z as D,j as N,g as c}from"./index-Colfqb-9.js";import{_ as j}from"./useUnsavedChanges-B0WVqgI4.js";import{u as $}from"./useField-BDSV5ZPo.js";import{C as z}from"./chevron-down-Bmt8sf-v.js";import"./arrow-right-DJTAYrz5.js";import"./plus-D_aoCFbi.js";const F={class:"card overflow-hidden"},I={class:"sr-only"},E={class:"text-sm font-semibold"},O={key:0,class:"badge bg-danger-soft text-danger"},U={class:"border-t border-line p-4 sm:p-5"},W={key:0,class:"mb-4 text-xs text-muted"},Z={key:0,class:"px-4 pb-3 text-xs font-medium text-danger"},L=C({__name:"ObjectField",props:{field:{},path:{},issues:{},disabled:{type:Boolean},modelValue:{},collection:{},entrySlug:{}},emits:["update:modelValue"],setup(t,{emit:g}){const s=t,V=g,e=c(()=>s.field),{label:p,error:v}=$(s),f=k(!e.value.collapsed),_=c(()=>s.modelValue&&typeof s.modelValue=="object"?s.modelValue:{}),b=c(()=>{var r;return((r=s.issues)==null?void 0:r.some(l=>l.path.startsWith(`${s.path}.`)))??!1}),i=c(()=>f.value||b.value);return(r,l)=>(a(),d("fieldset",F,[m("legend",I,n(o(p)),1),(a(),x(B(e.value.collapsible?"button":"div"),{type:e.value.collapsible?"button":void 0,"aria-expanded":e.value.collapsible?i.value:void 0,class:y(["flex w-full items-center gap-2 px-4 py-3 text-left",e.value.collapsible&&"hover:bg-canvas"]),onClick:l[0]||(l[0]=h=>e.value.collapsible?f.value=!i.value:void 0)},{default:w(()=>[m("span",E,n(o(p)),1),b.value?(a(),d("span",O," Needs attention ")):u("",!0),e.value.collapsible?(a(),x(o(z),{key:1,size:16,class:y(["ml-auto h-4 w-4 text-muted transition",i.value&&"rotate-180"]),"aria-hidden":"true"},null,8,["class"])):u("",!0)]),_:1},8,["type","aria-expanded","class"])),S(m("div",U,[e.value.description?(a(),d("p",W,n(e.value.description),1)):u("",!0),N(j,{fields:e.value.fields,"model-value":_.value,path:t.path,issues:t.issues,disabled:t.disabled||e.value.readonly,collection:t.collection,"entry-slug":t.entrySlug,"onUpdate:modelValue":l[1]||(l[1]=h=>V("update:modelValue",h))},null,8,["fields","model-value","path","issues","disabled","collection","entry-slug"])],512),[[D,i.value]]),o(v)?(a(),d("p",Z,n(o(v)),1)):u("",!0)]))}});export{L as default};
2
+ //# sourceMappingURL=ObjectField-gxr2a2pp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectField-BWAzmqNb.js","sources":["../../src/components/fields/ObjectField.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * Nested object. Recurses through `FieldList`, so nesting depth is unbounded.\n */\n\nimport { computed, ref } from \"vue\";\nimport { ChevronDown } from \"@lucide/vue\";\n\nimport type { ObjectField } from \"@micacms/core\";\n\nimport FieldList from \"./FieldList.vue\";\nimport { useField, type FieldProps } from \"@/composables/useField\";\n\nconst props = defineProps<\n FieldProps & { modelValue: unknown; collection?: string; entrySlug?: string }\n>();\nconst emit = defineEmits<{ \"update:modelValue\": [Record<string, unknown>] }>();\n\nconst field = computed(() => props.field as ObjectField);\nconst { label, error } = useField(props);\n\nconst open = ref(!field.value.collapsed);\n\nconst value = computed<Record<string, unknown>>(() =>\n props.modelValue && typeof props.modelValue === \"object\"\n ? (props.modelValue as Record<string, unknown>)\n : {},\n);\n\n// A collapsed group that hides an error is a trap; force it open.\nconst hasIssueInside = computed(\n () => props.issues?.some((issue) => issue.path.startsWith(`${props.path}.`)) ?? false,\n);\n\nconst expanded = computed(() => open.value || hasIssueInside.value);\n</script>\n\n<template>\n <fieldset class=\"card overflow-hidden\">\n <legend class=\"sr-only\">{{ label }}</legend>\n\n <component\n :is=\"field.collapsible ? 'button' : 'div'\"\n :type=\"field.collapsible ? 'button' : undefined\"\n :aria-expanded=\"field.collapsible ? expanded : undefined\"\n :class=\"[\n 'flex w-full items-center gap-2 px-4 py-3 text-left',\n field.collapsible && 'hover:bg-canvas',\n ]\"\n @click=\"field.collapsible ? (open = !expanded) : undefined\"\n >\n <span class=\"text-sm font-semibold\">{{ label }}</span>\n\n <span\n v-if=\"hasIssueInside\"\n class=\"badge bg-danger-soft text-danger\"\n >\n Needs attention\n </span>\n\n <ChevronDown\n v-if=\"field.collapsible\"\n :size=\"16\"\n :class=\"['ml-auto h-4 w-4 text-muted transition', expanded && 'rotate-180']\"\n aria-hidden=\"true\"\n />\n </component>\n\n <div v-show=\"expanded\" class=\"border-t border-line p-4 sm:p-5\">\n <p v-if=\"field.description\" class=\"mb-4 text-xs text-muted\">\n {{ field.description }}\n </p>\n\n <FieldList\n :fields=\"field.fields\"\n :model-value=\"value\"\n :path=\"path\"\n :issues=\"issues\"\n :disabled=\"disabled || field.readonly\"\n :collection=\"collection\"\n :entry-slug=\"entrySlug\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n />\n </div>\n\n <p v-if=\"error\" class=\"px-4 pb-3 text-xs font-medium text-danger\">{{ error }}</p>\n </fieldset>\n</template>\n"],"names":["props","__props","emit","__emit","field","computed","label","error","useField","open","ref","value","hasIssueInside","_a","issue","expanded","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","_unref","_createBlock","_resolveDynamicComponent","_normalizeClass","_cache","$event","_hoisted_3","_hoisted_4","ChevronDown","_withDirectives","_hoisted_5","_hoisted_6","_createVNode","FieldList","_hoisted_7"],"mappings":"gyBAaA,MAAMA,EAAQC,EAGRC,EAAOC,EAEPC,EAAQC,EAAS,IAAML,EAAM,KAAoB,EACjD,CAAE,MAAAM,EAAO,MAAAC,GAAUC,EAASR,CAAK,EAEjCS,EAAOC,EAAI,CAACN,EAAM,MAAM,SAAS,EAEjCO,EAAQN,EAAkC,IAC9CL,EAAM,YAAc,OAAOA,EAAM,YAAe,SAC3CA,EAAM,WACP,CAAA,CAAC,EAIDY,EAAiBP,EACrB,IAAA,OAAM,QAAAQ,EAAAb,EAAM,SAAN,YAAAa,EAAc,KAAMC,GAAUA,EAAM,KAAK,WAAW,GAAGd,EAAM,IAAI,GAAG,KAAM,GAAA,EAG5Ee,EAAWV,EAAS,IAAMI,EAAK,OAASG,EAAe,KAAK,gBAIhEI,EAAA,EAAAC,EAgDW,WAhDXC,EAgDW,CA/CTC,EAA4C,SAA5CC,EAA4CC,EAAjBC,EAAAhB,CAAA,CAAK,EAAA,CAAA,OAEhCiB,EAyBYC,EAxBLpB,EAAA,MAAM,YAAW,SAAA,KAAA,EAAA,CACrB,KAAMA,EAAA,MAAM,qBAAyB,OACrC,gBAAeA,EAAA,MAAM,YAAcW,EAAA,MAAW,OAC9C,MAAKU,EAAA,sDAA0ErB,EAAA,MAAM,aAAW,iBAAA,GAIhG,QAAKsB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEvB,QAAM,YAAeK,EAAA,MAAI,CAAIM,EAAA,MAAY,OAAA,aAEjD,IAAsD,CAAtDI,EAAsD,OAAtDS,EAAsDP,EAAfC,EAAAhB,CAAA,CAAK,EAAA,CAAA,EAGpCM,EAAA,WADRK,EAKO,OALPY,EAGC,mBAED,YAGQzB,EAAA,MAAM,iBADdmB,EAKED,EAAAQ,CAAA,EAAA,OAHC,KAAM,GACN,iDAAiDf,EAAA,OAAQ,YAAA,CAAA,EAC1D,cAAY,MAAA,0EAIhBgB,EAAAZ,EAeM,MAfNa,EAeM,CAdK5B,EAAA,MAAM,aAAfY,EAAA,EAAAC,EAEI,IAFJgB,EAEIZ,EADCjB,EAAA,MAAM,WAAW,EAAA,CAAA,YAGtB8B,EASEC,EAAA,CARC,OAAQ/B,EAAA,MAAM,OACd,cAAaO,EAAA,MACb,KAAMV,EAAA,KACN,OAAQA,EAAA,OACR,SAAUA,EAAA,UAAYG,EAAA,MAAM,SAC5B,WAAYH,EAAA,WACZ,aAAYA,EAAA,UACZ,sBAAkByB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEzB,EAAI,oBAAsByB,CAAM,EAAA,kGAb5CZ,EAAA,KAAQ,CAAA,GAiBZO,EAAAf,CAAA,OAATU,EAAiF,IAAjFmB,EAAiFf,EAAZC,EAAAf,CAAA,CAAK,EAAA,CAAA"}
1
+ {"version":3,"file":"ObjectField-gxr2a2pp.js","sources":["../../src/components/fields/ObjectField.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * Nested object. Recurses through `FieldList`, so nesting depth is unbounded.\n */\n\nimport { computed, ref } from \"vue\";\nimport { ChevronDown } from \"@lucide/vue\";\n\nimport type { ObjectField } from \"@micacms/core\";\n\nimport FieldList from \"./FieldList.vue\";\nimport { useField, type FieldProps } from \"@/composables/useField\";\n\nconst props = defineProps<\n FieldProps & { modelValue: unknown; collection?: string; entrySlug?: string }\n>();\nconst emit = defineEmits<{ \"update:modelValue\": [Record<string, unknown>] }>();\n\nconst field = computed(() => props.field as ObjectField);\nconst { label, error } = useField(props);\n\nconst open = ref(!field.value.collapsed);\n\nconst value = computed<Record<string, unknown>>(() =>\n props.modelValue && typeof props.modelValue === \"object\"\n ? (props.modelValue as Record<string, unknown>)\n : {},\n);\n\n// A collapsed group that hides an error is a trap; force it open.\nconst hasIssueInside = computed(\n () => props.issues?.some((issue) => issue.path.startsWith(`${props.path}.`)) ?? false,\n);\n\nconst expanded = computed(() => open.value || hasIssueInside.value);\n</script>\n\n<template>\n <fieldset class=\"card overflow-hidden\">\n <legend class=\"sr-only\">{{ label }}</legend>\n\n <component\n :is=\"field.collapsible ? 'button' : 'div'\"\n :type=\"field.collapsible ? 'button' : undefined\"\n :aria-expanded=\"field.collapsible ? expanded : undefined\"\n :class=\"[\n 'flex w-full items-center gap-2 px-4 py-3 text-left',\n field.collapsible && 'hover:bg-canvas',\n ]\"\n @click=\"field.collapsible ? (open = !expanded) : undefined\"\n >\n <span class=\"text-sm font-semibold\">{{ label }}</span>\n\n <span\n v-if=\"hasIssueInside\"\n class=\"badge bg-danger-soft text-danger\"\n >\n Needs attention\n </span>\n\n <ChevronDown\n v-if=\"field.collapsible\"\n :size=\"16\"\n :class=\"['ml-auto h-4 w-4 text-muted transition', expanded && 'rotate-180']\"\n aria-hidden=\"true\"\n />\n </component>\n\n <div v-show=\"expanded\" class=\"border-t border-line p-4 sm:p-5\">\n <p v-if=\"field.description\" class=\"mb-4 text-xs text-muted\">\n {{ field.description }}\n </p>\n\n <FieldList\n :fields=\"field.fields\"\n :model-value=\"value\"\n :path=\"path\"\n :issues=\"issues\"\n :disabled=\"disabled || field.readonly\"\n :collection=\"collection\"\n :entry-slug=\"entrySlug\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n />\n </div>\n\n <p v-if=\"error\" class=\"px-4 pb-3 text-xs font-medium text-danger\">{{ error }}</p>\n </fieldset>\n</template>\n"],"names":["props","__props","emit","__emit","field","computed","label","error","useField","open","ref","value","hasIssueInside","_a","issue","expanded","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","_unref","_createBlock","_resolveDynamicComponent","_normalizeClass","_cache","$event","_hoisted_3","_hoisted_4","ChevronDown","_withDirectives","_hoisted_5","_hoisted_6","_createVNode","FieldList","_hoisted_7"],"mappings":"gyBAaA,MAAMA,EAAQC,EAGRC,EAAOC,EAEPC,EAAQC,EAAS,IAAML,EAAM,KAAoB,EACjD,CAAE,MAAAM,EAAO,MAAAC,GAAUC,EAASR,CAAK,EAEjCS,EAAOC,EAAI,CAACN,EAAM,MAAM,SAAS,EAEjCO,EAAQN,EAAkC,IAC9CL,EAAM,YAAc,OAAOA,EAAM,YAAe,SAC3CA,EAAM,WACP,CAAA,CAAC,EAIDY,EAAiBP,EACrB,IAAA,OAAM,QAAAQ,EAAAb,EAAM,SAAN,YAAAa,EAAc,KAAMC,GAAUA,EAAM,KAAK,WAAW,GAAGd,EAAM,IAAI,GAAG,KAAM,GAAA,EAG5Ee,EAAWV,EAAS,IAAMI,EAAK,OAASG,EAAe,KAAK,gBAIhEI,EAAA,EAAAC,EAgDW,WAhDXC,EAgDW,CA/CTC,EAA4C,SAA5CC,EAA4CC,EAAjBC,EAAAhB,CAAA,CAAK,EAAA,CAAA,OAEhCiB,EAyBYC,EAxBLpB,EAAA,MAAM,YAAW,SAAA,KAAA,EAAA,CACrB,KAAMA,EAAA,MAAM,qBAAyB,OACrC,gBAAeA,EAAA,MAAM,YAAcW,EAAA,MAAW,OAC9C,MAAKU,EAAA,sDAA0ErB,EAAA,MAAM,aAAW,iBAAA,GAIhG,QAAKsB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEvB,QAAM,YAAeK,EAAA,MAAI,CAAIM,EAAA,MAAY,OAAA,aAEjD,IAAsD,CAAtDI,EAAsD,OAAtDS,EAAsDP,EAAfC,EAAAhB,CAAA,CAAK,EAAA,CAAA,EAGpCM,EAAA,WADRK,EAKO,OALPY,EAGC,mBAED,YAGQzB,EAAA,MAAM,iBADdmB,EAKED,EAAAQ,CAAA,EAAA,OAHC,KAAM,GACN,iDAAiDf,EAAA,OAAQ,YAAA,CAAA,EAC1D,cAAY,MAAA,0EAIhBgB,EAAAZ,EAeM,MAfNa,EAeM,CAdK5B,EAAA,MAAM,aAAfY,EAAA,EAAAC,EAEI,IAFJgB,EAEIZ,EADCjB,EAAA,MAAM,WAAW,EAAA,CAAA,YAGtB8B,EASEC,EAAA,CARC,OAAQ/B,EAAA,MAAM,OACd,cAAaO,EAAA,MACb,KAAMV,EAAA,KACN,OAAQA,EAAA,OACR,SAAUA,EAAA,UAAYG,EAAA,MAAM,SAC5B,WAAYH,EAAA,WACZ,aAAYA,EAAA,UACZ,sBAAkByB,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,GAAEzB,EAAI,oBAAsByB,CAAM,EAAA,kGAb5CZ,EAAA,KAAQ,CAAA,GAiBZO,EAAAf,CAAA,OAATU,EAAiF,IAAjFmB,EAAiFf,EAAZC,EAAAf,CAAA,CAAK,EAAA,CAAA"}
@@ -0,0 +1,7 @@
1
+ import{D as r,d as l,c as n,a as t,x as d,w as m,b as o,t as a,E as x,p as u,h as s,j as h,l as f,e as k}from"./index-Colfqb-9.js";/**
2
+ * @license @lucide/vue v1.37.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const b=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],_=r("chevron-left",b),p={class:"border-b border-line bg-raised"},g={class:"mx-auto flex max-w-5xl flex-wrap items-center gap-4 px-4 py-4 sm:px-6"},v={class:"min-w-0 flex-1"},w={class:"truncate font-display text-2xl font-normal leading-8 tracking-tight"},y={key:1,class:"mt-1 truncate text-xs text-muted"},L={class:"flex shrink-0 items-center gap-2"},N=l({__name:"PageHeader",props:{title:{},subtitle:{},back:{},backLabel:{}},setup(e){return(c,B)=>{const i=u("RouterLink");return s(),n("header",p,[t("div",g,[t("div",v,[e.back?(s(),d(i,{key:0,to:e.back,class:"mb-0.5 inline-flex items-center gap-1 text-xs font-medium text-muted hover:text-ink"},{default:m(()=>[h(f(_),{size:14,"aria-hidden":"true"}),k(" "+a(e.backLabel??"Back"),1)]),_:1},8,["to"])):o("",!0),t("h1",w,a(e.title),1),e.subtitle?(s(),n("p",y,a(e.subtitle),1)):o("",!0)]),t("div",L,[x(c.$slots,"default")])])])}}});export{N as _};
7
+ //# sourceMappingURL=PageHeader.vue_vue_type_script_setup_true_lang-B-fBJAjn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageHeader.vue_vue_type_script_setup_true_lang-BHQH-Q7U.js","sources":["../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/chevron-left.mjs","../../src/components/PageHeader.vue"],"sourcesContent":["/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nconst ChevronLeft = createLucideIcon(\"chevron-left\", __iconNode);\n\nexport { __iconNode, ChevronLeft as default };\n//# sourceMappingURL=chevron-left.mjs.map\n","<script setup lang=\"ts\">\nimport { ChevronLeft } from \"@lucide/vue\";\n\ndefineProps<{\n title: string;\n subtitle?: string | null;\n /** Rendered as a back link above the title. */\n back?: { name: string; params?: Record<string, string> } | null;\n backLabel?: string;\n}>();\n</script>\n\n<template>\n <header class=\"border-b border-line bg-raised\">\n <div class=\"mx-auto flex max-w-5xl flex-wrap items-center gap-4 px-4 py-4 sm:px-6\">\n <div class=\"min-w-0 flex-1\">\n <RouterLink\n v-if=\"back\"\n :to=\"back\"\n class=\"mb-0.5 inline-flex items-center gap-1 text-xs font-medium text-muted hover:text-ink\"\n >\n <ChevronLeft :size=\"14\" aria-hidden=\"true\" />\n {{ backLabel ?? \"Back\" }}\n </RouterLink>\n\n <h1 class=\"truncate font-display text-2xl font-normal leading-8 tracking-[.02em]\">{{ title }}</h1>\n <p v-if=\"subtitle\" class=\"mt-1 truncate text-xs text-muted\">{{ subtitle }}</p>\n </div>\n\n <div class=\"flex shrink-0 items-center gap-2\">\n <slot />\n </div>\n </div>\n </header>\n</template>\n"],"names":["__iconNode","ChevronLeft","createLucideIcon","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","__props","_createBlock","_component_RouterLink","_createVNode","_unref","_createTextVNode","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6","_renderSlot","_ctx"],"mappings":"mIAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAa,CAAC,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,CAAC,EAC9DC,EAAcC,EAAiB,eAAgBF,CAAU,scCG7D,OAAAG,EAAA,EAAAC,EAoBS,SApBTC,EAoBS,CAnBPC,EAkBM,MAlBNC,EAkBM,CAjBJD,EAYM,MAZNE,EAYM,CAVIC,EAAA,UADRC,EAOaC,EAAA,OALV,GAAIF,EAAA,KACL,MAAM,qFAAA,aAEN,IAA6C,CAA7CG,EAA6CC,EAAAZ,CAAA,EAAA,CAA/B,KAAM,GAAI,cAAY,MAAA,GAASa,EAAA,MAC1CL,EAAA,WAAS,MAAA,EAAA,CAAA,CAAA,4BAGdH,EAAkG,KAAlGS,EAAkGC,EAAbP,EAAA,KAAK,EAAA,CAAA,EACjFA,EAAA,cAATL,EAA8E,IAA9Ea,EAA8ED,EAAfP,EAAA,QAAQ,EAAA,CAAA,cAGzEH,EAEM,MAFNY,EAEM,CADJC,EAAQC,EAAA,OAAA,SAAA,CAAA","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"PageHeader.vue_vue_type_script_setup_true_lang-B-fBJAjn.js","sources":["../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/chevron-left.mjs","../../src/components/PageHeader.vue"],"sourcesContent":["/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nconst ChevronLeft = createLucideIcon(\"chevron-left\", __iconNode);\n\nexport { __iconNode, ChevronLeft as default };\n//# sourceMappingURL=chevron-left.mjs.map\n","<script setup lang=\"ts\">\nimport { ChevronLeft } from \"@lucide/vue\";\n\ndefineProps<{\n title: string;\n subtitle?: string | null;\n /** Rendered as a back link above the title. */\n back?: { name: string; params?: Record<string, string> } | null;\n backLabel?: string;\n}>();\n</script>\n\n<template>\n <header class=\"border-b border-line bg-raised\">\n <div class=\"mx-auto flex max-w-5xl flex-wrap items-center gap-4 px-4 py-4 sm:px-6\">\n <div class=\"min-w-0 flex-1\">\n <RouterLink\n v-if=\"back\"\n :to=\"back\"\n class=\"mb-0.5 inline-flex items-center gap-1 text-xs font-medium text-muted hover:text-ink\"\n >\n <ChevronLeft :size=\"14\" aria-hidden=\"true\" />\n {{ backLabel ?? \"Back\" }}\n </RouterLink>\n\n <h1 class=\"truncate font-display text-2xl font-normal leading-8 tracking-tight\">{{ title }}</h1>\n <p v-if=\"subtitle\" class=\"mt-1 truncate text-xs text-muted\">{{ subtitle }}</p>\n </div>\n\n <div class=\"flex shrink-0 items-center gap-2\">\n <slot />\n </div>\n </div>\n </header>\n</template>\n"],"names":["__iconNode","ChevronLeft","createLucideIcon","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","__props","_createBlock","_component_RouterLink","_createVNode","_unref","_createTextVNode","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6","_renderSlot","_ctx"],"mappings":"mIAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAa,CAAC,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,CAAC,EAC9DC,EAAcC,EAAiB,eAAgBF,CAAU,ocCG7D,OAAAG,EAAA,EAAAC,EAoBS,SApBTC,EAoBS,CAnBPC,EAkBM,MAlBNC,EAkBM,CAjBJD,EAYM,MAZNE,EAYM,CAVIC,EAAA,UADRC,EAOaC,EAAA,OALV,GAAIF,EAAA,KACL,MAAM,qFAAA,aAEN,IAA6C,CAA7CG,EAA6CC,EAAAZ,CAAA,EAAA,CAA/B,KAAM,GAAI,cAAY,MAAA,GAASa,EAAA,MAC1CL,EAAA,WAAS,MAAA,EAAA,CAAA,CAAA,4BAGdH,EAAgG,KAAhGS,EAAgGC,EAAbP,EAAA,KAAK,EAAA,CAAA,EAC/EA,EAAA,cAATL,EAA8E,IAA9Ea,EAA8ED,EAAfP,EAAA,QAAQ,EAAA,CAAA,cAGzEH,EAEM,MAFNY,EAEM,CADJC,EAAQC,EAAA,OAAA,SAAA,CAAA","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
1
- import{D as w,d as j,h as i,c,a as o,e as V,t as r,l as h,b as f,F as B,k as R,j as v,C as I,s as U,Z as H,g as _,r as P}from"./index-BsCcwhm6.js";import{_ as T,d as q}from"./useUnsavedChanges-CCE0XMQT.js";import{u as E,h as W}from"./useField-Czeyhihg.js";import{C as Z}from"./chevron-down-DOqSqKRs.js";import{A as G,a as J}from"./arrow-up-jX6XH6AV.js";import{P as K}from"./plus-CFEffUqP.js";import"./arrow-right-DY4A7pBS.js";/**
1
+ import{D as w,d as j,h as i,c,a as o,e as V,t as r,l as h,b as f,F as B,k as R,j as v,C as I,s as U,Z as H,g as _,r as P}from"./index-Colfqb-9.js";import{_ as T,d as q}from"./useUnsavedChanges-B0WVqgI4.js";import{u as E,h as W}from"./useField-BDSV5ZPo.js";import{C as Z}from"./chevron-down-Bmt8sf-v.js";import{A as G,a as J}from"./arrow-up-CibOjHj-.js";import{P as K}from"./plus-D_aoCFbi.js";import"./arrow-right-DJTAYrz5.js";/**
2
2
  * @license @lucide/vue v1.37.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -9,4 +9,4 @@ import{D as w,d as j,h as i,c,a as o,e as V,t as r,l as h,b as f,F as B,k as R,j
9
9
  * This source code is licensed under the ISC license.
10
10
  * See the LICENSE file in the root directory of this source tree.
11
11
  */const X=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],Y=w("trash-2",X),ee={class:"field-label mb-1.5"},te={key:0,class:"text-danger","aria-hidden":"true"},se={key:0,class:"field-hint -mt-1 mb-2"},ae={key:1,class:"space-y-2"},le={class:"flex items-center gap-1 bg-canvas/60 px-3 py-2"},oe=["aria-expanded","onClick"],ne={class:"truncate text-sm font-medium"},de={key:0,class:"badge shrink-0 bg-danger-soft text-danger"},ie={class:"flex shrink-0 items-center gap-0.5"},ce=["disabled","onClick"],re={class:"sr-only"},ue=["disabled","onClick"],he={class:"sr-only"},me=["disabled","onClick"],ve={class:"sr-only"},pe=["disabled","onClick"],ye={class:"sr-only"},be={class:"border-t border-line p-4"},fe={key:2,class:"rounded-lg border border-dashed border-line px-4 py-5 text-center text-sm text-muted"},_e=["disabled"],ge={key:3,class:"ml-2 text-xs text-muted"},ke={key:4,class:"field-error"},Ne=j({__name:"RepeaterField",props:{field:{},path:{},issues:{},disabled:{type:Boolean},modelValue:{},collection:{},entrySlug:{}},emits:["update:modelValue"],setup(d,{emit:x}){const p=d,$=x,l=_(()=>p.field),{label:M,error:k}=E(p),m=P(new Set),n=_(()=>Array.isArray(p.modelValue)?p.modelValue:[]),g=_(()=>l.value.max!==void 0&&n.value.length>=l.value.max),z=_(()=>l.value.min!==void 0&&n.value.length<=l.value.min);function y(s,t){var u;const a=l.value.itemLabel,e=a?s[a]:void 0;return typeof e=="string"&&e.trim()?e.trim():`${W(((u=l.value.addLabel)==null?void 0:u.replace(/^Add\s+/i,""))??"Item")} ${t+1}`}function N(s){var t;return((t=p.issues)==null?void 0:t.some(a=>a.path.startsWith(`${p.path}.${s}.`)))??!1}function b(s){$("update:modelValue",s)}function A(){b([...n.value,q(l.value.fields)])}function S(s){const t=n.value[s];if(!t)return;const a=[...n.value];a.splice(s+1,0,structuredClone(t)),b(a)}function D(s){b(n.value.filter((t,a)=>a!==s)),m.value=new Set([...m.value].filter(t=>t!==s).map(t=>t>s?t-1:t))}function C(s,t){const a=s+t;if(a<0||a>=n.value.length)return;const e=[...n.value];[e[s],e[a]]=[e[a],e[s]],b(e)}function F(s,t){b(n.value.map((a,e)=>e===s?t:a))}function L(s){const t=new Set(m.value);t.has(s)?t.delete(s):t.add(s),m.value=t}return(s,t)=>(i(),c("fieldset",null,[o("legend",ee,[V(r(h(M))+" ",1),l.value.required?(i(),c("span",te,"*")):f("",!0)]),l.value.description?(i(),c("p",se,r(l.value.description),1)):f("",!0),n.value.length?(i(),c("ol",ae,[(i(!0),c(B,null,R(n.value,(a,e)=>(i(),c("li",{key:e,class:"card overflow-hidden"},[o("div",le,[o("button",{type:"button",class:"flex min-w-0 flex-1 items-center gap-2 text-left","aria-expanded":!m.value.has(e),onClick:u=>L(e)},[v(h(Z),{size:16,class:I(["h-4 w-4 shrink-0 text-muted transition",!m.value.has(e)&&"rotate-180"]),"aria-hidden":"true"},null,8,["class"]),o("span",ne,r(y(a,e)),1),N(e)?(i(),c("span",de," Needs attention ")):f("",!0)],8,oe),o("div",ie,[o("button",{type:"button",class:"btn-ghost px-1.5 py-1",disabled:d.disabled||e===0,onClick:u=>C(e,-1)},[v(h(G),{size:16,"aria-hidden":"true"}),o("span",re,'Move "'+r(y(a,e))+'" up',1)],8,ce),o("button",{type:"button",class:"btn-ghost px-1.5 py-1",disabled:d.disabled||e===n.value.length-1,onClick:u=>C(e,1)},[v(h(J),{size:16,"aria-hidden":"true"}),o("span",he,'Move "'+r(y(a,e))+'" down',1)],8,ue),o("button",{type:"button",class:"btn-ghost px-1.5 py-1",disabled:d.disabled||g.value,onClick:u=>S(e)},[v(h(Q),{size:16,"aria-hidden":"true"}),o("span",ve,'Duplicate "'+r(y(a,e))+'"',1)],8,me),o("button",{type:"button",class:"btn-ghost px-1.5 py-1 hover:text-danger",disabled:d.disabled||z.value,onClick:u=>D(e)},[v(h(Y),{size:16,"aria-hidden":"true"}),o("span",ye,'Remove "'+r(y(a,e))+'"',1)],8,pe)])]),U(o("div",be,[v(T,{fields:l.value.fields,"model-value":a,path:`${d.path}.${e}`,issues:d.issues,disabled:d.disabled||l.value.readonly,collection:d.collection,"entry-slug":d.entrySlug,"onUpdate:modelValue":u=>F(e,u)},null,8,["fields","model-value","path","issues","disabled","collection","entry-slug","onUpdate:modelValue"])],512),[[H,!m.value.has(e)]])]))),128))])):(i(),c("p",fe," Nothing added yet. ")),o("button",{type:"button",class:"btn-secondary mt-2",disabled:d.disabled||l.value.readonly||g.value,onClick:A},[v(h(K),{size:16,"aria-hidden":"true"}),V(" "+r(l.value.addLabel??"Add item"),1)],8,_e),g.value?(i(),c("span",ge," Maximum of "+r(l.value.max)+" reached. ",1)):f("",!0),h(k)?(i(),c("p",ke,r(h(k)),1)):f("",!0)]))}});export{Ne as default};
12
- //# sourceMappingURL=RepeaterField-Dk1Wne4m.js.map
12
+ //# sourceMappingURL=RepeaterField-obOWml_P.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RepeaterField-Dk1Wne4m.js","sources":["../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/copy.mjs","../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/trash-2.mjs","../../src/components/fields/RepeaterField.vue"],"sourcesContent":["/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.mjs.map\n","/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.mjs.map\n","<script setup lang=\"ts\">\n/**\n * Repeating group of fields.\n *\n * Reordering is done with buttons rather than drag-and-drop: it works with a\n * keyboard, on a tablet, and with a screen reader, none of which are true of a\n * drag handle without a great deal more code.\n */\n\nimport { computed, ref } from \"vue\";\nimport { ArrowDown, ArrowUp, ChevronDown, Copy, Plus, Trash2 } from \"@lucide/vue\";\n\nimport { defaultValues, type RepeaterField } from \"@micacms/core\";\n\nimport FieldList from \"./FieldList.vue\";\nimport { humanise, useField, type FieldProps } from \"@/composables/useField\";\n\nconst props = defineProps<\n FieldProps & { modelValue: unknown; collection?: string; entrySlug?: string }\n>();\nconst emit = defineEmits<{ \"update:modelValue\": [Record<string, unknown>[]] }>();\n\nconst field = computed(() => props.field as RepeaterField);\nconst { label, error } = useField(props);\n\nconst collapsed = ref(new Set<number>());\n\nconst rows = computed<Record<string, unknown>[]>(() =>\n Array.isArray(props.modelValue) ? (props.modelValue as Record<string, unknown>[]) : [],\n);\n\nconst atMax = computed(() => field.value.max !== undefined && rows.value.length >= field.value.max);\nconst atMin = computed(() => field.value.min !== undefined && rows.value.length <= field.value.min);\n\n/** Row summary: the declared `itemLabel` child, else a positional fallback. */\nfunction summaryFor(row: Record<string, unknown>, index: number): string {\n const key = field.value.itemLabel;\n const value = key ? row[key] : undefined;\n if (typeof value === \"string\" && value.trim()) return value.trim();\n return `${humanise(field.value.addLabel?.replace(/^Add\\s+/i, \"\") ?? \"Item\")} ${index + 1}`;\n}\n\nfunction rowHasIssue(index: number): boolean {\n return props.issues?.some((issue) => issue.path.startsWith(`${props.path}.${index}.`)) ?? false;\n}\n\nfunction emitRows(next: Record<string, unknown>[]): void {\n emit(\"update:modelValue\", next);\n}\n\nfunction add(): void {\n // A new row starts as a complete skeleton so every input is bound.\n emitRows([...rows.value, defaultValues(field.value.fields)]);\n}\n\nfunction duplicate(index: number): void {\n const source = rows.value[index];\n if (!source) return;\n const next = [...rows.value];\n next.splice(index + 1, 0, structuredClone(source));\n emitRows(next);\n}\n\nfunction remove(index: number): void {\n emitRows(rows.value.filter((_, position) => position !== index));\n collapsed.value = new Set(\n [...collapsed.value].filter((item) => item !== index).map((item) => (item > index ? item - 1 : item)),\n );\n}\n\nfunction move(index: number, direction: -1 | 1): void {\n const target = index + direction;\n if (target < 0 || target >= rows.value.length) return;\n\n const next = [...rows.value];\n [next[index], next[target]] = [next[target]!, next[index]!];\n emitRows(next);\n}\n\nfunction updateRow(index: number, value: Record<string, unknown>): void {\n emitRows(rows.value.map((row, position) => (position === index ? value : row)));\n}\n\nfunction toggle(index: number): void {\n const next = new Set(collapsed.value);\n if (next.has(index)) next.delete(index);\n else next.add(index);\n collapsed.value = next;\n}\n</script>\n\n<template>\n <fieldset>\n <legend class=\"field-label mb-1.5\">\n {{ label }}\n <span v-if=\"field.required\" class=\"text-danger\" aria-hidden=\"true\">*</span>\n </legend>\n\n <p v-if=\"field.description\" class=\"field-hint -mt-1 mb-2\">{{ field.description }}</p>\n\n <ol v-if=\"rows.length\" class=\"space-y-2\">\n <li v-for=\"(row, index) in rows\" :key=\"index\" class=\"card overflow-hidden\">\n <div class=\"flex items-center gap-1 bg-canvas/60 px-3 py-2\">\n <button\n type=\"button\"\n class=\"flex min-w-0 flex-1 items-center gap-2 text-left\"\n :aria-expanded=\"!collapsed.has(index)\"\n @click=\"toggle(index)\"\n >\n <ChevronDown\n :size=\"16\"\n :class=\"[\n 'h-4 w-4 shrink-0 text-muted transition',\n !collapsed.has(index) && 'rotate-180',\n ]\"\n aria-hidden=\"true\"\n />\n <span class=\"truncate text-sm font-medium\">{{ summaryFor(row, index) }}</span>\n <span\n v-if=\"rowHasIssue(index)\"\n class=\"badge shrink-0 bg-danger-soft text-danger\"\n >\n Needs attention\n </span>\n </button>\n\n <div class=\"flex shrink-0 items-center gap-0.5\">\n <button\n type=\"button\"\n class=\"btn-ghost px-1.5 py-1\"\n :disabled=\"disabled || index === 0\"\n @click=\"move(index, -1)\"\n >\n <ArrowUp :size=\"16\" aria-hidden=\"true\" />\n <span class=\"sr-only\">Move \"{{ summaryFor(row, index) }}\" up</span>\n </button>\n\n <button\n type=\"button\"\n class=\"btn-ghost px-1.5 py-1\"\n :disabled=\"disabled || index === rows.length - 1\"\n @click=\"move(index, 1)\"\n >\n <ArrowDown :size=\"16\" aria-hidden=\"true\" />\n <span class=\"sr-only\">Move \"{{ summaryFor(row, index) }}\" down</span>\n </button>\n\n <button\n type=\"button\"\n class=\"btn-ghost px-1.5 py-1\"\n :disabled=\"disabled || atMax\"\n @click=\"duplicate(index)\"\n >\n <Copy :size=\"16\" aria-hidden=\"true\" />\n <span class=\"sr-only\">Duplicate \"{{ summaryFor(row, index) }}\"</span>\n </button>\n\n <button\n type=\"button\"\n class=\"btn-ghost px-1.5 py-1 hover:text-danger\"\n :disabled=\"disabled || atMin\"\n @click=\"remove(index)\"\n >\n <Trash2 :size=\"16\" aria-hidden=\"true\" />\n <span class=\"sr-only\">Remove \"{{ summaryFor(row, index) }}\"</span>\n </button>\n </div>\n </div>\n\n <div v-show=\"!collapsed.has(index)\" class=\"border-t border-line p-4\">\n <FieldList\n :fields=\"field.fields\"\n :model-value=\"row\"\n :path=\"`${path}.${index}`\"\n :issues=\"issues\"\n :disabled=\"disabled || field.readonly\"\n :collection=\"collection\"\n :entry-slug=\"entrySlug\"\n @update:model-value=\"updateRow(index, $event)\"\n />\n </div>\n </li>\n </ol>\n\n <p v-else class=\"rounded-lg border border-dashed border-line px-4 py-5 text-center text-sm text-muted\">\n Nothing added yet.\n </p>\n\n <button\n type=\"button\"\n class=\"btn-secondary mt-2\"\n :disabled=\"disabled || field.readonly || atMax\"\n @click=\"add\"\n >\n <Plus :size=\"16\" aria-hidden=\"true\" />\n {{ field.addLabel ?? \"Add item\" }}\n </button>\n\n <span v-if=\"atMax\" class=\"ml-2 text-xs text-muted\">\n Maximum of {{ field.max }} reached.\n </span>\n\n <p v-if=\"error\" class=\"field-error\">{{ error }}</p>\n </fieldset>\n</template>\n"],"names":["__iconNode","Copy","createLucideIcon","Trash2","props","__props","emit","__emit","field","computed","label","error","useField","collapsed","ref","rows","atMax","atMin","summaryFor","row","index","key","value","humanise","_a","rowHasIssue","issue","emitRows","next","add","defaultValues","duplicate","source","remove","_","position","item","move","direction","target","updateRow","toggle","_createElementBlock","_createElementVNode","_hoisted_1","_createTextVNode","_toDisplayString","_unref","_hoisted_2","_openBlock","_hoisted_3","_hoisted_4","_Fragment","_renderList","_hoisted_5","$event","_createVNode","ChevronDown","_normalizeClass","_hoisted_7","_hoisted_8","_hoisted_9","ArrowUp","_hoisted_11","ArrowDown","_hoisted_13","_hoisted_15","_hoisted_17","_withDirectives","_hoisted_18","FieldList","_hoisted_19","Plus","_hoisted_21","_hoisted_22"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"RepeaterField-obOWml_P.js","sources":["../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/copy.mjs","../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/trash-2.mjs","../../src/components/fields/RepeaterField.vue"],"sourcesContent":["/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.mjs.map\n","/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.mjs.map\n","<script setup lang=\"ts\">\n/**\n * Repeating group of fields.\n *\n * Reordering is done with buttons rather than drag-and-drop: it works with a\n * keyboard, on a tablet, and with a screen reader, none of which are true of a\n * drag handle without a great deal more code.\n */\n\nimport { computed, ref } from \"vue\";\nimport { ArrowDown, ArrowUp, ChevronDown, Copy, Plus, Trash2 } from \"@lucide/vue\";\n\nimport { defaultValues, type RepeaterField } from \"@micacms/core\";\n\nimport FieldList from \"./FieldList.vue\";\nimport { humanise, useField, type FieldProps } from \"@/composables/useField\";\n\nconst props = defineProps<\n FieldProps & { modelValue: unknown; collection?: string; entrySlug?: string }\n>();\nconst emit = defineEmits<{ \"update:modelValue\": [Record<string, unknown>[]] }>();\n\nconst field = computed(() => props.field as RepeaterField);\nconst { label, error } = useField(props);\n\nconst collapsed = ref(new Set<number>());\n\nconst rows = computed<Record<string, unknown>[]>(() =>\n Array.isArray(props.modelValue) ? (props.modelValue as Record<string, unknown>[]) : [],\n);\n\nconst atMax = computed(() => field.value.max !== undefined && rows.value.length >= field.value.max);\nconst atMin = computed(() => field.value.min !== undefined && rows.value.length <= field.value.min);\n\n/** Row summary: the declared `itemLabel` child, else a positional fallback. */\nfunction summaryFor(row: Record<string, unknown>, index: number): string {\n const key = field.value.itemLabel;\n const value = key ? row[key] : undefined;\n if (typeof value === \"string\" && value.trim()) return value.trim();\n return `${humanise(field.value.addLabel?.replace(/^Add\\s+/i, \"\") ?? \"Item\")} ${index + 1}`;\n}\n\nfunction rowHasIssue(index: number): boolean {\n return props.issues?.some((issue) => issue.path.startsWith(`${props.path}.${index}.`)) ?? false;\n}\n\nfunction emitRows(next: Record<string, unknown>[]): void {\n emit(\"update:modelValue\", next);\n}\n\nfunction add(): void {\n // A new row starts as a complete skeleton so every input is bound.\n emitRows([...rows.value, defaultValues(field.value.fields)]);\n}\n\nfunction duplicate(index: number): void {\n const source = rows.value[index];\n if (!source) return;\n const next = [...rows.value];\n next.splice(index + 1, 0, structuredClone(source));\n emitRows(next);\n}\n\nfunction remove(index: number): void {\n emitRows(rows.value.filter((_, position) => position !== index));\n collapsed.value = new Set(\n [...collapsed.value].filter((item) => item !== index).map((item) => (item > index ? item - 1 : item)),\n );\n}\n\nfunction move(index: number, direction: -1 | 1): void {\n const target = index + direction;\n if (target < 0 || target >= rows.value.length) return;\n\n const next = [...rows.value];\n [next[index], next[target]] = [next[target]!, next[index]!];\n emitRows(next);\n}\n\nfunction updateRow(index: number, value: Record<string, unknown>): void {\n emitRows(rows.value.map((row, position) => (position === index ? value : row)));\n}\n\nfunction toggle(index: number): void {\n const next = new Set(collapsed.value);\n if (next.has(index)) next.delete(index);\n else next.add(index);\n collapsed.value = next;\n}\n</script>\n\n<template>\n <fieldset>\n <legend class=\"field-label mb-1.5\">\n {{ label }}\n <span v-if=\"field.required\" class=\"text-danger\" aria-hidden=\"true\">*</span>\n </legend>\n\n <p v-if=\"field.description\" class=\"field-hint -mt-1 mb-2\">{{ field.description }}</p>\n\n <ol v-if=\"rows.length\" class=\"space-y-2\">\n <li v-for=\"(row, index) in rows\" :key=\"index\" class=\"card overflow-hidden\">\n <div class=\"flex items-center gap-1 bg-canvas/60 px-3 py-2\">\n <button\n type=\"button\"\n class=\"flex min-w-0 flex-1 items-center gap-2 text-left\"\n :aria-expanded=\"!collapsed.has(index)\"\n @click=\"toggle(index)\"\n >\n <ChevronDown\n :size=\"16\"\n :class=\"[\n 'h-4 w-4 shrink-0 text-muted transition',\n !collapsed.has(index) && 'rotate-180',\n ]\"\n aria-hidden=\"true\"\n />\n <span class=\"truncate text-sm font-medium\">{{ summaryFor(row, index) }}</span>\n <span\n v-if=\"rowHasIssue(index)\"\n class=\"badge shrink-0 bg-danger-soft text-danger\"\n >\n Needs attention\n </span>\n </button>\n\n <div class=\"flex shrink-0 items-center gap-0.5\">\n <button\n type=\"button\"\n class=\"btn-ghost px-1.5 py-1\"\n :disabled=\"disabled || index === 0\"\n @click=\"move(index, -1)\"\n >\n <ArrowUp :size=\"16\" aria-hidden=\"true\" />\n <span class=\"sr-only\">Move \"{{ summaryFor(row, index) }}\" up</span>\n </button>\n\n <button\n type=\"button\"\n class=\"btn-ghost px-1.5 py-1\"\n :disabled=\"disabled || index === rows.length - 1\"\n @click=\"move(index, 1)\"\n >\n <ArrowDown :size=\"16\" aria-hidden=\"true\" />\n <span class=\"sr-only\">Move \"{{ summaryFor(row, index) }}\" down</span>\n </button>\n\n <button\n type=\"button\"\n class=\"btn-ghost px-1.5 py-1\"\n :disabled=\"disabled || atMax\"\n @click=\"duplicate(index)\"\n >\n <Copy :size=\"16\" aria-hidden=\"true\" />\n <span class=\"sr-only\">Duplicate \"{{ summaryFor(row, index) }}\"</span>\n </button>\n\n <button\n type=\"button\"\n class=\"btn-ghost px-1.5 py-1 hover:text-danger\"\n :disabled=\"disabled || atMin\"\n @click=\"remove(index)\"\n >\n <Trash2 :size=\"16\" aria-hidden=\"true\" />\n <span class=\"sr-only\">Remove \"{{ summaryFor(row, index) }}\"</span>\n </button>\n </div>\n </div>\n\n <div v-show=\"!collapsed.has(index)\" class=\"border-t border-line p-4\">\n <FieldList\n :fields=\"field.fields\"\n :model-value=\"row\"\n :path=\"`${path}.${index}`\"\n :issues=\"issues\"\n :disabled=\"disabled || field.readonly\"\n :collection=\"collection\"\n :entry-slug=\"entrySlug\"\n @update:model-value=\"updateRow(index, $event)\"\n />\n </div>\n </li>\n </ol>\n\n <p v-else class=\"rounded-lg border border-dashed border-line px-4 py-5 text-center text-sm text-muted\">\n Nothing added yet.\n </p>\n\n <button\n type=\"button\"\n class=\"btn-secondary mt-2\"\n :disabled=\"disabled || field.readonly || atMax\"\n @click=\"add\"\n >\n <Plus :size=\"16\" aria-hidden=\"true\" />\n {{ field.addLabel ?? \"Add item\" }}\n </button>\n\n <span v-if=\"atMax\" class=\"ml-2 text-xs text-muted\">\n Maximum of {{ field.max }} reached.\n </span>\n\n <p v-if=\"error\" class=\"field-error\">{{ error }}</p>\n </fieldset>\n</template>\n"],"names":["__iconNode","Copy","createLucideIcon","Trash2","props","__props","emit","__emit","field","computed","label","error","useField","collapsed","ref","rows","atMax","atMin","summaryFor","row","index","key","value","humanise","_a","rowHasIssue","issue","emitRows","next","add","defaultValues","duplicate","source","remove","_","position","item","move","direction","target","updateRow","toggle","_createElementBlock","_createElementVNode","_hoisted_1","_createTextVNode","_toDisplayString","_unref","_hoisted_2","_openBlock","_hoisted_3","_hoisted_4","_Fragment","_renderList","_hoisted_5","$event","_createVNode","ChevronDown","_normalizeClass","_hoisted_7","_hoisted_8","_hoisted_9","ArrowUp","_hoisted_11","ArrowDown","_hoisted_13","_hoisted_15","_hoisted_17","_withDirectives","_hoisted_18","FieldList","_hoisted_19","Plus","_hoisted_21","_hoisted_22"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -0,0 +1,2 @@
1
+ import{d as D,o as U,q as $,c as a,j as N,w as z,a as s,F as _,t as l,b as w,k as A,z as E,g as F,r as i,i as T,A as p,n as L,h as n,e as M,l as h,C as j,m as q,y as G}from"./index-Colfqb-9.js";import{u as H,_ as I,w as J}from"./useUnsavedChanges-B0WVqgI4.js";import{_ as K}from"./PageHeader.vue_vue_type_script_setup_true_lang-B-fBJAjn.js";import"./useField-BDSV5ZPo.js";import"./arrow-right-DJTAYrz5.js";import"./plus-D_aoCFbi.js";const O=["disabled"],P={class:"mx-auto max-w-3xl px-4 py-6 sm:px-6"},Q={key:0,class:"text-sm text-muted"},R={key:0,class:"mb-5 text-sm text-muted"},W={key:1,role:"alert",class:"mb-5 rounded-md border border-warning/15 bg-warning-soft p-4"},X={key:2,role:"alert",class:"mb-5 rounded-md border border-danger/15 bg-danger-soft p-4"},Y={class:"text-sm font-medium text-danger"},Z={class:"mt-1.5 space-y-0.5 text-xs text-danger"},ee={key:1,class:"p-8 text-center text-sm text-muted"},ie=D({__name:"SingletonView",props:{name:{}},setup(k){const m=k,B=G(),u=L(),r=F(()=>B.singleton(m.name)),d=i({}),o=i([]),b=i(null),y=i(!0),c=i(!1),v=i(!1),C=i(""),{dirty:g,markClean:S}=H(d);async function x(){var t;y.value=!0;try{const e=await T.singletons.get(m.name);d.value=structuredClone(J(((t=r.value)==null?void 0:t.fields)??{},e.data)),b.value=e.revision,C.value=e.path,o.value=[],v.value=!1,S()}catch(e){u.error(e instanceof p?e.message:"Could not load these settings.")}finally{y.value=!1}}U(x),$(()=>m.name,x);async function V(){c.value=!0,o.value=[];try{const t=await T.singletons.save(m.name,d.value,b.value);b.value=t.revision,v.value=!1,S(),u.success("Settings saved."),q().refresh()}catch(t){t instanceof p&&t.status===409?(v.value=!0,u.error("Someone else saved these settings while you were editing them.")):t instanceof p&&t.issues.length>0?(o.value=t.issues,u.error(t.message,`${t.issues.length} field(s) need attention.`)):u.error(t instanceof p?t.message:"Could not save these settings.")}finally{c.value=!1}}return(t,e)=>r.value?(n(),a(_,{key:0},[N(K,{title:r.value.label,subtitle:C.value},{default:z(()=>[s("span",{class:j(["badge",h(g)?"border-accent bg-accent-soft text-accent":"text-success"])},[e[1]||(e[1]=s("span",{class:"h-1.5 w-1.5 rounded-full bg-current","aria-hidden":"true"},null,-1)),M(" "+l(h(g)?"Unsaved":"Saved"),1)],2),s("button",{type:"button",class:"btn-primary",disabled:c.value||!h(g),onClick:V},l(c.value?"Saving…":h(g)?"Save changes":"Saved"),9,O)]),_:1},8,["title","subtitle"]),s("div",P,[y.value?(n(),a("p",Q,"Loading…")):(n(),a(_,{key:1},[r.value.description?(n(),a("p",R,l(r.value.description),1)):w("",!0),v.value?(n(),a("div",W,[e[2]||(e[2]=s("p",{class:"text-sm font-medium text-warning"},"These settings changed while you were editing",-1)),e[3]||(e[3]=s("p",{class:"mt-1 text-xs text-muted"}," Nothing has been saved. Copy anything you need, then load the current version. ",-1)),s("button",{type:"button",class:"btn-secondary mt-2.5",onClick:x}," Discard mine and reload ")])):w("",!0),o.value.length?(n(),a("div",X,[s("p",Y,l(o.value.length)+" field"+l(o.value.length===1?"":"s")+" need attention ",1),s("ul",Z,[(n(!0),a(_,null,A(o.value,f=>(n(),a("li",{key:f.path},l(f.message),1))),128))])])):w("",!0),s("form",{novalidate:"",onSubmit:E(V,["prevent"])},[N(I,{modelValue:d.value,"onUpdate:modelValue":e[0]||(e[0]=f=>d.value=f),fields:r.value.fields,issues:o.value,disabled:c.value},null,8,["modelValue","fields","issues","disabled"]),e[4]||(e[4]=s("button",{type:"submit",class:"sr-only"},"Save",-1))],32)],64))])],64)):(n(),a("div",ee,' There are no settings called "'+l(k.name)+'". ',1))}});export{ie as default};
2
+ //# sourceMappingURL=SingletonView-BNJCcl7V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SingletonView-BNJCcl7V.js","sources":["../../src/views/SingletonView.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * Singleton editor — site configuration, navigation, theme.\n *\n * A singleton is one file in the repository, so this view is the entry editor\n * without the parts that need a slug: no rename, no delete, no list to go back\n * to. What it shares is `revision` — the version the form was opened against,\n * sent back with the save so a second editor cannot be overwritten in silence.\n */\n\nimport { computed, onMounted, ref, watch } from \"vue\";\n\nimport { withDefaults as fillDefaults, type FieldIssue } from \"@micacms/core\";\n\nimport { api, ApiError } from \"@/api\";\nimport FieldList from \"@/components/fields/FieldList.vue\";\nimport PageHeader from \"@/components/PageHeader.vue\";\nimport { useUnsavedChanges } from \"@/composables/useUnsavedChanges\";\nimport { useSchema } from \"@/stores/schema\";\nimport { useStaging } from \"@/stores/staging\";\nimport { useToast } from \"@/stores/toast\";\n\nconst props = defineProps<{ name: string }>();\n\nconst schema = useSchema();\nconst toast = useToast();\n\nconst definition = computed(() => schema.singleton(props.name));\n\nconst values = ref<Record<string, unknown>>({});\nconst issues = ref<FieldIssue[]>([]);\nconst revision = ref<string | null>(null);\nconst loading = ref(true);\nconst saving = ref(false);\nconst conflict = ref(false);\n\n/** Where these settings live, as the server reports it. */\nconst location = ref(\"\");\n\nconst { dirty, markClean } = useUnsavedChanges(values);\n\nasync function load(): Promise<void> {\n loading.value = true;\n try {\n const detail = await api.singletons.get(props.name);\n // Defaults fill in fields added to the model since the file was written.\n values.value = structuredClone(fillDefaults(definition.value?.fields ?? {}, detail.data));\n revision.value = detail.revision;\n location.value = detail.path;\n issues.value = [];\n conflict.value = false;\n markClean();\n } catch (error) {\n toast.error(error instanceof ApiError ? error.message : \"Could not load these settings.\");\n } finally {\n loading.value = false;\n }\n}\n\nonMounted(load);\nwatch(() => props.name, load);\n\nasync function save(): Promise<void> {\n saving.value = true;\n issues.value = [];\n\n try {\n const saved = await api.singletons.save(props.name, values.value, revision.value);\n revision.value = saved.revision;\n conflict.value = false;\n markClean();\n toast.success(\"Settings saved.\");\n void useStaging().refresh();\n } catch (error) {\n if (error instanceof ApiError && error.status === 409) {\n conflict.value = true;\n toast.error(\"Someone else saved these settings while you were editing them.\");\n } else if (error instanceof ApiError && error.issues.length > 0) {\n issues.value = error.issues;\n toast.error(error.message, `${error.issues.length} field(s) need attention.`);\n } else {\n toast.error(error instanceof ApiError ? error.message : \"Could not save these settings.\");\n }\n } finally {\n saving.value = false;\n }\n}\n</script>\n\n<template>\n <template v-if=\"definition\">\n <PageHeader :title=\"definition.label\" :subtitle=\"location\">\n <span :class=\"['badge', dirty ? 'border-accent bg-accent-soft text-accent' : 'text-success']\">\n <span class=\"h-1.5 w-1.5 rounded-full bg-current\" aria-hidden=\"true\" />\n {{ dirty ? \"Unsaved\" : \"Saved\" }}\n </span>\n <button type=\"button\" class=\"btn-primary\" :disabled=\"saving || !dirty\" @click=\"save\">\n {{ saving ? \"Saving…\" : dirty ? \"Save changes\" : \"Saved\" }}\n </button>\n </PageHeader>\n\n <div class=\"mx-auto max-w-3xl px-4 py-6 sm:px-6\">\n <p v-if=\"loading\" class=\"text-sm text-muted\">Loading…</p>\n\n <template v-else>\n <p v-if=\"definition.description\" class=\"mb-5 text-sm text-muted\">\n {{ definition.description }}\n </p>\n\n <div\n v-if=\"conflict\"\n role=\"alert\"\n class=\"mb-5 rounded-md border border-warning/15 bg-warning-soft p-4\"\n >\n <p class=\"text-sm font-medium text-warning\">These settings changed while you were editing</p>\n <p class=\"mt-1 text-xs text-muted\">\n Nothing has been saved. Copy anything you need, then load the current version.\n </p>\n <button type=\"button\" class=\"btn-secondary mt-2.5\" @click=\"load\">\n Discard mine and reload\n </button>\n </div>\n\n <div\n v-if=\"issues.length\"\n role=\"alert\"\n class=\"mb-5 rounded-md border border-danger/15 bg-danger-soft p-4\"\n >\n <p class=\"text-sm font-medium text-danger\">\n {{ issues.length }} field{{ issues.length === 1 ? \"\" : \"s\" }} need attention\n </p>\n <ul class=\"mt-1.5 space-y-0.5 text-xs text-danger\">\n <li v-for=\"issue in issues\" :key=\"issue.path\">{{ issue.message }}</li>\n </ul>\n </div>\n\n <form novalidate @submit.prevent=\"save\">\n <FieldList\n v-model=\"values\"\n :fields=\"definition.fields\"\n :issues=\"issues\"\n :disabled=\"saving\"\n />\n <button type=\"submit\" class=\"sr-only\">Save</button>\n </form>\n </template>\n </div>\n </template>\n\n <div v-else class=\"p-8 text-center text-sm text-muted\">\n There are no settings called \"{{ name }}\".\n </div>\n</template>\n"],"names":["props","__props","schema","useSchema","toast","useToast","definition","computed","values","ref","issues","revision","loading","saving","conflict","location","dirty","markClean","useUnsavedChanges","load","detail","api","fillDefaults","_a","error","ApiError","onMounted","watch","save","saved","useStaging","_createElementBlock","_Fragment","_createVNode","PageHeader","_createElementVNode","_unref","_createTextVNode","_toDisplayString","_hoisted_1","_hoisted_2","_hoisted_3","_openBlock","_hoisted_4","_hoisted_5","_cache","_hoisted_6","_hoisted_7","_hoisted_8","_renderList","issue","FieldList","$event","_hoisted_9"],"mappings":"s8BAsBA,MAAMA,EAAQC,EAERC,EAASC,EAAA,EACTC,EAAQC,EAAA,EAERC,EAAaC,EAAS,IAAML,EAAO,UAAUF,EAAM,IAAI,CAAC,EAExDQ,EAASC,EAA6B,EAAE,EACxCC,EAASD,EAAkB,EAAE,EAC7BE,EAAWF,EAAmB,IAAI,EAClCG,EAAUH,EAAI,EAAI,EAClBI,EAASJ,EAAI,EAAK,EAClBK,EAAWL,EAAI,EAAK,EAGpBM,EAAWN,EAAI,EAAE,EAEjB,CAAE,MAAAO,EAAO,UAAAC,GAAcC,EAAkBV,CAAM,EAErD,eAAeW,GAAsB,OACnCP,EAAQ,MAAQ,GAChB,GAAI,CACF,MAAMQ,EAAS,MAAMC,EAAI,WAAW,IAAIrB,EAAM,IAAI,EAElDQ,EAAO,MAAQ,gBAAgBc,IAAaC,EAAAjB,EAAW,QAAX,YAAAiB,EAAkB,SAAU,CAAA,EAAIH,EAAO,IAAI,CAAC,EACxFT,EAAS,MAAQS,EAAO,SACxBL,EAAS,MAAQK,EAAO,KACxBV,EAAO,MAAQ,CAAA,EACfI,EAAS,MAAQ,GACjBG,EAAA,CACF,OAASO,EAAO,CACdpB,EAAM,MAAMoB,aAAiBC,EAAWD,EAAM,QAAU,gCAAgC,CAC1F,QAAA,CACEZ,EAAQ,MAAQ,EAClB,CACF,CAEAc,EAAUP,CAAI,EACdQ,EAAM,IAAM3B,EAAM,KAAMmB,CAAI,EAE5B,eAAeS,GAAsB,CACnCf,EAAO,MAAQ,GACfH,EAAO,MAAQ,CAAA,EAEf,GAAI,CACF,MAAMmB,EAAQ,MAAMR,EAAI,WAAW,KAAKrB,EAAM,KAAMQ,EAAO,MAAOG,EAAS,KAAK,EAChFA,EAAS,MAAQkB,EAAM,SACvBf,EAAS,MAAQ,GACjBG,EAAA,EACAb,EAAM,QAAQ,iBAAiB,EAC1B0B,EAAA,EAAa,QAAA,CACpB,OAASN,EAAO,CACVA,aAAiBC,GAAYD,EAAM,SAAW,KAChDV,EAAS,MAAQ,GACjBV,EAAM,MAAM,gEAAgE,GACnEoB,aAAiBC,GAAYD,EAAM,OAAO,OAAS,GAC5Dd,EAAO,MAAQc,EAAM,OACrBpB,EAAM,MAAMoB,EAAM,QAAS,GAAGA,EAAM,OAAO,MAAM,2BAA2B,GAE5EpB,EAAM,MAAMoB,aAAiBC,EAAWD,EAAM,QAAU,gCAAgC,CAE5F,QAAA,CACEX,EAAO,MAAQ,EACjB,CACF,cAIkBP,EAAA,WAAhByB,EAyDWC,EAAA,CAAA,IAAA,GAAA,CAxDTC,EAQaC,EAAA,CARA,MAAO5B,EAAA,MAAW,MAAQ,SAAUS,EAAA,KAAA,aAC/C,IAGO,CAHPoB,EAGO,OAAA,CAHA,iBAAiBC,EAAApB,CAAA,EAAK,2CAAA,cAAA,CAAA,CAAA,eAC3BmB,EAAuE,OAAA,CAAjE,MAAM,sCAAsC,cAAY,MAAA,YAASE,EAAA,MACpED,EAAApB,CAAA,EAAK,UAAA,OAAA,EAAA,CAAA,CAAA,KAEVmB,EAES,SAAA,CAFD,KAAK,SAAS,MAAM,cAAe,SAAUtB,EAAA,OAAM,CAAKuB,EAAApB,CAAA,EAAQ,QAAOY,CAAA,EAC1EU,EAAAzB,EAAA,gBAAqBuB,EAAApB,CAAA,EAAK,eAAA,OAAA,EAAA,EAAAuB,CAAA,CAAA,gCAIjCJ,EA6CM,MA7CNK,EA6CM,CA5CK5B,EAAA,WAATmB,EAAyD,IAAzDU,EAA6C,UAAQ,QAErDV,EAyCWC,EAAA,CAAA,IAAA,GAAA,CAxCA1B,EAAA,MAAW,aAApBoC,EAAA,EAAAX,EAEI,IAFJY,EAEIL,EADChC,EAAA,MAAW,WAAW,EAAA,CAAA,YAInBQ,EAAA,OADR4B,EAAA,EAAAX,EAYM,MAZNa,EAYM,CAPJC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAV,EAA6F,IAAA,CAA1F,MAAM,kCAAA,EAAmC,gDAA6C,EAAA,GACzFU,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAV,EAEI,IAAA,CAFD,MAAM,yBAAA,EAA0B,mFAEnC,EAAA,GACAA,EAES,SAAA,CAFD,KAAK,SAAS,MAAM,uBAAwB,QAAOhB,CAAA,EAAM,2BAEjE,CAAA,aAIMT,EAAA,MAAO,QADfgC,IAAAX,EAWM,MAXNe,EAWM,CANJX,EAEI,IAFJY,EAEIT,EADC5B,EAAA,MAAO,MAAM,EAAG,SAAM4B,EAAG5B,EAAA,MAAO,mBAA0B,mBAC/D,CAAA,EACAyB,EAEK,KAFLa,EAEK,QADHjB,EAAsEC,EAAA,KAAAiB,EAAlDvC,EAAA,MAATwC,QAAXnB,EAAsE,KAAA,CAAzC,IAAKmB,EAAM,IAAA,EAASZ,EAAAY,EAAM,OAAO,EAAA,CAAA,wBAIlEf,EAQO,OAAA,CARD,WAAA,GAAY,WAAgBP,EAAI,CAAA,SAAA,CAAA,CAAA,GACpCK,EAKEkB,EAAA,YAJS3C,EAAA,2CAAAA,EAAM,MAAA4C,GACd,OAAQ9C,EAAA,MAAW,OACnB,OAAQI,EAAA,MACR,SAAUG,EAAA,KAAA,kEAEbsB,EAAmD,SAAA,CAA3C,KAAK,SAAS,MAAM,SAAA,EAAU,OAAI,EAAA,EAAA,qBAMlDO,EAAA,EAAAX,EAEM,MAFNsB,GAAuD,kCACvBf,EAAGrC,EAAA,IAAI,EAAG,MAC1C,CAAA"}
@@ -0,0 +1,3 @@
1
+ import{d as L,o as M,c as a,j as p,w as b,a as t,F as r,t as o,l as m,k as y,b as i,r as w,i as U,A as B,n as E,h as d,G as I,e as v,g as k,p as N,Y as O}from"./index-Colfqb-9.js";import{_ as V}from"./PageHeader.vue_vue_type_script_setup_true_lang-B-fBJAjn.js";import{a as $,b as D,f as x}from"./format-Cpnr2As6.js";import{A as F}from"./arrow-right-DJTAYrz5.js";const j=["disabled"],z=["disabled"],H={class:"mx-auto max-w-5xl space-y-6 px-4 py-5 pb-12 sm:px-6"},q={key:0,class:"text-sm text-muted"},P={"aria-labelledby":"glance-heading"},Y={class:"grid grid-cols-2 gap-3 lg:grid-cols-4"},G={class:"card p-4"},K={class:"mt-1 text-2xl font-semibold tabular-nums"},W={class:"mt-1 text-xs text-muted"},Z={class:"card p-4"},J={class:"mt-1 text-2xl font-semibold tabular-nums"},Q={class:"mt-1 text-xs text-muted"},X=["datetime"],tt={class:"card p-4"},et={class:"mt-1 text-2xl font-semibold tabular-nums"},st={class:"mt-1 text-xs text-muted"},ot={class:"card p-4"},lt={class:"mt-1 text-2xl font-semibold tabular-nums"},nt={class:"mt-1 text-xs text-muted"},at={class:"card p-4","aria-labelledby":"model-heading"},dt={class:"spec mt-3"},it={class:"tabular-nums"},rt={class:"mt-2 space-y-1.5"},ut={class:"w-28 shrink-0 truncate"},mt={class:"h-1.5 min-w-0 flex-1 rounded-full bg-canvas","aria-hidden":"true"},ct={class:"w-8 shrink-0 text-right text-xs tabular-nums text-muted"},pt={class:"card overflow-hidden","aria-labelledby":"collections-heading"},yt={class:"overflow-x-auto"},ht={class:"w-full text-sm"},bt={class:"divide-y divide-line"},vt={class:"px-4 py-2.5"},xt={class:"mono block text-muted"},ft={class:"px-4 py-2.5 text-right tabular-nums"},gt={class:"px-4 py-2.5 text-right tabular-nums"},_t={key:0,class:"block text-xs text-muted"},wt={class:"mono hidden px-4 py-2.5 text-muted sm:table-cell"},kt={class:"hidden px-4 py-2.5 text-xs text-muted sm:table-cell"},$t={key:0,class:"card p-4","aria-labelledby":"singletons-heading"},Ct={class:"spec mt-3"},Rt={class:"tabular-nums"},St={key:1,class:"card p-4","aria-labelledby":"relations-heading"},At={class:"mt-3 space-y-1.5 text-sm"},Tt={class:"font-medium"},Lt={class:"mono text-muted"},Mt={key:0,class:"badge bg-accent-soft text-accent"},Ut={class:"card p-4","aria-labelledby":"repository-heading"},Bt={class:"spec mt-3"},Et={class:"mono"},It={class:"tabular-nums"},Nt={class:"tabular-nums"},Ot={key:2,class:"card p-4","aria-labelledby":"database-heading"},Vt={class:"spec mt-3"},Dt={class:"mono"},Ft={class:"tabular-nums"},jt={class:"card p-4","aria-labelledby":"deployment-heading"},zt={key:0,class:"mt-3 rounded-md border border-warning/15 bg-warning-soft px-4 py-3 text-xs text-warning"},Ht={class:"spec mt-3"},qt={class:"mono"},Pt={class:"mono"},Yt={class:"mono"},Gt={key:0},Kt={class:"mono"},Wt={class:"tabular-nums"},Zt={class:"tabular-nums"},Jt={class:"mono"},Qt={key:1},Xt={class:"mono"},te={key:2},ee={class:"tabular-nums"},se={key:3},oe={class:"mono"},le=L({__name:"SystemView",setup(ne){const h=E(),s=w(null),c=w(!0);async function f(){c.value=!0;try{s.value=await U.system()}catch(l){h.error(l instanceof B?l.message:"Could not load the system information.")}finally{c.value=!1}}M(f);const g={url:"URL"};function C(l){if(g[l])return g[l];const e=l.replace(/([A-Z])/g," $1").toLowerCase();return e.charAt(0).toUpperCase()+e.slice(1)}const R=k(()=>{var l;return Math.max(1,...(((l=s.value)==null?void 0:l.schema.kinds)??[]).map(e=>e.count))}),_=k(()=>{var e,u;const l=new Map;for(const n of((e=s.value)==null?void 0:e.schema.collections)??[])l.set(`collection:${n.name}`,n.label);for(const n of((u=s.value)==null?void 0:u.schema.singletons)??[])l.set(`singleton:${n.name}`,n.label);return l});function S(l){return _.value.get(`collection:${l}`)??l}function A(){const l=s.value;return l?[`Mica ${l.cms.version} (${l.cms.environment})`,`Node ${l.cms.node} on ${l.cms.platform}, up ${$(l.cms.uptimeSeconds)}`,`Schema — ${l.schema.totals.collections} collections, ${l.schema.totals.singletons} singletons, ${l.schema.totals.total} fields`,`Repository ${l.repository.origin}`,`Repository holds ${l.repository.entries} entries and ${l.repository.media.files} media files (${l.repository.media.readable})`,l.database?`Database: migration ${l.database.version}, ${l.database.bytes===null?"size unknown":x(l.database.bytes)}`:"Database: none — the local editor keeps no state",`Site ${l.deployment.site}`,`Base URL ${l.deployment.baseUrl}`,`Content model ${l.deployment.schemaOrigin}`,`Content root ${l.deployment.contentRoot}`,`Authentication ${l.deployment.auth}`,`Admission ${l.deployment.admission??"none"}`].join(`
2
+ `):""}async function T(){try{await navigator.clipboard.writeText(A()),h.success("Report copied to the clipboard.")}catch{h.error("Could not copy. Select the values you need instead.")}}return(l,e)=>{const u=N("RouterLink");return d(),a(r,null,[p(V,{title:"System",subtitle:s.value?`Mica ${s.value.cms.version} · ${s.value.cms.environment}`:null},{default:b(()=>[t("button",{type:"button",class:"btn-ghost",disabled:c.value,onClick:f},"Refresh",8,j),t("button",{type:"button",class:"btn-secondary",disabled:!s.value,onClick:T}," Copy report ",8,z)]),_:1},8,["subtitle"]),t("div",H,[c.value?(d(),a("p",q,"Loading…")):s.value?(d(),a(r,{key:1},[t("section",P,[e[4]||(e[4]=t("h2",{id:"glance-heading",class:"sr-only"},"At a glance",-1)),t("dl",Y,[t("div",G,[e[0]||(e[0]=t("dt",{class:"text-sm text-muted"},"Version",-1)),t("dd",K,o(s.value.cms.version),1),t("dd",W,o(s.value.cms.environment),1)]),t("div",Z,[e[1]||(e[1]=t("dt",{class:"text-sm text-muted"},"Uptime",-1)),t("dd",J,o(m($)(s.value.cms.uptimeSeconds)),1),t("dd",Q,[t("time",{datetime:s.value.cms.startedAt},o(m(D)(s.value.cms.startedAt)),9,X)])]),t("div",tt,[e[2]||(e[2]=t("dt",{class:"text-sm text-muted"},"Content model",-1)),t("dd",et,o(s.value.schema.totals.total),1),t("dd",st," fields in "+o(s.value.schema.totals.collections)+" collections, "+o(s.value.schema.totals.singletons)+" singletons ",1)]),t("div",ot,[e[3]||(e[3]=t("dt",{class:"text-sm text-muted"},"In the repository",-1)),t("dd",lt,o(s.value.repository.entries),1),t("dd",nt," entries · "+o(s.value.repository.media.files)+" media files ",1)])])]),t("section",at,[e[6]||(e[6]=t("h2",{id:"model-heading",class:"text-sm font-semibold"},"Content model",-1)),e[7]||(e[7]=t("p",{class:"mt-1 text-xs text-muted"}," The schema this server was handed at startup. The same file describes the model to the Astro build, so the editor and the website cannot disagree about it. ",-1)),t("dl",dt,[t("div",null,[e[5]||(e[5]=t("dt",null,"Required fields",-1)),t("dd",it,o(s.value.schema.totals.required)+" of "+o(s.value.schema.totals.total),1)])]),e[8]||(e[8]=t("h3",{class:"mt-5 text-xs font-semibold uppercase tracking-wider text-muted"},"Field types",-1)),t("ul",rt,[(d(!0),a(r,null,y(s.value.schema.kinds,n=>(d(),a("li",{key:n.kind,class:"flex items-center gap-3 text-sm"},[t("span",ut,o(C(n.kind)),1),t("span",mt,[t("span",{class:"block h-full rounded-full bg-accent/60",style:I({width:`${n.count/R.value*100}%`})},null,4)]),t("span",ct,o(n.count),1)]))),128))])]),t("section",pt,[e[11]||(e[11]=t("h2",{id:"collections-heading",class:"border-b border-line px-4 py-3 text-sm font-semibold"}," Collections ",-1)),t("div",yt,[t("table",ht,[e[9]||(e[9]=t("caption",{class:"sr-only"},"Collections in the content model, with their entry counts",-1)),e[10]||(e[10]=t("thead",null,[t("tr",{class:"border-b border-line text-left text-xs text-muted"},[t("th",{scope:"col",class:"px-4 py-2 font-medium"},"Collection"),t("th",{scope:"col",class:"px-4 py-2 text-right font-medium"},"Entries"),t("th",{scope:"col",class:"px-4 py-2 text-right font-medium"},"Fields"),t("th",{scope:"col",class:"hidden px-4 py-2 font-medium sm:table-cell"},"Title / slug"),t("th",{scope:"col",class:"hidden px-4 py-2 font-medium sm:table-cell"},"Ordering")])],-1)),t("tbody",bt,[(d(!0),a(r,null,y(s.value.schema.collections,n=>(d(),a("tr",{key:n.name},[t("td",vt,[p(u,{to:{name:"collection",params:{collection:n.name}},class:"font-medium hover:text-accent"},{default:b(()=>[v(o(n.label),1)]),_:2},1032,["to"]),t("span",xt,o(n.name),1)]),t("td",ft,o(n.entries),1),t("td",gt,[v(o(n.fields.top)+" ",1),n.fields.total>n.fields.top?(d(),a("span",_t,o(n.fields.total)+" with nested ",1)):i("",!0)]),t("td",wt,o(n.titleField??"—")+" / "+o(n.slugField??"—"),1),t("td",kt,o(n.sortable?"Manual":"Automatic"),1)]))),128))])])])]),s.value.schema.singletons.length?(d(),a("section",$t,[e[12]||(e[12]=t("h2",{id:"singletons-heading",class:"text-sm font-semibold"},"Singletons",-1)),t("dl",Ct,[(d(!0),a(r,null,y(s.value.schema.singletons,n=>(d(),a("div",{key:n.name},[t("dt",null,[p(u,{to:{name:"singleton",params:{name:n.name}},class:"hover:text-accent"},{default:b(()=>[v(o(n.label),1)]),_:2},1032,["to"])]),t("dd",Rt,o(n.fields.top)+" field"+o(n.fields.top===1?"":"s"),1)]))),128))])])):i("",!0),s.value.schema.relations.length?(d(),a("section",St,[e[13]||(e[13]=t("h2",{id:"relations-heading",class:"text-sm font-semibold"},"Relations",-1)),e[14]||(e[14]=t("p",{class:"mt-1 text-xs text-muted"}," Deleting an entry that is referenced here is warned about before it happens. ",-1)),t("ul",At,[(d(!0),a(r,null,y(s.value.schema.relations,n=>(d(),a("li",{key:`${n.fromType}:${n.from}.${n.path}`,class:"flex flex-wrap items-baseline gap-x-2"},[t("span",Tt,o(_.value.get(`${n.fromType}:${n.from}`)??n.from),1),t("span",Lt,o(n.path),1),p(m(F),{size:14,class:"text-muted","aria-hidden":"true"}),t("span",null,o(S(n.to)),1),n.multiple?(d(),a("span",Mt,"many")):i("",!0)]))),128))])])):i("",!0),t("section",Ut,[e[18]||(e[18]=t("h2",{id:"repository-heading",class:"text-sm font-semibold"},"Content repository",-1)),e[19]||(e[19]=t("p",{class:"mt-1 text-xs text-muted"}," The source of truth for the website. Everything here is a file under version control, so the site can be rebuilt from it without this server. ",-1)),t("dl",Bt,[t("div",null,[e[15]||(e[15]=t("dt",null,"Origin",-1)),t("dd",Et,o(s.value.repository.origin),1)]),t("div",null,[e[16]||(e[16]=t("dt",null,"Entries",-1)),t("dd",It,o(s.value.repository.entries),1)]),t("div",null,[e[17]||(e[17]=t("dt",null,"Media",-1)),t("dd",Nt,o(s.value.repository.media.files)+" files · "+o(s.value.repository.media.readable),1)])])]),s.value.database?(d(),a("section",Ot,[e[22]||(e[22]=t("h2",{id:"database-heading",class:"text-sm font-semibold"},"Operational database",-1)),e[23]||(e[23]=t("p",{class:"mt-1 text-xs text-muted"}," The pending draft where saves are staged — there are no accounts or sessions, and nothing published is only in here. ",-1)),t("dl",Vt,[t("div",null,[e[20]||(e[20]=t("dt",null,"Path",-1)),t("dd",Dt,o(s.value.database.path),1)]),t("div",null,[e[21]||(e[21]=t("dt",null,"Size",-1)),t("dd",Ft,o(s.value.database.bytes===null?"in memory":m(x)(s.value.database.bytes))+" · migration "+o(s.value.database.version),1)])])])):i("",!0),t("section",jt,[e[38]||(e[38]=t("h2",{id:"deployment-heading",class:"text-sm font-semibold"},"Deployment",-1)),e[39]||(e[39]=t("p",{class:"mt-1 text-xs text-muted"}," How this Mica is configured. Secrets are never shown — only whether they are set. ",-1)),s.value.deployment.generatedSecrets.length?(d(),a("p",zt," Running with generated development secrets ("+o(s.value.deployment.generatedSecrets.join(", "))+"). Everyone is signed out on restart — set these before this deployment is used for real. ",1)):i("",!0),t("dl",Ht,[t("div",null,[e[24]||(e[24]=t("dt",null,"Site",-1)),t("dd",qt,o(s.value.deployment.site),1)]),t("div",null,[e[25]||(e[25]=t("dt",null,"Base URL",-1)),t("dd",Pt,o(s.value.deployment.baseUrl),1)]),t("div",null,[e[26]||(e[26]=t("dt",null,"Content model",-1)),t("dd",Yt,o(s.value.deployment.schemaOrigin),1)]),t("div",null,[e[27]||(e[27]=t("dt",null,"Repository access",-1)),t("dd",null,o(s.value.deployment.repositoryMode),1)]),s.value.deployment.contentRoot?(d(),a("div",Gt,[e[28]||(e[28]=t("dt",null,"Content root",-1)),t("dd",Kt,o(s.value.deployment.contentRoot),1)])):i("",!0),t("div",null,[e[29]||(e[29]=t("dt",null,"Runtime",-1)),t("dd",null,o(s.value.cms.node)+" on "+o(s.value.cms.platform),1)]),t("div",null,[e[30]||(e[30]=t("dt",null,"Memory in use",-1)),t("dd",Wt,o(m(x)(s.value.deployment.memoryBytes)),1)]),t("div",null,[e[31]||(e[31]=t("dt",null,"Upload limit",-1)),t("dd",Zt,o(s.value.deployment.maxUploadReadable),1)]),t("div",null,[e[32]||(e[32]=t("dt",null,"Authentication",-1)),t("dd",Jt,o(s.value.deployment.auth),1)]),s.value.deployment.admission?(d(),a("div",Qt,[e[33]||(e[33]=t("dt",null,"Who may edit",-1)),t("dd",Xt,o(s.value.deployment.admission),1)])):i("",!0),s.value.deployment.sessionTtlHours!==null?(d(),a("div",te,[e[34]||(e[34]=t("dt",null,"Session lifetime",-1)),t("dd",ee,o(s.value.deployment.sessionTtlHours)+" h, idle out after "+o(s.value.deployment.sessionIdleHours)+" h ",1)])):i("",!0),t("div",null,[e[35]||(e[35]=t("dt",null,"Trust proxy headers",-1)),t("dd",null,o(s.value.deployment.trustProxy?"Yes":"No"),1)]),s.value.deployment.adminOrigins.length?(d(),a("div",se,[e[36]||(e[36]=t("dt",null,"Extra admin origins",-1)),t("dd",oe,o(s.value.deployment.adminOrigins.join(", ")),1)])):i("",!0),t("div",null,[e[37]||(e[37]=t("dt",null,"Log level",-1)),t("dd",null,o(s.value.deployment.logLevel),1)])])])],64)):i("",!0)])],64)}}}),ue=O(le,[["__scopeId","data-v-524c55f4"]]);export{ue as default};
3
+ //# sourceMappingURL=SystemView-CB8CT0Pa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemView-CB8CT0Pa.js","sources":["../../src/views/SystemView.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * System information.\n *\n * What is running, what content model it was handed, and how much content\n * there is — the questions that otherwise need shell access to the container.\n * Read-only except for \"Copy report\", which puts the whole thing on the\n * clipboard in the shape a bug report wants.\n *\n * Nothing here is per customer: the model section is generated from whatever\n * model the server was given, exactly like the rest of the admin.\n */\n\nimport { computed, onMounted, ref } from \"vue\";\nimport { ArrowRight } from \"@lucide/vue\";\n\nimport { api, ApiError, type SystemInfo } from \"@/api\";\nimport PageHeader from \"@/components/PageHeader.vue\";\nimport { absoluteTime, formatBytes, formatDuration } from \"@/lib/format\";\nimport { useToast } from \"@/stores/toast\";\n\nconst toast = useToast();\n\nconst info = ref<SystemInfo | null>(null);\nconst loading = ref(true);\n\nasync function load(): Promise<void> {\n loading.value = true;\n try {\n info.value = await api.system();\n } catch (error) {\n toast.error(error instanceof ApiError ? error.message : \"Could not load the system information.\");\n } finally {\n loading.value = false;\n }\n}\n\nonMounted(load);\n\n/**\n * `richText` → \"Rich text\". Derived rather than a table, so a field kind added\n * to the model reads correctly here without a second edit — the initialisms are\n * the only thing splitting on case cannot get right.\n */\nconst INITIALISMS: Record<string, string> = { url: \"URL\" };\n\nfunction kindLabel(kind: string): string {\n if (INITIALISMS[kind]) return INITIALISMS[kind];\n const words = kind.replace(/([A-Z])/g, \" $1\").toLowerCase();\n return words.charAt(0).toUpperCase() + words.slice(1);\n}\n\nconst busiestKind = computed(() =>\n Math.max(1, ...(info.value?.schema.kinds ?? []).map((item) => item.count)),\n);\n\nconst labels = computed(() => {\n const map = new Map<string, string>();\n for (const item of info.value?.schema.collections ?? []) map.set(`collection:${item.name}`, item.label);\n for (const item of info.value?.schema.singletons ?? []) {\n map.set(`singleton:${item.name}`, item.label);\n }\n return map;\n});\n\nfunction collectionLabel(name: string): string {\n return labels.value.get(`collection:${name}`) ?? name;\n}\n\n/** The report a support request should carry, as plain text. */\nfunction report(): string {\n const data = info.value;\n if (!data) return \"\";\n\n const lines = [\n `Mica ${data.cms.version} (${data.cms.environment})`,\n `Node ${data.cms.node} on ${data.cms.platform}, up ${formatDuration(data.cms.uptimeSeconds)}`,\n `Schema — ${data.schema.totals.collections} collections, ` +\n `${data.schema.totals.singletons} singletons, ${data.schema.totals.total} fields`,\n `Repository ${data.repository.origin}`,\n `Repository holds ${data.repository.entries} entries and ` +\n `${data.repository.media.files} media files (${data.repository.media.readable})`,\n data.database\n ? `Database: migration ${data.database.version}, ` +\n `${data.database.bytes === null ? \"size unknown\" : formatBytes(data.database.bytes)}`\n : \"Database: none — the local editor keeps no state\",\n `Site ${data.deployment.site}`,\n `Base URL ${data.deployment.baseUrl}`,\n `Content model ${data.deployment.schemaOrigin}`,\n `Content root ${data.deployment.contentRoot}`,\n `Authentication ${data.deployment.auth}`,\n `Admission ${data.deployment.admission ?? \"none\"}`,\n ];\n\n return lines.join(\"\\n\");\n}\n\nasync function copyReport(): Promise<void> {\n try {\n // Absent on an insecure origin, which a self-hosted CMS may well be.\n await navigator.clipboard.writeText(report());\n toast.success(\"Report copied to the clipboard.\");\n } catch {\n toast.error(\"Could not copy. Select the values you need instead.\");\n }\n}\n</script>\n\n<template>\n <PageHeader\n title=\"System\"\n :subtitle=\"info ? `Mica ${info.cms.version} · ${info.cms.environment}` : null\"\n >\n <button type=\"button\" class=\"btn-ghost\" :disabled=\"loading\" @click=\"load\">Refresh</button>\n <button type=\"button\" class=\"btn-secondary\" :disabled=\"!info\" @click=\"copyReport\">\n Copy report\n </button>\n </PageHeader>\n\n <div class=\"mx-auto max-w-5xl space-y-6 px-4 py-5 pb-12 sm:px-6\">\n <p v-if=\"loading\" class=\"text-sm text-muted\">Loading…</p>\n\n <template v-else-if=\"info\">\n <!-- ------------------------------------------------------ at a glance -->\n\n <section aria-labelledby=\"glance-heading\">\n <h2 id=\"glance-heading\" class=\"sr-only\">At a glance</h2>\n\n <dl class=\"grid grid-cols-2 gap-3 lg:grid-cols-4\">\n <div class=\"card p-4\">\n <dt class=\"text-sm text-muted\">Version</dt>\n <dd class=\"mt-1 text-2xl font-semibold tabular-nums\">{{ info.cms.version }}</dd>\n <dd class=\"mt-1 text-xs text-muted\">{{ info.cms.environment }}</dd>\n </div>\n\n <div class=\"card p-4\">\n <dt class=\"text-sm text-muted\">Uptime</dt>\n <dd class=\"mt-1 text-2xl font-semibold tabular-nums\">\n {{ formatDuration(info.cms.uptimeSeconds) }}\n </dd>\n <dd class=\"mt-1 text-xs text-muted\">\n <!-- Absolute, not relative: \"up 1 min, since 1 minute ago\" says\n the same thing twice, and the start time is the useful half. -->\n <time :datetime=\"info.cms.startedAt\">{{ absoluteTime(info.cms.startedAt) }}</time>\n </dd>\n </div>\n\n <div class=\"card p-4\">\n <dt class=\"text-sm text-muted\">Content model</dt>\n <dd class=\"mt-1 text-2xl font-semibold tabular-nums\">\n {{ info.schema.totals.total }}\n </dd>\n <dd class=\"mt-1 text-xs text-muted\">\n fields in {{ info.schema.totals.collections }} collections,\n {{ info.schema.totals.singletons }} singletons\n </dd>\n </div>\n\n <div class=\"card p-4\">\n <dt class=\"text-sm text-muted\">In the repository</dt>\n <dd class=\"mt-1 text-2xl font-semibold tabular-nums\">\n {{ info.repository.entries }}\n </dd>\n <dd class=\"mt-1 text-xs text-muted\">\n entries · {{ info.repository.media.files }} media files\n </dd>\n </div>\n </dl>\n </section>\n\n <!-- --------------------------------------------------- content model -->\n\n <section class=\"card p-4\" aria-labelledby=\"model-heading\">\n <h2 id=\"model-heading\" class=\"text-sm font-semibold\">Content model</h2>\n <p class=\"mt-1 text-xs text-muted\">\n The schema this server was handed at startup. The same file describes the model to the\n Astro build, so the editor and the website cannot disagree about it.\n </p>\n\n <dl class=\"spec mt-3\">\n <div>\n <dt>Required fields</dt>\n <dd class=\"tabular-nums\">\n {{ info.schema.totals.required }} of {{ info.schema.totals.total }}\n </dd>\n </div>\n </dl>\n\n <h3 class=\"mt-5 text-xs font-semibold uppercase tracking-wider text-muted\">Field types</h3>\n <ul class=\"mt-2 space-y-1.5\">\n <li v-for=\"item in info.schema.kinds\" :key=\"item.kind\" class=\"flex items-center gap-3 text-sm\">\n <span class=\"w-28 shrink-0 truncate\">{{ kindLabel(item.kind) }}</span>\n <span class=\"h-1.5 min-w-0 flex-1 rounded-full bg-canvas\" aria-hidden=\"true\">\n <span\n class=\"block h-full rounded-full bg-accent/60\"\n :style=\"{ width: `${(item.count / busiestKind) * 100}%` }\"\n />\n </span>\n <span class=\"w-8 shrink-0 text-right text-xs tabular-nums text-muted\">\n {{ item.count }}\n </span>\n </li>\n </ul>\n </section>\n\n <!-- ---------------------------------------------------- collections -->\n\n <section class=\"card overflow-hidden\" aria-labelledby=\"collections-heading\">\n <h2 id=\"collections-heading\" class=\"border-b border-line px-4 py-3 text-sm font-semibold\">\n Collections\n </h2>\n\n <div class=\"overflow-x-auto\">\n <table class=\"w-full text-sm\">\n <caption class=\"sr-only\">Collections in the content model, with their entry counts</caption>\n <thead>\n <tr class=\"border-b border-line text-left text-xs text-muted\">\n <th scope=\"col\" class=\"px-4 py-2 font-medium\">Collection</th>\n <th scope=\"col\" class=\"px-4 py-2 text-right font-medium\">Entries</th>\n <th scope=\"col\" class=\"px-4 py-2 text-right font-medium\">Fields</th>\n <th scope=\"col\" class=\"hidden px-4 py-2 font-medium sm:table-cell\">Title / slug</th>\n <th scope=\"col\" class=\"hidden px-4 py-2 font-medium sm:table-cell\">Ordering</th>\n </tr>\n </thead>\n\n <tbody class=\"divide-y divide-line\">\n <tr v-for=\"item in info.schema.collections\" :key=\"item.name\">\n <td class=\"px-4 py-2.5\">\n <RouterLink\n :to=\"{ name: 'collection', params: { collection: item.name } }\"\n class=\"font-medium hover:text-accent\"\n >\n {{ item.label }}\n </RouterLink>\n <span class=\"mono block text-muted\">{{ item.name }}</span>\n </td>\n\n <td class=\"px-4 py-2.5 text-right tabular-nums\">{{ item.entries }}</td>\n\n <td class=\"px-4 py-2.5 text-right tabular-nums\">\n {{ item.fields.top }}\n <span v-if=\"item.fields.total > item.fields.top\" class=\"block text-xs text-muted\">\n {{ item.fields.total }} with nested\n </span>\n </td>\n\n <td class=\"mono hidden px-4 py-2.5 text-muted sm:table-cell\">\n {{ item.titleField ?? \"—\" }} / {{ item.slugField ?? \"—\" }}\n </td>\n\n <td class=\"hidden px-4 py-2.5 text-xs text-muted sm:table-cell\">\n {{ item.sortable ? \"Manual\" : \"Automatic\" }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n <!-- ----------------------------------------------------- singletons -->\n\n <section\n v-if=\"info.schema.singletons.length\"\n class=\"card p-4\"\n aria-labelledby=\"singletons-heading\"\n >\n <h2 id=\"singletons-heading\" class=\"text-sm font-semibold\">Singletons</h2>\n\n <dl class=\"spec mt-3\">\n <div v-for=\"item in info.schema.singletons\" :key=\"item.name\">\n <dt>\n <RouterLink\n :to=\"{ name: 'singleton', params: { name: item.name } }\"\n class=\"hover:text-accent\"\n >\n {{ item.label }}\n </RouterLink>\n </dt>\n <dd class=\"tabular-nums\">\n {{ item.fields.top }} field{{ item.fields.top === 1 ? \"\" : \"s\" }}\n </dd>\n </div>\n </dl>\n </section>\n\n <!-- ------------------------------------------------------ relations -->\n\n <section v-if=\"info.schema.relations.length\" class=\"card p-4\" aria-labelledby=\"relations-heading\">\n <h2 id=\"relations-heading\" class=\"text-sm font-semibold\">Relations</h2>\n <p class=\"mt-1 text-xs text-muted\">\n Deleting an entry that is referenced here is warned about before it happens.\n </p>\n\n <ul class=\"mt-3 space-y-1.5 text-sm\">\n <li\n v-for=\"edge in info.schema.relations\"\n :key=\"`${edge.fromType}:${edge.from}.${edge.path}`\"\n class=\"flex flex-wrap items-baseline gap-x-2\"\n >\n <span class=\"font-medium\">\n {{ labels.get(`${edge.fromType}:${edge.from}`) ?? edge.from }}\n </span>\n <span class=\"mono text-muted\">{{ edge.path }}</span>\n <ArrowRight :size=\"14\" class=\"text-muted\" aria-hidden=\"true\" />\n <span>{{ collectionLabel(edge.to) }}</span>\n <span v-if=\"edge.multiple\" class=\"badge bg-accent-soft text-accent\">many</span>\n </li>\n </ul>\n </section>\n\n <!-- ----------------------------------------------------- repository -->\n\n <!--\n Two sections rather than one \"Storage\", because they are not the same\n kind of thing and should not be backed up the same way. The repository\n is the website. The database holds only work that is saved and not\n yet published.\n -->\n\n <section class=\"card p-4\" aria-labelledby=\"repository-heading\">\n <h2 id=\"repository-heading\" class=\"text-sm font-semibold\">Content repository</h2>\n <p class=\"mt-1 text-xs text-muted\">\n The source of truth for the website. Everything here is a file under version control, so\n the site can be rebuilt from it without this server.\n </p>\n\n <dl class=\"spec mt-3\">\n <div>\n <dt>Origin</dt>\n <dd class=\"mono\">{{ info.repository.origin }}</dd>\n </div>\n <div>\n <dt>Entries</dt>\n <dd class=\"tabular-nums\">{{ info.repository.entries }}</dd>\n </div>\n <div>\n <dt>Media</dt>\n <dd class=\"tabular-nums\">\n {{ info.repository.media.files }} files · {{ info.repository.media.readable }}\n </dd>\n </div>\n </dl>\n </section>\n\n <!-- ------------------------------------------------------- database -->\n\n <section v-if=\"info.database\" class=\"card p-4\" aria-labelledby=\"database-heading\">\n <h2 id=\"database-heading\" class=\"text-sm font-semibold\">Operational database</h2>\n <p class=\"mt-1 text-xs text-muted\">\n The pending draft where saves are staged — there are no accounts or\n sessions, and nothing published is only in here.\n </p>\n\n <dl class=\"spec mt-3\">\n <div>\n <dt>Path</dt>\n <dd class=\"mono\">{{ info.database.path }}</dd>\n </div>\n <div>\n <dt>Size</dt>\n <dd class=\"tabular-nums\">\n {{ info.database.bytes === null ? \"in memory\" : formatBytes(info.database.bytes) }}\n · migration {{ info.database.version }}\n </dd>\n </div>\n </dl>\n </section>\n\n <!-- ----------------------------------------------------- deployment -->\n\n <section class=\"card p-4\" aria-labelledby=\"deployment-heading\">\n <h2 id=\"deployment-heading\" class=\"text-sm font-semibold\">Deployment</h2>\n <p class=\"mt-1 text-xs text-muted\">\n How this Mica is configured. Secrets are never shown — only whether they are set.\n </p>\n\n <p\n v-if=\"info.deployment.generatedSecrets.length\"\n class=\"mt-3 rounded-md border border-warning/15 bg-warning-soft px-4 py-3 text-xs text-warning\"\n >\n Running with generated development secrets\n ({{ info.deployment.generatedSecrets.join(\", \") }}). Everyone is signed out on restart —\n set these before this deployment is used for real.\n </p>\n\n <dl class=\"spec mt-3\">\n <div>\n <dt>Site</dt>\n <dd class=\"mono\">{{ info.deployment.site }}</dd>\n </div>\n <div>\n <dt>Base URL</dt>\n <dd class=\"mono\">{{ info.deployment.baseUrl }}</dd>\n </div>\n <div>\n <dt>Content model</dt>\n <dd class=\"mono\">{{ info.deployment.schemaOrigin }}</dd>\n </div>\n <div>\n <dt>Repository access</dt>\n <dd>{{ info.deployment.repositoryMode }}</dd>\n </div>\n <div v-if=\"info.deployment.contentRoot\">\n <dt>Content root</dt>\n <dd class=\"mono\">{{ info.deployment.contentRoot }}</dd>\n </div>\n <div>\n <dt>Runtime</dt>\n <dd>{{ info.cms.node }} on {{ info.cms.platform }}</dd>\n </div>\n <div>\n <dt>Memory in use</dt>\n <dd class=\"tabular-nums\">{{ formatBytes(info.deployment.memoryBytes) }}</dd>\n </div>\n <div>\n <dt>Upload limit</dt>\n <dd class=\"tabular-nums\">{{ info.deployment.maxUploadReadable }}</dd>\n </div>\n <div>\n <dt>Authentication</dt>\n <dd class=\"mono\">{{ info.deployment.auth }}</dd>\n </div>\n <div v-if=\"info.deployment.admission\">\n <dt>Who may edit</dt>\n <dd class=\"mono\">{{ info.deployment.admission }}</dd>\n </div>\n <div v-if=\"info.deployment.sessionTtlHours !== null\">\n <dt>Session lifetime</dt>\n <dd class=\"tabular-nums\">\n {{ info.deployment.sessionTtlHours }} h, idle out after\n {{ info.deployment.sessionIdleHours }} h\n </dd>\n </div>\n <div>\n <dt>Trust proxy headers</dt>\n <dd>{{ info.deployment.trustProxy ? \"Yes\" : \"No\" }}</dd>\n </div>\n <div v-if=\"info.deployment.adminOrigins.length\">\n <dt>Extra admin origins</dt>\n <dd class=\"mono\">{{ info.deployment.adminOrigins.join(\", \") }}</dd>\n </div>\n <div>\n <dt>Log level</dt>\n <dd>{{ info.deployment.logLevel }}</dd>\n </div>\n </dl>\n </section>\n </template>\n </div>\n</template>\n\n<style scoped>\n@reference \"../style.css\";\n\n/* Term/value rows: the page is mostly these, so they are worth a class. */\n.spec {\n @apply divide-y divide-line text-sm;\n}\n\n.spec > div {\n @apply flex items-baseline justify-between gap-6 py-1.5;\n}\n\n.spec dt {\n @apply shrink-0 text-muted;\n}\n\n.spec dd {\n @apply min-w-0 text-right;\n}\n\n.mono {\n @apply font-mono text-xs break-all;\n}\n</style>\n"],"names":["toast","useToast","info","ref","loading","load","api","error","ApiError","onMounted","INITIALISMS","kindLabel","kind","words","busiestKind","computed","_a","item","labels","map","_b","collectionLabel","name","report","data","formatDuration","formatBytes","copyReport","_createVNode","PageHeader","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","_createElementBlock","_hoisted_4","_Fragment","_hoisted_5","_hoisted_6","_hoisted_7","_cache","_hoisted_8","_toDisplayString","_hoisted_9","_hoisted_10","_hoisted_11","_unref","_hoisted_12","absoluteTime","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_openBlock","_hoisted_24","_hoisted_25","_normalizeStyle","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_component_RouterLink","_createTextVNode","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","edge","_hoisted_43","_hoisted_44","ArrowRight","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71"],"mappings":"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"}
@@ -1 +1 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-a191e72d],[data-v-a191e72d]:before,[data-v-a191e72d]:after,[data-v-a191e72d]::backdrop{--tw-divide-y-reverse:0;--tw-border-style:solid}}}:where(.spec[data-v-a191e72d]>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-color:var(--mica-border)}.spec[data-v-a191e72d]{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.spec>div[data-v-a191e72d]{justify-content:space-between;align-items:baseline;gap:calc(var(--spacing,.25rem) * 6);padding-block:calc(var(--spacing,.25rem) * 1.5);display:flex}.spec dt[data-v-a191e72d]{color:var(--mica-text-muted);flex-shrink:0}.spec dd[data-v-a191e72d]{text-align:right;min-width:0}.mono[data-v-a191e72d]{font-family:var(--mica-font-mono);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));word-break:break-all}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}
1
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-524c55f4],[data-v-524c55f4]:before,[data-v-524c55f4]:after,[data-v-524c55f4]::backdrop{--tw-divide-y-reverse:0;--tw-border-style:solid}}}:where(.spec[data-v-524c55f4]>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-color:var(--mica-border)}.spec[data-v-524c55f4]{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)))}.spec>div[data-v-524c55f4]{justify-content:space-between;align-items:baseline;gap:calc(var(--spacing,.25rem) * 6);padding-block:calc(var(--spacing,.25rem) * 1.5);display:flex}.spec dt[data-v-524c55f4]{color:var(--mica-text-muted);flex-shrink:0}.spec dd[data-v-524c55f4]{text-align:right;min-width:0}.mono[data-v-524c55f4]{font-family:var(--mica-font-mono);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));word-break:break-all}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}
@@ -1,7 +1,7 @@
1
- import{D as o}from"./index-BsCcwhm6.js";/**
1
+ import{D as o}from"./index-Colfqb-9.js";/**
2
2
  * @license @lucide/vue v1.37.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const r=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],a=o("arrow-right",r);export{a as A};
7
- //# sourceMappingURL=arrow-right-DY4A7pBS.js.map
7
+ //# sourceMappingURL=arrow-right-DJTAYrz5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"arrow-right-DY4A7pBS.js","sources":["../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/arrow-right.mjs"],"sourcesContent":["/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.mjs.map\n"],"names":["__iconNode","ArrowRight","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAQ,CAAE,CAChD,EACMC,EAAaC,EAAiB,cAAeF,CAAU","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"arrow-right-DJTAYrz5.js","sources":["../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/arrow-right.mjs"],"sourcesContent":["/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.mjs.map\n"],"names":["__iconNode","ArrowRight","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAQ,CAAE,CAChD,EACMC,EAAaC,EAAiB,cAAeF,CAAU","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
1
- import{D as o}from"./index-BsCcwhm6.js";/**
1
+ import{D as o}from"./index-Colfqb-9.js";/**
2
2
  * @license @lucide/vue v1.37.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -9,4 +9,4 @@ import{D as o}from"./index-BsCcwhm6.js";/**
9
9
  * This source code is licensed under the ISC license.
10
10
  * See the LICENSE file in the root directory of this source tree.
11
11
  */const a=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],c=o("arrow-up",a);export{c as A,t as a};
12
- //# sourceMappingURL=arrow-up-jX6XH6AV.js.map
12
+ //# sourceMappingURL=arrow-up-CibOjHj-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"arrow-up-jX6XH6AV.js","sources":["../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/arrow-down.mjs","../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/arrow-up.mjs"],"sourcesContent":["/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }],\n [\"path\", { d: \"m19 12-7 7-7-7\", key: \"1idqje\" }]\n];\nconst ArrowDown = createLucideIcon(\"arrow-down\", __iconNode);\n\nexport { __iconNode, ArrowDown as default };\n//# sourceMappingURL=arrow-down.mjs.map\n","/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m5 12 7-7 7 7\", key: \"hav0vg\" }],\n [\"path\", { d: \"M12 19V5\", key: \"x0mq9r\" }]\n];\nconst ArrowUp = createLucideIcon(\"arrow-up\", __iconNode);\n\nexport { __iconNode, ArrowUp as default };\n//# sourceMappingURL=arrow-up.mjs.map\n"],"names":["__iconNode","ArrowDown","createLucideIcon","ArrowUp"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,CACjD,EACMC,EAAYC,EAAiB,aAAcF,CAAU,ECb3D;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAQ,CAAE,EAC9C,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAC3C,EACMG,EAAUD,EAAiB,WAAYF,CAAU","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"arrow-up-CibOjHj-.js","sources":["../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/arrow-down.mjs","../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/arrow-up.mjs"],"sourcesContent":["/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }],\n [\"path\", { d: \"m19 12-7 7-7-7\", key: \"1idqje\" }]\n];\nconst ArrowDown = createLucideIcon(\"arrow-down\", __iconNode);\n\nexport { __iconNode, ArrowDown as default };\n//# sourceMappingURL=arrow-down.mjs.map\n","/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m5 12 7-7 7 7\", key: \"hav0vg\" }],\n [\"path\", { d: \"M12 19V5\", key: \"x0mq9r\" }]\n];\nconst ArrowUp = createLucideIcon(\"arrow-up\", __iconNode);\n\nexport { __iconNode, ArrowUp as default };\n//# sourceMappingURL=arrow-up.mjs.map\n"],"names":["__iconNode","ArrowDown","createLucideIcon","ArrowUp"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,CACjD,EACMC,EAAYC,EAAiB,aAAcF,CAAU,ECb3D;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAQ,CAAE,EAC9C,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAC3C,EACMG,EAAUD,EAAiB,WAAYF,CAAU","x_google_ignoreList":[0,1]}
@@ -1,7 +1,7 @@
1
- import{D as o}from"./index-BsCcwhm6.js";/**
1
+ import{D as o}from"./index-Colfqb-9.js";/**
2
2
  * @license @lucide/vue v1.37.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const n=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],c=o("chevron-down",n);export{c as C};
7
- //# sourceMappingURL=chevron-down-DOqSqKRs.js.map
7
+ //# sourceMappingURL=chevron-down-Bmt8sf-v.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chevron-down-DOqSqKRs.js","sources":["../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/chevron-down.mjs"],"sourcesContent":["/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.mjs.map\n"],"names":["__iconNode","ChevronDown","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAa,CAAC,CAAC,OAAQ,CAAE,EAAG,eAAgB,IAAK,QAAQ,CAAE,CAAC,EAC5DC,EAAcC,EAAiB,eAAgBF,CAAU","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"chevron-down-Bmt8sf-v.js","sources":["../../../../common/temp/node_modules/.pnpm/@lucide+vue@1.37.0_vue@3.5.42_typescript@5.9.3_/node_modules/@lucide/vue/dist/esm/icons/chevron-down.mjs"],"sourcesContent":["/**\n * @license @lucide/vue v1.37.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.mjs.map\n"],"names":["__iconNode","ChevronDown","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAa,CAAC,CAAC,OAAQ,CAAE,EAAG,eAAgB,IAAK,QAAQ,CAAE,CAAC,EAC5DC,EAAcC,EAAiB,eAAgBF,CAAU","x_google_ignoreList":[0]}