@shapio/cms 0.5.5 → 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/dist/admin/assets/{AssetTile-CaYPqR_F.js → AssetTile-_qRYsivK.js} +2 -2
  2. package/dist/admin/assets/{AssetTile-CaYPqR_F.js.map → AssetTile-_qRYsivK.js.map} +1 -1
  3. package/dist/admin/assets/{AssistError-drmpXSbS.js → AssistError-CMXQWiQo.js} +2 -2
  4. package/dist/admin/assets/{AssistError-drmpXSbS.js.map → AssistError-CMXQWiQo.js.map} +1 -1
  5. package/dist/admin/assets/{BlockMenuItems-D-jZ0oaU.js → BlockMenuItems-WIrbyv1a.js} +2 -2
  6. package/dist/admin/assets/{BlockMenuItems-D-jZ0oaU.js.map → BlockMenuItems-WIrbyv1a.js.map} +1 -1
  7. package/dist/admin/assets/{Body-Gn_z2KPN.js → Body-BYc1IVsQ.js} +2 -2
  8. package/dist/admin/assets/{Body-Gn_z2KPN.js.map → Body-BYc1IVsQ.js.map} +1 -1
  9. package/dist/admin/assets/Builder-CwHpRhZN.js +2 -0
  10. package/dist/admin/assets/Builder-CwHpRhZN.js.map +1 -0
  11. package/dist/admin/assets/{CodeEditor-CzRU6och.js → CodeEditor-NMvrWgxT.js} +2 -2
  12. package/dist/admin/assets/{CodeEditor-CzRU6och.js.map → CodeEditor-NMvrWgxT.js.map} +1 -1
  13. package/dist/admin/assets/{ConfirmDialog-DZRJfdvH.js → ConfirmDialog-Rd6WDt6q.js} +2 -2
  14. package/dist/admin/assets/{ConfirmDialog-DZRJfdvH.js.map → ConfirmDialog-Rd6WDt6q.js.map} +1 -1
  15. package/dist/admin/assets/{CopyButton-h4HYhnYp.js → CopyButton-B0RuxynJ.js} +2 -2
  16. package/dist/admin/assets/{CopyButton-h4HYhnYp.js.map → CopyButton-B0RuxynJ.js.map} +1 -1
  17. package/dist/admin/assets/{CursorPager-H4SpVYw7.js → CursorPager-CQZsKNxR.js} +2 -2
  18. package/dist/admin/assets/{CursorPager-H4SpVYw7.js.map → CursorPager-CQZsKNxR.js.map} +1 -1
  19. package/dist/admin/assets/{FocalPoint-CSeKI4Iw.js → FocalPoint-BYu2fOTb.js} +2 -2
  20. package/dist/admin/assets/{FocalPoint-CSeKI4Iw.js.map → FocalPoint-BYu2fOTb.js.map} +1 -1
  21. package/dist/admin/assets/{Form-DF_YmR1G.js → Form-CiZUsLPp.js} +2 -2
  22. package/dist/admin/assets/{Form-DF_YmR1G.js.map → Form-CiZUsLPp.js.map} +1 -1
  23. package/dist/admin/assets/{FormCheckboxGroup-V3IKrvzc.js → FormCheckboxGroup-Bz8KERs1.js} +2 -2
  24. package/dist/admin/assets/{FormCheckboxGroup-V3IKrvzc.js.map → FormCheckboxGroup-Bz8KERs1.js.map} +1 -1
  25. package/dist/admin/assets/{FormRadioGroup-DIv-MYgn.js → FormRadioGroup-c-wyx7dq.js} +2 -2
  26. package/dist/admin/assets/{FormRadioGroup-DIv-MYgn.js.map → FormRadioGroup-c-wyx7dq.js.map} +1 -1
  27. package/dist/admin/assets/{FormSelectField-CUhaPIMY.js → FormSelectField-ijG9qPpb.js} +2 -2
  28. package/dist/admin/assets/{FormSelectField-CUhaPIMY.js.map → FormSelectField-ijG9qPpb.js.map} +1 -1
  29. package/dist/admin/assets/{FormSwitchField-DW8ysyk_.js → FormSwitchField-Bp3hNpeP.js} +2 -2
  30. package/dist/admin/assets/{FormSwitchField-DW8ysyk_.js.map → FormSwitchField-Bp3hNpeP.js.map} +1 -1
  31. package/dist/admin/assets/{FormTextareaField-DbqZ-MwI.js → FormTextareaField-BSKMqHcW.js} +2 -2
  32. package/dist/admin/assets/{FormTextareaField-DbqZ-MwI.js.map → FormTextareaField-BSKMqHcW.js.map} +1 -1
  33. package/dist/admin/assets/{HintedLabel-BlLtqVVz.js → HintedLabel-BrLH4NQW.js} +2 -2
  34. package/dist/admin/assets/{HintedLabel-BlLtqVVz.js.map → HintedLabel-BrLH4NQW.js.map} +1 -1
  35. package/dist/admin/assets/{InfoHint-bYMd_t0J.js → InfoHint-Dyzyf59c.js} +2 -2
  36. package/dist/admin/assets/{InfoHint-bYMd_t0J.js.map → InfoHint-Dyzyf59c.js.map} +1 -1
  37. package/dist/admin/assets/{InsertMenuItem-D2HGERzb.js → InsertMenuItem-BvRDuXtd.js} +2 -2
  38. package/dist/admin/assets/{InsertMenuItem-D2HGERzb.js.map → InsertMenuItem-BvRDuXtd.js.map} +1 -1
  39. package/dist/admin/assets/{Match-GDx_orOH.js → Match-Bixf1ygj.js} +2 -2
  40. package/dist/admin/assets/{Match-GDx_orOH.js.map → Match-Bixf1ygj.js.map} +1 -1
  41. package/dist/admin/assets/{QueryView-UBO-U5Wo.js → QueryView--_vvV7dC.js} +2 -2
  42. package/dist/admin/assets/{QueryView-UBO-U5Wo.js.map → QueryView--_vvV7dC.js.map} +1 -1
  43. package/dist/admin/assets/{RadioTile-CJbIIV8t.js → RadioTile-BCp6auUz.js} +2 -2
  44. package/dist/admin/assets/{RadioTile-CJbIIV8t.js.map → RadioTile-BCp6auUz.js.map} +1 -1
  45. package/dist/admin/assets/{RichTextField-M7HyUhYF.js → RichTextField-fWNjndUc.js} +2 -2
  46. package/dist/admin/assets/{RichTextField-M7HyUhYF.js.map → RichTextField-fWNjndUc.js.map} +1 -1
  47. package/dist/admin/assets/{RowTitle-DoxDM1XL.js → RowTitle-B4CE8tt7.js} +2 -2
  48. package/dist/admin/assets/{RowTitle-DoxDM1XL.js.map → RowTitle-B4CE8tt7.js.map} +1 -1
  49. package/dist/admin/assets/{SecretReveal-kCkLH5jg.js → SecretReveal-BhSqdWqh.js} +2 -2
  50. package/dist/admin/assets/{SecretReveal-kCkLH5jg.js.map → SecretReveal-BhSqdWqh.js.map} +1 -1
  51. package/dist/admin/assets/{SharedGlyph-D1OMHXPf.js → SharedGlyph-71FTypoi.js} +2 -2
  52. package/dist/admin/assets/{SharedGlyph-D1OMHXPf.js.map → SharedGlyph-71FTypoi.js.map} +1 -1
  53. package/dist/admin/assets/StepList-CZJmwy9e.js +2 -0
  54. package/dist/admin/assets/StepList-CZJmwy9e.js.map +1 -0
  55. package/dist/admin/assets/Structure-Dk87778W.js +2 -0
  56. package/dist/admin/assets/{Structure-CO4aJZVP.js.map → Structure-Dk87778W.js.map} +1 -1
  57. package/dist/admin/assets/{SuggestAltButton-CbRUxD5s.js → SuggestAltButton-CxS8IR6m.js} +2 -2
  58. package/dist/admin/assets/{SuggestAltButton-CbRUxD5s.js.map → SuggestAltButton-CxS8IR6m.js.map} +1 -1
  59. package/dist/admin/assets/{Thumbnail-D1XuDElk.js → Thumbnail-BwbCNpgQ.js} +2 -2
  60. package/dist/admin/assets/{Thumbnail-D1XuDElk.js.map → Thumbnail-BwbCNpgQ.js.map} +1 -1
  61. package/dist/admin/assets/{UnsavedChangesGuard-C1n7egF6.js → UnsavedChangesGuard-C6nD55Fn.js} +2 -2
  62. package/dist/admin/assets/{UnsavedChangesGuard-C1n7egF6.js.map → UnsavedChangesGuard-C6nD55Fn.js.map} +1 -1
  63. package/dist/admin/assets/{UserAvatar-Bl32IpG_.js → UserAvatar-D7IbSpsP.js} +2 -2
  64. package/dist/admin/assets/{UserAvatar-Bl32IpG_.js.map → UserAvatar-D7IbSpsP.js.map} +1 -1
  65. package/dist/admin/assets/{badge-ydvfgE8a.js → badge-vLiQczOd.js} +2 -2
  66. package/dist/admin/assets/{badge-ydvfgE8a.js.map → badge-vLiQczOd.js.map} +1 -1
  67. package/dist/admin/assets/{changeSets-DgfCKja3.js → changeSets-D5VevASj.js} +2 -2
  68. package/dist/admin/assets/{changeSets-DgfCKja3.js.map → changeSets-D5VevASj.js.map} +1 -1
  69. package/dist/admin/assets/{constants-esJAnNTh.js → constants-CKGh8uwT.js} +2 -2
  70. package/dist/admin/assets/{constants-esJAnNTh.js.map → constants-CKGh8uwT.js.map} +1 -1
  71. package/dist/admin/assets/{content-DsMSB6Wb.js → content-Cbavyq0x.js} +3 -3
  72. package/dist/admin/assets/{content-DsMSB6Wb.js.map → content-Cbavyq0x.js.map} +1 -1
  73. package/dist/admin/assets/{contentTypes-C-AKiYu1.js → contentTypes-DzQ_0v36.js} +2 -2
  74. package/dist/admin/assets/{contentTypes-C-AKiYu1.js.map → contentTypes-DzQ_0v36.js.map} +1 -1
  75. package/dist/admin/assets/{develop-DL-2W9jv.js → develop-BDqMOEql.js} +2 -2
  76. package/dist/admin/assets/{develop-DL-2W9jv.js.map → develop-BDqMOEql.js.map} +1 -1
  77. package/dist/admin/assets/{dropdown-menu-C53v9ioW.js → dropdown-menu-CVAnm22s.js} +2 -2
  78. package/dist/admin/assets/{dropdown-menu-C53v9ioW.js.map → dropdown-menu-CVAnm22s.js.map} +1 -1
  79. package/dist/admin/assets/es2015-BKfbx3rz.js +42 -0
  80. package/dist/admin/assets/es2015-BKfbx3rz.js.map +1 -0
  81. package/dist/admin/assets/{field-W1dB_h6d.js → field-Bg-JRgsB.js} +2 -2
  82. package/dist/admin/assets/{field-W1dB_h6d.js.map → field-Bg-JRgsB.js.map} +1 -1
  83. package/dist/admin/assets/{fileRoute-DzWMBrRx.js → fileRoute-DQCI1nMN.js} +2 -2
  84. package/dist/admin/assets/{fileRoute-DzWMBrRx.js.map → fileRoute-DQCI1nMN.js.map} +1 -1
  85. package/dist/admin/assets/{followPlural-D-5ZJqJF.js → followPlural-D0bENI5E.js} +2 -2
  86. package/dist/admin/assets/{followPlural-D-5ZJqJF.js.map → followPlural-D0bENI5E.js.map} +1 -1
  87. package/dist/admin/assets/{inbox-DUqOrFEA.js → inbox-Dfy4YBZ2.js} +2 -2
  88. package/dist/admin/assets/{inbox-DUqOrFEA.js.map → inbox-Dfy4YBZ2.js.map} +1 -1
  89. package/dist/admin/assets/{index-D03RZB7e.js → index-M4TUI1dl.js} +4 -4
  90. package/dist/admin/assets/{index-D03RZB7e.js.map → index-M4TUI1dl.js.map} +1 -1
  91. package/dist/admin/assets/{labels-CHE0gg1n.js → labels-BrwwGWnv.js} +2 -2
  92. package/dist/admin/assets/{labels-CHE0gg1n.js.map → labels-BrwwGWnv.js.map} +1 -1
  93. package/dist/admin/assets/{media-BUUEsWxd.js → media-DBdx-UmR.js} +2 -2
  94. package/dist/admin/assets/{media-BUUEsWxd.js.map → media-DBdx-UmR.js.map} +1 -1
  95. package/dist/admin/assets/{network-Bolr2lmf.js → network-BpbMYp6D.js} +2 -2
  96. package/dist/admin/assets/{network-Bolr2lmf.js.map → network-BpbMYp6D.js.map} +1 -1
  97. package/dist/admin/assets/{publishing-ClNjPLQ9.js → publishing-CpSDO3M7.js} +2 -2
  98. package/dist/admin/assets/{publishing-ClNjPLQ9.js.map → publishing-CpSDO3M7.js.map} +1 -1
  99. package/dist/admin/assets/{radio-group-rFxn7cz2.js → radio-group-DQ3sC1ol.js} +2 -2
  100. package/dist/admin/assets/{radio-group-rFxn7cz2.js.map → radio-group-DQ3sC1ol.js.map} +1 -1
  101. package/dist/admin/assets/{searchSchemas-C4qp-vCa.js → searchSchemas-D4S2ceA0.js} +2 -2
  102. package/dist/admin/assets/{searchSchemas-C4qp-vCa.js.map → searchSchemas-D4S2ceA0.js.map} +1 -1
  103. package/dist/admin/assets/{sections-C7Z6Xd8r.js → sections-Cl1LrzqH.js} +2 -2
  104. package/dist/admin/assets/{sections-C7Z6Xd8r.js.map → sections-Cl1LrzqH.js.map} +1 -1
  105. package/dist/admin/assets/{select-DUhL27UN.js → select-DjCAH45V.js} +2 -2
  106. package/dist/admin/assets/{select-DUhL27UN.js.map → select-DjCAH45V.js.map} +1 -1
  107. package/dist/admin/assets/{seo-l1ZORjtv.js → seo-DJ4k3LtY.js} +2 -2
  108. package/dist/admin/assets/{seo-l1ZORjtv.js.map → seo-DJ4k3LtY.js.map} +1 -1
  109. package/dist/admin/assets/{settings-DgoG3H8C.js → settings-DRZ33PTg.js} +2 -2
  110. package/dist/admin/assets/{settings-DgoG3H8C.js.map → settings-DRZ33PTg.js.map} +1 -1
  111. package/dist/admin/assets/{shapes-BZ87ap5s.js → shapes-BJe3IMuj.js} +5 -5
  112. package/dist/admin/assets/{shapes-BZ87ap5s.js.map → shapes-BJe3IMuj.js.map} +1 -1
  113. package/dist/admin/assets/{skeleton-Dyi_b1wq.js → skeleton-D4eOLKLY.js} +2 -2
  114. package/dist/admin/assets/{skeleton-Dyi_b1wq.js.map → skeleton-D4eOLKLY.js.map} +1 -1
  115. package/dist/admin/assets/src-DUpL-qwG.js +7 -0
  116. package/dist/admin/assets/src-DUpL-qwG.js.map +1 -0
  117. package/dist/admin/assets/{switch-C3dDDUIk.js → switch-B2R13aVU.js} +2 -2
  118. package/dist/admin/assets/{switch-C3dDDUIk.js.map → switch-B2R13aVU.js.map} +1 -1
  119. package/dist/admin/assets/{theme-DPe080iG.js → theme-X-qeg74W.js} +2 -2
  120. package/dist/admin/assets/{theme-DPe080iG.js.map → theme-X-qeg74W.js.map} +1 -1
  121. package/dist/admin/assets/{titles-C5PaMgFJ.js → titles-CLh5ftA2.js} +2 -2
  122. package/dist/admin/assets/{titles-C5PaMgFJ.js.map → titles-CLh5ftA2.js.map} +1 -1
  123. package/dist/admin/assets/{tooltip-BEaZkRPK.js → tooltip-u2epXfJF.js} +2 -2
  124. package/dist/admin/assets/{tooltip-BEaZkRPK.js.map → tooltip-u2epXfJF.js.map} +1 -1
  125. package/dist/admin/assets/{useContentSchema-wLDa2L3f.js → useContentSchema-DaQHlL19.js} +2 -2
  126. package/dist/admin/assets/{useContentSchema-wLDa2L3f.js.map → useContentSchema-DaQHlL19.js.map} +1 -1
  127. package/dist/admin/assets/{useDiscardGuard-WTUINqD5.js → useDiscardGuard-BVJGUCiH.js} +2 -2
  128. package/dist/admin/assets/{useDiscardGuard-WTUINqD5.js.map → useDiscardGuard-BVJGUCiH.js.map} +1 -1
  129. package/dist/admin/assets/{useMediaPickerDialog-CFN9ZKfe.js → useMediaPickerDialog-C23eOHQR.js} +2 -2
  130. package/dist/admin/assets/{useMediaPickerDialog-CFN9ZKfe.js.map → useMediaPickerDialog-C23eOHQR.js.map} +1 -1
  131. package/dist/admin/assets/{useMediaUploader-B42H_CMG.js → useMediaUploader-CTViR0LX.js} +2 -2
  132. package/dist/admin/assets/{useMediaUploader-B42H_CMG.js.map → useMediaUploader-CTViR0LX.js.map} +1 -1
  133. package/dist/admin/assets/{useResolvedScheme-aV0QDPi3.js → useResolvedScheme-Cg8TdO85.js} +2 -2
  134. package/dist/admin/assets/{useResolvedScheme-aV0QDPi3.js.map → useResolvedScheme-Cg8TdO85.js.map} +1 -1
  135. package/dist/admin/assets/{zod-C-k48Hnc.js → zod-D5i60ErJ.js} +2 -2
  136. package/dist/admin/assets/{zod-C-k48Hnc.js.map → zod-D5i60ErJ.js.map} +1 -1
  137. package/dist/admin/index.html +27 -27
  138. package/dist/cli.js +10 -3
  139. package/dist/cli.js.map +1 -1
  140. package/dist/index.d.ts +7 -2
  141. package/dist/index.js +1 -1
  142. package/dist/{s3Adapter-sL1zP4Zl.js → s3Adapter-CtPzkzf0.js} +2 -2
  143. package/dist/{s3Adapter-sL1zP4Zl.js.map → s3Adapter-CtPzkzf0.js.map} +1 -1
  144. package/dist/{worker-DMES6pqh.js → worker-DRCCGGjl.js} +3823 -3719
  145. package/dist/worker-DRCCGGjl.js.map +1 -0
  146. package/package.json +5 -5
  147. package/dist/admin/assets/Builder-DyCcikfS.js +0 -2
  148. package/dist/admin/assets/Builder-DyCcikfS.js.map +0 -1
  149. package/dist/admin/assets/StepList-BIQjDaWQ.js +0 -2
  150. package/dist/admin/assets/StepList-BIQjDaWQ.js.map +0 -1
  151. package/dist/admin/assets/Structure-CO4aJZVP.js +0 -2
  152. package/dist/admin/assets/es2015-DrAA1N2V.js +0 -42
  153. package/dist/admin/assets/es2015-DrAA1N2V.js.map +0 -1
  154. package/dist/admin/assets/src-BcLeD2-K.js +0 -7
  155. package/dist/admin/assets/src-BcLeD2-K.js.map +0 -1
  156. package/dist/worker-DMES6pqh.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"UserAvatar-Bl32IpG_.js","names":["Avatar","AvatarFallback","AvatarPrimitive.Root","AvatarPrimitive.Fallback","__toESM","require_jsx_runtime","useLayoutEffect2","Primitive","createContextScope","cn","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-D7IbSpsP.js","names":["Avatar","AvatarFallback","AvatarPrimitive.Root","AvatarPrimitive.Fallback","__toESM","require_jsx_runtime","useLayoutEffect2","Primitive","createContextScope","cn","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{t as r}from"./loader-circle-C-9trZPI.js";import{D as i,E as a,Q as o,_ as s,x as c}from"./auth-C4fHG9Iu.js";import{n as l,t as u}from"./createLucideIcon-CqygG5K6.js";import{_ as d,a as f,b as p,d as ee,f as m,h,i as te,l as g,m as ne,n as re,o as ie,p as _,r as ae,s as oe,t as se,u as v,v as ce,x as le}from"./es2015-DrAA1N2V.js";import{i as y,o as b,t as ue}from"./skeleton-Dyi_b1wq.js";import{t as x}from"./cn-DVhJ55Mo.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=o(n.current,i):i}}function D(e){let t=i(),n=C.useContext(e.from?de:w),r=e.from??n,o=t.stores.getMatchStore(r),s=E(e,t),c=a(o,e=>e?s(e):T);if(c!==T)return c;(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=u(O),A={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`]};A.node;var j=u(A),pe={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};pe.node;var me=u(pe),M=e(n(),1),he=Object.defineProperty,N=(e,t)=>he(e,`name`,{value:t,configurable:!0}),P=`Dialog`,[F,ge]=ne(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]=ee({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:g(),titleId:g(),descriptionId:g(),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=p(t,i.triggerRef);return(0,M.jsx)(h.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:_(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)(te,{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=ce(`DialogOverlay.RemoveScroll`),xe=C.forwardRef(N(function(e,t){let{__scopeDialog:n,...r}=e,i=I(H,n),a=oe(),o=p(t,a);return(0,M.jsx)(re,{as:be,allowPinchZoom:!0,shards:[i.contentRef],children:(0,M.jsx)(h.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=p(t,n.contentRef,r);return C.useEffect(()=>{let e=r.current;if(e)return se(e)},[]),(0,M.jsx)(K,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,onCloseAutoFocus:_(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:_(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:_(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 ae(),(0,M.jsx)(M.Fragment,{children:(0,M.jsx)(f,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,M.jsx)(ie,{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 m(()=>(a(e=>e+1),()=>a(e=>e-1)),[a]),(0,M.jsx)(h.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 m(()=>(a(e=>e+1),()=>a(e=>e-1)),[a]),(0,M.jsx)(h.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)(h.button,{type:`button`,...r,ref:t,onClick:_(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}=l();return(0,M.jsxs)(`div`,{role:`status`,"aria-live":`polite`,className:x(`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)(ue,{className:`h-10 w-full`},t))]})},ke=({pending:e,pendingLabel:t,children:n,disabled:i,...a})=>(0,M.jsx)(y,{type:`submit`,disabled:e||i,"aria-busy":e||void 0,...a,children:e?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(r,{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:x(`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=b(`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:i=!0,nonModal:a=!1,onOpenAutoFocus:o,onCloseAutoFocus:s,onInteractOutside:c,...u}){let d=Z(o,s),{t:f}=l();return(0,M.jsxs)(Ne,{children:[a?null:(0,M.jsx)(Pe,{}),(0,M.jsxs)(G,{"data-slot":`sheet-content`,"data-size":r,"data-non-modal":a||void 0,className:x(Fe({side:n,size:r}),a&&`z-30 shadow-none`,e),onInteractOutside:e=>{a&&e.preventDefault(),c?.(e)},...u,...d,children:[t,i&&(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)(me,{"aria-hidden":`true`}),(0,M.jsx)(`span`,{className:`sr-only`,children:f(`common.close`)})]})})]})]})}function Le({className:e,...t}){return(0,M.jsx)(`div`,{"data-slot":`sheet-header`,className:x(`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:x(`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:x(`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:x(`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:x(`text-sm text-muted-foreground`,e),...t})}var He=b(`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:x(He({size:t,tone:n}),r),children:(0,M.jsx)(e,{})}),Ue=b(`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:o})=>a?(0,M.jsxs)(`div`,{className:x(`flex items-center gap-3 px-5 py-3 text-left`,o),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:x(Ue({size:i}),o),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=b(`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:x(We({width:e}),t),children:n}),Ke=({title:e,breadcrumb:t,badge:n,meta:r,actions:i,tabs:a,sticky:o=!1,className:s})=>{let{t:u}=l();return(0,M.jsxs)(`header`,{"data-slot":`page-header`,className:x(`space-y-4`,o&&`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`,s),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)(c,{...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]}),i?(0,M.jsx)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:i}):null]}),a]})},qe=({error:e,onRetry:t,size:n=`page`,className:r})=>{let{t:i}=l();return s(e)?(0,M.jsx)($,{icon:k,title:i(`errors.forbidden`),description:i(`errors.forbiddenDescription`),size:n,className:r}):(0,M.jsx)(`div`,{role:`alert`,children:(0,M.jsx)($,{icon:j,title:i(`errors.loadFailed`),description:le(e),action:t?(0,M.jsx)(y,{variant:`outline`,onClick:t,children:i(`common.retry`)}):void 0,size:n,className:r})})},Je=b(`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:i,className:a})=>(0,M.jsxs)(`span`,{"data-slot":`status-chip`,"data-tone":e,className:x(Je({tone:e,size:i}),a),children:[e===`progress`&&n?(0,M.jsx)(r,{"aria-hidden":`true`,className:`size-3 animate-spin motion-reduce:animate-none`}):(0,M.jsx)(`span`,{"aria-hidden":`true`,className:x(`size-1.5 shrink-0 rounded-full`,Ye[e])}),t]}),Ze=b(`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?d:`span`;return(0,M.jsx)(i,{"data-slot":`badge`,"data-variant":t,className:x(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,me 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,j 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-ydvfgE8a.js.map
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"./loader-circle-C-9trZPI.js";import{D as i,E as a,Q as o,_ as s,x as c}from"./auth-C4fHG9Iu.js";import{n as l,t as u}from"./createLucideIcon-CqygG5K6.js";import{_ as d,a as f,b as p,d as ee,f as m,h,i as te,l as g,m as ne,n as re,o as ie,p as _,r as ae,s as oe,t as se,u as v,v as ce,x as le}from"./es2015-BKfbx3rz.js";import{i as y,o as b,t as ue}from"./skeleton-D4eOLKLY.js";import{t as x}from"./cn-DVhJ55Mo.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=o(n.current,i):i}}function D(e){let t=i(),n=C.useContext(e.from?de:w),r=e.from??n,o=t.stores.getMatchStore(r),s=E(e,t),c=a(o,e=>e?s(e):T);if(c!==T)return c;(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=u(O),A={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`]};A.node;var j=u(A),pe={name:`x`,size:24,node:[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]};pe.node;var me=u(pe),M=e(n(),1),he=Object.defineProperty,N=(e,t)=>he(e,`name`,{value:t,configurable:!0}),P=`Dialog`,[F,ge]=ne(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]=ee({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:g(),titleId:g(),descriptionId:g(),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=p(t,i.triggerRef);return(0,M.jsx)(h.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:_(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)(te,{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=ce(`DialogOverlay.RemoveScroll`),xe=C.forwardRef(N(function(e,t){let{__scopeDialog:n,...r}=e,i=I(H,n),a=oe(),o=p(t,a);return(0,M.jsx)(re,{as:be,allowPinchZoom:!0,shards:[i.contentRef],children:(0,M.jsx)(h.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=p(t,n.contentRef,r);return C.useEffect(()=>{let e=r.current;if(e)return se(e)},[]),(0,M.jsx)(K,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,onCloseAutoFocus:_(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:_(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:_(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 ae(),(0,M.jsx)(M.Fragment,{children:(0,M.jsx)(f,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,M.jsx)(ie,{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 m(()=>(a(e=>e+1),()=>a(e=>e-1)),[a]),(0,M.jsx)(h.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 m(()=>(a(e=>e+1),()=>a(e=>e-1)),[a]),(0,M.jsx)(h.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)(h.button,{type:`button`,...r,ref:t,onClick:_(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}=l();return(0,M.jsxs)(`div`,{role:`status`,"aria-live":`polite`,className:x(`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)(ue,{className:`h-10 w-full`},t))]})},ke=({pending:e,pendingLabel:t,children:n,disabled:i,...a})=>(0,M.jsx)(y,{type:`submit`,disabled:e||i,"aria-busy":e||void 0,...a,children:e?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(r,{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:x(`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=b(`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:i=!0,nonModal:a=!1,onOpenAutoFocus:o,onCloseAutoFocus:s,onInteractOutside:c,...u}){let d=Z(o,s),{t:f}=l();return(0,M.jsxs)(Ne,{children:[a?null:(0,M.jsx)(Pe,{}),(0,M.jsxs)(G,{"data-slot":`sheet-content`,"data-size":r,"data-non-modal":a||void 0,className:x(Fe({side:n,size:r}),a&&`z-30 shadow-none`,e),onInteractOutside:e=>{a&&e.preventDefault(),c?.(e)},...u,...d,children:[t,i&&(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)(me,{"aria-hidden":`true`}),(0,M.jsx)(`span`,{className:`sr-only`,children:f(`common.close`)})]})})]})]})}function Le({className:e,...t}){return(0,M.jsx)(`div`,{"data-slot":`sheet-header`,className:x(`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:x(`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:x(`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:x(`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:x(`text-sm text-muted-foreground`,e),...t})}var He=b(`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:x(He({size:t,tone:n}),r),children:(0,M.jsx)(e,{})}),Ue=b(`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:o})=>a?(0,M.jsxs)(`div`,{className:x(`flex items-center gap-3 px-5 py-3 text-left`,o),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:x(Ue({size:i}),o),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=b(`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:x(We({width:e}),t),children:n}),Ke=({title:e,breadcrumb:t,badge:n,meta:r,actions:i,tabs:a,sticky:o=!1,className:s})=>{let{t:u}=l();return(0,M.jsxs)(`header`,{"data-slot":`page-header`,className:x(`space-y-4`,o&&`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`,s),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)(c,{...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]}),i?(0,M.jsx)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:i}):null]}),a]})},qe=({error:e,onRetry:t,size:n=`page`,className:r})=>{let{t:i}=l();return s(e)?(0,M.jsx)($,{icon:k,title:i(`errors.forbidden`),description:i(`errors.forbiddenDescription`),size:n,className:r}):(0,M.jsx)(`div`,{role:`alert`,children:(0,M.jsx)($,{icon:j,title:i(`errors.loadFailed`),description:le(e),action:t?(0,M.jsx)(y,{variant:`outline`,onClick:t,children:i(`common.retry`)}):void 0,size:n,className:r})})},Je=b(`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:i,className:a})=>(0,M.jsxs)(`span`,{"data-slot":`status-chip`,"data-tone":e,className:x(Je({tone:e,size:i}),a),children:[e===`progress`&&n?(0,M.jsx)(r,{"aria-hidden":`true`,className:`size-3 animate-spin motion-reduce:animate-none`}):(0,M.jsx)(`span`,{"aria-hidden":`true`,className:x(`size-1.5 shrink-0 rounded-full`,Ye[e])}),t]}),Ze=b(`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?d:`span`;return(0,M.jsx)(i,{"data-slot":`badge`,"data-variant":t,className:x(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,me 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,j 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-vLiQczOd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"badge-ydvfgE8a.js","names":["__iconData","__iconData","PortalPrimitive","RemoveScroll","Fragment","_Fragment","Loader2","useRef","useCallback","SheetPrimitive.Root","SheetPrimitive.Trigger","SheetPrimitive.Portal","SheetPrimitive.Overlay","SheetPrimitive.Content","SheetPrimitive.Close","XIcon","SheetPrimitive.Title","SheetPrimitive.Description","Fragment","AlertTriangle","Loader2","Slot.Root","__toESM","require_jsx_runtime","LoaderCircle","useRouter","useSelector","replaceEqualDeep","isForbidden","Link","useTranslation","createLucideIcon","Slot$1","FocusScope","useComposedRefs","useControllableState","useLayoutEffect2","Portal","useId","createContextScope","ReactRemoveScroll","DismissableLayer","composeEventHandlers","useFocusGuards","useDismissableLayerSurface","hideOthers","Presence","createSlot","describeError","Button","cva","Skeleton","cn","invariant","import_react","require_react","matchContext","dummyMatchContext","dummyMatch","useStructuralSharing","previousResult","selected","opts","slice","router","useMatch","nearestRouteId","routeId","matchStore","selector","matchSelection","match","useParams","params","__iconData$2","Lock","__iconData$1","TriangleAlert","__iconData","X","import_jsx_runtime","__defProp","__name","target","DIALOG_NAME","createDialogContext","createDialogScope","DialogProvider","useDialogContext","Dialog","openProp","props","triggerRef","contentRef","open","setOpen","defaultOpen","onOpenChange","titleCount","setTitleCount","descriptionCount","setDescriptionCount","__scopeDialog","prevOpen","TRIGGER_NAME","DialogTrigger","triggerProps","context","composedTriggerRef","forwardedRef","Primitive","getState","PORTAL_NAME","PortalProvider","usePortalContext","DialogPortal","children","forceMount","child","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","Slot","registerDismissableSurface","composedRefs","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","content","DialogContentImpl","event","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","trapFocus","onOpenAutoFocus","onCloseAutoFocus","TITLE_NAME","DialogTitle","titleProps","count","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","DEFAULT_ROWS","LoadingState","className","t","rows","index","SubmitButton","pending","disabled","pendingLabel","openerOf","active","menu","menuButton","useReturnFocus","returnTo","Sheet","SheetTrigger","SheetPortal","SheetOverlay","sheetContentVariants","SheetContent","returnFocus","nonModal","size","onInteractOutside","showCloseButton","SheetHeader","SheetBody","SheetFooter","SheetTitle","SheetDescription","tileVariants","IconTile","Icon","emptyVariants","EmptyState","compact","icon","title","description","action","pageVariants","Page","PageHeader","sticky","breadcrumb","crumb","badge","meta","actions","tabs","ErrorState","error","onRetry","chipVariants","DOT_CLASSES","StatusChip","tone","live","label","badgeVariants","Badge","Comp","asChild","variant"],"sources":["../../../../node_modules/.pnpm/@tanstack+router-core@1.171.34/node_modules/@tanstack/router-core/dist/esm/invariant.js","../../../../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/matchContext.js","../../../../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/useMatch.js","../../../../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/useParams.js","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/lock.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/triangle-alert.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/x.mjs","../../../../node_modules/.pnpm/@radix-ui+react-dialog@1.1.23_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react_926a73c8bc6f3de0d90045b25ef37c03/node_modules/@radix-ui/react-dialog/dist/index.mjs","../../src/components/LoadingState/index.tsx","../../src/components/SubmitButton/index.tsx","../../src/hooks/useReturnFocus.ts","../../src/components/ui/sheet.tsx","../../src/components/IconTile/index.tsx","../../src/components/EmptyState/index.tsx","../../src/components/Page/index.tsx","../../src/components/PageHeader/index.tsx","../../src/components/ErrorState/index.tsx","../../src/components/StatusChip/index.tsx","../../src/components/ui/badge.tsx"],"sourcesContent":["//#region src/invariant.ts\nfunction invariant() {\n\tthrow new Error(\"Invariant failed\");\n}\n//#endregion\nexport { invariant };\n\n//# sourceMappingURL=invariant.js.map","\"use client\";\nimport * as React$1 from \"react\";\n//#region src/matchContext.tsx\nvar matchContext = React$1.createContext(void 0);\nvar dummyMatchContext = React$1.createContext(void 0);\n//#endregion\nexport { dummyMatchContext, matchContext };\n\n//# sourceMappingURL=matchContext.js.map","\"use client\";\nimport { dummyMatchContext, matchContext } from \"./matchContext.js\";\nimport { useRouter } from \"./useRouter.js\";\nimport { invariant, replaceEqualDeep } from \"@tanstack/router-core\";\nimport * as React$1 from \"react\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\nimport { useSelector } from \"@tanstack/react-store\";\n//#region src/useMatch.tsx\nvar dummyMatch = {};\nfunction useStructuralSharing(opts, router) {\n\tconst previousResult = React$1.useRef();\n\treturn (slice) => {\n\t\tconst selected = opts?.select ? opts.select(slice) : slice;\n\t\tif (opts?.structuralSharing ?? router.options.defaultStructuralSharing) return previousResult.current = replaceEqualDeep(previousResult.current, selected);\n\t\treturn selected;\n\t};\n}\n/**\n* Read and select the nearest or targeted route match.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useMatchHook\n*/\nfunction useMatch(opts) {\n\tconst router = useRouter();\n\tconst nearestRouteId = React$1.useContext(opts.from ? dummyMatchContext : matchContext);\n\tconst routeId = opts.from ?? nearestRouteId;\n\tconst matchStore = router.stores.getMatchStore(routeId);\n\tif (isServer ?? router.isServer) {\n\t\tconst match = matchStore.get();\n\t\tif (!match) {\n\t\t\tif (opts.shouldThrow ?? true) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from \"${opts.from}\"` : \"a nearest match!\"}`);\n\t\t\t\tinvariant();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\treturn opts.select ? opts.select(match) : match;\n\t}\n\tconst selector = useStructuralSharing(opts, router);\n\tconst matchSelection = useSelector(matchStore, (match) => match ? selector(match) : dummyMatch);\n\tif (matchSelection !== dummyMatch) return matchSelection;\n\tif (opts.shouldThrow ?? true) {\n\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from \"${opts.from}\"` : \"a nearest match!\"}`);\n\t\tinvariant();\n\t}\n}\n//#endregion\nexport { useMatch, useStructuralSharing };\n\n//# sourceMappingURL=useMatch.js.map","import { useMatch } from \"./useMatch.js\";\n//#region src/useParams.tsx\n/**\n* Access the current route's path parameters with type-safety.\n*\n* Options:\n* - `from`/`strict`: Specify the matched route and whether to enforce strict typing\n* - `select`: Project the params object to a derived value for memoized renders\n* - `structuralSharing`: Enable structural sharing for stable references\n* - `shouldThrow`: Throw if the route is not found in strict contexts\n*\n* @returns The params object (or selected value) for the matched route.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useParamsHook\n*/\nfunction useParams(opts) {\n\treturn useMatch({\n\t\tfrom: opts.from,\n\t\tshouldThrow: opts.shouldThrow,\n\t\tstructuralSharing: opts.structuralSharing,\n\t\tstrict: opts.strict,\n\t\tselect: (match) => {\n\t\t\tconst params = opts.strict === false ? match.params : match._strictParams;\n\t\t\treturn opts.select ? opts.select(params) : params;\n\t\t}\n\t});\n}\n//#endregion\nexport { useParams };\n\n//# sourceMappingURL=useParams.js.map","/**\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: \"lock\",\n size: 24,\n node: [\n [\"rect\", { width: \"18\", height: \"11\", x: \"3\", y: \"11\", rx: \"2\", ry: \"2\", key: \"1w4ew1\" }],\n [\"path\", { d: \"M7 11V7a5 5 0 0 1 10 0v4\", key: \"fwvmzm\" }]\n ]\n};\n__iconData.node;\nconst Lock = createLucideIcon(__iconData);\n\nexport { __iconData, Lock as default };\n//# sourceMappingURL=lock.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: \"triangle-alert\",\n size: 24,\n node: [\n [\n \"path\",\n {\n 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\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n ],\n aliases: [\"alert-triangle\"]\n};\n__iconData.node;\nconst TriangleAlert = createLucideIcon(__iconData);\n\nexport { __iconData, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.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: \"x\",\n size: 24,\n node: [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n ]\n};\n__iconData.node;\nconst X = createLucideIcon(__iconData);\n\nexport { __iconData, X as default };\n//# sourceMappingURL=x.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer, useDismissableLayerSurface } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = /* @__PURE__ */ __name((props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n const [titleCount, setTitleCount] = React.useState(0);\n const [descriptionCount, setDescriptionCount] = React.useState(0);\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n titlePresent: titleCount > 0,\n descriptionPresent: descriptionCount > 0,\n setTitleCount,\n setDescriptionCount,\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n}, \"Dialog\");\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogTrigger2(props, forwardedRef) {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }, \"DialogTrigger\")\n);\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = /* @__PURE__ */ __name((props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n}, \"DialogPortal\");\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogOverlay2(props, forwardedRef) {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }, \"DialogOverlay\")\n);\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogOverlayImpl2(props, forwardedRef) {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n const registerDismissableSurface = useDismissableLayerSurface();\n const composedRefs = useComposedRefs(forwardedRef, registerDismissableSurface);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: composedRefs,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }, \"DialogOverlayImpl\")\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogContent2(props, forwardedRef) {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }, \"DialogContent\")\n);\nvar DialogContentModal = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogContentModal2(props, forwardedRef) {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: context.open,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }, \"DialogContentModal\")\n);\nvar DialogContentNonModal = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogContentNonModal2(props, forwardedRef) {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }, \"DialogContentNonModal\")\n);\nvar DialogContentImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogContentImpl2(props, forwardedRef) {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n useFocusGuards();\n return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionPresent ? context.descriptionId : void 0,\n \"aria-labelledby\": context.titlePresent ? context.titleId : void 0,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: forwardedRef,\n deferPointerDownOutside: true,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ) });\n }, \"DialogContentImpl\")\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogTitle2(props, forwardedRef) {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n const { setTitleCount } = context;\n useLayoutEffect(() => {\n setTitleCount((count) => count + 1);\n return () => setTitleCount((count) => count - 1);\n }, [setTitleCount]);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }, \"DialogTitle\")\n);\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogDescription2(props, forwardedRef) {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n const { setDescriptionCount } = context;\n useLayoutEffect(() => {\n setDescriptionCount((count) => count + 1);\n return () => setDescriptionCount((count) => count - 1);\n }, [setDescriptionCount]);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }, \"DialogDescription\")\n);\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogClose2(props, forwardedRef) {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }, \"DialogClose\")\n);\nvar WarningProvider = /* @__PURE__ */ __name((props) => {\n return props.children;\n}, \"WarningProvider\");\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\n__name(getState, \"getState\");\nexport {\n DialogClose as Close,\n DialogContent as Content,\n DialogDescription as Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n DialogOverlay as Overlay,\n DialogPortal as Portal,\n Dialog as Root,\n DialogTitle as Title,\n DialogTrigger as Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { useTranslation } from 'react-i18next';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { cn } from '@/helpers/cn';\n\ntype LoadingStateProps = { rows?: number; className?: string };\n\nconst DEFAULT_ROWS = 4;\n\nexport const LoadingState = ({ rows = DEFAULT_ROWS, className }: LoadingStateProps) => {\n const { t } = useTranslation();\n return (\n <div role=\"status\" aria-live=\"polite\" className={cn('space-y-3', className)}>\n <span className=\"sr-only\">{t('common.loading')}</span>\n {Array.from({ length: rows }, (_, index) => (\n <Skeleton key={index} className=\"h-10 w-full\" />\n ))}\n </div>\n );\n};\n","import { Loader2 } from 'lucide-react';\nimport type { ComponentProps } from 'react';\nimport { Button } from '@/components/ui/button';\n\ntype SubmitButtonProps = Omit<ComponentProps<typeof Button>, 'type'> & {\n pending: boolean;\n pendingLabel: string;\n};\n\n/** A submit button that shows progress and can't be double-submitted. */\nexport const SubmitButton = ({ pending, pendingLabel, children, disabled, ...props }: SubmitButtonProps) => (\n <Button type=\"submit\" disabled={pending || disabled} aria-busy={pending || undefined} {...props}>\n {pending ? (\n <>\n <Loader2 className=\"animate-spin\" aria-hidden=\"true\" />\n {pendingLabel}\n </>\n ) : (\n children\n )}\n </Button>\n);\n","import { useCallback, useRef } from 'react';\n\ntype AutoFocusHandler = (event: Event) => void;\n\n/**\n * The element to return to. A menu item disappears with its menu, so a dialog opened from a menu returns\n * to the button that opened the menu (the element whose `aria-controls` names the menu).\n */\nconst openerOf = (active: Element | null): HTMLElement | null => {\n if (!(active instanceof HTMLElement) || active === document.body) {\n return null;\n }\n const menu = active.closest('[role=\"menu\"]');\n const menuButton = menu?.id ? document.querySelector(`[aria-controls=\"${CSS.escape(menu.id)}\"]`) : null;\n return menuButton instanceof HTMLElement ? menuButton : active;\n};\n\n/**\n * Returns focus to whatever had it when a dialog opened, once it closes. Radix only returns focus to its\n * own Trigger, so dialogs opened another way (state, the URL, a picker callback) would leave focus on the\n * page body. Compose the returned handlers onto Radix's `onOpenAutoFocus`/`onCloseAutoFocus`; a caller's\n * own handler runs first and can still take over with `event.preventDefault()`.\n *\n * Radix skips `onOpenAutoFocus` when focus is already inside the dialog, so controls in dialogs must not\n * use `autoFocus`: Radix focuses the first control itself (or the caller's `onOpenAutoFocus` chooses one).\n */\nexport const useReturnFocus = (onOpenAutoFocus?: AutoFocusHandler, onCloseAutoFocus?: AutoFocusHandler) => {\n const returnTo = useRef<HTMLElement | null>(null);\n const handleOpenAutoFocus = useCallback(\n (event: Event) => {\n // Runs before Radix moves focus into the dialog: the active element is still the opener.\n returnTo.current = openerOf(document.activeElement);\n onOpenAutoFocus?.(event);\n },\n [onOpenAutoFocus],\n );\n const handleCloseAutoFocus = useCallback(\n (event: Event) => {\n onCloseAutoFocus?.(event);\n const target = returnTo.current;\n returnTo.current = null;\n if (event.defaultPrevented || !target?.isConnected) {\n return;\n }\n target.focus({ preventScroll: true });\n if (document.activeElement === target) {\n event.preventDefault();\n }\n },\n [onCloseAutoFocus],\n );\n return { onOpenAutoFocus: handleOpenAutoFocus, onCloseAutoFocus: handleCloseAutoFocus };\n};\n","'use client';\n\nimport { cva } from 'class-variance-authority';\nimport { XIcon } from 'lucide-react';\nimport { Dialog as SheetPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/helpers/cn';\nimport { useReturnFocus } from '@/hooks/useReturnFocus';\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n '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',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Shapio: side sheets are full width on phones and `xs` 360px, `sm` 400px, `md` 560px or `lg` 720px from\n * the sm breakpoint (DESIGN.md \"Dialogs\"). Top and bottom sheets span the viewport and ignore `size`.\n */\nconst sheetContentVariants = cva(\n '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',\n {\n variants: {\n side: {\n right:\n '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',\n 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',\n top: 'inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n bottom:\n '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',\n },\n size: { xs: '', sm: '', md: '', lg: '' },\n },\n compoundVariants: [\n { side: ['left', 'right'], size: 'xs', className: 'sm:max-w-90' },\n { side: ['left', 'right'], size: 'sm', className: 'sm:max-w-100' },\n { side: ['left', 'right'], size: 'md', className: 'sm:max-w-140' },\n { side: ['left', 'right'], size: 'lg', className: 'sm:max-w-180' },\n ],\n defaultVariants: { side: 'right', size: 'sm' },\n },\n);\n\ntype SheetSide = 'top' | 'right' | 'bottom' | 'left';\ntype SheetSize = 'xs' | 'sm' | 'md' | 'lg';\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n size = 'sm',\n showCloseButton = true,\n nonModal = false,\n onOpenAutoFocus,\n onCloseAutoFocus,\n onInteractOutside,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: SheetSide;\n /** Width of a left or right sheet from the sm breakpoint: xs 360px, sm 400px (default), md 560px, lg 720px. */\n size?: SheetSize;\n showCloseButton?: boolean;\n /**\n * A panel beside the page instead of over it (the entry document's settings drawer): no backdrop, the\n * page stays interactive, clicking the page doesn't close it; Escape and the close button do. Pair it\n * with `<Sheet modal={false}>`. Only for panels the person works next to; everything else stays modal.\n */\n nonModal?: boolean;\n}) {\n const returnFocus = useReturnFocus(onOpenAutoFocus, onCloseAutoFocus);\n const { t } = useTranslation();\n return (\n <SheetPortal>\n {nonModal ? null : <SheetOverlay />}\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n data-size={size}\n data-non-modal={nonModal || undefined}\n className={cn(sheetContentVariants({ side, size }), nonModal && 'z-30 shadow-none', className)}\n onInteractOutside={(event) => {\n if (nonModal) {\n event.preventDefault();\n }\n onInteractOutside?.(event);\n }}\n {...props}\n {...returnFocus}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" className=\"absolute top-4 right-4 text-muted-foreground\">\n <XIcon aria-hidden=\"true\" />\n <span className=\"sr-only\">{t('common.close')}</span>\n </Button>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn('flex flex-col gap-1.5 px-6 pt-6 pb-4', className)}\n {...props}\n />\n );\n}\n\n/** Shapio: the scrolling middle of a sheet, between a fixed header and footer. */\nfunction SheetBody({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-body\"\n className={cn('min-h-0 flex-1 overflow-y-auto px-6 pb-6', className)}\n {...props}\n />\n );\n}\n\n/** Shapio: a bordered action row on a muted band, Cancel then the primary action on the right. */\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\n 'mt-auto flex flex-wrap items-center justify-end gap-2 border-t bg-muted/40 px-6 py-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-lg leading-tight font-semibold tracking-tight text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetBody,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","import { cva } from 'class-variance-authority';\nimport type { LucideIcon } from 'lucide-react';\nimport { cn } from '@/helpers/cn';\n\nconst tileVariants = cva('flex shrink-0 items-center justify-center rounded-lg', {\n variants: {\n size: {\n sm: 'size-8 [&_svg]:size-4',\n md: 'size-9 [&_svg]:size-[18px]',\n lg: 'size-10 [&_svg]:size-5',\n },\n tone: {\n // A neutral tile with a cobalt (dark: periwinkle) icon; the accent surface is kept for selection.\n accent: 'bg-muted text-primary dark:text-accent-foreground',\n muted: 'bg-muted text-muted-foreground',\n success: 'bg-success-muted text-success',\n warning: 'bg-warning-muted text-warning',\n danger: 'bg-destructive-muted text-destructive',\n },\n },\n defaultVariants: { size: 'md', tone: 'accent' },\n});\n\ntype IconTileProps = {\n icon: LucideIcon;\n /** sm 32px, md 36px (default), lg 40px. */\n size?: 'sm' | 'md' | 'lg';\n tone?: 'accent' | 'muted' | 'success' | 'warning' | 'danger';\n className?: string;\n};\n\n/** A tinted square holding an icon: cards, pickers, list rows and empty states. Decorative. */\nexport const IconTile = ({ icon: Icon, size, tone, className }: IconTileProps) => (\n <span aria-hidden=\"true\" className={cn(tileVariants({ size, tone }), className)}>\n <Icon />\n </span>\n);\n","import { cva } from 'class-variance-authority';\nimport type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { cn } from '@/helpers/cn';\nimport { IconTile } from '../IconTile';\n\nconst emptyVariants = cva('flex flex-col items-center justify-center gap-3 px-6 text-center', {\n variants: {\n size: {\n /** Inside a Panel or a card: no surface of its own. */\n panel: 'py-10',\n /** The whole screen's content: on a card surface. */\n page: 'rounded-xl border bg-card py-16',\n },\n },\n defaultVariants: { size: 'page' },\n});\n\ntype EmptyStateProps = {\n title: string;\n /** One line. */\n description?: string;\n icon?: LucideIcon;\n /** One primary action. */\n action?: ReactNode;\n size?: 'panel' | 'page';\n /**\n * One row (about 56px) instead of a centred block: a small icon tile, the title and the description\n * inline. For panels that sit beside others and must stay as short as their content. Ignores `size`.\n */\n compact?: boolean;\n className?: string;\n};\n\nexport const EmptyState = ({\n title,\n description,\n icon,\n action,\n size,\n compact,\n className,\n}: EmptyStateProps) =>\n compact ? (\n <div className={cn('flex items-center gap-3 px-5 py-3 text-left', className)}>\n {icon ? <IconTile icon={icon} size=\"sm\" /> : null}\n <p className=\"min-w-0 flex-1 text-sm\">\n <span className=\"font-semibold\">{title}</span>\n {description ? <span className=\"text-muted-foreground\"> {description}</span> : null}\n </p>\n {action}\n </div>\n ) : (\n <div className={cn(emptyVariants({ size }), className)}>\n {icon ? <IconTile icon={icon} size=\"lg\" /> : null}\n <div className=\"space-y-1\">\n <p className=\"text-base font-semibold\">{title}</p>\n {description ? <p className=\"max-w-md text-sm text-muted-foreground\">{description}</p> : null}\n </div>\n {action}\n </div>\n );\n","import { cva } from 'class-variance-authority';\nimport type { ReactNode } from 'react';\nimport { cn } from '@/helpers/cn';\n\nconst pageVariants = cva('mx-auto w-full min-w-0 space-y-6', {\n variants: {\n width: {\n /** Tables, grids, editors with side panels. */\n full: '',\n /** Most screens. */\n default: 'max-w-6xl',\n /** Single forms and settings pages. */\n narrow: 'max-w-3xl',\n },\n },\n defaultVariants: { width: 'default' },\n});\n\ntype PageProps = { width?: 'full' | 'default' | 'narrow'; className?: string; children: ReactNode };\n\n/** A screen's content column: one of three widths, sections 24px apart. The Shell provides the gutter. */\nexport const Page = ({ width, className, children }: PageProps) => (\n <div data-slot=\"page\" className={cn(pageVariants({ width }), className)}>\n {children}\n </div>\n);\n","import { Link, type LinkOptions } from '@tanstack/react-router';\nimport { Fragment, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/helpers/cn';\n\nexport type BreadcrumbItem = {\n label: string;\n /** Where the crumb goes; build it with `linkOptions({ to, params })` for typed params. */\n link?: LinkOptions;\n};\n\ntype PageHeaderProps = {\n /** The page's h1 (28/700). */\n title: string;\n /** Trail above the title, without the current page (e.g. Content / Articles above \"Hello world\"). */\n breadcrumb?: readonly BreadcrumbItem[];\n /** Beside the title: a StatusChip, a count. */\n badge?: ReactNode;\n /** One line under the title, 13px muted: \"API ID article · version 2\", \"112 entries\". */\n meta?: ReactNode;\n /** Right side: buttons, primary last. */\n actions?: ReactNode;\n /** Under the header, full width: `LinkTabs`, or `TabsList variant=\"underline\"` inside a `Tabs`. */\n tabs?: ReactNode;\n /** Editors: the header (title and actions) stays at the top while the form scrolls. */\n sticky?: boolean;\n className?: string;\n};\n\n/** The top of every screen: breadcrumb, title, badge, meta line, actions, tabs. */\nexport const PageHeader = ({\n title,\n breadcrumb,\n badge,\n meta,\n actions,\n tabs,\n sticky = false,\n className,\n}: PageHeaderProps) => {\n const { t } = useTranslation();\n return (\n <header\n data-slot=\"page-header\"\n className={cn(\n 'space-y-4',\n sticky &&\n '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',\n className,\n )}\n >\n <div className=\"flex flex-wrap items-start justify-between gap-x-4 gap-y-3\">\n <div className=\"min-w-0 space-y-1\">\n {breadcrumb && breadcrumb.length > 0 ? (\n <nav aria-label={t('common.breadcrumb')}>\n <ol className=\"flex flex-wrap items-center gap-1.5 text-meta font-medium text-muted-foreground\">\n {breadcrumb.map((crumb, index) => (\n <Fragment key={`${crumb.label}-${index}`}>\n {index > 0 ? (\n <li aria-hidden=\"true\" className=\"text-muted-foreground/70\">\n /\n </li>\n ) : null}\n <li className=\"min-w-0 truncate\">\n {crumb.link ? (\n <Link\n {...crumb.link}\n className=\"rounded-sm outline-none hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50\"\n >\n {crumb.label}\n </Link>\n ) : (\n crumb.label\n )}\n </li>\n </Fragment>\n ))}\n </ol>\n </nav>\n ) : null}\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1\">\n <h1 className=\"min-w-0 text-title break-words\">{title}</h1>\n {badge}\n </div>\n {meta ? <div className=\"text-meta text-muted-foreground\">{meta}</div> : null}\n </div>\n {actions ? <div className=\"flex shrink-0 flex-wrap items-center gap-2\">{actions}</div> : null}\n </div>\n {tabs}\n </header>\n );\n};\n","import { AlertTriangle, Lock } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { isForbidden } from '@/api/errors';\nimport { Button } from '@/components/ui/button';\nimport { describeError } from '@/helpers/describeError';\nimport { EmptyState } from '../EmptyState';\n\ntype ErrorStateProps = {\n error: unknown;\n onRetry?: () => void;\n /** `panel` inside a Panel or TableCard (no surface of its own), `page` on its own (default). */\n size?: 'panel' | 'page';\n className?: string;\n};\n\n/** A failed load, shown in place of the content. 403 gets its own message (retrying won't help). */\nexport const ErrorState = ({ error, onRetry, size = 'page', className }: ErrorStateProps) => {\n const { t } = useTranslation();\n if (isForbidden(error)) {\n return (\n <EmptyState\n icon={Lock}\n title={t('errors.forbidden')}\n description={t('errors.forbiddenDescription')}\n size={size}\n className={className}\n />\n );\n }\n return (\n <div role=\"alert\">\n <EmptyState\n icon={AlertTriangle}\n title={t('errors.loadFailed')}\n description={describeError(error)}\n action={\n onRetry ? (\n <Button variant=\"outline\" onClick={onRetry}>\n {t('common.retry')}\n </Button>\n ) : undefined\n }\n size={size}\n className={className}\n />\n </div>\n );\n};\n","import { cva } from 'class-variance-authority';\nimport { Loader2 } from 'lucide-react';\nimport { cn } from '@/helpers/cn';\n\n/**\n * What a state means, not what it's called: draft → neutral, changed → warning, published → success,\n * scheduled → scheduled, failed → danger, running → progress, cancelled/archived → muted.\n */\nexport type StatusTone = 'neutral' | 'progress' | 'scheduled' | 'success' | 'warning' | 'danger' | 'muted';\n\nconst chipVariants = cva(\n 'inline-flex w-fit shrink-0 items-center gap-1.5 rounded-full font-semibold whitespace-nowrap',\n {\n variants: {\n tone: {\n neutral: 'bg-muted text-foreground',\n progress: 'bg-muted text-muted-foreground',\n scheduled: 'bg-info-muted text-info',\n success: 'bg-success-muted text-success',\n warning: 'bg-warning-muted text-warning',\n danger: 'bg-destructive-muted text-destructive',\n muted: 'border text-muted-foreground',\n },\n size: {\n default: 'h-6 px-2.5 text-xs',\n sm: 'h-5 px-2 text-2xs',\n },\n },\n defaultVariants: { tone: 'neutral', size: 'default' },\n },\n);\n\nconst DOT_CLASSES = {\n neutral: 'bg-muted-foreground',\n progress: 'bg-muted-foreground',\n scheduled: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n muted: 'border border-muted-foreground',\n} satisfies Record<StatusTone, string>;\n\ntype StatusChipProps = {\n tone: StatusTone;\n /** Always shown: the colour is never the only signal. */\n label: string;\n /** `progress` spins while the work runs; false for states that are over (a timeline's past entries). */\n live?: boolean;\n size?: 'default' | 'sm';\n className?: string;\n};\n\n/** A state as a dot + label pill. The one way to show the status of an entry, job, asset, change set… */\nexport const StatusChip = ({ tone, label, live = true, size, className }: StatusChipProps) => (\n <span data-slot=\"status-chip\" data-tone={tone} className={cn(chipVariants({ tone, size }), className)}>\n {tone === 'progress' && live ? (\n <Loader2 aria-hidden=\"true\" className=\"size-3 animate-spin motion-reduce:animate-none\" />\n ) : (\n <span aria-hidden=\"true\" className={cn('size-1.5 shrink-0 rounded-full', DOT_CLASSES[tone])} />\n )}\n {label}\n </span>\n);\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nconst badgeVariants = cva(\n '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',\n {\n variants: {\n variant: {\n // Shapio: neutral labels only (Default, Built-in, You, roles, kinds, counts). State goes through\n // StatusChip (DESIGN.md).\n secondary: 'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90',\n outline: 'border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n },\n },\n defaultVariants: {\n variant: 'secondary',\n },\n },\n);\n\nfunction Badge({\n className,\n variant = 'secondary',\n asChild = false,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'span';\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge };\n"],"ignoreList":[0,1,2,3,4,5,6,7],"mappings":"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"}
1
+ {"version":3,"file":"badge-vLiQczOd.js","names":["__iconData","__iconData","PortalPrimitive","RemoveScroll","Fragment","_Fragment","Loader2","useRef","useCallback","SheetPrimitive.Root","SheetPrimitive.Trigger","SheetPrimitive.Portal","SheetPrimitive.Overlay","SheetPrimitive.Content","SheetPrimitive.Close","XIcon","SheetPrimitive.Title","SheetPrimitive.Description","Fragment","AlertTriangle","Loader2","Slot.Root","__toESM","require_jsx_runtime","LoaderCircle","useRouter","useSelector","replaceEqualDeep","isForbidden","Link","useTranslation","createLucideIcon","Slot$1","FocusScope","useComposedRefs","useControllableState","useLayoutEffect2","Portal","useId","createContextScope","ReactRemoveScroll","DismissableLayer","composeEventHandlers","useFocusGuards","useDismissableLayerSurface","hideOthers","Presence","createSlot","describeError","Button","cva","Skeleton","cn","invariant","import_react","require_react","matchContext","dummyMatchContext","dummyMatch","useStructuralSharing","previousResult","selected","opts","slice","router","useMatch","nearestRouteId","routeId","matchStore","selector","matchSelection","match","useParams","params","__iconData$2","Lock","__iconData$1","TriangleAlert","__iconData","X","import_jsx_runtime","__defProp","__name","target","DIALOG_NAME","createDialogContext","createDialogScope","DialogProvider","useDialogContext","Dialog","openProp","props","triggerRef","contentRef","open","setOpen","defaultOpen","onOpenChange","titleCount","setTitleCount","descriptionCount","setDescriptionCount","__scopeDialog","prevOpen","TRIGGER_NAME","DialogTrigger","triggerProps","context","composedTriggerRef","forwardedRef","Primitive","getState","PORTAL_NAME","PortalProvider","usePortalContext","DialogPortal","children","forceMount","child","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","Slot","registerDismissableSurface","composedRefs","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","content","DialogContentImpl","event","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","trapFocus","onOpenAutoFocus","onCloseAutoFocus","TITLE_NAME","DialogTitle","titleProps","count","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","DEFAULT_ROWS","LoadingState","className","t","rows","index","SubmitButton","pending","disabled","pendingLabel","openerOf","active","menu","menuButton","useReturnFocus","returnTo","Sheet","SheetTrigger","SheetPortal","SheetOverlay","sheetContentVariants","SheetContent","returnFocus","nonModal","size","onInteractOutside","showCloseButton","SheetHeader","SheetBody","SheetFooter","SheetTitle","SheetDescription","tileVariants","IconTile","Icon","emptyVariants","EmptyState","compact","icon","title","description","action","pageVariants","Page","PageHeader","sticky","breadcrumb","crumb","badge","meta","actions","tabs","ErrorState","error","onRetry","chipVariants","DOT_CLASSES","StatusChip","tone","live","label","badgeVariants","Badge","Comp","asChild","variant"],"sources":["../../../../node_modules/.pnpm/@tanstack+router-core@1.171.34/node_modules/@tanstack/router-core/dist/esm/invariant.js","../../../../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/matchContext.js","../../../../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/useMatch.js","../../../../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/useParams.js","../../../../node_modules/.pnpm/lucide-react@1.49.0_@types+react@19.3.0_react@19.3.0/node_modules/lucide-react/dist/esm/icons/lock.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/triangle-alert.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/x.mjs","../../../../node_modules/.pnpm/@radix-ui+react-dialog@1.1.23_@types+react-dom@19.3.0_@types+react@19.3.0__@types+react_926a73c8bc6f3de0d90045b25ef37c03/node_modules/@radix-ui/react-dialog/dist/index.mjs","../../src/components/LoadingState/index.tsx","../../src/components/SubmitButton/index.tsx","../../src/hooks/useReturnFocus.ts","../../src/components/ui/sheet.tsx","../../src/components/IconTile/index.tsx","../../src/components/EmptyState/index.tsx","../../src/components/Page/index.tsx","../../src/components/PageHeader/index.tsx","../../src/components/ErrorState/index.tsx","../../src/components/StatusChip/index.tsx","../../src/components/ui/badge.tsx"],"sourcesContent":["//#region src/invariant.ts\nfunction invariant() {\n\tthrow new Error(\"Invariant failed\");\n}\n//#endregion\nexport { invariant };\n\n//# sourceMappingURL=invariant.js.map","\"use client\";\nimport * as React$1 from \"react\";\n//#region src/matchContext.tsx\nvar matchContext = React$1.createContext(void 0);\nvar dummyMatchContext = React$1.createContext(void 0);\n//#endregion\nexport { dummyMatchContext, matchContext };\n\n//# sourceMappingURL=matchContext.js.map","\"use client\";\nimport { dummyMatchContext, matchContext } from \"./matchContext.js\";\nimport { useRouter } from \"./useRouter.js\";\nimport { invariant, replaceEqualDeep } from \"@tanstack/router-core\";\nimport * as React$1 from \"react\";\nimport { isServer } from \"@tanstack/router-core/isServer\";\nimport { useSelector } from \"@tanstack/react-store\";\n//#region src/useMatch.tsx\nvar dummyMatch = {};\nfunction useStructuralSharing(opts, router) {\n\tconst previousResult = React$1.useRef();\n\treturn (slice) => {\n\t\tconst selected = opts?.select ? opts.select(slice) : slice;\n\t\tif (opts?.structuralSharing ?? router.options.defaultStructuralSharing) return previousResult.current = replaceEqualDeep(previousResult.current, selected);\n\t\treturn selected;\n\t};\n}\n/**\n* Read and select the nearest or targeted route match.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useMatchHook\n*/\nfunction useMatch(opts) {\n\tconst router = useRouter();\n\tconst nearestRouteId = React$1.useContext(opts.from ? dummyMatchContext : matchContext);\n\tconst routeId = opts.from ?? nearestRouteId;\n\tconst matchStore = router.stores.getMatchStore(routeId);\n\tif (isServer ?? router.isServer) {\n\t\tconst match = matchStore.get();\n\t\tif (!match) {\n\t\t\tif (opts.shouldThrow ?? true) {\n\t\t\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from \"${opts.from}\"` : \"a nearest match!\"}`);\n\t\t\t\tinvariant();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\treturn opts.select ? opts.select(match) : match;\n\t}\n\tconst selector = useStructuralSharing(opts, router);\n\tconst matchSelection = useSelector(matchStore, (match) => match ? selector(match) : dummyMatch);\n\tif (matchSelection !== dummyMatch) return matchSelection;\n\tif (opts.shouldThrow ?? true) {\n\t\tif (process.env.NODE_ENV !== \"production\") throw new Error(`Invariant failed: Could not find ${opts.from ? `an active match from \"${opts.from}\"` : \"a nearest match!\"}`);\n\t\tinvariant();\n\t}\n}\n//#endregion\nexport { useMatch, useStructuralSharing };\n\n//# sourceMappingURL=useMatch.js.map","import { useMatch } from \"./useMatch.js\";\n//#region src/useParams.tsx\n/**\n* Access the current route's path parameters with type-safety.\n*\n* Options:\n* - `from`/`strict`: Specify the matched route and whether to enforce strict typing\n* - `select`: Project the params object to a derived value for memoized renders\n* - `structuralSharing`: Enable structural sharing for stable references\n* - `shouldThrow`: Throw if the route is not found in strict contexts\n*\n* @returns The params object (or selected value) for the matched route.\n* @link https://tanstack.com/router/latest/docs/framework/react/api/router/useParamsHook\n*/\nfunction useParams(opts) {\n\treturn useMatch({\n\t\tfrom: opts.from,\n\t\tshouldThrow: opts.shouldThrow,\n\t\tstructuralSharing: opts.structuralSharing,\n\t\tstrict: opts.strict,\n\t\tselect: (match) => {\n\t\t\tconst params = opts.strict === false ? match.params : match._strictParams;\n\t\t\treturn opts.select ? opts.select(params) : params;\n\t\t}\n\t});\n}\n//#endregion\nexport { useParams };\n\n//# sourceMappingURL=useParams.js.map","/**\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: \"lock\",\n size: 24,\n node: [\n [\"rect\", { width: \"18\", height: \"11\", x: \"3\", y: \"11\", rx: \"2\", ry: \"2\", key: \"1w4ew1\" }],\n [\"path\", { d: \"M7 11V7a5 5 0 0 1 10 0v4\", key: \"fwvmzm\" }]\n ]\n};\n__iconData.node;\nconst Lock = createLucideIcon(__iconData);\n\nexport { __iconData, Lock as default };\n//# sourceMappingURL=lock.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: \"triangle-alert\",\n size: 24,\n node: [\n [\n \"path\",\n {\n 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\",\n key: \"wmoenq\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n ],\n aliases: [\"alert-triangle\"]\n};\n__iconData.node;\nconst TriangleAlert = createLucideIcon(__iconData);\n\nexport { __iconData, TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.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: \"x\",\n size: 24,\n node: [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n ]\n};\n__iconData.node;\nconst X = createLucideIcon(__iconData);\n\nexport { __iconData, X as default };\n//# sourceMappingURL=x.mjs.map\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer, useDismissableLayerSurface } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = /* @__PURE__ */ __name((props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n const [titleCount, setTitleCount] = React.useState(0);\n const [descriptionCount, setDescriptionCount] = React.useState(0);\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n titlePresent: titleCount > 0,\n descriptionPresent: descriptionCount > 0,\n setTitleCount,\n setDescriptionCount,\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n}, \"Dialog\");\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogTrigger2(props, forwardedRef) {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.open ? context.contentId : void 0,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }, \"DialogTrigger\")\n);\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = /* @__PURE__ */ __name((props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n}, \"DialogPortal\");\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogOverlay2(props, forwardedRef) {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }, \"DialogOverlay\")\n);\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogOverlayImpl2(props, forwardedRef) {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n const registerDismissableSurface = useDismissableLayerSurface();\n const composedRefs = useComposedRefs(forwardedRef, registerDismissableSurface);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: composedRefs,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }, \"DialogOverlayImpl\")\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogContent2(props, forwardedRef) {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }, \"DialogContent\")\n);\nvar DialogContentModal = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogContentModal2(props, forwardedRef) {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: context.open,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }, \"DialogContentModal\")\n);\nvar DialogContentNonModal = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogContentNonModal2(props, forwardedRef) {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }, \"DialogContentNonModal\")\n);\nvar DialogContentImpl = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogContentImpl2(props, forwardedRef) {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n useFocusGuards();\n return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionPresent ? context.descriptionId : void 0,\n \"aria-labelledby\": context.titlePresent ? context.titleId : void 0,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: forwardedRef,\n deferPointerDownOutside: true,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ) });\n }, \"DialogContentImpl\")\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogTitle2(props, forwardedRef) {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n const { setTitleCount } = context;\n useLayoutEffect(() => {\n setTitleCount((count) => count + 1);\n return () => setTitleCount((count) => count - 1);\n }, [setTitleCount]);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }, \"DialogTitle\")\n);\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = /* @__PURE__ */ React.forwardRef(\n // blank line to reduce diff noise\n /* @__PURE__ */ __name(function DialogDescription2(props, forwardedRef) {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n const { setDescriptionCount } = context;\n useLayoutEffect(() => {\n setDescriptionCount((count) => count + 1);\n return () => setDescriptionCount((count) => count - 1);\n }, [setDescriptionCount]);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }, \"DialogDescription\")\n);\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = /* @__PURE__ */ React.forwardRef(\n /* @__PURE__ */ __name(function DialogClose2(props, forwardedRef) {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }, \"DialogClose\")\n);\nvar WarningProvider = /* @__PURE__ */ __name((props) => {\n return props.children;\n}, \"WarningProvider\");\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\n__name(getState, \"getState\");\nexport {\n DialogClose as Close,\n DialogContent as Content,\n DialogDescription as Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n DialogOverlay as Overlay,\n DialogPortal as Portal,\n Dialog as Root,\n DialogTitle as Title,\n DialogTrigger as Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import { useTranslation } from 'react-i18next';\nimport { Skeleton } from '@/components/ui/skeleton';\nimport { cn } from '@/helpers/cn';\n\ntype LoadingStateProps = { rows?: number; className?: string };\n\nconst DEFAULT_ROWS = 4;\n\nexport const LoadingState = ({ rows = DEFAULT_ROWS, className }: LoadingStateProps) => {\n const { t } = useTranslation();\n return (\n <div role=\"status\" aria-live=\"polite\" className={cn('space-y-3', className)}>\n <span className=\"sr-only\">{t('common.loading')}</span>\n {Array.from({ length: rows }, (_, index) => (\n <Skeleton key={index} className=\"h-10 w-full\" />\n ))}\n </div>\n );\n};\n","import { Loader2 } from 'lucide-react';\nimport type { ComponentProps } from 'react';\nimport { Button } from '@/components/ui/button';\n\ntype SubmitButtonProps = Omit<ComponentProps<typeof Button>, 'type'> & {\n pending: boolean;\n pendingLabel: string;\n};\n\n/** A submit button that shows progress and can't be double-submitted. */\nexport const SubmitButton = ({ pending, pendingLabel, children, disabled, ...props }: SubmitButtonProps) => (\n <Button type=\"submit\" disabled={pending || disabled} aria-busy={pending || undefined} {...props}>\n {pending ? (\n <>\n <Loader2 className=\"animate-spin\" aria-hidden=\"true\" />\n {pendingLabel}\n </>\n ) : (\n children\n )}\n </Button>\n);\n","import { useCallback, useRef } from 'react';\n\ntype AutoFocusHandler = (event: Event) => void;\n\n/**\n * The element to return to. A menu item disappears with its menu, so a dialog opened from a menu returns\n * to the button that opened the menu (the element whose `aria-controls` names the menu).\n */\nconst openerOf = (active: Element | null): HTMLElement | null => {\n if (!(active instanceof HTMLElement) || active === document.body) {\n return null;\n }\n const menu = active.closest('[role=\"menu\"]');\n const menuButton = menu?.id ? document.querySelector(`[aria-controls=\"${CSS.escape(menu.id)}\"]`) : null;\n return menuButton instanceof HTMLElement ? menuButton : active;\n};\n\n/**\n * Returns focus to whatever had it when a dialog opened, once it closes. Radix only returns focus to its\n * own Trigger, so dialogs opened another way (state, the URL, a picker callback) would leave focus on the\n * page body. Compose the returned handlers onto Radix's `onOpenAutoFocus`/`onCloseAutoFocus`; a caller's\n * own handler runs first and can still take over with `event.preventDefault()`.\n *\n * Radix skips `onOpenAutoFocus` when focus is already inside the dialog, so controls in dialogs must not\n * use `autoFocus`: Radix focuses the first control itself (or the caller's `onOpenAutoFocus` chooses one).\n */\nexport const useReturnFocus = (onOpenAutoFocus?: AutoFocusHandler, onCloseAutoFocus?: AutoFocusHandler) => {\n const returnTo = useRef<HTMLElement | null>(null);\n const handleOpenAutoFocus = useCallback(\n (event: Event) => {\n // Runs before Radix moves focus into the dialog: the active element is still the opener.\n returnTo.current = openerOf(document.activeElement);\n onOpenAutoFocus?.(event);\n },\n [onOpenAutoFocus],\n );\n const handleCloseAutoFocus = useCallback(\n (event: Event) => {\n onCloseAutoFocus?.(event);\n const target = returnTo.current;\n returnTo.current = null;\n if (event.defaultPrevented || !target?.isConnected) {\n return;\n }\n target.focus({ preventScroll: true });\n if (document.activeElement === target) {\n event.preventDefault();\n }\n },\n [onCloseAutoFocus],\n );\n return { onOpenAutoFocus: handleOpenAutoFocus, onCloseAutoFocus: handleCloseAutoFocus };\n};\n","'use client';\n\nimport { cva } from 'class-variance-authority';\nimport { XIcon } from 'lucide-react';\nimport { Dialog as SheetPrimitive } from 'radix-ui';\nimport * as React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/helpers/cn';\nimport { useReturnFocus } from '@/hooks/useReturnFocus';\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n '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',\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Shapio: side sheets are full width on phones and `xs` 360px, `sm` 400px, `md` 560px or `lg` 720px from\n * the sm breakpoint (DESIGN.md \"Dialogs\"). Top and bottom sheets span the viewport and ignore `size`.\n */\nconst sheetContentVariants = cva(\n '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',\n {\n variants: {\n side: {\n right:\n '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',\n 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',\n top: 'inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n bottom:\n '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',\n },\n size: { xs: '', sm: '', md: '', lg: '' },\n },\n compoundVariants: [\n { side: ['left', 'right'], size: 'xs', className: 'sm:max-w-90' },\n { side: ['left', 'right'], size: 'sm', className: 'sm:max-w-100' },\n { side: ['left', 'right'], size: 'md', className: 'sm:max-w-140' },\n { side: ['left', 'right'], size: 'lg', className: 'sm:max-w-180' },\n ],\n defaultVariants: { side: 'right', size: 'sm' },\n },\n);\n\ntype SheetSide = 'top' | 'right' | 'bottom' | 'left';\ntype SheetSize = 'xs' | 'sm' | 'md' | 'lg';\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n size = 'sm',\n showCloseButton = true,\n nonModal = false,\n onOpenAutoFocus,\n onCloseAutoFocus,\n onInteractOutside,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: SheetSide;\n /** Width of a left or right sheet from the sm breakpoint: xs 360px, sm 400px (default), md 560px, lg 720px. */\n size?: SheetSize;\n showCloseButton?: boolean;\n /**\n * A panel beside the page instead of over it (the entry document's settings drawer): no backdrop, the\n * page stays interactive, clicking the page doesn't close it; Escape and the close button do. Pair it\n * with `<Sheet modal={false}>`. Only for panels the person works next to; everything else stays modal.\n */\n nonModal?: boolean;\n}) {\n const returnFocus = useReturnFocus(onOpenAutoFocus, onCloseAutoFocus);\n const { t } = useTranslation();\n return (\n <SheetPortal>\n {nonModal ? null : <SheetOverlay />}\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n data-size={size}\n data-non-modal={nonModal || undefined}\n className={cn(sheetContentVariants({ side, size }), nonModal && 'z-30 shadow-none', className)}\n onInteractOutside={(event) => {\n if (nonModal) {\n event.preventDefault();\n }\n onInteractOutside?.(event);\n }}\n {...props}\n {...returnFocus}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" className=\"absolute top-4 right-4 text-muted-foreground\">\n <XIcon aria-hidden=\"true\" />\n <span className=\"sr-only\">{t('common.close')}</span>\n </Button>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn('flex flex-col gap-1.5 px-6 pt-6 pb-4', className)}\n {...props}\n />\n );\n}\n\n/** Shapio: the scrolling middle of a sheet, between a fixed header and footer. */\nfunction SheetBody({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-body\"\n className={cn('min-h-0 flex-1 overflow-y-auto px-6 pb-6', className)}\n {...props}\n />\n );\n}\n\n/** Shapio: a bordered action row on a muted band, Cancel then the primary action on the right. */\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\n 'mt-auto flex flex-wrap items-center justify-end gap-2 border-t bg-muted/40 px-6 py-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-lg leading-tight font-semibold tracking-tight text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetBody,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","import { cva } from 'class-variance-authority';\nimport type { LucideIcon } from 'lucide-react';\nimport { cn } from '@/helpers/cn';\n\nconst tileVariants = cva('flex shrink-0 items-center justify-center rounded-lg', {\n variants: {\n size: {\n sm: 'size-8 [&_svg]:size-4',\n md: 'size-9 [&_svg]:size-[18px]',\n lg: 'size-10 [&_svg]:size-5',\n },\n tone: {\n // A neutral tile with a cobalt (dark: periwinkle) icon; the accent surface is kept for selection.\n accent: 'bg-muted text-primary dark:text-accent-foreground',\n muted: 'bg-muted text-muted-foreground',\n success: 'bg-success-muted text-success',\n warning: 'bg-warning-muted text-warning',\n danger: 'bg-destructive-muted text-destructive',\n },\n },\n defaultVariants: { size: 'md', tone: 'accent' },\n});\n\ntype IconTileProps = {\n icon: LucideIcon;\n /** sm 32px, md 36px (default), lg 40px. */\n size?: 'sm' | 'md' | 'lg';\n tone?: 'accent' | 'muted' | 'success' | 'warning' | 'danger';\n className?: string;\n};\n\n/** A tinted square holding an icon: cards, pickers, list rows and empty states. Decorative. */\nexport const IconTile = ({ icon: Icon, size, tone, className }: IconTileProps) => (\n <span aria-hidden=\"true\" className={cn(tileVariants({ size, tone }), className)}>\n <Icon />\n </span>\n);\n","import { cva } from 'class-variance-authority';\nimport type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { cn } from '@/helpers/cn';\nimport { IconTile } from '../IconTile';\n\nconst emptyVariants = cva('flex flex-col items-center justify-center gap-3 px-6 text-center', {\n variants: {\n size: {\n /** Inside a Panel or a card: no surface of its own. */\n panel: 'py-10',\n /** The whole screen's content: on a card surface. */\n page: 'rounded-xl border bg-card py-16',\n },\n },\n defaultVariants: { size: 'page' },\n});\n\ntype EmptyStateProps = {\n title: string;\n /** One line. */\n description?: string;\n icon?: LucideIcon;\n /** One primary action. */\n action?: ReactNode;\n size?: 'panel' | 'page';\n /**\n * One row (about 56px) instead of a centred block: a small icon tile, the title and the description\n * inline. For panels that sit beside others and must stay as short as their content. Ignores `size`.\n */\n compact?: boolean;\n className?: string;\n};\n\nexport const EmptyState = ({\n title,\n description,\n icon,\n action,\n size,\n compact,\n className,\n}: EmptyStateProps) =>\n compact ? (\n <div className={cn('flex items-center gap-3 px-5 py-3 text-left', className)}>\n {icon ? <IconTile icon={icon} size=\"sm\" /> : null}\n <p className=\"min-w-0 flex-1 text-sm\">\n <span className=\"font-semibold\">{title}</span>\n {description ? <span className=\"text-muted-foreground\"> {description}</span> : null}\n </p>\n {action}\n </div>\n ) : (\n <div className={cn(emptyVariants({ size }), className)}>\n {icon ? <IconTile icon={icon} size=\"lg\" /> : null}\n <div className=\"space-y-1\">\n <p className=\"text-base font-semibold\">{title}</p>\n {description ? <p className=\"max-w-md text-sm text-muted-foreground\">{description}</p> : null}\n </div>\n {action}\n </div>\n );\n","import { cva } from 'class-variance-authority';\nimport type { ReactNode } from 'react';\nimport { cn } from '@/helpers/cn';\n\nconst pageVariants = cva('mx-auto w-full min-w-0 space-y-6', {\n variants: {\n width: {\n /** Tables, grids, editors with side panels. */\n full: '',\n /** Most screens. */\n default: 'max-w-6xl',\n /** Single forms and settings pages. */\n narrow: 'max-w-3xl',\n },\n },\n defaultVariants: { width: 'default' },\n});\n\ntype PageProps = { width?: 'full' | 'default' | 'narrow'; className?: string; children: ReactNode };\n\n/** A screen's content column: one of three widths, sections 24px apart. The Shell provides the gutter. */\nexport const Page = ({ width, className, children }: PageProps) => (\n <div data-slot=\"page\" className={cn(pageVariants({ width }), className)}>\n {children}\n </div>\n);\n","import { Link, type LinkOptions } from '@tanstack/react-router';\nimport { Fragment, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/helpers/cn';\n\nexport type BreadcrumbItem = {\n label: string;\n /** Where the crumb goes; build it with `linkOptions({ to, params })` for typed params. */\n link?: LinkOptions;\n};\n\ntype PageHeaderProps = {\n /** The page's h1 (28/700). */\n title: string;\n /** Trail above the title, without the current page (e.g. Content / Articles above \"Hello world\"). */\n breadcrumb?: readonly BreadcrumbItem[];\n /** Beside the title: a StatusChip, a count. */\n badge?: ReactNode;\n /** One line under the title, 13px muted: \"API ID article · version 2\", \"112 entries\". */\n meta?: ReactNode;\n /** Right side: buttons, primary last. */\n actions?: ReactNode;\n /** Under the header, full width: `LinkTabs`, or `TabsList variant=\"underline\"` inside a `Tabs`. */\n tabs?: ReactNode;\n /** Editors: the header (title and actions) stays at the top while the form scrolls. */\n sticky?: boolean;\n className?: string;\n};\n\n/** The top of every screen: breadcrumb, title, badge, meta line, actions, tabs. */\nexport const PageHeader = ({\n title,\n breadcrumb,\n badge,\n meta,\n actions,\n tabs,\n sticky = false,\n className,\n}: PageHeaderProps) => {\n const { t } = useTranslation();\n return (\n <header\n data-slot=\"page-header\"\n className={cn(\n 'space-y-4',\n sticky &&\n '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',\n className,\n )}\n >\n <div className=\"flex flex-wrap items-start justify-between gap-x-4 gap-y-3\">\n <div className=\"min-w-0 space-y-1\">\n {breadcrumb && breadcrumb.length > 0 ? (\n <nav aria-label={t('common.breadcrumb')}>\n <ol className=\"flex flex-wrap items-center gap-1.5 text-meta font-medium text-muted-foreground\">\n {breadcrumb.map((crumb, index) => (\n <Fragment key={`${crumb.label}-${index}`}>\n {index > 0 ? (\n <li aria-hidden=\"true\" className=\"text-muted-foreground/70\">\n /\n </li>\n ) : null}\n <li className=\"min-w-0 truncate\">\n {crumb.link ? (\n <Link\n {...crumb.link}\n className=\"rounded-sm outline-none hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50\"\n >\n {crumb.label}\n </Link>\n ) : (\n crumb.label\n )}\n </li>\n </Fragment>\n ))}\n </ol>\n </nav>\n ) : null}\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1\">\n <h1 className=\"min-w-0 text-title break-words\">{title}</h1>\n {badge}\n </div>\n {meta ? <div className=\"text-meta text-muted-foreground\">{meta}</div> : null}\n </div>\n {actions ? <div className=\"flex shrink-0 flex-wrap items-center gap-2\">{actions}</div> : null}\n </div>\n {tabs}\n </header>\n );\n};\n","import { AlertTriangle, Lock } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { isForbidden } from '@/api/errors';\nimport { Button } from '@/components/ui/button';\nimport { describeError } from '@/helpers/describeError';\nimport { EmptyState } from '../EmptyState';\n\ntype ErrorStateProps = {\n error: unknown;\n onRetry?: () => void;\n /** `panel` inside a Panel or TableCard (no surface of its own), `page` on its own (default). */\n size?: 'panel' | 'page';\n className?: string;\n};\n\n/** A failed load, shown in place of the content. 403 gets its own message (retrying won't help). */\nexport const ErrorState = ({ error, onRetry, size = 'page', className }: ErrorStateProps) => {\n const { t } = useTranslation();\n if (isForbidden(error)) {\n return (\n <EmptyState\n icon={Lock}\n title={t('errors.forbidden')}\n description={t('errors.forbiddenDescription')}\n size={size}\n className={className}\n />\n );\n }\n return (\n <div role=\"alert\">\n <EmptyState\n icon={AlertTriangle}\n title={t('errors.loadFailed')}\n description={describeError(error)}\n action={\n onRetry ? (\n <Button variant=\"outline\" onClick={onRetry}>\n {t('common.retry')}\n </Button>\n ) : undefined\n }\n size={size}\n className={className}\n />\n </div>\n );\n};\n","import { cva } from 'class-variance-authority';\nimport { Loader2 } from 'lucide-react';\nimport { cn } from '@/helpers/cn';\n\n/**\n * What a state means, not what it's called: draft → neutral, changed → warning, published → success,\n * scheduled → scheduled, failed → danger, running → progress, cancelled/archived → muted.\n */\nexport type StatusTone = 'neutral' | 'progress' | 'scheduled' | 'success' | 'warning' | 'danger' | 'muted';\n\nconst chipVariants = cva(\n 'inline-flex w-fit shrink-0 items-center gap-1.5 rounded-full font-semibold whitespace-nowrap',\n {\n variants: {\n tone: {\n neutral: 'bg-muted text-foreground',\n progress: 'bg-muted text-muted-foreground',\n scheduled: 'bg-info-muted text-info',\n success: 'bg-success-muted text-success',\n warning: 'bg-warning-muted text-warning',\n danger: 'bg-destructive-muted text-destructive',\n muted: 'border text-muted-foreground',\n },\n size: {\n default: 'h-6 px-2.5 text-xs',\n sm: 'h-5 px-2 text-2xs',\n },\n },\n defaultVariants: { tone: 'neutral', size: 'default' },\n },\n);\n\nconst DOT_CLASSES = {\n neutral: 'bg-muted-foreground',\n progress: 'bg-muted-foreground',\n scheduled: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-destructive',\n muted: 'border border-muted-foreground',\n} satisfies Record<StatusTone, string>;\n\ntype StatusChipProps = {\n tone: StatusTone;\n /** Always shown: the colour is never the only signal. */\n label: string;\n /** `progress` spins while the work runs; false for states that are over (a timeline's past entries). */\n live?: boolean;\n size?: 'default' | 'sm';\n className?: string;\n};\n\n/** A state as a dot + label pill. The one way to show the status of an entry, job, asset, change set… */\nexport const StatusChip = ({ tone, label, live = true, size, className }: StatusChipProps) => (\n <span data-slot=\"status-chip\" data-tone={tone} className={cn(chipVariants({ tone, size }), className)}>\n {tone === 'progress' && live ? (\n <Loader2 aria-hidden=\"true\" className=\"size-3 animate-spin motion-reduce:animate-none\" />\n ) : (\n <span aria-hidden=\"true\" className={cn('size-1.5 shrink-0 rounded-full', DOT_CLASSES[tone])} />\n )}\n {label}\n </span>\n);\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport * as React from 'react';\nimport { cn } from '@/helpers/cn';\n\nconst badgeVariants = cva(\n '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',\n {\n variants: {\n variant: {\n // Shapio: neutral labels only (Default, Built-in, You, roles, kinds, counts). State goes through\n // StatusChip (DESIGN.md).\n secondary: 'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90',\n outline: 'border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n },\n },\n defaultVariants: {\n variant: 'secondary',\n },\n },\n);\n\nfunction Badge({\n className,\n variant = 'secondary',\n asChild = false,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'span';\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nexport { Badge };\n"],"ignoreList":[0,1,2,3,4,5,6,7],"mappings":"qjBACA,SAASqD,GAAY,CACpB,MAAU,MAAM,kBAAkB,CACnC,gBCAIG,EAAAF,EAAuB,cAAc,IAAK,EAAC,EAC3CG,GAAAH,EAA4B,cAAc,IAAK,EAAC,ECIhDI,EAAa,CAAC,EAClB,SAASC,EAAqB,EAAM,EAAQ,CAC3C,IAAMC,EAAAN,EAAyB,OAAO,EACtC,MAAQ,IAAU,CACjB,IAAMO,EAAWC,GAAM,OAASA,EAAK,OAAOC,CAAK,EAAIA,EAErD,OADID,GAAM,mBAAqBE,EAAO,QAAQ,yBAAiC,EAAe,QAAUrC,EAAiBiC,EAAe,QAASC,CAAQ,EAClJA,CACR,CACD,CAKA,SAASI,EAAS,EAAM,CACvB,IAAMD,EAASvC,EAAU,EACnByC,EAAAZ,EAAyB,WAAWQ,EAAK,KAAOL,GAAoBD,CAAY,EAChFW,EAAUL,EAAK,MAAQI,EACvBE,EAAaJ,EAAO,OAAO,cAAcG,CAAO,EAYhDE,EAAWV,EAAqBG,EAAME,CAAM,EAC5CM,EAAiB5C,EAAY0C,EAAa,GAAUG,EAAQF,EAASE,CAAK,EAAIb,CAAU,EAC9F,GAAIY,IAAmBZ,EAAY,OAAOY,GACtCR,EAAK,aAAe,KAEvBT,EAAU,CAEZ,CC9BA,SAASmB,GAAU,EAAM,CACxB,OAAOP,EAAS,CACf,KAAMH,EAAK,KACX,YAAaA,EAAK,YAClB,kBAAmBA,EAAK,kBACxB,OAAQA,EAAK,OACb,OAAS,GAAU,CAClB,IAAMW,EAASX,EAAK,SAAW,GAAQS,EAAM,OAASA,EAAM,cAC5D,OAAOT,EAAK,OAASA,EAAK,OAAOW,CAAM,EAAIA,CAC5C,CACD,CAAC,CACF,CChBA,IAAMzE,EAAa,CACjB,KAAM,OACN,KAAM,GACN,KAAM,CACJ,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,KAAM,GAAI,IAAK,GAAI,IAAK,IAAK,QAAS,CAAC,EACxF,CAAC,OAAQ,CAAE,EAAG,2BAA4B,IAAK,QAAS,CAAC,CAC3D,CACF,EACAA,EAAW,KACX,IAAM2E,EAAO5C,EAAiB/B,CAAU,ECTlCC,EAAa,CACjB,KAAM,iBACN,KAAM,GACN,KAAM,CACJ,CACE,OACA,CACE,EAAG,2EACH,IAAK,QACP,CACF,EACA,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAS,CAAC,EACxC,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAS,CAAC,CAC7C,EACA,QAAS,CAAC,gBAAgB,CAC5B,EACAA,EAAW,KACX,IAAM4E,EAAgB9C,EAAiB9B,CAAU,ECjB3C6E,GAAa,CACjB,KAAM,IACN,KAAM,GACN,KAAM,CACJ,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAS,CAAC,EAC3C,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAS,CAAC,CAC7C,CACF,EACAA,GAAW,KACX,IAAMC,GAAIhD,EAAiB+C,EAAU,aCjBjCG,GAAY,OAAO,eACnBC,GAAU,EAAQ,IAAUD,GAAUE,EAAQ,OAAQ,CAAE,QAAO,aAAc,EAAK,CAAC,EAoBnFC,EAAc,SACd,CAACC,EAAqBC,IAAqB/C,GAAmB6C,CAAW,EACzE,CAACG,GAAgBC,GAAoBH,EAAoBD,CAAW,EACpEK,EAAyBP,EAAQ,GAAU,CAC7C,GAAM,CACJ,gBACA,WACA,KAAMQ,EACN,cACA,eACA,QAAQ,IACNC,EACEC,EAAAtC,EAAmB,OAAO,IAAI,EAC9BuC,EAAAvC,EAAmB,OAAO,IAAI,EAC9B,CAACwC,EAAMC,GAAW5D,GAAqB,CAC3C,KAAMuD,EACN,YAAaM,GAAe,GAC5B,SAAUC,EACV,OAAQb,CACV,CAAC,EACK,CAACc,EAAYC,GAAA7C,EAAuB,SAAS,CAAC,EAC9C,CAAC8C,EAAkBC,GAAA/C,EAA6B,SAAS,CAAC,EAChE,OAAuB,EAAA0B,EAAA,IAAA,CACrBO,GACA,CACE,MAAOe,EACP,aACA,aACA,UAAWhE,EAAM,EACjB,QAASA,EAAM,EACf,cAAeA,EAAM,EACrB,aAAc4D,EAAa,EAC3B,mBAAoBE,EAAmB,EACvC,gBACA,sBACA,OACA,aAAcL,EACd,aAAAzC,EAAoB,gBAAkByC,EAAS,GAAa,CAACQ,CAAQ,EAAG,CAACR,CAAO,CAAC,EACjF,QACA,UACF,CACF,CACF,EAAG,QAAQ,EACPS,GAAe,gBACfC,EAAgCnD,EAAM,WACxB4B,EAAO,SAAwB,EAAO,EAAc,CAClE,GAAM,CAAE,gBAAe,GAAGwB,GAAiBf,EACrCgB,EAAUnB,EAAiBgB,GAAcF,CAAa,EACtDM,EAAqB1E,EAAgB2E,EAAcF,EAAQ,UAAU,EAC3E,OAAuB,EAAA3B,EAAA,IAAA,CACrB8B,EAAU,OACV,CACE,KAAM,SACN,gBAAiB,SACjB,gBAAiBH,EAAQ,KACzB,gBAAiBA,EAAQ,KAAOA,EAAQ,UAAY,IAAK,GACzD,aAAcI,EAASJ,EAAQ,IAAI,EACnC,GAAGD,EACH,IAAKE,EACL,QAASlE,EAAqBiD,EAAM,QAASgB,EAAQ,YAAY,CACnE,CACF,CACF,EAAG,eAAe,CACpB,EACIK,EAAc,eACd,CAACC,GAAgBC,GAAoB7B,EAAoB2B,EAAa,CACxE,WAAY,IAAK,EACnB,CAAC,EACGG,EAA+BjC,EAAQ,GAAU,CACnD,GAAM,CAAE,gBAAe,aAAY,WAAU,aAAcS,EACrDgB,EAAUnB,EAAiBwB,EAAaV,CAAa,EAC3D,OAAuB,EAAAtB,EAAA,IAAA,CAAIiC,GAAgB,CAAE,MAAOX,EAAe,aAAY,SAAAhD,EAAgB,SAAS,IAAI8D,EAAW,IAA0B,EAAApC,EAAA,IAAA,CAAIlC,EAAU,CAAE,QAASuE,GAAcV,EAAQ,KAAM,UAA0B,EAAA3B,EAAA,IAAA,CAAI9E,GAAiB,CAAE,QAAS,GAAM,YAAW,SAAUoH,CAAM,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC,CAC3S,EAAG,cAAc,EACbC,EAAe,gBACfC,EAAgClE,EAAM,WACxB4B,EAAO,SAAwB,EAAO,EAAc,CAClE,IAAMuC,EAAgBP,EAAiBK,EAAc5B,EAAM,aAAa,EAClE,CAAE,aAAa8B,EAAc,WAAY,GAAGC,GAAiB/B,EAC7DgB,EAAUnB,EAAiB+B,EAAc5B,EAAM,aAAa,EAClE,OAAOgB,EAAQ,OAAwB,EAAA3B,EAAA,IAAA,CAAIlC,EAAU,CAAE,QAASuE,GAAcV,EAAQ,KAAM,UAA0B,EAAA3B,EAAA,IAAA,CAAI2C,GAAmB,CAAE,GAAGD,EAAc,IAAKb,CAAa,CAAC,CAAE,CAAC,EAAI,IAC5L,EAAG,eAAe,CACpB,EACIe,GAAO7E,GAAW,4BAA4B,EAC9C4E,GAAoCrE,EAAM,WAE5B4B,EAAO,SAA4B,EAAO,EAAc,CACtE,GAAM,CAAE,gBAAe,GAAGwC,GAAiB/B,EACrCgB,EAAUnB,EAAiB+B,EAAcjB,CAAa,EACtDuB,EAA6BjF,GAA2B,EACxDkF,EAAe5F,EAAgB2E,EAAcgB,CAA0B,EAC7E,OAGkB,EAAA7C,EAAA,IAAA,CAAI7E,GAAc,CAAE,GAAIyH,GAAM,eAAgB,GAAM,OAAQ,CAACjB,EAAQ,UAAU,EAAG,UAA0B,EAAA3B,EAAA,IAAA,CAC1H8B,EAAU,IACV,CACE,aAAcC,EAASJ,EAAQ,IAAI,EACnC,GAAGe,EACH,IAAKI,EACL,MAAO,CAAE,cAAe,OAAQ,GAAGJ,EAAa,KAAM,CACxD,CACF,CAAE,CAAC,CAEP,EAAG,mBAAmB,CACxB,EACIK,EAAe,gBACfC,EAAgC1E,EAAM,WACxB4B,EAAO,SAAwB,EAAO,EAAc,CAClE,IAAMuC,EAAgBP,EAAiBa,EAAcpC,EAAM,aAAa,EAClE,CAAE,aAAa8B,EAAc,WAAY,GAAGQ,GAAiBtC,EAC7DgB,EAAUnB,EAAiBuC,EAAcpC,EAAM,aAAa,EAClE,OAAuB,EAAAX,EAAA,IAAA,CAAIlC,EAAU,CAAE,QAASuE,GAAcV,EAAQ,KAAM,SAAUA,EAAQ,OAAwB,EAAA3B,EAAA,IAAA,CAAIkD,GAAoB,CAAE,GAAGD,EAAc,IAAKpB,CAAa,CAAC,GAAoB,EAAA7B,EAAA,IAAA,CAAImD,GAAuB,CAAE,GAAGF,EAAc,IAAKpB,CAAa,CAAC,CAAE,CAAC,CAC9Q,EAAG,eAAe,CACpB,EACIqB,GAAqC5E,EAAM,WAE7B4B,EAAO,SAA6B,EAAO,EAAc,CACvE,IAAMyB,EAAUnB,EAAiBuC,EAAcpC,EAAM,aAAa,EAC5DE,EAAAvC,EAAmB,OAAO,IAAI,EAC9BwE,EAAe5F,EAAgB2E,EAAcF,EAAQ,WAAYd,CAAU,EAKjF,OAJAvC,EAAM,cAAgB,CACpB,IAAM8E,EAAUvC,EAAW,QAC3B,GAAIuC,EAAS,OAAOvF,GAAWuF,CAAO,CACxC,EAAG,CAAC,CAAC,GACkB,EAAApD,EAAA,IAAA,CACrBqD,EACA,CACE,GAAG1C,EACH,IAAKmC,EACL,UAAWnB,EAAQ,KACnB,4BAA6BA,EAAQ,KACrC,iBAAkBjE,EAAqBiD,EAAM,iBAAmB,GAAU,CACxE2C,EAAM,eAAe,EACrB3B,EAAQ,WAAW,SAAS,MAAM,CACpC,CAAC,EACD,qBAAsBjE,EAAqBiD,EAAM,qBAAuB,GAAU,CAChF,IAAM4C,EAAgBD,EAAM,OAAO,cAC7BE,EAAgBD,EAAc,SAAW,GAAKA,EAAc,UAAY,IACzDA,EAAc,SAAW,GAAKC,IACjCF,EAAM,eAAe,CACzC,CAAC,EACD,eAAgB5F,EACdiD,EAAM,eACL,GAAU2C,EAAM,eAAe,CAClC,CACF,CACF,CACF,EAAG,oBAAoB,CACzB,EACIH,GAAwC7E,EAAM,WAEhC4B,EAAO,SAAgC,EAAO,EAAc,CAC1E,IAAMyB,EAAUnB,EAAiBuC,EAAcpC,EAAM,aAAa,EAC5D8C,EAAAnF,EAAgC,OAAO,EAAK,EAC5CoF,EAAApF,EAAiC,OAAO,EAAK,EACnD,OAAuB,EAAA0B,EAAA,IAAA,CACrBqD,EACA,CACE,GAAG1C,EACH,IAAKkB,EACL,UAAW,GACX,4BAA6B,GAC7B,iBAAmB,GAAU,CAC3BlB,EAAM,mBAAmB2C,CAAK,EACzBA,EAAM,mBACJG,EAAwB,SAAS9B,EAAQ,WAAW,SAAS,MAAM,EACxE2B,EAAM,eAAe,GAEvB,EAAwB,QAAU,GAClC,EAAyB,QAAU,EACrC,EACA,kBAAoB,GAAU,CAC5B3C,EAAM,oBAAoB2C,CAAK,EAC1BA,EAAM,mBACT,EAAwB,QAAU,GAC9BA,EAAM,OAAO,cAAc,OAAS,gBACtC,EAAyB,QAAU,KAGvC,IAAMnD,EAASmD,EAAM,OACG3B,EAAQ,WAAW,SAAS,SAASxB,CAAM,GAC9CmD,EAAM,eAAe,EACtCA,EAAM,OAAO,cAAc,OAAS,WAAaI,EAAyB,SAC5EJ,EAAM,eAAe,CAEzB,CACF,CACF,CACF,EAAG,uBAAuB,CAC5B,EACID,EAAoC/E,EAAM,WAE5B4B,EAAO,SAA4B,EAAO,EAAc,CACtE,GAAM,CAAE,gBAAe,YAAW,kBAAiB,mBAAkB,GAAG+C,GAAiBtC,EACnFgB,EAAUnB,EAAiBuC,EAAczB,CAAa,EAE5D,OADA3D,GAAe,GACQ,EAAAqC,EAAA,IAAA,CAAI5E,EAAAA,SAAU,CAAE,UAA0B,EAAA4E,EAAA,IAAA,CAC/D/C,EACA,CACE,QAAS,GACT,KAAM,GACN,QAAS0G,EACT,iBAAkBC,EAClB,mBAAoBC,EACpB,UAA0B,EAAA7D,EAAA,IAAA,CACxBvC,GACA,CACE,KAAM,SACN,GAAIkE,EAAQ,UACZ,mBAAoBA,EAAQ,mBAAqBA,EAAQ,cAAgB,IAAK,GAC9E,kBAAmBA,EAAQ,aAAeA,EAAQ,QAAU,IAAK,GACjE,aAAcI,EAASJ,EAAQ,IAAI,EACnC,GAAGsB,EACH,IAAKpB,EACL,wBAAyB,GACzB,cAAiBF,EAAQ,aAAa,EAAK,CAC7C,CACF,CACF,CACF,CAAE,CAAC,CACL,EAAG,mBAAmB,CACxB,EACImC,GAAa,cACbC,EAA8BzF,EAAM,WACtB4B,EAAO,SAAsB,EAAO,EAAc,CAChE,GAAM,CAAE,gBAAe,GAAG8D,GAAerD,EACnCgB,EAAUnB,EAAiBsD,GAAYxC,CAAa,EACpD,CAAE,iBAAkBK,EAK1B,OAJAvE,OACE+D,EAAe,GAAU8C,EAAQ,CAAC,MACrB9C,EAAe,GAAU8C,EAAQ,CAAC,GAC9C,CAAC9C,CAAa,CAAC,GACK,EAAAnB,EAAA,IAAA,CAAI8B,EAAU,GAAI,CAAE,GAAIH,EAAQ,QAAS,GAAGqC,EAAY,IAAKnC,CAAa,CAAC,CACpG,EAAG,aAAa,CAClB,EACIqC,GAAmB,oBACnBC,EAAoC7F,EAAM,WAE5B4B,EAAO,SAA4B,EAAO,EAAc,CACtE,GAAM,CAAE,gBAAe,GAAGkE,GAAqBzD,EACzCgB,EAAUnB,EAAiB0D,GAAkB5C,CAAa,EAC1D,CAAE,uBAAwBK,EAKhC,OAJAvE,OACEiE,EAAqB,GAAU4C,EAAQ,CAAC,MAC3B5C,EAAqB,GAAU4C,EAAQ,CAAC,GACpD,CAAC5C,CAAmB,CAAC,GACD,EAAArB,EAAA,IAAA,CAAI8B,EAAU,EAAG,CAAE,GAAIH,EAAQ,cAAe,GAAGyC,EAAkB,IAAKvC,CAAa,CAAC,CAC/G,EAAG,mBAAmB,CACxB,EACIwC,GAAa,cACbC,EAA8BhG,EAAM,WACtB4B,EAAO,SAAsB,EAAO,EAAc,CAChE,GAAM,CAAE,gBAAe,GAAGqE,GAAe5D,EACnCgB,EAAUnB,EAAiB6D,GAAY/C,CAAa,EAC1D,OAAuB,EAAAtB,EAAA,IAAA,CACrB8B,EAAU,OACV,CACE,KAAM,SACN,GAAGyC,EACH,IAAK1C,EACL,QAASnE,EAAqBiD,EAAM,YAAegB,EAAQ,aAAa,EAAK,CAAC,CAChF,CACF,CACF,EAAG,aAAa,CAClB,EAIA,SAASI,EAAS,EAAM,CACtB,OAAOjB,EAAO,OAAS,QACzB,CACAZ,EAAO6B,EAAU,UAAU,EC/R3B,IAAMyC,GAAe,EAERC,IAAgB,CAAE,OAAOD,GAAc,eAAmC,CACrF,GAAM,CAAE,KAAM1H,EAAe,EAC7B,OACE,EAAAkD,EAAA,KAAA,CAAC,MAAD,CAAK,KAAK,SAAS,YAAU,SAAS,UAAW5B,EAAG,YAAasG,CAAS,EAA1E,SAAA,EACE,EAAA1E,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,UAAW,SAAA2E,EAAE,gBAAgB,CAAQ,CAAA,EACpD,MAAM,KAAK,CAAE,OAAQC,CAAK,GAAI,EAAG,KAChC,EAAA5E,EAAA,IAAA,CAAC7B,GAAD,CAAsB,UAAU,aAAe,EAAhC0G,CAAgC,CAChD,CACE,GAET,ECRaC,IAAgB,CAAE,UAAS,eAAc,WAAU,WAAU,GAAGnE,MAC3E,EAAAX,EAAA,IAAA,CAAC/B,EAAD,CAAQ,KAAK,SAAS,SAAU8G,GAAWC,EAAU,YAAWD,GAAW,IAAA,GAAW,GAAIpE,EACvF,SAAAoE,GACC,EAAA/E,EAAA,KAAA,CAAA3E,EAAAA,SAAA,CAAA,SAAA,EACE,EAAA2E,EAAA,IAAA,CAAC1E,EAAD,CAAS,UAAU,eAAe,cAAY,MAAQ,CAAA,EACrD2J,CACD,CAAA,CAAA,EAEF7C,CAEI,CAAA,ECZJ8C,GAAY,GAA+C,CAC/D,GAAI,EAAEC,aAAkB,cAAgBA,IAAW,SAAS,KAC1D,OAAO,KAET,IAAMC,EAAOD,EAAO,QAAQ,eAAe,EACrCE,EAAaD,GAAM,GAAK,SAAS,cAAc,mBAAmB,IAAI,OAAOA,EAAK,EAAE,EAAE,GAAG,EAAI,KACnG,OAAOC,aAAsB,YAAcA,EAAaF,CAC1D,EAWaG,GAAkB,EAAoC,IAAwC,CACzG,IAAMC,GAAA,EAAWhK,EAAAA,OAAAA,CAA2B,IAAI,EAwBhD,MAAO,CAAE,iBAAA,EAvBmBC,EAAAA,YAAAA,CACzB,GAAiB,CAEhB,EAAS,QAAU0J,GAAS,SAAS,aAAa,EAClDtB,IAAkBN,CAAK,CACzB,EACA,CAACM,CAAe,CAiBQ,EAAqB,kBAAA,EAflBpI,EAAAA,YAAAA,CAC1B,GAAiB,CAChBqI,IAAmBP,CAAK,EACxB,IAAMnD,EAASoF,EAAS,QACxB,EAAS,QAAU,KACf,GAAM,kBAAqBpF,GAAQ,cAGvCA,EAAO,MAAM,CAAE,cAAe,EAAK,CAAC,EAChC,SAAS,gBAAkBA,GAC7BmD,EAAM,eAAe,EAEzB,EACA,CAACO,CAAgB,CAE8C,CAAqB,CACxF,ECzCA,SAAS2B,GAAM,CAAE,GAAG7E,GAA2D,CAC7E,OAAO,EAAAX,EAAA,IAAA,CAACvE,EAAD,CAAqB,YAAU,QAAQ,GAAIkF,CAAQ,CAAA,CAC5D,CAEA,SAAS8E,GAAa,CAAE,GAAG9E,GAA8D,CACvF,OAAO,EAAAX,EAAA,IAAA,CAACtE,EAAD,CAAwB,YAAU,gBAAgB,GAAIiF,CAAQ,CAAA,CACvE,CAMA,SAAS+E,GAAY,CAAE,GAAG/E,GAA6D,CACrF,OAAO,EAAAX,EAAA,IAAA,CAACrE,EAAD,CAAuB,YAAU,eAAe,GAAIgF,CAAQ,CAAA,CACrE,CAEA,SAASgF,GAAa,CAAE,YAAW,GAAGhF,GAA8D,CAClG,OACE,EAAAX,EAAA,IAAA,CAACpE,EAAD,CACE,YAAU,gBACV,UAAWwC,EACT,2JACAsG,CACF,EACA,GAAI/D,CACL,CAAA,CAEL,CAMA,IAAMiF,GAAuB1H,EAC3B,uMACA,CACE,SAAU,CACR,KAAM,CACJ,MACE,wHACF,KAAM,qHACN,IAAK,2GACL,OACE,8IACJ,EACA,KAAM,CAAE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,CACzC,EACA,iBAAkB,CAChB,CAAE,KAAM,CAAC,OAAQ,OAAO,EAAG,KAAM,KAAM,UAAW,aAAc,EAChE,CAAE,KAAM,CAAC,OAAQ,OAAO,EAAG,KAAM,KAAM,UAAW,cAAe,EACjE,CAAE,KAAM,CAAC,OAAQ,OAAO,EAAG,KAAM,KAAM,UAAW,cAAe,EACjE,CAAE,KAAM,CAAC,OAAQ,OAAO,EAAG,KAAM,KAAM,UAAW,cAAe,CACnE,EACA,gBAAiB,CAAE,KAAM,QAAS,KAAM,IAAK,CAC/C,CACF,EAKA,SAAS2H,GAAa,CACpB,YACA,WACA,OAAO,QACP,OAAO,KACP,kBAAkB,GAClB,WAAW,GACX,kBACA,mBACA,oBACA,GAAGlF,GAYF,CACD,IAAMmF,EAAcR,EAAe1B,EAAiBC,CAAgB,EAC9D,CAAE,KAAM/G,EAAe,EAC7B,OACE,EAAAkD,EAAA,KAAA,CAAC0F,GAAD,CAAA,SAAA,CACGK,EAAW,MAAO,EAAA/F,EAAA,IAAA,CAAC2F,GAAD,CAAe,CAAA,GAClC,EAAA3F,EAAA,KAAA,CAACnE,EAAD,CACE,YAAU,gBACV,YAAWmK,EACX,iBAAgBD,GAAY,IAAA,GAC5B,UAAW3H,EAAGwH,GAAqB,CAAE,OAAM,MAAK,CAAC,EAAGG,GAAY,mBAAoBrB,CAAS,EAC7F,kBAAoB,GAAU,CACxBqB,GACFzC,EAAM,eAAe,EAEvB2C,IAAoB3C,CAAK,CAC3B,EACA,GAAI3C,EACJ,GAAImF,EAZN,SAAA,CAcG1D,EACA8D,IACC,EAAAlG,EAAA,IAAA,CAAClE,EAAD,CAAsB,QAAA,GACpB,UAAA,EAAAkE,EAAA,KAAA,CAAC/B,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+CAAjD,SAAA,EACE,EAAA+B,EAAA,IAAA,CAACjE,GAAD,CAAO,cAAY,MAAQ,CAAA,GAC3B,EAAAiE,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,UAAW,SAAA2E,EAAE,cAAc,CAAQ,CAAA,CAC7C,GACY,CAAA,CAEF,CACb,CAAA,CAAA,CAAA,CAAA,CAEjB,CAEA,SAASwB,GAAY,CAAE,YAAW,GAAGxF,GAAsC,CACzE,OACE,EAAAX,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,eACV,UAAW5B,EAAG,uCAAwCsG,CAAS,EAC/D,GAAI/D,CACL,CAAA,CAEL,CAGA,SAASyF,GAAU,CAAE,YAAW,GAAGzF,GAAsC,CACvE,OACE,EAAAX,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,aACV,UAAW5B,EAAG,2CAA4CsG,CAAS,EACnE,GAAI/D,CACL,CAAA,CAEL,CAGA,SAAS0F,GAAY,CAAE,YAAW,GAAG1F,GAAsC,CACzE,OACE,EAAAX,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,eACV,UAAW5B,EACT,uFACAsG,CACF,EACA,GAAI/D,CACL,CAAA,CAEL,CAEA,SAAS2F,GAAW,CAAE,YAAW,GAAG3F,GAA4D,CAC9F,OACE,EAAAX,EAAA,IAAA,CAAChE,EAAD,CACE,YAAU,cACV,UAAWoC,EAAG,qEAAsEsG,CAAS,EAC7F,GAAI/D,CACL,CAAA,CAEL,CAEA,SAAS4F,GAAiB,CAAE,YAAW,GAAG5F,GAAkE,CAC1G,OACE,EAAAX,EAAA,IAAA,CAAC/D,EAAD,CACE,YAAU,oBACV,UAAWmC,EAAG,gCAAiCsG,CAAS,EACxD,GAAI/D,CACL,CAAA,CAEL,CChLA,IAAM6F,GAAetI,EAAI,uDAAwD,CAC/E,SAAU,CACR,KAAM,CACJ,GAAI,wBACJ,GAAI,6BACJ,GAAI,wBACN,EACA,KAAM,CAEJ,OAAQ,oDACR,MAAO,iCACP,QAAS,gCACT,QAAS,gCACT,OAAQ,uCACV,CACF,EACA,gBAAiB,CAAE,KAAM,KAAM,KAAM,QAAS,CAChD,CAAC,EAWYuI,GAAY,CAAE,KAAMC,EAAM,OAAM,OAAM,gBACjD,EAAA1G,EAAA,IAAA,CAAC,OAAD,CAAM,cAAY,OAAO,UAAW5B,EAAGoI,GAAa,CAAE,OAAM,MAAK,CAAC,EAAG9B,CAAS,EAC5E,UAAA,EAAA1E,EAAA,IAAA,CAAC0G,EAAD,CAAO,CAAA,CACH,CAAA,EC7BFC,GAAgBzI,EAAI,mEAAoE,CAC5F,SAAU,CACR,KAAM,CAEJ,MAAO,QAEP,KAAM,iCACR,CACF,EACA,gBAAiB,CAAE,KAAM,MAAO,CAClC,CAAC,EAkBY0I,GAAc,CACzB,QACA,cACA,OACA,SACA,OACA,UACA,eAEAC,GACE,EAAA7G,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW5B,EAAG,8CAA+CsG,CAAS,EAA3E,SAAA,CACGoC,GAAO,EAAA9G,EAAA,IAAA,CAACyG,EAAD,CAAgB,OAAM,KAAK,IAAM,CAAA,EAAI,MAC7C,EAAAzG,EAAA,KAAA,CAAC,IAAD,CAAG,UAAU,yBAAb,SAAA,EACE,EAAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,gBAAiB,SAAA+G,CAAY,CAAA,EAC5CC,GAAc,EAAAhH,EAAA,KAAA,CAAC,OAAD,CAAM,UAAU,wBAAhB,SAAA,CAAwC,IAAEgH,CAAkB,CAAI,CAAA,EAAA,IAC9E,IACFC,CACE,CAEL,CAAA,GAAA,EAAAjH,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW5B,EAAGuI,GAAc,CAAE,MAAK,CAAC,EAAGjC,CAAS,EAArD,SAAA,CACGoC,GAAO,EAAA9G,EAAA,IAAA,CAACyG,EAAD,CAAgB,OAAM,KAAK,IAAM,CAAA,EAAI,MAC7C,EAAAzG,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,YAAf,SAAA,EACE,EAAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,0BAA2B,SAAA+G,CAAS,CAAA,EAChDC,GAAc,EAAAhH,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,yCAA0C,SAAAgH,CAAe,CAAA,EAAI,IACtF,IACJC,CACE,ICxDHC,GAAehJ,EAAI,mCAAoC,CAC3D,SAAU,CACR,MAAO,CAEL,KAAM,GAEN,QAAS,YAET,OAAQ,WACV,CACF,EACA,gBAAiB,CAAE,MAAO,SAAU,CACtC,CAAC,EAKYiJ,IAAQ,CAAE,QAAO,YAAW,eACvC,EAAAnH,EAAA,IAAA,CAAC,MAAD,CAAK,YAAU,OAAO,UAAW5B,EAAG8I,GAAa,CAAE,OAAM,CAAC,EAAGxC,CAAS,EACnE,UACE,CAAA,ECMM0C,IAAc,CACzB,QACA,aACA,QACA,OACA,UACA,OACA,SAAS,GACT,eACqB,CACrB,GAAM,CAAE,KAAMtK,EAAe,EAC7B,OACE,EAAAkD,EAAA,KAAA,CAAC,SAAD,CACE,YAAU,cACV,UAAW5B,EACT,YACAiJ,GACE,mJACF3C,CACF,EAPF,SAAA,EASE,EAAA1E,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,6DAAf,SAAA,EACE,EAAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,oBAAf,SAAA,CACGsH,GAAcA,EAAW,OAAS,GACjC,EAAAtH,EAAA,IAAA,CAAC,MAAD,CAAK,aAAY2E,EAAE,mBAAmB,EACpC,UAAA,EAAA3E,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,kFACX,SAAAsH,EAAW,KAAK,EAAO,KACtB,EAAAtH,EAAA,KAAA,CAAC9D,EAAAA,SAAD,CAAA,SAAA,CACG2I,EAAQ,GACP,EAAA7E,EAAA,IAAA,CAAC,KAAD,CAAI,cAAY,OAAO,UAAU,2BAA2B,SAAA,GAExD,CAAA,EACF,MACJ,EAAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,mBACX,SAAAuH,EAAM,MACL,EAAAvH,EAAA,IAAA,CAACnD,EAAD,CACE,GAAI0K,EAAM,KACV,UAAU,oGAET,SAAAA,EAAM,KACH,CAAA,EAENA,EAAM,KAEN,CAAA,CACI,CAAA,EAlBK,GAAGA,EAAM,MAAM,GAAG1C,GAkBvB,CACX,CACC,CAAA,CACD,CAAA,EACH,MACJ,EAAA7E,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,sDAAf,SAAA,EACE,EAAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,iCAAkC,SAAA+G,CAAU,CAAA,EACzDS,CACE,IACJC,GAAO,EAAAzH,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,kCAAmC,SAAAyH,CAAU,CAAA,EAAI,IACrE,CACJ,CAAA,EAAAC,GAAU,EAAA1H,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,6CAA8C,SAAA0H,CAAa,CAAA,EAAI,IACtF,CACJ,CAAA,EAAAC,CACK,GAEZ,EC3EaC,IAAc,CAAE,QAAO,UAAS,OAAO,OAAQ,eAAiC,CAC3F,GAAM,CAAE,KAAM9K,EAAe,EAY7B,OAXIF,EAAYiL,CAAK,GAEjB,EAAA7H,EAAA,IAAA,CAAC4G,EAAD,CACE,KAAMjH,EACN,MAAOgF,EAAE,kBAAkB,EAC3B,YAAaA,EAAE,6BAA6B,EACtC,OACK,WACZ,CAAA,GAIH,EAAA3E,EAAA,IAAA,CAAC,MAAD,CAAK,KAAK,QACR,UAAA,EAAAA,EAAA,IAAA,CAAC4G,EAAD,CACE,KAAMzK,EACN,MAAOwI,EAAE,mBAAmB,EAC5B,YAAa3G,GAAc6J,CAAK,EAChC,OACEC,GACE,EAAA9H,EAAA,IAAA,CAAC/B,EAAD,CAAQ,QAAQ,UAAU,QAAS6J,EAChC,SAAAnD,EAAE,cAAc,CACX,CAAA,EACN,IAAA,GAEA,OACK,WACZ,CAAA,CACE,CAAA,CAET,ECrCMoD,GAAe7J,EACnB,+FACA,CACE,SAAU,CACR,KAAM,CACJ,QAAS,2BACT,SAAU,iCACV,UAAW,0BACX,QAAS,gCACT,QAAS,gCACT,OAAQ,wCACR,MAAO,8BACT,EACA,KAAM,CACJ,QAAS,qBACT,GAAI,mBACN,CACF,EACA,gBAAiB,CAAE,KAAM,UAAW,KAAM,SAAU,CACtD,CACF,EAEM8J,GAAc,CAClB,QAAS,sBACT,SAAU,sBACV,UAAW,UACX,QAAS,aACT,QAAS,aACT,OAAQ,iBACR,MAAO,gCACT,EAaaC,IAAc,CAAE,OAAM,QAAO,OAAO,GAAM,OAAM,gBAC3D,EAAAjI,EAAA,KAAA,CAAC,OAAD,CAAM,YAAU,cAAc,YAAWkI,EAAM,UAAW9J,EAAG2J,GAAa,CAAE,OAAM,MAAK,CAAC,EAAGrD,CAAS,EAApG,SAAA,CACGwD,IAAS,YAAcC,GACtB,EAAAnI,EAAA,IAAA,CAAC5D,EAAD,CAAS,cAAY,OAAO,UAAU,gDAAkD,CAAA,GAExF,EAAA4D,EAAA,IAAA,CAAC,OAAD,CAAM,cAAY,OAAO,UAAW5B,EAAG,iCAAkC4J,GAAYE,EAAK,CAAI,CAAA,EAE/FE,CACG,ICxDFC,GAAgBnK,EACpB,waACA,CACE,SAAU,CACR,QAAS,CAGP,UAAW,oEACX,QAAS,sFACX,CACF,EACA,gBAAiB,CACf,QAAS,WACX,CACF,CACF,EAEA,SAASoK,GAAM,CACb,YACA,UAAU,YACV,UAAU,GACV,GAAG3H,GACyF,CAC5F,IAAM4H,EAAOC,EAAUnM,EAAY,OAEnC,OACE,EAAA2D,EAAA,IAAA,CAACuI,EAAD,CACE,YAAU,QACV,eAAcE,EACd,UAAWrK,EAAGiK,GAAc,CAAE,SAAQ,CAAC,EAAG3D,CAAS,EACnD,GAAI/D,CACL,CAAA,CAEL"}
@@ -1,2 +1,2 @@
1
- import{A as e,O as t,i as n,j as r,lt as i,o as a}from"./loader-circle-C-9trZPI.js";import{m as o,t as s}from"./createLucideIcon-CqygG5K6.js";import{C as c}from"./InfoHint-bYMd_t0J.js";import{a as l}from"./publishing-B7zv1e7j.js";var u={name:`refresh-cw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]};u.node;var d=s(u),f=a.changeSets,p={silent:!0},m=`open,scheduled,shipping,failed`,h=(e=m)=>r({queryKey:t.develop.changeSets.list(e),queryFn:()=>f.list({status:e,limit:100}),meta:p}),g=e=>e?.status===`shipping`&&l,_=e=>r({queryKey:t.develop.changeSets.set(e),queryFn:()=>f.get(e),refetchInterval:e=>g(e.state.data),meta:p}),v=e=>r({queryKey:t.develop.changeSets.review(e),queryFn:()=>f.review(e),refetchOnWindowFocus:!1,meta:p}),y=e=>r({queryKey:t.develop.changeSets.timeline(e),queryFn:()=>f.timeline(e),meta:p}),b=()=>r({queryKey:t.develop.changeSets.unassigned,queryFn:()=>f.unassigned({limit:100}),meta:p}),x=(r,a)=>{let o=i();return e({mutationKey:[`changeSets`,r],meta:p,mutationFn:e=>n(()=>a(e)),onSuccess:e=>(o.setQueryData(t.develop.changeSets.set(e.id),e),o.invalidateQueries({queryKey:t.develop.changeSets.all}))})},S=()=>x(`create`,e=>f.create(e)),C=()=>x(`update`,({id:e,input:t})=>f.update(e,t)),w=()=>x(`discard`,e=>f.discard(e)),T=()=>x(`addEntry`,({id:e,input:t})=>f.addEntry(e,t)),E=()=>x(`removeItem`,({id:e,itemId:t})=>f.removeItem(e,t)),D=()=>x(`ship`,({id:e,input:t})=>f.ship(e,t)),O=()=>x(`schedule`,({id:e,input:t})=>f.schedule(e,t)),k=()=>x(`unschedule`,e=>f.unschedule(e)),A=async e=>{let t=(await f.list({status:`open`,limit:1})).items[0]??await f.create({title:e,source:`builder`});return f.get(t.id)},j=()=>{let r=i();return e({mutationKey:[`changeSets`,`saveDraft`],meta:p,mutationFn:({definitionId:e,input:t,newSetTitle:r})=>n(async()=>{let n=await A(r),i=n.items.find(t=>t.kind===`schema`&&t.definitionId===e);return await f.putSchemaDraft(n.id,e,{...t,...i?.kind===`schema`?{expectedDraftVersion:i.draftVersion}:{}}),n.id}),onSuccess:()=>r.invalidateQueries({queryKey:t.develop.changeSets.all})})},M=()=>{let r=i();return e({mutationKey:[`changeSets`,`saveNewDefinitions`],meta:p,mutationFn:({definitions:e,newSetTitle:t})=>n(async()=>{let n=await A(t);for(let t of e)await f.putSchemaDraft(n.id,t.id,{category:t.kind===`component`?`component`:`model`,definition:t,baseVersion:null});return n.id}),onSuccess:()=>r.invalidateQueries({queryKey:t.develop.changeSets.all})})},N=(e,n)=>r({queryKey:t.develop.changeSets.draft(e,n),queryFn:()=>f.getSchemaDraft(e,n),meta:p}),P=e=>new o(422,{error:{code:e.error?.code??`CHANGE_SET_FAILED`,message:e.error?.message??e.title}}),F=()=>{let r=i();return e({mutationKey:[`changeSets`,`shipDraftNow`],meta:p,mutationFn:({definitionId:e,input:t,acknowledgement:r,title:i})=>n(async()=>{let n=await f.create({title:i,source:`builder`}),a;try{await f.putSchemaDraft(n.id,e,t);let i=await f.get(n.id);a=await f.ship(i.id,{expectedVersion:i.version,...r})}catch(e){throw await f.discard(n.id).catch(e=>c(e,`discarding a change set the builder could not ship`)),e}if(a.status===`failed`)throw P(a);return a}),onSettled:()=>Promise.all([r.invalidateQueries({queryKey:t.develop.changeSets.all}),r.invalidateQueries({queryKey:t.schema.all})])})};export{C as _,h as a,E as c,O as d,N as f,k as g,b as h,y as i,j as l,F as m,_ as n,S as o,D as p,v as r,w as s,T as t,M as u,d as v};
2
- //# sourceMappingURL=changeSets-DgfCKja3.js.map
1
+ import{A as e,O as t,i as n,j as r,lt as i,o as a}from"./loader-circle-C-9trZPI.js";import{m as o,t as s}from"./createLucideIcon-CqygG5K6.js";import{C as c}from"./InfoHint-Dyzyf59c.js";import{a as l}from"./publishing-B7zv1e7j.js";var u={name:`refresh-cw`,size:24,node:[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]};u.node;var d=s(u),f=a.changeSets,p={silent:!0},m=`open,scheduled,shipping,failed`,h=(e=m)=>r({queryKey:t.develop.changeSets.list(e),queryFn:()=>f.list({status:e,limit:100}),meta:p}),g=e=>e?.status===`shipping`&&l,_=e=>r({queryKey:t.develop.changeSets.set(e),queryFn:()=>f.get(e),refetchInterval:e=>g(e.state.data),meta:p}),v=e=>r({queryKey:t.develop.changeSets.review(e),queryFn:()=>f.review(e),refetchOnWindowFocus:!1,meta:p}),y=e=>r({queryKey:t.develop.changeSets.timeline(e),queryFn:()=>f.timeline(e),meta:p}),b=()=>r({queryKey:t.develop.changeSets.unassigned,queryFn:()=>f.unassigned({limit:100}),meta:p}),x=(r,a)=>{let o=i();return e({mutationKey:[`changeSets`,r],meta:p,mutationFn:e=>n(()=>a(e)),onSuccess:e=>(o.setQueryData(t.develop.changeSets.set(e.id),e),o.invalidateQueries({queryKey:t.develop.changeSets.all}))})},S=()=>x(`create`,e=>f.create(e)),C=()=>x(`update`,({id:e,input:t})=>f.update(e,t)),w=()=>x(`discard`,e=>f.discard(e)),T=()=>x(`addEntry`,({id:e,input:t})=>f.addEntry(e,t)),E=()=>x(`removeItem`,({id:e,itemId:t})=>f.removeItem(e,t)),D=()=>x(`ship`,({id:e,input:t})=>f.ship(e,t)),O=()=>x(`schedule`,({id:e,input:t})=>f.schedule(e,t)),k=()=>x(`unschedule`,e=>f.unschedule(e)),A=async e=>{let t=(await f.list({status:`open`,limit:1})).items[0]??await f.create({title:e,source:`builder`});return f.get(t.id)},j=()=>{let r=i();return e({mutationKey:[`changeSets`,`saveDraft`],meta:p,mutationFn:({definitionId:e,input:t,newSetTitle:r})=>n(async()=>{let n=await A(r),i=n.items.find(t=>t.kind===`schema`&&t.definitionId===e);return await f.putSchemaDraft(n.id,e,{...t,...i?.kind===`schema`?{expectedDraftVersion:i.draftVersion}:{}}),n.id}),onSuccess:()=>r.invalidateQueries({queryKey:t.develop.changeSets.all})})},M=()=>{let r=i();return e({mutationKey:[`changeSets`,`saveNewDefinitions`],meta:p,mutationFn:({definitions:e,newSetTitle:t})=>n(async()=>{let n=await A(t);for(let t of e)await f.putSchemaDraft(n.id,t.id,{category:t.kind===`component`?`component`:`model`,definition:t,baseVersion:null});return n.id}),onSuccess:()=>r.invalidateQueries({queryKey:t.develop.changeSets.all})})},N=(e,n)=>r({queryKey:t.develop.changeSets.draft(e,n),queryFn:()=>f.getSchemaDraft(e,n),meta:p}),P=e=>new o(422,{error:{code:e.error?.code??`CHANGE_SET_FAILED`,message:e.error?.message??e.title}}),F=()=>{let r=i();return e({mutationKey:[`changeSets`,`shipDraftNow`],meta:p,mutationFn:({definitionId:e,input:t,acknowledgement:r,title:i})=>n(async()=>{let n=await f.create({title:i,source:`builder`}),a;try{await f.putSchemaDraft(n.id,e,t);let i=await f.get(n.id);a=await f.ship(i.id,{expectedVersion:i.version,...r})}catch(e){throw await f.discard(n.id).catch(e=>c(e,`discarding a change set the builder could not ship`)),e}if(a.status===`failed`)throw P(a);return a}),onSettled:()=>Promise.all([r.invalidateQueries({queryKey:t.develop.changeSets.all}),r.invalidateQueries({queryKey:t.schema.all})])})};export{C as _,h as a,E as c,O as d,N as f,k as g,b as h,y as i,j as l,F as m,_ as n,S as o,D as p,v as r,w as s,T as t,M as u,d as v};
2
+ //# sourceMappingURL=changeSets-D5VevASj.js.map