@shapio/cms 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/assets/{AssetTile-C-Mu0BRF.js → AssetTile-CoNClUYS.js} +2 -2
- package/dist/admin/assets/{AssetTile-C-Mu0BRF.js.map → AssetTile-CoNClUYS.js.map} +1 -1
- package/dist/admin/assets/{AssistError-B-bnaHhJ.js → AssistError-BoejyShH.js} +2 -2
- package/dist/admin/assets/{AssistError-B-bnaHhJ.js.map → AssistError-BoejyShH.js.map} +1 -1
- package/dist/admin/assets/{BlockMenuItems-Dn9WULjL.js → BlockMenuItems-B2Jugisa.js} +2 -2
- package/dist/admin/assets/{BlockMenuItems-Dn9WULjL.js.map → BlockMenuItems-B2Jugisa.js.map} +1 -1
- package/dist/admin/assets/{Body-C0SwduLi.js → Body-D3GwLGaB.js} +2 -2
- package/dist/admin/assets/{Body-C0SwduLi.js.map → Body-D3GwLGaB.js.map} +1 -1
- package/dist/admin/assets/Builder-CmT5-8hI.js +2 -0
- package/dist/admin/assets/Builder-CmT5-8hI.js.map +1 -0
- package/dist/admin/assets/{ConfirmDialog-BfpN2MQx.js → ConfirmDialog-HS8Gc2t3.js} +2 -2
- package/dist/admin/assets/{ConfirmDialog-BfpN2MQx.js.map → ConfirmDialog-HS8Gc2t3.js.map} +1 -1
- package/dist/admin/assets/{CopyButton-Dxbzp7hC.js → CopyButton-DS-bAA23.js} +2 -2
- package/dist/admin/assets/{CopyButton-Dxbzp7hC.js.map → CopyButton-DS-bAA23.js.map} +1 -1
- package/dist/admin/assets/{CursorPager-DkZs6rPg.js → CursorPager-C6PyD3wE.js} +2 -2
- package/dist/admin/assets/{CursorPager-DkZs6rPg.js.map → CursorPager-C6PyD3wE.js.map} +1 -1
- package/dist/admin/assets/{FocalPoint-r1MG_y-r.js → FocalPoint-C62fRhmM.js} +2 -2
- package/dist/admin/assets/{FocalPoint-r1MG_y-r.js.map → FocalPoint-C62fRhmM.js.map} +1 -1
- package/dist/admin/assets/{Form-D8vp4Kd_.js → Form-CLEr5Csd.js} +2 -2
- package/dist/admin/assets/{Form-D8vp4Kd_.js.map → Form-CLEr5Csd.js.map} +1 -1
- package/dist/admin/assets/{FormCheckboxGroup-8ObPh9cH.js → FormCheckboxGroup-BrXY6qBg.js} +2 -2
- package/dist/admin/assets/{FormCheckboxGroup-8ObPh9cH.js.map → FormCheckboxGroup-BrXY6qBg.js.map} +1 -1
- package/dist/admin/assets/{FormRadioGroup-CAB3qzVS.js → FormRadioGroup-BjE1Jhar.js} +2 -2
- package/dist/admin/assets/{FormRadioGroup-CAB3qzVS.js.map → FormRadioGroup-BjE1Jhar.js.map} +1 -1
- package/dist/admin/assets/{FormSelectField-C7hE05Wq.js → FormSelectField-g4zrUlhv.js} +2 -2
- package/dist/admin/assets/{FormSelectField-C7hE05Wq.js.map → FormSelectField-g4zrUlhv.js.map} +1 -1
- package/dist/admin/assets/{FormSwitchField-7EEYkGOH.js → FormSwitchField-gciThNGV.js} +2 -2
- package/dist/admin/assets/{FormSwitchField-7EEYkGOH.js.map → FormSwitchField-gciThNGV.js.map} +1 -1
- package/dist/admin/assets/{FormTextareaField-BasuRoXW.js → FormTextareaField-tsS-UXym.js} +2 -2
- package/dist/admin/assets/{FormTextareaField-BasuRoXW.js.map → FormTextareaField-tsS-UXym.js.map} +1 -1
- package/dist/admin/assets/{HintedLabel-BDV81kIT.js → HintedLabel-CVe-PIyv.js} +2 -2
- package/dist/admin/assets/{HintedLabel-BDV81kIT.js.map → HintedLabel-CVe-PIyv.js.map} +1 -1
- package/dist/admin/assets/{InfoHint-DWn9kLf1.js → InfoHint-DtaHU1Cg.js} +2 -2
- package/dist/admin/assets/{InfoHint-DWn9kLf1.js.map → InfoHint-DtaHU1Cg.js.map} +1 -1
- package/dist/admin/assets/{InsertMenuItem-DhJk5BeH.js → InsertMenuItem-DlzaD9zr.js} +2 -2
- package/dist/admin/assets/{InsertMenuItem-DhJk5BeH.js.map → InsertMenuItem-DlzaD9zr.js.map} +1 -1
- package/dist/admin/assets/{Match-Zu4pwfCC.js → Match-ErAxnNAY.js} +2 -2
- package/dist/admin/assets/{Match-Zu4pwfCC.js.map → Match-ErAxnNAY.js.map} +1 -1
- package/dist/admin/assets/{QueryView-Cu-KPtQI.js → QueryView-C630REML.js} +2 -2
- package/dist/admin/assets/{QueryView-Cu-KPtQI.js.map → QueryView-C630REML.js.map} +1 -1
- package/dist/admin/assets/{RadioTile-Ci0LucKI.js → RadioTile-CD4mel7U.js} +2 -2
- package/dist/admin/assets/{RadioTile-Ci0LucKI.js.map → RadioTile-CD4mel7U.js.map} +1 -1
- package/dist/admin/assets/{RichTextField-BcYOFkeW.js → RichTextField-CxeVX6C-.js} +2 -2
- package/dist/admin/assets/{RichTextField-BcYOFkeW.js.map → RichTextField-CxeVX6C-.js.map} +1 -1
- package/dist/admin/assets/{RowTitle-BdDgA5Lb.js → RowTitle-B-7RptyN.js} +2 -2
- package/dist/admin/assets/{RowTitle-BdDgA5Lb.js.map → RowTitle-B-7RptyN.js.map} +1 -1
- package/dist/admin/assets/{SecretReveal-ai1uMW_b.js → SecretReveal-Dhw_dYxe.js} +2 -2
- package/dist/admin/assets/{SecretReveal-ai1uMW_b.js.map → SecretReveal-Dhw_dYxe.js.map} +1 -1
- package/dist/admin/assets/{SharedGlyph-y6ZsA_gz.js → SharedGlyph-97RaO6Bh.js} +2 -2
- package/dist/admin/assets/{SharedGlyph-y6ZsA_gz.js.map → SharedGlyph-97RaO6Bh.js.map} +1 -1
- package/dist/admin/assets/{StepList-xmD9CPZl.js → StepList--0Fiqsq-.js} +2 -2
- package/dist/admin/assets/{StepList-xmD9CPZl.js.map → StepList--0Fiqsq-.js.map} +1 -1
- package/dist/admin/assets/Structure-CoO3iah3.js +2 -0
- package/dist/admin/assets/{Structure-DGt-TDk5.js.map → Structure-CoO3iah3.js.map} +1 -1
- package/dist/admin/assets/{SuggestAltButton-D1-v_0wB.js → SuggestAltButton-Dlyxoypu.js} +2 -2
- package/dist/admin/assets/{SuggestAltButton-D1-v_0wB.js.map → SuggestAltButton-Dlyxoypu.js.map} +1 -1
- package/dist/admin/assets/{Thumbnail-cjA7fSWh.js → Thumbnail-BUYOr4XJ.js} +2 -2
- package/dist/admin/assets/{Thumbnail-cjA7fSWh.js.map → Thumbnail-BUYOr4XJ.js.map} +1 -1
- package/dist/admin/assets/{UnsavedChangesGuard-B57D0278.js → UnsavedChangesGuard-BfzHgUkF.js} +2 -2
- package/dist/admin/assets/{UnsavedChangesGuard-B57D0278.js.map → UnsavedChangesGuard-BfzHgUkF.js.map} +1 -1
- package/dist/admin/assets/{UserAvatar--pMv2i3c.js → UserAvatar-DNOWhSWS.js} +2 -2
- package/dist/admin/assets/{UserAvatar--pMv2i3c.js.map → UserAvatar-DNOWhSWS.js.map} +1 -1
- package/dist/admin/assets/{badge-C5oMRtwJ.js → badge-lJ4Ih_Zn.js} +2 -2
- package/dist/admin/assets/{badge-C5oMRtwJ.js.map → badge-lJ4Ih_Zn.js.map} +1 -1
- package/dist/admin/assets/{changeSets-CObZV8H2.js → changeSets-JmSyu3tu.js} +2 -2
- package/dist/admin/assets/{changeSets-CObZV8H2.js.map → changeSets-JmSyu3tu.js.map} +1 -1
- package/dist/admin/assets/{constants-DT4WPUvz.js → constants-ahk0YSYl.js} +2 -2
- package/dist/admin/assets/{constants-DT4WPUvz.js.map → constants-ahk0YSYl.js.map} +1 -1
- package/dist/admin/assets/content-DcvNzKGe.js +3 -0
- package/dist/admin/assets/content-DcvNzKGe.js.map +1 -0
- package/dist/admin/assets/{contentTypes-ArLEfM29.js → contentTypes-YAd-AzOF.js} +2 -2
- package/dist/admin/assets/{contentTypes-ArLEfM29.js.map → contentTypes-YAd-AzOF.js.map} +1 -1
- package/dist/admin/assets/{develop-DvKYqVeK.js → develop-DYwiTd6R.js} +3 -3
- package/dist/admin/assets/{develop-DvKYqVeK.js.map → develop-DYwiTd6R.js.map} +1 -1
- package/dist/admin/assets/{dropdown-menu-DPzDthV7.js → dropdown-menu-DiYSm-g3.js} +2 -2
- package/dist/admin/assets/{dropdown-menu-DPzDthV7.js.map → dropdown-menu-DiYSm-g3.js.map} +1 -1
- package/dist/admin/assets/{fileRoute-sJvv4Ipn.js → fileRoute-CVQpW8cj.js} +2 -2
- package/dist/admin/assets/{fileRoute-sJvv4Ipn.js.map → fileRoute-CVQpW8cj.js.map} +1 -1
- package/dist/admin/assets/{followPlural-tOh6gDgT.js → followPlural-BdqfEe48.js} +2 -2
- package/dist/admin/assets/{followPlural-tOh6gDgT.js.map → followPlural-BdqfEe48.js.map} +1 -1
- package/dist/admin/assets/{inbox-nfR2K7f6.js → inbox-CnzNfqt9.js} +2 -2
- package/dist/admin/assets/{inbox-nfR2K7f6.js.map → inbox-CnzNfqt9.js.map} +1 -1
- package/dist/admin/assets/index-6iVBpUhu.css +2 -0
- package/dist/admin/assets/index-D9KL7arJ.js +4 -0
- package/dist/admin/assets/index-D9KL7arJ.js.map +1 -0
- package/dist/admin/assets/{media-BzivlEh2.js → media-Cs9LCQcz.js} +2 -2
- package/dist/admin/assets/{media-BzivlEh2.js.map → media-Cs9LCQcz.js.map} +1 -1
- package/dist/admin/assets/{network-Cj04CpFi.js → network-DS8MW3AZ.js} +2 -2
- package/dist/admin/assets/{network-Cj04CpFi.js.map → network-DS8MW3AZ.js.map} +1 -1
- package/dist/admin/assets/{publishing-ChHkrwvr.js → publishing-C4YQ4XKt.js} +2 -2
- package/dist/admin/assets/{publishing-ChHkrwvr.js.map → publishing-C4YQ4XKt.js.map} +1 -1
- package/dist/admin/assets/{radio-group-DSK5LPaM.js → radio-group-zOsGAYRP.js} +2 -2
- package/dist/admin/assets/{radio-group-DSK5LPaM.js.map → radio-group-zOsGAYRP.js.map} +1 -1
- package/dist/admin/assets/{searchSchemas-BdwAFaVO.js → searchSchemas-BCRZ1jyL.js} +2 -2
- package/dist/admin/assets/{searchSchemas-BdwAFaVO.js.map → searchSchemas-BCRZ1jyL.js.map} +1 -1
- package/dist/admin/assets/{sections-iNOzo7pL.js → sections-v5Flaor9.js} +2 -2
- package/dist/admin/assets/{sections-iNOzo7pL.js.map → sections-v5Flaor9.js.map} +1 -1
- package/dist/admin/assets/{select-DyD7qIkJ.js → select-CpHp3YOH.js} +2 -2
- package/dist/admin/assets/{select-DyD7qIkJ.js.map → select-CpHp3YOH.js.map} +1 -1
- package/dist/admin/assets/{seo-uMm2fGPB.js → seo-1n9s7YuX.js} +2 -2
- package/dist/admin/assets/{seo-uMm2fGPB.js.map → seo-1n9s7YuX.js.map} +1 -1
- package/dist/admin/assets/{settings-CJVORrIV.js → settings-CuEO5l07.js} +2 -2
- package/dist/admin/assets/{settings-CJVORrIV.js.map → settings-CuEO5l07.js.map} +1 -1
- package/dist/admin/assets/{skeleton-B5GJgv7y.js → skeleton-DElTumgk.js} +2 -2
- package/dist/admin/assets/skeleton-DElTumgk.js.map +1 -0
- package/dist/admin/assets/src-Be3Ds5Dc.js +4 -0
- package/dist/admin/assets/src-Be3Ds5Dc.js.map +1 -0
- package/dist/admin/assets/{switch-DbIrjP3h.js → switch-CijNGYkG.js} +2 -2
- package/dist/admin/assets/{switch-DbIrjP3h.js.map → switch-CijNGYkG.js.map} +1 -1
- package/dist/admin/assets/tabs-CSqGW9Du.js +5 -0
- package/dist/admin/assets/tabs-CSqGW9Du.js.map +1 -0
- package/dist/admin/assets/{theme-C0Tv6M38.js → theme-CHHVK8Ps.js} +2 -2
- package/dist/admin/assets/{theme-C0Tv6M38.js.map → theme-CHHVK8Ps.js.map} +1 -1
- package/dist/admin/assets/{titles-uL13bpi8.js → titles-CQYc9nDQ.js} +2 -2
- package/dist/admin/assets/{titles-uL13bpi8.js.map → titles-CQYc9nDQ.js.map} +1 -1
- package/dist/admin/assets/{tooltip-BK5FqmJ0.js → tooltip-BXqFQv9N.js} +2 -2
- package/dist/admin/assets/{tooltip-BK5FqmJ0.js.map → tooltip-BXqFQv9N.js.map} +1 -1
- package/dist/admin/assets/{useContentSchema-BCdLYsKa.js → useContentSchema-Cvtes34f.js} +2 -2
- package/dist/admin/assets/{useContentSchema-BCdLYsKa.js.map → useContentSchema-Cvtes34f.js.map} +1 -1
- package/dist/admin/assets/{useDiscardGuard-CGFgC3xY.js → useDiscardGuard-BAEGkGK9.js} +2 -2
- package/dist/admin/assets/{useDiscardGuard-CGFgC3xY.js.map → useDiscardGuard-BAEGkGK9.js.map} +1 -1
- package/dist/admin/assets/{useMediaPickerDialog-BOkGEyG7.js → useMediaPickerDialog-CiN_pias.js} +2 -2
- package/dist/admin/assets/{useMediaPickerDialog-BOkGEyG7.js.map → useMediaPickerDialog-CiN_pias.js.map} +1 -1
- package/dist/admin/assets/{useMediaUploader-D1ouV8jc.js → useMediaUploader-CapEHBIt.js} +2 -2
- package/dist/admin/assets/{useMediaUploader-D1ouV8jc.js.map → useMediaUploader-CapEHBIt.js.map} +1 -1
- package/dist/admin/assets/usePaletteItems-wpn3ms6o.js +2 -0
- package/dist/admin/assets/usePaletteItems-wpn3ms6o.js.map +1 -0
- package/dist/admin/assets/{useResolvedScheme-D0moXjaP.js → useResolvedScheme-i1EwGHuF.js} +2 -2
- package/dist/admin/assets/{useResolvedScheme-D0moXjaP.js.map → useResolvedScheme-i1EwGHuF.js.map} +1 -1
- package/dist/admin/assets/{zod-CS0EvbwG.js → zod-79xzBIrW.js} +2 -2
- package/dist/admin/assets/{zod-CS0EvbwG.js.map → zod-79xzBIrW.js.map} +1 -1
- package/dist/admin/index.html +27 -27
- package/dist/cli.js +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{public-BSbOGbK-.d.ts → public-CTK82y3t.d.ts} +2 -1
- package/dist/{worker-i1rY2TIZ.js → worker-BDYDbaea.js} +404 -201
- package/dist/worker-BDYDbaea.js.map +1 -0
- package/package.json +5 -5
- package/dist/admin/assets/Builder-C11yUgu9.js +0 -2
- package/dist/admin/assets/Builder-C11yUgu9.js.map +0 -1
- package/dist/admin/assets/Structure-DGt-TDk5.js +0 -2
- package/dist/admin/assets/content-HvisCB5m.js +0 -3
- package/dist/admin/assets/content-HvisCB5m.js.map +0 -1
- package/dist/admin/assets/index-Bbb2ER3l.css +0 -2
- package/dist/admin/assets/index-C6FrF34G.js +0 -4
- package/dist/admin/assets/index-C6FrF34G.js.map +0 -1
- package/dist/admin/assets/skeleton-B5GJgv7y.js.map +0 -1
- package/dist/admin/assets/src-B2qcqjNM.js +0 -4
- package/dist/admin/assets/src-B2qcqjNM.js.map +0 -1
- package/dist/admin/assets/tabs-BJhfL-lw.js +0 -5
- package/dist/admin/assets/tabs-BJhfL-lw.js.map +0 -1
- package/dist/admin/assets/usePaletteItems-neKzBlys.js +0 -2
- package/dist/admin/assets/usePaletteItems-neKzBlys.js.map +0 -1
- package/dist/worker-i1rY2TIZ.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{j as r}from"./cn-CL1YHRrS.js";import{C as i,T as a,o,x as s}from"./auth-YVfK3SxF.js";import{_ as c,a as l,i as u,j as d,o as f,t as p}from"./badge-
|
|
2
|
-
//# sourceMappingURL=contentTypes-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./react-CQOZoUwg.js";import{t as n}from"./jsx-runtime-DREnUpxT.js";import{j as r}from"./cn-CL1YHRrS.js";import{C as i,T as a,o,x as s}from"./auth-YVfK3SxF.js";import{_ as c,a as l,i as u,j as d,o as f,t as p}from"./badge-lJ4Ih_Zn.js";import{t as m}from"./fileRoute-CVQpW8cj.js";import{i as h}from"./skeleton-DElTumgk.js";import{n as g,t as _}from"./Form-CLEr5Csd.js";import{a as v,d as y}from"./constants-ahk0YSYl.js";import{t as b}from"./Builder-CmT5-8hI.js";import{t as x}from"./plus-BDZHQBlU.js";import{u as S}from"./changeSets-JmSyu3tu.js";import{t as C}from"./HintedLabel-CVe-PIyv.js";import{s as w}from"./schema-B7L9OJrX.js";import{t as T}from"./QueryView-C630REML.js";import{t as E}from"./textarea-FwSvwmyT.js";import{c as D,g as O,i as k,r as A,t as j}from"./AssistError-BoejyShH.js";import{t as M}from"./Panel-ClY9b33D.js";import{a as N,i as P}from"./followPlural-BdqfEe48.js";var F=e(n(),1),I=()=>{let{t:e}=r(),t=w(`component`),n=o(`schema.create`),{locked:i,reason:a}=N(),c=n&&!i?(0,F.jsx)(h,{asChild:!0,children:(0,F.jsxs)(s,{to:`/develop/components/new`,children:[(0,F.jsx)(x,{"aria-hidden":`true`}),e(`contentTypes.newComponentTitle`)]})}):null;return(0,F.jsxs)(l,{children:[(0,F.jsx)(u,{title:e(`shell.nav.components`),actions:c}),i?(0,F.jsx)(P,{reason:a}):null,(0,F.jsx)(T,{query:t,isEmpty:e=>e.length===0,empty:(0,F.jsx)(f,{icon:y,title:e(`contentTypes.noComponents`),description:e(`models.emptyDescription`),action:c}),children:e=>(0,F.jsx)(g,{items:e})})]})},L=()=>{let{componentId:e}=d({from:`/app/develop/components/$componentId`});return(0,F.jsx)(b,{category:`component`,id:e})},R=[`component`],z=()=>{let{t:e}=r();return(0,F.jsx)(_,{title:e(`contentTypes.newComponentTitle`),kinds:R,back:i({to:`/develop/components`}),backLabel:e(`shell.nav.components`)})},B=e(t(),1),V=()=>{let{t:e}=r(),t=a(),[n,i]=(0,B.useState)(``),[o,s]=(0,B.useState)(null),c=D(),l=S();return{description:n,setDescription:i,proposal:o,run:()=>{n.trim()!==``&&(s(null),l.reset(),c.mutate({description:n.trim()},{onSuccess:s}))},discard:()=>{s(null),c.reset(),l.reset()},addToChangeSet:()=>{o&&l.mutate({definitions:o.definitions,newSetTitle:e(`assist.describe.setTitle`,{model:o.model})},{onSuccess:e=>void t({to:`/changes/$changeSetId`,params:{changeSetId:e}})})},proposing:c.isPending,proposeError:c.error,adding:l.isPending,addError:l.error}},H=({proposal:e})=>{let{t}=r();return(0,F.jsxs)(`div`,{className:`space-y-3`,children:[(0,F.jsx)(`p`,{className:`text-meta text-muted-foreground`,children:t(`assist.describe.proposedBy`,{model:e.model})}),(0,F.jsx)(`ul`,{"aria-label":t(`assist.describe.proposalLabel`),className:`space-y-3`,children:e.definitions.map(e=>(0,F.jsxs)(`li`,{className:`rounded-lg border p-3`,children:[(0,F.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,F.jsx)(`span`,{className:`text-sm font-semibold`,children:e.label}),(0,F.jsx)(p,{variant:`secondary`,children:t(v[e.kind])}),(0,F.jsx)(`span`,{className:`font-mono text-meta text-muted-foreground`,children:e.apiKey})]}),(0,F.jsx)(`ul`,{className:`mt-2 space-y-0.5 text-meta text-muted-foreground`,children:e.fields.map(e=>(0,F.jsxs)(`li`,{children:[(0,F.jsx)(`span`,{className:`text-foreground`,children:e.label}),` `,t(`assist.describe.fieldType`,{type:t(`models.dataTypes.${e.type}.name`)})]},e.id))})]},e.id))})]})},U=()=>{let{t:e}=r(),t=(0,B.useId)(),n=k(),{locked:i}=N(),a=V();return n?(0,F.jsx)(M,{title:e(`assist.describe.title`),titleAs:`h2`,children:(0,F.jsx)(`div`,{className:`space-y-3`,children:a.proposal?(0,F.jsxs)(`form`,{className:`space-y-3`,onSubmit:e=>{e.preventDefault(),a.addToChangeSet()},children:[(0,F.jsx)(H,{proposal:a.proposal}),(0,F.jsx)(j,{error:a.addError}),(0,F.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-2`,children:[(0,F.jsx)(h,{type:`button`,variant:`outline`,onClick:a.discard,children:e(`assist.discard`)}),(0,F.jsx)(c,{pending:a.adding,pendingLabel:e(`common.saving`),disabled:i,children:e(`assist.describe.add`)})]})]}):(0,F.jsxs)(F.Fragment,{children:[(0,F.jsxs)(`div`,{className:`space-y-2`,children:[(0,F.jsx)(C,{htmlFor:`${t}-description`,label:e(`assist.describe.label`),hint:e(`assist.describe.hint`)}),(0,F.jsx)(E,{id:`${t}-description`,value:a.description,rows:4,maxLength:O,placeholder:e(`assist.describe.placeholder`),disabled:a.proposing,onChange:e=>a.setDescription(e.target.value)})]}),(0,F.jsx)(j,{error:a.proposeError}),(0,F.jsx)(`div`,{className:`flex justify-end`,children:(0,F.jsx)(A,{variant:`outline`,size:`default`,pending:a.proposing,pendingLabel:e(`assist.working`),disabled:a.description.trim()===``||i,onClick:a.run,children:e(`assist.describe.run`)})})]})})}):null},W=[`collection`,`singleton`],G={newContentType:m(`/app/content/new`)({component:()=>{let{t:e}=r();return(0,F.jsx)(_,{title:e(`contentTypes.newTitle`),kinds:W,back:i({to:`/content`}),backLabel:e(`content.title`),intro:(0,F.jsx)(U,{})})}}),components:m(`/app/develop/components`)({component:I}),newComponent:m(`/app/develop/components/new`)({component:z}),component:m(`/app/develop/components/$componentId`)({component:L})};export{G as contentTypesLazyRoutes};
|
|
2
|
+
//# sourceMappingURL=contentTypes-YAd-AzOF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contentTypes-ArLEfM29.js","names":["DefinitionBuilder","KINDS","New","useState","useId","_Fragment","NewContentType","NewComponent","ComponentBuilder","__toESM","require_jsx_runtime","useTranslation","linkOptions","useNavigate","Link","SubmitButton","Page","PageHeader","useParams","EmptyState","Badge","createLazyRoute","Button","List","Form","KIND_LABEL_KEYS","Blocks","Builder$1","Plus","useSaveNewDefinitionsToChangeSet","HintedLabel","useDefinitions","QueryView","Textarea","useProposeSchema","SCHEMA_DESCRIPTION_MAX","useAssistEnabled","AssistButton","AssistError","Panel","useSchemaLock","LockNotice","import_jsx_runtime","Components","components","canCreate","useHasGlobalPermission","createAction","locked","t","data","Builder","componentId","KINDS$1","New$1","import_react","require_react","useDescribeSchema","navigate","description","setDescription","proposal","setProposal","propose","save","Proposal","definition","field","Describe","id","enabled","describe","event","KINDS","contentTypesLazyRoutes"],"sources":["../../src/features/Components/index.tsx","../../src/features/Components/Builder/index.tsx","../../src/features/Components/New/index.tsx","../../src/features/Content/New/hooks/useDescribeSchema.ts","../../src/features/Content/New/Describe/Proposal/index.tsx","../../src/features/Content/New/Describe/index.tsx","../../src/features/Content/New/index.tsx","../../src/app/lazyRoutes/contentTypes.tsx"],"sourcesContent":["import { Link } from '@tanstack/react-router';\nimport { Blocks, Plus } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { useHasGlobalPermission } from '@/api/auth';\nimport { useDefinitions } from '@/api/schema';\nimport { EmptyState } from '@/components/EmptyState';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { QueryView } from '@/components/QueryView';\nimport { Button } from '@/components/ui/button';\nimport { useSchemaLock } from '@/features/Models/hooks/useSchemaLock';\nimport { List } from '@/features/Models/List';\nimport { LockNotice } from '@/features/Models/LockNotice';\n\n/** `/develop/components`: reusable field groups that content types embed (Develop → Components). */\nexport const Components = () => {\n const { t } = useTranslation();\n const components = useDefinitions('component');\n const canCreate = useHasGlobalPermission('schema.create');\n const { locked, reason } = useSchemaLock();\n const createAction =\n canCreate && !locked ? (\n <Button asChild>\n <Link to=\"/develop/components/new\">\n <Plus aria-hidden=\"true\" />\n {t('contentTypes.newComponentTitle')}\n </Link>\n </Button>\n ) : null;\n return (\n <Page>\n <PageHeader title={t('shell.nav.components')} actions={createAction} />\n {locked ? <LockNotice reason={reason} /> : null}\n <QueryView\n query={components}\n isEmpty={(data) => data.length === 0}\n empty={\n <EmptyState\n icon={Blocks}\n title={t('contentTypes.noComponents')}\n description={t('models.emptyDescription')}\n action={createAction}\n />\n }\n >\n {(data) => <List items={data} />}\n </QueryView>\n </Page>\n );\n};\n","import { useParams } from '@tanstack/react-router';\nimport { Builder as DefinitionBuilder } from '@/features/Models/Builder';\n\n/** `/develop/components/:componentId`: a component in the shared definition builder. */\nexport const Builder = () => {\n const { componentId } = useParams({ from: '/app/develop/components/$componentId' });\n return <DefinitionBuilder category=\"component\" id={componentId} />;\n};\n","import { linkOptions } from '@tanstack/react-router';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from '@/features/Content/New/Form';\n\nconst KINDS = ['component'] as const;\n\n/** `/develop/components/new`: a reusable component (Develop → Components). */\nexport const New = () => {\n const { t } = useTranslation();\n return (\n <Form\n title={t('contentTypes.newComponentTitle')}\n kinds={KINDS}\n back={linkOptions({ to: '/develop/components' })}\n backLabel={t('shell.nav.components')}\n />\n );\n};\n","import type { SchemaDraftResult } from '@shapio/client';\nimport { useNavigate } from '@tanstack/react-router';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useProposeSchema } from '@/api/assist';\nimport { useSaveNewDefinitionsToChangeSet } from '@/api/changeSets';\n\n/**\n * \"Describe it\": a description → proposed definitions (nothing written) → saved as schema drafts into a\n * change set, whose review opens next. Shipping them stays a person's decision there.\n */\nexport const useDescribeSchema = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const [description, setDescription] = useState('');\n const [proposal, setProposal] = useState<SchemaDraftResult | null>(null);\n const propose = useProposeSchema();\n const save = useSaveNewDefinitionsToChangeSet();\n const run = () => {\n if (description.trim() === '') {\n return;\n }\n setProposal(null);\n save.reset();\n propose.mutate({ description: description.trim() }, { onSuccess: setProposal });\n };\n const discard = () => {\n setProposal(null);\n propose.reset();\n save.reset();\n };\n const addToChangeSet = () => {\n if (!proposal) {\n return;\n }\n save.mutate(\n {\n definitions: proposal.definitions,\n newSetTitle: t('assist.describe.setTitle', { model: proposal.model }),\n },\n {\n onSuccess: (changeSetId) => void navigate({ to: '/changes/$changeSetId', params: { changeSetId } }),\n },\n );\n };\n return {\n description,\n setDescription,\n proposal,\n run,\n discard,\n addToChangeSet,\n proposing: propose.isPending,\n proposeError: propose.error,\n adding: save.isPending,\n addError: save.error,\n };\n};\n","import type { SchemaDraftResult } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { Badge } from '@/components/ui/badge';\nimport { KIND_LABEL_KEYS } from '@/features/Models/constants';\n\ntype ProposalProps = { proposal: SchemaDraftResult };\n\n/** The proposed definitions at a glance: name, kind, API ID and fields, before they go into a change set. */\nexport const Proposal = ({ proposal }: ProposalProps) => {\n const { t } = useTranslation();\n return (\n <div className=\"space-y-3\">\n <p className=\"text-meta text-muted-foreground\">\n {t('assist.describe.proposedBy', { model: proposal.model })}\n </p>\n <ul aria-label={t('assist.describe.proposalLabel')} className=\"space-y-3\">\n {proposal.definitions.map((definition) => (\n <li key={definition.id} className=\"rounded-lg border p-3\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-sm font-semibold\">{definition.label}</span>\n <Badge variant=\"secondary\">{t(KIND_LABEL_KEYS[definition.kind])}</Badge>\n <span className=\"font-mono text-meta text-muted-foreground\">{definition.apiKey}</span>\n </div>\n <ul className=\"mt-2 space-y-0.5 text-meta text-muted-foreground\">\n {definition.fields.map((field) => (\n <li key={field.id}>\n <span className=\"text-foreground\">{field.label}</span>{' '}\n {t('assist.describe.fieldType', { type: t(`models.dataTypes.${field.type}.name`) })}\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import { useId } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useAssistEnabled } from '@/api/assist';\nimport { AssistButton } from '@/components/AssistButton';\nimport { AssistError } from '@/components/AssistError';\nimport { HintedLabel } from '@/components/HintedLabel';\nimport { Panel } from '@/components/Panel';\nimport { SubmitButton } from '@/components/SubmitButton';\nimport { Button } from '@/components/ui/button';\nimport { Textarea } from '@/components/ui/textarea';\nimport { SCHEMA_DESCRIPTION_MAX } from '@/constants/assist';\nimport { useSchemaLock } from '@/features/Models/hooks/useSchemaLock';\nimport { useDescribeSchema } from '../hooks/useDescribeSchema';\nimport { Proposal } from './Proposal';\n\n/** \"Describe it\" above the new content type form: a model proposes the types, a change set holds them. */\nexport const Describe = () => {\n const { t } = useTranslation();\n const id = useId();\n const enabled = useAssistEnabled();\n const { locked } = useSchemaLock();\n const describe = useDescribeSchema();\n if (!enabled) {\n return null;\n }\n return (\n <Panel title={t('assist.describe.title')} titleAs=\"h2\">\n <div className=\"space-y-3\">\n {describe.proposal ? (\n <form\n className=\"space-y-3\"\n onSubmit={(event) => {\n event.preventDefault();\n describe.addToChangeSet();\n }}\n >\n <Proposal proposal={describe.proposal} />\n <AssistError error={describe.addError} />\n <div className=\"flex flex-wrap justify-end gap-2\">\n <Button type=\"button\" variant=\"outline\" onClick={describe.discard}>\n {t('assist.discard')}\n </Button>\n <SubmitButton pending={describe.adding} pendingLabel={t('common.saving')} disabled={locked}>\n {t('assist.describe.add')}\n </SubmitButton>\n </div>\n </form>\n ) : (\n <>\n <div className=\"space-y-2\">\n <HintedLabel\n htmlFor={`${id}-description`}\n label={t('assist.describe.label')}\n hint={t('assist.describe.hint')}\n />\n <Textarea\n id={`${id}-description`}\n value={describe.description}\n rows={4}\n maxLength={SCHEMA_DESCRIPTION_MAX}\n placeholder={t('assist.describe.placeholder')}\n disabled={describe.proposing}\n onChange={(event) => describe.setDescription(event.target.value)}\n />\n </div>\n <AssistError error={describe.proposeError} />\n <div className=\"flex justify-end\">\n <AssistButton\n variant=\"outline\"\n size=\"default\"\n pending={describe.proposing}\n pendingLabel={t('assist.working')}\n disabled={describe.description.trim() === '' || locked}\n onClick={describe.run}\n >\n {t('assist.describe.run')}\n </AssistButton>\n </div>\n </>\n )}\n </div>\n </Panel>\n );\n};\n","import { linkOptions } from '@tanstack/react-router';\nimport { useTranslation } from 'react-i18next';\nimport { Describe } from './Describe';\nimport { Form } from './Form';\n\nconst KINDS = ['collection', 'singleton'] as const;\n\n/** `/content/new`: a new content type (a place for editors), live as soon as it is created. */\nexport const New = () => {\n const { t } = useTranslation();\n return (\n <Form\n title={t('contentTypes.newTitle')}\n kinds={KINDS}\n back={linkOptions({ to: '/content' })}\n backLabel={t('content.title')}\n intro={<Describe />}\n />\n );\n};\n","import { createLazyRoute } from '@tanstack/react-router';\nimport { Components } from '@/features/Components';\nimport { Builder as ComponentBuilder } from '@/features/Components/Builder';\nimport { New as NewComponent } from '@/features/Components/New';\nimport { New as NewContentType } from '@/features/Content/New';\n\n/** Creating content types and components, and Develop → Components (with @shapio/schema's validators). */\nexport const contentTypesLazyRoutes = {\n newContentType: createLazyRoute('/app/content/new')({ component: NewContentType }),\n components: createLazyRoute('/app/develop/components')({ component: Components }),\n newComponent: createLazyRoute('/app/develop/components/new')({ component: NewComponent }),\n component: createLazyRoute('/app/develop/components/$componentId')({ component: ComponentBuilder }),\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"contentTypes-YAd-AzOF.js","names":["DefinitionBuilder","KINDS","New","useState","useId","_Fragment","NewContentType","NewComponent","ComponentBuilder","__toESM","require_jsx_runtime","useTranslation","linkOptions","useNavigate","Link","SubmitButton","Page","PageHeader","useParams","EmptyState","Badge","createLazyRoute","Button","List","Form","KIND_LABEL_KEYS","Blocks","Builder$1","Plus","useSaveNewDefinitionsToChangeSet","HintedLabel","useDefinitions","QueryView","Textarea","useProposeSchema","SCHEMA_DESCRIPTION_MAX","useAssistEnabled","AssistButton","AssistError","Panel","useSchemaLock","LockNotice","import_jsx_runtime","Components","components","canCreate","useHasGlobalPermission","createAction","locked","t","data","Builder","componentId","KINDS$1","New$1","import_react","require_react","useDescribeSchema","navigate","description","setDescription","proposal","setProposal","propose","save","Proposal","definition","field","Describe","id","enabled","describe","event","KINDS","contentTypesLazyRoutes"],"sources":["../../src/features/Components/index.tsx","../../src/features/Components/Builder/index.tsx","../../src/features/Components/New/index.tsx","../../src/features/Content/New/hooks/useDescribeSchema.ts","../../src/features/Content/New/Describe/Proposal/index.tsx","../../src/features/Content/New/Describe/index.tsx","../../src/features/Content/New/index.tsx","../../src/app/lazyRoutes/contentTypes.tsx"],"sourcesContent":["import { Link } from '@tanstack/react-router';\nimport { Blocks, Plus } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { useHasGlobalPermission } from '@/api/auth';\nimport { useDefinitions } from '@/api/schema';\nimport { EmptyState } from '@/components/EmptyState';\nimport { Page } from '@/components/Page';\nimport { PageHeader } from '@/components/PageHeader';\nimport { QueryView } from '@/components/QueryView';\nimport { Button } from '@/components/ui/button';\nimport { useSchemaLock } from '@/features/Models/hooks/useSchemaLock';\nimport { List } from '@/features/Models/List';\nimport { LockNotice } from '@/features/Models/LockNotice';\n\n/** `/develop/components`: reusable field groups that content types embed (Develop → Components). */\nexport const Components = () => {\n const { t } = useTranslation();\n const components = useDefinitions('component');\n const canCreate = useHasGlobalPermission('schema.create');\n const { locked, reason } = useSchemaLock();\n const createAction =\n canCreate && !locked ? (\n <Button asChild>\n <Link to=\"/develop/components/new\">\n <Plus aria-hidden=\"true\" />\n {t('contentTypes.newComponentTitle')}\n </Link>\n </Button>\n ) : null;\n return (\n <Page>\n <PageHeader title={t('shell.nav.components')} actions={createAction} />\n {locked ? <LockNotice reason={reason} /> : null}\n <QueryView\n query={components}\n isEmpty={(data) => data.length === 0}\n empty={\n <EmptyState\n icon={Blocks}\n title={t('contentTypes.noComponents')}\n description={t('models.emptyDescription')}\n action={createAction}\n />\n }\n >\n {(data) => <List items={data} />}\n </QueryView>\n </Page>\n );\n};\n","import { useParams } from '@tanstack/react-router';\nimport { Builder as DefinitionBuilder } from '@/features/Models/Builder';\n\n/** `/develop/components/:componentId`: a component in the shared definition builder. */\nexport const Builder = () => {\n const { componentId } = useParams({ from: '/app/develop/components/$componentId' });\n return <DefinitionBuilder category=\"component\" id={componentId} />;\n};\n","import { linkOptions } from '@tanstack/react-router';\nimport { useTranslation } from 'react-i18next';\nimport { Form } from '@/features/Content/New/Form';\n\nconst KINDS = ['component'] as const;\n\n/** `/develop/components/new`: a reusable component (Develop → Components). */\nexport const New = () => {\n const { t } = useTranslation();\n return (\n <Form\n title={t('contentTypes.newComponentTitle')}\n kinds={KINDS}\n back={linkOptions({ to: '/develop/components' })}\n backLabel={t('shell.nav.components')}\n />\n );\n};\n","import type { SchemaDraftResult } from '@shapio/client';\nimport { useNavigate } from '@tanstack/react-router';\nimport { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useProposeSchema } from '@/api/assist';\nimport { useSaveNewDefinitionsToChangeSet } from '@/api/changeSets';\n\n/**\n * \"Describe it\": a description → proposed definitions (nothing written) → saved as schema drafts into a\n * change set, whose review opens next. Shipping them stays a person's decision there.\n */\nexport const useDescribeSchema = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const [description, setDescription] = useState('');\n const [proposal, setProposal] = useState<SchemaDraftResult | null>(null);\n const propose = useProposeSchema();\n const save = useSaveNewDefinitionsToChangeSet();\n const run = () => {\n if (description.trim() === '') {\n return;\n }\n setProposal(null);\n save.reset();\n propose.mutate({ description: description.trim() }, { onSuccess: setProposal });\n };\n const discard = () => {\n setProposal(null);\n propose.reset();\n save.reset();\n };\n const addToChangeSet = () => {\n if (!proposal) {\n return;\n }\n save.mutate(\n {\n definitions: proposal.definitions,\n newSetTitle: t('assist.describe.setTitle', { model: proposal.model }),\n },\n {\n onSuccess: (changeSetId) => void navigate({ to: '/changes/$changeSetId', params: { changeSetId } }),\n },\n );\n };\n return {\n description,\n setDescription,\n proposal,\n run,\n discard,\n addToChangeSet,\n proposing: propose.isPending,\n proposeError: propose.error,\n adding: save.isPending,\n addError: save.error,\n };\n};\n","import type { SchemaDraftResult } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { Badge } from '@/components/ui/badge';\nimport { KIND_LABEL_KEYS } from '@/features/Models/constants';\n\ntype ProposalProps = { proposal: SchemaDraftResult };\n\n/** The proposed definitions at a glance: name, kind, API ID and fields, before they go into a change set. */\nexport const Proposal = ({ proposal }: ProposalProps) => {\n const { t } = useTranslation();\n return (\n <div className=\"space-y-3\">\n <p className=\"text-meta text-muted-foreground\">\n {t('assist.describe.proposedBy', { model: proposal.model })}\n </p>\n <ul aria-label={t('assist.describe.proposalLabel')} className=\"space-y-3\">\n {proposal.definitions.map((definition) => (\n <li key={definition.id} className=\"rounded-lg border p-3\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-sm font-semibold\">{definition.label}</span>\n <Badge variant=\"secondary\">{t(KIND_LABEL_KEYS[definition.kind])}</Badge>\n <span className=\"font-mono text-meta text-muted-foreground\">{definition.apiKey}</span>\n </div>\n <ul className=\"mt-2 space-y-0.5 text-meta text-muted-foreground\">\n {definition.fields.map((field) => (\n <li key={field.id}>\n <span className=\"text-foreground\">{field.label}</span>{' '}\n {t('assist.describe.fieldType', { type: t(`models.dataTypes.${field.type}.name`) })}\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n </div>\n );\n};\n","import { useId } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useAssistEnabled } from '@/api/assist';\nimport { AssistButton } from '@/components/AssistButton';\nimport { AssistError } from '@/components/AssistError';\nimport { HintedLabel } from '@/components/HintedLabel';\nimport { Panel } from '@/components/Panel';\nimport { SubmitButton } from '@/components/SubmitButton';\nimport { Button } from '@/components/ui/button';\nimport { Textarea } from '@/components/ui/textarea';\nimport { SCHEMA_DESCRIPTION_MAX } from '@/constants/assist';\nimport { useSchemaLock } from '@/features/Models/hooks/useSchemaLock';\nimport { useDescribeSchema } from '../hooks/useDescribeSchema';\nimport { Proposal } from './Proposal';\n\n/** \"Describe it\" above the new content type form: a model proposes the types, a change set holds them. */\nexport const Describe = () => {\n const { t } = useTranslation();\n const id = useId();\n const enabled = useAssistEnabled();\n const { locked } = useSchemaLock();\n const describe = useDescribeSchema();\n if (!enabled) {\n return null;\n }\n return (\n <Panel title={t('assist.describe.title')} titleAs=\"h2\">\n <div className=\"space-y-3\">\n {describe.proposal ? (\n <form\n className=\"space-y-3\"\n onSubmit={(event) => {\n event.preventDefault();\n describe.addToChangeSet();\n }}\n >\n <Proposal proposal={describe.proposal} />\n <AssistError error={describe.addError} />\n <div className=\"flex flex-wrap justify-end gap-2\">\n <Button type=\"button\" variant=\"outline\" onClick={describe.discard}>\n {t('assist.discard')}\n </Button>\n <SubmitButton pending={describe.adding} pendingLabel={t('common.saving')} disabled={locked}>\n {t('assist.describe.add')}\n </SubmitButton>\n </div>\n </form>\n ) : (\n <>\n <div className=\"space-y-2\">\n <HintedLabel\n htmlFor={`${id}-description`}\n label={t('assist.describe.label')}\n hint={t('assist.describe.hint')}\n />\n <Textarea\n id={`${id}-description`}\n value={describe.description}\n rows={4}\n maxLength={SCHEMA_DESCRIPTION_MAX}\n placeholder={t('assist.describe.placeholder')}\n disabled={describe.proposing}\n onChange={(event) => describe.setDescription(event.target.value)}\n />\n </div>\n <AssistError error={describe.proposeError} />\n <div className=\"flex justify-end\">\n <AssistButton\n variant=\"outline\"\n size=\"default\"\n pending={describe.proposing}\n pendingLabel={t('assist.working')}\n disabled={describe.description.trim() === '' || locked}\n onClick={describe.run}\n >\n {t('assist.describe.run')}\n </AssistButton>\n </div>\n </>\n )}\n </div>\n </Panel>\n );\n};\n","import { linkOptions } from '@tanstack/react-router';\nimport { useTranslation } from 'react-i18next';\nimport { Describe } from './Describe';\nimport { Form } from './Form';\n\nconst KINDS = ['collection', 'singleton'] as const;\n\n/** `/content/new`: a new content type (a place for editors), live as soon as it is created. */\nexport const New = () => {\n const { t } = useTranslation();\n return (\n <Form\n title={t('contentTypes.newTitle')}\n kinds={KINDS}\n back={linkOptions({ to: '/content' })}\n backLabel={t('content.title')}\n intro={<Describe />}\n />\n );\n};\n","import { createLazyRoute } from '@tanstack/react-router';\nimport { Components } from '@/features/Components';\nimport { Builder as ComponentBuilder } from '@/features/Components/Builder';\nimport { New as NewComponent } from '@/features/Components/New';\nimport { New as NewContentType } from '@/features/Content/New';\n\n/** Creating content types and components, and Develop → Components (with @shapio/schema's validators). */\nexport const contentTypesLazyRoutes = {\n newContentType: createLazyRoute('/app/content/new')({ component: NewContentType }),\n components: createLazyRoute('/app/develop/components')({ component: Components }),\n newComponent: createLazyRoute('/app/develop/components/new')({ component: NewComponent }),\n component: createLazyRoute('/app/develop/components/$componentId')({ component: ComponentBuilder }),\n};\n"],"mappings":"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"}
|