admin-ui-starter-kit 0.6.1 → 0.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/component-library-rules/references/components/services__hooks.md +6 -1
- package/dist/_shared/{auth-B_KVUjsB.cjs → auth-DdezEtKK.cjs} +2 -2
- package/dist/_shared/{auth-B_KVUjsB.cjs.map → auth-DdezEtKK.cjs.map} +1 -1
- package/dist/_shared/{auth-C_TgyzDl.js → auth-e7yab9pK.js} +2 -2
- package/dist/_shared/{auth-C_TgyzDl.js.map → auth-e7yab9pK.js.map} +1 -1
- package/dist/_shared/{buttons-C8jy-jMd.cjs → buttons-Bek9F7qK.cjs} +2 -2
- package/dist/_shared/{buttons-C8jy-jMd.cjs.map → buttons-Bek9F7qK.cjs.map} +1 -1
- package/dist/_shared/{buttons-MxvdokeK.js → buttons-DcynMPnE.js} +2 -2
- package/dist/_shared/{buttons-MxvdokeK.js.map → buttons-DcynMPnE.js.map} +1 -1
- package/dist/_shared/cards-CbbHly7W.cjs +2 -0
- package/dist/_shared/cards-CbbHly7W.cjs.map +1 -0
- package/dist/_shared/{cards-CtBoSZG9.js → cards-RZxRLx3f.js} +6 -6
- package/dist/_shared/cards-RZxRLx3f.js.map +1 -0
- package/dist/_shared/{comments-DGBxF9fD.js → comments-BJqgvSFY.js} +2 -2
- package/dist/_shared/{comments-DGBxF9fD.js.map → comments-BJqgvSFY.js.map} +1 -1
- package/dist/_shared/{comments-C8iXy9XO.cjs → comments-BjPciQfo.cjs} +2 -2
- package/dist/_shared/{comments-C8iXy9XO.cjs.map → comments-BjPciQfo.cjs.map} +1 -1
- package/dist/_shared/{data-display-C_44_V-W.cjs → data-display-C21skrV4.cjs} +2 -2
- package/dist/_shared/{data-display-C_44_V-W.cjs.map → data-display-C21skrV4.cjs.map} +1 -1
- package/dist/_shared/{data-display-CRFaMkxT.js → data-display-C5-1dZua.js} +71 -71
- package/dist/_shared/{data-display-CRFaMkxT.js.map → data-display-C5-1dZua.js.map} +1 -1
- package/dist/_shared/{forms-qnwoUqxf.js → forms-BoquZE2Y.js} +3 -3
- package/dist/_shared/{forms-qnwoUqxf.js.map → forms-BoquZE2Y.js.map} +1 -1
- package/dist/_shared/{forms-rmKcy5uO.cjs → forms-CzrEYejY.cjs} +2 -2
- package/dist/_shared/{forms-rmKcy5uO.cjs.map → forms-CzrEYejY.cjs.map} +1 -1
- package/dist/_shared/{overlays-CdtMAkKG.js → overlays-DW8OIK5R.js} +134 -47
- package/dist/_shared/overlays-DW8OIK5R.js.map +1 -0
- package/dist/_shared/overlays-Du65iCkx.cjs +2 -0
- package/dist/_shared/overlays-Du65iCkx.cjs.map +1 -0
- package/dist/_shared/{page-C6EzwvTz.cjs → page-D8UMXREv.cjs} +2 -2
- package/dist/_shared/{page-C6EzwvTz.cjs.map → page-D8UMXREv.cjs.map} +1 -1
- package/dist/_shared/{page-DCW1eWCJ.js → page-D9LNsHMN.js} +2 -2
- package/dist/_shared/{page-DCW1eWCJ.js.map → page-D9LNsHMN.js.map} +1 -1
- package/dist/_shared/{settings-QOBrbgdN.js → settings-BeZOIEJB.js} +2 -2
- package/dist/_shared/{settings-QOBrbgdN.js.map → settings-BeZOIEJB.js.map} +1 -1
- package/dist/_shared/{settings-DbAyxMrX.cjs → settings-DI-K34bW.cjs} +2 -2
- package/dist/_shared/{settings-DbAyxMrX.cjs.map → settings-DI-K34bW.cjs.map} +1 -1
- package/dist/_shared/{table-CUA_A-oO.js → table-B_pqCQxC.js} +3 -3
- package/dist/_shared/table-B_pqCQxC.js.map +1 -0
- package/dist/_shared/table-CGVOXtdv.cjs +2 -0
- package/dist/_shared/table-CGVOXtdv.cjs.map +1 -0
- package/dist/components/base/buttons/index.cjs +1 -1
- package/dist/components/base/buttons/index.js +1 -1
- package/dist/components/base/cards/index.cjs +1 -1
- package/dist/components/base/cards/index.js +1 -1
- package/dist/components/base/forms/index.cjs +1 -1
- package/dist/components/base/forms/index.js +1 -1
- package/dist/components/base/table/index.cjs +1 -1
- package/dist/components/base/table/index.js +1 -1
- package/dist/components/composed/admin/index.cjs +1 -1
- package/dist/components/composed/admin/index.js +2 -2
- package/dist/components/composed/ai/index.cjs +1 -1
- package/dist/components/composed/ai/index.js +2 -2
- package/dist/components/composed/analytics/index.cjs +1 -1
- package/dist/components/composed/analytics/index.js +1 -1
- package/dist/components/composed/cards/index.cjs +1 -1
- package/dist/components/composed/cards/index.js +2 -2
- package/dist/components/composed/commerce/index.cjs +1 -1
- package/dist/components/composed/commerce/index.js +2 -2
- package/dist/components/composed/dark-surfaces/index.cjs +1 -1
- package/dist/components/composed/dark-surfaces/index.js +1 -1
- package/dist/components/composed/data-display/index.cjs +1 -1
- package/dist/components/composed/data-display/index.js +1 -1
- package/dist/components/composed/data-display/metadata/metadata-list.d.ts.map +1 -1
- package/dist/components/composed/navigation/index.cjs +1 -1
- package/dist/components/composed/navigation/index.js +1 -1
- package/dist/components/composed/timelines/index.cjs +1 -1
- package/dist/components/composed/timelines/index.js +1 -1
- package/dist/components/features/activities/index.cjs +1 -1
- package/dist/components/features/activities/index.js +1 -1
- package/dist/components/features/card/index.cjs +1 -1
- package/dist/components/features/card/index.js +2 -2
- package/dist/components/features/comments/index.cjs +1 -1
- package/dist/components/features/comments/index.js +1 -1
- package/dist/components/features/event-log/index.cjs +1 -1
- package/dist/components/features/event-log/index.js +2 -2
- package/dist/components/features/media-library/index.cjs +1 -1
- package/dist/components/features/media-library/index.js +2 -2
- package/dist/components/features/overlays/hooks/index.d.ts +1 -0
- package/dist/components/features/overlays/hooks/index.d.ts.map +1 -1
- package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +33 -0
- package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts.map +1 -0
- package/dist/components/features/overlays/index.cjs +1 -1
- package/dist/components/features/overlays/index.d.ts +1 -1
- package/dist/components/features/overlays/index.d.ts.map +1 -1
- package/dist/components/features/overlays/index.js +2 -2
- package/dist/components/features/products/index.cjs +1 -1
- package/dist/components/features/products/index.js +4 -4
- package/dist/components/features/resource/index.cjs +1 -1
- package/dist/components/features/resource/index.js +2 -2
- package/dist/components/features/schema-form/index.cjs +1 -1
- package/dist/components/features/schema-form/index.js +2 -2
- package/dist/components/layout/auth/index.cjs +1 -1
- package/dist/components/layout/auth/index.js +1 -1
- package/dist/components/layout/index.cjs +1 -1
- package/dist/components/layout/index.js +3 -3
- package/dist/components/layout/page/index.cjs +1 -1
- package/dist/components/layout/page/index.js +1 -1
- package/dist/components/layout/settings/index.cjs +1 -1
- package/dist/components/layout/settings/index.js +1 -1
- package/dist/services/actions/index.cjs +1 -1
- package/dist/services/actions/index.js +1 -1
- package/dist/showcase/assets/{AreaChart-CGkuyNyy.js → AreaChart-Y0ZwblHU.js} +1 -1
- package/dist/showcase/assets/{CompositeItem-DAQ048AO.js → CompositeItem-BIY_Cp7P.js} +1 -1
- package/dist/showcase/assets/{CompositeRoot-8-OuCMMq.js → CompositeRoot-DSPvBRQr.js} +1 -1
- package/dist/showcase/assets/{DialogTrigger-1P-jwcoH.js → DialogTrigger-DHUp8vXe.js} +1 -1
- package/dist/showcase/assets/{LabelableContext-BDyZArAc.js → LabelableContext-CasUI4hR.js} +1 -1
- package/dist/showcase/assets/{PreviewLayout-wYGhlcJt.js → PreviewLayout-B_l930k0.js} +1 -1
- package/dist/showcase/assets/{RadioGroup-DuiI4W--.js → RadioGroup-BgZ-UH79.js} +1 -1
- package/dist/showcase/assets/{ScrollAreaCorner-Df5uTkWT.js → ScrollAreaCorner-BbwFElLA.js} +1 -1
- package/dist/showcase/assets/{Separator-BuTBo5a_.js → Separator-dQuencsA.js} +1 -1
- package/dist/showcase/assets/{ToolbarRootContext-B4S4Fn7d.js → ToolbarRootContext-BE0hbejq.js} +1 -1
- package/dist/showcase/assets/{accordion-D3beuJpC.js → accordion-D93ZNsLn.js} +1 -1
- package/dist/showcase/assets/{accordion-variants-BTMpfSPI.js → accordion-variants-Bl4bIQH4.js} +1 -1
- package/dist/showcase/assets/{action-menu-DsAr1OqF.js → action-menu--rEgMzDi.js} +1 -1
- package/dist/showcase/assets/{actions-BzyHAEZR.js → actions-3iedOWD9.js} +1 -1
- package/dist/showcase/assets/{activities-BgoelWKu.js → activities-CyrAWFlu.js} +1 -1
- package/dist/showcase/assets/{activities-feed-card-DI4MIm3-.js → activities-feed-card-bhIATc2O.js} +1 -1
- package/dist/showcase/assets/{admin-n-JemkNh.js → admin-CZzNsj2q.js} +1 -1
- package/dist/showcase/assets/{ai-BXyk1mT0.js → ai-CasHwkW4.js} +1 -1
- package/dist/showcase/assets/{ai-artifact-C8CmZ94f.js → ai-artifact-BgWvrLAb.js} +1 -1
- package/dist/showcase/assets/{ai-chat-CTQQ4e4X.js → ai-chat-seS9aW-1.js} +1 -1
- package/dist/showcase/assets/{ai-elements-DGnlBq8E.js → ai-elements-Tku5_ous.js} +1 -1
- package/dist/showcase/assets/{ai-tool-call-bHnWNBtN.js → ai-tool-call-BU6xbmXG.js} +1 -1
- package/dist/showcase/assets/{alert-bPnj3_cC.js → alert-6Emt6KX2.js} +1 -1
- package/dist/showcase/assets/{alert-CIHGXUul.js → alert-B6aLWiRW.js} +1 -1
- package/dist/showcase/assets/{alert-N79A6qIx.js → alert-CtoTQ0vN.js} +1 -1
- package/dist/showcase/assets/{api-key-list-Bf1KoRJq.js → api-key-list-C0glWR3z.js} +1 -1
- package/dist/showcase/assets/{api-key-list-DyZ_DaRx.js → api-key-list-DcWSbY3u.js} +1 -1
- package/dist/showcase/assets/{app-sidebar-Co0LUSvz.js → app-sidebar-D_eNP_jh.js} +1 -1
- package/dist/showcase/assets/arrow-down-qyKZ1H5j.js +1 -0
- package/dist/showcase/assets/arrow-left-C9I0h_su.js +1 -0
- package/dist/showcase/assets/arrow-right-DswaRsr6.js +1 -0
- package/dist/showcase/assets/arrow-up-5BijPOxK.js +1 -0
- package/dist/showcase/assets/arrow-up-right-CbVVNT6g.js +1 -0
- package/dist/showcase/assets/{avatar-DKLsNeBi.js → avatar-BYHVCvVW.js} +1 -1
- package/dist/showcase/assets/{avatar-D3kvVy00.js → avatar-BlLAVC87.js} +1 -1
- package/dist/showcase/assets/{avatar-CJaCYGWf.js → avatar-DQTXjcS4.js} +1 -1
- package/dist/showcase/assets/{avatar-CxwFyL4T.js → avatar-DveZy09C.js} +1 -1
- package/dist/showcase/assets/{badge-CSMmwDLr.js → badge-Bth3mRTh.js} +1 -1
- package/dist/showcase/assets/{badge-check-TQRmqI7C.js → badge-check-DocF8Ho3.js} +1 -1
- package/dist/showcase/assets/{bell-CwRy7zpP.js → bell-DXBoeAzi.js} +1 -1
- package/dist/showcase/assets/{bot-Bt02Uzhq.js → bot-Ch-Y1HK8.js} +1 -1
- package/dist/showcase/assets/{box-Bfv5RQBf.js → box-72m9QSDa.js} +1 -1
- package/dist/showcase/assets/{braces-CxUoAPd4.js → braces-CC17X3TE.js} +1 -1
- package/dist/showcase/assets/{brain-CNapE0CP.js → brain-Dvbla_5x.js} +1 -1
- package/dist/showcase/assets/{brand-CBq1YoS0.js → brand-D5ciAq8v.js} +1 -1
- package/dist/showcase/assets/{breadcrumb-DyXpErBT.js → breadcrumb-BBCaOVyz.js} +1 -1
- package/dist/showcase/assets/{breadcrumb-DRioiUd_.js → breadcrumb-Bt8yVTCj.js} +1 -1
- package/dist/showcase/assets/{breadcrumbs-BzHeoItO.js → breadcrumbs-CkVWfcAN.js} +1 -1
- package/dist/showcase/assets/{briefcase-N74Hu0O2.js → briefcase-8rQTJwpE.js} +1 -1
- package/dist/showcase/assets/{building-2-D81ygy-F.js → building-2-CV7gTtXz.js} +1 -1
- package/dist/showcase/assets/{button-Bgqg7AmN.js → button-HGjoBio3.js} +1 -1
- package/dist/showcase/assets/{button-group-DPV1XIW3.js → button-group-LWToSCrp.js} +1 -1
- package/dist/showcase/assets/{buttons-qpZWlILG.js → buttons-Bn_dX6Kk.js} +1 -1
- package/dist/showcase/assets/{calendar-DcYyOrNY.js → calendar-BTsffmY8.js} +1 -1
- package/dist/showcase/assets/{calendar-BXG5CwbY.js → calendar-Bhpyn4u0.js} +1 -1
- package/dist/showcase/assets/{calendar-D-CSqGtC.js → calendar-DjrUTKcD.js} +1 -1
- package/dist/showcase/assets/{calendar-days-CNNiyV9e.js → calendar-days-BKCkzWjV.js} +1 -1
- package/dist/showcase/assets/{camera-D0yVo0xC.js → camera-EjpDG3mc.js} +1 -1
- package/dist/showcase/assets/{card-CH7Ev3xS.js → card-Bp6iGuOF.js} +1 -1
- package/dist/showcase/assets/{card-Bl-y9-8y.js → card-CHc6AVFt.js} +1 -1
- package/dist/showcase/assets/card-primitives-Bv6XGPJd.js +1 -0
- package/dist/showcase/assets/{card-radio-group-DpeIWyiO.js → card-radio-group-Ce9FsiSv.js} +1 -1
- package/dist/showcase/assets/{cards-7xave3ub.js → cards-_CGG9zir.js} +1 -1
- package/dist/showcase/assets/{carousel--kHTFkC7.js → carousel-BVbsKH2W.js} +1 -1
- package/dist/showcase/assets/{cell-renderers-Cx8rAZln.js → cell-renderers-CosD6Gby.js} +1 -1
- package/dist/showcase/assets/{chart-DU8INHbt.js → chart-CwOp8Sf8.js} +1 -1
- package/dist/showcase/assets/{chart-column-Dbekq8cy.js → chart-column-sz871NdJ.js} +1 -1
- package/dist/showcase/assets/{checkbox-ClPnzko9.js → checkbox-BO38TYqr.js} +1 -1
- package/dist/showcase/assets/checkbox-W4MhlPlJ.js +1 -0
- package/dist/showcase/assets/chevron-down-BFh1Fz2P.js +1 -0
- package/dist/showcase/assets/chevron-left-C5_X5glO.js +1 -0
- package/dist/showcase/assets/chevron-up-DPH3boVS.js +1 -0
- package/dist/showcase/assets/chevrons-up-down-CM5mIDaw.js +1 -0
- package/dist/showcase/assets/circle-BFDzL1iF.js +1 -0
- package/dist/showcase/assets/{circle-alert-9j29FrsT.js → circle-alert-C6MbOB0m.js} +1 -1
- package/dist/showcase/assets/circle-check-C0X85t4j.js +1 -0
- package/dist/showcase/assets/circle-check-big-CBaodck_.js +1 -0
- package/dist/showcase/assets/circle-dot-DdRpIhnL.js +1 -0
- package/dist/showcase/assets/{circle-question-mark-BRiF5RV4.js → circle-question-mark-CKlcead7.js} +1 -1
- package/dist/showcase/assets/{circle-x-BF20gddw.js → circle-x-MO44aKHe.js} +1 -1
- package/dist/showcase/assets/clock-3-CXQJFcbh.js +1 -0
- package/dist/showcase/assets/clock-GhBJJ6n1.js +1 -0
- package/dist/showcase/assets/{code-xml-D2f-X63y.js → code-xml-BSX7Qyi5.js} +1 -1
- package/dist/showcase/assets/{collapsible-CF0oQTVS.js → collapsible-CZLTO5EH.js} +1 -1
- package/dist/showcase/assets/{collapsible-Ru5-bssh.js → collapsible-LrDO_sSQ.js} +1 -1
- package/dist/showcase/assets/{combobox-DpJTW_Rq.js → combobox-TmDBXkM-.js} +1 -1
- package/dist/showcase/assets/{command-Dno8Ogez.js → command-9-r1qrJt.js} +1 -1
- package/dist/showcase/assets/{command-LRFStKBy.js → command-DGne3l9s.js} +1 -1
- package/dist/showcase/assets/{comment-composer-Dht7nfbv.js → comment-composer-BI0qnvuY.js} +1 -1
- package/dist/showcase/assets/{comment-item-B6IgQsMr.js → comment-item-Cedds6Lm.js} +1 -1
- package/dist/showcase/assets/{comments-B3ksV3Mn.js → comments-De02NOns.js} +1 -1
- package/dist/showcase/assets/{commerce-B1_Offbz.js → commerce-DldtS83o.js} +1 -1
- package/dist/showcase/assets/{composite-BjQWIYF-.js → composite-BjZZlzzb.js} +1 -1
- package/dist/showcase/assets/{contact-card-Bss4YHZz.js → contact-card-muCZ3uXV.js} +1 -1
- package/dist/showcase/assets/{content-container-D4BM1Zro.js → content-container-BxSLICeL.js} +1 -1
- package/dist/showcase/assets/{copyable-Dst8oaw5.js → copyable-DYhhmTqM.js} +1 -1
- package/dist/showcase/assets/{copyable-C0J88R_R.js → copyable-MNU75-J9.js} +1 -1
- package/dist/showcase/assets/{course-card-BuqwjqtO.js → course-card-Dl1wsuJx.js} +1 -1
- package/dist/showcase/assets/{cpu-CFy0M0rN.js → cpu-CsWq4fcX.js} +1 -1
- package/dist/showcase/assets/{credit-card-CFq0S1Ma.js → credit-card-B0AUZiWw.js} +1 -1
- package/dist/showcase/assets/{css-variables-BAALjDwD.js → css-variables-Be7DzahT.js} +1 -1
- package/dist/showcase/assets/{currency-BZzZRv2_.js → currency-BtPM_Xtw.js} +1 -1
- package/dist/showcase/assets/{dark-surfaces-CVKt2Yww.js → dark-surfaces-DRFERSEv.js} +1 -1
- package/dist/showcase/assets/{data-view-Be0uoLqL.js → data-view-DmWd0h7G.js} +2 -2
- package/dist/showcase/assets/{data-view-D6_zyFwk.js → data-view-DnLH2o0i.js} +1 -1
- package/dist/showcase/assets/{database-DSC-ysYT.js → database-C0YqGaQ_.js} +1 -1
- package/dist/showcase/assets/{date-block-Bgu_LMxB.js → date-block-BQH25FLS.js} +1 -1
- package/dist/showcase/assets/{date-picker-ByYEZGMg.js → date-picker-BF-jevhh.js} +1 -1
- package/dist/showcase/assets/{date-pickers-DzSQrvWs.js → date-pickers-q2v3ajJm.js} +1 -1
- package/dist/showcase/assets/{dense-info-BhFkOQbt.js → dense-info-Cb-roqDU.js} +1 -1
- package/dist/showcase/assets/{design-system-consistency-D6iCJLcr.js → design-system-consistency-DMSJknaM.js} +1 -1
- package/dist/showcase/assets/{dialog-C1heXuxu.js → dialog-C0ALRmbP.js} +1 -1
- package/dist/showcase/assets/{dialog-DzrcsKvl.js → dialog-CbXon08k.js} +1 -1
- package/dist/showcase/assets/{display-utilities-eu-EVMrx.js → display-utilities-kBUVw7o3.js} +1 -1
- package/dist/showcase/assets/{dist-DV4Tv32d.js → dist-CTSkWj_M.js} +1 -1
- package/dist/showcase/assets/{dist-BlIID0_L.js → dist-W8bxVfew.js} +1 -1
- package/dist/showcase/assets/{dollar-sign-qp4G3P_K.js → dollar-sign-VNxVZleW.js} +1 -1
- package/dist/showcase/assets/{download-zlcHjSdS.js → download-Ds_6eIpx.js} +1 -1
- package/dist/showcase/assets/{dropdown-menu-DZ47rJaE.js → dropdown-menu-C1G_y9dv.js} +1 -1
- package/dist/showcase/assets/{dropzone-Dx4EqBHu.js → dropzone-CxOLmdkt.js} +1 -1
- package/dist/showcase/assets/{earth-BuXqXHh6.js → earth-HLyEI1oq.js} +1 -1
- package/dist/showcase/assets/{ellipsis-DgAjMZHc.js → ellipsis-BLyAd9A-.js} +1 -1
- package/dist/showcase/assets/{ellipsis-vertical-BA8_YMyV.js → ellipsis-vertical-TG4mYU2J.js} +1 -1
- package/dist/showcase/assets/{empty-DXjKmyNv.js → empty-B54k9xAG.js} +1 -1
- package/dist/showcase/assets/{empty-item-DIGWYsI0.js → empty-item-BmA4rmq7.js} +1 -1
- package/dist/showcase/assets/{empty-state-BSc0tQNC.js → empty-state-CH7gjjg7.js} +1 -1
- package/dist/showcase/assets/{empty-state-CkixFVN1.js → empty-state-hUKvmKa-.js} +1 -1
- package/dist/showcase/assets/{enhanced-activities-CKbHgR4f.js → enhanced-activities-BRDVL9RR.js} +1 -1
- package/dist/showcase/assets/{enhanced-combobox-DAKQyFUg.js → enhanced-combobox-2wbQJS6R.js} +1 -1
- package/dist/showcase/assets/{esm-C3PfkuOc.js → esm-CUTefMLr.js} +1 -1
- package/dist/showcase/assets/{event-calendar-rNju8jaT.js → event-calendar-Bf9xFZlt.js} +1 -1
- package/dist/showcase/assets/{event-log-BUK1blGb.js → event-log-CeRDSL-h.js} +1 -1
- package/dist/showcase/assets/{example-PsbgbESI.js → example-CJMJcnb4.js} +1 -1
- package/dist/showcase/assets/{external-link-CgB9zfWz.js → external-link-CvXhYrnd.js} +1 -1
- package/dist/showcase/assets/{eye-YnIHbdKe.js → eye-Cl_GfUKH.js} +1 -1
- package/dist/showcase/assets/{feature-announcement-CWwjAPI1.js → feature-announcement-Dw0SokLo.js} +1 -1
- package/dist/showcase/assets/{file-3Z2xkc-8.js → file-CJFWrwy1.js} +1 -1
- package/dist/showcase/assets/{file-text-BQeGXxPG.js → file-text-BTTFP8Jo.js} +1 -1
- package/dist/showcase/assets/{filter-layout-D7YskzbC.js → filter-layout-DUVqG5Ql.js} +1 -1
- package/dist/showcase/assets/{filters-2YY_wVwq.js → filters-BLcCaplV.js} +1 -1
- package/dist/showcase/assets/{flag-Bw3wwRgF.js → flag-BxI3EGPG.js} +1 -1
- package/dist/showcase/assets/{folder-open-CZ5Bq4lK.js → folder-open-4d8qsiAj.js} +1 -1
- package/dist/showcase/assets/{form-field-AWNJL9FM.js → form-field-Dhy0eM5B.js} +1 -1
- package/dist/showcase/assets/{format-DUU7-42g.js → format-zGqa9Olc.js} +1 -1
- package/dist/showcase/assets/{forms-CWJ3HBbk.js → forms-D99qG5Gb.js} +1 -1
- package/dist/showcase/assets/{funnel-vxNNph7w.js → funnel-Cg7SOShf.js} +1 -1
- package/dist/showcase/assets/{generic-DlyFJDj6.js → generic-CfrG943t.js} +1 -1
- package/dist/showcase/assets/{getPseudoElementBounds-CibNto5h.js → getPseudoElementBounds-lw5shsdM.js} +1 -1
- package/dist/showcase/assets/{gift-BjRHqTcQ.js → gift-BXtKbzvA.js} +1 -1
- package/dist/showcase/assets/{giftcard-cards-DcujCFff.js → giftcard-cards-CqYaN0jC.js} +1 -1
- package/dist/showcase/assets/{git-branch-B7XnpQE0.js → git-branch-BWAuIMOQ.js} +1 -1
- package/dist/showcase/assets/{global-search-CWvNfmpe.js → global-search-CHUva8pR.js} +1 -1
- package/dist/showcase/assets/{global-search-Ct7I1Xd2.js → global-search-Df7JovOG.js} +1 -1
- package/dist/showcase/assets/{globe-CHleXWd2.js → globe-CvIW_foU.js} +1 -1
- package/dist/showcase/assets/{gradient-card-Bw4oJljh.js → gradient-card-CdM2J1Hv.js} +1 -1
- package/dist/showcase/assets/{hash-BVGqnm6_.js → hash-wBs5gyr_.js} +1 -1
- package/dist/showcase/assets/{header-CgApizpk.js → header-DXPFmpUT.js} +1 -1
- package/dist/showcase/assets/{header-notifications-B2v1Mdri.js → header-notifications-FsnCJLpe.js} +1 -1
- package/dist/showcase/assets/{heart-BwvHCA-d.js → heart-B4fOMIr6.js} +1 -1
- package/dist/showcase/assets/{hooks-A_AQLIRZ.js → hooks-DtMOMalj.js} +6 -3
- package/dist/showcase/assets/{house-opqNxOmP.js → house-hebmAxEE.js} +1 -1
- package/dist/showcase/assets/{icon-badge-ognVhKWR.js → icon-badge-DrZ5qGpa.js} +1 -1
- package/dist/showcase/assets/{icon-badge-CsG95J1Z.js → icon-badge-JEug_P_U.js} +1 -1
- package/dist/showcase/assets/{image-apDSlTAx.js → image-CxNywgkb.js} +1 -1
- package/dist/showcase/assets/{inbox-WrbeTKEw.js → inbox-DqAmGdDd.js} +1 -1
- package/dist/showcase/assets/index-DujM0kEF.css +2 -0
- package/dist/showcase/assets/{index-QESvAJrb.js → index-jD-KSiHu.js} +2 -2
- package/dist/showcase/assets/inertValue-Dg9TwvOb.js +1 -0
- package/dist/showcase/assets/{info-C3G9KRCx.js → info-B5fZn_ZC.js} +1 -1
- package/dist/showcase/assets/{inline-stat-CO01t7SJ.js → inline-stat-CklKufoA.js} +1 -1
- package/dist/showcase/assets/{inline-stat-BnjUqzDM.js → inline-stat-Dep7oHIi.js} +1 -1
- package/dist/showcase/assets/{input-yYoqWQQ7.js → input-CkNgwwCs.js} +1 -1
- package/dist/showcase/assets/{input-CBJy1dMs.js → input-DAPMRlKO.js} +1 -1
- package/dist/showcase/assets/{input-group-CZyYSq4r.js → input-group-06D68uB6.js} +1 -1
- package/dist/showcase/assets/{input-group-Dfqufdp4.js → input-group-Bq9aXQPG.js} +1 -1
- package/dist/showcase/assets/{inputs-Bhw_FGDY.js → inputs-C8G3y-zR.js} +1 -1
- package/dist/showcase/assets/{installation-DnvS2ZUn.js → installation-BV5xOvoE.js} +1 -1
- package/dist/showcase/assets/{invoice-header-B9Ak8GXX.js → invoice-header-BcUxzT68.js} +1 -1
- package/dist/showcase/assets/{invoice-items-DY5zUZhE.js → invoice-items-B42Jfxl7.js} +1 -1
- package/dist/showcase/assets/{invoice-mini-BAryECEH.js → invoice-mini-RJGdlErg.js} +1 -1
- package/dist/showcase/assets/{invoice-table-BUvjee74.js → invoice-table--MdP6ysv.js} +1 -1
- package/dist/showcase/assets/isSameDay-srttAIjD.js +1 -0
- package/dist/showcase/assets/isToday-BPub5Zvi.js +1 -0
- package/dist/showcase/assets/{italic-CjQCLJci.js → italic-1BNA_XlU.js} +1 -1
- package/dist/showcase/assets/{item-DxPwk321.js → item-B9KyqUGa.js} +1 -1
- package/dist/showcase/assets/{item-D1Jxrpia.js → item-DoIlPm6J.js} +1 -1
- package/dist/showcase/assets/{item-BMSdEK3V.js → item-ffIfXEGd.js} +1 -1
- package/dist/showcase/assets/{kanban-DXWCGieQ.js → kanban-Cfad3edR.js} +1 -1
- package/dist/showcase/assets/{key-round-DpuhXiJQ.js → key-round-J11Zc216.js} +1 -1
- package/dist/showcase/assets/{label-D1wLK5nY.js → label-DqaB8ZB2.js} +1 -1
- package/dist/showcase/assets/{languages-CGYZVmbV.js → languages-D9UaP3QU.js} +1 -1
- package/dist/showcase/assets/{layers-DJZSVGAu.js → layers-QXZ9Jfej.js} +1 -1
- package/dist/showcase/assets/{layout-app-shell-UX63nzTO.js → layout-app-shell-CW1eRJmU.js} +1 -1
- package/dist/showcase/assets/{layout-auth-Bav5BBqp.js → layout-auth-j4K6lveg.js} +1 -1
- package/dist/showcase/assets/{layout-containers-DMHD2zdV.js → layout-containers-NclLtsV0.js} +1 -1
- package/dist/showcase/assets/{layout-header-CGesu_kM.js → layout-header-B8AOTiwL.js} +1 -1
- package/dist/showcase/assets/{layout-page-DHXu8SIv.js → layout-page-DM79QHyW.js} +1 -1
- package/dist/showcase/assets/{layout-primitives-CokzGwd2.js → layout-primitives-Dyop-WMt.js} +1 -1
- package/dist/showcase/assets/{layout-sidebar-CLUYajcu.js → layout-sidebar-uBNaHqjD.js} +1 -1
- package/dist/showcase/assets/{layout-users-DHUNAnFA.js → layout-users-BkhDiOOz.js} +1 -1
- package/dist/showcase/assets/{layout-workspace-y0v2FpDW.js → layout-workspace-C2hSimZW.js} +1 -1
- package/dist/showcase/assets/{lib-g_kR7X9Z.js → lib-CDssULuD.js} +1 -1
- package/dist/showcase/assets/{list-checks-CXt8visd.js → list-checks-DA2jqXdm.js} +1 -1
- package/dist/showcase/assets/{lock-CpZ5kLUd.js → lock-BDZLNQLR.js} +1 -1
- package/dist/showcase/assets/{lock-keyhole-Cy2raRO6.js → lock-keyhole-CWYENd9O.js} +1 -1
- package/dist/showcase/assets/{mail-Cj6uT4TA.js → mail-CCdaRmft.js} +1 -1
- package/dist/showcase/assets/{mail-check-Di70bdf6.js → mail-check-DZF1VbCX.js} +1 -1
- package/dist/showcase/assets/{map-DMXbG_04.js → map-CDFEmmZH.js} +3 -3
- package/dist/showcase/assets/{map-pin-EKhu7vEj.js → map-pin-CdV-R6nt.js} +1 -1
- package/dist/showcase/assets/{media-library-Dnp9S0oW.js → media-library-BJyn1s9d.js} +1 -1
- package/dist/showcase/assets/{mention-inline-suggestions-Bp-fVNYF.js → mention-inline-suggestions-DPO6FhXx.js} +1 -1
- package/dist/showcase/assets/{mentions-DNRk30XZ.js → mentions-DtWHbcS6.js} +1 -1
- package/dist/showcase/assets/{menus-DFURb5VL.js → menus-BmjngFE4.js} +1 -1
- package/dist/showcase/assets/{message-square-DG0qIsG_.js → message-square-bM29txT3.js} +1 -1
- package/dist/showcase/assets/{metadata-list-Cb1DQd4S.js → metadata-list-DvYTAJri.js} +1 -1
- package/dist/showcase/assets/metadata-list-xVUTVyy9.js +1 -0
- package/dist/showcase/assets/{metric-BkzIsP8H.js → metric-BPNCh4eA.js} +1 -1
- package/dist/showcase/assets/{metric-bar-CU73nx89.js → metric-bar-BX4sCMrM.js} +1 -1
- package/dist/showcase/assets/{metric-grid-BMLMbLjE.js → metric-grid-IyHP3nmU.js} +1 -1
- package/dist/showcase/assets/{metric-trend-chip-Dutl5uZo.js → metric-trend-chip-Dih8eR17.js} +1 -1
- package/dist/showcase/assets/{metrics-analytics-bar-AqG2oyIy.js → metrics-analytics-bar-DK16RNMs.js} +1 -1
- package/dist/showcase/assets/{metrics-analytics-cards-CrFHmR2f.js → metrics-analytics-cards-Byyl13YT.js} +1 -1
- package/dist/showcase/assets/{metrics-comparison-CY-DyLv7.js → metrics-comparison-DGHFMBL-.js} +1 -1
- package/dist/showcase/assets/{metrics-heatmap-BmX_CkiP.js → metrics-heatmap-Bl6C7i0j.js} +1 -1
- package/dist/showcase/assets/{metrics-inline-badge-C1IFjdJN.js → metrics-inline-badge-Bz79zbNK.js} +1 -1
- package/dist/showcase/assets/{metrics-kpi-row-8Kbn034e.js → metrics-kpi-row-DzZ9dRFY.js} +1 -1
- package/dist/showcase/assets/{metrics-micro-grid-CodO02yA.js → metrics-micro-grid-DyoQiuzr.js} +1 -1
- package/dist/showcase/assets/{metrics-overview-CdPqEAAG.js → metrics-overview-DoyHPEZw.js} +1 -1
- package/dist/showcase/assets/{metrics-stat-cards-Cw7UMWmb.js → metrics-stat-cards-B1b7NFqW.js} +1 -1
- package/dist/showcase/assets/minus-BE2L5hVc.js +1 -0
- package/dist/showcase/assets/{money-display-CFfUZLus.js → money-display-CXQ_8LfA.js} +1 -1
- package/dist/showcase/assets/{month-year-picker-ChVcYm9f.js → month-year-picker-ra8FEN8F.js} +1 -1
- package/dist/showcase/assets/{navigation-Boyt1q-1.js → navigation-CFfVZQJ1.js} +1 -1
- package/dist/showcase/assets/{navigation-CThYYxkL.js → navigation-Da0MVkqr.js} +1 -1
- package/dist/showcase/assets/{navigation-extras-CxLc-Mqx.js → navigation-extras-LpsdoXfx.js} +1 -1
- package/dist/showcase/assets/{onboarding-checklist-C15gqmFc.js → onboarding-checklist-DPNatNOk.js} +1 -1
- package/dist/showcase/assets/{overflow-tab-bar-B2Htn-Ft.js → overflow-tab-bar-C0vTzcEY.js} +1 -1
- package/dist/showcase/assets/{overlays-Cpj4akiw.js → overlays-Blmbun0J.js} +1 -1
- package/dist/showcase/assets/{overlays-CPZfp0nk.js → overlays-t0joc10Y.js} +1 -1
- package/dist/showcase/assets/{overview-BB-Xbkff.js → overview-Ckq8vbOR.js} +1 -1
- package/dist/showcase/assets/{package-DLn6nx-u.js → package-Cjod_a06.js} +1 -1
- package/dist/showcase/assets/{package-check-B0wyBUSU.js → package-check-JRHaNnkl.js} +1 -1
- package/dist/showcase/assets/{page-BPFNsNh7.js → page-9xr7xnuW.js} +1 -1
- package/dist/showcase/assets/page-action-button-BRXnfsEx.js +1 -0
- package/dist/showcase/assets/{page-header-BGqE9hzO.js → page-header-Bdlxfn_9.js} +1 -1
- package/dist/showcase/assets/{pagination-T4FmLNHn.js → pagination-CeaYhOvv.js} +1 -1
- package/dist/showcase/assets/{pagination-Be6ynLCp.js → pagination-DdZZHvNF.js} +1 -1
- package/dist/showcase/assets/{paperclip-B_kxXzSN.js → paperclip-BRM-yXTB.js} +1 -1
- package/dist/showcase/assets/{password-input-qfQ5eIU4.js → password-input-1FVEugoO.js} +1 -1
- package/dist/showcase/assets/{pencil-DlDLApli.js → pencil-DiG2dQ8F.js} +1 -1
- package/dist/showcase/assets/{phone-D8tvvbSQ.js → phone-BREyNZN-.js} +1 -1
- package/dist/showcase/assets/plus-CQcelTNc.js +1 -0
- package/dist/showcase/assets/{popover-Bu7aaPjE.js → popover-Czmwspmc.js} +1 -1
- package/dist/showcase/assets/{popover-menu-CD_JfEeq.js → popover-menu-beuCaiLt.js} +1 -1
- package/dist/showcase/assets/{popover-BsCx2XMI.js → popover-uqk7myG2.js} +1 -1
- package/dist/showcase/assets/{products-BzHX1ta0.js → products-DGNqIbLs.js} +1 -1
- package/dist/showcase/assets/{progress-jIJ_EIKE.js → progress-D76Df908.js} +1 -1
- package/dist/showcase/assets/{progress-CpW2ZGAy.js → progress-DjUprSDD.js} +1 -1
- package/dist/showcase/assets/{props-table-CCcohuyT.js → props-table-DoDq8Mvr.js} +1 -1
- package/dist/showcase/assets/{quote-Bc9eHVKi.js → quote-BvGGgyJ0.js} +1 -1
- package/dist/showcase/assets/{receipt-B77_VWtt.js → receipt-rgnlMgyi.js} +1 -1
- package/dist/showcase/assets/{receipt-text-BlL_TJsS.js → receipt-text-CBQrVlnU.js} +1 -1
- package/dist/showcase/assets/{refinement-guide-BpzOvT_R.js → refinement-guide-B_BpIMxm.js} +1 -1
- package/dist/showcase/assets/{refresh-cw-CELG4taF.js → refresh-cw-C-yHy6B7.js} +1 -1
- package/dist/showcase/assets/{resolveValueLabel-LRTUaJTb.js → resolveValueLabel-0bwEvIG-.js} +1 -1
- package/dist/showcase/assets/{resource-BT8_ck3n.js → resource-8f61BZ8t.js} +1 -1
- package/dist/showcase/assets/{resource-C7J3yZp6.js → resource-BEh6R0gu.js} +1 -1
- package/dist/showcase/assets/{resource-selector-card-Ay8ImvKg.js → resource-selector-card-DJwXY_Ms.js} +1 -1
- package/dist/showcase/assets/{rich-text-editor-CdGVvtsm.js → rich-text-editor-D433iv0N.js} +1 -1
- package/dist/showcase/assets/{rich-text-editor-DVtTVuZ6.js → rich-text-editor-vTRfWsOK.js} +1 -1
- package/dist/showcase/assets/rotate-ccw-JuE4H14F.js +1 -0
- package/dist/showcase/assets/{route-CgBh1oKF.js → route-eSu1bFNn.js} +1 -1
- package/dist/showcase/assets/{save-BFsAGR7O.js → save-Bpjj-rBP.js} +1 -1
- package/dist/showcase/assets/{schema-form-CaF-lBkN.js → schema-form-DmOpxd96.js} +1 -1
- package/dist/showcase/assets/{scroll-area-CpDi_6FP.js → scroll-area-B9OdCBy9.js} +1 -1
- package/dist/showcase/assets/{scroll-area-BkZULoZA.js → scroll-area-BH80l2As.js} +1 -1
- package/dist/showcase/assets/{section-D-N8Ze16.js → section-BPNIPavy.js} +1 -1
- package/dist/showcase/assets/{select-ReMZs8K6.js → select-BauiG1a3.js} +1 -1
- package/dist/showcase/assets/{select-C9Mfb_Gj.js → select-CPopSr5c.js} +1 -1
- package/dist/showcase/assets/{send-C6PbwpHN.js → send-DNCcBKXs.js} +1 -1
- package/dist/showcase/assets/{separator-CywPSoE0.js → separator-BK0beCOv.js} +1 -1
- package/dist/showcase/assets/{separator-Ha9YxI2x.js → separator-CKM9A-mm.js} +1 -1
- package/dist/showcase/assets/{settings-2-CVq5Uyv5.js → settings-2-B8fz7JZB.js} +1 -1
- package/dist/showcase/assets/{settings-DkTHc0Ob.js → settings-Cy2y3sQw.js} +1 -1
- package/dist/showcase/assets/{sheet-k-P0gWlk.js → sheet-C7VWkXE1.js} +1 -1
- package/dist/showcase/assets/{shield-Cme7_JJR.js → shield-ClPev4gS.js} +1 -1
- package/dist/showcase/assets/{shield-alert-CxV0S5w0.js → shield-alert-6XO5YZ5u.js} +1 -1
- package/dist/showcase/assets/{shield-check-BW_7p6Xf.js → shield-check-DSfGVZq0.js} +1 -1
- package/dist/showcase/assets/{shopping-bag-CoR8AMYU.js → shopping-bag-DzMrGvpF.js} +1 -1
- package/dist/showcase/assets/{showcase-m3FzbvoC.js → showcase-DuZaO6q9.js} +1 -1
- package/dist/showcase/assets/{sidebar-bz_FzvjM.js → sidebar-7y9EQYWf.js} +1 -1
- package/dist/showcase/assets/{sidebar.context-BWMPnGn6.js → sidebar.context-DUheJD8t.js} +1 -1
- package/dist/showcase/assets/{skeleton-BJMnQDgf.js → skeleton-Dgr8Vabr.js} +1 -1
- package/dist/showcase/assets/{skeleton-DoWW5XZD.js → skeleton-HSpErFqw.js} +1 -1
- package/dist/showcase/assets/{slider-BH1Gtp_p.js → slider-B7f81APg.js} +1 -1
- package/dist/showcase/assets/{smart-card-C6-idFYI.js → smart-card-p97LLZCW.js} +1 -1
- package/dist/showcase/assets/{sonner-CGZ3FC4U.js → sonner-CWazrN19.js} +1 -1
- package/dist/showcase/assets/{sortable.esm-CE0TA9V_.js → sortable.esm-uufol7Mz.js} +1 -1
- package/dist/showcase/assets/{sparkles-8yQFcmte.js → sparkles-Z4V23xKK.js} +1 -1
- package/dist/showcase/assets/{spinner-CNveVfOr.js → spinner-BUgjAjWE.js} +1 -1
- package/dist/showcase/assets/{spinner-CO8LjtjY.js → spinner-CXu7z8-j.js} +1 -1
- package/dist/showcase/assets/{spinner-BYUX0luk.js → spinner-DCwR0mnD.js} +1 -1
- package/dist/showcase/assets/{square-pen-CWylvezY.js → square-pen-jwp_OWMQ.js} +1 -1
- package/dist/showcase/assets/{stacked-avatars-DiNA5OJK.js → stacked-avatars-CHEpTotO.js} +1 -1
- package/dist/showcase/assets/{star-t53uwwyp.js → star-Ck8Lg5hm.js} +1 -1
- package/dist/showcase/assets/startOfDay-BzULZHy4.js +1 -0
- package/dist/showcase/assets/{styles-CwpnwrEQ.js → styles-CNYitflH.js} +1 -1
- package/dist/showcase/assets/{suggestions-CvxZxsmc.js → suggestions-CSF9MlKl.js} +1 -1
- package/dist/showcase/assets/{switch-CewkokYT.js → switch-BX9KSLIF.js} +1 -1
- package/dist/showcase/assets/{switch-D-7uqDR8.js → switch-Bn0WaWa9.js} +1 -1
- package/dist/showcase/assets/{sync-DnBSRAwH.js → sync-BuKBnqWW.js} +1 -1
- package/dist/showcase/assets/{table-3cUcSCBR.js → table-DNJcLaud.js} +42 -20
- package/dist/showcase/assets/{table-ds5oNU0h.js → table-NfpOWGsG.js} +1 -1
- package/dist/showcase/assets/{table-actions-CrujG5R-.js → table-actions-Ci9Yszp0.js} +1 -1
- package/dist/showcase/assets/{tabs-C-hJfSn5.js → tabs-CYNFQdIr.js} +1 -1
- package/dist/showcase/assets/{tabs-GG911oaV.js → tabs-Cm_p6znb.js} +1 -1
- package/dist/showcase/assets/{tags-input-DBeIaeVn.js → tags-input-DE4QZqS_.js} +1 -1
- package/dist/showcase/assets/{text-button-EZojp9Ye.js → text-button-D9llh4pU.js} +1 -1
- package/dist/showcase/assets/{text-link-DcKeYjEX.js → text-link-ZT6QGJOL.js} +1 -1
- package/dist/showcase/assets/{textarea-DgNgSl1g.js → textarea-CgcHuGVq.js} +1 -1
- package/dist/showcase/assets/{textarea-PXKZSiRa.js → textarea-D2uT_GJt.js} +1 -1
- package/dist/showcase/assets/{timelines-CaF_Ze8z.js → timelines-BEFO7tJ0.js} +1 -1
- package/dist/showcase/assets/{toggle-group-D_iuhL1G.js → toggle-group-oYpa59lN.js} +1 -1
- package/dist/showcase/assets/{toggles-BKaayRmE.js → toggles-BL93YmQo.js} +1 -1
- package/dist/showcase/assets/{toggles-group-DRAksOw2.js → toggles-group-BG-xiQCY.js} +1 -1
- package/dist/showcase/assets/{tooltip-B_LnC5D2.js → tooltip-BMI7zHwP.js} +1 -1
- package/dist/showcase/assets/{trash-2-DhUpICQq.js → trash-2-CtRtVsCy.js} +1 -1
- package/dist/showcase/assets/trending-up-2NQ-P8vB.js +1 -0
- package/dist/showcase/assets/{truck-D6SGLjv1.js → truck-Cl0nyN_j.js} +1 -1
- package/dist/showcase/assets/{typography-qEz6MMn9.js → typography-C7pCPhg7.js} +1 -1
- package/dist/showcase/assets/{ui-badge-BA334hdB.js → ui-badge-BvmuMzSq.js} +1 -1
- package/dist/showcase/assets/{ui-card-CjqUyGvB.js → ui-card-B7ziOMAn.js} +1 -1
- package/dist/showcase/assets/{ui-table-cDgI6WMk.js → ui-table-BEFHakBU.js} +1 -1
- package/dist/showcase/assets/{upload-tray-BcA-7pqW.js → upload-tray-CMKqTtEp.js} +1 -1
- package/dist/showcase/assets/{use-layout-link-DIUWH-oo.js → use-layout-link-nEU6ctSs.js} +1 -1
- package/dist/showcase/assets/{useAnchoredPopupScrollLock-BavpibMb.js → useAnchoredPopupScrollLock-B1xyKMh7.js} +1 -1
- package/dist/showcase/assets/{useAriaLabelledBy-HDEJjv0f.js → useAriaLabelledBy-BMlFgz-H.js} +1 -1
- package/dist/showcase/assets/{useCollapsiblePanel-CL0pCuxO.js → useCollapsiblePanel-BEzH6TC2.js} +1 -1
- package/dist/showcase/assets/{useCompositeItem-LkMSD9DW.js → useCompositeItem-CIuww7-p.js} +1 -1
- package/dist/showcase/assets/{useCompositeListItem-C_oLUvf8.js → useCompositeListItem-PrMTh4tz.js} +1 -1
- package/dist/showcase/assets/{useLabelableId-DDpjUdIO.js → useLabelableId-BBLkeLGr.js} +1 -1
- package/dist/showcase/assets/{useOpenInteractionType-DQOSh-Eu.js → useOpenInteractionType-CW0quo3l.js} +1 -1
- package/dist/showcase/assets/useRender-6NNMHJJU.js +1 -0
- package/dist/showcase/assets/{useTriggerFocusGuards-BPFrAxlp.js → useTriggerFocusGuards-DEza_iee.js} +1 -1
- package/dist/showcase/assets/{useValueChanged-lYlHqRM1.js → useValueChanged-BmWIb3SN.js} +1 -1
- package/dist/showcase/assets/user-BDIP5UPS.js +1 -0
- package/dist/showcase/assets/{user-plus-B1Pi7SNv.js → user-plus-BCqHFh2h.js} +1 -1
- package/dist/showcase/assets/{users-DAlxvktS.js → users-Bh7xGRX2.js} +1 -1
- package/dist/showcase/assets/{vendor-profile-ClJ6G6SO.js → vendor-profile-BlYcRbPI.js} +1 -1
- package/dist/showcase/assets/{video-DxooIkh-.js → video-BucshqNW.js} +1 -1
- package/dist/showcase/assets/{wrench-BiwmotMF.js → wrench-DQvhyTEb.js} +1 -1
- package/dist/showcase/assets/x-DyuS4YRT.js +1 -0
- package/dist/showcase/assets/{zap-a90eC6iO.js → zap-Dpn8_pnQ.js} +1 -1
- package/dist/showcase/index.html +2 -2
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/_shared/cards-BKFwMTjM.cjs +0 -2
- package/dist/_shared/cards-BKFwMTjM.cjs.map +0 -1
- package/dist/_shared/cards-CtBoSZG9.js.map +0 -1
- package/dist/_shared/overlays-CdtMAkKG.js.map +0 -1
- package/dist/_shared/overlays-Diy_H0Au.cjs +0 -2
- package/dist/_shared/overlays-Diy_H0Au.cjs.map +0 -1
- package/dist/_shared/table-CUA_A-oO.js.map +0 -1
- package/dist/_shared/table-mPchjiRn.cjs +0 -2
- package/dist/_shared/table-mPchjiRn.cjs.map +0 -1
- package/dist/showcase/assets/arrow-down-BttnoDxP.js +0 -1
- package/dist/showcase/assets/arrow-left-B1kFGJ8v.js +0 -1
- package/dist/showcase/assets/arrow-right-Md96ra7v.js +0 -1
- package/dist/showcase/assets/arrow-up-B9e9cP-q.js +0 -1
- package/dist/showcase/assets/arrow-up-right-BOHJNdrp.js +0 -1
- package/dist/showcase/assets/card-primitives-CiU5lL3a.js +0 -1
- package/dist/showcase/assets/checkbox-Qhh92dbS.js +0 -1
- package/dist/showcase/assets/chevron-down-BqrI6QzQ.js +0 -1
- package/dist/showcase/assets/chevron-left-TJKYH3rG.js +0 -1
- package/dist/showcase/assets/chevron-up-CPuAmh-d.js +0 -1
- package/dist/showcase/assets/chevrons-up-down-DZB44PVY.js +0 -1
- package/dist/showcase/assets/circle-CY0DkTje.js +0 -1
- package/dist/showcase/assets/circle-check-BkFKejsY.js +0 -1
- package/dist/showcase/assets/circle-check-big-vu3Znqdx.js +0 -1
- package/dist/showcase/assets/circle-dot-CsBIkbEH.js +0 -1
- package/dist/showcase/assets/clock-3-mhWDhdka.js +0 -1
- package/dist/showcase/assets/clock-Dd-urPd2.js +0 -1
- package/dist/showcase/assets/index-CCxHwV7T.css +0 -2
- package/dist/showcase/assets/inertValue-DrANZiJk.js +0 -1
- package/dist/showcase/assets/isSameDay-DVP1ae2V.js +0 -1
- package/dist/showcase/assets/isToday-CNAQB-p9.js +0 -1
- package/dist/showcase/assets/metadata-list-BhlsEWYT.js +0 -1
- package/dist/showcase/assets/minus-B1es6KJX.js +0 -1
- package/dist/showcase/assets/page-action-button-DMS8Vcmz.js +0 -1
- package/dist/showcase/assets/plus-BkhJjfUv.js +0 -1
- package/dist/showcase/assets/rotate-ccw-MwEZ1b11.js +0 -1
- package/dist/showcase/assets/startOfDay-BKFJecZ3.js +0 -1
- package/dist/showcase/assets/trending-up-Kfm5l65O.js +0 -1
- package/dist/showcase/assets/useRender-CnmFaF3Y.js +0 -1
- package/dist/showcase/assets/user-DLuRcjl0.js +0 -1
- package/dist/showcase/assets/x-idpnOHil.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "admin-ui-starter-kit",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.4",
|
|
4
4
|
"description": "Opinionated React component kit for admin panels and SaaS dashboards, built on top of shadcn/ui + Tailwind CSS v4. Callback-driven, framework-agnostic, i18n-ready.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=require("./chunk-CMqjfN_6.cjs"),t=require("../lib/strings.cjs"),n=require("./ui-provider-DZWtUXf2.cjs"),r=require("../lib/utils.cjs"),i=require("./button-Bd5bEIiB.cjs"),a=require("./tooltip-mvxZV_Lu.cjs"),o=require("./typography-CO9uwZhF.cjs"),s=require("./alert-V0V36Sny.cjs"),c=require("./dropdown-menu-CHQzQWUK.cjs");let l=require("react");l=e.t(l,1);let u=require("react/jsx-runtime"),d=require("lucide-react");function f({className:e,size:t=`default`,...n}){return(0,u.jsx)(`div`,{"data-slot":`card`,"data-size":t,className:r.cn(`ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-xl py-6 text-sm shadow-xs ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col`,e),...n})}function p({className:e,...t}){return(0,u.jsx)(`div`,{"data-slot":`card-header`,className:r.cn(`gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]`,e),...t})}function m({className:e,...t}){return(0,u.jsx)(`div`,{"data-slot":`card-title`,className:r.cn(`text-base leading-normal font-medium group-data-[size=sm]/card:text-sm`,e),...t})}function h({className:e,...t}){return(0,u.jsx)(`div`,{"data-slot":`card-description`,className:r.cn(`text-muted-foreground text-sm`,e),...t})}function g({className:e,...t}){return(0,u.jsx)(`div`,{"data-slot":`card-content`,className:r.cn(`px-6 group-data-[size=sm]/card:px-4`,e),...t})}function _({className:e,...t}){return(0,u.jsx)(`div`,{"data-slot":`card-footer`,className:r.cn(`rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4 flex items-center`,e),...t})}var v={root:`card--component`,header:`card--header`,title:`card--title`,description:`card--description`,content:`card--content`,footer:`card--footer`,alert:`card--alert`},y={small:{shell:`gap-space-lg py-surface-sm`,headerX:`px-surface-sm`,contentX:`px-surface-sm`,contentY:`py-0`,footerX:`px-surface-sm`,alertX:`px-surface-sm`,alertOffsetWithHeader:`-mt-1`,alertOffsetStandalone:`mt-0`},default:{shell:`gap-space-xl py-surface`,headerX:`px-surface`,contentX:`px-surface`,contentY:`py-0`,footerX:`px-surface`,alertX:`px-surface`,alertOffsetWithHeader:`-mt-1`,alertOffsetStandalone:`mt-0`}},b={card:`rounded-lg border border-border bg-card text-card-foreground shadow-xs`,flat:`bg-transparent text-card-foreground border-none shadow-none`,framed:r.cn(`rounded-lg border border-border bg-card text-card-foreground shadow-xs`,`ring-4 ring-border/25`)};function x(e){return e==null||typeof e==`boolean`?!1:typeof e==`string`?e.trim().length>0:typeof e==`number`||typeof e==`bigint`?!0:Array.isArray(e)?e.some(x):(0,l.isValidElement)(e)&&e.type===l.Fragment?x(e.props.children):!0}function S({className:e,...t}){return(0,u.jsx)(f,{className:r.cn(v.root,`flex w-full flex-col gap-3 py-4 ring-0`,e),...t})}function C({className:e,...t}){return(0,u.jsx)(p,{className:r.cn(v.header,`flex flex-col gap-1 px-4`,e),...t})}function w({className:e,children:t,...n}){return x(t)?typeof t==`string`||typeof t==`number`||typeof t==`bigint`?(0,u.jsx)(o.s,{"data-slot":`card-title`,tag:`div`,size:`base`,weight:`semibold`,lineHeight:`tight`,className:r.cn(v.title,`min-w-0 font-semibold`,e),...n,children:t}):(0,u.jsx)(m,{className:r.cn(v.title,`min-w-0 text-base leading-tight font-semibold`,e),...n,children:t}):null}function T({className:e,children:t,...n}){return x(t)?typeof t==`string`||typeof t==`number`||typeof t==`bigint`?(0,u.jsx)(o.s,{"data-slot":`card-description`,tag:`div`,type:`secondary`,className:r.cn(v.description,`text-muted-foreground text-sm`,e),...n,children:t}):(0,u.jsx)(h,{className:r.cn(v.description,`text-muted-foreground text-sm`,e),...n,children:t}):null}function E({className:e,...t}){return(0,u.jsx)(g,{className:r.cn(v.content,`px-4`,e),...t})}function D({className:e,...t}){return(0,u.jsx)(_,{className:r.cn(v.footer,`flex items-center px-4`,e),...t})}function O({alert:e,alertVariant:t,hasHeader:n,padding:i}){let a=y[i];return(0,u.jsx)(`div`,{className:r.cn(v.alert,a.alertX,n?a.alertOffsetWithHeader:a.alertOffsetStandalone),children:(0,u.jsx)(s.t,{variant:t,children:(0,u.jsx)(s.r,{children:e})})})}function k({actions:e,actionsLabel:t}){return(0,u.jsxs)(c.t,{children:[(0,u.jsx)(c.g,{type:`button`,"aria-label":t,className:r.cn(`inline-flex size-7 shrink-0 items-center justify-center rounded-md p-0`,`text-muted-foreground hover:bg-accent hover:text-accent-foreground`,`outline-none focus-visible:ring-2 focus-visible:ring-ring/50`,`transition-colors`),children:(0,u.jsx)(d.MoreHorizontal,{className:`size-4`})}),(0,u.jsx)(c.r,{align:`end`,className:`min-w-36`,children:e.map((e,t)=>(0,u.jsxs)(c.a,{onClick:e.onClick,disabled:e.disabled,className:`gap-space-lg px-row-x py-row-y text-xs`,children:[!!e.icon&&(0,u.jsx)(`span`,{className:`flex shrink-0 items-center`,children:e.icon}),e.label]},e.id??`${e.label}-${t}`))})]})}function A({tooltipLabel:e}){return(0,u.jsx)(a.i,{render:t=>{let n=t;return(0,u.jsx)(i.t,{...n,type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,className:r.cn(`h-5 w-5 text-muted-foreground`,n.className),"aria-label":e,children:(0,u.jsx)(d.Info,{className:`size-3.5`})})}})}function j({icon:e,title:t,titleSuffix:n,description:i,tooltip:o,tooltipLabel:s,headerStart:c,headerEnd:l,headerAction:d,actions:f,actionsLabel:p,padding:m,className:h}){let g=Array.isArray(f)?f:[],_=g.length>0,v=x(e),b=x(t),S=x(n),E=x(i),D=x(o),O=x(c),j=x(l),M=x(d),N=v||b||S||D,P=j||M||_;return(0,u.jsxs)(C,{className:r.cn(`flex-row items-start justify-between gap-3 pb-0`,y[m].headerX,h),children:[(0,u.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-1`,children:[!!O&&c,!!N&&(0,u.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1`,children:[!!v&&(0,u.jsx)(`span`,{className:`flex shrink-0 items-center text-muted-foreground`,children:e}),(0,u.jsx)(w,{children:t}),!!S&&(0,u.jsx)(`div`,{className:`flex items-center gap-2`,children:n}),!!D&&(0,u.jsxs)(a.t,{children:[(0,u.jsx)(A,{tooltipLabel:s}),(0,u.jsx)(a.n,{children:o})]})]}),!!E&&(0,u.jsx)(T,{className:`text-left`,children:i})]}),!!P&&(0,u.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[!!j&&l,!!M&&d,!!_&&(0,u.jsx)(k,{actions:g,actionsLabel:p})]})]})}var M={expandLabel:`Expand card`,collapseLabel:`Collapse card`};function N({title:e,lines:t=2,className:n}){let i=({barClassName:e})=>(0,u.jsx)(`div`,{className:r.cn(`animate-pulse rounded bg-muted`,e)});return(0,u.jsxs)(S,{className:r.cn(b.card,`gap-4 py-6`,n),children:[(0,u.jsx)(C,{className:`flex-col gap-1.5 px-6 pb-0`,children:e?(0,u.jsx)(w,{children:e}):(0,u.jsx)(i,{barClassName:`h-4 w-32`})}),(0,u.jsx)(E,{className:`space-y-3 px-6 py-0`,children:Array.from({length:t},(e,t)=>(0,u.jsx)(i,{barClassName:r.cn(`h-4`,t===0?`w-full`:`w-3/4`)},`skel-${String(t)}`))})]})}N.displayName=`SmartCardSkeleton`;function P(e){return e===`small`||e==="default"?e:e===`sm`?`small`:`default`}var F=(0,l.forwardRef)(function({icon:e,title:a,titleSuffix:o,description:s,tooltip:c,tooltipAriaLabel:f=`Card info`,footerText:p,alert:m,alertVariant:h=`default`,surface:g,transparent:_=!1,padding:v,actions:C,actionsLabel:w=`Card actions`,headerAction:T,headerStart:k,headerEnd:A,contentTop:N,contentBottom:F,footerSlot:I,headerDivider:ee=!1,footerDivider:L=!1,expandable:R=!1,defaultExpanded:te=!1,expanded:z,onExpandedChange:B,children:ne,className:V,headerClassName:re,contentClassName:ie,footerClassName:H,strings:ae},oe){let{defaultPadding:se}=n.n(),U=P(v??se),W=y[U],G=Array.isArray(C)?C:[],K=t.useStrings(M,ae),q=R!==!1&&R!==void 0,J=typeof R==`object`&&R?.collapsedMaxHeight!==void 0?R.collapsedMaxHeight:`12rem`,ce=typeof J==`number`?`${J}px`:J,Y=z!==void 0,[le,ue]=(0,l.useState)(te),X=Y?z:le,de=(0,l.useCallback)(()=>{let e=!X;Y||ue(e),B?.(e)},[X,Y,B]),Z=x(e)||x(a)||x(s)||G.length>0||x(T)||x(k)||x(A),fe=x(m),pe=x(p),me=x(I),he=x(N),ge=x(F),_e=f.trim().length>0?f:`Card info`,Q=q?{maxHeight:X?``:ce}:void 0,$=g??(_?`flat`:`card`);return(0,u.jsxs)(S,{ref:oe,"data-surface":$,className:r.cn(b[$],W.shell,q&&`relative pb-1 !overflow-visible`,V),children:[!!Z&&(0,u.jsx)(j,{icon:e,title:a,titleSuffix:o,description:s,tooltip:c,tooltipLabel:_e,headerStart:k,headerEnd:A,headerAction:T,actions:G,actionsLabel:w,padding:U,className:r.cn(ee&&`pb-3 border-b border-border/60`,re)}),!!fe&&(0,u.jsx)(O,{alert:m,alertVariant:h,hasHeader:Z,padding:U}),(0,u.jsxs)(E,{className:r.cn(W.contentX,W.contentY,q&&`relative overflow-hidden transition-[max-height] duration-500 ease-in-out`,ie),style:Q,children:[!!he&&N,ne,!!ge&&F,!!q&&!X&&(0,u.jsx)(`div`,{"aria-hidden":`true`,className:`from-background pointer-events-none absolute inset-x-0 bottom-0 h-20 rounded-b-lg bg-linear-to-t to-transparent`})]}),!!pe&&(0,u.jsx)(D,{className:r.cn(`justify-end text-xs text-muted-foreground`,W.footerX,L&&`pt-3 border-t border-border/60`,H),children:p}),!!me&&(0,u.jsx)(D,{className:r.cn(`flex-col items-stretch`,W.footerX,L&&`pt-3 border-t border-border/60`,H),children:I}),!!q&&(0,u.jsx)(`div`,{className:`absolute -bottom-4 left-1/2 -translate-x-1/2 z-10`,children:(0,u.jsxs)(i.t,{type:`button`,variant:`secondary`,buttonStyle:`outline`,size:`icon-small`,onClick:de,"aria-expanded":X,"aria-label":X?K.collapseLabel:K.expandLabel,className:r.cn(`inline-flex size-8 items-center justify-center rounded-full`,`border border-border bg-background text-foreground shadow-sm`,`hover:bg-muted/40 transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50`),children:[(0,u.jsx)(d.ChevronDown,{"aria-hidden":`true`,className:r.cn(`size-4 transition-transform duration-300`,X&&`rotate-180`)}),(0,u.jsx)(`span`,{className:`sr-only`,children:X?K.collapseLabel:K.expandLabel})]})})]})});F.displayName=`SmartCard`,Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return F}});
|
|
2
|
-
//# sourceMappingURL=cards-BKFwMTjM.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cards-BKFwMTjM.cjs","names":[],"sources":["../../src/components/ui/card.tsx","../../src/components/base/cards/smart-card.tokens.ts","../../src/components/base/cards/partials/has-renderable-content.ts","../../src/components/base/cards/partials/card-primitives.tsx","../../src/components/base/cards/partials/smart-card-alert.tsx","../../src/components/base/cards/partials/smart-card-actions-menu.tsx","../../src/components/base/cards/partials/smart-card-header-row.tsx","../../src/components/base/cards/smart-card.strings.ts","../../src/components/base/cards/partials/smart-card-skeleton.tsx","../../src/components/base/cards/smart-card.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\"ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-xl py-6 text-sm shadow-xs ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-base leading-normal font-medium group-data-[size=sm]/card:text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6 group-data-[size=sm]/card:px-4\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4 flex items-center\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import { cn } from '@/lib/utils';\n\nimport type { CardPadding, SmartCardSurface } from './smart-card.types';\n\n/**\n * BEM-style hooks applied to every SmartCard subregion. Library\n * consumers can target them in CSS / tests / analytics without\n * relying on shadcn's data-slot attributes (which are framework\n * internals). Keep these names consistent — they are part of the\n * public DOM contract.\n */\nexport const CARD_BEM = {\n\troot: 'card--component',\n\theader: 'card--header',\n\ttitle: 'card--title',\n\tdescription: 'card--description',\n\tcontent: 'card--content',\n\tfooter: 'card--footer',\n\talert: 'card--alert',\n} as const;\n\ninterface PaddingTokens {\n\tshell: string;\n\theaderX: string;\n\tcontentX: string;\n\tcontentY: string;\n\tfooterX: string;\n\talertX: string;\n\t/** Vertical offset applied when alert sits BELOW the header (pulls it up). */\n\talertOffsetWithHeader: string;\n\t/** Vertical spacing applied when alert is the first content (no header). */\n\talertOffsetStandalone: string;\n}\n\nexport const PADDING: Record<CardPadding, PaddingTokens> = {\n\tsmall: {\n\t\tshell: 'gap-space-lg py-surface-sm',\n\t\theaderX: 'px-surface-sm',\n\t\tcontentX: 'px-surface-sm',\n\t\tcontentY: 'py-0',\n\t\tfooterX: 'px-surface-sm',\n\t\talertX: 'px-surface-sm',\n\t\talertOffsetWithHeader: '-mt-1',\n\t\talertOffsetStandalone: 'mt-0',\n\t},\n\tdefault: {\n\t\tshell: 'gap-space-xl py-surface',\n\t\theaderX: 'px-surface',\n\t\tcontentX: 'px-surface',\n\t\tcontentY: 'py-0',\n\t\tfooterX: 'px-surface',\n\t\talertX: 'px-surface',\n\t\talertOffsetWithHeader: '-mt-1',\n\t\talertOffsetStandalone: 'mt-0',\n\t},\n};\n\n/**\n * Surface-specific shell classes. The `framed` variant provides one clean\n * card surface with a soft tokenized ring, not nested borders that compete\n * with the example chrome.\n */\nexport const SURFACE_CLASSES: Record<SmartCardSurface, string> = {\n\tcard: 'rounded-lg border border-border bg-card text-card-foreground shadow-xs',\n\tflat: 'bg-transparent text-card-foreground border-none shadow-none',\n\tframed: cn(\n\t\t'rounded-lg border border-border bg-card text-card-foreground shadow-xs',\n\t\t'ring-4 ring-border/25',\n\t),\n};\n","import { Fragment, isValidElement, type ReactNode } from 'react';\n\n/**\n * Predicate used by SmartCard subregions to decide whether each slot\n * warrants rendering its wrapper. Numbers (incl. `0`) and JSX always\n * render; falsy / empty-string content is treated as absent. Fragments\n * recurse into their children.\n */\nexport function hasRenderableContent(content?: ReactNode): boolean {\n\tif (content === null || content === undefined) return false;\n\tif (typeof content === 'boolean') return false;\n\tif (typeof content === 'string') return content.trim().length > 0;\n\tif (typeof content === 'number' || typeof content === 'bigint') return true;\n\tif (Array.isArray(content)) return content.some(hasRenderableContent);\n\tif (isValidElement<{ children?: ReactNode }>(content)) {\n\t\tif (content.type === Fragment) return hasRenderableContent(content.props.children);\n\t\treturn true;\n\t}\n\treturn true;\n}\n","/**\n * Internal layout primitives — re-exported from `smart-card.tsx` for\n * advanced composition (deeply customised layouts that still want the\n * design-system surface tokens). Each primitive is intentionally thin:\n * a single responsibility, a single set of default classes, no business\n * logic. The BEM hooks (`card--component`, `card--header`, etc.) are\n * applied here so the public DOM contract lives in one place.\n */\nimport {\n\ttype ComponentPropsWithRef,\n\ttype ComponentPropsWithoutRef,\n} from 'react';\n\nimport {\n\tCard as CardPrimitive,\n\tCardContent as CardContentPrimitive,\n\tCardDescription as CardDescriptionPrimitive,\n\tCardFooter as CardFooterPrimitive,\n\tCardHeader as CardHeaderPrimitive,\n\tCardTitle as CardTitlePrimitive,\n} from '@/components/ui/card';\nimport Text from '@/components/typography/text';\nimport { cn } from '@/lib/utils';\n\nimport { CARD_BEM } from '../smart-card.tokens';\n\nimport { hasRenderableContent } from './has-renderable-content';\n\nexport function CardShell({ className, ...props }: ComponentPropsWithRef<'div'>) {\n\treturn (\n\t\t<CardPrimitive\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.root,\n\t\t\t\t'flex w-full flex-col gap-3 py-4 ring-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardHeader({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardHeaderPrimitive\n\t\t\tclassName={cn(CARD_BEM.header, 'flex flex-col gap-1 px-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardTitle({\n\tclassName,\n\tchildren,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\tif (!hasRenderableContent(children)) return null;\n\n\tconst isPlainText =\n\t\ttypeof children === 'string' ||\n\t\ttypeof children === 'number' ||\n\t\ttypeof children === 'bigint';\n\n\tif (!isPlainText) {\n\t\treturn (\n\t\t\t<CardTitlePrimitive\n\t\t\t\tclassName={cn(CARD_BEM.title, 'min-w-0 text-base leading-tight font-semibold', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</CardTitlePrimitive>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tdata-slot=\"card-title\"\n\t\t\ttag=\"div\"\n\t\t\tsize=\"base\"\n\t\t\tweight=\"semibold\"\n\t\t\tlineHeight=\"tight\"\n\t\t\tclassName={cn(CARD_BEM.title, 'min-w-0 font-semibold', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nexport function CardDescription({\n\tclassName,\n\tchildren,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\tif (!hasRenderableContent(children)) return null;\n\n\tconst isPlainText =\n\t\ttypeof children === 'string' ||\n\t\ttypeof children === 'number' ||\n\t\ttypeof children === 'bigint';\n\n\tif (!isPlainText) {\n\t\treturn (\n\t\t\t<CardDescriptionPrimitive\n\t\t\t\tclassName={cn(\n\t\t\t\t\tCARD_BEM.description,\n\t\t\t\t\t'text-muted-foreground text-sm',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</CardDescriptionPrimitive>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tdata-slot=\"card-description\"\n\t\t\ttag=\"div\"\n\t\t\ttype=\"secondary\"\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.description,\n\t\t\t\t'text-muted-foreground text-sm',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nexport function CardContent({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardContentPrimitive\n\t\t\tclassName={cn(CARD_BEM.content, 'px-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardFooter({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardFooterPrimitive\n\t\t\tclassName={cn(CARD_BEM.footer, 'flex items-center px-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","/**\n * Inline alert banner rendered between the header and the card body.\n * Pulls itself up under the header (`alertOffsetWithHeader`) when one\n * exists so the visual gap between header bottom and alert top stays\n * tight; otherwise pushes itself down (`alertOffsetStandalone`) so it\n * doesn't kiss the card top edge.\n */\nimport type { ReactNode } from 'react';\n\nimport { Alert, AlertDescription } from '@/components/base/display/alert';\nimport { cn } from '@/lib/utils';\n\nimport { CARD_BEM, PADDING } from '../smart-card.tokens';\nimport type { CardAlertVariant, CardPadding } from '../smart-card.types';\n\ninterface AlertSlotProps {\n\talert: ReactNode | string;\n\talertVariant: CardAlertVariant;\n\thasHeader: boolean;\n\tpadding: CardPadding;\n}\n\nexport function SmartCardAlert({\n\talert,\n\talertVariant,\n\thasHeader,\n\tpadding,\n}: AlertSlotProps) {\n\tconst tokens = PADDING[padding];\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.alert,\n\t\t\t\ttokens.alertX,\n\t\t\t\thasHeader ? tokens.alertOffsetWithHeader : tokens.alertOffsetStandalone,\n\t\t\t)}\n\t\t>\n\t\t\t<Alert variant={alertVariant}>\n\t\t\t\t<AlertDescription>{alert}</AlertDescription>\n\t\t\t</Alert>\n\t\t</div>\n\t);\n}\n","/**\n * SmartCard actions menu — `⋮` trigger + dropdown of consumer-supplied\n * `SmartCardAction` items. Always renders a 28×28 square trigger so it\n * reads cleanly as a circle (consumer overrides to `rounded-full`) or\n * a rectangle (default `rounded-md`).\n */\nimport { MoreHorizontal } from 'lucide-react';\n\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { cn } from '@/lib/utils';\n\nimport type { SmartCardAction } from '../smart-card.types';\n\ninterface ActionsMenuProps {\n\tactions: SmartCardAction[];\n\tactionsLabel: string;\n}\n\nexport function ActionsMenu({ actions, actionsLabel }: ActionsMenuProps) {\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label={actionsLabel}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'inline-flex size-7 shrink-0 items-center justify-center rounded-md p-0',\n\t\t\t\t\t'text-muted-foreground hover:bg-accent hover:text-accent-foreground',\n\t\t\t\t\t'outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\t'transition-colors',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<MoreHorizontal className=\"size-4\" />\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent align=\"end\" className=\"min-w-36\">\n\t\t\t\t{actions.map((action, index) => (\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tkey={action.id ?? `${action.label}-${index}`}\n\t\t\t\t\t\tonClick={action.onClick}\n\t\t\t\t\t\tdisabled={action.disabled}\n\t\t\t\t\t\tclassName=\"gap-space-lg px-row-x py-row-y text-xs\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!action.icon && (\n\t\t\t\t\t\t\t<span className=\"flex shrink-0 items-center\">{action.icon}</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{action.label}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t))}\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n","/**\n * SmartCardHeaderRow — the chrome above the card body. Combines icon /\n * title / description / tooltip / suffix on the leading side with the\n * trailing `headerEnd` / `headerAction` slots and the actions menu.\n *\n * `TooltipTrigger_Info` is colocated here because it's only used by the\n * header — keeping it private avoids polluting the public partial\n * surface.\n */\nimport { Info } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from '@/components/base/display/tooltip';\nimport { cn } from '@/lib/utils';\n\nimport { PADDING } from '../smart-card.tokens';\nimport type { CardPadding, SmartCardAction } from '../smart-card.types';\n\nimport { CardHeader, CardTitle, CardDescription } from './card-primitives';\nimport { hasRenderableContent } from './has-renderable-content';\nimport { ActionsMenu } from './smart-card-actions-menu';\n\nfunction TooltipTrigger_Info({ tooltipLabel }: { tooltipLabel: string }) {\n\treturn (\n\t\t<TooltipTrigger\n\t\t\trender={(triggerProps) => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tconst passthrough = triggerProps as Record<string, any>;\n\t\t\t\treturn (\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...passthrough}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'h-5 w-5 text-muted-foreground',\n\t\t\t\t\t\t\tpassthrough.className,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-label={tooltipLabel}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Info className=\"size-3.5\" />\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n\ninterface HeaderProps {\n\ticon?: ReactNode;\n\ttitle?: ReactNode;\n\ttitleSuffix?: ReactNode;\n\tdescription?: ReactNode;\n\ttooltip?: ReactNode;\n\ttooltipLabel: string;\n\theaderStart?: ReactNode;\n\theaderEnd?: ReactNode;\n\theaderAction?: ReactNode;\n\tactions?: SmartCardAction[];\n\tactionsLabel: string;\n\tpadding: CardPadding;\n\tclassName?: string;\n}\n\nexport function SmartCardHeaderRow({\n\ticon,\n\ttitle,\n\ttitleSuffix,\n\tdescription,\n\ttooltip,\n\ttooltipLabel,\n\theaderStart,\n\theaderEnd,\n\theaderAction,\n\tactions,\n\tactionsLabel,\n\tpadding,\n\tclassName,\n}: HeaderProps) {\n\tconst cardActions = Array.isArray(actions) ? actions : [];\n\tconst hasActions = cardActions.length > 0;\n\n\tconst hasIcon = hasRenderableContent(icon);\n\tconst hasTitle = hasRenderableContent(title);\n\tconst hasTitleSuffix = hasRenderableContent(titleSuffix);\n\tconst hasDescription = hasRenderableContent(description);\n\tconst hasTooltip = hasRenderableContent(tooltip);\n\tconst hasHeaderStart = hasRenderableContent(headerStart);\n\tconst hasHeaderEnd = hasRenderableContent(headerEnd);\n\tconst hasHeaderAction = hasRenderableContent(headerAction);\n\n\tconst showTitleRow = hasIcon || hasTitle || hasTitleSuffix || hasTooltip;\n\tconst showTrailing = hasHeaderEnd || hasHeaderAction || hasActions;\n\n\treturn (\n\t\t<CardHeader\n\t\t\tclassName={cn(\n\t\t\t\t'flex-row items-start justify-between gap-3 pb-0',\n\t\t\t\tPADDING[padding].headerX,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n\t\t\t\t{!!hasHeaderStart && headerStart}\n\n\t\t\t\t{!!showTitleRow && (\n\t\t\t\t\t<div className=\"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1\">\n\t\t\t\t\t\t{!!hasIcon && (\n\t\t\t\t\t\t\t<span className=\"flex shrink-0 items-center text-muted-foreground\">\n\t\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<CardTitle>{title}</CardTitle>\n\t\t\t\t\t\t{!!hasTitleSuffix && (\n\t\t\t\t\t\t\t<div className=\"flex items-center gap-2\">{titleSuffix}</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!hasTooltip && (\n\t\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t\t<TooltipTrigger_Info tooltipLabel={tooltipLabel} />\n\t\t\t\t\t\t\t\t<TooltipContent>{tooltip}</TooltipContent>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasDescription && (\n\t\t\t\t\t<CardDescription className=\"text-left\">{description}</CardDescription>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{!!showTrailing && (\n\t\t\t\t<div className=\"flex shrink-0 items-center gap-2\">\n\t\t\t\t\t{!!hasHeaderEnd && headerEnd}\n\t\t\t\t\t{!!hasHeaderAction && headerAction}\n\t\t\t\t\t{!!hasActions && (\n\t\t\t\t\t\t<ActionsMenu actions={cardActions} actionsLabel={actionsLabel} />\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</CardHeader>\n\t);\n}\n","/**\n * SmartCard strings — i18n surface for the chrome the consumer doesn't\n * pass directly. Most copy (title, description, action labels, alert\n * body) flows in via props; the strings here cover the implicit\n * affordances (expand toggle).\n */\n\nexport interface SmartCardStrings {\n\texpandLabel: string;\n\tcollapseLabel: string;\n}\n\nexport const defaultSmartCardStrings: SmartCardStrings = {\n\texpandLabel: 'Expand card',\n\tcollapseLabel: 'Collapse card',\n};\n","/**\n * SmartCardSkeleton — placeholder shell rendered while a SmartCard's\n * data is loading. Picks up the canonical card surface so the loading\n * state visually matches the eventual `SmartCard` it'll replace.\n */\nimport type { ReactNode } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport { SURFACE_CLASSES } from '../smart-card.tokens';\n\nimport {\n\tCardContent,\n\tCardHeader,\n\tCardShell,\n\tCardTitle,\n} from './card-primitives';\n\nexport interface SmartCardSkeletonProps {\n\ttitle?: ReactNode;\n\tlines?: number;\n\tclassName?: string;\n}\n\nexport function SmartCardSkeleton({\n\ttitle,\n\tlines = 2,\n\tclassName,\n}: SmartCardSkeletonProps) {\n\tconst SkeletonBar = ({ barClassName }: { barClassName?: string }) => (\n\t\t<div className={cn('animate-pulse rounded bg-muted', barClassName)} />\n\t);\n\n\treturn (\n\t\t<CardShell className={cn(SURFACE_CLASSES.card, 'gap-4 py-6', className)}>\n\t\t\t<CardHeader className=\"flex-col gap-1.5 px-6 pb-0\">\n\t\t\t\t{title ? <CardTitle>{title}</CardTitle> : <SkeletonBar barClassName=\"h-4 w-32\" />}\n\t\t\t</CardHeader>\n\t\t\t<CardContent className=\"space-y-3 px-6 py-0\">\n\t\t\t\t{Array.from({ length: lines }, (_, i) => (\n\t\t\t\t\t<SkeletonBar\n\t\t\t\t\t\tkey={`skel-${String(i)}`}\n\t\t\t\t\t\tbarClassName={cn('h-4', i === 0 ? 'w-full' : 'w-3/4')}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</CardContent>\n\t\t</CardShell>\n\t);\n}\n\nSmartCardSkeleton.displayName = 'SmartCardSkeleton';\n","/**\n * SmartCard — composed card with header (icon, title, suffix, description,\n * tooltip), actions menu, alert banner, header / content / footer slots,\n * surface variants (card / flat / framed), and an opt-in expandable body.\n *\n * The single card primitive everything else builds on — never reach past it\n * to shadcn `Card` directly. The CardShell / CardHeader / CardTitle /\n * CardDescription / CardContent / CardFooter primitives are re-exported\n * for advanced composition (deeply customised layouts that still want the\n * design-system surface tokens). Each subregion paints a BEM-style hook\n * (`card--component`, `card--header`, `card--title`, …) for CSS / test /\n * analytics targeting independent of shadcn's data-slot internals.\n *\n * The file is a thin orchestrator. The actual chrome lives in:\n * - `./smart-card.types.ts` — public prop / variant types\n * - `./smart-card.strings.ts` — i18n (expand toggle copy)\n * - `./smart-card.tokens.ts` — PADDING + SURFACE_CLASSES + CARD_BEM\n * - `./partials/card-primitives.tsx` — CardShell + CardHeader / Title /\n * Description / Content / Footer\n * - `./partials/smart-card-header-row.tsx` — header layout + actions menu\n * - `./partials/smart-card-alert.tsx` — inline alert banner\n * - `./partials/smart-card-actions-menu.tsx` — `⋮` dropdown\n * - `./partials/smart-card-skeleton.tsx` — loading placeholder\n * - `./partials/has-renderable-content.ts` — slot-empty predicate\n */\nimport { ChevronDown } from 'lucide-react';\nimport {\n\ttype CSSProperties,\n\tforwardRef,\n\tuseCallback,\n\tuseState,\n} from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport { useStrings } from '@/lib/strings';\nimport { useCardConfig } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tCardContent,\n\tCardFooter,\n\tCardShell,\n} from './partials/card-primitives';\nimport { hasRenderableContent } from './partials/has-renderable-content';\nimport { SmartCardAlert } from './partials/smart-card-alert';\nimport { SmartCardHeaderRow } from './partials/smart-card-header-row';\nimport {\n\tdefaultSmartCardStrings,\n} from './smart-card.strings';\nimport {\n\tPADDING,\n\tSURFACE_CLASSES,\n} from './smart-card.tokens';\nimport type {\n\tCardPadding,\n\tSmartCardProps,\n\tSmartCardSurface,\n} from './smart-card.types';\n\nfunction normalizeCardPadding(padding: CardPadding | string | undefined): CardPadding {\n\tif (padding === 'small' || padding === 'default') return padding;\n\tif (padding === 'sm') return 'small';\n\tif (padding === 'base' || padding === 'lg') return 'default';\n\treturn 'default';\n}\n\nexport const SmartCard = forwardRef<HTMLDivElement, SmartCardProps>(function SmartCard({\n\ticon,\n\ttitle,\n\ttitleSuffix,\n\tdescription,\n\ttooltip,\n\ttooltipAriaLabel = 'Card info',\n\tfooterText,\n\talert,\n\talertVariant = 'default',\n\tsurface,\n\ttransparent = false,\n\tpadding,\n\tactions,\n\tactionsLabel = 'Card actions',\n\theaderAction,\n\theaderStart,\n\theaderEnd,\n\tcontentTop,\n\tcontentBottom,\n\tfooterSlot,\n\theaderDivider = false,\n\tfooterDivider = false,\n\texpandable = false,\n\tdefaultExpanded = false,\n\texpanded: expandedProp,\n\tonExpandedChange,\n\tchildren,\n\tclassName,\n\theaderClassName,\n\tcontentClassName,\n\tfooterClassName,\n\tstrings: stringsProp,\n}, ref) {\n\tconst { defaultPadding } = useCardConfig();\n\tconst resolvedPadding = normalizeCardPadding(padding ?? defaultPadding);\n\tconst tokens = PADDING[resolvedPadding];\n\tconst cardActions = Array.isArray(actions) ? actions : [];\n\tconst strings = useStrings(defaultSmartCardStrings, stringsProp);\n\n\tconst isExpandable = expandable !== false && expandable !== undefined;\n\tconst collapsedMaxHeightRaw =\n\t\ttypeof expandable === 'object' && expandable?.collapsedMaxHeight !== undefined\n\t\t\t? expandable.collapsedMaxHeight\n\t\t\t: '12rem';\n\tconst collapsedMaxHeight =\n\t\ttypeof collapsedMaxHeightRaw === 'number'\n\t\t\t? `${collapsedMaxHeightRaw}px`\n\t\t\t: collapsedMaxHeightRaw;\n\n\tconst isExpandedControlled = expandedProp !== undefined;\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = isExpandedControlled ? expandedProp : internalExpanded;\n\tconst handleToggle = useCallback(() => {\n\t\tconst next = !expanded;\n\t\tif (!isExpandedControlled) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t}, [expanded, isExpandedControlled, onExpandedChange]);\n\n\tconst hasHeader =\n\t\thasRenderableContent(icon) ||\n\t\thasRenderableContent(title) ||\n\t\thasRenderableContent(description) ||\n\t\tcardActions.length > 0 ||\n\t\thasRenderableContent(headerAction) ||\n\t\thasRenderableContent(headerStart) ||\n\t\thasRenderableContent(headerEnd);\n\n\tconst hasAlert = hasRenderableContent(alert);\n\tconst hasFooterText = hasRenderableContent(footerText);\n\tconst hasFooterSlot = hasRenderableContent(footerSlot);\n\tconst hasContentTop = hasRenderableContent(contentTop);\n\tconst hasContentBottom = hasRenderableContent(contentBottom);\n\n\tconst tooltipLabel =\n\t\ttooltipAriaLabel.trim().length > 0 ? tooltipAriaLabel : 'Card info';\n\n\tconst collapseStyle: CSSProperties | undefined = isExpandable\n\t\t? {\n\t\t\t\tmaxHeight: expanded ? '' : collapsedMaxHeight,\n\t\t\t}\n\t\t: undefined;\n\n\t// Resolve surface — explicit `surface` wins, else legacy `transparent`,\n\t// else the default `'card'` chrome.\n\tconst resolvedSurface: SmartCardSurface = surface ?? (transparent ? 'flat' : 'card');\n\n\treturn (\n\t\t<CardShell\n\t\t\tref={ref}\n\t\t\tdata-surface={resolvedSurface}\n\t\t\tclassName={cn(\n\t\t\t\tSURFACE_CLASSES[resolvedSurface],\n\t\t\t\ttokens.shell,\n\t\t\t\t// `isExpandable` parks the chevron at `-bottom-4` outside the\n\t\t\t\t// shell — `overflow-visible` lets it render past the card\n\t\t\t\t// edge, otherwise the shadcn primitive's `overflow-hidden`\n\t\t\t\t// clips it.\n\t\t\t\tisExpandable && 'relative pb-1 !overflow-visible',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!!hasHeader && (\n\t\t\t\t<SmartCardHeaderRow\n\t\t\t\t\ticon={icon}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\ttitleSuffix={titleSuffix}\n\t\t\t\t\tdescription={description}\n\t\t\t\t\ttooltip={tooltip}\n\t\t\t\t\ttooltipLabel={tooltipLabel}\n\t\t\t\t\theaderStart={headerStart}\n\t\t\t\t\theaderEnd={headerEnd}\n\t\t\t\t\theaderAction={headerAction}\n\t\t\t\t\tactions={cardActions}\n\t\t\t\t\tactionsLabel={actionsLabel}\n\t\t\t\t\tpadding={resolvedPadding}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\theaderDivider && 'pb-3 border-b border-border/60',\n\t\t\t\t\t\theaderClassName,\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{!!hasAlert && (\n\t\t\t\t<SmartCardAlert\n\t\t\t\t\talert={alert}\n\t\t\t\t\talertVariant={alertVariant}\n\t\t\t\t\thasHeader={hasHeader}\n\t\t\t\t\tpadding={resolvedPadding}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<CardContent\n\t\t\t\tclassName={cn(\n\t\t\t\t\ttokens.contentX,\n\t\t\t\t\ttokens.contentY,\n\t\t\t\t\tisExpandable &&\n\t\t\t\t\t\t'relative overflow-hidden transition-[max-height] duration-500 ease-in-out',\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t\tstyle={collapseStyle}\n\t\t\t>\n\t\t\t\t{!!hasContentTop && contentTop}\n\t\t\t\t{children}\n\t\t\t\t{!!hasContentBottom && contentBottom}\n\n\t\t\t\t{!!isExpandable && !expanded && (\n\t\t\t\t\t<div\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName=\"from-background pointer-events-none absolute inset-x-0 bottom-0 h-20 rounded-b-lg bg-linear-to-t to-transparent\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</CardContent>\n\n\t\t\t{!!hasFooterText && (\n\t\t\t\t<CardFooter\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'justify-end text-xs text-muted-foreground',\n\t\t\t\t\t\ttokens.footerX,\n\t\t\t\t\t\tfooterDivider && 'pt-3 border-t border-border/60',\n\t\t\t\t\t\tfooterClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{footerText}\n\t\t\t\t</CardFooter>\n\t\t\t)}\n\n\t\t\t{!!hasFooterSlot && (\n\t\t\t\t<CardFooter\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'flex-col items-stretch',\n\t\t\t\t\t\ttokens.footerX,\n\t\t\t\t\t\tfooterDivider && 'pt-3 border-t border-border/60',\n\t\t\t\t\t\tfooterClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{footerSlot}\n\t\t\t\t</CardFooter>\n\t\t\t)}\n\n\t\t\t{!!isExpandable && (\n\t\t\t\t<div className=\"absolute -bottom-4 left-1/2 -translate-x-1/2 z-10\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\t\taria-label={expanded ? strings.collapseLabel : strings.expandLabel}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'inline-flex size-8 items-center justify-center rounded-full',\n\t\t\t\t\t\t\t'border border-border bg-background text-foreground shadow-sm',\n\t\t\t\t\t\t\t'hover:bg-muted/40 transition-colors',\n\t\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'size-4 transition-transform duration-300',\n\t\t\t\t\t\t\t\texpanded && 'rotate-180',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span className=\"sr-only\">\n\t\t\t\t\t\t\t{expanded ? strings.collapseLabel : strings.expandLabel}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</CardShell>\n\t);\n});\n\nSmartCard.displayName = 'SmartCard';\n\n// ──────────────────────────────────────────────────────────────────────────\n// Re-exports — public surface lives here so `import { ... } from\n// '@/components/base/cards'` keeps working through the file split.\n// ──────────────────────────────────────────────────────────────────────────\n\nexport {\n\tdefaultSmartCardStrings,\n\ttype SmartCardStrings,\n} from './smart-card.strings';\nexport type {\n\tCardAlertVariant,\n\tCardPadding,\n\tSmartCardAction,\n\tSmartCardProps,\n\tSmartCardSkeletonProps,\n\tSmartCardSurface,\n} from './smart-card.types';\nexport {\n\tCardContent,\n\tCardDescription,\n\tCardFooter,\n\tCardHeader,\n\tCardShell,\n\tCardTitle,\n} from './partials/card-primitives';\nexport { SmartCardSkeleton } from './partials/smart-card-skeleton';\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cards-CtBoSZG9.js","names":[],"sources":["../../src/components/ui/card.tsx","../../src/components/base/cards/smart-card.tokens.ts","../../src/components/base/cards/partials/has-renderable-content.ts","../../src/components/base/cards/partials/card-primitives.tsx","../../src/components/base/cards/partials/smart-card-alert.tsx","../../src/components/base/cards/partials/smart-card-actions-menu.tsx","../../src/components/base/cards/partials/smart-card-header-row.tsx","../../src/components/base/cards/smart-card.strings.ts","../../src/components/base/cards/partials/smart-card-skeleton.tsx","../../src/components/base/cards/smart-card.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\"ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-xl py-6 text-sm shadow-xs ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-base leading-normal font-medium group-data-[size=sm]/card:text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6 group-data-[size=sm]/card:px-4\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4 flex items-center\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import { cn } from '@/lib/utils';\n\nimport type { CardPadding, SmartCardSurface } from './smart-card.types';\n\n/**\n * BEM-style hooks applied to every SmartCard subregion. Library\n * consumers can target them in CSS / tests / analytics without\n * relying on shadcn's data-slot attributes (which are framework\n * internals). Keep these names consistent — they are part of the\n * public DOM contract.\n */\nexport const CARD_BEM = {\n\troot: 'card--component',\n\theader: 'card--header',\n\ttitle: 'card--title',\n\tdescription: 'card--description',\n\tcontent: 'card--content',\n\tfooter: 'card--footer',\n\talert: 'card--alert',\n} as const;\n\ninterface PaddingTokens {\n\tshell: string;\n\theaderX: string;\n\tcontentX: string;\n\tcontentY: string;\n\tfooterX: string;\n\talertX: string;\n\t/** Vertical offset applied when alert sits BELOW the header (pulls it up). */\n\talertOffsetWithHeader: string;\n\t/** Vertical spacing applied when alert is the first content (no header). */\n\talertOffsetStandalone: string;\n}\n\nexport const PADDING: Record<CardPadding, PaddingTokens> = {\n\tsmall: {\n\t\tshell: 'gap-space-lg py-surface-sm',\n\t\theaderX: 'px-surface-sm',\n\t\tcontentX: 'px-surface-sm',\n\t\tcontentY: 'py-0',\n\t\tfooterX: 'px-surface-sm',\n\t\talertX: 'px-surface-sm',\n\t\talertOffsetWithHeader: '-mt-1',\n\t\talertOffsetStandalone: 'mt-0',\n\t},\n\tdefault: {\n\t\tshell: 'gap-space-xl py-surface',\n\t\theaderX: 'px-surface',\n\t\tcontentX: 'px-surface',\n\t\tcontentY: 'py-0',\n\t\tfooterX: 'px-surface',\n\t\talertX: 'px-surface',\n\t\talertOffsetWithHeader: '-mt-1',\n\t\talertOffsetStandalone: 'mt-0',\n\t},\n};\n\n/**\n * Surface-specific shell classes. The `framed` variant provides one clean\n * card surface with a soft tokenized ring, not nested borders that compete\n * with the example chrome.\n */\nexport const SURFACE_CLASSES: Record<SmartCardSurface, string> = {\n\tcard: 'rounded-lg border border-border bg-card text-card-foreground shadow-xs',\n\tflat: 'bg-transparent text-card-foreground border-none shadow-none',\n\tframed: cn(\n\t\t'rounded-lg border border-border bg-card text-card-foreground shadow-xs',\n\t\t'ring-4 ring-border/25',\n\t),\n};\n","import { Fragment, isValidElement, type ReactNode } from 'react';\n\n/**\n * Predicate used by SmartCard subregions to decide whether each slot\n * warrants rendering its wrapper. Numbers (incl. `0`) and JSX always\n * render; falsy / empty-string content is treated as absent. Fragments\n * recurse into their children.\n */\nexport function hasRenderableContent(content?: ReactNode): boolean {\n\tif (content === null || content === undefined) return false;\n\tif (typeof content === 'boolean') return false;\n\tif (typeof content === 'string') return content.trim().length > 0;\n\tif (typeof content === 'number' || typeof content === 'bigint') return true;\n\tif (Array.isArray(content)) return content.some(hasRenderableContent);\n\tif (isValidElement<{ children?: ReactNode }>(content)) {\n\t\tif (content.type === Fragment) return hasRenderableContent(content.props.children);\n\t\treturn true;\n\t}\n\treturn true;\n}\n","/**\n * Internal layout primitives — re-exported from `smart-card.tsx` for\n * advanced composition (deeply customised layouts that still want the\n * design-system surface tokens). Each primitive is intentionally thin:\n * a single responsibility, a single set of default classes, no business\n * logic. The BEM hooks (`card--component`, `card--header`, etc.) are\n * applied here so the public DOM contract lives in one place.\n */\nimport {\n\ttype ComponentPropsWithRef,\n\ttype ComponentPropsWithoutRef,\n} from 'react';\n\nimport {\n\tCard as CardPrimitive,\n\tCardContent as CardContentPrimitive,\n\tCardDescription as CardDescriptionPrimitive,\n\tCardFooter as CardFooterPrimitive,\n\tCardHeader as CardHeaderPrimitive,\n\tCardTitle as CardTitlePrimitive,\n} from '@/components/ui/card';\nimport Text from '@/components/typography/text';\nimport { cn } from '@/lib/utils';\n\nimport { CARD_BEM } from '../smart-card.tokens';\n\nimport { hasRenderableContent } from './has-renderable-content';\n\nexport function CardShell({ className, ...props }: ComponentPropsWithRef<'div'>) {\n\treturn (\n\t\t<CardPrimitive\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.root,\n\t\t\t\t'flex w-full flex-col gap-3 py-4 ring-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardHeader({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardHeaderPrimitive\n\t\t\tclassName={cn(CARD_BEM.header, 'flex flex-col gap-1 px-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardTitle({\n\tclassName,\n\tchildren,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\tif (!hasRenderableContent(children)) return null;\n\n\tconst isPlainText =\n\t\ttypeof children === 'string' ||\n\t\ttypeof children === 'number' ||\n\t\ttypeof children === 'bigint';\n\n\tif (!isPlainText) {\n\t\treturn (\n\t\t\t<CardTitlePrimitive\n\t\t\t\tclassName={cn(CARD_BEM.title, 'min-w-0 text-base leading-tight font-semibold', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</CardTitlePrimitive>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tdata-slot=\"card-title\"\n\t\t\ttag=\"div\"\n\t\t\tsize=\"base\"\n\t\t\tweight=\"semibold\"\n\t\t\tlineHeight=\"tight\"\n\t\t\tclassName={cn(CARD_BEM.title, 'min-w-0 font-semibold', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nexport function CardDescription({\n\tclassName,\n\tchildren,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\tif (!hasRenderableContent(children)) return null;\n\n\tconst isPlainText =\n\t\ttypeof children === 'string' ||\n\t\ttypeof children === 'number' ||\n\t\ttypeof children === 'bigint';\n\n\tif (!isPlainText) {\n\t\treturn (\n\t\t\t<CardDescriptionPrimitive\n\t\t\t\tclassName={cn(\n\t\t\t\t\tCARD_BEM.description,\n\t\t\t\t\t'text-muted-foreground text-sm',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</CardDescriptionPrimitive>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tdata-slot=\"card-description\"\n\t\t\ttag=\"div\"\n\t\t\ttype=\"secondary\"\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.description,\n\t\t\t\t'text-muted-foreground text-sm',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nexport function CardContent({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardContentPrimitive\n\t\t\tclassName={cn(CARD_BEM.content, 'px-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardFooter({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardFooterPrimitive\n\t\t\tclassName={cn(CARD_BEM.footer, 'flex items-center px-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","/**\n * Inline alert banner rendered between the header and the card body.\n * Pulls itself up under the header (`alertOffsetWithHeader`) when one\n * exists so the visual gap between header bottom and alert top stays\n * tight; otherwise pushes itself down (`alertOffsetStandalone`) so it\n * doesn't kiss the card top edge.\n */\nimport type { ReactNode } from 'react';\n\nimport { Alert, AlertDescription } from '@/components/base/display/alert';\nimport { cn } from '@/lib/utils';\n\nimport { CARD_BEM, PADDING } from '../smart-card.tokens';\nimport type { CardAlertVariant, CardPadding } from '../smart-card.types';\n\ninterface AlertSlotProps {\n\talert: ReactNode | string;\n\talertVariant: CardAlertVariant;\n\thasHeader: boolean;\n\tpadding: CardPadding;\n}\n\nexport function SmartCardAlert({\n\talert,\n\talertVariant,\n\thasHeader,\n\tpadding,\n}: AlertSlotProps) {\n\tconst tokens = PADDING[padding];\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.alert,\n\t\t\t\ttokens.alertX,\n\t\t\t\thasHeader ? tokens.alertOffsetWithHeader : tokens.alertOffsetStandalone,\n\t\t\t)}\n\t\t>\n\t\t\t<Alert variant={alertVariant}>\n\t\t\t\t<AlertDescription>{alert}</AlertDescription>\n\t\t\t</Alert>\n\t\t</div>\n\t);\n}\n","/**\n * SmartCard actions menu — `⋮` trigger + dropdown of consumer-supplied\n * `SmartCardAction` items. Always renders a 28×28 square trigger so it\n * reads cleanly as a circle (consumer overrides to `rounded-full`) or\n * a rectangle (default `rounded-md`).\n */\nimport { MoreHorizontal } from 'lucide-react';\n\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { cn } from '@/lib/utils';\n\nimport type { SmartCardAction } from '../smart-card.types';\n\ninterface ActionsMenuProps {\n\tactions: SmartCardAction[];\n\tactionsLabel: string;\n}\n\nexport function ActionsMenu({ actions, actionsLabel }: ActionsMenuProps) {\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label={actionsLabel}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'inline-flex size-7 shrink-0 items-center justify-center rounded-md p-0',\n\t\t\t\t\t'text-muted-foreground hover:bg-accent hover:text-accent-foreground',\n\t\t\t\t\t'outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\t'transition-colors',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<MoreHorizontal className=\"size-4\" />\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent align=\"end\" className=\"min-w-36\">\n\t\t\t\t{actions.map((action, index) => (\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tkey={action.id ?? `${action.label}-${index}`}\n\t\t\t\t\t\tonClick={action.onClick}\n\t\t\t\t\t\tdisabled={action.disabled}\n\t\t\t\t\t\tclassName=\"gap-space-lg px-row-x py-row-y text-xs\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!action.icon && (\n\t\t\t\t\t\t\t<span className=\"flex shrink-0 items-center\">{action.icon}</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{action.label}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t))}\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n","/**\n * SmartCardHeaderRow — the chrome above the card body. Combines icon /\n * title / description / tooltip / suffix on the leading side with the\n * trailing `headerEnd` / `headerAction` slots and the actions menu.\n *\n * `TooltipTrigger_Info` is colocated here because it's only used by the\n * header — keeping it private avoids polluting the public partial\n * surface.\n */\nimport { Info } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from '@/components/base/display/tooltip';\nimport { cn } from '@/lib/utils';\n\nimport { PADDING } from '../smart-card.tokens';\nimport type { CardPadding, SmartCardAction } from '../smart-card.types';\n\nimport { CardHeader, CardTitle, CardDescription } from './card-primitives';\nimport { hasRenderableContent } from './has-renderable-content';\nimport { ActionsMenu } from './smart-card-actions-menu';\n\nfunction TooltipTrigger_Info({ tooltipLabel }: { tooltipLabel: string }) {\n\treturn (\n\t\t<TooltipTrigger\n\t\t\trender={(triggerProps) => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tconst passthrough = triggerProps as Record<string, any>;\n\t\t\t\treturn (\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...passthrough}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'h-5 w-5 text-muted-foreground',\n\t\t\t\t\t\t\tpassthrough.className,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-label={tooltipLabel}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Info className=\"size-3.5\" />\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n\ninterface HeaderProps {\n\ticon?: ReactNode;\n\ttitle?: ReactNode;\n\ttitleSuffix?: ReactNode;\n\tdescription?: ReactNode;\n\ttooltip?: ReactNode;\n\ttooltipLabel: string;\n\theaderStart?: ReactNode;\n\theaderEnd?: ReactNode;\n\theaderAction?: ReactNode;\n\tactions?: SmartCardAction[];\n\tactionsLabel: string;\n\tpadding: CardPadding;\n\tclassName?: string;\n}\n\nexport function SmartCardHeaderRow({\n\ticon,\n\ttitle,\n\ttitleSuffix,\n\tdescription,\n\ttooltip,\n\ttooltipLabel,\n\theaderStart,\n\theaderEnd,\n\theaderAction,\n\tactions,\n\tactionsLabel,\n\tpadding,\n\tclassName,\n}: HeaderProps) {\n\tconst cardActions = Array.isArray(actions) ? actions : [];\n\tconst hasActions = cardActions.length > 0;\n\n\tconst hasIcon = hasRenderableContent(icon);\n\tconst hasTitle = hasRenderableContent(title);\n\tconst hasTitleSuffix = hasRenderableContent(titleSuffix);\n\tconst hasDescription = hasRenderableContent(description);\n\tconst hasTooltip = hasRenderableContent(tooltip);\n\tconst hasHeaderStart = hasRenderableContent(headerStart);\n\tconst hasHeaderEnd = hasRenderableContent(headerEnd);\n\tconst hasHeaderAction = hasRenderableContent(headerAction);\n\n\tconst showTitleRow = hasIcon || hasTitle || hasTitleSuffix || hasTooltip;\n\tconst showTrailing = hasHeaderEnd || hasHeaderAction || hasActions;\n\n\treturn (\n\t\t<CardHeader\n\t\t\tclassName={cn(\n\t\t\t\t'flex-row items-start justify-between gap-3 pb-0',\n\t\t\t\tPADDING[padding].headerX,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n\t\t\t\t{!!hasHeaderStart && headerStart}\n\n\t\t\t\t{!!showTitleRow && (\n\t\t\t\t\t<div className=\"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1\">\n\t\t\t\t\t\t{!!hasIcon && (\n\t\t\t\t\t\t\t<span className=\"flex shrink-0 items-center text-muted-foreground\">\n\t\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<CardTitle>{title}</CardTitle>\n\t\t\t\t\t\t{!!hasTitleSuffix && (\n\t\t\t\t\t\t\t<div className=\"flex items-center gap-2\">{titleSuffix}</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!hasTooltip && (\n\t\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t\t<TooltipTrigger_Info tooltipLabel={tooltipLabel} />\n\t\t\t\t\t\t\t\t<TooltipContent>{tooltip}</TooltipContent>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasDescription && (\n\t\t\t\t\t<CardDescription className=\"text-left\">{description}</CardDescription>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{!!showTrailing && (\n\t\t\t\t<div className=\"flex shrink-0 items-center gap-2\">\n\t\t\t\t\t{!!hasHeaderEnd && headerEnd}\n\t\t\t\t\t{!!hasHeaderAction && headerAction}\n\t\t\t\t\t{!!hasActions && (\n\t\t\t\t\t\t<ActionsMenu actions={cardActions} actionsLabel={actionsLabel} />\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</CardHeader>\n\t);\n}\n","/**\n * SmartCard strings — i18n surface for the chrome the consumer doesn't\n * pass directly. Most copy (title, description, action labels, alert\n * body) flows in via props; the strings here cover the implicit\n * affordances (expand toggle).\n */\n\nexport interface SmartCardStrings {\n\texpandLabel: string;\n\tcollapseLabel: string;\n}\n\nexport const defaultSmartCardStrings: SmartCardStrings = {\n\texpandLabel: 'Expand card',\n\tcollapseLabel: 'Collapse card',\n};\n","/**\n * SmartCardSkeleton — placeholder shell rendered while a SmartCard's\n * data is loading. Picks up the canonical card surface so the loading\n * state visually matches the eventual `SmartCard` it'll replace.\n */\nimport type { ReactNode } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport { SURFACE_CLASSES } from '../smart-card.tokens';\n\nimport {\n\tCardContent,\n\tCardHeader,\n\tCardShell,\n\tCardTitle,\n} from './card-primitives';\n\nexport interface SmartCardSkeletonProps {\n\ttitle?: ReactNode;\n\tlines?: number;\n\tclassName?: string;\n}\n\nexport function SmartCardSkeleton({\n\ttitle,\n\tlines = 2,\n\tclassName,\n}: SmartCardSkeletonProps) {\n\tconst SkeletonBar = ({ barClassName }: { barClassName?: string }) => (\n\t\t<div className={cn('animate-pulse rounded bg-muted', barClassName)} />\n\t);\n\n\treturn (\n\t\t<CardShell className={cn(SURFACE_CLASSES.card, 'gap-4 py-6', className)}>\n\t\t\t<CardHeader className=\"flex-col gap-1.5 px-6 pb-0\">\n\t\t\t\t{title ? <CardTitle>{title}</CardTitle> : <SkeletonBar barClassName=\"h-4 w-32\" />}\n\t\t\t</CardHeader>\n\t\t\t<CardContent className=\"space-y-3 px-6 py-0\">\n\t\t\t\t{Array.from({ length: lines }, (_, i) => (\n\t\t\t\t\t<SkeletonBar\n\t\t\t\t\t\tkey={`skel-${String(i)}`}\n\t\t\t\t\t\tbarClassName={cn('h-4', i === 0 ? 'w-full' : 'w-3/4')}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</CardContent>\n\t\t</CardShell>\n\t);\n}\n\nSmartCardSkeleton.displayName = 'SmartCardSkeleton';\n","/**\n * SmartCard — composed card with header (icon, title, suffix, description,\n * tooltip), actions menu, alert banner, header / content / footer slots,\n * surface variants (card / flat / framed), and an opt-in expandable body.\n *\n * The single card primitive everything else builds on — never reach past it\n * to shadcn `Card` directly. The CardShell / CardHeader / CardTitle /\n * CardDescription / CardContent / CardFooter primitives are re-exported\n * for advanced composition (deeply customised layouts that still want the\n * design-system surface tokens). Each subregion paints a BEM-style hook\n * (`card--component`, `card--header`, `card--title`, …) for CSS / test /\n * analytics targeting independent of shadcn's data-slot internals.\n *\n * The file is a thin orchestrator. The actual chrome lives in:\n * - `./smart-card.types.ts` — public prop / variant types\n * - `./smart-card.strings.ts` — i18n (expand toggle copy)\n * - `./smart-card.tokens.ts` — PADDING + SURFACE_CLASSES + CARD_BEM\n * - `./partials/card-primitives.tsx` — CardShell + CardHeader / Title /\n * Description / Content / Footer\n * - `./partials/smart-card-header-row.tsx` — header layout + actions menu\n * - `./partials/smart-card-alert.tsx` — inline alert banner\n * - `./partials/smart-card-actions-menu.tsx` — `⋮` dropdown\n * - `./partials/smart-card-skeleton.tsx` — loading placeholder\n * - `./partials/has-renderable-content.ts` — slot-empty predicate\n */\nimport { ChevronDown } from 'lucide-react';\nimport {\n\ttype CSSProperties,\n\tforwardRef,\n\tuseCallback,\n\tuseState,\n} from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport { useStrings } from '@/lib/strings';\nimport { useCardConfig } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tCardContent,\n\tCardFooter,\n\tCardShell,\n} from './partials/card-primitives';\nimport { hasRenderableContent } from './partials/has-renderable-content';\nimport { SmartCardAlert } from './partials/smart-card-alert';\nimport { SmartCardHeaderRow } from './partials/smart-card-header-row';\nimport {\n\tdefaultSmartCardStrings,\n} from './smart-card.strings';\nimport {\n\tPADDING,\n\tSURFACE_CLASSES,\n} from './smart-card.tokens';\nimport type {\n\tCardPadding,\n\tSmartCardProps,\n\tSmartCardSurface,\n} from './smart-card.types';\n\nfunction normalizeCardPadding(padding: CardPadding | string | undefined): CardPadding {\n\tif (padding === 'small' || padding === 'default') return padding;\n\tif (padding === 'sm') return 'small';\n\tif (padding === 'base' || padding === 'lg') return 'default';\n\treturn 'default';\n}\n\nexport const SmartCard = forwardRef<HTMLDivElement, SmartCardProps>(function SmartCard({\n\ticon,\n\ttitle,\n\ttitleSuffix,\n\tdescription,\n\ttooltip,\n\ttooltipAriaLabel = 'Card info',\n\tfooterText,\n\talert,\n\talertVariant = 'default',\n\tsurface,\n\ttransparent = false,\n\tpadding,\n\tactions,\n\tactionsLabel = 'Card actions',\n\theaderAction,\n\theaderStart,\n\theaderEnd,\n\tcontentTop,\n\tcontentBottom,\n\tfooterSlot,\n\theaderDivider = false,\n\tfooterDivider = false,\n\texpandable = false,\n\tdefaultExpanded = false,\n\texpanded: expandedProp,\n\tonExpandedChange,\n\tchildren,\n\tclassName,\n\theaderClassName,\n\tcontentClassName,\n\tfooterClassName,\n\tstrings: stringsProp,\n}, ref) {\n\tconst { defaultPadding } = useCardConfig();\n\tconst resolvedPadding = normalizeCardPadding(padding ?? defaultPadding);\n\tconst tokens = PADDING[resolvedPadding];\n\tconst cardActions = Array.isArray(actions) ? actions : [];\n\tconst strings = useStrings(defaultSmartCardStrings, stringsProp);\n\n\tconst isExpandable = expandable !== false && expandable !== undefined;\n\tconst collapsedMaxHeightRaw =\n\t\ttypeof expandable === 'object' && expandable?.collapsedMaxHeight !== undefined\n\t\t\t? expandable.collapsedMaxHeight\n\t\t\t: '12rem';\n\tconst collapsedMaxHeight =\n\t\ttypeof collapsedMaxHeightRaw === 'number'\n\t\t\t? `${collapsedMaxHeightRaw}px`\n\t\t\t: collapsedMaxHeightRaw;\n\n\tconst isExpandedControlled = expandedProp !== undefined;\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = isExpandedControlled ? expandedProp : internalExpanded;\n\tconst handleToggle = useCallback(() => {\n\t\tconst next = !expanded;\n\t\tif (!isExpandedControlled) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t}, [expanded, isExpandedControlled, onExpandedChange]);\n\n\tconst hasHeader =\n\t\thasRenderableContent(icon) ||\n\t\thasRenderableContent(title) ||\n\t\thasRenderableContent(description) ||\n\t\tcardActions.length > 0 ||\n\t\thasRenderableContent(headerAction) ||\n\t\thasRenderableContent(headerStart) ||\n\t\thasRenderableContent(headerEnd);\n\n\tconst hasAlert = hasRenderableContent(alert);\n\tconst hasFooterText = hasRenderableContent(footerText);\n\tconst hasFooterSlot = hasRenderableContent(footerSlot);\n\tconst hasContentTop = hasRenderableContent(contentTop);\n\tconst hasContentBottom = hasRenderableContent(contentBottom);\n\n\tconst tooltipLabel =\n\t\ttooltipAriaLabel.trim().length > 0 ? tooltipAriaLabel : 'Card info';\n\n\tconst collapseStyle: CSSProperties | undefined = isExpandable\n\t\t? {\n\t\t\t\tmaxHeight: expanded ? '' : collapsedMaxHeight,\n\t\t\t}\n\t\t: undefined;\n\n\t// Resolve surface — explicit `surface` wins, else legacy `transparent`,\n\t// else the default `'card'` chrome.\n\tconst resolvedSurface: SmartCardSurface = surface ?? (transparent ? 'flat' : 'card');\n\n\treturn (\n\t\t<CardShell\n\t\t\tref={ref}\n\t\t\tdata-surface={resolvedSurface}\n\t\t\tclassName={cn(\n\t\t\t\tSURFACE_CLASSES[resolvedSurface],\n\t\t\t\ttokens.shell,\n\t\t\t\t// `isExpandable` parks the chevron at `-bottom-4` outside the\n\t\t\t\t// shell — `overflow-visible` lets it render past the card\n\t\t\t\t// edge, otherwise the shadcn primitive's `overflow-hidden`\n\t\t\t\t// clips it.\n\t\t\t\tisExpandable && 'relative pb-1 !overflow-visible',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!!hasHeader && (\n\t\t\t\t<SmartCardHeaderRow\n\t\t\t\t\ticon={icon}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\ttitleSuffix={titleSuffix}\n\t\t\t\t\tdescription={description}\n\t\t\t\t\ttooltip={tooltip}\n\t\t\t\t\ttooltipLabel={tooltipLabel}\n\t\t\t\t\theaderStart={headerStart}\n\t\t\t\t\theaderEnd={headerEnd}\n\t\t\t\t\theaderAction={headerAction}\n\t\t\t\t\tactions={cardActions}\n\t\t\t\t\tactionsLabel={actionsLabel}\n\t\t\t\t\tpadding={resolvedPadding}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\theaderDivider && 'pb-3 border-b border-border/60',\n\t\t\t\t\t\theaderClassName,\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{!!hasAlert && (\n\t\t\t\t<SmartCardAlert\n\t\t\t\t\talert={alert}\n\t\t\t\t\talertVariant={alertVariant}\n\t\t\t\t\thasHeader={hasHeader}\n\t\t\t\t\tpadding={resolvedPadding}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<CardContent\n\t\t\t\tclassName={cn(\n\t\t\t\t\ttokens.contentX,\n\t\t\t\t\ttokens.contentY,\n\t\t\t\t\tisExpandable &&\n\t\t\t\t\t\t'relative overflow-hidden transition-[max-height] duration-500 ease-in-out',\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t\tstyle={collapseStyle}\n\t\t\t>\n\t\t\t\t{!!hasContentTop && contentTop}\n\t\t\t\t{children}\n\t\t\t\t{!!hasContentBottom && contentBottom}\n\n\t\t\t\t{!!isExpandable && !expanded && (\n\t\t\t\t\t<div\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName=\"from-background pointer-events-none absolute inset-x-0 bottom-0 h-20 rounded-b-lg bg-linear-to-t to-transparent\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</CardContent>\n\n\t\t\t{!!hasFooterText && (\n\t\t\t\t<CardFooter\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'justify-end text-xs text-muted-foreground',\n\t\t\t\t\t\ttokens.footerX,\n\t\t\t\t\t\tfooterDivider && 'pt-3 border-t border-border/60',\n\t\t\t\t\t\tfooterClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{footerText}\n\t\t\t\t</CardFooter>\n\t\t\t)}\n\n\t\t\t{!!hasFooterSlot && (\n\t\t\t\t<CardFooter\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'flex-col items-stretch',\n\t\t\t\t\t\ttokens.footerX,\n\t\t\t\t\t\tfooterDivider && 'pt-3 border-t border-border/60',\n\t\t\t\t\t\tfooterClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{footerSlot}\n\t\t\t\t</CardFooter>\n\t\t\t)}\n\n\t\t\t{!!isExpandable && (\n\t\t\t\t<div className=\"absolute -bottom-4 left-1/2 -translate-x-1/2 z-10\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\t\taria-label={expanded ? strings.collapseLabel : strings.expandLabel}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'inline-flex size-8 items-center justify-center rounded-full',\n\t\t\t\t\t\t\t'border border-border bg-background text-foreground shadow-sm',\n\t\t\t\t\t\t\t'hover:bg-muted/40 transition-colors',\n\t\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'size-4 transition-transform duration-300',\n\t\t\t\t\t\t\t\texpanded && 'rotate-180',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span className=\"sr-only\">\n\t\t\t\t\t\t\t{expanded ? strings.collapseLabel : strings.expandLabel}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</CardShell>\n\t);\n});\n\nSmartCard.displayName = 'SmartCard';\n\n// ──────────────────────────────────────────────────────────────────────────\n// Re-exports — public surface lives here so `import { ... } from\n// '@/components/base/cards'` keeps working through the file split.\n// ──────────────────────────────────────────────────────────────────────────\n\nexport {\n\tdefaultSmartCardStrings,\n\ttype SmartCardStrings,\n} from './smart-card.strings';\nexport type {\n\tCardAlertVariant,\n\tCardPadding,\n\tSmartCardAction,\n\tSmartCardProps,\n\tSmartCardSkeletonProps,\n\tSmartCardSurface,\n} from './smart-card.types';\nexport {\n\tCardContent,\n\tCardDescription,\n\tCardFooter,\n\tCardHeader,\n\tCardShell,\n\tCardTitle,\n} from './partials/card-primitives';\nexport { SmartCardSkeleton } from './partials/smart-card-skeleton';\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overlays-CdtMAkKG.js","names":[],"sources":["../../src/components/features/overlays/hooks/use-native-dialog.ts","../../src/components/features/overlays/overlays.strings.ts","../../src/components/features/overlays/hooks/use-overlay-actions.ts","../../src/components/features/overlays/dialog.tsx","../../src/components/features/overlays/drawer.tsx","../../src/components/features/overlays/alert-dialog.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type RefObject,\n} from 'react';\n\nexport interface UseNativeDialogOptions {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n onClose?: () => void;\n closeOnEscape?: boolean;\n closeOnBackdropClick?: boolean;\n initialFocusRef?: RefObject<HTMLElement>;\n}\n\nexport interface UseNativeDialogReturn {\n dialogRef: RefObject<HTMLDialogElement | null>;\n isOpen: boolean;\n isClosing: boolean;\n openDialog: () => void;\n closeDialog: () => void;\n toggleDialog: () => void;\n dialogProps: {\n ref: RefObject<HTMLDialogElement | null>;\n open: boolean;\n onKeyDown: (e: React.KeyboardEvent<HTMLDialogElement>) => void;\n };\n handleBackdropClick: () => void;\n}\n\nconst ANIMATION_TIMEOUT_MS = 350;\n\nlet bodyScrollLockCount = 0;\n\n/**\n * Lock body scroll using a CSS-class-based approach.\n *\n * Uses a `data-overlay-scroll-locked` attribute on `<html>` combined with a\n * CSS rule (`html[data-overlay-scroll-locked] body { overflow: hidden }`)\n * instead of directly manipulating `body.style.overflow`.\n *\n * This avoids a conflict with @base-ui's own `SCROLL_LOCKER` singleton (used\n * by Select, Combobox, etc.) which independently saves and restores inline\n * body styles. When both systems saved/restored the same inline property,\n * unlocking in the wrong order left `overflow: hidden` permanently on the body.\n */\nfunction lockBodyScroll(): () => void {\n if (bodyScrollLockCount === 0) {\n const scrollbarWidth =\n window.innerWidth - document.documentElement.clientWidth;\n\n document.body.style.setProperty(\n '--overlay-scrollbar-width',\n `${scrollbarWidth}px`,\n );\n document.documentElement.setAttribute(\n 'data-overlay-scroll-locked',\n '',\n );\n }\n\n bodyScrollLockCount += 1;\n let released = false;\n\n return () => {\n if (released) {\n return;\n }\n\n released = true;\n bodyScrollLockCount = Math.max(0, bodyScrollLockCount - 1);\n\n if (bodyScrollLockCount > 0) {\n return;\n }\n\n document.documentElement.removeAttribute('data-overlay-scroll-locked');\n document.body.style.removeProperty('--overlay-scrollbar-width');\n };\n}\n\nexport function useNativeDialog({\n open: controlledOpen,\n onOpenChange,\n onClose,\n closeOnEscape = true,\n closeOnBackdropClick = true,\n initialFocusRef,\n}: UseNativeDialogOptions = {}): UseNativeDialogReturn {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const [internalOpen, setInternalOpen] = useState(false);\n const [isClosing, setIsClosing] = useState(false);\n const unlockScrollRef = useRef<(() => void) | null>(null);\n const previousActiveElementRef = useRef<HTMLElement | null>(null);\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const animationListenerRef = useRef<(() => void) | null>(null);\n const focusRafRef = useRef<number | null>(null);\n const finishCloseHandledRef = useRef(false);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n // Refs track the latest values so closeDialog can bail out from stale\n // closures (e.g. when useOverlayActions.handleConfirm awaits an async\n // operation while the action store already sets isOpen=false or while\n // a prior closeDialog call already set isClosing=true).\n const isOpenRef = useRef(isOpen);\n isOpenRef.current = isOpen;\n\n const isClosingRef = useRef(isClosing);\n isClosingRef.current = isClosing;\n\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n\n if (!nextOpen) {\n onClose?.();\n }\n },\n [isControlled, onOpenChange, onClose],\n );\n\n const cleanupAnimation = useCallback(() => {\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current);\n closeTimeoutRef.current = null;\n }\n if (animationListenerRef.current) {\n animationListenerRef.current();\n animationListenerRef.current = null;\n }\n }, []);\n\n const finishClose = useCallback(() => {\n cleanupAnimation();\n\n // Mark that finishClose handled this close cycle so the safety-net\n // useEffect doesn't interfere with a redundant cleanup pass.\n finishCloseHandledRef.current = true;\n\n // CRITICAL: Release the scroll lock BEFORE calling setOpen, which\n // invokes external callbacks (onOpenChange, onClose) that may throw.\n const unlock = unlockScrollRef.current;\n unlockScrollRef.current = null;\n\n const prevFocus = previousActiveElementRef.current;\n previousActiveElementRef.current = null;\n\n try {\n unlock?.();\n } catch {\n // Scroll unlock must never propagate.\n }\n\n // Notify parent first — this triggers onOpenChange(false) which updates\n // the controlled open prop. Do NOT remove the .closing class or clear\n // isClosing before this: removing .closing reverts the dialog to its\n // entry animation CSS for one frame before React unmounts, causing a flash.\n try {\n setOpen(false);\n } catch {\n // If onOpenChange / onClose throws we still need to restore focus.\n }\n\n // Now safe to clear — React will unmount the portal on the next render,\n // so the .closing class removal is cosmetic (element is about to be removed).\n setIsClosing(false);\n\n const dialog = dialogRef.current;\n if (dialog) {\n dialog.classList.remove('closing');\n }\n\n try {\n prevFocus?.focus();\n } catch {\n // focus() on a disconnected node can throw in some browsers.\n }\n }, [cleanupAnimation, setOpen]);\n\n const openDialog = useCallback(() => {\n // Use refs (always fresh) instead of closure-captured values so that\n // stale references from trigger cloneElement or external callers\n // cannot bypass the guard.\n if (isOpenRef.current || isClosingRef.current) return;\n\n previousActiveElementRef.current =\n document.activeElement as HTMLElement;\n unlockScrollRef.current = lockBodyScroll();\n\n setOpen(true);\n\n focusRafRef.current = requestAnimationFrame(() => {\n focusRafRef.current = null;\n if (initialFocusRef?.current) {\n initialFocusRef.current.focus();\n } else {\n dialogRef.current?.focus();\n }\n });\n }, [setOpen, initialFocusRef]);\n\n const closeDialog = useCallback(() => {\n const dialog = dialogRef.current;\n // Use isOpenRef and isClosingRef (always fresh) instead of closure-\n // captured values so that stale closures from useOverlayActions\n // (which await async confirm while the action store or a prior\n // closeDialog call already changed state) correctly bail out instead\n // of starting a duplicate close animation.\n if (!dialog || !isOpenRef.current || isClosingRef.current) return;\n\n setIsClosing(true);\n dialog.classList.add('closing');\n\n // Force reflow so the browser picks up the new class before we read computed style\n void dialog.offsetHeight;\n\n const hasAnimation =\n getComputedStyle(dialog).animationName !== 'none';\n\n if (hasAnimation) {\n const handleAnimationEnd = () => {\n finishClose();\n };\n\n dialog.addEventListener('animationend', handleAnimationEnd, {\n once: true,\n });\n\n // Store cleanup function for unmount safety\n animationListenerRef.current = () => {\n dialog.removeEventListener(\n 'animationend',\n handleAnimationEnd,\n );\n };\n\n // Timeout fallback in case animationend never fires\n closeTimeoutRef.current = setTimeout(() => {\n finishClose();\n }, ANIMATION_TIMEOUT_MS);\n } else {\n finishClose();\n }\n }, [finishClose]);\n\n const toggleDialog = useCallback(() => {\n if (isOpen) {\n closeDialog();\n } else {\n openDialog();\n }\n }, [isOpen, openDialog, closeDialog]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLDialogElement>) => {\n if (e.key === 'Escape' && closeOnEscape) {\n e.preventDefault();\n e.stopPropagation();\n closeDialog();\n }\n },\n [closeOnEscape, closeDialog],\n );\n\n const handleBackdropClick = useCallback(() => {\n if (closeOnBackdropClick) {\n closeDialog();\n }\n }, [closeOnBackdropClick, closeDialog]);\n\n // Sync controlled open state → lock scroll + focus\n useEffect(() => {\n if (isOpen && !isClosing) {\n if (!previousActiveElementRef.current) {\n previousActiveElementRef.current =\n document.activeElement as HTMLElement;\n }\n\n if (!unlockScrollRef.current) {\n unlockScrollRef.current = lockBodyScroll();\n }\n\n // Cancel any pending focus rAF (e.g. from openDialog) before\n // scheduling a new one, preventing duplicate focus calls.\n if (focusRafRef.current !== null) {\n cancelAnimationFrame(focusRafRef.current);\n }\n focusRafRef.current = requestAnimationFrame(() => {\n focusRafRef.current = null;\n if (initialFocusRef?.current) {\n initialFocusRef.current.focus();\n } else {\n dialogRef.current?.focus();\n }\n });\n } else if (!isOpen) {\n // If finishClose already handled this close cycle, skip the\n // safety-net to avoid a redundant cleanup pass that would cause\n // a flash (clearing isClosing in a separate render).\n if (finishCloseHandledRef.current) {\n finishCloseHandledRef.current = false;\n\n return;\n }\n\n // Safety net for the controlled-close path where closeDialog()\n // is never called directly (e.g. action store sets isOpen=false).\n if (unlockScrollRef.current) {\n unlockScrollRef.current();\n unlockScrollRef.current = null;\n }\n\n if (isClosing) {\n cleanupAnimation();\n setIsClosing(false);\n\n const dialog = dialogRef.current;\n if (dialog) {\n dialog.classList.remove('closing');\n }\n }\n\n if (previousActiveElementRef.current) {\n try {\n previousActiveElementRef.current.focus();\n } catch {\n // focus() on a disconnected node — ignore\n }\n previousActiveElementRef.current = null;\n }\n }\n\n return () => {\n if (focusRafRef.current !== null) {\n cancelAnimationFrame(focusRafRef.current);\n focusRafRef.current = null;\n }\n };\n }, [isOpen, isClosing, initialFocusRef, cleanupAnimation]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n cleanupAnimation();\n\n if (focusRafRef.current !== null) {\n cancelAnimationFrame(focusRafRef.current);\n focusRafRef.current = null;\n }\n\n if (unlockScrollRef.current) {\n unlockScrollRef.current();\n unlockScrollRef.current = null;\n }\n };\n }, [cleanupAnimation]);\n\n return {\n dialogRef,\n isOpen,\n isClosing,\n openDialog,\n closeDialog,\n toggleDialog,\n dialogProps: {\n ref: dialogRef,\n open: isOpen,\n onKeyDown: handleKeyDown,\n },\n handleBackdropClick,\n };\n}\n","/**\n * Default user-facing strings shared by `<Dialog>`, `<Drawer>`, and\n * `<AlertDialog>` overlays.\n *\n * Consumers wire backend i18n at the call site:\n *\n * <Dialog strings={{ confirm: t('common.confirm') }} … />\n */\n\nexport interface OverlayStrings {\n\tconfirm: string;\n\tcancel: string;\n\tclose: string;\n\tloading: string;\n}\n\nexport const defaultOverlayStrings: OverlayStrings = {\n\tconfirm: 'Confirm',\n\tcancel: 'Cancel',\n\tclose: 'Close',\n\tloading: 'Loading...',\n};\n\nexport const defaultAlertDialogStrings: OverlayStrings = {\n\tconfirm: 'Continue',\n\tcancel: 'Cancel',\n\tclose: 'Close',\n\tloading: 'Loading...',\n};\n","import { useCallback, useMemo, useState } from 'react';\n\nimport { useStrings, type StringsProp } from '@/lib/strings';\n\nimport {\n\tdefaultOverlayStrings,\n\ttype OverlayStrings,\n} from '../overlays.strings';\nimport type {\n\tButtonVariant,\n\tOverlayActionProps,\n\tOverlayTone,\n} from '../overlays.types';\n\nexport interface UseOverlayActionsOptions\n\textends Pick<\n\t\tOverlayActionProps,\n\t\t| 'onConfirm'\n\t\t| 'onAsyncConfirm'\n\t\t| 'closeOnAsyncComplete'\n\t\t| 'confirmVariant'\n\t\t| 'isLoading'\n\t\t| 'formId'\n\t> {\n\tcloseDialog: () => void;\n\tonCancel?: () => void;\n\tcustomStrings?: StringsProp<OverlayStrings>;\n\temphasis?: boolean;\n\ttone?: OverlayTone;\n\t/** Called when `onAsyncConfirm` throws. Library DEV-logs the error;\n\t * consumer wires telemetry. */\n\tonError?: (error: unknown) => void;\n}\n\nexport interface UseOverlayActionsReturn {\n\tstrings: OverlayStrings;\n\tisExecuting: boolean;\n\thandleConfirm: () => Promise<void>;\n\thandleCancel: () => void;\n\tfinalConfirmVariant: ButtonVariant;\n\tconfirmButtonOnClick: (() => Promise<void>) | undefined;\n\teffectiveLoading: boolean;\n}\n\nexport function useOverlayActions({\n\tcloseDialog,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmVariant = 'primary',\n\tisLoading = false,\n\tformId,\n\tonCancel,\n\tcustomStrings,\n\temphasis = false,\n\ttone = 'default',\n\tonError,\n}: UseOverlayActionsOptions): UseOverlayActionsReturn {\n\tconst strings = useStrings(defaultOverlayStrings, customStrings);\n\n\tconst [isExecuting, setIsExecuting] = useState(false);\n\n\tconst handleConfirm = useCallback(async () => {\n\t\tif (onConfirm) {\n\t\t\tonConfirm();\n\t\t\tcloseDialog();\n\t\t\treturn;\n\t\t}\n\n\t\tif (onAsyncConfirm) {\n\t\t\tsetIsExecuting(true);\n\t\t\ttry {\n\t\t\t\tawait onAsyncConfirm();\n\t\t\t\tif (closeOnAsyncComplete) {\n\t\t\t\t\tcloseDialog();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\t\tconsole.error('Overlay async confirm failed:', error);\n\t\t\t\t}\n\t\t\t\tonError?.(error);\n\t\t\t} finally {\n\t\t\t\tsetIsExecuting(false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tcloseDialog();\n\t}, [onConfirm, onAsyncConfirm, closeOnAsyncComplete, closeDialog, onError]);\n\n\tconst handleCancel = useCallback(() => {\n\t\tonCancel?.();\n\t\tcloseDialog();\n\t}, [onCancel, closeDialog]);\n\n\tconst handleFormSubmit = useCallback(async () => {\n\t\tif (!formId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst form = document.getElementById(formId);\n\n\t\tif (!(form instanceof HTMLFormElement)) {\n\t\t\treturn;\n\t\t}\n\n\t\tform.requestSubmit();\n\t}, [formId]);\n\n\tconst finalConfirmVariant = useMemo<ButtonVariant>(() => {\n\t\tif (!emphasis) return confirmVariant ?? 'primary';\n\t\tif (tone === 'error') return 'error';\n\t\tif (tone === 'warning') return 'warning';\n\t\tif (tone === 'success') return 'success';\n\t\treturn confirmVariant ?? 'primary';\n\t}, [emphasis, tone, confirmVariant]);\n\n\tconst confirmButtonOnClick = formId ? handleFormSubmit : handleConfirm;\n\n\treturn {\n\t\tstrings,\n\t\tisExecuting,\n\t\thandleConfirm,\n\t\thandleCancel,\n\t\tfinalConfirmVariant,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading: isExecuting || isLoading,\n\t};\n}\n","import {\n\tAlertCircle,\n\tAlertTriangle,\n\tCheckCircle,\n\tHelpCircle,\n\tInfo,\n\tX,\n} from 'lucide-react';\nimport React, { cloneElement, isValidElement, memo, useId, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useNativeDialog, useOverlayActions } from './hooks';\nimport type { DialogProps, OverlaySize, OverlayTone } from './overlays.types';\n\nconst SIZE_CLASSES: Record<OverlaySize, string> = {\n\txs: 'max-w-xs',\n\tsm: 'max-w-sm',\n\tmd: 'max-w-md',\n\tlg: 'max-w-lg',\n\txl: 'max-w-xl',\n\t'2xl': 'max-w-2xl',\n\t'3xl': 'max-w-3xl',\n\t'4xl': 'max-w-4xl',\n\t'5xl': 'max-w-5xl',\n\tfull: 'max-w-[calc(100vw-2rem)]',\n};\n\nconst TONE_STYLES: Record<OverlayTone, { icon: ReactNode; classes: string }> = {\n\tdefault: {\n\t\ticon: <HelpCircle className=\"text-muted-foreground h-5 w-5\" />,\n\t\tclasses: '',\n\t},\n\terror: {\n\t\ticon: <AlertCircle className=\"text-destructive h-5 w-5\" />,\n\t\tclasses: 'border-destructive/50',\n\t},\n\twarning: {\n\t\ticon: <AlertTriangle className=\"text-warning h-5 w-5\" />,\n\t\tclasses: 'border-warning/50',\n\t},\n\tinfo: {\n\t\ticon: <Info className=\"text-info h-5 w-5\" />,\n\t\tclasses: 'border-info/50',\n\t},\n\tsuccess: {\n\t\ticon: <CheckCircle className=\"text-success h-5 w-5\" />,\n\t\tclasses: 'border-success/50',\n\t},\n};\n\nfunction DialogImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = true,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmVariant = 'primary',\n\tconfirmStyle = 'solid',\n\tisLoading = false,\n\tformId,\n\tfooter,\n\temphasis = false,\n\ttone = 'default',\n\tshowIcon = false,\n\talertMessage,\n\tsize = 'lg',\n\ttrigger,\n}: DialogProps) {\n\tconst dialogTitleId = useId();\n\tconst dialogDescriptionId = useId();\n\tconst ariaLabelledBy = title ? dialogTitleId : undefined;\n\tconst ariaDescribedBy = description ? dialogDescriptionId : undefined;\n\n\tconst {\n\t\tisOpen,\n\t\tisClosing,\n\t\topenDialog,\n\t\tcloseDialog,\n\t\tdialogProps,\n\t\thandleBackdropClick,\n\t} = useNativeDialog({\n\t\topen,\n\t\tonOpenChange,\n\t\tonClose,\n\t\tcloseOnEscape,\n\t\tcloseOnBackdropClick,\n\t\tinitialFocusRef,\n\t});\n\n\tconst {\n\t\tstrings,\n\t\tfinalConfirmVariant,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading,\n\t\thandleCancel,\n\t} = useOverlayActions({\n\t\tcloseDialog,\n\t\tonConfirm,\n\t\tonAsyncConfirm,\n\t\tcloseOnAsyncComplete,\n\t\tconfirmVariant,\n\t\tisLoading,\n\t\tformId,\n\t\tonCancel,\n\t\tcustomStrings,\n\t\temphasis,\n\t\ttone,\n\t});\n\n\tconst toneStyles = TONE_STYLES[tone];\n\tconst hasContent = Boolean(children || alertMessage);\n\tconst hasFooter = showCancel || showConfirm || footer;\n\n\tconst triggerElement =\n\t\ttrigger && isValidElement<Record<string, unknown>>(trigger) ? (\n\t\t\tcloneElement(trigger, {\n\t\t\t\tonClick: (e: React.MouseEvent) => {\n\t\t\t\t\tconst original = trigger.props.onClick as\n\t\t\t\t\t\t| ((e: React.MouseEvent) => void)\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\toriginal?.(e);\n\t\t\t\t\topenDialog();\n\t\t\t\t},\n\t\t\t})\n\t\t) : trigger ? (\n\t\t\t<span\n\t\t\t\trole=\"button\"\n\t\t\t\ttabIndex={0}\n\t\t\t\tonClick={openDialog}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\topenDialog();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t>\n\t\t\t\t{trigger}\n\t\t\t</span>\n\t\t) : null;\n\n\tif (!isOpen && !isClosing && !trigger) return null;\n\n\treturn (\n\t\t<>\n\t\t\t{triggerElement}\n\n\t\t\t{!!(isOpen || isClosing) &&\n\t\t\t\tcreatePortal(\n\t\t\t\t\t<div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'absolute inset-0 bg-foreground/50 backdrop-blur-[1px]',\n\t\t\t\t\t\t\t\t'transition-opacity duration-200',\n\t\t\t\t\t\t\t\tisClosing\n\t\t\t\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t\t\t\t: 'animate-in fade-in-0 duration-200',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={handleBackdropClick}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<dialog\n\t\t\t\t\t\t\t{...dialogProps}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'dialog--component relative z-10 m-0 p-0',\n\t\t\t\t\t\t\t\t'rounded-lg border shadow-lg',\n\t\t\t\t\t\t\t\t'bg-background text-foreground',\n\t\t\t\t\t\t\t\t'max-h-[90vh] w-full',\n\t\t\t\t\t\t\t\t'flex flex-col',\n\t\t\t\t\t\t\t\tSIZE_CLASSES[size],\n\t\t\t\t\t\t\t\t'animate-in fade-in-0 zoom-in-95 duration-200',\n\t\t\t\t\t\t\t\t'[&.closing]:animate-out [&.closing]:fade-out-0 [&.closing]:zoom-out-95 [&.closing]:duration-150',\n\t\t\t\t\t\t\t\t'outline-none focus-visible:outline-none',\n\t\t\t\t\t\t\t\temphasis && toneStyles.classes,\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\t\tonClick={closeDialog}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'absolute right-3 top-3 z-10 size-7 rounded-md p-0',\n\t\t\t\t\t\t\t\t\t'text-muted-foreground transition-colors',\n\t\t\t\t\t\t\t\t\t'hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t\t\t\t'disabled:pointer-events-none',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\taria-label={strings.close}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex gap-3 px-6 pb-4 pt-6',\n\t\t\t\t\t\t\t\t\t\tshowIcon && 'items-start',\n\t\t\t\t\t\t\t\t\t\tvisuallyHideHeader && 'sr-only',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!!showIcon && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"shrink-0 pt-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t{toneStyles.icon}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={dialogTitleId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"pr-6\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={dialogDescriptionId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-1\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!!hasContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex-1 overflow-auto px-6',\n\t\t\t\t\t\t\t\t\t\ttitle || description\n\t\t\t\t\t\t\t\t\t\t\t? visuallyHideHeader\n\t\t\t\t\t\t\t\t\t\t\t\t? 'py-6'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'pb-6'\n\t\t\t\t\t\t\t\t\t\t\t: 'py-6',\n\t\t\t\t\t\t\t\t\t\tcontentClassName,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'mb-4 rounded-md border p-3',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'error' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-destructive/30 bg-destructive/5',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'warning' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-warning/40 bg-warning/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'info' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-info/40 bg-info/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'success' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-success/40 bg-success/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'default' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-border bg-muted/40',\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{alertMessage}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!!hasFooter && (\n\t\t\t\t\t\t\t\t<div className=\"border-t px-6 py-4\">\n\t\t\t\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end\">\n\t\t\t\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant={finalConfirmVariant}\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloadingLabels={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: strings.loading,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</dialog>\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const Dialog = memo(DialogImpl);\nDialog.displayName = 'Dialog';\n","import {\n\tAlertCircle,\n\tAlertTriangle,\n\tCheckCircle,\n\tHelpCircle,\n\tInfo,\n\tX,\n} from 'lucide-react';\nimport React, { cloneElement, isValidElement, memo, useId, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport { useNativeDialog, useOverlayActions } from './hooks';\nimport type { DrawerDirection, DrawerProps, OverlaySize, OverlayTone } from './overlays.types';\n\nconst WIDTH_CLASSES: Record<OverlaySize, string> = {\n\txs: 'max-w-xs',\n\tsm: 'max-w-sm',\n\tmd: 'max-w-md',\n\tlg: 'max-w-lg',\n\txl: 'max-w-xl',\n\t'2xl': 'max-w-2xl',\n\t'3xl': 'max-w-3xl',\n\t'4xl': 'max-w-4xl',\n\t'5xl': 'max-w-5xl',\n\tfull: 'max-w-[calc(100vw-2rem)]',\n};\n\nconst DIRECTION_STYLES: Record<\n\tDrawerDirection,\n\t{ position: string; size: string; animation: string; rounded: string }\n> = {\n\tright: {\n\t\tposition: 'fixed top-0 right-0 bottom-0',\n\t\tsize: 'h-full',\n\t\tanimation:\n\t\t\t'animate-in slide-in-from-right duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-right [&.closing]:duration-200',\n\t\trounded: 'rounded-l-xl',\n\t},\n\tleft: {\n\t\tposition: 'fixed top-0 left-0 bottom-0',\n\t\tsize: 'h-full',\n\t\tanimation:\n\t\t\t'animate-in slide-in-from-left duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-left [&.closing]:duration-200',\n\t\trounded: 'rounded-r-xl',\n\t},\n\ttop: {\n\t\tposition: 'fixed top-0 left-0 right-0',\n\t\tsize: 'w-full',\n\t\tanimation:\n\t\t\t'animate-in slide-in-from-top duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-top [&.closing]:duration-200',\n\t\trounded: 'rounded-b-xl',\n\t},\n\tbottom: {\n\t\tposition: 'fixed bottom-0 left-0 right-0',\n\t\tsize: 'w-full',\n\t\tanimation:\n\t\t\t'animate-in slide-in-from-bottom duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-bottom [&.closing]:duration-200',\n\t\trounded: 'rounded-t-xl',\n\t},\n};\n\nconst TONE_ICONS: Record<OverlayTone, ReactNode> = {\n\tdefault: <HelpCircle className=\"text-muted-foreground h-5 w-5\" />,\n\terror: <AlertCircle className=\"text-destructive h-5 w-5\" />,\n\twarning: <AlertTriangle className=\"text-warning h-5 w-5\" />,\n\tinfo: <Info className=\"text-info h-5 w-5\" />,\n\tsuccess: <CheckCircle className=\"text-success h-5 w-5\" />,\n};\n\nfunction DrawerImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = true,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmVariant = 'primary',\n\tconfirmStyle = 'solid',\n\tisLoading = false,\n\tformId,\n\tfooter,\n\temphasis = false,\n\ttone = 'default',\n\tshowIcon = false,\n\talertMessage,\n\tdirection = 'right',\n\twidth = 'lg',\n\tshowFooter = true,\n\ttrigger,\n}: DrawerProps) {\n\tconst drawerTitleId = useId();\n\tconst drawerDescriptionId = useId();\n\tconst ariaLabelledBy = title ? drawerTitleId : undefined;\n\tconst ariaDescribedBy = description ? drawerDescriptionId : undefined;\n\n\tconst {\n\t\tisOpen,\n\t\tisClosing,\n\t\topenDialog,\n\t\tcloseDialog,\n\t\tdialogProps,\n\t\thandleBackdropClick,\n\t} = useNativeDialog({\n\t\topen,\n\t\tonOpenChange,\n\t\tonClose,\n\t\tcloseOnEscape,\n\t\tcloseOnBackdropClick,\n\t\tinitialFocusRef,\n\t});\n\n\tconst {\n\t\tstrings,\n\t\tfinalConfirmVariant,\n\t\tconfirmButtonOnClick,\n\t\teffectiveLoading,\n\t\thandleCancel,\n\t} = useOverlayActions({\n\t\tcloseDialog,\n\t\tonConfirm,\n\t\tonAsyncConfirm,\n\t\tcloseOnAsyncComplete,\n\t\tconfirmVariant,\n\t\tisLoading,\n\t\tformId,\n\t\tonCancel,\n\t\tcustomStrings,\n\t\temphasis,\n\t\ttone,\n\t});\n\n\tconst directionStyles = DIRECTION_STYLES[direction];\n\tconst isHorizontal = direction === 'left' || direction === 'right';\n\tconst hasContent = Boolean(children || alertMessage);\n\tconst hasFooter = showFooter && (showCancel || showConfirm || footer);\n\n\tconst triggerElement =\n\t\ttrigger && isValidElement<Record<string, unknown>>(trigger) ? (\n\t\t\tcloneElement(trigger, {\n\t\t\t\tonClick: (e: React.MouseEvent) => {\n\t\t\t\t\tconst original = trigger.props.onClick as\n\t\t\t\t\t\t| ((e: React.MouseEvent) => void)\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\toriginal?.(e);\n\t\t\t\t\topenDialog();\n\t\t\t\t},\n\t\t\t})\n\t\t) : trigger ? (\n\t\t\t<span\n\t\t\t\trole=\"button\"\n\t\t\t\ttabIndex={0}\n\t\t\t\tonClick={openDialog}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\topenDialog();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t>\n\t\t\t\t{trigger}\n\t\t\t</span>\n\t\t) : null;\n\n\tif (!isOpen && !isClosing && !trigger) return null;\n\n\treturn (\n\t\t<>\n\t\t\t{triggerElement}\n\n\t\t\t{!!(isOpen || isClosing) &&\n\t\t\t\tcreatePortal(\n\t\t\t\t\t<div className=\"fixed inset-0 z-50\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'absolute inset-0 bg-foreground/50 backdrop-blur-[1px]',\n\t\t\t\t\t\t\t\t'transition-opacity duration-300',\n\t\t\t\t\t\t\t\tisClosing\n\t\t\t\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t\t\t\t: 'animate-in fade-in-0 duration-300',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={handleBackdropClick}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<dialog\n\t\t\t\t\t\t\t{...dialogProps}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'drawer--component inset-auto m-0 p-0',\n\t\t\t\t\t\t\t\tdirectionStyles.position,\n\t\t\t\t\t\t\t\tdirectionStyles.size,\n\t\t\t\t\t\t\t\t'border shadow-xl',\n\t\t\t\t\t\t\t\t'bg-background text-foreground',\n\t\t\t\t\t\t\t\tdirectionStyles.rounded,\n\t\t\t\t\t\t\t\tisHorizontal && 'w-full',\n\t\t\t\t\t\t\t\tisHorizontal && WIDTH_CLASSES[width],\n\t\t\t\t\t\t\t\t!isHorizontal && 'max-h-[85vh]',\n\t\t\t\t\t\t\t\tdirectionStyles.animation,\n\t\t\t\t\t\t\t\t'outline-none focus-visible:outline-none',\n\t\t\t\t\t\t\t\t'flex flex-col',\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\t\tonClick={closeDialog}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'absolute right-4 top-4 z-10 size-7 rounded-md p-0',\n\t\t\t\t\t\t\t\t\t'text-muted-foreground transition-colors',\n\t\t\t\t\t\t\t\t\t'hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t\t\t\t'disabled:pointer-events-none',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\taria-label={strings.close}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X className=\"h-4 w-4\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex items-start gap-3 px-6 pb-4 pt-6',\n\t\t\t\t\t\t\t\t\t\tvisuallyHideHeader && 'sr-only',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!!showIcon && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"shrink-0 pt-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t{TONE_ICONS[tone]}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1 pr-6\">\n\t\t\t\t\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={drawerTitleId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={drawerDescriptionId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-1\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!!hasContent && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex-1 overflow-auto px-6',\n\t\t\t\t\t\t\t\t\t\ttitle || description ? 'pb-6' : 'py-6',\n\t\t\t\t\t\t\t\t\t\tcontentClassName,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'mb-4 rounded-md border p-3',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'error' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-destructive/30 bg-destructive/5',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'warning' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-warning/40 bg-warning/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'info' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-info/40 bg-info/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'success' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-success/40 bg-success/10',\n\t\t\t\t\t\t\t\t\t\t\t\ttone === 'default' &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t'border-border bg-muted/40',\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{alertMessage}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{!!hasFooter && (\n\t\t\t\t\t\t\t\t<div className=\"border-t px-6 py-4\">\n\t\t\t\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end\">\n\t\t\t\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant={finalConfirmVariant}\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloadingLabels={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: strings.loading,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</dialog>\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const Drawer = memo(DrawerImpl);\nDrawer.displayName = 'Drawer';\n","import { AlertCircle, AlertTriangle, CheckCircle, HelpCircle, Info } from 'lucide-react';\nimport React, {\n\tcloneElement,\n\tisValidElement,\n\tmemo,\n\tuseId,\n\tuseMemo,\n\ttype ReactNode,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useNativeDialog, useOverlayActions } from './hooks';\nimport { defaultAlertDialogStrings } from './overlays.strings';\nimport type { AlertDialogProps, OverlayTone } from './overlays.types';\n\nconst TONE_STYLES: Record<OverlayTone, { icon: ReactNode; iconColor: string }> = {\n\tdefault: {\n\t\ticon: <HelpCircle className=\"h-6 w-6\" />,\n\t\ticonColor: 'text-muted-foreground',\n\t},\n\terror: { icon: <AlertCircle className=\"h-6 w-6\" />, iconColor: 'text-destructive' },\n\twarning: {\n\t\ticon: <AlertTriangle className=\"h-6 w-6\" />,\n\t\ticonColor: 'text-warning',\n\t},\n\tinfo: {\n\t\ticon: <Info className=\"h-6 w-6\" />,\n\t\ticonColor: 'text-info',\n\t},\n\tsuccess: {\n\t\ticon: <CheckCircle className=\"h-6 w-6\" />,\n\t\ticonColor: 'text-success',\n\t},\n};\n\nfunction AlertDialogImpl({\n\topen,\n\tonOpenChange,\n\tonClose,\n\tchildren,\n\ttitle,\n\tdescription,\n\tvisuallyHideHeader = false,\n\tclassName,\n\tcontentClassName,\n\tinitialFocusRef,\n\tcloseOnEscape = true,\n\tcloseOnBackdropClick = false,\n\tstrings: customStrings,\n\tshowCancel = true,\n\tshowConfirm = true,\n\tonCancel,\n\tonConfirm,\n\tonAsyncConfirm,\n\tcloseOnAsyncComplete = true,\n\tconfirmVariant,\n\tconfirmStyle = 'solid',\n\tisLoading = false,\n\tformId,\n\tfooter,\n\ttone = 'default',\n\tshowIcon = true,\n\talertMessage,\n\ttrigger,\n\tdestructive = false,\n}: AlertDialogProps) {\n\tconst alertTitleId = useId();\n\tconst alertDescriptionId = useId();\n\tconst ariaLabelledBy = title ? alertTitleId : undefined;\n\tconst ariaDescribedBy = description ? alertDescriptionId : undefined;\n\n\tconst {\n\t\tisOpen,\n\t\tisClosing,\n\t\topenDialog,\n\t\tcloseDialog,\n\t\tdialogProps,\n\t\thandleBackdropClick,\n\t} = useNativeDialog({\n\t\topen,\n\t\tonOpenChange,\n\t\tonClose,\n\t\tcloseOnEscape,\n\t\tcloseOnBackdropClick,\n\t\tinitialFocusRef,\n\t});\n\n\tconst mergedStrings = useStrings(defaultAlertDialogStrings, customStrings);\n\n\tconst resolvedConfirmVariant = useMemo(() => {\n\t\tif (destructive) return 'error' as const;\n\t\tif (confirmVariant) return confirmVariant;\n\t\tconst toneMap: Record<OverlayTone, string> = {\n\t\t\tdefault: 'primary',\n\t\t\terror: 'error',\n\t\t\twarning: 'warning',\n\t\t\tinfo: 'primary',\n\t\t\tsuccess: 'success',\n\t\t};\n\t\treturn toneMap[tone] as 'primary' | 'error' | 'warning' | 'success';\n\t}, [destructive, confirmVariant, tone]);\n\n\tconst { strings, confirmButtonOnClick, effectiveLoading, handleCancel } =\n\t\tuseOverlayActions({\n\t\t\tcloseDialog,\n\t\t\tonConfirm,\n\t\t\tonAsyncConfirm,\n\t\t\tcloseOnAsyncComplete,\n\t\t\tconfirmVariant: resolvedConfirmVariant,\n\t\t\tisLoading,\n\t\t\tformId,\n\t\t\tonCancel,\n\t\t\tcustomStrings: mergedStrings,\n\t\t});\n\n\tconst toneStyles = TONE_STYLES[tone];\n\n\tconst triggerElement =\n\t\ttrigger && isValidElement<Record<string, unknown>>(trigger) ? (\n\t\t\tcloneElement(trigger, {\n\t\t\t\tonClick: (e: React.MouseEvent) => {\n\t\t\t\t\tconst original = trigger.props.onClick as\n\t\t\t\t\t\t| ((e: React.MouseEvent) => void)\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\toriginal?.(e);\n\t\t\t\t\topenDialog();\n\t\t\t\t},\n\t\t\t})\n\t\t) : trigger ? (\n\t\t\t<span\n\t\t\t\trole=\"button\"\n\t\t\t\ttabIndex={0}\n\t\t\t\tonClick={openDialog}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\topenDialog();\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t>\n\t\t\t\t{trigger}\n\t\t\t</span>\n\t\t) : null;\n\n\tif (!isOpen && !isClosing && !trigger) return null;\n\n\treturn (\n\t\t<>\n\t\t\t{triggerElement}\n\n\t\t\t{!!(isOpen || isClosing) &&\n\t\t\t\tcreatePortal(\n\t\t\t\t\t<div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'absolute inset-0 bg-foreground/50 backdrop-blur-[1px]',\n\t\t\t\t\t\t\t\t'transition-opacity duration-200',\n\t\t\t\t\t\t\t\tisClosing\n\t\t\t\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t\t\t\t: 'animate-in fade-in-0 duration-200',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={handleBackdropClick}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<dialog\n\t\t\t\t\t\t\t{...dialogProps}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'alert-dialog--component relative z-10 m-0 w-full max-w-md p-0',\n\t\t\t\t\t\t\t\t'max-h-[90vh] flex flex-col',\n\t\t\t\t\t\t\t\t'rounded-lg border shadow-lg',\n\t\t\t\t\t\t\t\t'bg-background text-foreground',\n\t\t\t\t\t\t\t\t'animate-in fade-in-0 zoom-in-95 duration-200',\n\t\t\t\t\t\t\t\t'[&.closing]:animate-out [&.closing]:fade-out-0 [&.closing]:zoom-out-95 [&.closing]:duration-150',\n\t\t\t\t\t\t\t\t'outline-none focus-visible:outline-none',\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\trole=\"alertdialog\"\n\t\t\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"flex-1 overflow-auto p-6\">\n\t\t\t\t\t\t\t\t{!!showIcon && !visuallyHideHeader && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'error' && 'bg-destructive/10',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'warning' && 'bg-warning/15',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'info' && 'bg-info/15',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'success' && 'bg-success/15',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'default' && 'bg-muted',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<span className={toneStyles.iconColor}>\n\t\t\t\t\t\t\t\t\t\t\t{toneStyles.icon}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{!!(title || description) && (\n\t\t\t\t\t\t\t\t\t<div className={cn(visuallyHideHeader && 'sr-only')}>\n\t\t\t\t\t\t\t\t\t\t{!!title && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={alertTitleId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tid={alertDescriptionId}\n\t\t\t\t\t\t\t\t\t\t\t\ttag=\"p\"\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"mt-2\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{!!alertMessage && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'mt-4 rounded-md border p-3 text-left',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'error' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-destructive/30 bg-destructive/5',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'warning' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-warning/40 bg-warning/10',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'info' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-info/40 bg-info/10',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'success' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-success/40 bg-success/10',\n\t\t\t\t\t\t\t\t\t\t\ttone === 'default' &&\n\t\t\t\t\t\t\t\t\t\t\t\t'border-border bg-muted/40',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"p\">\n\t\t\t\t\t\t\t\t\t\t\t{alertMessage}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{!!children && (\n\t\t\t\t\t\t\t\t\t<div className={cn('mt-4', contentClassName)}>\n\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t{!!(showCancel || showConfirm || footer) && (\n\t\t\t\t\t\t\t\t<div className=\"border-t px-6 py-4\">\n\t\t\t\t\t\t\t\t\t{footer ?? (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end\">\n\t\t\t\t\t\t\t\t\t\t\t{!!showCancel && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleCancel}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full sm:w-auto\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.cancel}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t{!!showConfirm && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvariant={resolvedConfirmVariant}\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuttonStyle={confirmStyle}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={confirmButtonOnClick}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloading={effectiveLoading}\n\t\t\t\t\t\t\t\t\t\t\t\t\tloadingLabels={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tloading: strings.loading,\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full sm:w-auto\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.confirm}\n\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</dialog>\n\t\t\t\t\t</div>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n\nexport const AlertDialog = memo(AlertDialogImpl);\nAlertDialog.displayName = 'AlertDialog';\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=require("./chunk-CMqjfN_6.cjs"),t=require("../lib/strings.cjs"),n=require("../lib/utils.cjs"),r=require("./button-Bd5bEIiB.cjs"),i=require("./typography-CO9uwZhF.cjs");let a=require("react");a=e.t(a,1);let o=require("react/jsx-runtime"),s=require("lucide-react"),c=require("react-dom");var l=350,u=0;function d(){if(u===0){let e=window.innerWidth-document.documentElement.clientWidth;document.body.style.setProperty(`--overlay-scrollbar-width`,`${e}px`),document.documentElement.setAttribute(`data-overlay-scroll-locked`,``)}u+=1;let e=!1;return()=>{e||(e=!0,u=Math.max(0,u-1),!(u>0)&&(document.documentElement.removeAttribute(`data-overlay-scroll-locked`),document.body.style.removeProperty(`--overlay-scrollbar-width`)))}}function f({open:e,onOpenChange:t,onClose:n,closeOnEscape:r=!0,closeOnBackdropClick:i=!0,initialFocusRef:o}={}){let s=(0,a.useRef)(null),[c,u]=(0,a.useState)(!1),[f,p]=(0,a.useState)(!1),m=(0,a.useRef)(null),h=(0,a.useRef)(null),g=(0,a.useRef)(null),_=(0,a.useRef)(null),v=(0,a.useRef)(null),y=(0,a.useRef)(!1),b=e!==void 0,x=b?e:c,S=(0,a.useRef)(x);S.current=x;let C=(0,a.useRef)(f);C.current=f;let w=(0,a.useCallback)(e=>{b||u(e),t?.(e),e||n?.()},[b,t,n]),T=(0,a.useCallback)(()=>{g.current&&=(clearTimeout(g.current),null),_.current&&=(_.current(),null)},[]),E=(0,a.useCallback)(()=>{T(),y.current=!0;let e=m.current;m.current=null;let t=h.current;h.current=null;try{e?.()}catch{}try{w(!1)}catch{}p(!1);let n=s.current;n&&n.classList.remove(`closing`);try{t?.focus()}catch{}},[T,w]),D=(0,a.useCallback)(()=>{S.current||C.current||(h.current=document.activeElement,m.current=d(),w(!0),v.current=requestAnimationFrame(()=>{v.current=null,o?.current?o.current.focus():s.current?.focus()}))},[w,o]),O=(0,a.useCallback)(()=>{let e=s.current;if(!(!e||!S.current||C.current))if(p(!0),e.classList.add(`closing`),e.offsetHeight,getComputedStyle(e).animationName!==`none`){let t=()=>{E()};e.addEventListener(`animationend`,t,{once:!0}),_.current=()=>{e.removeEventListener(`animationend`,t)},g.current=setTimeout(()=>{E()},l)}else E()},[E]),k=(0,a.useCallback)(()=>{x?O():D()},[x,D,O]),A=(0,a.useCallback)(e=>{e.key===`Escape`&&r&&(e.preventDefault(),e.stopPropagation(),O())},[r,O]),j=(0,a.useCallback)(()=>{i&&O()},[i,O]);return(0,a.useEffect)(()=>{if(x&&!f)h.current||=document.activeElement,m.current||=d(),v.current!==null&&cancelAnimationFrame(v.current),v.current=requestAnimationFrame(()=>{v.current=null,o?.current?o.current.focus():s.current?.focus()});else if(!x){if(y.current){y.current=!1;return}if(m.current&&=(m.current(),null),f){T(),p(!1);let e=s.current;e&&e.classList.remove(`closing`)}if(h.current){try{h.current.focus()}catch{}h.current=null}}return()=>{v.current!==null&&(cancelAnimationFrame(v.current),v.current=null)}},[x,f,o,T]),(0,a.useEffect)(()=>()=>{T(),v.current!==null&&(cancelAnimationFrame(v.current),v.current=null),m.current&&=(m.current(),null)},[T]),{dialogRef:s,isOpen:x,isClosing:f,openDialog:D,closeDialog:O,toggleDialog:k,dialogProps:{ref:s,open:x,onKeyDown:A},handleBackdropClick:j}}var p={confirm:`Confirm`,cancel:`Cancel`,close:`Close`,loading:`Loading...`},m={confirm:`Continue`,cancel:`Cancel`,close:`Close`,loading:`Loading...`};function h({closeDialog:e,onConfirm:n,onAsyncConfirm:r,closeOnAsyncComplete:i=!0,confirmVariant:o=`primary`,isLoading:s=!1,formId:c,onCancel:l,customStrings:u,emphasis:d=!1,tone:f=`default`,onError:m}){let h=t.useStrings(p,u),[g,_]=(0,a.useState)(!1),v=(0,a.useCallback)(async()=>{if(n){n(),e();return}if(r){_(!0);try{await r(),i&&e()}catch(e){m?.(e)}finally{_(!1)}return}e()},[n,r,i,e,m]),y=(0,a.useCallback)(()=>{l?.(),e()},[l,e]),b=(0,a.useCallback)(async()=>{if(!c)return;let e=document.getElementById(c);e instanceof HTMLFormElement&&e.requestSubmit()},[c]);return{strings:h,isExecuting:g,handleConfirm:v,handleCancel:y,finalConfirmVariant:(0,a.useMemo)(()=>d?f===`error`?`error`:f===`warning`?`warning`:f===`success`?`success`:o??`primary`:o??`primary`,[d,f,o]),confirmButtonOnClick:c?b:v,effectiveLoading:g||s}}var g={xs:`max-w-xs`,sm:`max-w-sm`,md:`max-w-md`,lg:`max-w-lg`,xl:`max-w-xl`,"2xl":`max-w-2xl`,"3xl":`max-w-3xl`,"4xl":`max-w-4xl`,"5xl":`max-w-5xl`,full:`max-w-[calc(100vw-2rem)]`},_={default:{icon:(0,o.jsx)(s.HelpCircle,{className:`text-muted-foreground h-5 w-5`}),classes:``},error:{icon:(0,o.jsx)(s.AlertCircle,{className:`text-destructive h-5 w-5`}),classes:`border-destructive/50`},warning:{icon:(0,o.jsx)(s.AlertTriangle,{className:`text-warning h-5 w-5`}),classes:`border-warning/50`},info:{icon:(0,o.jsx)(s.Info,{className:`text-info h-5 w-5`}),classes:`border-info/50`},success:{icon:(0,o.jsx)(s.CheckCircle,{className:`text-success h-5 w-5`}),classes:`border-success/50`}};function v({open:e,onOpenChange:t,onClose:l,children:u,title:d,description:p,visuallyHideHeader:m=!1,className:v,contentClassName:y,initialFocusRef:b,closeOnEscape:x=!0,closeOnBackdropClick:S=!0,strings:C,showCancel:w=!0,showConfirm:T=!0,onCancel:E,onConfirm:D,onAsyncConfirm:O,closeOnAsyncComplete:k=!0,confirmVariant:A=`primary`,confirmStyle:j=`solid`,isLoading:ee=!1,formId:te,footer:M,emphasis:N=!1,tone:P=`default`,showIcon:F=!1,alertMessage:I,size:L=`lg`,trigger:R}){let z=(0,a.useId)(),B=(0,a.useId)(),V=d?z:void 0,H=p?B:void 0,{isOpen:U,isClosing:W,openDialog:G,closeDialog:K,dialogProps:q,handleBackdropClick:J}=f({open:e,onOpenChange:t,onClose:l,closeOnEscape:x,closeOnBackdropClick:S,initialFocusRef:b}),{strings:Y,finalConfirmVariant:X,confirmButtonOnClick:ne,effectiveLoading:Z,handleCancel:re}=h({closeDialog:K,onConfirm:D,onAsyncConfirm:O,closeOnAsyncComplete:k,confirmVariant:A,isLoading:ee,formId:te,onCancel:E,customStrings:C,emphasis:N,tone:P}),Q=_[P],ie=!!(u||I),ae=w||T||M,$=R&&(0,a.isValidElement)(R)?(0,a.cloneElement)(R,{onClick:e=>{let t=R.props.onClick;t?.(e),G()}}):R?(0,o.jsx)(`span`,{role:`button`,tabIndex:0,onClick:G,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),G())},className:`cursor-pointer`,children:R}):null;return!U&&!W&&!R?null:(0,o.jsxs)(o.Fragment,{children:[$,!!(U||W)&&(0,c.createPortal)((0,o.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-4`,children:[(0,o.jsx)(`div`,{className:n.cn(`absolute inset-0 bg-foreground/50 backdrop-blur-[1px]`,`transition-opacity duration-200`,W?`opacity-0`:`animate-in fade-in-0 duration-200`),onClick:J,"aria-hidden":`true`}),(0,o.jsxs)(`dialog`,{...q,className:n.cn(`dialog--component relative z-10 m-0 p-0`,`rounded-lg border shadow-lg`,`bg-background text-foreground`,`max-h-[90vh] w-full`,`flex flex-col`,g[L],`animate-in fade-in-0 zoom-in-95 duration-200`,`[&.closing]:animate-out [&.closing]:fade-out-0 [&.closing]:zoom-out-95 [&.closing]:duration-150`,`outline-none focus-visible:outline-none`,N&&Q.classes,v),"aria-modal":`true`,role:`dialog`,"aria-labelledby":V,"aria-describedby":H,children:[(0,o.jsx)(r.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,onClick:K,className:n.cn(`absolute right-3 top-3 z-10 size-7 rounded-md p-0`,`text-muted-foreground transition-colors`,`hover:bg-muted hover:text-foreground`,`disabled:pointer-events-none`),"aria-label":Y.close,children:(0,o.jsx)(s.X,{className:`h-4 w-4`})}),!!(d||p)&&(0,o.jsxs)(`div`,{className:n.cn(`flex gap-3 px-6 pb-4 pt-6`,F&&`items-start`,m&&`sr-only`),children:[!!F&&(0,o.jsx)(`div`,{className:`shrink-0 pt-0.5`,children:Q.icon}),(0,o.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[!!d&&(0,o.jsx)(i.s,{id:z,tag:`div`,size:`lg`,weight:`semibold`,className:`pr-6`,children:d}),!!p&&(0,o.jsx)(i.s,{id:B,tag:`p`,type:`secondary`,className:`mt-1`,children:p})]})]}),!!ie&&(0,o.jsxs)(`div`,{className:n.cn(`flex-1 overflow-auto px-6`,d||p?m?`py-6`:`pb-6`:`py-6`,y),children:[!!I&&(0,o.jsx)(`div`,{className:n.cn(`mb-4 rounded-md border p-3`,P===`error`&&`border-destructive/30 bg-destructive/5`,P===`warning`&&`border-warning/40 bg-warning/10`,P===`info`&&`border-info/40 bg-info/10`,P===`success`&&`border-success/40 bg-success/10`,P==="default"&&`border-border bg-muted/40`),children:(0,o.jsx)(i.s,{tag:`p`,children:I})}),u]}),!!ae&&(0,o.jsx)(`div`,{className:`border-t px-6 py-4`,children:M??(0,o.jsxs)(`div`,{className:`flex flex-col-reverse gap-3 sm:flex-row sm:justify-end`,children:[!!w&&(0,o.jsx)(r.t,{type:`button`,variant:`secondary`,buttonStyle:`outline`,onClick:re,children:Y.cancel}),!!T&&(0,o.jsx)(r.t,{type:`button`,variant:X,buttonStyle:j,onClick:ne,loading:Z,loadingLabels:{loading:Y.loading},children:Y.confirm})]})})]})]}),document.body)]})}var y=(0,a.memo)(v);y.displayName=`Dialog`;var b={xs:`max-w-xs`,sm:`max-w-sm`,md:`max-w-md`,lg:`max-w-lg`,xl:`max-w-xl`,"2xl":`max-w-2xl`,"3xl":`max-w-3xl`,"4xl":`max-w-4xl`,"5xl":`max-w-5xl`,full:`max-w-[calc(100vw-2rem)]`},x={right:{position:`fixed top-0 right-0 bottom-0`,size:`h-full`,animation:`animate-in slide-in-from-right duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-right [&.closing]:duration-200`,rounded:`rounded-l-xl`},left:{position:`fixed top-0 left-0 bottom-0`,size:`h-full`,animation:`animate-in slide-in-from-left duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-left [&.closing]:duration-200`,rounded:`rounded-r-xl`},top:{position:`fixed top-0 left-0 right-0`,size:`w-full`,animation:`animate-in slide-in-from-top duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-top [&.closing]:duration-200`,rounded:`rounded-b-xl`},bottom:{position:`fixed bottom-0 left-0 right-0`,size:`w-full`,animation:`animate-in slide-in-from-bottom duration-300 [&.closing]:animate-out [&.closing]:slide-out-to-bottom [&.closing]:duration-200`,rounded:`rounded-t-xl`}},S={default:(0,o.jsx)(s.HelpCircle,{className:`text-muted-foreground h-5 w-5`}),error:(0,o.jsx)(s.AlertCircle,{className:`text-destructive h-5 w-5`}),warning:(0,o.jsx)(s.AlertTriangle,{className:`text-warning h-5 w-5`}),info:(0,o.jsx)(s.Info,{className:`text-info h-5 w-5`}),success:(0,o.jsx)(s.CheckCircle,{className:`text-success h-5 w-5`})};function C({open:e,onOpenChange:t,onClose:l,children:u,title:d,description:p,visuallyHideHeader:m=!1,className:g,contentClassName:_,initialFocusRef:v,closeOnEscape:y=!0,closeOnBackdropClick:C=!0,strings:w,showCancel:T=!0,showConfirm:E=!0,onCancel:D,onConfirm:O,onAsyncConfirm:k,closeOnAsyncComplete:A=!0,confirmVariant:j=`primary`,confirmStyle:ee=`solid`,isLoading:te=!1,formId:M,footer:N,emphasis:P=!1,tone:F=`default`,showIcon:I=!1,alertMessage:L,direction:R=`right`,width:z=`lg`,showFooter:B=!0,trigger:V}){let H=(0,a.useId)(),U=(0,a.useId)(),W=d?H:void 0,G=p?U:void 0,{isOpen:K,isClosing:q,openDialog:J,closeDialog:Y,dialogProps:X,handleBackdropClick:ne}=f({open:e,onOpenChange:t,onClose:l,closeOnEscape:y,closeOnBackdropClick:C,initialFocusRef:v}),{strings:Z,finalConfirmVariant:re,confirmButtonOnClick:Q,effectiveLoading:ie,handleCancel:ae}=h({closeDialog:Y,onConfirm:O,onAsyncConfirm:k,closeOnAsyncComplete:A,confirmVariant:j,isLoading:te,formId:M,onCancel:D,customStrings:w,emphasis:P,tone:F}),$=x[R],oe=R===`left`||R===`right`,se=!!(u||L),ce=B&&(T||E||N),le=V&&(0,a.isValidElement)(V)?(0,a.cloneElement)(V,{onClick:e=>{let t=V.props.onClick;t?.(e),J()}}):V?(0,o.jsx)(`span`,{role:`button`,tabIndex:0,onClick:J,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),J())},className:`cursor-pointer`,children:V}):null;return!K&&!q&&!V?null:(0,o.jsxs)(o.Fragment,{children:[le,!!(K||q)&&(0,c.createPortal)((0,o.jsxs)(`div`,{className:`fixed inset-0 z-50`,children:[(0,o.jsx)(`div`,{className:n.cn(`absolute inset-0 bg-foreground/50 backdrop-blur-[1px]`,`transition-opacity duration-300`,q?`opacity-0`:`animate-in fade-in-0 duration-300`),onClick:ne,"aria-hidden":`true`}),(0,o.jsxs)(`dialog`,{...X,className:n.cn(`drawer--component inset-auto m-0 p-0`,$.position,$.size,`border shadow-xl`,`bg-background text-foreground`,$.rounded,oe&&`w-full`,oe&&b[z],!oe&&`max-h-[85vh]`,$.animation,`outline-none focus-visible:outline-none`,`flex flex-col`,g),"aria-modal":`true`,role:`dialog`,"aria-labelledby":W,"aria-describedby":G,children:[(0,o.jsx)(r.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,onClick:Y,className:n.cn(`absolute right-4 top-4 z-10 size-7 rounded-md p-0`,`text-muted-foreground transition-colors`,`hover:bg-muted hover:text-foreground`,`disabled:pointer-events-none`),"aria-label":Z.close,children:(0,o.jsx)(s.X,{className:`h-4 w-4`})}),!!(d||p)&&(0,o.jsxs)(`div`,{className:n.cn(`flex items-start gap-3 px-6 pb-4 pt-6`,m&&`sr-only`),children:[!!I&&(0,o.jsx)(`div`,{className:`shrink-0 pt-0.5`,children:S[F]}),(0,o.jsxs)(`div`,{className:`min-w-0 flex-1 pr-6`,children:[!!d&&(0,o.jsx)(i.s,{id:H,tag:`div`,size:`lg`,weight:`semibold`,children:d}),!!p&&(0,o.jsx)(i.s,{id:U,tag:`p`,type:`secondary`,className:`mt-1`,children:p})]})]}),!!se&&(0,o.jsxs)(`div`,{className:n.cn(`flex-1 overflow-auto px-6`,d||p?`pb-6`:`py-6`,_),children:[!!L&&(0,o.jsx)(`div`,{className:n.cn(`mb-4 rounded-md border p-3`,F===`error`&&`border-destructive/30 bg-destructive/5`,F===`warning`&&`border-warning/40 bg-warning/10`,F===`info`&&`border-info/40 bg-info/10`,F===`success`&&`border-success/40 bg-success/10`,F==="default"&&`border-border bg-muted/40`),children:(0,o.jsx)(i.s,{tag:`p`,children:L})}),u]}),!!ce&&(0,o.jsx)(`div`,{className:`border-t px-6 py-4`,children:N??(0,o.jsxs)(`div`,{className:`flex flex-col-reverse gap-3 sm:flex-row sm:justify-end`,children:[!!T&&(0,o.jsx)(r.t,{type:`button`,variant:`secondary`,buttonStyle:`outline`,onClick:ae,children:Z.cancel}),!!E&&(0,o.jsx)(r.t,{type:`button`,variant:re,buttonStyle:ee,onClick:Q,loading:ie,loadingLabels:{loading:Z.loading},children:Z.confirm})]})})]})]}),document.body)]})}var w=(0,a.memo)(C);w.displayName=`Drawer`;var T={default:{icon:(0,o.jsx)(s.HelpCircle,{className:`h-6 w-6`}),iconColor:`text-muted-foreground`},error:{icon:(0,o.jsx)(s.AlertCircle,{className:`h-6 w-6`}),iconColor:`text-destructive`},warning:{icon:(0,o.jsx)(s.AlertTriangle,{className:`h-6 w-6`}),iconColor:`text-warning`},info:{icon:(0,o.jsx)(s.Info,{className:`h-6 w-6`}),iconColor:`text-info`},success:{icon:(0,o.jsx)(s.CheckCircle,{className:`h-6 w-6`}),iconColor:`text-success`}};function E({open:e,onOpenChange:s,onClose:l,children:u,title:d,description:p,visuallyHideHeader:g=!1,className:_,contentClassName:v,initialFocusRef:y,closeOnEscape:b=!0,closeOnBackdropClick:x=!1,strings:S,showCancel:C=!0,showConfirm:w=!0,onCancel:E,onConfirm:D,onAsyncConfirm:O,closeOnAsyncComplete:k=!0,confirmVariant:A,confirmStyle:j=`solid`,isLoading:ee=!1,formId:te,footer:M,tone:N=`default`,showIcon:P=!0,alertMessage:F,trigger:I,destructive:L=!1}){let R=(0,a.useId)(),z=(0,a.useId)(),B=d?R:void 0,V=p?z:void 0,{isOpen:H,isClosing:U,openDialog:W,closeDialog:G,dialogProps:K,handleBackdropClick:q}=f({open:e,onOpenChange:s,onClose:l,closeOnEscape:b,closeOnBackdropClick:x,initialFocusRef:y}),J=t.useStrings(m,S),Y=(0,a.useMemo)(()=>L?`error`:A||{default:`primary`,error:`error`,warning:`warning`,info:`primary`,success:`success`}[N],[L,A,N]),{strings:X,confirmButtonOnClick:ne,effectiveLoading:Z,handleCancel:re}=h({closeDialog:G,onConfirm:D,onAsyncConfirm:O,closeOnAsyncComplete:k,confirmVariant:Y,isLoading:ee,formId:te,onCancel:E,customStrings:J}),Q=T[N],ie=I&&(0,a.isValidElement)(I)?(0,a.cloneElement)(I,{onClick:e=>{let t=I.props.onClick;t?.(e),W()}}):I?(0,o.jsx)(`span`,{role:`button`,tabIndex:0,onClick:W,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),W())},className:`cursor-pointer`,children:I}):null;return!H&&!U&&!I?null:(0,o.jsxs)(o.Fragment,{children:[ie,!!(H||U)&&(0,c.createPortal)((0,o.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-4`,children:[(0,o.jsx)(`div`,{className:n.cn(`absolute inset-0 bg-foreground/50 backdrop-blur-[1px]`,`transition-opacity duration-200`,U?`opacity-0`:`animate-in fade-in-0 duration-200`),onClick:q,"aria-hidden":`true`}),(0,o.jsxs)(`dialog`,{...K,className:n.cn(`alert-dialog--component relative z-10 m-0 w-full max-w-md p-0`,`max-h-[90vh] flex flex-col`,`rounded-lg border shadow-lg`,`bg-background text-foreground`,`animate-in fade-in-0 zoom-in-95 duration-200`,`[&.closing]:animate-out [&.closing]:fade-out-0 [&.closing]:zoom-out-95 [&.closing]:duration-150`,`outline-none focus-visible:outline-none`,_),role:`alertdialog`,"aria-modal":`true`,"aria-labelledby":B,"aria-describedby":V,children:[(0,o.jsxs)(`div`,{className:`flex-1 overflow-auto p-6`,children:[!!P&&!g&&(0,o.jsx)(`div`,{className:n.cn(`mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full`,N===`error`&&`bg-destructive/10`,N===`warning`&&`bg-warning/15`,N===`info`&&`bg-info/15`,N===`success`&&`bg-success/15`,N==="default"&&`bg-muted`),children:(0,o.jsx)(`span`,{className:Q.iconColor,children:Q.icon})}),!!(d||p)&&(0,o.jsxs)(`div`,{className:n.cn(g&&`sr-only`),children:[!!d&&(0,o.jsx)(i.s,{id:R,tag:`div`,size:`lg`,weight:`semibold`,align:`center`,children:d}),!!p&&(0,o.jsx)(i.s,{id:z,tag:`p`,type:`secondary`,align:`center`,className:`mt-2`,children:p})]}),!!F&&(0,o.jsx)(`div`,{className:n.cn(`mt-4 rounded-md border p-3 text-left`,N===`error`&&`border-destructive/30 bg-destructive/5`,N===`warning`&&`border-warning/40 bg-warning/10`,N===`info`&&`border-info/40 bg-info/10`,N===`success`&&`border-success/40 bg-success/10`,N==="default"&&`border-border bg-muted/40`),children:(0,o.jsx)(i.s,{tag:`p`,children:F})}),!!u&&(0,o.jsx)(`div`,{className:n.cn(`mt-4`,v),children:u})]}),!!(C||w||M)&&(0,o.jsx)(`div`,{className:`border-t px-6 py-4`,children:M??(0,o.jsxs)(`div`,{className:`flex flex-col-reverse gap-3 sm:flex-row sm:justify-end`,children:[!!C&&(0,o.jsx)(r.t,{type:`button`,variant:`secondary`,buttonStyle:`outline`,onClick:re,className:`w-full sm:w-auto`,children:X.cancel}),!!w&&(0,o.jsx)(r.t,{type:`button`,variant:Y,buttonStyle:j,onClick:ne,loading:Z,loadingLabels:{loading:X.loading},className:`w-full sm:w-auto`,children:X.confirm})]})})]})]}),document.body)]})}var D=(0,a.memo)(E);D.displayName=`AlertDialog`,Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return D}});
|
|
2
|
-
//# sourceMappingURL=overlays-Diy_H0Au.cjs.map
|