@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Thumbnail-cjA7fSWh.js","names":["__iconData","__iconData","__iconData","i18next","FileVideo","FileAudio","__toESM","createLucideIcon","useTranslation","cn","useMe","StatusChip","instance","FileText","VARIANT_LABEL_KEYS","isKnownVariant","__iconData$3","FileHeadphone","__iconData$2","FileImage","__iconData$1","FilePlay","__iconData","File","useMediaPermissions","me","permissions","role","UNITS","formatBytes","value","bytes","unit","MEDIA_STATUS_DISPLAY","import_jsx_runtime","require_jsx_runtime","Variants","asset","label","variant","status","FileIcon","mimeType","isImage","MAX_KIND_LENGTH","fileKindLabel","extension","filename","thumbnailUrl","candidate","Thumbnail","url","className"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-headphone.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-image.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-play.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file.mjs","../../src/hooks/useMediaPermissions.ts","../../src/features/Media/helpers/formatBytes.ts","../../src/features/Media/helpers/statusDisplay.ts","../../src/features/Media/Details/Variants/index.tsx","../../src/features/Media/FileIcon/index.tsx","../../src/features/Media/helpers/fileKind.ts","../../src/features/Media/Thumbnail/index.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.49.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 __iconData = {\n name: \"file-headphone\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M4 6.835V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-.343\",\n key: \"1vfytu\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\n \"path\",\n {\n d: \"M2 19a2 2 0 0 1 4 0v1a2 2 0 0 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 0 1-4 0v-1a2 2 0 0 1 4 0\",\n key: \"1etmh7\"\n }\n ]\n ],\n aliases: [\"file-audio\", \"file-audio-2\"]\n};\n__iconData.node;\nconst FileHeadphone = createLucideIcon(__iconData);\n\nexport { __iconData, FileHeadphone as default };\n//# sourceMappingURL=file-headphone.mjs.map\n","/**\n * @license lucide-react v1.49.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 __iconData = {\n name: \"file-image\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"circle\", { cx: \"10\", cy: \"12\", r: \"2\", key: \"737tya\" }],\n [\"path\", { d: \"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22\", key: \"wt3hpn\" }]\n ]\n};\n__iconData.node;\nconst FileImage = createLucideIcon(__iconData);\n\nexport { __iconData, FileImage as default };\n//# sourceMappingURL=file-image.mjs.map\n","/**\n * @license lucide-react v1.49.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 __iconData = {\n name: \"file-play\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\n \"path\",\n {\n d: \"M15.033 13.44a.647.647 0 0 1 0 1.12l-4.065 2.352a.645.645 0 0 1-.968-.56v-4.704a.645.645 0 0 1 .967-.56z\",\n key: \"1tzo1f\"\n }\n ]\n ],\n aliases: [\"file-video\"]\n};\n__iconData.node;\nconst FilePlay = createLucideIcon(__iconData);\n\nexport { __iconData, FilePlay as default };\n//# sourceMappingURL=file-play.mjs.map\n","/**\n * @license lucide-react v1.49.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 __iconData = {\n name: \"file\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }]\n ]\n};\n__iconData.node;\nconst File = createLucideIcon(__iconData);\n\nexport { __iconData, File as default };\n//# sourceMappingURL=file.mjs.map\n","import { useMe } from '@/api/auth';\n\n/** What the signed-in admin may do in the media library (the server checks again). */\nexport const useMediaPermissions = () => {\n const me = useMe().data;\n const permissions = me?.globalPermissions ?? [];\n return {\n canWrite: permissions.includes('media.write'),\n canManage: permissions.includes('media.manage'),\n /** Only owners may delete media that content still uses. */\n isOwner: me?.roles.some((role) => role.key === 'owner') ?? false,\n };\n};\n","import { i18next } from '@/app/i18n';\n\nconst UNITS = ['byte', 'kilobyte', 'megabyte', 'gigabyte'] as const;\n\n/** `1536` → `1.5 kB`, in the admin's language. */\nexport const formatBytes = (bytes: number): string => {\n let value = bytes;\n let unit = 0;\n while (value >= 1000 && unit < UNITS.length - 1) {\n value /= 1000;\n unit += 1;\n }\n return new Intl.NumberFormat(i18next.language, {\n style: 'unit',\n unit: UNITS[unit],\n unitDisplay: 'short',\n maximumFractionDigits: unit === 0 ? 0 : 1,\n }).format(value);\n};\n","import type { MediaAssetStatus, MediaVariantStatus } from '@shapio/client';\nimport type { StatusTone } from '@/components/StatusChip';\n\ntype Display = { labelKey: string; tone: StatusTone };\n\n/** How an asset's or variant's processing state reads as a `StatusChip`. */\nexport const MEDIA_STATUS_DISPLAY = {\n pending: { labelKey: 'media.status.pending', tone: 'progress' },\n processing: { labelKey: 'media.status.processing', tone: 'progress' },\n ready: { labelKey: 'media.status.ready', tone: 'success' },\n failed: { labelKey: 'media.status.failed', tone: 'danger' },\n} as const satisfies Record<MediaAssetStatus | MediaVariantStatus, Display>;\n","import type { MediaAsset } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { StatusChip } from '@/components/StatusChip';\nimport { isKnownVariant, VARIANT_LABEL_KEYS } from '../../constants';\nimport { formatBytes } from '../../helpers/formatBytes';\nimport { MEDIA_STATUS_DISPLAY } from '../../helpers/statusDisplay';\n\ntype VariantsProps = { asset: MediaAsset };\n\n/** Generated sizes and their status (made in the background after upload). */\nexport const Variants = ({ asset }: VariantsProps) => {\n const { t } = useTranslation();\n if (asset.variants.length === 0) {\n return (\n <p className=\"text-sm text-muted-foreground\">\n {asset.status === 'processing' ? t('media.variants.processing') : t('media.variants.none')}\n </p>\n );\n }\n return (\n <ul className=\"divide-y rounded-lg border\">\n {asset.variants.map((variant) => {\n const label = isKnownVariant(variant.name) ? t(VARIANT_LABEL_KEYS[variant.name]) : variant.name;\n const status = MEDIA_STATUS_DISPLAY[variant.status];\n return (\n <li key={variant.name} className=\"flex min-w-0 items-center gap-3 px-3 py-2\">\n <span className=\"min-w-0 flex-1\">\n {variant.url ? (\n <a\n href={variant.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"rounded-sm text-sm font-medium text-link underline-offset-4 outline-none hover:underline focus-visible:ring-[3px] focus-visible:ring-ring/50\"\n >\n {label}\n </a>\n ) : (\n <span className=\"text-sm font-medium\">{label}</span>\n )}\n <span className=\"block truncate text-meta text-muted-foreground\">\n {variant.width && variant.height\n ? t('media.dimensions', { width: variant.width, height: variant.height })\n : null}\n {variant.sizeBytes ? ` · ${formatBytes(variant.sizeBytes)}` : null}\n </span>\n </span>\n <StatusChip tone={status.tone} label={t(status.labelKey)} size=\"sm\" />\n </li>\n );\n })}\n </ul>\n );\n};\n","import { File, FileAudio, FileImage, FileText, FileVideo } from 'lucide-react';\n\ntype FileIconProps = { mimeType: string; className?: string };\n\n/** An icon for files without a preview. Decorative: the file's name or type is always shown beside it. */\nexport const FileIcon = ({ mimeType, className }: FileIconProps) => {\n if (mimeType.startsWith('image/')) {\n return <FileImage aria-hidden=\"true\" className={className} />;\n }\n if (mimeType.startsWith('video/')) {\n return <FileVideo aria-hidden=\"true\" className={className} />;\n }\n if (mimeType.startsWith('audio/')) {\n return <FileAudio aria-hidden=\"true\" className={className} />;\n }\n if (mimeType === 'application/pdf' || mimeType.startsWith('text/')) {\n return <FileText aria-hidden=\"true\" className={className} />;\n }\n return <File aria-hidden=\"true\" className={className} />;\n};\n","export const isImage = (mimeType: string) => mimeType.startsWith('image/');\n\nconst MAX_KIND_LENGTH = 5;\n\n/**\n * A short format code for a file (\"PNG\", \"PDF\"): the file name's extension, else the MIME subtype. A code,\n * not prose, so it is not translated.\n */\nexport const fileKindLabel = (filename: string, mimeType: string): string => {\n const extension = /\\.([a-z0-9]+)$/i.exec(filename)?.[1];\n if (extension && extension.length <= MAX_KIND_LENGTH) {\n return extension.toUpperCase();\n }\n const subtype = mimeType.split('/')[1]?.split(/[.+;-]/)[0] ?? '';\n return subtype.toUpperCase();\n};\n","import type { MediaAsset } from '@shapio/client';\nimport { cn } from '@/helpers/cn';\nimport { FileIcon } from '../FileIcon';\nimport { isImage } from '../helpers/fileKind';\n\ntype ThumbnailProps = { asset: MediaAsset; className?: string };\n\n/** The library thumbnail: the `thumbnail` variant once ready, the original for small images and SVGs. */\nconst thumbnailUrl = (asset: MediaAsset): string | undefined => {\n const variant = asset.variants.find((candidate) => candidate.name === 'thumbnail' && candidate.url);\n if (variant?.url) {\n return variant.url;\n }\n return isImage(asset.mimeType) ? asset.url : undefined;\n};\n\n/** Decorative: the asset's name is always shown beside it, so the image has empty alt text. */\nexport const Thumbnail = ({ asset, className }: ThumbnailProps) => {\n const url = thumbnailUrl(asset);\n return (\n <div className={cn('flex items-center justify-center overflow-hidden bg-muted', className)}>\n {url ? (\n <img src={url} alt=\"\" loading=\"lazy\" decoding=\"async\" className=\"size-full object-cover\" />\n ) : (\n <FileIcon mimeType={asset.mimeType} className=\"size-8 text-muted-foreground\" />\n )}\n </div>\n );\n};\n"],"ignoreList":[0,1,2,3],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Thumbnail-BUYOr4XJ.js","names":["__iconData","__iconData","__iconData","i18next","FileVideo","FileAudio","__toESM","createLucideIcon","useTranslation","cn","useMe","StatusChip","instance","FileText","VARIANT_LABEL_KEYS","isKnownVariant","__iconData$3","FileHeadphone","__iconData$2","FileImage","__iconData$1","FilePlay","__iconData","File","useMediaPermissions","me","permissions","role","UNITS","formatBytes","value","bytes","unit","MEDIA_STATUS_DISPLAY","import_jsx_runtime","require_jsx_runtime","Variants","asset","label","variant","status","FileIcon","mimeType","isImage","MAX_KIND_LENGTH","fileKindLabel","extension","filename","thumbnailUrl","candidate","Thumbnail","url","className"],"sources":["../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-headphone.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-image.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file-play.mjs","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/file.mjs","../../src/hooks/useMediaPermissions.ts","../../src/features/Media/helpers/formatBytes.ts","../../src/features/Media/helpers/statusDisplay.ts","../../src/features/Media/Details/Variants/index.tsx","../../src/features/Media/FileIcon/index.tsx","../../src/features/Media/helpers/fileKind.ts","../../src/features/Media/Thumbnail/index.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.49.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 __iconData = {\n name: \"file-headphone\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M4 6.835V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2h-.343\",\n key: \"1vfytu\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\n \"path\",\n {\n d: \"M2 19a2 2 0 0 1 4 0v1a2 2 0 0 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 0 1-4 0v-1a2 2 0 0 1 4 0\",\n key: \"1etmh7\"\n }\n ]\n ],\n aliases: [\"file-audio\", \"file-audio-2\"]\n};\n__iconData.node;\nconst FileHeadphone = createLucideIcon(__iconData);\n\nexport { __iconData, FileHeadphone as default };\n//# sourceMappingURL=file-headphone.mjs.map\n","/**\n * @license lucide-react v1.49.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 __iconData = {\n name: \"file-image\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"circle\", { cx: \"10\", cy: \"12\", r: \"2\", key: \"737tya\" }],\n [\"path\", { d: \"m20 17-1.296-1.296a2.41 2.41 0 0 0-3.408 0L9 22\", key: \"wt3hpn\" }]\n ]\n};\n__iconData.node;\nconst FileImage = createLucideIcon(__iconData);\n\nexport { __iconData, FileImage as default };\n//# sourceMappingURL=file-image.mjs.map\n","/**\n * @license lucide-react v1.49.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 __iconData = {\n name: \"file-play\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\n \"path\",\n {\n d: \"M15.033 13.44a.647.647 0 0 1 0 1.12l-4.065 2.352a.645.645 0 0 1-.968-.56v-4.704a.645.645 0 0 1 .967-.56z\",\n key: \"1tzo1f\"\n }\n ]\n ],\n aliases: [\"file-video\"]\n};\n__iconData.node;\nconst FilePlay = createLucideIcon(__iconData);\n\nexport { __iconData, FilePlay as default };\n//# sourceMappingURL=file-play.mjs.map\n","/**\n * @license lucide-react v1.49.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 __iconData = {\n name: \"file\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }]\n ]\n};\n__iconData.node;\nconst File = createLucideIcon(__iconData);\n\nexport { __iconData, File as default };\n//# sourceMappingURL=file.mjs.map\n","import { useMe } from '@/api/auth';\n\n/** What the signed-in admin may do in the media library (the server checks again). */\nexport const useMediaPermissions = () => {\n const me = useMe().data;\n const permissions = me?.globalPermissions ?? [];\n return {\n canWrite: permissions.includes('media.write'),\n canManage: permissions.includes('media.manage'),\n /** Only owners may delete media that content still uses. */\n isOwner: me?.roles.some((role) => role.key === 'owner') ?? false,\n };\n};\n","import { i18next } from '@/app/i18n';\n\nconst UNITS = ['byte', 'kilobyte', 'megabyte', 'gigabyte'] as const;\n\n/** `1536` → `1.5 kB`, in the admin's language. */\nexport const formatBytes = (bytes: number): string => {\n let value = bytes;\n let unit = 0;\n while (value >= 1000 && unit < UNITS.length - 1) {\n value /= 1000;\n unit += 1;\n }\n return new Intl.NumberFormat(i18next.language, {\n style: 'unit',\n unit: UNITS[unit],\n unitDisplay: 'short',\n maximumFractionDigits: unit === 0 ? 0 : 1,\n }).format(value);\n};\n","import type { MediaAssetStatus, MediaVariantStatus } from '@shapio/client';\nimport type { StatusTone } from '@/components/StatusChip';\n\ntype Display = { labelKey: string; tone: StatusTone };\n\n/** How an asset's or variant's processing state reads as a `StatusChip`. */\nexport const MEDIA_STATUS_DISPLAY = {\n pending: { labelKey: 'media.status.pending', tone: 'progress' },\n processing: { labelKey: 'media.status.processing', tone: 'progress' },\n ready: { labelKey: 'media.status.ready', tone: 'success' },\n failed: { labelKey: 'media.status.failed', tone: 'danger' },\n} as const satisfies Record<MediaAssetStatus | MediaVariantStatus, Display>;\n","import type { MediaAsset } from '@shapio/client';\nimport { useTranslation } from 'react-i18next';\nimport { StatusChip } from '@/components/StatusChip';\nimport { isKnownVariant, VARIANT_LABEL_KEYS } from '../../constants';\nimport { formatBytes } from '../../helpers/formatBytes';\nimport { MEDIA_STATUS_DISPLAY } from '../../helpers/statusDisplay';\n\ntype VariantsProps = { asset: MediaAsset };\n\n/** Generated sizes and their status (made in the background after upload). */\nexport const Variants = ({ asset }: VariantsProps) => {\n const { t } = useTranslation();\n if (asset.variants.length === 0) {\n return (\n <p className=\"text-sm text-muted-foreground\">\n {asset.status === 'processing' ? t('media.variants.processing') : t('media.variants.none')}\n </p>\n );\n }\n return (\n <ul className=\"divide-y rounded-lg border\">\n {asset.variants.map((variant) => {\n const label = isKnownVariant(variant.name) ? t(VARIANT_LABEL_KEYS[variant.name]) : variant.name;\n const status = MEDIA_STATUS_DISPLAY[variant.status];\n return (\n <li key={variant.name} className=\"flex min-w-0 items-center gap-3 px-3 py-2\">\n <span className=\"min-w-0 flex-1\">\n {variant.url ? (\n <a\n href={variant.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"rounded-sm text-sm font-medium text-link underline-offset-4 outline-none hover:underline focus-visible:ring-[3px] focus-visible:ring-ring/50\"\n >\n {label}\n </a>\n ) : (\n <span className=\"text-sm font-medium\">{label}</span>\n )}\n <span className=\"block truncate text-meta text-muted-foreground\">\n {variant.width && variant.height\n ? t('media.dimensions', { width: variant.width, height: variant.height })\n : null}\n {variant.sizeBytes ? ` · ${formatBytes(variant.sizeBytes)}` : null}\n </span>\n </span>\n <StatusChip tone={status.tone} label={t(status.labelKey)} size=\"sm\" />\n </li>\n );\n })}\n </ul>\n );\n};\n","import { File, FileAudio, FileImage, FileText, FileVideo } from 'lucide-react';\n\ntype FileIconProps = { mimeType: string; className?: string };\n\n/** An icon for files without a preview. Decorative: the file's name or type is always shown beside it. */\nexport const FileIcon = ({ mimeType, className }: FileIconProps) => {\n if (mimeType.startsWith('image/')) {\n return <FileImage aria-hidden=\"true\" className={className} />;\n }\n if (mimeType.startsWith('video/')) {\n return <FileVideo aria-hidden=\"true\" className={className} />;\n }\n if (mimeType.startsWith('audio/')) {\n return <FileAudio aria-hidden=\"true\" className={className} />;\n }\n if (mimeType === 'application/pdf' || mimeType.startsWith('text/')) {\n return <FileText aria-hidden=\"true\" className={className} />;\n }\n return <File aria-hidden=\"true\" className={className} />;\n};\n","export const isImage = (mimeType: string) => mimeType.startsWith('image/');\n\nconst MAX_KIND_LENGTH = 5;\n\n/**\n * A short format code for a file (\"PNG\", \"PDF\"): the file name's extension, else the MIME subtype. A code,\n * not prose, so it is not translated.\n */\nexport const fileKindLabel = (filename: string, mimeType: string): string => {\n const extension = /\\.([a-z0-9]+)$/i.exec(filename)?.[1];\n if (extension && extension.length <= MAX_KIND_LENGTH) {\n return extension.toUpperCase();\n }\n const subtype = mimeType.split('/')[1]?.split(/[.+;-]/)[0] ?? '';\n return subtype.toUpperCase();\n};\n","import type { MediaAsset } from '@shapio/client';\nimport { cn } from '@/helpers/cn';\nimport { FileIcon } from '../FileIcon';\nimport { isImage } from '../helpers/fileKind';\n\ntype ThumbnailProps = { asset: MediaAsset; className?: string };\n\n/** The library thumbnail: the `thumbnail` variant once ready, the original for small images and SVGs. */\nconst thumbnailUrl = (asset: MediaAsset): string | undefined => {\n const variant = asset.variants.find((candidate) => candidate.name === 'thumbnail' && candidate.url);\n if (variant?.url) {\n return variant.url;\n }\n return isImage(asset.mimeType) ? asset.url : undefined;\n};\n\n/** Decorative: the asset's name is always shown beside it, so the image has empty alt text. */\nexport const Thumbnail = ({ asset, className }: ThumbnailProps) => {\n const url = thumbnailUrl(asset);\n return (\n <div className={cn('flex items-center justify-center overflow-hidden bg-muted', className)}>\n {url ? (\n <img src={url} alt=\"\" loading=\"lazy\" decoding=\"async\" className=\"size-full object-cover\" />\n ) : (\n <FileIcon mimeType={asset.mimeType} className=\"size-8 text-muted-foreground\" />\n )}\n </div>\n );\n};\n"],"ignoreList":[0,1,2,3],"mappings":"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"}
|
package/dist/admin/assets/{UnsavedChangesGuard-B57D0278.js → UnsavedChangesGuard-BfzHgUkF.js}
RENAMED
|
@@ -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{D as i}from"./auth-YVfK3SxF.js";import{t as a}from"./ConfirmDialog-
|
|
2
|
-
//# sourceMappingURL=UnsavedChangesGuard-
|
|
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{D as i}from"./auth-YVfK3SxF.js";import{t as a}from"./ConfirmDialog-HS8Gc2t3.js";var o=e(t(),1);function s(e,t){if(e===void 0)return{shouldBlockFn:()=>!0,withResolver:!1};if(`shouldBlockFn`in e)return e;if(typeof e==`function`){let n=!!(t??!0);return{shouldBlockFn:async()=>n?await e():!1,enableBeforeUnload:n,withResolver:!1}}let n=!!(e.condition??!0),r=e.blockerFn;return{shouldBlockFn:async()=>n&&r!==void 0?await r():n,enableBeforeUnload:n,withResolver:r===void 0}}function c(e,t){let{shouldBlockFn:n,enableBeforeUnload:r=!0,disabled:a=!1,withResolver:c=!1}=s(e,t),l=i(),{history:u}=l,[d,f]=o.useState({status:`idle`,current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0});return o.useEffect(()=>a?void 0:u.block({blockerFn:async e=>{function t(e){let t=l.parseLocation(e),[,n,r]=l.getMatchedRoutes(t.pathname);return r===void 0?{routeId:`__notFound__`,fullPath:t.pathname,pathname:t.pathname,params:n,search:l.options.parseSearch(e.search)}:{routeId:r.id,fullPath:r.fullPath,pathname:t.pathname,params:n,search:l.options.parseSearch(e.search)}}let r=t(e.currentLocation),i=t(e.nextLocation);if(r.routeId===`__notFound__`&&i.routeId!==`__notFound__`)return!1;let a=await n({action:e.action,current:r,next:i});if(!c)return a;if(!a)return!1;let o=await new Promise(t=>{f({status:`blocked`,current:r,next:i,action:e.action,proceed:()=>t(!1),reset:()=>t(!0)})});return f({status:`idle`,current:void 0,next:void 0,action:void 0,proceed:void 0,reset:void 0}),o},enableBeforeUnload:r}),[n,r,a,c,u,l]),d}var l=e(n(),1),u=({when:e,shouldBlock:t,title:n,description:i,stayLabel:o,leaveLabel:s})=>{let{t:u}=r(),d=c({shouldBlockFn:({current:n,next:r})=>e&&(t?.({currentPath:n.pathname,nextPath:r.pathname})??!0),enableBeforeUnload:()=>e,withResolver:!0});return(0,l.jsx)(a,{open:d.status===`blocked`,onOpenChange:e=>{!e&&d.status===`blocked`&&d.reset()},title:n??u(`unsaved.title`),description:i??u(`unsaved.description`),cancelLabel:o??u(`unsaved.stay`),confirmLabel:s??u(`unsaved.leave`),destructive:!0,onConfirm:()=>d.proceed?.()})};export{u as t};
|
|
2
|
+
//# sourceMappingURL=UnsavedChangesGuard-BfzHgUkF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnsavedChangesGuard-
|
|
1
|
+
{"version":3,"file":"UnsavedChangesGuard-BfzHgUkF.js","names":["__toESM","require_jsx_runtime","useTranslation","useRouter","ConfirmDialog","import_react","require_react","_resolveBlockerOpts","opts","shouldBlock","condition","fn","useBlocker","router","resolver","setResolver","disabled","history","getLocation","parsedLocation","location","rawParams","foundRoute","current","blockerFnArgs","next","shouldBlockFn","withResolver","canNavigateAsync","resolve","enableBeforeUnload","import_jsx_runtime","UnsavedChangesGuard","blocker","when","open","title","t","description","stayLabel","leaveLabel"],"sources":["../../../../node_modules/.pnpm/@tanstack+react-router@1.170.41_react-dom@19.3.0_react@19.3.0__react@19.3.0/node_modules/@tanstack/react-router/dist/esm/useBlocker.js","../../src/components/UnsavedChangesGuard/index.tsx"],"sourcesContent":["\"use client\";\nimport { useRouter } from \"./useRouter.js\";\nimport * as React$1 from \"react\";\n//#region src/useBlocker.tsx\nfunction _resolveBlockerOpts(opts, condition) {\n\tif (opts === void 0) return {\n\t\tshouldBlockFn: () => true,\n\t\twithResolver: false\n\t};\n\tif (\"shouldBlockFn\" in opts) return opts;\n\tif (typeof opts === \"function\") {\n\t\tconst shouldBlock = Boolean(condition ?? true);\n\t\tconst _customBlockerFn = async () => {\n\t\t\tif (shouldBlock) return await opts();\n\t\t\treturn false;\n\t\t};\n\t\treturn {\n\t\t\tshouldBlockFn: _customBlockerFn,\n\t\t\tenableBeforeUnload: shouldBlock,\n\t\t\twithResolver: false\n\t\t};\n\t}\n\tconst shouldBlock = Boolean(opts.condition ?? true);\n\tconst fn = opts.blockerFn;\n\tconst _customBlockerFn = async () => {\n\t\tif (shouldBlock && fn !== void 0) return await fn();\n\t\treturn shouldBlock;\n\t};\n\treturn {\n\t\tshouldBlockFn: _customBlockerFn,\n\t\tenableBeforeUnload: shouldBlock,\n\t\twithResolver: fn === void 0\n\t};\n}\nfunction useBlocker(opts, condition) {\n\tconst { shouldBlockFn, enableBeforeUnload = true, disabled = false, withResolver = false } = _resolveBlockerOpts(opts, condition);\n\tconst router = useRouter();\n\tconst { history } = router;\n\tconst [resolver, setResolver] = React$1.useState({\n\t\tstatus: \"idle\",\n\t\tcurrent: void 0,\n\t\tnext: void 0,\n\t\taction: void 0,\n\t\tproceed: void 0,\n\t\treset: void 0\n\t});\n\tReact$1.useEffect(() => {\n\t\tconst blockerFnComposed = async (blockerFnArgs) => {\n\t\t\tfunction getLocation(location) {\n\t\t\t\tconst parsedLocation = router.parseLocation(location);\n\t\t\t\tconst [, rawParams, foundRoute] = router.getMatchedRoutes(parsedLocation.pathname);\n\t\t\t\tif (foundRoute === void 0) return {\n\t\t\t\t\trouteId: \"__notFound__\",\n\t\t\t\t\tfullPath: parsedLocation.pathname,\n\t\t\t\t\tpathname: parsedLocation.pathname,\n\t\t\t\t\tparams: rawParams,\n\t\t\t\t\tsearch: router.options.parseSearch(location.search)\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\trouteId: foundRoute.id,\n\t\t\t\t\tfullPath: foundRoute.fullPath,\n\t\t\t\t\tpathname: parsedLocation.pathname,\n\t\t\t\t\tparams: rawParams,\n\t\t\t\t\tsearch: router.options.parseSearch(location.search)\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst current = getLocation(blockerFnArgs.currentLocation);\n\t\t\tconst next = getLocation(blockerFnArgs.nextLocation);\n\t\t\tif (current.routeId === \"__notFound__\" && next.routeId !== \"__notFound__\") return false;\n\t\t\tconst shouldBlock = await shouldBlockFn({\n\t\t\t\taction: blockerFnArgs.action,\n\t\t\t\tcurrent,\n\t\t\t\tnext\n\t\t\t});\n\t\t\tif (!withResolver) return shouldBlock;\n\t\t\tif (!shouldBlock) return false;\n\t\t\tconst canNavigateAsync = await new Promise((resolve) => {\n\t\t\t\tsetResolver({\n\t\t\t\t\tstatus: \"blocked\",\n\t\t\t\t\tcurrent,\n\t\t\t\t\tnext,\n\t\t\t\t\taction: blockerFnArgs.action,\n\t\t\t\t\tproceed: () => resolve(false),\n\t\t\t\t\treset: () => resolve(true)\n\t\t\t\t});\n\t\t\t});\n\t\t\tsetResolver({\n\t\t\t\tstatus: \"idle\",\n\t\t\t\tcurrent: void 0,\n\t\t\t\tnext: void 0,\n\t\t\t\taction: void 0,\n\t\t\t\tproceed: void 0,\n\t\t\t\treset: void 0\n\t\t\t});\n\t\t\treturn canNavigateAsync;\n\t\t};\n\t\treturn disabled ? void 0 : history.block({\n\t\t\tblockerFn: blockerFnComposed,\n\t\t\tenableBeforeUnload\n\t\t});\n\t}, [\n\t\tshouldBlockFn,\n\t\tenableBeforeUnload,\n\t\tdisabled,\n\t\twithResolver,\n\t\thistory,\n\t\trouter\n\t]);\n\treturn resolver;\n}\nvar _resolvePromptBlockerArgs = (props) => {\n\tif (\"shouldBlockFn\" in props) return { ...props };\n\tconst shouldBlock = Boolean(props.condition ?? true);\n\tconst fn = props.blockerFn;\n\tconst _customBlockerFn = async () => {\n\t\tif (shouldBlock && fn !== void 0) return await fn();\n\t\treturn shouldBlock;\n\t};\n\treturn {\n\t\tshouldBlockFn: _customBlockerFn,\n\t\tenableBeforeUnload: shouldBlock,\n\t\twithResolver: fn === void 0\n\t};\n};\nfunction Block(opts) {\n\tconst { children, ...rest } = opts;\n\tconst resolver = useBlocker(_resolvePromptBlockerArgs(rest));\n\treturn children ? typeof children === \"function\" ? children(resolver) : children : null;\n}\n//#endregion\nexport { Block, useBlocker };\n\n//# sourceMappingURL=useBlocker.js.map","import { useBlocker } from '@tanstack/react-router';\nimport { useTranslation } from 'react-i18next';\nimport { ConfirmDialog } from '../ConfirmDialog';\n\n/** A navigation the guard may let through: the pathnames it goes from and to. */\nexport type GuardedNavigation = { currentPath: string; nextPath: string };\n\ntype UnsavedChangesGuardProps = {\n when: boolean;\n /**\n * While `when`, which navigations ask (default: all). E.g. a screen whose edits survive a search-param\n * change asks only when the path changes. Reloading or closing the page always warns.\n */\n shouldBlock?: (navigation: GuardedNavigation) => boolean;\n /** The question; defaults to \"Discard unsaved changes?\" (and its description and buttons). */\n title?: string;\n description?: string;\n /** The button that stays on the page. */\n stayLabel?: string;\n /** The button that leaves. */\n leaveLabel?: string;\n};\n\n/**\n * Dirty-state protection: while `when` is true, in-app navigation asks before discarding edits and the\n * browser warns on reload/close.\n */\nexport const UnsavedChangesGuard = ({\n when,\n shouldBlock,\n title,\n description,\n stayLabel,\n leaveLabel,\n}: UnsavedChangesGuardProps) => {\n const { t } = useTranslation();\n const blocker = useBlocker({\n shouldBlockFn: ({ current, next }) =>\n when && (shouldBlock?.({ currentPath: current.pathname, nextPath: next.pathname }) ?? true),\n enableBeforeUnload: () => when,\n withResolver: true,\n });\n return (\n <ConfirmDialog\n open={blocker.status === 'blocked'}\n onOpenChange={(open) => {\n if (!open && blocker.status === 'blocked') {\n blocker.reset();\n }\n }}\n title={title ?? t('unsaved.title')}\n description={description ?? t('unsaved.description')}\n cancelLabel={stayLabel ?? t('unsaved.stay')}\n confirmLabel={leaveLabel ?? t('unsaved.leave')}\n destructive\n onConfirm={() => blocker.proceed?.()}\n />\n );\n};\n"],"ignoreList":[0],"mappings":"+QAIA,SAASO,EAAoB,EAAM,EAAW,CAC7C,GAAIC,IAAS,IAAK,GAAG,MAAO,CAC3B,kBAAqB,GACrB,aAAc,EACf,EACA,GAAI,kBAAmBA,EAAM,OAAOA,EACpC,GAAI,OAAOA,GAAS,WAAY,CAC/B,IAAMC,EAAc,GAAQC,GAAa,IAKzC,MAAO,CACN,cAAe,SAJXD,EAAoB,MAAMD,EAAK,EAC5B,GAIP,mBAAoBC,EACpB,aAAc,EACf,CACD,CACA,IAAMA,EAAc,GAAQD,EAAK,WAAa,IACxCG,EAAKH,EAAK,UAKhB,MAAO,CACN,cAAe,SAJXC,GAAeE,IAAO,IAAK,GAAU,MAAMA,EAAG,EAC3CF,EAIP,mBAAoBA,EACpB,aAAcE,IAAO,IAAK,EAC3B,CACD,CACA,SAASC,EAAW,EAAM,EAAW,CACpC,GAAM,CAAE,gBAAe,qBAAqB,GAAM,WAAW,GAAO,eAAe,IAAUL,EAAoBC,EAAME,CAAS,EAC1HG,EAASV,EAAU,EACnB,CAAE,WAAYU,EACd,CAACC,EAAUC,GAAAV,EAAuB,SAAS,CAChD,OAAQ,OACR,QAAS,IAAK,GACd,KAAM,IAAK,GACX,OAAQ,IAAK,GACb,QAAS,IAAK,GACd,MAAO,IAAK,EACb,CAAC,EA+DD,OA9DAA,EAAQ,cAkDAW,EAAW,IAAK,GAAIC,EAAQ,MAAM,CACxC,UAAW,KAlDqB,IAAkB,CAClD,SAASC,EAAY,EAAU,CAC9B,IAAMC,EAAiBN,EAAO,cAAcO,CAAQ,EAC9C,EAAGC,EAAWC,GAAcT,EAAO,iBAAiBM,EAAe,QAAQ,EAQjF,OAPIG,IAAe,IAAK,GAAU,CACjC,QAAS,eACT,SAAUH,EAAe,SACzB,SAAUA,EAAe,SACzB,OAAQE,EACR,OAAQR,EAAO,QAAQ,YAAYO,EAAS,MAAM,CACnD,EACO,CACN,QAASE,EAAW,GACpB,SAAUA,EAAW,SACrB,SAAUH,EAAe,SACzB,OAAQE,EACR,OAAQR,EAAO,QAAQ,YAAYO,EAAS,MAAM,CACnD,CACD,CACA,IAAMG,EAAUL,EAAYM,EAAc,eAAe,EACnDC,EAAOP,EAAYM,EAAc,YAAY,EACnD,GAAID,EAAQ,UAAY,gBAAkBE,EAAK,UAAY,eAAgB,MAAO,GAClF,IAAMhB,EAAc,MAAMiB,EAAc,CACvC,OAAQF,EAAc,OACtB,UACA,MACD,CAAC,EACD,GAAI,CAACG,EAAc,OAAOlB,EAC1B,GAAI,CAACA,EAAa,MAAO,GACzB,IAAMmB,EAAmB,MAAM,IAAI,QAAS,GAAY,CACvDb,EAAY,CACX,OAAQ,UACR,UACA,OACA,OAAQS,EAAc,OACtB,YAAeK,EAAQ,EAAK,EAC5B,UAAaA,EAAQ,EAAI,CAC1B,CAAC,CACF,CAAC,EASD,OARAd,EAAY,CACX,OAAQ,OACR,QAAS,IAAK,GACd,KAAM,IAAK,GACX,OAAQ,IAAK,GACb,QAAS,IAAK,GACd,MAAO,IAAK,EACb,CAAC,EACMa,CACR,EAGC,oBACD,CAAC,EACC,CACFF,EACAI,EACAd,EACAW,EACAV,EACAJ,CACD,CAAC,EACMC,CACR,gBClFakB,GAAuB,CAClC,OACA,cACA,QACA,cACA,YACA,gBAC8B,CAC9B,GAAM,CAAE,KAAM9B,EAAe,EACvB+B,EAAUrB,EAAW,CACzB,eAAgB,CAAE,UAAS,UACzBsB,IAASzB,IAAc,CAAE,YAAac,EAAQ,SAAU,SAAUE,EAAK,QAAS,CAAC,GAAK,IACxF,uBAA0BS,EAC1B,aAAc,EAChB,CAAC,EACD,OACE,EAAAH,EAAA,IAAA,CAAC3B,EAAD,CACE,KAAM6B,EAAQ,SAAW,UACzB,aAAe,GAAS,CAClB,CAACE,GAAQF,EAAQ,SAAW,WAC9BA,EAAQ,MAAM,CAElB,EACA,MAAOG,GAASC,EAAE,eAAe,EACjC,YAAaC,GAAeD,EAAE,qBAAqB,EACnD,YAAaE,GAAaF,EAAE,cAAc,EAC1C,aAAcG,GAAcH,EAAE,eAAe,EAC7C,YAAA,GACA,cAAiBJ,EAAQ,UAAU,CACpC,CAAA,CAEL"}
|
|
@@ -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{t as r}from"./cn-CL1YHRrS.js";import{_ as i,b as a,y as o}from"./skeleton-
|
|
2
|
-
//# sourceMappingURL=UserAvatar
|
|
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{t as r}from"./cn-CL1YHRrS.js";import{_ as i,b as a,y as o}from"./skeleton-DElTumgk.js";var s=e(t(),1),c=e(n(),1),l=Object.defineProperty,u=(e,t)=>l(e,`name`,{value:t,configurable:!0}),d=`Avatar`,[f,p]=o(d),m=[0,()=>void 0],[h,g]=f(d),_=s.forwardRef(u(function(e,t){let{__scopeAvatar:n,...r}=e,[i,o]=s.useState(`idle`),[l,u]=S();return(0,c.jsx)(h,{scope:n,imageLoadingStatus:i,setImageLoadingStatus:o,imageCount:l,setImageCount:u,children:(0,c.jsx)(a.span,{...r,ref:t})})},`Avatar`)),v=`AvatarFallback`,y=s.forwardRef(u(function(e,t){let{__scopeAvatar:n,delayMs:r,...i}=e,o=g(v,n),[l,u]=s.useState(r===void 0);return s.useEffect(()=>{if(r!==void 0){let e=window.setTimeout(()=>u(!0),r);return()=>window.clearTimeout(e)}},[r]),l&&o.imageLoadingStatus!==`loaded`?(0,c.jsx)(a.span,{...i,ref:t}):null},`AvatarFallback`));function b(e,{loadingStatus:t,setLoadingStatus:n,referrerPolicy:r,crossOrigin:a}){return i(()=>{if(!e){n(`error`);return}let t=new window.Image,i=u(e=>{let t=e.currentTarget;n(x(t))},`handleLoad`),o=u(()=>n(`error`),`handleError`);return t.addEventListener(`load`,i),t.addEventListener(`error`,o),r&&(t.referrerPolicy=r),t.crossOrigin=a??null,t.src=e,n(x(t)),()=>{t.removeEventListener(`load`,i),t.removeEventListener(`error`,o),n(`idle`)}},[e,a,r,n]),t}u(b,`useImageLoadingStatus`);function x(e){return e.complete?e.naturalWidth>0?`loaded`:`error`:`loading`}u(x,`getImageLoadingStatus`);function S(){return m}u(S,`useImageCount`);function C(e){}u(C,`useUpdateImageCount`);function w({className:e,size:t=`default`,...n}){return(0,c.jsx)(_,{"data-slot":`avatar`,"data-size":t,className:r(`group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6`,e),...n})}function T({className:e,...t}){return(0,c.jsx)(y,{"data-slot":`avatar-fallback`,className:r(`flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs`,e),...t})}function E({className:e,...t}){return(0,c.jsx)(`div`,{"data-slot":`avatar-group`,className:r(`group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background`,e),...t})}function D({className:e,...t}){return(0,c.jsx)(`div`,{"data-slot":`avatar-group-count`,className:r(`relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3`,e),...t})}var O=e=>{let t=e.replace(/@.*$/,``).split(/[\s._-]+/).filter(Boolean);return(t.length>1?`${t[0]?.[0]??``}${t.at(-1)?.[0]??``}`:t[0]?.[0]??`?`).toUpperCase()},k=({name:e,size:t=`default`,className:n})=>(0,c.jsx)(w,{size:t,"aria-hidden":`true`,className:n,children:(0,c.jsx)(T,{className:`text-xs font-semibold group-data-[size=sm]/avatar:text-2xs`,children:O(e)})});export{E as a,T as i,O as n,D as o,w as r,k as t};
|
|
2
|
+
//# sourceMappingURL=UserAvatar-DNOWhSWS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserAvatar--pMv2i3c.js","names":["Avatar","AvatarFallback","AvatarPrimitive.Root","AvatarPrimitive.Fallback","__toESM","require_jsx_runtime","cn","useLayoutEffect2","Primitive","createContextScope","import_react","require_react","import_jsx_runtime","__defProp","__name","target","AVATAR_NAME","createAvatarContext","createAvatarScope","STATIC_IMAGE_COUNT_STATE","AvatarProvider","useAvatarContext","Avatar$1","avatarProps","props","imageLoadingStatus","setImageLoadingStatus","imageCount","setImageCount","useImageCount","__scopeAvatar","forwardedRef","FALLBACK_NAME","AvatarFallback$1","fallbackProps","context","canRender","setCanRender","delayMs","timerId","useImageLoadingStatus","src","setLoadingStatus","image","handleLoad","image2","event","getImageLoadingStatus","handleError","referrerPolicy","crossOrigin","loadingStatus","state","useUpdateImageCount","Avatar","size","className","AvatarFallback","AvatarGroup","AvatarGroupCount","initialsOf","words","name","UserAvatar"],"sources":["../../../../node_modules/.pnpm/@radix-ui+react-avatar@1.2.6_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@_7afe6898fb0821d3b48e9a7a5e9acf8a/node_modules/@radix-ui/react-avatar/dist/index.mjs","../../src/components/ui/avatar.tsx","../../src/helpers/initials.ts","../../src/components/UserAvatar/index.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/avatar.tsx\nimport * as React from \"react\";\nimport { IS_DEVELOPMENT } from \"@radix-ui/primitive/is-development\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AVATAR_NAME = \"Avatar\";\nvar [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\nvar STATIC_IMAGE_COUNT_STATE = [\n 0,\n () => void 0\n];\nvar [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);\nvar Avatar = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function Avatar2(props, forwardedRef) {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState(\"idle\");\n const [imageCount, setImageCount] = useImageCount();\n return /* @__PURE__ */ jsx(\n AvatarProvider,\n {\n scope: __scopeAvatar,\n imageLoadingStatus,\n setImageLoadingStatus,\n imageCount,\n setImageCount,\n children: /* @__PURE__ */ jsx(Primitive.span, { ...avatarProps, ref: forwardedRef })\n }\n );\n }, \"Avatar\")\n);\nvar IMAGE_NAME = \"AvatarImage\";\nvar AvatarImage = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function AvatarImage2(props, forwardedRef) {\n const { __scopeAvatar, src, onLoadingStatusChange, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n useUpdateImageCount(context.setImageCount);\n const imageLoadingStatus = useImageLoadingStatus(src, {\n referrerPolicy: imageProps.referrerPolicy,\n crossOrigin: imageProps.crossOrigin,\n loadingStatus: context.imageLoadingStatus,\n setLoadingStatus: context.setImageLoadingStatus\n });\n const handleLoadingStatusChange = useCallbackRef((status) => {\n onLoadingStatusChange?.(status);\n });\n const loadingStatusRef = React.useRef(imageLoadingStatus);\n useLayoutEffect(() => {\n const previousLoadingStatus = loadingStatusRef.current;\n loadingStatusRef.current = imageLoadingStatus;\n if (imageLoadingStatus !== previousLoadingStatus) {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n return imageLoadingStatus === \"loaded\" ? /* @__PURE__ */ jsx(Primitive.img, { ...imageProps, ref: forwardedRef, src }) : null;\n }, \"AvatarImage\")\n);\nvar FALLBACK_NAME = \"AvatarFallback\";\nvar AvatarFallback = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function AvatarFallback2(props, forwardedRef) {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === void 0);\n React.useEffect(() => {\n if (delayMs !== void 0) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n return canRender && context.imageLoadingStatus !== \"loaded\" ? /* @__PURE__ */ jsx(Primitive.span, { ...fallbackProps, ref: forwardedRef }) : null;\n }, \"AvatarFallback\")\n);\nfunction useImageLoadingStatus(src, {\n loadingStatus,\n setLoadingStatus,\n referrerPolicy,\n crossOrigin\n}) {\n useLayoutEffect(() => {\n if (!src) {\n setLoadingStatus(\"error\");\n return;\n }\n const image = new window.Image();\n const handleLoad = /* @__PURE__ */ __name((event) => {\n const image2 = event.currentTarget;\n setLoadingStatus(getImageLoadingStatus(image2));\n }, \"handleLoad\");\n const handleError = /* @__PURE__ */ __name(() => setLoadingStatus(\"error\"), \"handleError\");\n image.addEventListener(\"load\", handleLoad);\n image.addEventListener(\"error\", handleError);\n if (referrerPolicy) {\n image.referrerPolicy = referrerPolicy;\n }\n image.crossOrigin = crossOrigin ?? null;\n image.src = src;\n setLoadingStatus(getImageLoadingStatus(image));\n return () => {\n image.removeEventListener(\"load\", handleLoad);\n image.removeEventListener(\"error\", handleError);\n setLoadingStatus(\"idle\");\n };\n }, [src, crossOrigin, referrerPolicy, setLoadingStatus]);\n return loadingStatus;\n}\n__name(useImageLoadingStatus, \"useImageLoadingStatus\");\nfunction getImageLoadingStatus(image) {\n return image.complete ? image.naturalWidth > 0 ? \"loaded\" : \"error\" : \"loading\";\n}\n__name(getImageLoadingStatus, \"getImageLoadingStatus\");\nfunction useImageCount() {\n let state = STATIC_IMAGE_COUNT_STATE;\n if (IS_DEVELOPMENT) {\n state = React.useState(0);\n const [imageCount] = state;\n const hasWarnedRef = React.useRef(false);\n React.useEffect(() => {\n if (imageCount > 1 && !hasWarnedRef.current) {\n hasWarnedRef.current = true;\n console.warn(\n \"Avatar: Only one `Avatar.Image` component should be rendered per `Avatar.Root`, but multiple were detected. This will lead to unexpected behavior.\"\n );\n }\n }, [imageCount]);\n }\n return state;\n}\n__name(useImageCount, \"useImageCount\");\nfunction useUpdateImageCount(setImageCount) {\n if (IS_DEVELOPMENT) {\n React.useEffect(() => {\n setImageCount((imageCount) => imageCount + 1);\n return () => {\n setImageCount((imageCount) => imageCount - 1);\n };\n }, [setImageCount]);\n }\n}\n__name(useUpdateImageCount, \"useUpdateImageCount\");\nexport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n AvatarFallback as Fallback,\n AvatarImage as Image,\n Avatar as Root,\n createAvatarScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport { Avatar as AvatarPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction Avatar({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: 'default' | 'sm' | 'lg';\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n 'group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn('aspect-square size-full', className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n 'flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n 'absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground ring-2 ring-background select-none',\n 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',\n 'group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2',\n 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n 'group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroupCount({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n 'relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Avatar, AvatarImage, AvatarFallback, AvatarBadge, AvatarGroup, AvatarGroupCount };\n","/** Up to two initials for an avatar: \"Ada Lovelace\" → \"AL\", \"ada@example.com\" → \"A\". */\nexport const initialsOf = (name: string): string => {\n const words = name\n .replace(/@.*$/, '')\n .split(/[\\s._-]+/)\n .filter(Boolean);\n const initials =\n words.length > 1 ? `${words[0]?.[0] ?? ''}${words.at(-1)?.[0] ?? ''}` : (words[0]?.[0] ?? '?');\n return initials.toUpperCase();\n};\n","import { Avatar, AvatarFallback } from '@/components/ui/avatar';\nimport { initialsOf } from '@/helpers/initials';\n\ntype UserAvatarProps = {\n /** A display name or email; up to two initials are shown. */\n name: string;\n /** sm 24px (dense tables, activity rows), default 32px (user lists). */\n size?: 'sm' | 'default';\n className?: string;\n};\n\n/** A person's initials in a circle. Decorative: the name is always shown beside it. */\nexport const UserAvatar = ({ name, size = 'default', className }: UserAvatarProps) => (\n <Avatar size={size} aria-hidden=\"true\" className={className}>\n <AvatarFallback className=\"text-xs font-semibold group-data-[size=sm]/avatar:text-2xs\">\n {initialsOf(name)}\n </AvatarFallback>\n </Avatar>\n);\n"],"ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UserAvatar-DNOWhSWS.js","names":["Avatar","AvatarFallback","AvatarPrimitive.Root","AvatarPrimitive.Fallback","__toESM","require_jsx_runtime","cn","useLayoutEffect2","Primitive","createContextScope","import_react","require_react","import_jsx_runtime","__defProp","__name","target","AVATAR_NAME","createAvatarContext","createAvatarScope","STATIC_IMAGE_COUNT_STATE","AvatarProvider","useAvatarContext","Avatar$1","avatarProps","props","imageLoadingStatus","setImageLoadingStatus","imageCount","setImageCount","useImageCount","__scopeAvatar","forwardedRef","FALLBACK_NAME","AvatarFallback$1","fallbackProps","context","canRender","setCanRender","delayMs","timerId","useImageLoadingStatus","src","setLoadingStatus","image","handleLoad","image2","event","getImageLoadingStatus","handleError","referrerPolicy","crossOrigin","loadingStatus","state","useUpdateImageCount","Avatar","size","className","AvatarFallback","AvatarGroup","AvatarGroupCount","initialsOf","words","name","UserAvatar"],"sources":["../../../../node_modules/.pnpm/@radix-ui+react-avatar@1.2.6_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react@_7afe6898fb0821d3b48e9a7a5e9acf8a/node_modules/@radix-ui/react-avatar/dist/index.mjs","../../src/components/ui/avatar.tsx","../../src/helpers/initials.ts","../../src/components/UserAvatar/index.tsx"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/avatar.tsx\nimport * as React from \"react\";\nimport { IS_DEVELOPMENT } from \"@radix-ui/primitive/is-development\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AVATAR_NAME = \"Avatar\";\nvar [createAvatarContext, createAvatarScope] = createContextScope(AVATAR_NAME);\nvar STATIC_IMAGE_COUNT_STATE = [\n 0,\n () => void 0\n];\nvar [AvatarProvider, useAvatarContext] = createAvatarContext(AVATAR_NAME);\nvar Avatar = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function Avatar2(props, forwardedRef) {\n const { __scopeAvatar, ...avatarProps } = props;\n const [imageLoadingStatus, setImageLoadingStatus] = React.useState(\"idle\");\n const [imageCount, setImageCount] = useImageCount();\n return /* @__PURE__ */ jsx(\n AvatarProvider,\n {\n scope: __scopeAvatar,\n imageLoadingStatus,\n setImageLoadingStatus,\n imageCount,\n setImageCount,\n children: /* @__PURE__ */ jsx(Primitive.span, { ...avatarProps, ref: forwardedRef })\n }\n );\n }, \"Avatar\")\n);\nvar IMAGE_NAME = \"AvatarImage\";\nvar AvatarImage = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function AvatarImage2(props, forwardedRef) {\n const { __scopeAvatar, src, onLoadingStatusChange, ...imageProps } = props;\n const context = useAvatarContext(IMAGE_NAME, __scopeAvatar);\n useUpdateImageCount(context.setImageCount);\n const imageLoadingStatus = useImageLoadingStatus(src, {\n referrerPolicy: imageProps.referrerPolicy,\n crossOrigin: imageProps.crossOrigin,\n loadingStatus: context.imageLoadingStatus,\n setLoadingStatus: context.setImageLoadingStatus\n });\n const handleLoadingStatusChange = useCallbackRef((status) => {\n onLoadingStatusChange?.(status);\n });\n const loadingStatusRef = React.useRef(imageLoadingStatus);\n useLayoutEffect(() => {\n const previousLoadingStatus = loadingStatusRef.current;\n loadingStatusRef.current = imageLoadingStatus;\n if (imageLoadingStatus !== previousLoadingStatus) {\n handleLoadingStatusChange(imageLoadingStatus);\n }\n }, [imageLoadingStatus, handleLoadingStatusChange]);\n return imageLoadingStatus === \"loaded\" ? /* @__PURE__ */ jsx(Primitive.img, { ...imageProps, ref: forwardedRef, src }) : null;\n }, \"AvatarImage\")\n);\nvar FALLBACK_NAME = \"AvatarFallback\";\nvar AvatarFallback = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function AvatarFallback2(props, forwardedRef) {\n const { __scopeAvatar, delayMs, ...fallbackProps } = props;\n const context = useAvatarContext(FALLBACK_NAME, __scopeAvatar);\n const [canRender, setCanRender] = React.useState(delayMs === void 0);\n React.useEffect(() => {\n if (delayMs !== void 0) {\n const timerId = window.setTimeout(() => setCanRender(true), delayMs);\n return () => window.clearTimeout(timerId);\n }\n }, [delayMs]);\n return canRender && context.imageLoadingStatus !== \"loaded\" ? /* @__PURE__ */ jsx(Primitive.span, { ...fallbackProps, ref: forwardedRef }) : null;\n }, \"AvatarFallback\")\n);\nfunction useImageLoadingStatus(src, {\n loadingStatus,\n setLoadingStatus,\n referrerPolicy,\n crossOrigin\n}) {\n useLayoutEffect(() => {\n if (!src) {\n setLoadingStatus(\"error\");\n return;\n }\n const image = new window.Image();\n const handleLoad = /* @__PURE__ */ __name((event) => {\n const image2 = event.currentTarget;\n setLoadingStatus(getImageLoadingStatus(image2));\n }, \"handleLoad\");\n const handleError = /* @__PURE__ */ __name(() => setLoadingStatus(\"error\"), \"handleError\");\n image.addEventListener(\"load\", handleLoad);\n image.addEventListener(\"error\", handleError);\n if (referrerPolicy) {\n image.referrerPolicy = referrerPolicy;\n }\n image.crossOrigin = crossOrigin ?? null;\n image.src = src;\n setLoadingStatus(getImageLoadingStatus(image));\n return () => {\n image.removeEventListener(\"load\", handleLoad);\n image.removeEventListener(\"error\", handleError);\n setLoadingStatus(\"idle\");\n };\n }, [src, crossOrigin, referrerPolicy, setLoadingStatus]);\n return loadingStatus;\n}\n__name(useImageLoadingStatus, \"useImageLoadingStatus\");\nfunction getImageLoadingStatus(image) {\n return image.complete ? image.naturalWidth > 0 ? \"loaded\" : \"error\" : \"loading\";\n}\n__name(getImageLoadingStatus, \"getImageLoadingStatus\");\nfunction useImageCount() {\n let state = STATIC_IMAGE_COUNT_STATE;\n if (IS_DEVELOPMENT) {\n state = React.useState(0);\n const [imageCount] = state;\n const hasWarnedRef = React.useRef(false);\n React.useEffect(() => {\n if (imageCount > 1 && !hasWarnedRef.current) {\n hasWarnedRef.current = true;\n console.warn(\n \"Avatar: Only one `Avatar.Image` component should be rendered per `Avatar.Root`, but multiple were detected. This will lead to unexpected behavior.\"\n );\n }\n }, [imageCount]);\n }\n return state;\n}\n__name(useImageCount, \"useImageCount\");\nfunction useUpdateImageCount(setImageCount) {\n if (IS_DEVELOPMENT) {\n React.useEffect(() => {\n setImageCount((imageCount) => imageCount + 1);\n return () => {\n setImageCount((imageCount) => imageCount - 1);\n };\n }, [setImageCount]);\n }\n}\n__name(useUpdateImageCount, \"useUpdateImageCount\");\nexport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n AvatarFallback as Fallback,\n AvatarImage as Image,\n Avatar as Root,\n createAvatarScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport { Avatar as AvatarPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nfunction Avatar({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: 'default' | 'sm' | 'lg';\n}) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n 'group/avatar relative flex size-8 shrink-0 overflow-hidden rounded-full select-none data-[size=lg]:size-10 data-[size=sm]:size-6',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarImage({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn('aspect-square size-full', className)}\n {...props}\n />\n );\n}\n\nfunction AvatarFallback({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n 'flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarBadge({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"avatar-badge\"\n className={cn(\n 'absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground ring-2 ring-background select-none',\n 'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',\n 'group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2',\n 'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"avatar-group\"\n className={cn(\n 'group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction AvatarGroupCount({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"avatar-group-count\"\n className={cn(\n 'relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Avatar, AvatarImage, AvatarFallback, AvatarBadge, AvatarGroup, AvatarGroupCount };\n","/** Up to two initials for an avatar: \"Ada Lovelace\" → \"AL\", \"ada@example.com\" → \"A\". */\nexport const initialsOf = (name: string): string => {\n const words = name\n .replace(/@.*$/, '')\n .split(/[\\s._-]+/)\n .filter(Boolean);\n const initials =\n words.length > 1 ? `${words[0]?.[0] ?? ''}${words.at(-1)?.[0] ?? ''}` : (words[0]?.[0] ?? '?');\n return initials.toUpperCase();\n};\n","import { Avatar, AvatarFallback } from '@/components/ui/avatar';\nimport { initialsOf } from '@/helpers/initials';\n\ntype UserAvatarProps = {\n /** A display name or email; up to two initials are shown. */\n name: string;\n /** sm 24px (dense tables, activity rows), default 32px (user lists). */\n size?: 'sm' | 'default';\n className?: string;\n};\n\n/** A person's initials in a circle. Decorative: the name is always shown beside it. */\nexport const UserAvatar = ({ name, size = 'default', className }: UserAvatarProps) => (\n <Avatar size={size} aria-hidden=\"true\" className={className}>\n <AvatarFallback className=\"text-xs font-semibold group-data-[size=sm]/avatar:text-2xs\">\n {initialsOf(name)}\n </AvatarFallback>\n </Avatar>\n);\n"],"ignoreList":[0],"mappings":"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"}
|
|
@@ -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{i as r,j as i,r as a,t as o}from"./cn-CL1YHRrS.js";import{D as s,E as c,Q as l,_ as u,x as d}from"./auth-YVfK3SxF.js";import{C as f,E as p,S as m,T as h,_ as g,b as _,c as ee,d as te,f as ne,g as re,h as v,i as y,k as ie,l as ae,m as b,o as oe,s as se,t as ce,u as le,v as x,y as ue}from"./skeleton-B5GJgv7y.js";function S(){throw Error(`Invariant failed`)}var C=e(t(),1),w=C.createContext(void 0),de=C.createContext(void 0),T={};function E(e,t){let n=C.useRef();return r=>{let i=e?.select?e.select(r):r;return e?.structuralSharing??t.options.defaultStructuralSharing?n.current=l(n.current,i):i}}function D(e){let t=s(),n=C.useContext(e.from?de:w),r=e.from??n,i=t.stores.getMatchStore(r),a=E(e,t),o=c(i,e=>e?a(e):T);if(o!==T)return o;(e.shouldThrow??!0)&&S()}function fe(e){return D({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}var O={name:`lock`,size:24,node:[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]};O.node;var k=r(O),pe={name:`triangle-alert`,size:24,node:[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]],aliases:[`alert-triangle`]};pe.node;var me=r(pe),A={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};A.node;var j=r(A),M=e(n(),1),he=Object.defineProperty,N=(e,t)=>he(e,`name`,{value:t,configurable:!0}),P=`Dialog`,[F,ge]=ue(P),[_e,I]=F(P),L=N(e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=C.useRef(null),c=C.useRef(null),[l,u]=re({prop:r,defaultProp:i??!1,onChange:a,caller:P}),[d,f]=C.useState(0),[p,m]=C.useState(0);return(0,M.jsx)(_e,{scope:t,triggerRef:s,contentRef:c,contentId:b(),titleId:b(),descriptionId:b(),titlePresent:d>0,descriptionPresent:p>0,setTitleCount:f,setDescriptionCount:m,open:l,onOpenChange:u,onOpenToggle:C.useCallback(()=>u(e=>!e),[u]),modal:o,children:n})},`Dialog`),ve=`DialogTrigger`,R=C.forwardRef(N(function(e,t){let{__scopeDialog:n,...r}=e,i=I(ve,n),a=h(t,i.triggerRef);return(0,M.jsx)(_.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":X(i.open),...r,ref:a,onClick:x(e.onClick,i.onOpenToggle)})},`DialogTrigger`)),z=`DialogPortal`,[ye,B]=F(z,{forceMount:void 0}),V=N(e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=I(z,t);return(0,M.jsx)(ye,{scope:t,forceMount:n,children:C.Children.map(r,e=>(0,M.jsx)(v,{present:n||a.open,children:(0,M.jsx)(ae,{asChild:!0,container:i,children:e})}))})},`DialogPortal`),H=`DialogOverlay`,U=C.forwardRef(N(function(e,t){let n=B(H,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=I(H,e.__scopeDialog);return a.modal?(0,M.jsx)(v,{present:r||a.open,children:(0,M.jsx)(xe,{...i,ref:t})}):null},`DialogOverlay`)),be=f(`DialogOverlay.RemoveScroll`),xe=C.forwardRef(N(function(e,t){let{__scopeDialog:n,...r}=e,i=I(H,n),a=ne(),o=h(t,a);return(0,M.jsx)(se,{as:be,allowPinchZoom:!0,shards:[i.contentRef],children:(0,M.jsx)(_.div,{"data-state":X(i.open),...r,ref:o,style:{pointerEvents:`auto`,...r.style}})})},`DialogOverlayImpl`)),W=`DialogContent`,G=C.forwardRef(N(function(e,t){let n=B(W,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=I(W,e.__scopeDialog);return(0,M.jsx)(v,{present:r||a.open,children:a.modal?(0,M.jsx)(Se,{...i,ref:t}):(0,M.jsx)(Ce,{...i,ref:t})})},`DialogContent`)),Se=C.forwardRef(N(function(e,t){let n=I(W,e.__scopeDialog),r=C.useRef(null),i=h(t,n.contentRef,r);return C.useEffect(()=>{let e=r.current;if(e)return oe(e)},[]),(0,M.jsx)(K,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,onCloseAutoFocus:x(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:x(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:x(e.onFocusOutside,e=>e.preventDefault())})},`DialogContentModal`)),Ce=C.forwardRef(N(function(e,t){let n=I(W,e.__scopeDialog),r=C.useRef(!1),i=C.useRef(!1);return(0,M.jsx)(K,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})},`DialogContentNonModal`)),K=C.forwardRef(N(function(e,t){let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,...o}=e,s=I(W,n);return ee(),(0,M.jsx)(M.Fragment,{children:(0,M.jsx)(le,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,M.jsx)(te,{role:`dialog`,id:s.contentId,"aria-describedby":s.descriptionPresent?s.descriptionId:void 0,"aria-labelledby":s.titlePresent?s.titleId:void 0,"data-state":X(s.open),...o,ref:t,deferPointerDownOutside:!0,onDismiss:()=>s.onOpenChange(!1)})})})},`DialogContentImpl`)),we=`DialogTitle`,q=C.forwardRef(N(function(e,t){let{__scopeDialog:n,...r}=e,i=I(we,n),{setTitleCount:a}=i;return g(()=>(a(e=>e+1),()=>a(e=>e-1)),[a]),(0,M.jsx)(_.h2,{id:i.titleId,...r,ref:t})},`DialogTitle`)),Te=`DialogDescription`,J=C.forwardRef(N(function(e,t){let{__scopeDialog:n,...r}=e,i=I(Te,n),{setDescriptionCount:a}=i;return g(()=>(a(e=>e+1),()=>a(e=>e-1)),[a]),(0,M.jsx)(_.p,{id:i.descriptionId,...r,ref:t})},`DialogDescription`)),Ee=`DialogClose`,Y=C.forwardRef(N(function(e,t){let{__scopeDialog:n,...r}=e,i=I(Ee,n);return(0,M.jsx)(_.button,{type:`button`,...r,ref:t,onClick:x(e.onClick,()=>i.onOpenChange(!1))})},`DialogClose`));function X(e){return e?`open`:`closed`}N(X,`getState`);var De=4,Oe=({rows:e=De,className:t})=>{let{t:n}=i();return(0,M.jsxs)(`div`,{role:`status`,"aria-live":`polite`,className:o(`space-y-3`,t),children:[(0,M.jsx)(`span`,{className:`sr-only`,children:n(`common.loading`)}),Array.from({length:e},(e,t)=>(0,M.jsx)(ce,{className:`h-10 w-full`},t))]})},ke=({pending:e,pendingLabel:t,children:n,disabled:r,...i})=>(0,M.jsx)(y,{type:`submit`,disabled:e||r,"aria-busy":e||void 0,...i,children:e?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(a,{className:`animate-spin`,"aria-hidden":`true`}),t]}):n}),Ae=e=>{if(!(e instanceof HTMLElement)||e===document.body)return null;let t=e.closest(`[role="menu"]`),n=t?.id?document.querySelector(`[aria-controls="${CSS.escape(t.id)}"]`):null;return n instanceof HTMLElement?n:e},Z=(e,t)=>{let n=(0,C.useRef)(null);return{onOpenAutoFocus:(0,C.useCallback)(t=>{n.current=Ae(document.activeElement),e?.(t)},[e]),onCloseAutoFocus:(0,C.useCallback)(e=>{t?.(e);let r=n.current;n.current=null,!e.defaultPrevented&&r?.isConnected&&(r.focus({preventScroll:!0}),document.activeElement===r&&e.preventDefault())},[t])}};function je({...e}){return(0,M.jsx)(L,{"data-slot":`sheet`,...e})}function Me({...e}){return(0,M.jsx)(R,{"data-slot":`sheet-trigger`,...e})}function Ne({...e}){return(0,M.jsx)(V,{"data-slot":`sheet-portal`,...e})}function Pe({className:e,...t}){return(0,M.jsx)(U,{"data-slot":`sheet-overlay`,className:o(`fixed inset-0 z-50 bg-overlay/40 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0`,e),...t})}var Fe=p(`fixed z-50 flex flex-col gap-0 bg-card shadow-lg transition ease-in-out data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:animate-in data-[state=open]:duration-500`,{variants:{side:{right:`inset-y-0 right-0 h-full w-full border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right`,left:`inset-y-0 left-0 h-full w-full border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left`,top:`inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top`,bottom:`inset-x-0 bottom-0 h-auto max-h-[85dvh] rounded-t-xl border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom`},size:{xs:``,sm:``,md:``,lg:``}},compoundVariants:[{side:[`left`,`right`],size:`xs`,className:`sm:max-w-90`},{side:[`left`,`right`],size:`sm`,className:`sm:max-w-100`},{side:[`left`,`right`],size:`md`,className:`sm:max-w-140`},{side:[`left`,`right`],size:`lg`,className:`sm:max-w-180`}],defaultVariants:{side:`right`,size:`sm`}});function Ie({className:e,children:t,side:n=`right`,size:r=`sm`,showCloseButton:a=!0,nonModal:s=!1,onOpenAutoFocus:c,onCloseAutoFocus:l,onInteractOutside:u,...d}){let f=Z(c,l),{t:p}=i();return(0,M.jsxs)(Ne,{children:[s?null:(0,M.jsx)(Pe,{}),(0,M.jsxs)(G,{"data-slot":`sheet-content`,"data-size":r,"data-non-modal":s||void 0,className:o(Fe({side:n,size:r}),s&&`z-30 shadow-none`,e),onInteractOutside:e=>{s&&e.preventDefault(),u?.(e)},...d,...f,children:[t,a&&(0,M.jsx)(Y,{asChild:!0,children:(0,M.jsxs)(y,{variant:`ghost`,size:`icon-sm`,className:`absolute top-4 right-4 text-muted-foreground`,children:[(0,M.jsx)(j,{"aria-hidden":`true`}),(0,M.jsx)(`span`,{className:`sr-only`,children:p(`common.close`)})]})})]})]})}function Le({className:e,...t}){return(0,M.jsx)(`div`,{"data-slot":`sheet-header`,className:o(`flex flex-col gap-1.5 px-6 pt-6 pb-4`,e),...t})}function Re({className:e,...t}){return(0,M.jsx)(`div`,{"data-slot":`sheet-body`,className:o(`min-h-0 flex-1 overflow-y-auto px-6 pb-6`,e),...t})}function ze({className:e,...t}){return(0,M.jsx)(`div`,{"data-slot":`sheet-footer`,className:o(`mt-auto flex flex-wrap items-center justify-end gap-2 border-t bg-muted/40 px-6 py-4`,e),...t})}function Be({className:e,...t}){return(0,M.jsx)(q,{"data-slot":`sheet-title`,className:o(`text-lg leading-tight font-semibold tracking-tight text-foreground`,e),...t})}function Ve({className:e,...t}){return(0,M.jsx)(J,{"data-slot":`sheet-description`,className:o(`text-sm text-muted-foreground`,e),...t})}var He=p(`flex shrink-0 items-center justify-center rounded-lg`,{variants:{size:{sm:`size-8 [&_svg]:size-4`,md:`size-9 [&_svg]:size-[18px]`,lg:`size-10 [&_svg]:size-5`},tone:{accent:`bg-muted text-primary dark:text-accent-foreground`,muted:`bg-muted text-muted-foreground`,success:`bg-success-muted text-success`,warning:`bg-warning-muted text-warning`,danger:`bg-destructive-muted text-destructive`}},defaultVariants:{size:`md`,tone:`accent`}}),Q=({icon:e,size:t,tone:n,className:r})=>(0,M.jsx)(`span`,{"aria-hidden":`true`,className:o(He({size:t,tone:n}),r),children:(0,M.jsx)(e,{})}),Ue=p(`flex flex-col items-center justify-center gap-3 px-6 text-center`,{variants:{size:{panel:`py-10`,page:`rounded-xl border bg-card py-16`}},defaultVariants:{size:`page`}}),$=({title:e,description:t,icon:n,action:r,size:i,compact:a,className:s})=>a?(0,M.jsxs)(`div`,{className:o(`flex items-center gap-3 px-5 py-3 text-left`,s),children:[n?(0,M.jsx)(Q,{icon:n,size:`sm`}):null,(0,M.jsxs)(`p`,{className:`min-w-0 flex-1 text-sm`,children:[(0,M.jsx)(`span`,{className:`font-semibold`,children:e}),t?(0,M.jsxs)(`span`,{className:`text-muted-foreground`,children:[` `,t]}):null]}),r]}):(0,M.jsxs)(`div`,{className:o(Ue({size:i}),s),children:[n?(0,M.jsx)(Q,{icon:n,size:`lg`}):null,(0,M.jsxs)(`div`,{className:`space-y-1`,children:[(0,M.jsx)(`p`,{className:`text-base font-semibold`,children:e}),t?(0,M.jsx)(`p`,{className:`max-w-md text-sm text-muted-foreground`,children:t}):null]}),r]}),We=p(`mx-auto w-full min-w-0 space-y-6`,{variants:{width:{full:``,default:`max-w-6xl`,narrow:`max-w-3xl`}},defaultVariants:{width:`default`}}),Ge=({width:e,className:t,children:n})=>(0,M.jsx)(`div`,{"data-slot":`page`,className:o(We({width:e}),t),children:n}),Ke=({title:e,breadcrumb:t,badge:n,meta:r,actions:a,tabs:s,sticky:c=!1,className:l})=>{let{t:u}=i();return(0,M.jsxs)(`header`,{"data-slot":`page-header`,className:o(`space-y-4`,c&&`sticky top-12 z-20 -mx-4 border-b bg-background/95 px-4 py-3 backdrop-blur supports-[backdrop-filter]:bg-background/80 sm:-mx-8 sm:px-8 lg:top-0`,l),children:[(0,M.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-x-4 gap-y-3`,children:[(0,M.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[t&&t.length>0?(0,M.jsx)(`nav`,{"aria-label":u(`common.breadcrumb`),children:(0,M.jsx)(`ol`,{className:`flex flex-wrap items-center gap-1.5 text-meta font-medium text-muted-foreground`,children:t.map((e,t)=>(0,M.jsxs)(C.Fragment,{children:[t>0?(0,M.jsx)(`li`,{"aria-hidden":`true`,className:`text-muted-foreground/70`,children:`/`}):null,(0,M.jsx)(`li`,{className:`min-w-0 truncate`,children:e.link?(0,M.jsx)(d,{...e.link,className:`rounded-sm outline-none hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50`,children:e.label}):e.label})]},`${e.label}-${t}`))})}):null,(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1`,children:[(0,M.jsx)(`h1`,{className:`min-w-0 text-title break-words`,children:e}),n]}),r?(0,M.jsx)(`div`,{className:`text-meta text-muted-foreground`,children:r}):null]}),a?(0,M.jsx)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:a}):null]}),s]})},qe=({error:e,onRetry:t,size:n=`page`,className:r})=>{let{t:a}=i();return u(e)?(0,M.jsx)($,{icon:k,title:a(`errors.forbidden`),description:a(`errors.forbiddenDescription`),size:n,className:r}):(0,M.jsx)(`div`,{role:`alert`,children:(0,M.jsx)($,{icon:me,title:a(`errors.loadFailed`),description:ie(e),action:t?(0,M.jsx)(y,{variant:`outline`,onClick:t,children:a(`common.retry`)}):void 0,size:n,className:r})})},Je=p(`inline-flex w-fit shrink-0 items-center gap-1.5 rounded-full font-semibold whitespace-nowrap`,{variants:{tone:{neutral:`bg-muted text-foreground`,progress:`bg-muted text-muted-foreground`,scheduled:`bg-info-muted text-info`,success:`bg-success-muted text-success`,warning:`bg-warning-muted text-warning`,danger:`bg-destructive-muted text-destructive`,muted:`border text-muted-foreground`},size:{default:`h-6 px-2.5 text-xs`,sm:`h-5 px-2 text-2xs`}},defaultVariants:{tone:`neutral`,size:`default`}}),Ye={neutral:`bg-muted-foreground`,progress:`bg-muted-foreground`,scheduled:`bg-info`,success:`bg-success`,warning:`bg-warning`,danger:`bg-destructive`,muted:`border border-muted-foreground`},Xe=({tone:e,label:t,live:n=!0,size:r,className:i})=>(0,M.jsxs)(`span`,{"data-slot":`status-chip`,"data-tone":e,className:o(Je({tone:e,size:r}),i),children:[e===`progress`&&n?(0,M.jsx)(a,{"aria-hidden":`true`,className:`size-3 animate-spin motion-reduce:animate-none`}):(0,M.jsx)(`span`,{"aria-hidden":`true`,className:o(`size-1.5 shrink-0 rounded-full`,Ye[e])}),t]}),Ze=p(`inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-semibold whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3`,{variants:{variant:{secondary:`bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90`,outline:`border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground`}},defaultVariants:{variant:`secondary`}});function Qe({className:e,variant:t=`secondary`,asChild:n=!1,...r}){let i=n?m:`span`;return(0,M.jsx)(i,{"data-slot":`badge`,"data-variant":t,className:o(Ze({variant:t}),e),...r})}export{k as A,U as C,ge as D,R as E,S as F,D as M,E as N,j as O,w as P,J as S,q as T,ke as _,Ge as a,Y as b,je as c,Ve as d,ze as f,Z as g,Me as h,Ke as i,fe as j,me as k,Re as l,Be as m,Xe as n,$ as o,Le as p,qe as r,Q as s,Qe as t,Ie as u,Oe as v,V as w,G as x,L as y};
|
|
2
|
-
//# sourceMappingURL=badge-
|
|
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{i as r,j as i,r as a,t as o}from"./cn-CL1YHRrS.js";import{D as s,E as c,Q as l,_ as u,x as d}from"./auth-YVfK3SxF.js";import{C as f,E as p,S as m,T as h,_ as g,b as _,c as ee,d as te,f as ne,g as re,h as v,i as y,k as ie,l as ae,m as b,o as oe,s as se,t as ce,u as le,v as x,y as ue}from"./skeleton-DElTumgk.js";function S(){throw Error(`Invariant failed`)}var C=e(t(),1),w=C.createContext(void 0),de=C.createContext(void 0),T={};function E(e,t){let n=C.useRef();return r=>{let i=e?.select?e.select(r):r;return e?.structuralSharing??t.options.defaultStructuralSharing?n.current=l(n.current,i):i}}function D(e){let t=s(),n=C.useContext(e.from?de:w),r=e.from??n,i=t.stores.getMatchStore(r),a=E(e,t),o=c(i,e=>e?a(e):T);if(o!==T)return o;(e.shouldThrow??!0)&&S()}function fe(e){return D({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}var O={name:`lock`,size:24,node:[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]};O.node;var k=r(O),pe={name:`triangle-alert`,size:24,node:[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]],aliases:[`alert-triangle`]};pe.node;var me=r(pe),A={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};A.node;var j=r(A),M=e(n(),1),he=Object.defineProperty,N=(e,t)=>he(e,`name`,{value:t,configurable:!0}),P=`Dialog`,[F,ge]=ue(P),[_e,I]=F(P),L=N(e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=C.useRef(null),c=C.useRef(null),[l,u]=re({prop:r,defaultProp:i??!1,onChange:a,caller:P}),[d,f]=C.useState(0),[p,m]=C.useState(0);return(0,M.jsx)(_e,{scope:t,triggerRef:s,contentRef:c,contentId:b(),titleId:b(),descriptionId:b(),titlePresent:d>0,descriptionPresent:p>0,setTitleCount:f,setDescriptionCount:m,open:l,onOpenChange:u,onOpenToggle:C.useCallback(()=>u(e=>!e),[u]),modal:o,children:n})},`Dialog`),ve=`DialogTrigger`,R=C.forwardRef(N(function(e,t){let{__scopeDialog:n,...r}=e,i=I(ve,n),a=h(t,i.triggerRef);return(0,M.jsx)(_.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":X(i.open),...r,ref:a,onClick:x(e.onClick,i.onOpenToggle)})},`DialogTrigger`)),z=`DialogPortal`,[ye,B]=F(z,{forceMount:void 0}),V=N(e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=I(z,t);return(0,M.jsx)(ye,{scope:t,forceMount:n,children:C.Children.map(r,e=>(0,M.jsx)(v,{present:n||a.open,children:(0,M.jsx)(ae,{asChild:!0,container:i,children:e})}))})},`DialogPortal`),H=`DialogOverlay`,U=C.forwardRef(N(function(e,t){let n=B(H,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=I(H,e.__scopeDialog);return a.modal?(0,M.jsx)(v,{present:r||a.open,children:(0,M.jsx)(xe,{...i,ref:t})}):null},`DialogOverlay`)),be=f(`DialogOverlay.RemoveScroll`),xe=C.forwardRef(N(function(e,t){let{__scopeDialog:n,...r}=e,i=I(H,n),a=ne(),o=h(t,a);return(0,M.jsx)(se,{as:be,allowPinchZoom:!0,shards:[i.contentRef],children:(0,M.jsx)(_.div,{"data-state":X(i.open),...r,ref:o,style:{pointerEvents:`auto`,...r.style}})})},`DialogOverlayImpl`)),W=`DialogContent`,G=C.forwardRef(N(function(e,t){let n=B(W,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=I(W,e.__scopeDialog);return(0,M.jsx)(v,{present:r||a.open,children:a.modal?(0,M.jsx)(Se,{...i,ref:t}):(0,M.jsx)(Ce,{...i,ref:t})})},`DialogContent`)),Se=C.forwardRef(N(function(e,t){let n=I(W,e.__scopeDialog),r=C.useRef(null),i=h(t,n.contentRef,r);return C.useEffect(()=>{let e=r.current;if(e)return oe(e)},[]),(0,M.jsx)(K,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,onCloseAutoFocus:x(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:x(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:x(e.onFocusOutside,e=>e.preventDefault())})},`DialogContentModal`)),Ce=C.forwardRef(N(function(e,t){let n=I(W,e.__scopeDialog),r=C.useRef(!1),i=C.useRef(!1);return(0,M.jsx)(K,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})},`DialogContentNonModal`)),K=C.forwardRef(N(function(e,t){let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,...o}=e,s=I(W,n);return ee(),(0,M.jsx)(M.Fragment,{children:(0,M.jsx)(le,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,M.jsx)(te,{role:`dialog`,id:s.contentId,"aria-describedby":s.descriptionPresent?s.descriptionId:void 0,"aria-labelledby":s.titlePresent?s.titleId:void 0,"data-state":X(s.open),...o,ref:t,deferPointerDownOutside:!0,onDismiss:()=>s.onOpenChange(!1)})})})},`DialogContentImpl`)),we=`DialogTitle`,q=C.forwardRef(N(function(e,t){let{__scopeDialog:n,...r}=e,i=I(we,n),{setTitleCount:a}=i;return g(()=>(a(e=>e+1),()=>a(e=>e-1)),[a]),(0,M.jsx)(_.h2,{id:i.titleId,...r,ref:t})},`DialogTitle`)),Te=`DialogDescription`,J=C.forwardRef(N(function(e,t){let{__scopeDialog:n,...r}=e,i=I(Te,n),{setDescriptionCount:a}=i;return g(()=>(a(e=>e+1),()=>a(e=>e-1)),[a]),(0,M.jsx)(_.p,{id:i.descriptionId,...r,ref:t})},`DialogDescription`)),Ee=`DialogClose`,Y=C.forwardRef(N(function(e,t){let{__scopeDialog:n,...r}=e,i=I(Ee,n);return(0,M.jsx)(_.button,{type:`button`,...r,ref:t,onClick:x(e.onClick,()=>i.onOpenChange(!1))})},`DialogClose`));function X(e){return e?`open`:`closed`}N(X,`getState`);var De=4,Oe=({rows:e=De,className:t})=>{let{t:n}=i();return(0,M.jsxs)(`div`,{role:`status`,"aria-live":`polite`,className:o(`space-y-3`,t),children:[(0,M.jsx)(`span`,{className:`sr-only`,children:n(`common.loading`)}),Array.from({length:e},(e,t)=>(0,M.jsx)(ce,{className:`h-10 w-full`},t))]})},ke=({pending:e,pendingLabel:t,children:n,disabled:r,...i})=>(0,M.jsx)(y,{type:`submit`,disabled:e||r,"aria-busy":e||void 0,...i,children:e?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(a,{className:`animate-spin`,"aria-hidden":`true`}),t]}):n}),Ae=e=>{if(!(e instanceof HTMLElement)||e===document.body)return null;let t=e.closest(`[role="menu"]`),n=t?.id?document.querySelector(`[aria-controls="${CSS.escape(t.id)}"]`):null;return n instanceof HTMLElement?n:e},Z=(e,t)=>{let n=(0,C.useRef)(null);return{onOpenAutoFocus:(0,C.useCallback)(t=>{n.current=Ae(document.activeElement),e?.(t)},[e]),onCloseAutoFocus:(0,C.useCallback)(e=>{t?.(e);let r=n.current;n.current=null,!e.defaultPrevented&&r?.isConnected&&(r.focus({preventScroll:!0}),document.activeElement===r&&e.preventDefault())},[t])}};function je({...e}){return(0,M.jsx)(L,{"data-slot":`sheet`,...e})}function Me({...e}){return(0,M.jsx)(R,{"data-slot":`sheet-trigger`,...e})}function Ne({...e}){return(0,M.jsx)(V,{"data-slot":`sheet-portal`,...e})}function Pe({className:e,...t}){return(0,M.jsx)(U,{"data-slot":`sheet-overlay`,className:o(`fixed inset-0 z-50 bg-overlay/40 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0`,e),...t})}var Fe=p(`fixed z-50 flex flex-col gap-0 bg-card shadow-lg transition ease-in-out data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:animate-in data-[state=open]:duration-500`,{variants:{side:{right:`inset-y-0 right-0 h-full w-full border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right`,left:`inset-y-0 left-0 h-full w-full border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left`,top:`inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top`,bottom:`inset-x-0 bottom-0 h-auto max-h-[85dvh] rounded-t-xl border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom`},size:{xs:``,sm:``,md:``,lg:``}},compoundVariants:[{side:[`left`,`right`],size:`xs`,className:`sm:max-w-90`},{side:[`left`,`right`],size:`sm`,className:`sm:max-w-100`},{side:[`left`,`right`],size:`md`,className:`sm:max-w-140`},{side:[`left`,`right`],size:`lg`,className:`sm:max-w-180`}],defaultVariants:{side:`right`,size:`sm`}});function Ie({className:e,children:t,side:n=`right`,size:r=`sm`,showCloseButton:a=!0,nonModal:s=!1,onOpenAutoFocus:c,onCloseAutoFocus:l,onInteractOutside:u,...d}){let f=Z(c,l),{t:p}=i();return(0,M.jsxs)(Ne,{children:[s?null:(0,M.jsx)(Pe,{}),(0,M.jsxs)(G,{"data-slot":`sheet-content`,"data-size":r,"data-non-modal":s||void 0,className:o(Fe({side:n,size:r}),s&&`z-30 shadow-none`,e),onInteractOutside:e=>{s&&e.preventDefault(),u?.(e)},...d,...f,children:[t,a&&(0,M.jsx)(Y,{asChild:!0,children:(0,M.jsxs)(y,{variant:`ghost`,size:`icon-sm`,className:`absolute top-4 right-4 text-muted-foreground`,children:[(0,M.jsx)(j,{"aria-hidden":`true`}),(0,M.jsx)(`span`,{className:`sr-only`,children:p(`common.close`)})]})})]})]})}function Le({className:e,...t}){return(0,M.jsx)(`div`,{"data-slot":`sheet-header`,className:o(`flex flex-col gap-1.5 px-6 pt-6 pb-4`,e),...t})}function Re({className:e,...t}){return(0,M.jsx)(`div`,{"data-slot":`sheet-body`,className:o(`min-h-0 flex-1 overflow-y-auto px-6 pb-6`,e),...t})}function ze({className:e,...t}){return(0,M.jsx)(`div`,{"data-slot":`sheet-footer`,className:o(`mt-auto flex flex-wrap items-center justify-end gap-2 border-t bg-muted/40 px-6 py-4`,e),...t})}function Be({className:e,...t}){return(0,M.jsx)(q,{"data-slot":`sheet-title`,className:o(`text-lg leading-tight font-semibold tracking-tight text-foreground`,e),...t})}function Ve({className:e,...t}){return(0,M.jsx)(J,{"data-slot":`sheet-description`,className:o(`text-sm text-muted-foreground`,e),...t})}var He=p(`flex shrink-0 items-center justify-center rounded-lg`,{variants:{size:{sm:`size-8 [&_svg]:size-4`,md:`size-9 [&_svg]:size-[18px]`,lg:`size-10 [&_svg]:size-5`},tone:{accent:`bg-muted text-primary dark:text-accent-foreground`,muted:`bg-muted text-muted-foreground`,success:`bg-success-muted text-success`,warning:`bg-warning-muted text-warning`,danger:`bg-destructive-muted text-destructive`}},defaultVariants:{size:`md`,tone:`accent`}}),Q=({icon:e,size:t,tone:n,className:r})=>(0,M.jsx)(`span`,{"aria-hidden":`true`,className:o(He({size:t,tone:n}),r),children:(0,M.jsx)(e,{})}),Ue=p(`flex flex-col items-center justify-center gap-3 px-6 text-center`,{variants:{size:{panel:`py-10`,page:`rounded-xl border bg-card py-16`}},defaultVariants:{size:`page`}}),$=({title:e,description:t,icon:n,action:r,size:i,compact:a,className:s})=>a?(0,M.jsxs)(`div`,{className:o(`flex items-center gap-3 px-5 py-3 text-left`,s),children:[n?(0,M.jsx)(Q,{icon:n,size:`sm`}):null,(0,M.jsxs)(`p`,{className:`min-w-0 flex-1 text-sm`,children:[(0,M.jsx)(`span`,{className:`font-semibold`,children:e}),t?(0,M.jsxs)(`span`,{className:`text-muted-foreground`,children:[` `,t]}):null]}),r]}):(0,M.jsxs)(`div`,{className:o(Ue({size:i}),s),children:[n?(0,M.jsx)(Q,{icon:n,size:`lg`}):null,(0,M.jsxs)(`div`,{className:`space-y-1`,children:[(0,M.jsx)(`p`,{className:`text-base font-semibold`,children:e}),t?(0,M.jsx)(`p`,{className:`max-w-md text-sm text-muted-foreground`,children:t}):null]}),r]}),We=p(`mx-auto w-full min-w-0 space-y-6`,{variants:{width:{full:``,default:`max-w-6xl`,narrow:`max-w-3xl`}},defaultVariants:{width:`default`}}),Ge=({width:e,className:t,children:n})=>(0,M.jsx)(`div`,{"data-slot":`page`,className:o(We({width:e}),t),children:n}),Ke=({title:e,breadcrumb:t,badge:n,meta:r,actions:a,tabs:s,sticky:c=!1,className:l})=>{let{t:u}=i();return(0,M.jsxs)(`header`,{"data-slot":`page-header`,className:o(`space-y-4`,c&&`sticky top-12 z-20 -mx-4 border-b bg-background/95 px-4 py-3 backdrop-blur supports-[backdrop-filter]:bg-background/80 sm:-mx-8 sm:px-8 lg:top-0`,l),children:[(0,M.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-x-4 gap-y-3`,children:[(0,M.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[t&&t.length>0?(0,M.jsx)(`nav`,{"aria-label":u(`common.breadcrumb`),children:(0,M.jsx)(`ol`,{className:`flex flex-wrap items-center gap-1.5 text-meta font-medium text-muted-foreground`,children:t.map((e,t)=>(0,M.jsxs)(C.Fragment,{children:[t>0?(0,M.jsx)(`li`,{"aria-hidden":`true`,className:`text-muted-foreground/70`,children:`/`}):null,(0,M.jsx)(`li`,{className:`min-w-0 truncate`,children:e.link?(0,M.jsx)(d,{...e.link,className:`rounded-sm outline-none hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50`,children:e.label}):e.label})]},`${e.label}-${t}`))})}):null,(0,M.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1`,children:[(0,M.jsx)(`h1`,{className:`min-w-0 text-title break-words`,children:e}),n]}),r?(0,M.jsx)(`div`,{className:`text-meta text-muted-foreground`,children:r}):null]}),a?(0,M.jsx)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:a}):null]}),s]})},qe=({error:e,onRetry:t,size:n=`page`,className:r})=>{let{t:a}=i();return u(e)?(0,M.jsx)($,{icon:k,title:a(`errors.forbidden`),description:a(`errors.forbiddenDescription`),size:n,className:r}):(0,M.jsx)(`div`,{role:`alert`,children:(0,M.jsx)($,{icon:me,title:a(`errors.loadFailed`),description:ie(e),action:t?(0,M.jsx)(y,{variant:`outline`,onClick:t,children:a(`common.retry`)}):void 0,size:n,className:r})})},Je=p(`inline-flex w-fit shrink-0 items-center gap-1.5 rounded-full font-semibold whitespace-nowrap`,{variants:{tone:{neutral:`bg-muted text-foreground`,progress:`bg-muted text-muted-foreground`,scheduled:`bg-info-muted text-info`,success:`bg-success-muted text-success`,warning:`bg-warning-muted text-warning`,danger:`bg-destructive-muted text-destructive`,muted:`border text-muted-foreground`},size:{default:`h-6 px-2.5 text-xs`,sm:`h-5 px-2 text-2xs`}},defaultVariants:{tone:`neutral`,size:`default`}}),Ye={neutral:`bg-muted-foreground`,progress:`bg-muted-foreground`,scheduled:`bg-info`,success:`bg-success`,warning:`bg-warning`,danger:`bg-destructive`,muted:`border border-muted-foreground`},Xe=({tone:e,label:t,live:n=!0,size:r,className:i})=>(0,M.jsxs)(`span`,{"data-slot":`status-chip`,"data-tone":e,className:o(Je({tone:e,size:r}),i),children:[e===`progress`&&n?(0,M.jsx)(a,{"aria-hidden":`true`,className:`size-3 animate-spin motion-reduce:animate-none`}):(0,M.jsx)(`span`,{"aria-hidden":`true`,className:o(`size-1.5 shrink-0 rounded-full`,Ye[e])}),t]}),Ze=p(`inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-semibold whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3`,{variants:{variant:{secondary:`bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90`,outline:`border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground`}},defaultVariants:{variant:`secondary`}});function Qe({className:e,variant:t=`secondary`,asChild:n=!1,...r}){let i=n?m:`span`;return(0,M.jsx)(i,{"data-slot":`badge`,"data-variant":t,className:o(Ze({variant:t}),e),...r})}export{k as A,U as C,ge as D,R as E,S as F,D as M,E as N,j as O,w as P,J as S,q as T,ke as _,Ge as a,Y as b,je as c,Ve as d,ze as f,Z as g,Me as h,Ke as i,fe as j,me as k,Re as l,Be as m,Xe as n,$ as o,Le as p,qe as r,Q as s,Qe as t,Ie as u,Oe as v,V as w,G as x,L as y};
|
|
2
|
+
//# sourceMappingURL=badge-lJ4Ih_Zn.js.map
|