@customafk/lunas-ui 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -9
- package/ai-docs.md +419 -0
- package/dist/alert-5MxGtf3j.d.mts +88 -0
- package/dist/alert-DIC1_ymv.cjs +2 -0
- package/dist/alert-DIC1_ymv.cjs.map +1 -0
- package/dist/alert-DwdUOFaC.d.cts +88 -0
- package/dist/alert-VP3giy31.mjs +2 -0
- package/dist/alert-VP3giy31.mjs.map +1 -0
- package/dist/avatar-CTS9-raY.cjs +2 -0
- package/dist/avatar-CTS9-raY.cjs.map +1 -0
- package/dist/avatar-DbxqvCjT.mjs +2 -0
- package/dist/avatar-DbxqvCjT.mjs.map +1 -0
- package/dist/badge-B8bw2UEY.mjs +2 -0
- package/dist/badge-B8bw2UEY.mjs.map +1 -0
- package/dist/badge-BFTGDsBm.d.cts +42 -0
- package/dist/badge-sL8O2yfv.d.mts +42 -0
- package/dist/badge-uQ0pIZbQ.cjs +2 -0
- package/dist/badge-uQ0pIZbQ.cjs.map +1 -0
- package/dist/button-BlQb81It.d.mts +174 -0
- package/dist/button-C6ybzxxj.mjs +2 -0
- package/dist/button-C6ybzxxj.mjs.map +1 -0
- package/dist/button-CEOQ3-82.d.cts +174 -0
- package/dist/button-CwDT3m4m.cjs +2 -0
- package/dist/button-CwDT3m4m.cjs.map +1 -0
- package/dist/button.variants-DeCyas1F.mjs +2 -0
- package/dist/button.variants-DeCyas1F.mjs.map +1 -0
- package/dist/button.variants-tnhb123u.cjs +2 -0
- package/dist/button.variants-tnhb123u.cjs.map +1 -0
- package/dist/{calendar-CG-WMM8e.cjs → calendar-CyAPpT2m.cjs} +2 -2
- package/dist/calendar-CyAPpT2m.cjs.map +1 -0
- package/dist/calendar-JKxWM6AF.mjs +2 -0
- package/dist/calendar-JKxWM6AF.mjs.map +1 -0
- package/dist/cards/grid-product-card.cjs +1 -1
- package/dist/cards/grid-product-card.cjs.map +1 -1
- package/dist/cards/grid-product-card.d.cts +23 -0
- package/dist/cards/grid-product-card.d.mts +23 -0
- package/dist/cards/grid-product-card.mjs +1 -1
- package/dist/cards/grid-product-card.mjs.map +1 -1
- package/dist/cards/product-card.cjs +1 -1
- package/dist/cards/product-card.cjs.map +1 -1
- package/dist/cards/product-card.d.cts +23 -0
- package/dist/cards/product-card.d.mts +23 -0
- package/dist/cards/product-card.mjs +1 -1
- package/dist/cards/product-card.mjs.map +1 -1
- package/dist/cards/simple-card.cjs +1 -1
- package/dist/cards/simple-card.cjs.map +1 -1
- package/dist/cards/simple-card.d.cts +16 -0
- package/dist/cards/simple-card.d.mts +16 -0
- package/dist/cards/simple-card.mjs +1 -1
- package/dist/cards/simple-card.mjs.map +1 -1
- package/dist/{checkbox-Bg2FiuQw.mjs → checkbox-DJEdYOjA.mjs} +2 -2
- package/dist/checkbox-DJEdYOjA.mjs.map +1 -0
- package/dist/{checkbox-C0fSWwmD.cjs → checkbox-RZrRNYP2.cjs} +2 -2
- package/dist/checkbox-RZrRNYP2.cjs.map +1 -0
- package/dist/close-BU0kWRVo.mjs +2 -0
- package/dist/{close-DfuHB7kq.mjs.map → close-BU0kWRVo.mjs.map} +1 -1
- package/dist/close-DXk_H3Gt.cjs +2 -0
- package/dist/{close-D_Ge7gnP.cjs.map → close-DXk_H3Gt.cjs.map} +1 -1
- package/dist/cms-layout-Dc4moos1.cjs +2 -0
- package/dist/cms-layout-Dc4moos1.cjs.map +1 -0
- package/dist/cms-layout-HfnOQS16.mjs +2 -0
- package/dist/cms-layout-HfnOQS16.mjs.map +1 -0
- package/dist/{command-_zpTaaIk.cjs → command-SHd-d_o0.cjs} +2 -2
- package/dist/command-SHd-d_o0.cjs.map +1 -0
- package/dist/{command-DhBTNTqz.mjs → command-bpcnKEbR.mjs} +2 -2
- package/dist/command-bpcnKEbR.mjs.map +1 -0
- package/dist/data-display/country.cjs +1 -1
- package/dist/data-display/country.cjs.map +1 -1
- package/dist/data-display/country.d.cts +15 -3
- package/dist/data-display/country.d.mts +15 -3
- package/dist/data-display/country.mjs +1 -1
- package/dist/data-display/country.mjs.map +1 -1
- package/dist/data-display/data-list.cjs +1 -1
- package/dist/data-display/data-list.cjs.map +1 -1
- package/dist/data-display/data-list.d.cts +31 -2
- package/dist/data-display/data-list.d.mts +31 -2
- package/dist/data-display/data-list.mjs +1 -1
- package/dist/data-display/data-list.mjs.map +1 -1
- package/dist/data-display/date-tooltip.cjs +1 -1
- package/dist/data-display/date-tooltip.cjs.map +1 -1
- package/dist/data-display/date-tooltip.d.cts +13 -2
- package/dist/data-display/date-tooltip.d.mts +13 -2
- package/dist/data-display/date-tooltip.mjs +1 -1
- package/dist/data-display/date-tooltip.mjs.map +1 -1
- package/dist/data-display/date.cjs +1 -1
- package/dist/data-display/date.d.cts +28 -2
- package/dist/data-display/date.d.mts +28 -2
- package/dist/data-display/date.mjs +1 -1
- package/dist/data-display/empty.cjs +1 -1
- package/dist/data-display/empty.cjs.map +1 -1
- package/dist/data-display/empty.d.cts +17 -3
- package/dist/data-display/empty.d.mts +17 -3
- package/dist/data-display/empty.mjs +1 -1
- package/dist/data-display/empty.mjs.map +1 -1
- package/dist/data-display/name.cjs +1 -1
- package/dist/data-display/name.cjs.map +1 -1
- package/dist/data-display/name.d.cts +12 -1
- package/dist/data-display/name.d.mts +12 -1
- package/dist/data-display/name.mjs +1 -1
- package/dist/data-display/name.mjs.map +1 -1
- package/dist/data-display/phone-number.cjs +1 -1
- package/dist/data-display/phone-number.cjs.map +1 -1
- package/dist/data-display/phone-number.d.cts +14 -2
- package/dist/data-display/phone-number.d.mts +14 -2
- package/dist/data-display/phone-number.mjs +1 -1
- package/dist/data-display/phone-number.mjs.map +1 -1
- package/dist/data-display/role-badge.cjs +1 -1
- package/dist/data-display/role-badge.cjs.map +1 -1
- package/dist/data-display/role-badge.d.cts +15 -3
- package/dist/data-display/role-badge.d.mts +15 -3
- package/dist/data-display/role-badge.mjs +1 -1
- package/dist/data-display/role-badge.mjs.map +1 -1
- package/dist/data-display/statistic.cjs +1 -1
- package/dist/data-display/statistic.cjs.map +1 -1
- package/dist/data-display/statistic.d.cts +35 -6
- package/dist/data-display/statistic.d.mts +35 -6
- package/dist/data-display/statistic.mjs +1 -1
- package/dist/data-display/statistic.mjs.map +1 -1
- package/dist/data-display/user.cjs +1 -2
- package/dist/data-display/user.d.cts +14 -1
- package/dist/data-display/user.d.mts +14 -1
- package/dist/data-display/user.mjs +1 -2
- package/dist/date-CVz9xdCg.mjs +2 -0
- package/dist/date-CVz9xdCg.mjs.map +1 -0
- package/dist/date-a3RI5Pwo.cjs +2 -0
- package/dist/date-a3RI5Pwo.cjs.map +1 -0
- package/dist/dialog-Bah7jLoO.d.cts +90 -0
- package/dist/dialog-BchwY6-N.mjs +2 -0
- package/dist/dialog-BchwY6-N.mjs.map +1 -0
- package/dist/dialog-DSg5IKmb.d.mts +90 -0
- package/dist/dialog-o_68LQXd.cjs +2 -0
- package/dist/dialog-o_68LQXd.cjs.map +1 -0
- package/dist/dialogs/confirm-dialog.cjs +1 -1
- package/dist/dialogs/confirm-dialog.cjs.map +1 -1
- package/dist/dialogs/confirm-dialog.d.cts +129 -3
- package/dist/dialogs/confirm-dialog.d.mts +129 -3
- package/dist/dialogs/confirm-dialog.mjs +1 -1
- package/dist/dialogs/confirm-dialog.mjs.map +1 -1
- package/dist/dialogs/detail-dialog/components/sidebar.cjs +1 -2
- package/dist/dialogs/detail-dialog/components/sidebar.d.cts +71 -24
- package/dist/dialogs/detail-dialog/components/sidebar.d.mts +71 -24
- package/dist/dialogs/detail-dialog/components/sidebar.mjs +1 -2
- package/dist/dialogs/detail-dialog/index.cjs +1 -1
- package/dist/dialogs/detail-dialog/index.cjs.map +1 -1
- package/dist/dialogs/detail-dialog/index.d.cts +37 -8
- package/dist/dialogs/detail-dialog/index.d.mts +37 -8
- package/dist/dialogs/detail-dialog/index.mjs +1 -1
- package/dist/dialogs/detail-dialog/index.mjs.map +1 -1
- package/dist/dialogs/error-dialog.cjs +1 -1
- package/dist/dialogs/error-dialog.cjs.map +1 -1
- package/dist/dialogs/error-dialog.d.cts +18 -4
- package/dist/dialogs/error-dialog.d.mts +18 -4
- package/dist/dialogs/error-dialog.mjs +1 -1
- package/dist/dialogs/error-dialog.mjs.map +1 -1
- package/dist/dialogs/loading-dialog.cjs +1 -1
- package/dist/dialogs/loading-dialog.cjs.map +1 -1
- package/dist/dialogs/loading-dialog.d.cts +15 -3
- package/dist/dialogs/loading-dialog.d.mts +15 -3
- package/dist/dialogs/loading-dialog.mjs +1 -1
- package/dist/dialogs/loading-dialog.mjs.map +1 -1
- package/dist/{dist-CvmzZ_6C.mjs → dist-CIN9T2FB.mjs} +1 -1
- package/dist/{dist-CvmzZ_6C.mjs.map → dist-CIN9T2FB.mjs.map} +1 -1
- package/dist/{dist-BudM04oj.cjs → dist-Dh8WwRa8.cjs} +1 -1
- package/dist/{dist-BudM04oj.cjs.map → dist-Dh8WwRa8.cjs.map} +1 -1
- package/dist/dropdown-menu-Ct9BLGfa.cjs +2 -0
- package/dist/dropdown-menu-Ct9BLGfa.cjs.map +1 -0
- package/dist/dropdown-menu-DWSfXhHo.mjs +2 -0
- package/dist/dropdown-menu-DWSfXhHo.mjs.map +1 -0
- package/dist/features/descriptions/index.cjs +1 -1
- package/dist/features/descriptions/index.cjs.map +1 -1
- package/dist/features/descriptions/index.d.cts +158 -19
- package/dist/features/descriptions/index.d.mts +158 -19
- package/dist/features/descriptions/index.mjs +1 -1
- package/dist/features/descriptions/index.mjs.map +1 -1
- package/dist/features/search-modal/index.cjs +1 -2
- package/dist/features/search-modal/index.d.cts +12 -2
- package/dist/features/search-modal/index.d.mts +12 -2
- package/dist/features/search-modal/index.mjs +1 -2
- package/dist/features/tables/index.cjs +1 -2
- package/dist/features/tables/index.d.cts +746 -24
- package/dist/features/tables/index.d.mts +742 -20
- package/dist/features/tables/index.mjs +1 -2
- package/dist/features/tanstack-form/index.cjs +1 -2
- package/dist/features/tanstack-form/index.d.cts +2 -1786
- package/dist/features/tanstack-form/index.d.mts +2 -1786
- package/dist/features/tanstack-form/index.mjs +1 -2
- package/dist/field-CXVnw75a.mjs +2 -0
- package/dist/field-CXVnw75a.mjs.map +1 -0
- package/dist/field-CppNvoxV.cjs +2 -0
- package/dist/field-CppNvoxV.cjs.map +1 -0
- package/dist/{flex-BP8sTi70.mjs → flex-BLMTj7Ev.mjs} +2 -2
- package/dist/flex-BLMTj7Ev.mjs.map +1 -0
- package/dist/{flex-twCgWyx1.cjs → flex-BbbogTsZ.cjs} +2 -2
- package/dist/flex-BbbogTsZ.cjs.map +1 -0
- package/dist/heading-AKz5ewy-.cjs +2 -0
- package/dist/heading-AKz5ewy-.cjs.map +1 -0
- package/dist/heading-DN67djxs.mjs +2 -0
- package/dist/heading-DN67djxs.mjs.map +1 -0
- package/dist/{image-DuFv8sPr.cjs → image-B1Dm5LWk.cjs} +2 -2
- package/dist/image-B1Dm5LWk.cjs.map +1 -0
- package/dist/{image-CS_Q0WA7.mjs → image-BlzrSaoE.mjs} +2 -2
- package/dist/image-BlzrSaoE.mjs.map +1 -0
- package/dist/index-D4shnfqM.d.cts +2030 -0
- package/dist/index-Dktb6D35.d.mts +2030 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +90 -0
- package/dist/index.d.mts +90 -0
- package/dist/index.mjs +1 -0
- package/dist/{input-DBtIgQB6.mjs → input-Cd0G5y-9.mjs} +2 -2
- package/dist/input-Cd0G5y-9.mjs.map +1 -0
- package/dist/{input-BFWWaN-v.cjs → input-Cl5VkKQh.cjs} +2 -2
- package/dist/input-Cl5VkKQh.cjs.map +1 -0
- package/dist/input-DAGzv97v.d.mts +44 -0
- package/dist/input-DPLvx5x8.d.cts +44 -0
- package/dist/{label-BzfsTrVt.cjs → label-DkMTQ3Ch.cjs} +2 -2
- package/dist/label-DkMTQ3Ch.cjs.map +1 -0
- package/dist/label-OmlGaZ5h.mjs +2 -0
- package/dist/label-OmlGaZ5h.mjs.map +1 -0
- package/dist/layouts/cms-layout/index.cjs +1 -2
- package/dist/layouts/cms-layout/index.d.cts +66 -13
- package/dist/layouts/cms-layout/index.d.mts +66 -13
- package/dist/layouts/cms-layout/index.mjs +1 -2
- package/dist/layouts/flex.cjs +1 -1
- package/dist/layouts/flex.d.cts +90 -6
- package/dist/layouts/flex.d.mts +93 -9
- package/dist/layouts/flex.mjs +1 -1
- package/dist/layouts/grid.cjs +1 -1
- package/dist/layouts/grid.cjs.map +1 -1
- package/dist/layouts/grid.d.cts +14 -0
- package/dist/layouts/grid.d.mts +14 -0
- package/dist/layouts/grid.mjs +1 -1
- package/dist/layouts/grid.mjs.map +1 -1
- package/dist/layouts/payment-layout/index.cjs +1 -2
- package/dist/layouts/payment-layout/index.d.cts +35 -0
- package/dist/layouts/payment-layout/index.d.mts +35 -0
- package/dist/layouts/payment-layout/index.mjs +1 -2
- package/dist/pages/FeatureDeveloping.cjs +1 -1
- package/dist/pages/FeatureDeveloping.cjs.map +1 -1
- package/dist/pages/FeatureDeveloping.d.cts +21 -3
- package/dist/pages/FeatureDeveloping.d.mts +21 -3
- package/dist/pages/FeatureDeveloping.mjs +1 -1
- package/dist/pages/FeatureDeveloping.mjs.map +1 -1
- package/dist/pages/FeatureFixing.cjs +1 -1
- package/dist/pages/FeatureFixing.cjs.map +1 -1
- package/dist/pages/FeatureFixing.d.cts +21 -3
- package/dist/pages/FeatureFixing.d.mts +21 -3
- package/dist/pages/FeatureFixing.mjs +1 -1
- package/dist/pages/FeatureFixing.mjs.map +1 -1
- package/dist/pages/NotAuthorized.cjs +1 -1
- package/dist/pages/NotAuthorized.cjs.map +1 -1
- package/dist/pages/NotAuthorized.d.cts +21 -3
- package/dist/pages/NotAuthorized.d.mts +21 -3
- package/dist/pages/NotAuthorized.mjs +1 -1
- package/dist/pages/NotAuthorized.mjs.map +1 -1
- package/dist/pages/NotFound.cjs +1 -1
- package/dist/pages/NotFound.cjs.map +1 -1
- package/dist/pages/NotFound.d.cts +21 -3
- package/dist/pages/NotFound.d.mts +21 -3
- package/dist/pages/NotFound.mjs +1 -1
- package/dist/pages/NotFound.mjs.map +1 -1
- package/dist/paragraph-Ch5TvEqL.mjs +2 -0
- package/dist/paragraph-Ch5TvEqL.mjs.map +1 -0
- package/dist/paragraph-DN85Huc4.cjs +2 -0
- package/dist/paragraph-DN85Huc4.cjs.map +1 -0
- package/dist/payment-layout-Da29dHJe.cjs +2 -0
- package/dist/payment-layout-Da29dHJe.cjs.map +1 -0
- package/dist/payment-layout-wN5c7MCM.mjs +2 -0
- package/dist/payment-layout-wN5c7MCM.mjs.map +1 -0
- package/dist/{popover-DzDrgttC.cjs → popover-AEt-aSy3.cjs} +2 -2
- package/dist/popover-AEt-aSy3.cjs.map +1 -0
- package/dist/popover-OJXFbqJi.mjs +2 -0
- package/dist/popover-OJXFbqJi.mjs.map +1 -0
- package/dist/{radio-group-CBhRsUjN.cjs → radio-group-BWLdQw7M.cjs} +2 -2
- package/dist/radio-group-BWLdQw7M.cjs.map +1 -0
- package/dist/{radio-group-Cem8O6BK.mjs → radio-group-CAgfOr7-.mjs} +2 -2
- package/dist/radio-group-CAgfOr7-.mjs.map +1 -0
- package/dist/{resizable-mlGS6Zto.cjs → resizable-D6UKwvFa.cjs} +2 -2
- package/dist/resizable-D6UKwvFa.cjs.map +1 -0
- package/dist/{resizable-DXHfkbaz.mjs → resizable-DWh_mp5P.mjs} +2 -2
- package/dist/resizable-DWh_mp5P.mjs.map +1 -0
- package/dist/search-modal-BxjKY8I7.mjs +2 -0
- package/dist/search-modal-BxjKY8I7.mjs.map +1 -0
- package/dist/search-modal-C-jNqQI1.cjs +2 -0
- package/dist/search-modal-C-jNqQI1.cjs.map +1 -0
- package/dist/{select-2CgwiefV.cjs → select-Py_t2nX1.cjs} +2 -2
- package/dist/select-Py_t2nX1.cjs.map +1 -0
- package/dist/{select-CivtMKTM.mjs → select-Ze8Fq88G.mjs} +2 -2
- package/dist/select-Ze8Fq88G.mjs.map +1 -0
- package/dist/separator-BMsbHAVt.mjs +2 -0
- package/dist/separator-BMsbHAVt.mjs.map +1 -0
- package/dist/{separator-C3ip6sbh.cjs → separator-BwZb12bh.cjs} +2 -2
- package/dist/separator-BwZb12bh.cjs.map +1 -0
- package/dist/{sheet-5MJRtrfG.cjs → sheet-CaDXTx7n.cjs} +2 -2
- package/dist/sheet-CaDXTx7n.cjs.map +1 -0
- package/dist/{sheet-oadGRiie.mjs → sheet-DMIqn1iv.mjs} +2 -2
- package/dist/sheet-DMIqn1iv.mjs.map +1 -0
- package/dist/sidebar-C27_pwLR.cjs +2 -0
- package/dist/sidebar-C27_pwLR.cjs.map +1 -0
- package/dist/sidebar-meLttL0V.mjs +2 -0
- package/dist/sidebar-meLttL0V.mjs.map +1 -0
- package/dist/skeleton-BPxcW2yu.mjs +2 -0
- package/dist/skeleton-BPxcW2yu.mjs.map +1 -0
- package/dist/skeleton-BfMCjXYM.cjs +2 -0
- package/dist/skeleton-BfMCjXYM.cjs.map +1 -0
- package/dist/spinner-EgMJOaQi.mjs +2 -0
- package/dist/spinner-EgMJOaQi.mjs.map +1 -0
- package/dist/spinner-MKXqwF9G.cjs +2 -0
- package/dist/spinner-MKXqwF9G.cjs.map +1 -0
- package/dist/systems/google.cjs.map +1 -1
- package/dist/systems/google.d.cts +36 -0
- package/dist/systems/google.d.mts +36 -0
- package/dist/systems/google.mjs.map +1 -1
- package/dist/tables-CmOVrvXM.cjs +2 -0
- package/dist/tables-CmOVrvXM.cjs.map +1 -0
- package/dist/tables-cBo0_szt.mjs +2 -0
- package/dist/tables-cBo0_szt.mjs.map +1 -0
- package/dist/tanstack-form-BmV2BXDz.cjs +2 -0
- package/dist/tanstack-form-BmV2BXDz.cjs.map +1 -0
- package/dist/tanstack-form-CJ43hVb_.mjs +2 -0
- package/dist/tanstack-form-CJ43hVb_.mjs.map +1 -0
- package/dist/{textarea-COQoSVSc.cjs → textarea-BsgmN4jy.cjs} +2 -2
- package/dist/textarea-BsgmN4jy.cjs.map +1 -0
- package/dist/{textarea-bLtmb71c.mjs → textarea-CdGSEkZB.mjs} +2 -2
- package/dist/textarea-CdGSEkZB.mjs.map +1 -0
- package/dist/tooltip-Bj0iOG4s.mjs +2 -0
- package/dist/tooltip-Bj0iOG4s.mjs.map +1 -0
- package/dist/{tooltip-DC6i1A25.cjs → tooltip-itUmYz9k.cjs} +2 -2
- package/dist/tooltip-itUmYz9k.cjs.map +1 -0
- package/dist/{types-Bd0JePtp.d.cts → types-B_32Ieia.d.mts} +1 -1
- package/dist/{types-BpHcqlOI.d.mts → types-CDYHkcOk.d.cts} +1 -1
- package/dist/{types-DBD4LOem.mjs → types-DNphnTW-.mjs} +1 -1
- package/dist/{types-DBD4LOem.mjs.map → types-DNphnTW-.mjs.map} +1 -1
- package/dist/typography/paragraph.cjs +1 -1
- package/dist/typography/paragraph.d.cts +40 -20
- package/dist/typography/paragraph.d.mts +40 -20
- package/dist/typography/paragraph.mjs +1 -1
- package/dist/typography/title.cjs +1 -1
- package/dist/typography/title.cjs.map +1 -1
- package/dist/typography/title.d.cts +33 -5
- package/dist/typography/title.d.mts +33 -5
- package/dist/typography/title.mjs +1 -1
- package/dist/typography/title.mjs.map +1 -1
- package/dist/ui/alert-dialog.cjs +1 -1
- package/dist/ui/alert-dialog.cjs.map +1 -1
- package/dist/ui/alert-dialog.d.cts +54 -12
- package/dist/ui/alert-dialog.d.mts +54 -12
- package/dist/ui/alert-dialog.mjs +1 -1
- package/dist/ui/alert-dialog.mjs.map +1 -1
- package/dist/ui/alert.cjs +1 -2
- package/dist/ui/alert.d.cts +2 -69
- package/dist/ui/alert.d.mts +2 -69
- package/dist/ui/alert.mjs +1 -2
- package/dist/ui/aspect-ratio.cjs +1 -1
- package/dist/ui/aspect-ratio.cjs.map +1 -1
- package/dist/ui/aspect-ratio.d.cts +15 -2
- package/dist/ui/aspect-ratio.d.mts +15 -2
- package/dist/ui/aspect-ratio.mjs +1 -1
- package/dist/ui/aspect-ratio.mjs.map +1 -1
- package/dist/ui/avatar.cjs +1 -1
- package/dist/ui/avatar.d.cts +20 -4
- package/dist/ui/avatar.d.mts +20 -4
- package/dist/ui/avatar.mjs +1 -1
- package/dist/ui/badge.cjs +1 -1
- package/dist/ui/badge.d.cts +2 -21
- package/dist/ui/badge.d.mts +2 -21
- package/dist/ui/badge.mjs +1 -1
- package/dist/ui/breadcrumb.cjs +1 -1
- package/dist/ui/breadcrumb.cjs.map +1 -1
- package/dist/ui/breadcrumb.d.cts +38 -25
- package/dist/ui/breadcrumb.d.mts +38 -25
- package/dist/ui/breadcrumb.mjs +1 -1
- package/dist/ui/breadcrumb.mjs.map +1 -1
- package/dist/ui/button-group.cjs +1 -1
- package/dist/ui/button-group.cjs.map +1 -1
- package/dist/ui/button-group.d.cts +27 -6
- package/dist/ui/button-group.d.mts +27 -6
- package/dist/ui/button-group.mjs +1 -1
- package/dist/ui/button-group.mjs.map +1 -1
- package/dist/ui/button.cjs +1 -1
- package/dist/ui/button.d.cts +1 -1
- package/dist/ui/button.d.mts +1 -1
- package/dist/ui/button.mjs +1 -1
- package/dist/ui/buttons/add-new.cjs +1 -1
- package/dist/ui/buttons/add-new.cjs.map +1 -1
- package/dist/ui/buttons/add-new.d.cts +9 -0
- package/dist/ui/buttons/add-new.d.mts +9 -0
- package/dist/ui/buttons/add-new.mjs +1 -1
- package/dist/ui/buttons/add-new.mjs.map +1 -1
- package/dist/ui/buttons/edit.cjs +1 -1
- package/dist/ui/buttons/edit.cjs.map +1 -1
- package/dist/ui/buttons/edit.d.cts +9 -0
- package/dist/ui/buttons/edit.d.mts +9 -0
- package/dist/ui/buttons/edit.mjs +1 -1
- package/dist/ui/buttons/edit.mjs.map +1 -1
- package/dist/ui/buttons/refresh.cjs +1 -1
- package/dist/ui/buttons/refresh.cjs.map +1 -1
- package/dist/ui/buttons/refresh.d.cts +9 -0
- package/dist/ui/buttons/refresh.d.mts +9 -0
- package/dist/ui/buttons/refresh.mjs +1 -1
- package/dist/ui/buttons/refresh.mjs.map +1 -1
- package/dist/ui/buttons/trash.cjs +1 -1
- package/dist/ui/buttons/trash.cjs.map +1 -1
- package/dist/ui/buttons/trash.d.cts +9 -0
- package/dist/ui/buttons/trash.d.mts +9 -0
- package/dist/ui/buttons/trash.mjs +1 -1
- package/dist/ui/buttons/trash.mjs.map +1 -1
- package/dist/ui/buttons/upload-image.cjs +1 -1
- package/dist/ui/buttons/upload-image.cjs.map +1 -1
- package/dist/ui/buttons/upload-image.d.cts +13 -0
- package/dist/ui/buttons/upload-image.d.mts +13 -0
- package/dist/ui/buttons/upload-image.mjs +1 -1
- package/dist/ui/buttons/upload-image.mjs.map +1 -1
- package/dist/ui/calendar.cjs +1 -1
- package/dist/ui/calendar.d.cts +22 -4
- package/dist/ui/calendar.d.mts +22 -4
- package/dist/ui/calendar.mjs +1 -1
- package/dist/ui/card.cjs +1 -1
- package/dist/ui/card.cjs.map +1 -1
- package/dist/ui/card.d.cts +37 -8
- package/dist/ui/card.d.mts +37 -8
- package/dist/ui/card.mjs +1 -1
- package/dist/ui/card.mjs.map +1 -1
- package/dist/ui/carousel.cjs +1 -1
- package/dist/ui/carousel.cjs.map +1 -1
- package/dist/ui/carousel.d.cts +31 -7
- package/dist/ui/carousel.d.mts +31 -7
- package/dist/ui/carousel.mjs +1 -1
- package/dist/ui/carousel.mjs.map +1 -1
- package/dist/ui/checkbox.cjs +1 -1
- package/dist/ui/checkbox.d.cts +17 -2
- package/dist/ui/checkbox.d.mts +17 -2
- package/dist/ui/checkbox.mjs +1 -1
- package/dist/ui/collapsible.cjs.map +1 -1
- package/dist/ui/collapsible.d.cts +22 -4
- package/dist/ui/collapsible.d.mts +22 -4
- package/dist/ui/collapsible.mjs.map +1 -1
- package/dist/ui/command.cjs +1 -1
- package/dist/ui/command.d.cts +48 -11
- package/dist/ui/command.d.mts +48 -11
- package/dist/ui/command.mjs +1 -1
- package/dist/ui/context-menu.cjs +1 -1
- package/dist/ui/context-menu.cjs.map +1 -1
- package/dist/ui/context-menu.d.cts +65 -16
- package/dist/ui/context-menu.d.mts +65 -16
- package/dist/ui/context-menu.mjs +1 -1
- package/dist/ui/context-menu.mjs.map +1 -1
- package/dist/ui/dialog.cjs +1 -1
- package/dist/ui/dialog.d.cts +1 -1
- package/dist/ui/dialog.d.mts +1 -1
- package/dist/ui/dialog.mjs +1 -1
- package/dist/ui/drawer.cjs +1 -1
- package/dist/ui/drawer.cjs.map +1 -1
- package/dist/ui/drawer.d.cts +39 -11
- package/dist/ui/drawer.d.mts +39 -11
- package/dist/ui/drawer.mjs +1 -1
- package/dist/ui/drawer.mjs.map +1 -1
- package/dist/ui/dropdown-menu.cjs +1 -1
- package/dist/ui/dropdown-menu.d.cts +65 -16
- package/dist/ui/dropdown-menu.d.mts +65 -16
- package/dist/ui/dropdown-menu.mjs +1 -1
- package/dist/ui/empty.cjs +1 -1
- package/dist/ui/empty.cjs.map +1 -1
- package/dist/ui/empty.d.cts +41 -9
- package/dist/ui/empty.d.mts +41 -9
- package/dist/ui/empty.mjs +1 -1
- package/dist/ui/empty.mjs.map +1 -1
- package/dist/ui/field.cjs +1 -2
- package/dist/ui/field.d.cts +13 -13
- package/dist/ui/field.d.mts +24 -24
- package/dist/ui/field.mjs +1 -2
- package/dist/ui/file-uploader.cjs +2 -2
- package/dist/ui/file-uploader.cjs.map +1 -1
- package/dist/ui/file-uploader.d.cts +27 -2
- package/dist/ui/file-uploader.d.mts +27 -2
- package/dist/ui/file-uploader.mjs +2 -2
- package/dist/ui/file-uploader.mjs.map +1 -1
- package/dist/ui/form.cjs +1 -1
- package/dist/ui/form.cjs.map +1 -1
- package/dist/ui/form.d.cts +51 -7
- package/dist/ui/form.d.mts +55 -11
- package/dist/ui/form.mjs +1 -1
- package/dist/ui/form.mjs.map +1 -1
- package/dist/ui/hover-card.cjs +1 -1
- package/dist/ui/hover-card.cjs.map +1 -1
- package/dist/ui/hover-card.d.cts +22 -4
- package/dist/ui/hover-card.d.mts +22 -4
- package/dist/ui/hover-card.mjs +1 -1
- package/dist/ui/hover-card.mjs.map +1 -1
- package/dist/ui/image.cjs +1 -1
- package/dist/ui/image.d.cts +20 -0
- package/dist/ui/image.d.mts +20 -0
- package/dist/ui/image.mjs +1 -1
- package/dist/ui/input-otp.cjs +1 -1
- package/dist/ui/input-otp.cjs.map +1 -1
- package/dist/ui/input-otp.d.cts +36 -5
- package/dist/ui/input-otp.d.mts +36 -5
- package/dist/ui/input-otp.mjs +1 -1
- package/dist/ui/input-otp.mjs.map +1 -1
- package/dist/ui/input.cjs +1 -1
- package/dist/ui/input.d.cts +1 -1
- package/dist/ui/input.d.mts +1 -1
- package/dist/ui/input.mjs +1 -1
- package/dist/ui/inputs/search-input.cjs +1 -1
- package/dist/ui/inputs/search-input.cjs.map +1 -1
- package/dist/ui/inputs/search-input.d.cts +20 -3
- package/dist/ui/inputs/search-input.d.mts +20 -3
- package/dist/ui/inputs/search-input.mjs +1 -1
- package/dist/ui/inputs/search-input.mjs.map +1 -1
- package/dist/ui/item.cjs +1 -1
- package/dist/ui/item.cjs.map +1 -1
- package/dist/ui/item.d.cts +56 -16
- package/dist/ui/item.d.mts +56 -16
- package/dist/ui/item.mjs +1 -1
- package/dist/ui/item.mjs.map +1 -1
- package/dist/ui/label.cjs +1 -1
- package/dist/ui/label.d.cts +15 -2
- package/dist/ui/label.d.mts +15 -2
- package/dist/ui/label.mjs +1 -1
- package/dist/ui/menubar.cjs +1 -1
- package/dist/ui/menubar.cjs.map +1 -1
- package/dist/ui/menubar.d.cts +68 -17
- package/dist/ui/menubar.d.mts +68 -17
- package/dist/ui/menubar.mjs +1 -1
- package/dist/ui/menubar.mjs.map +1 -1
- package/dist/ui/multi-select.cjs +1 -1
- package/dist/ui/multi-select.cjs.map +1 -1
- package/dist/ui/multi-select.d.cts +39 -2
- package/dist/ui/multi-select.d.mts +40 -3
- package/dist/ui/multi-select.mjs +1 -1
- package/dist/ui/multi-select.mjs.map +1 -1
- package/dist/ui/navigation-menu.cjs +1 -1
- package/dist/ui/navigation-menu.cjs.map +1 -1
- package/dist/ui/navigation-menu.d.cts +42 -11
- package/dist/ui/navigation-menu.d.mts +42 -11
- package/dist/ui/navigation-menu.mjs +1 -1
- package/dist/ui/navigation-menu.mjs.map +1 -1
- package/dist/ui/pagination.cjs +1 -1
- package/dist/ui/pagination.cjs.map +1 -1
- package/dist/ui/pagination.d.cts +37 -9
- package/dist/ui/pagination.d.mts +37 -9
- package/dist/ui/pagination.mjs +1 -1
- package/dist/ui/pagination.mjs.map +1 -1
- package/dist/ui/popover.cjs +1 -1
- package/dist/ui/popover.d.cts +32 -6
- package/dist/ui/popover.d.mts +32 -6
- package/dist/ui/popover.mjs +1 -1
- package/dist/ui/progress.cjs +1 -1
- package/dist/ui/progress.cjs.map +1 -1
- package/dist/ui/progress.d.cts +13 -2
- package/dist/ui/progress.d.mts +13 -2
- package/dist/ui/progress.mjs +1 -1
- package/dist/ui/progress.mjs.map +1 -1
- package/dist/ui/radio-group.cjs +1 -1
- package/dist/ui/radio-group.d.cts +25 -3
- package/dist/ui/radio-group.d.mts +25 -3
- package/dist/ui/radio-group.mjs +1 -1
- package/dist/ui/resizable.cjs +1 -1
- package/dist/ui/resizable.d.cts +29 -9
- package/dist/ui/resizable.d.mts +29 -9
- package/dist/ui/resizable.mjs +1 -1
- package/dist/ui/scroll-area.cjs +1 -1
- package/dist/ui/scroll-area.cjs.map +1 -1
- package/dist/ui/scroll-area.d.cts +24 -6
- package/dist/ui/scroll-area.d.mts +24 -6
- package/dist/ui/scroll-area.mjs +1 -1
- package/dist/ui/scroll-area.mjs.map +1 -1
- package/dist/ui/select.cjs +1 -1
- package/dist/ui/select.d.cts +43 -9
- package/dist/ui/select.d.mts +43 -9
- package/dist/ui/select.mjs +1 -1
- package/dist/ui/separator.cjs +1 -1
- package/dist/ui/separator.d.cts +23 -2
- package/dist/ui/separator.d.mts +23 -2
- package/dist/ui/separator.mjs +1 -1
- package/dist/ui/sheet.cjs +1 -1
- package/dist/ui/sheet.d.cts +38 -9
- package/dist/ui/sheet.d.mts +38 -9
- package/dist/ui/sheet.mjs +1 -1
- package/dist/ui/sidebar.cjs +1 -1
- package/dist/ui/sidebar.cjs.map +1 -1
- package/dist/ui/sidebar.d.cts +125 -28
- package/dist/ui/sidebar.d.mts +123 -26
- package/dist/ui/sidebar.mjs +1 -1
- package/dist/ui/sidebar.mjs.map +1 -1
- package/dist/ui/skeleton.cjs +1 -1
- package/dist/ui/skeleton.d.cts +19 -2
- package/dist/ui/skeleton.d.mts +19 -2
- package/dist/ui/skeleton.mjs +1 -1
- package/dist/ui/slider.cjs +1 -1
- package/dist/ui/slider.cjs.map +1 -1
- package/dist/ui/slider.d.cts +13 -2
- package/dist/ui/slider.d.mts +13 -2
- package/dist/ui/slider.mjs +1 -1
- package/dist/ui/slider.mjs.map +1 -1
- package/dist/ui/sonner.cjs +1 -1
- package/dist/ui/sonner.cjs.map +1 -1
- package/dist/ui/sonner.d.cts +18 -2
- package/dist/ui/sonner.d.mts +18 -2
- package/dist/ui/sonner.mjs +1 -1
- package/dist/ui/sonner.mjs.map +1 -1
- package/dist/ui/spinner.cjs +1 -1
- package/dist/ui/spinner.d.cts +17 -2
- package/dist/ui/spinner.d.mts +17 -2
- package/dist/ui/spinner.mjs +1 -1
- package/dist/ui/switch.cjs +1 -1
- package/dist/ui/switch.cjs.map +1 -1
- package/dist/ui/switch.d.cts +17 -2
- package/dist/ui/switch.d.mts +17 -2
- package/dist/ui/switch.mjs +1 -1
- package/dist/ui/switch.mjs.map +1 -1
- package/dist/ui/table.cjs +1 -1
- package/dist/ui/table.cjs.map +1 -1
- package/dist/ui/table.d.cts +44 -9
- package/dist/ui/table.d.mts +53 -18
- package/dist/ui/table.mjs +1 -1
- package/dist/ui/table.mjs.map +1 -1
- package/dist/ui/tabs.cjs +1 -1
- package/dist/ui/tabs.cjs.map +1 -1
- package/dist/ui/tabs.d.cts +26 -5
- package/dist/ui/tabs.d.mts +26 -5
- package/dist/ui/tabs.mjs +1 -1
- package/dist/ui/tabs.mjs.map +1 -1
- package/dist/ui/textarea.cjs +1 -1
- package/dist/ui/textarea.d.cts +18 -2
- package/dist/ui/textarea.d.mts +18 -2
- package/dist/ui/textarea.mjs +1 -1
- package/dist/ui/toggle-group.cjs +1 -1
- package/dist/ui/toggle-group.cjs.map +1 -1
- package/dist/ui/toggle-group.d.cts +19 -3
- package/dist/ui/toggle-group.d.mts +19 -3
- package/dist/ui/toggle-group.mjs +1 -1
- package/dist/ui/toggle-group.mjs.map +1 -1
- package/dist/ui/toggle.cjs +1 -1
- package/dist/ui/toggle.cjs.map +1 -1
- package/dist/ui/toggle.d.cts +15 -2
- package/dist/ui/toggle.d.mts +17 -4
- package/dist/ui/toggle.mjs +1 -1
- package/dist/ui/toggle.mjs.map +1 -1
- package/dist/ui/tooltip.cjs +1 -1
- package/dist/ui/tooltip.d.cts +37 -5
- package/dist/ui/tooltip.d.mts +37 -5
- package/dist/ui/tooltip.mjs +1 -1
- package/dist/user-BEyYLDNK.cjs +2 -0
- package/dist/user-BEyYLDNK.cjs.map +1 -0
- package/dist/user-DONsffqr.mjs +2 -0
- package/dist/user-DONsffqr.mjs.map +1 -0
- package/package.json +14 -5
- package/styles/theme.css +44 -23
- package/dist/avatar-DReNH6rV.mjs +0 -2
- package/dist/avatar-DReNH6rV.mjs.map +0 -1
- package/dist/avatar-aVxo69zP.cjs +0 -2
- package/dist/avatar-aVxo69zP.cjs.map +0 -1
- package/dist/badge-B4Fa7-J3.mjs +0 -2
- package/dist/badge-B4Fa7-J3.mjs.map +0 -1
- package/dist/badge-cvLJyaCA.cjs +0 -2
- package/dist/badge-cvLJyaCA.cjs.map +0 -1
- package/dist/button-BFcXpjqF.cjs +0 -2
- package/dist/button-BFcXpjqF.cjs.map +0 -1
- package/dist/button-BQTNG97Y.mjs +0 -2
- package/dist/button-BQTNG97Y.mjs.map +0 -1
- package/dist/button-BX8Kz9y6.d.cts +0 -59
- package/dist/button-Bo4oQsyD.d.mts +0 -59
- package/dist/button.variants-CS-Cmarr.cjs +0 -2
- package/dist/button.variants-CS-Cmarr.cjs.map +0 -1
- package/dist/button.variants-DRWf66hR.mjs +0 -2
- package/dist/button.variants-DRWf66hR.mjs.map +0 -1
- package/dist/calendar-CG-WMM8e.cjs.map +0 -1
- package/dist/calendar-CfOkrubO.mjs +0 -2
- package/dist/calendar-CfOkrubO.mjs.map +0 -1
- package/dist/checkbox-Bg2FiuQw.mjs.map +0 -1
- package/dist/checkbox-C0fSWwmD.cjs.map +0 -1
- package/dist/close-D_Ge7gnP.cjs +0 -2
- package/dist/close-DfuHB7kq.mjs +0 -2
- package/dist/command-DhBTNTqz.mjs.map +0 -1
- package/dist/command-_zpTaaIk.cjs.map +0 -1
- package/dist/data-display/user.cjs.map +0 -1
- package/dist/data-display/user.mjs.map +0 -1
- package/dist/date-By93kONr.mjs +0 -2
- package/dist/date-By93kONr.mjs.map +0 -1
- package/dist/date-em5f7hCx.cjs +0 -2
- package/dist/date-em5f7hCx.cjs.map +0 -1
- package/dist/dialog-CxELDK98.mjs +0 -2
- package/dist/dialog-CxELDK98.mjs.map +0 -1
- package/dist/dialog-DjRiV5vR.cjs +0 -2
- package/dist/dialog-DjRiV5vR.cjs.map +0 -1
- package/dist/dialog-PWeGBpsm.d.mts +0 -47
- package/dist/dialog-aSu9xFOW.d.cts +0 -47
- package/dist/dialogs/detail-dialog/components/sidebar.cjs.map +0 -1
- package/dist/dialogs/detail-dialog/components/sidebar.mjs.map +0 -1
- package/dist/dropdown-menu-B8GUTfTp.mjs +0 -2
- package/dist/dropdown-menu-B8GUTfTp.mjs.map +0 -1
- package/dist/dropdown-menu-BuyuU6uF.cjs +0 -2
- package/dist/dropdown-menu-BuyuU6uF.cjs.map +0 -1
- package/dist/features/search-modal/index.cjs.map +0 -1
- package/dist/features/search-modal/index.mjs.map +0 -1
- package/dist/features/tables/index.cjs.map +0 -1
- package/dist/features/tables/index.mjs.map +0 -1
- package/dist/features/tanstack-form/index.cjs.map +0 -1
- package/dist/features/tanstack-form/index.mjs.map +0 -1
- package/dist/flex-BP8sTi70.mjs.map +0 -1
- package/dist/flex-twCgWyx1.cjs.map +0 -1
- package/dist/heading--VmdIi7C.mjs +0 -2
- package/dist/heading--VmdIi7C.mjs.map +0 -1
- package/dist/heading-BEm5CCSE.cjs +0 -2
- package/dist/heading-BEm5CCSE.cjs.map +0 -1
- package/dist/image-CS_Q0WA7.mjs.map +0 -1
- package/dist/image-DuFv8sPr.cjs.map +0 -1
- package/dist/input-BFWWaN-v.cjs.map +0 -1
- package/dist/input-BgHvD7zf.d.mts +0 -25
- package/dist/input-DBtIgQB6.mjs.map +0 -1
- package/dist/input-DhQmoNrK.d.cts +0 -25
- package/dist/label-BzfsTrVt.cjs.map +0 -1
- package/dist/label-Dqr8nxWi.mjs +0 -2
- package/dist/label-Dqr8nxWi.mjs.map +0 -1
- package/dist/layouts/cms-layout/index.cjs.map +0 -1
- package/dist/layouts/cms-layout/index.mjs.map +0 -1
- package/dist/layouts/payment-layout/index.cjs.map +0 -1
- package/dist/layouts/payment-layout/index.mjs.map +0 -1
- package/dist/paragraph-B72bHMf7.cjs +0 -2
- package/dist/paragraph-B72bHMf7.cjs.map +0 -1
- package/dist/paragraph-moBSTPmT.mjs +0 -2
- package/dist/paragraph-moBSTPmT.mjs.map +0 -1
- package/dist/popover-BckwBuuD.mjs +0 -2
- package/dist/popover-BckwBuuD.mjs.map +0 -1
- package/dist/popover-DzDrgttC.cjs.map +0 -1
- package/dist/radio-group-CBhRsUjN.cjs.map +0 -1
- package/dist/radio-group-Cem8O6BK.mjs.map +0 -1
- package/dist/resizable-DXHfkbaz.mjs.map +0 -1
- package/dist/resizable-mlGS6Zto.cjs.map +0 -1
- package/dist/select-2CgwiefV.cjs.map +0 -1
- package/dist/select-CivtMKTM.mjs.map +0 -1
- package/dist/separator-Bf0gymN4.mjs +0 -2
- package/dist/separator-Bf0gymN4.mjs.map +0 -1
- package/dist/separator-C3ip6sbh.cjs.map +0 -1
- package/dist/sheet-5MJRtrfG.cjs.map +0 -1
- package/dist/sheet-oadGRiie.mjs.map +0 -1
- package/dist/skeleton-Ba6koCVf.mjs +0 -2
- package/dist/skeleton-Ba6koCVf.mjs.map +0 -1
- package/dist/skeleton-CHympz8k.cjs +0 -2
- package/dist/skeleton-CHympz8k.cjs.map +0 -1
- package/dist/spinner-Chm_2fLr.cjs +0 -2
- package/dist/spinner-Chm_2fLr.cjs.map +0 -1
- package/dist/spinner-D1v3Bard.mjs +0 -2
- package/dist/spinner-D1v3Bard.mjs.map +0 -1
- package/dist/textarea-COQoSVSc.cjs.map +0 -1
- package/dist/textarea-bLtmb71c.mjs.map +0 -1
- package/dist/tooltip-B3dTcgcc.mjs +0 -2
- package/dist/tooltip-B3dTcgcc.mjs.map +0 -1
- package/dist/tooltip-DC6i1A25.cjs.map +0 -1
- package/dist/ui/alert.cjs.map +0 -1
- package/dist/ui/alert.mjs.map +0 -1
- package/dist/ui/field.cjs.map +0 -1
- package/dist/ui/field.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables-cBo0_szt.mjs","names":["UITableEmpty: React.FC","UITableBadgeDisplay: React.FC<{\n /** The text or number to display inside the badge. */\n label: string | number | null | undefined;\n /** Optional callback fired when the badge itself is clicked. */\n onClick?: () => void;\n /** When provided, renders a remove (×) button and fires this callback on click. */\n onRemove?: () => void;\n}>","UITableBooleanDisplay: React.FC<{\n /** The boolean value to visualise; `null`/`undefined` renders an empty state. */\n value: boolean | null | undefined;\n}>","UITableDateDisplay: React.FC<Props>","UITableDescriptionDisplay: React.FC<{\n /** The text or numeric value to display; `null`/`undefined` renders an empty state. */\n content: string | null | undefined | number;\n}>","UITableMoreButton: React.FC<{\n /**\n * List of menu items to render inside the dropdown.\n * Each item must have a unique `id`, a display `label`, and an `onClick`\n * handler that receives the item's `id`.\n */\n items?: { id: string; label: string; onClick: (id: string) => void }[];\n /** Reserved for future use; currently unused by the component. */\n onClick?: () => void;\n}>","UITableNameDisplay: React.FC<NameDisplayProps>","UITablePermalink: React.FC<{\n /** The destination URL the anchor navigates to. */\n href: string;\n /** Optional display text; falls back to the raw `href` when omitted. */\n label?: string;\n}>","UITablePhoneNumberDisplay: React.FC<React.PropsWithChildren<{\n /** The raw phone number string to format and display. */\n value: string;\n}>>","UITableRemoveButton: React.FC<{\n /** Tooltip label describing what will be removed; defaults to a generic message. */\n title?: string;\n /** Async-compatible callback invoked when the button is clicked. */\n onClick?: () => void | Promise<void>;\n}>","options: Intl.NumberFormatOptions","UITableUserDataDisplay: React.FC<Props>","pinnedWidth: number","flexibleColumnsCount: number","fixedSizeTotal: number","width","UITableContainer: React.FC<React.PropsWithChildren>","ColumnVisibility: React.FC<{\n checked: boolean;\n title: string;\n onCheckedChange?: (checked: boolean) => void;\n}>","rows","UITableTooltipFilter: React.FC<\n Omit<React.ComponentProps<typeof Input>, 'className'> & {\n onSearch?: (value: string) => void;\n }\n>","ActionButton: React.FC<React.PropsWithChildren<React.ComponentProps<'button'>>>","UITableTooltipActions: React.FC<{\n onCreate?: () => void;\n onRefresh?: () => void;\n onDownload?: () => void;\n}>","UITableTooltip: React.FC<React.PropsWithChildren>"],"sources":["../packages/components/features/tables/components/atoms/empty.tsx","../packages/components/features/tables/components/atoms/badge-display.tsx","../packages/components/features/tables/components/atoms/boolean-display.tsx","../packages/components/features/tables/components/atoms/date-display.tsx","../packages/components/features/tables/components/atoms/description-display.tsx","../packages/components/features/tables/components/atoms/more-button.tsx","../packages/components/features/tables/components/atoms/name-display.tsx","../packages/components/features/tables/components/atoms/permalink.tsx","../packages/components/features/tables/components/atoms/phone-number.tsx","../packages/components/features/tables/components/atoms/remove-button.tsx","../packages/components/features/tables/components/atoms/statistic.tsx","../packages/components/features/tables/components/atoms/user.tsx","../packages/components/features/tables/constants.ts","../packages/components/features/tables/hooks/use-context.ts","../packages/components/features/tables/components/common.tsx","../packages/components/features/tables/components/table.tsx","../packages/components/features/tables/components/table/filter.tsx","../packages/components/features/tables/components/table/provider.tsx","../packages/components/features/tables/components/table/tooltip.tsx"],"sourcesContent":["import { MinusIcon } from 'lucide-react';\n\n/**\n * Renders a double-dash placeholder used across table atom components to\n * indicate that a cell has no data to display.\n *\n * @example\n * import { UITableEmpty } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableEmpty />\n */\nexport const UITableEmpty: React.FC = () => {\n return (\n <div className=\"flex gap-0 text-text-positive-weak\">\n <MinusIcon size={16} />\n <MinusIcon size={16} />\n </div>\n );\n};\n","import { XIcon } from 'lucide-react';\n\nimport { UITableEmpty } from './empty';\n\n/**\n * Renders a pill-shaped badge for a table cell that optionally supports a click\n * action and an inline remove button; falls back to {@link UITableEmpty} when\n * `label` is falsy.\n *\n * @example\n * import { UITableBadgeDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableBadgeDisplay\n * label=\"Active\"\n * onClick={() => console.log('badge clicked')}\n * onRemove={() => console.log('remove clicked')}\n * />\n */\nexport const UITableBadgeDisplay: React.FC<{\n /** The text or number to display inside the badge. */\n label: string | number | null | undefined;\n /** Optional callback fired when the badge itself is clicked. */\n onClick?: () => void;\n /** When provided, renders a remove (×) button and fires this callback on click. */\n onRemove?: () => void;\n}> = ({ label, onClick, onRemove }) => {\n if (!label) return <UITableEmpty />;\n if (onRemove) {\n return (\n <div\n className=\"flex w-fit gap-x-0.5 rounded-full border border-border py-1 pr-2 pl-3 text-text-positive text-xs shadow-xs\"\n onClick={e => {\n onClick?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {label}\n <button\n className=\"cursor-pointer text-text-positive-weak hover:text-text-positive-strong\"\n onClick={e => {\n onRemove?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <XIcon size={12} />\n </button>\n </div>\n );\n }\n return (\n <button\n className=\"w-fit rounded-full border border-border px-3 py-1 text-text-positive text-xs shadow-xs\"\n onClick={e => {\n onClick?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n {label}\n </button>\n );\n};\n","import { CheckIcon, XIcon } from 'lucide-react';\n\nimport { UITableEmpty } from './empty';\n\n/**\n * Displays a green check icon for `true`, a red X icon for `false`, and a\n * double-dash placeholder via {@link UITableEmpty} when the value is\n * `null` or `undefined`.\n *\n * @example\n * import { UITableBooleanDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableBooleanDisplay value={isActive} />\n */\nexport const UITableBooleanDisplay: React.FC<{\n /** The boolean value to visualise; `null`/`undefined` renders an empty state. */\n value: boolean | null | undefined;\n}> = ({ value }) => {\n if (value === null || value === undefined) return <UITableEmpty />;\n if (value === false) {\n return (\n <div className=\"text-danger-strong\">\n <XIcon />\n </div>\n );\n }\n return (\n <div className=\"text-success-strong\">\n <CheckIcon />\n </div>\n );\n};\n","import { Badge } from '@/components/ui/badge';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { DateDisplay } from '@/components/data-display/date';\nimport { UITableEmpty } from './empty';\n\n/** Props for the {@link UITableDateDisplay} component. */\ntype Props = {\n /** The date value to format and display; `null`/`undefined` renders an empty state. */\n date: Date | string | number | null | undefined;\n};\n\n/**\n * Displays a date as a compact badge in a table cell with a tooltip that shows\n * the full date and time on hover; renders {@link UITableEmpty} when `date` is\n * `null` or `undefined`.\n *\n * @example\n * import { UITableDateDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableDateDisplay date={new Date('2024-06-15T10:30:00Z')} />\n */\nexport const UITableDateDisplay: React.FC<Props> = ({ date }) => {\n if (typeof date === 'undefined' || date === null) return <UITableEmpty />;\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Badge className=\"h-fit\">\n <DateDisplay date={date} format=\"medium\" className=\"font-normal text-white\" />\n </Badge>\n </TooltipTrigger>\n <TooltipContent className=\"rounded px-2\">\n <DateDisplay date={date} format=\"full\" showTime className=\"font-medium text-text-negative text-xs\" />\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { UITableEmpty } from './empty';\nimport { Paragraph } from '@/components/typography/paragraph';\n\n/**\n * Renders a two-line-clamped description in a table cell with a tooltip that\n * reveals the full text and its character count; falls back to\n * {@link UITableEmpty} when `content` is `null` or `undefined`.\n *\n * @example\n * import { UITableDescriptionDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableDescriptionDisplay content=\"A detailed description of this record.\" />\n */\nexport const UITableDescriptionDisplay: React.FC<{\n /** The text or numeric value to display; `null`/`undefined` renders an empty state. */\n content: string | null | undefined | number;\n}> = ({ content }) => {\n if (content === undefined || content === null) {\n return <UITableEmpty />;\n }\n return (\n <Tooltip>\n <TooltipTrigger>\n <Paragraph variant=\"sm\" className=\"line-clamp-2 whitespace-pre-line break-all\">\n {content}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <Paragraph variant=\"xs\" className=\"whitespace-pre-line text-wrap break-keep text-text-negative-weak\">\n {content}\n </Paragraph>\n <p className=\"w-full text-end\">{content.toString().length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { MoreVerticalIcon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu';\n\n/**\n * A vertical-ellipsis icon button that opens a dropdown menu populated from the\n * `items` array; intended for use in table row action columns.\n *\n * @example\n * import { UITableMoreButton } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableMoreButton\n * items={[\n * { id: 'edit', label: 'Edit', onClick: (id) => console.log(id) },\n * { id: 'delete', label: 'Delete', onClick: (id) => console.log(id) },\n * ]}\n * />\n */\nexport const UITableMoreButton: React.FC<{\n /**\n * List of menu items to render inside the dropdown.\n * Each item must have a unique `id`, a display `label`, and an `onClick`\n * handler that receives the item's `id`.\n */\n items?: { id: string; label: string; onClick: (id: string) => void }[];\n /** Reserved for future use; currently unused by the component. */\n onClick?: () => void;\n}> = ({ items = [] }) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button size=\"sm\" variant=\"ghost\" color=\"secondary\" className=\"size-9 rounded-full\">\n <MoreVerticalIcon />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuGroup>\n {items.map(item => (\n <DropdownMenuItem\n key={item.id}\n className=\"px-3\"\n onSelect={e => {\n item.onClick(item.id);\n e.stopPropagation();\n }}\n >\n {item.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\nimport { Paragraph } from '@/components/typography/paragraph';\nimport { UITableEmpty } from './empty';\n\n/** Props for the {@link UITableNameDisplay} component. */\ntype NameDisplayProps = {\n /** The name string to display; renders an empty placeholder when falsy. */\n name?: string | null | undefined;\n};\n\n/**\n * Renders a clamped, truncated name string inside a tooltip that shows the full\n * text and character count on hover; falls back to {@link UITableEmpty} when the\n * value is absent.\n *\n * @example\n * import { UITableNameDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableNameDisplay name=\"John Doe\" />\n */\nexport const UITableNameDisplay: React.FC<NameDisplayProps> = ({ name }) => {\n if (!name) return <UITableEmpty />;\n return (\n <Tooltip>\n <TooltipTrigger>\n <Paragraph variant=\"sm\" className=\"line-clamp-2 w-full truncate text-wrap pb-px text-start\">\n {name}\n </Paragraph>\n </TooltipTrigger>\n <TooltipContent align=\"start\" className=\"h-fit min-w-48 max-w-80 pt-4\">\n <div className=\"flex flex-col gap-y-2\">\n <p className=\"whitespace-pre-line text-wrap break-keep\">{name}</p>\n <p className=\"w-full text-end\">{name.length} chars</p>\n </div>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { ExternalLinkIcon } from 'lucide-react';\n\n/**\n * Renders an external-link anchor with an icon for use in table cells, opening\n * the target URL in a new tab with safe `rel` attributes.\n *\n * @example\n * import { UITablePermalink } from '@customafk/lunas-ui/features/tables';\n *\n * <UITablePermalink href=\"https://example.com/records/42\" label=\"View record\" />\n */\nexport const UITablePermalink: React.FC<{\n /** The destination URL the anchor navigates to. */\n href: string;\n /** Optional display text; falls back to the raw `href` when omitted. */\n label?: string;\n}> = ({ href, label }) => {\n return (\n <a href={href} target=\"_blank\" className=\"inline-flex items-center gap-1 truncate text-primary text-sm underline\" rel=\"noopener noreferrer\">\n <span>{label || href}</span>\n <ExternalLinkIcon size={14} />\n </a>\n );\n};\n","import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\n/**\n * Formats and displays a phone number string in a table cell using the\n * `(NXX) NXX-XXXX` pattern, with a tooltip that shows the full international\n * dialling representation.\n *\n * @example\n * import { UITablePhoneNumberDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITablePhoneNumberDisplay value=\"0843456789\" />\n */\nexport const UITablePhoneNumberDisplay: React.FC<React.PropsWithChildren<{\n /** The raw phone number string to format and display. */\n value: string;\n}>> = ({ value }) => {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <p className=\"font-number text-secondary-foreground text-sm tabular-nums\">{value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3')}</p>\n </TooltipTrigger>\n <TooltipContent align=\"start\">\n <p className=\"tabular-nums\">{value.slice(1).replace(/(\\d{2})(\\d{3})(\\d{4})/, '(00) (+84) ($1) $2-$3')}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { useCallback } from 'react';\n\nimport { Trash2Icon } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\n\n/**\n * A ghost danger icon button with a trash icon that triggers an async removal\n * handler; displays a descriptive tooltip on hover to confirm the action intent.\n *\n * @example\n * import { UITableRemoveButton } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableRemoveButton\n * title=\"Remove member from project\"\n * onClick={async () => await deleteRow(rowId)}\n * />\n */\nexport const UITableRemoveButton: React.FC<{\n /** Tooltip label describing what will be removed; defaults to a generic message. */\n title?: string;\n /** Async-compatible callback invoked when the button is clicked. */\n onClick?: () => void | Promise<void>;\n}> = ({ title, onClick }) => {\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n async e => {\n e.preventDefault();\n e.stopPropagation();\n await onClick?.();\n },\n [onClick]\n );\n return (\n <Tooltip>\n <TooltipTrigger>\n <Button type=\"button\" variant=\"ghost\" color=\"danger\" size=\"icon\" onClick={handleClick}>\n <Trash2Icon />\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{title || 'Remove item from list table'}</p>\n </TooltipContent>\n </Tooltip>\n );\n};\n","import { memo, useCallback, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { UITableEmpty } from './empty';\n\n/**\n * Applies the specified rounding mode to `num` at the given decimal precision.\n *\n * @param num - The number to round.\n * @param precisionValue - Number of decimal places to keep.\n * @param roundingMode - Rounding strategy: `'round'` (default), `'floor'`, or `'ceil'`.\n * @returns The rounded number.\n */\nconst applyRounding = (num: number, precisionValue: number, roundingMode?: 'round' | 'floor' | 'ceil') => {\n const multiplier = 10 ** precisionValue;\n\n switch (roundingMode) {\n case 'floor':\n return Math.floor(num * multiplier) / multiplier;\n case 'ceil':\n return Math.ceil(num * multiplier) / multiplier;\n default:\n return Math.round(num * multiplier) / multiplier;\n }\n};\n\n/** Props for the {@link UITableStatisticDisplay} component. */\ntype Props = {\n /** Character used to separate the integer and fractional parts (default: `'.'`). */\n decimalSeparator?: string;\n /** Character used to separate thousands groups (default: `','`). */\n groupSeparator?: string;\n /** Optional node rendered before the formatted number (e.g. a currency symbol). */\n prefix?: React.ReactNode;\n /** Optional node rendered after the formatted number (e.g. a unit label). */\n suffix?: React.ReactNode;\n /** Number of decimal digits to display. */\n precision?: number;\n /** Rounding strategy applied before formatting (default: `'round'`). */\n roundingMode?: 'round' | 'floor' | 'ceil';\n /** When `true`, pads the fractional part with trailing zeros up to `precision` digits. */\n showTrailingZeros?: boolean;\n /** Font-size variant for the displayed number (default: `'lg'`). */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** The numeric or string value to format; falsy / invalid values render an empty state. */\n value: number | string | null | undefined;\n};\n\n/**\n * A memoized table-cell component that formats a numeric value with configurable\n * separators, precision, rounding, and size; renders {@link UITableEmpty} when\n * the value is zero, invalid, or absent.\n *\n * @example\n * import { UITableStatisticDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableStatisticDisplay value={1234567.89} precision={2} prefix=\"$\" size=\"md\" />\n */\nexport const UITableStatisticDisplay = memo(\n ({\n decimalSeparator = '.',\n groupSeparator = ',',\n prefix: Prefix,\n suffix: Suffix,\n precision,\n roundingMode = 'round',\n showTrailingZeros = false,\n size = 'lg',\n value = 0,\n }: Props) => {\n // Memoize number formatting options\n const formatOptions = useMemo((): Intl.NumberFormatOptions => {\n const options: Intl.NumberFormatOptions = {};\n\n if (typeof precision === 'number' && precision >= 0 && showTrailingZeros) {\n options.minimumFractionDigits = precision;\n options.maximumFractionDigits = precision;\n } else {\n options.maximumFractionDigits = precision;\n }\n\n return options;\n }, [precision, showTrailingZeros]);\n\n const formatNumber = useCallback(\n (num: number): string => {\n let processedNum = num;\n\n // Áp dụng làm tròn nếu có precision\n if (typeof precision === 'number' && precision >= 0) {\n processedNum = applyRounding(num, precision, roundingMode);\n }\n\n return processedNum.toLocaleString('en-US', formatOptions);\n },\n [roundingMode, formatOptions, precision]\n );\n\n // Memoize value processing\n const processedValue = useMemo((): string => {\n // Xử lý giá trị number\n if (typeof value === 'number') {\n if (Number.isNaN(value) || !Number.isFinite(value)) {\n return 'N/A';\n }\n return formatNumber(value);\n }\n\n // Xử lý giá trị string\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n\n // Nếu là chuỗi rỗng\n if (!trimmedValue) {\n return 'N/A';\n }\n\n // Thử convert sang number\n const numValue = Number(trimmedValue);\n\n if (Number.isNaN(numValue) || !Number.isFinite(numValue)) {\n // Nếu không phải số, trả về string gốc\n return 'N/A';\n }\n\n return formatNumber(numValue);\n }\n\n return 'N/A';\n }, [value, formatNumber]);\n\n // Memoize separator replacement\n const finalFormattedValue = useMemo((): string => {\n // Chỉ thay thế separators nếu khác mặc định\n if (decimalSeparator === '.' && groupSeparator === ',') {\n return processedValue;\n }\n return processedValue.replace(/,/g, groupSeparator).replace(/\\./g, decimalSeparator);\n }, [processedValue, decimalSeparator, groupSeparator]);\n\n if (finalFormattedValue === '0' || finalFormattedValue === 'N/A' || !finalFormattedValue) {\n return <UITableEmpty />;\n }\n\n return (\n <Flex\n padding=\"none\"\n className={cn(\n 'font-number text-lg text-secondary-foreground tabular-nums',\n size === 'xs' && 'text-xs',\n size === 'sm' && 'text-sm',\n size === 'md' && 'text-base',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl'\n )}\n >\n {Prefix}\n <p>{finalFormattedValue}</p>\n {Suffix}\n </Flex>\n );\n }\n);\nUITableStatisticDisplay.displayName = 'UITableStatisticDisplay';\n","import { UserRoundIcon } from 'lucide-react';\n\nimport { colorHashLight } from '@customafk/react-toolkit/color-hash';\n\nimport { Avatar, AvatarFallback } from '@/components/ui/avatar';\n\nimport { Flex } from '@/components/layouts/flex';\nimport { Paragraph } from '@/components/typography/paragraph';\n\n/** Props for the {@link UITableUserDataDisplay} component. */\ntype Props = {\n /** Unique identifier used to deterministically generate the avatar background colour. */\n uuid?: string | null | undefined;\n /** Display name shown below the avatar; falls back to `'Unknown User'` when absent. */\n username?: string | null | undefined;\n /** Email address shown as secondary text beneath the username. */\n email?: string | null | undefined;\n};\n\n/**\n * Renders a user avatar paired with username and email for use in table cells;\n * derives a consistent avatar background colour from the user's `uuid` via a\n * colour-hash utility.\n *\n * @example\n * import { UITableUserDataDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableUserDataDisplay\n * uuid=\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\"\n * username=\"Jane Smith\"\n * email=\"jane@example.com\"\n * />\n */\nexport const UITableUserDataDisplay: React.FC<Props> = ({ uuid, username, email }) => {\n return (\n <Flex wrap={false} gap=\"sm\" padding=\"none\">\n {!uuid && (\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback className=\"bg-muted-weak\">\n <UserRoundIcon size={28} className=\"text-text-negative\" />\n </AvatarFallback>\n </Avatar>\n )}\n {uuid && (\n <Avatar className=\"size-10 shadow-card\">\n <AvatarFallback style={{ backgroundColor: colorHashLight.hex(uuid) }}>\n <UserRoundIcon size={28} className=\"text-white\" />\n </AvatarFallback>\n </Avatar>\n )}\n <Flex vertical padding=\"none\" gap=\"none\" align=\"start\">\n <Paragraph className=\"font-medium text-sm text-text-positive-weak\">{username ?? 'Unknown User'}</Paragraph>\n <Paragraph variant=\"sm\" className=\"mt-0! text-text-positive-weak text-xs\">\n {email}\n </Paragraph>\n </Flex>\n </Flex>\n );\n};\n","export const SELECT_WIDTH = 60;\nexport const ACTION_WIDTH = 60;\nexport const TABLE_HEADER_Z_INDEX = 20;\nexport const PINNED_COLUMN_Z_INDEX = 20;\n","import { createContext, use } from 'react';\n\nimport type { AnyEntity } from '@/types';\nimport type { TTableBodyContext, TTableContext, TTableHeadRowContext, TTableInnerTableContext, TTableInnerWrapperContext, TTableRowContext } from '../types';\n\nexport const TableInnerWrapperContext = createContext<TTableInnerWrapperContext | null>(null);\n\nexport const useUITableInnerWrapperContext = () => {\n const ctx = use(TableInnerWrapperContext);\n if (!ctx) {\n throw new Error('useTableInnerWrapperContext must be used within a TableInnerWrapperProvider');\n }\n return ctx;\n};\n\nexport const TableInnerTableContext = createContext<TTableInnerTableContext | null>(null);\n\nexport const useUITableInnerTableContext = () => {\n const ctx = use(TableInnerTableContext);\n if (!ctx) {\n throw new Error('useTableInnerTableContext must be used within a TableInnerTableProvider');\n }\n return ctx;\n};\n\nexport const TableHeadRowContext = createContext<TTableHeadRowContext | null>(null);\n\nexport const useUITableHeadRowContext = () => {\n const ctx = use(TableHeadRowContext);\n if (!ctx) {\n throw new Error('useTableHeaderRowContext must be used within a TableHeaderRowProvider');\n }\n return ctx;\n};\n\nexport const TableBodyContext = createContext<TTableBodyContext | null>(null);\n\nexport const useUITableBodyContext = () => {\n const ctx = use(TableBodyContext);\n if (!ctx) {\n throw new Error('useTableBodyContext must be used within a TableBodyProvider');\n }\n return ctx;\n};\n\nexport const TableRowContext = createContext<TTableRowContext<AnyEntity, AnyEntity> | null>(null);\n\nexport const useUITableRowContext = () => {\n const ctx = use(TableRowContext);\n if (!ctx) {\n throw new Error('useTableRowContext must be used within a TableRowProvider');\n }\n return ctx;\n};\n\nexport const TableContext = createContext<TTableContext<AnyEntity> | null>(null);\n\nexport const useUITableContext = () => {\n const context = use(TableContext);\n if (!context) {\n throw new Error('useTableContext must be used within a TableProvider');\n }\n return context;\n};\n","/**\n * @file common.tsx\n * Low-level, memoised building blocks that compose into a full UITable.\n *\n * Each component corresponds to a standard HTML table element (`<table>`,\n * `<thead>`, `<tbody>`, `<tr>`, `<td>`, `<th>`, `<tfoot>`) with additional\n * TanStack Table integration for column pinning, virtual scrolling, and\n * dynamic CSS-variable-based sizing.\n */\nimport { Activity, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { flexRender } from '@tanstack/react-table';\n\nimport { AlertTriangle, BoxIcon, ChevronDown, EllipsisVerticalIcon, MoveLeftIcon, MoveRightIcon, PinOffIcon } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Checkbox } from '@/components/ui/checkbox';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { Spinner } from '@/components/ui/spinner';\n\nimport type { AnyEntity } from '@/types';\nimport { ACTION_WIDTH, PINNED_COLUMN_Z_INDEX, SELECT_WIDTH, TABLE_HEADER_Z_INDEX } from '../constants';\nimport {\n useUITableBodyContext,\n useUITableHeadRowContext,\n useUITableInnerTableContext,\n useUITableInnerWrapperContext,\n useUITableRowContext,\n} from '../hooks/use-context';\nimport type {\n TUITableBody,\n TUITableCell,\n TUITableCellActions,\n TUITableCellSelect,\n TUITableEmptyDisplay,\n TUITableFooter,\n TUITableHead,\n TUITableHeadCell,\n TUITableHeadCellOption,\n TUITableHeadCellSelect,\n TUITableHeadRow,\n TUITableInnerTable,\n TUITableInnerWrapper,\n TUITableLoadMore,\n TUITableRow,\n TUITableWrapper,\n} from '../types';\n\n/**\n * Ellipsis dropdown menu attached to a header cell that lets the user pin the\n * column to the left, pin it to the right, or unpin it.\n *\n * The trigger button is invisible until the parent `<th>` is hovered\n * (`group-hover:opacity-100`), keeping the header clean by default.\n *\n * @example\n * ```tsx\n * import { UITableHeadCellOption } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableHeadCellOption\n * isPinned=\"left\"\n * onLeftPin={col.pin}\n * onRightPin={col.pin}\n * onUnpin={col.pin}\n * />\n * ```\n */\nexport const UITableHeadCellOption = memo<TUITableHeadCellOption>(({ isPinned, onLeftPin, onRightPin, onUnpin, className }) => {\n const handleLeftPin = useCallback(() => {\n onLeftPin?.('left');\n }, [onLeftPin]);\n\n const handleRightPin = useCallback(() => {\n onRightPin?.('right');\n }, [onRightPin]);\n\n const handleUnpin = useCallback(() => {\n onUnpin?.(false);\n }, [onUnpin]);\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n 'absolute right-2 z-10 p-0.5 opacity-0 bg-card',\n 'cursor-pointer rounded-full transition-all',\n 'text-text-positive-weak',\n '[&>svg]:size-4',\n 'group-hover:opacity-100',\n 'hover:bg-muted-muted hover:text-text-positive',\n className\n )}\n >\n <EllipsisVerticalIcon />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-64 p-4\">\n <DropdownMenuGroup className=\"*:data-[slot=dropdown-menu-item]:rounded-xs *:data-[slot=dropdown-menu-item]:p-2\">\n <Activity mode={isPinned ? 'visible' : 'hidden'}>\n <DropdownMenuItem onClick={handleUnpin}>\n {!!isPinned && 'Unpin'}\n <DropdownMenuShortcut>\n <PinOffIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </Activity>\n <Activity mode={!isPinned ? 'visible' : 'hidden'}>\n <DropdownMenuItem onClick={handleLeftPin}>\n {isPinned ? 'Unpin' : 'Pin to Left'}\n <DropdownMenuShortcut>\n <MoveLeftIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n <DropdownMenuItem onClick={handleRightPin}>\n {isPinned ? 'Unpin' : 'Pin to Right'}\n <DropdownMenuShortcut>\n <MoveRightIcon className=\"size-4\" />\n </DropdownMenuShortcut>\n </DropdownMenuItem>\n </Activity>\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n});\nUITableHeadCellOption.displayName = 'UITableHeadCellOption';\n\n/**\n * Sticky `<th>` cell that renders a \"select all rows\" checkbox in the leftmost\n * header position.\n *\n * The cell is always pinned at `left: 0` and uses a fixed width of\n * `SELECT_WIDTH` to align with the corresponding body select cells.\n *\n * @example\n * ```tsx\n * import { UITableHeadCellSelect } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableHeadCellSelect\n * isPinned=\"left\"\n * isAllRowsSelected={table.getIsAllRowsSelected()}\n * onToggleAllRowsSelected={table.toggleAllRowsSelected}\n * />\n * ```\n */\nexport const UITableHeadCellSelect = memo<TUITableHeadCellSelect>(({ isPinned, isAllRowsSelected, style, onToggleAllRowsSelected, ...props }) => {\n const handleToggleAllRowsSelected = useCallback(\n (value: boolean | 'indeterminate') => {\n onToggleAllRowsSelected?.(!!value);\n },\n [onToggleAllRowsSelected]\n );\n return (\n <th\n slot=\"table-header-cell\"\n data-pinned={true}\n style={{ left: 0, zIndex: TABLE_HEADER_Z_INDEX, width: SELECT_WIDTH, maxWidth: SELECT_WIDTH }}\n className={cn(isPinned ? 'sticky' : 'relative')}\n {...props}\n >\n <div\n className=\"absolute inset-0 flex items-center justify-center\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Checkbox aria-label=\"Select All Rows\" checked={isAllRowsSelected} onCheckedChange={handleToggleAllRowsSelected} />\n </div>\n </th>\n );\n});\nUITableHeadCellSelect.displayName = 'UITableHeadCellSelect';\n\n/**\n * Overlay displayed in place of table rows when the table is loading data or\n * when the dataset is empty after a successful fetch.\n *\n * Returns `null` when neither `isEmpty` nor `isFetching` is true, so it adds\n * zero DOM overhead during normal rendering.\n *\n * @example\n * ```tsx\n * import { UITableEmptyDisplay } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableEmptyDisplay isFetching={isLoading} isEmpty={data.length === 0} />\n * ```\n */\nexport const UITableEmptyDisplay = memo<TUITableEmptyDisplay>(({ isEmpty, isFetching }) => {\n if (!isEmpty && !isFetching) return null;\n return (\n <div className=\"sticky left-0 flex min-h-96 flex-1 items-center justify-center bg-transparent text-text-positive-weak opacity-100\">\n {isFetching && (\n <div className=\"flex flex-col items-center gap-1\">\n <Spinner className=\"size-12\" />\n <p>Loading data...</p>\n </div>\n )}\n {isEmpty && !isFetching && (\n <div className=\"flex flex-col items-center gap-1\">\n <BoxIcon strokeWidth={1} size={48} />\n <p>No data available</p>\n </div>\n )}\n </div>\n );\n});\nUITableEmptyDisplay.displayName = 'UITableEmptyDisplay';\n\n/**\n * Outermost layout container for the entire UITable composition.\n *\n * Renders a full-width, full-height flex column that positions the toolbar,\n * the scrollable table area, and the footer in a single stack.\n *\n * @example\n * ```tsx\n * import { UITableWrapper } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableWrapper className=\"h-[600px]\">\n * {children}\n * </UITableWrapper>\n * ```\n */\nexport const UITableWrapper = memo<TUITableWrapper>(({ className, children, ...props }) => {\n return (\n <div slot=\"table-wrapper\" className={cn('relative m-0 flex size-full flex-col flex-nowrap items-start justify-start gap-2', className)} {...props}>\n {children}\n </div>\n );\n});\nUITableWrapper.displayName = 'UITableWrapper';\n\n/**\n * Scrollable `<div>` that wraps the `<table>` element and acts as the\n * viewport for both horizontal and vertical virtual scrolling.\n *\n * Reads its stable id from `UITableInnerWrapperContext` so that other\n * components (e.g. `UITableLoadMore`) can reference the DOM node via\n * `document.querySelector` without prop-drilling.\n *\n * @example\n * ```tsx\n * import { UITableInnerWrapper } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableInnerWrapper>\n * <UITableInnerTable>…</UITableInnerTable>\n * </UITableInnerWrapper>\n * ```\n */\nexport const UITableInnerWrapper = memo<TUITableInnerWrapper>(({ children, ...props }) => {\n const { innerWrapperId } = useUITableInnerWrapperContext();\n return (\n <div\n id={innerWrapperId}\n slot=\"table-inner-wrapper\"\n className=\"relative size-full overflow-auto border-b border-b-border border-l border-l-border bg-card\"\n {...props}\n >\n {children}\n </div>\n );\n});\nUITableInnerWrapper.displayName = 'UITableInnerWrapper';\n\n/**\n * The actual `<table>` element that drives the UITable layout.\n *\n * Attaches a `ResizeObserver` to the table element and calculates per-column\n * CSS custom properties (`--header-<id>-size`, `--col-<id>-size`) in a single\n * pass on every resize, avoiding expensive per-cell `column.getSize()` calls.\n * Flexible columns share the remaining width equally; fixed-size and pinned\n * columns are excluded from the distribution.\n *\n * @example\n * ```tsx\n * import { UITableInnerTable } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableInnerTable>\n * <UITableHead>…</UITableHead>\n * <UITableBody height=\"600px\">…</UITableBody>\n * </UITableInnerTable>\n * ```\n */\nexport const UITableInnerTable = memo<TUITableInnerTable>(({ children, ...props }) => {\n const { table, innerTableId, totalSize } = useUITableInnerTableContext();\n const tableRef = useRef<HTMLTableElement>(null);\n\n /**\n * Instead of calling `column.getSize()` on every render for every header\n * and especially every data cell (very expensive),\n * we will calculate all column sizes at once at the root table level in a useMemo\n * and pass the column sizes down as CSS variables to the <table> element.\n */\n // biome-ignore lint/correctness/useExhaustiveDependencies: table element.\n useEffect(() => {\n if (!tableRef.current) return;\n\n const headers = table.getFlatHeaders();\n\n const observer = new ResizeObserver(entries => {\n requestAnimationFrame(() => {\n const tableElement = entries[0].target;\n if (tableElement instanceof HTMLTableElement) {\n const tableEntry = entries[0];\n if (!tableEntry) return;\n const tableContentRectWidth = tableEntry.contentRect.width;\n\n const { left: leftColumnPinning = [], right: rightColumnPinning = [] } = table.getState().columnPinning;\n\n // --- 1. DUYỆT 1 LẦN DUYẾT ĐỂ LẤY TẤT CẢ THÔNG SỐ ---\n let pinnedWidth: number = 0;\n let flexibleColumnsCount: number = 0;\n let fixedSizeTotal: number = 0;\n const columnSpecs = headers.map(header => {\n const { id } = header;\n const isSpecial = id === 'select' || id === 'actions';\n const isPinned = leftColumnPinning.includes(id) || rightColumnPinning.includes(id);\n const size = header.getSize();\n const maxSize = header.column.columnDef.maxSize;\n\n // Tính toán chiều rộng cố định (pinned hoặc special)\n if (isSpecial) {\n const width = id === 'select' ? SELECT_WIDTH : ACTION_WIDTH;\n pinnedWidth += width;\n return { id, isFlex: false, width };\n }\n\n if (isPinned) {\n pinnedWidth += size;\n return { id, isFlex: false, width: size };\n }\n\n // Kiểm tra nếu cột có size cụ thể (khác mặc định 150)\n if (header.column.columnDef.size || size !== 150) {\n fixedSizeTotal += size;\n return { id, isFlex: false, width: size };\n }\n\n // Cột có thể co giãn\n flexibleColumnsCount++;\n return { id, isFlex: true, maxSize };\n });\n\n // --- 2. TÍNH TOÁN CHIỀU RỘNG CHIA ĐỀU (AVENGER WIDTH) ---\n const remainingWidth = tableContentRectWidth - pinnedWidth - fixedSizeTotal;\n const rawFlexWidth = flexibleColumnsCount > 0 ? Math.max(0, Math.floor(remainingWidth / flexibleColumnsCount)) : 0;\n\n // --- 3. ÁP DỤNG STYLE TRONG MỘT LẦN DUYỆT ---\n columnSpecs.forEach(col => {\n if (col.isFlex) {\n // Nếu có maxSize, đảm bảo không vượt quá\n const finalWidth = col.maxSize ? Math.min(rawFlexWidth, col.maxSize) : rawFlexWidth;\n tableElement.style.setProperty(`--header-${col.id}-size`, `${finalWidth}`);\n tableElement.style.setProperty(`--col-${col.id}-size`, `${finalWidth}`);\n if (col.maxSize) {\n tableElement.style.setProperty(`--col-${col.id}-maxSize`, `${col.maxSize}`);\n }\n } else {\n tableElement.style.setProperty(`--header-${col.id}-size`, `${col.width}`);\n tableElement.style.setProperty(`--col-${col.id}-size`, `${col.width}`);\n }\n });\n }\n });\n });\n observer.observe(tableRef.current);\n return () => observer.disconnect();\n }, [table.getState().columnSizingInfo, table.getState().columnSizing, table.getState().columnPinning]);\n\n return (\n <table\n id={innerTableId}\n ref={tableRef}\n slot=\"table-inner-table\"\n className=\"grid w-full table-fixed caption-bottom border-collapse border-spacing-0 flex-col content-start [&_tfoot_td]:border-t\"\n style={{ minWidth: totalSize }}\n {...props}\n >\n {children}\n </table>\n );\n});\nUITableInnerTable.displayName = 'UITableInnerTable';\n\n/**\n * Sticky `<thead>` element that stays fixed at the top of the scrollable\n * table area while the body scrolls beneath it.\n *\n * Applies column-border, background, and font styling uniformly to all\n * descendant `<th>` elements via Tailwind child selectors.\n *\n * @example\n * ```tsx\n * import { UITableHead } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableHead>\n * {table.getHeaderGroups().map(hg => (\n * <UITableHeadRow key={hg.id} headerGroup={hg} />\n * ))}\n * </UITableHead>\n * ```\n */\nexport const UITableHead = memo<TUITableHead>(({ className, children, ...props }) => {\n return (\n <thead\n slot=\"table-head\"\n className={cn(\n 'sticky top-0 z-20 h-9 w-full',\n 'grid select-none bg-muted-bg-subtle',\n 'border-b border-b-border shadow',\n 'font-medium text-[13px] text-text-positive-weak',\n\n '[&_tr:not(:last-child)_td]:border-b',\n\n '[&_th]:inline-flex',\n '[&_th]:items-center',\n '[&_th]:transition-all',\n '[&_th]:duration-300',\n '[&_th]:whitespace-nowrap',\n '[&_th]:border-border',\n '[&_th]:border-r',\n '[&_th]:last:border-r-0',\n '[&_th]:first:border-l-0',\n\n '[&_tr_th:not([data-pinned=false])]:bg-muted-bg-subtle',\n className\n )}\n {...props}\n >\n {children}\n </thead>\n );\n});\nUITableHead.displayName = 'UITableHead';\n\n/**\n * Renders a single `<tr>` for a TanStack `HeaderGroup`, mapping each header\n * to either `UITableHeadCellSelect` (for the `select` column) or\n * `UITableHeadCell` (for all other columns).\n *\n * Reads pinning state and \"select all\" handler from `UITableHeadRowContext`\n * so the row itself does not need to receive those as props.\n *\n * @example\n * ```tsx\n * import { UITableHeadRow } from '@customafk/lunas-ui/features/tables';\n *\n * {table.getHeaderGroups().map(hg => (\n * <UITableHeadRow key={hg.id} headerGroup={hg} />\n * ))}\n * ```\n */\nexport const UITableHeadRow = memo<TUITableHeadRow>(({ headerGroup, className, ...props }) => {\n const { isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onToggleAllRowsSelected } = useUITableHeadRowContext();\n const firstRightPinnedHeaderId = rightPinnedHeaders[0]?.id;\n const lastLeftPinnedHeaderId = leftPinnedHeaders[leftPinnedHeaders.length - 1]?.id;\n return (\n <tr slot=\"table-head-row\" className={cn('flex', className)} {...props}>\n {headerGroup.headers.map((header, index) => {\n const isVisible = header.column.getIsVisible();\n const isPinned = columnPinningState.left?.includes(header.id) ? 'left' : columnPinningState.right?.includes(header.id) ? 'right' : false;\n if (header.id === 'select') {\n return (\n <UITableHeadCellSelect\n key={header.id}\n isPinned={isPinned}\n isAllRowsSelected={isAllRowsSelected}\n onToggleAllRowsSelected={onToggleAllRowsSelected}\n />\n );\n }\n return (\n <UITableHeadCell\n key={`${header.id}-${index}`}\n isVisible={isVisible}\n isPinned={isPinned}\n isFirstCell={header.id === firstRightPinnedHeaderId}\n isLastCell={header.id === lastLeftPinnedHeaderId}\n isOptionsVisible={!['select', 'actions'].includes(header.id)}\n headerId={header.id}\n headerColumn={header.column}\n colSpan={header.colSpan}\n onColumnPin={header.column.pin}\n onToggleVisibility={header.column.toggleVisibility}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n </UITableHeadCell>\n );\n })}\n </tr>\n );\n});\nUITableHeadRow.displayName = 'UITableHeadRow';\n\n/**\n * Individual `<th>` cell that supports left/right sticky pinning, dynamic\n * CSS-variable-driven width, min/max size constraints, and an optional\n * `UITableHeadCellOption` pin/unpin dropdown.\n *\n * Width is driven by the CSS custom property `--header-<headerId>-size` set\n * by `UITableInnerTable`, avoiding per-cell `column.getSize()` calls.\n *\n * @example\n * ```tsx\n * import { UITableHeadCell } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableHeadCell\n * headerId={header.id}\n * headerColumn={header.column}\n * isPinned=\"left\"\n * isLastCell\n * onColumnPin={header.column.pin}\n * >\n * {flexRender(header.column.columnDef.header, header.getContext())}\n * </UITableHeadCell>\n * ```\n */\nexport const UITableHeadCell = memo<TUITableHeadCell>(\n ({\n isVisible = true,\n isPinned = false,\n isFirstCell = false,\n isLastCell = false,\n isOptionsVisible = true,\n headerId,\n headerColumn,\n className,\n children,\n onColumnPin,\n onToggleVisibility,\n ...props\n }) => {\n const zIndex = useMemo(() => {\n return isPinned ? PINNED_COLUMN_Z_INDEX : undefined;\n }, [isPinned]);\n\n const left = useMemo(() => {\n const axis = headerColumn?.getStart?.('left');\n return isPinned === 'left' && typeof axis === 'number' ? `${axis}px` : undefined;\n }, [isPinned, headerColumn]);\n\n const right = useMemo(() => {\n const axis = headerColumn?.getAfter?.('right');\n return isPinned === 'right' && typeof axis === 'number' ? `${axis}px` : undefined;\n }, [isPinned, headerColumn]);\n\n const width = useMemo(() => {\n return `calc(var(--header-${headerId}-size) * 1px)`;\n }, [headerId]);\n\n const minSize = useMemo(() => {\n return headerColumn?.columnDef.minSize ? `calc(var(--col-${headerId}-minSize) * 1px)` : undefined;\n }, [headerId, headerColumn]);\n\n const maxSize = useMemo(() => {\n return headerColumn?.columnDef.maxSize ? `calc(var(--col-${headerId}-maxSize) * 1px)` : undefined;\n }, [headerId, headerColumn]);\n return (\n <th\n slot=\"table-head-cell\"\n data-pinned={isPinned}\n data-header={headerId}\n style={{\n zIndex,\n left,\n right,\n width: width,\n minWidth: minSize,\n maxWidth: maxSize,\n }}\n className={cn(\n 'group flex',\n headerId === 'actions' && 'border-r-0!',\n isPinned ? 'sticky' : 'relative',\n isPinned === 'left' && isLastCell && 'border-r border-r-border',\n isPinned === 'right' && isFirstCell && 'border-l border-l-border',\n (headerColumn?.columnDef.meta as AnyEntity)?.position === 'center' && 'justify-center',\n (headerColumn?.columnDef.meta as AnyEntity)?.position === 'end' && 'justify-end',\n (headerColumn?.columnDef.meta as AnyEntity)?.position === 'start' && 'justify-start',\n className\n )}\n {...props}\n >\n <div className=\"truncate px-4\">{children}</div>\n {isOptionsVisible && (\n <UITableHeadCellOption isPinned={isPinned} isVisible={isVisible} onLeftPin={onColumnPin} onRightPin={onColumnPin} onUnpin={onColumnPin} />\n )}\n </th>\n );\n }\n);\nUITableHeadCell.displayName = 'UITableHeadCell';\n\n/**\n * `<tbody>` element that acts as the virtual-scroll container.\n *\n * Renders `null` while data is loading or the table is empty (the\n * `UITableEmptyDisplay` overlay handles those states instead). The `height`\n * prop must be supplied as the total height of all virtual rows so that the\n * scroll track reflects the full dataset length.\n *\n * @example\n * ```tsx\n * import { UITableBody } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableBody height={`${rowVirtualizer.getTotalSize()}px`}>\n * {virtualItems.map(vRow => (\n * <UITableRow key={vRow.index} … />\n * ))}\n * </UITableBody>\n * ```\n */\nexport const UITableBody = memo<TUITableBody>(({ height, className, children, ...props }) => {\n const { isFetching, isEmpty } = useUITableBodyContext();\n if (isEmpty || isFetching) return null;\n return (\n <tbody\n slot=\"table-body\"\n style={{ height }}\n className={cn(\n 'relative w-full',\n 'grid',\n\n '[&_tr]:absolute',\n '[&_tr]:flex',\n '[&_tr]:flex-none',\n '[&_tr]:w-full',\n '[&_tr]:cursor-pointer [&_tr]:focus:outline-none',\n '[&_tr]:border-b [&_tr]:border-b-border',\n\n '[&_td]:z-10',\n '[&_td]:transition-all',\n '[&_td]:duration-300',\n '[&_td]:flex',\n '[&_td]:flex-none',\n '[&_td]:overflow-hidden',\n '[&_td]:whitespace-nowrap',\n '[&_td]:px-4',\n '[&_td]:py-2.5',\n '[&_td]:align-middle',\n '[&_td]:border-border',\n\n '[&_td]:data-[selected=true]:bg-muted-muted!',\n '[&_td]:data-[selected=true]:hover:bg-muted-muted!',\n\n '[&_td>div]:inline-flex',\n '[&_td>div]:items-center',\n '[&_td>div]:w-full',\n\n '[&_td:not([data-pinned=false])]:z-20',\n '[&_td:not([data-pinned=false])]:sticky',\n '[&_td:not([data-pinned=false])]:bg-card',\n\n // '**:data-lastcell:border-r',\n // '**:data-firstcell:border-l',\n className\n )}\n {...props}\n >\n {children}\n </tbody>\n );\n});\nUITableBody.displayName = 'UITableBody';\n\n/**\n * Virtualised `<tr>` that renders a single data row by translating itself to\n * the correct vertical position via a CSS `transform`.\n *\n * Iterates the row's visible cells and delegates to `UITableCellActions`,\n * `UITableCellSelect`, or `UITableCell` based on the column id. Click\n * handling, pinning state, and the \"select all\" flag are sourced from\n * `UITableRowContext`.\n *\n * @example\n * ```tsx\n * import { UITableRow } from '@customafk/lunas-ui/features/tables';\n *\n * {virtualItems.map(vRow => {\n * const row = rows[vRow.index];\n * return (\n * <UITableRow\n * key={row.id}\n * row={row}\n * isSelected={row.getIsSelected()}\n * virtualRowIndex={vRow.index}\n * virtualRowStart={vRow.start}\n * />\n * );\n * })}\n * ```\n */\nexport const UITableRow = memo<TUITableRow>(({ row, isSelected, virtualRowIndex, virtualRowStart, children, ...props }) => {\n const { keyOfClickRow, isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onClickRow } = useUITableRowContext();\n\n const pinnedLeftColumns = useMemo(() => columnPinningState.left ?? [], [columnPinningState]);\n const pinnedRightColumns = useMemo(() => columnPinningState.right ?? [], [columnPinningState]);\n const firstRightPinnedHeaderId = useMemo(() => rightPinnedHeaders?.[0]?.id, [rightPinnedHeaders]);\n const lastLeftPinnedHeaderId = useMemo(() => leftPinnedHeaders?.[leftPinnedHeaders.length - 1]?.id, [leftPinnedHeaders]);\n\n const handleClick = useCallback<React.MouseEventHandler<HTMLTableRowElement>>(\n e => {\n const value = keyOfClickRow ? row.original?.[keyOfClickRow] : undefined;\n onClickRow?.(virtualRowIndex, typeof value === 'string' || typeof value === 'number' ? value : undefined);\n e.preventDefault();\n e.stopPropagation();\n },\n [keyOfClickRow, onClickRow, row, virtualRowIndex]\n );\n return (\n <tr\n slot=\"table-row\"\n data-index={virtualRowIndex}\n style={{\n transform: `translateY(${virtualRowStart}px)`,\n }}\n className=\"group [&_td]:border-r [&_td]:border-r-border [&_td]:last:border-r-0\"\n onClick={handleClick}\n {...props}\n >\n {row.getVisibleCells().map((cell, index) => {\n const isPinnedLeft = pinnedLeftColumns.includes(cell.column.id);\n const isPinnedRight = pinnedRightColumns.includes(cell.column.id);\n const isPinned = isPinnedLeft ? 'left' : isPinnedRight ? 'right' : false;\n if (cell.column.id === 'actions') {\n return (\n <UITableCellActions\n key={`${cell.id}-${index}`}\n data-col={cell.column.id}\n data-cell={virtualRowIndex}\n data-selected={isSelected || undefined}\n virtualRowIndex={virtualRowIndex}\n column={cell.column}\n getContext={cell.getContext}\n />\n );\n }\n if (cell.column.id === 'select') {\n return (\n <UITableCellSelect\n key={`${cell.id}-${index}`}\n data-col={cell.column.id}\n data-cell={virtualRowIndex}\n data-selected={isSelected || undefined}\n isPinned={isPinned}\n isSelected={isAllRowsSelected || isSelected}\n onToggleRowSelected={cell.row.toggleSelected}\n />\n );\n }\n return (\n <UITableCell\n key={`${cell.id}-${index}`}\n data-col={cell.column.id}\n data-cell={virtualRowIndex}\n data-selected={isSelected || undefined}\n isPinned={isPinned}\n isFirstCell={cell.column.id === firstRightPinnedHeaderId}\n isLastCell={cell.column.id === lastLeftPinnedHeaderId}\n colId={cell.column.id}\n position={(cell.column.columnDef.meta as AnyEntity)?.position ?? 'start'}\n column={cell.column}\n getContext={cell.getContext}\n />\n );\n })}\n </tr>\n );\n});\nUITableRow.displayName = 'UITableRow';\n\n/**\n * Sticky `<td>` cell in the leftmost column that renders a per-row selection\n * checkbox.\n *\n * The cell stops click-event propagation so that selecting a row does not also\n * trigger the row's `onClickRow` handler.\n *\n * @example\n * ```tsx\n * import { UITableCellSelect } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableCellSelect\n * isPinned=\"left\"\n * isSelected={row.getIsSelected()}\n * onToggleRowSelected={row.toggleSelected}\n * />\n * ```\n */\nexport const UITableCellSelect = memo<TUITableCellSelect>(({ isPinned, isSelected = false, className, onToggleRowSelected, ...props }) => {\n const handleToggleRowSelected = useCallback(\n (value: boolean | 'indeterminate') => {\n onToggleRowSelected?.(!!value);\n },\n [onToggleRowSelected]\n );\n return (\n <td\n slot=\"table-body-cell\"\n data-pinned={true}\n style={{ left: 0, zIndex: PINNED_COLUMN_Z_INDEX, width: SELECT_WIDTH, maxWidth: SELECT_WIDTH }}\n className={cn('group-hover:bg-muted-bg-subtle!', isPinned ? 'sticky' : 'relative', className)}\n {...props}\n >\n <div\n data-slot=\"table-cell-inner\"\n className=\"flex! w-full! items-center justify-center bg-transparent text-center align-middle\"\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n <Checkbox aria-label=\"Select Row\" checked={isSelected} onCheckedChange={handleToggleRowSelected} />\n </div>\n </td>\n );\n});\nUITableCellSelect.displayName = 'UITableCellSelect';\n\n/**\n * Sticky `<td>` cell pinned to the right edge of each row that renders the\n * column's custom `cell` renderer (typically a row-action menu).\n *\n * The cell is always sticky (`right: 0`, `z-index: 50`) and gains a hover\n * background via the `group-hover` Tailwind variant on the parent `<tr>`.\n *\n * @example\n * ```tsx\n * import { UITableCellActions } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableCellActions\n * virtualRowIndex={vRow.index}\n * column={cell.column}\n * getContext={cell.getContext}\n * />\n * ```\n */\nexport const UITableCellActions = memo<TUITableCellActions>(({ virtualRowIndex, column, getContext, className, ...props }) => {\n const render = useMemo(() => {\n return flexRender(column?.columnDef.cell, getContext());\n }, [column, getContext]);\n return (\n <td\n data-col=\"actions\"\n data-cell={virtualRowIndex}\n className=\"sticky border-r-0! inset-y-0 right-0 z-50 flex items-center pr-4 group-hover:bg-muted-bg-subtle!\"\n {...props}\n >\n {render}\n </td>\n );\n});\nUITableCellActions.displayName = 'UITableCellActions';\n\n/**\n * Standard `<td>` data cell with support for left/right sticky pinning,\n * CSS-variable-driven width, content-fit auto-sizing, and configurable\n * horizontal alignment (`start` | `center` | `end`).\n *\n * A `ResizeObserver` on the inner content div measures actual rendered content\n * width and calls `table.setColumnSizing` when the content overflows the\n * column's current size, but only when the column definition has\n * `meta.fitContent: true`.\n *\n * @example\n * ```tsx\n * import { UITableCell } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableCell\n * colId={cell.column.id}\n * isPinned=\"left\"\n * position=\"start\"\n * column={cell.column}\n * getContext={cell.getContext}\n * />\n * ```\n */\nexport const UITableCell = memo<TUITableCell>(\n ({ isPinned = false, isFirstCell = false, isLastCell = false, colId, position = 'start', column, getContext, ...props }) => {\n const { innerTableId, table } = useUITableInnerTableContext();\n const tableRef = useRef<Element>(document.querySelector(`table[id=\"${innerTableId}\"]`));\n const cellRef = useRef<HTMLDivElement>(null);\n\n const left = useMemo(() => {\n const axis = column?.getStart('left');\n return isPinned === 'left' && typeof axis === 'number' ? `${axis}px` : undefined;\n }, [isPinned, column]);\n\n const right = useMemo(() => {\n const axis = column?.getAfter('right');\n return isPinned === 'right' && typeof axis === 'number' ? `${axis}px` : undefined;\n }, [isPinned, column]);\n\n const width = useMemo(() => {\n return `calc(var(--col-${colId}-size) * 1px)`;\n }, [colId]);\n\n const minSize = useMemo(() => {\n return column?.columnDef.minSize ? `calc(var(--col-${colId}-minSize) * 1px)` : undefined;\n }, [colId, column]);\n\n const maxSize = useMemo(() => {\n return column?.columnDef.maxSize ? `calc(var(--col-${colId}-maxSize) * 1px)` : undefined;\n }, [colId, column]);\n\n const render = useMemo(() => {\n return flexRender(column?.columnDef.cell, getContext());\n }, [column, getContext]);\n\n useEffect(() => {\n if (!cellRef.current) return;\n\n // Đo kích thước thực tế của nội dung bên trong\n const width = cellRef.current.scrollWidth;\n const currentSize = column?.getSize();\n\n // Nếu cell này dài hơn size hiện tại của cột, cập nhật lại size cho column\n if (!!currentSize && width > currentSize) {\n if (tableRef.current instanceof HTMLTableElement && typeof colId === 'string' && !!(column?.columnDef.meta as AnyEntity)?.['fitContent']) {\n table.setColumnSizing(old => ({\n ...old,\n [colId]: width + 32,\n }));\n }\n }\n }, [colId, column, table]); // Chạy lại khi data trong cell thay đổi\n\n return (\n <td\n slot=\"table-body-cell\"\n data-pinned={isPinned}\n data-lastcell={isLastCell || undefined}\n data-firstcell={isFirstCell || undefined}\n style={{\n left,\n right,\n width: width,\n minWidth: minSize,\n maxWidth: maxSize,\n }}\n className={cn(\n 'group-hover:bg-muted-bg-subtle!',\n isPinned === 'left' && isLastCell && 'border-r border-r-border',\n isPinned === 'right' && isFirstCell && 'border-l border-l-border'\n )}\n {...props}\n >\n <div\n ref={cellRef}\n slot=\"table-body-cell-inner\"\n className={cn(\n 'overflow-x-hidden',\n position === 'start' && 'justify-start',\n position === 'center' && 'justify-center',\n position === 'end' && 'justify-end'\n )}\n >\n {render}\n </div>\n </td>\n );\n }\n);\nUITableCell.displayName = 'UITableCell';\n\n/**\n * `<tfoot>` element rendered below the table body, typically used for\n * summary rows or pagination controls.\n *\n * @example\n * ```tsx\n * import { UITableFooter } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableFooter>\n * <tr><td>Total: {totalRows}</td></tr>\n * </UITableFooter>\n * ```\n */\nexport const UITableFooter = memo<TUITableFooter>(({ className, children, ...props }) => {\n return (\n <tfoot\n slot=\"table-footer\"\n className={cn('flex w-full justify-center border-border-weak border-t py-2 font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n >\n {children}\n </tfoot>\n );\n});\nUITableFooter.displayName = 'UITableFooter';\n\n/**\n * Virtualised `<tr>` appended after the last data row that renders a\n * \"Load More\" / \"Loading…\" / \"Error! Retry?\" button.\n *\n * Returns `null` when `fetchMoreData` is not provided, making it safe to\n * include unconditionally in the row list. A `ResizeObserver` on the inner\n * wrapper ensures the row always matches the current table width.\n *\n * @example\n * ```tsx\n * import { UITableLoadMore } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableLoadMore\n * virtualRowIndex={rows.length}\n * virtualRowStart={rowVirtualizer.getTotalSize()}\n * fetchMoreData={fetchNextPage}\n * />\n * ```\n */\nexport const UITableLoadMore = memo<TUITableLoadMore>(({ virtualRowIndex, virtualRowStart, fetchMoreData }) => {\n const { innerWrapperId } = useUITableInnerWrapperContext();\n\n const tableWrapperRef = useRef<Element | null>(document.querySelector(`div[id=\"${innerWrapperId}\"]`));\n const rowRef = useRef<HTMLTableRowElement>(null);\n\n const [fetchingState, setFetchingState] = useState<'idle' | 'fetching' | 'error'>('idle');\n\n const [width, setWidth] = useState<number>(0);\n\n const handleFetchMoreData = useCallback(async () => {\n try {\n setFetchingState('fetching');\n await fetchMoreData?.();\n setFetchingState('idle');\n } catch (error) {\n console.error('Error fetching more data:', error);\n setFetchingState('error');\n } finally {\n // setFetchingState('idle');\n }\n }, [fetchMoreData]);\n\n useEffect(() => {\n if (!tableWrapperRef.current) return;\n\n const observer = new ResizeObserver(entries => {\n // Access width from contentRect\n setWidth(entries[0].contentRect.width);\n });\n\n observer.observe(tableWrapperRef.current);\n return () => observer.disconnect(); // Cleanup on unmount\n }, []);\n\n if (!fetchMoreData) return null;\n\n return (\n <tr\n ref={rowRef}\n data-index={virtualRowIndex}\n style={{\n transform: `translateY(${virtualRowStart}px)`,\n width,\n }}\n className=\"sticky! left-0 h-10\"\n >\n <td className=\"absolute left-0 flex w-full items-center justify-center text-xs\">\n <button\n type=\"button\"\n disabled={fetchingState === 'fetching'}\n className={cn(\n 'flex cursor-pointer gap-x-0.5',\n fetchingState === 'fetching' && 'cursor-not-allowed',\n fetchingState === 'idle' && 'text-text-positive-weak hover:text-text-positive',\n fetchingState === 'error' && 'text-danger hover:text-danger-strong'\n )}\n onClick={handleFetchMoreData}\n >\n {fetchingState === 'idle' && <ChevronDown className=\"size-4\" />}\n {fetchingState === 'fetching' && <Spinner className=\"size-4 animate-spin\" />}\n {fetchingState === 'error' && <AlertTriangle className=\"size-4 text-danger\" />}\n {fetchingState === 'idle' && 'Load More'}\n {fetchingState === 'fetching' && 'Loading...'}\n {fetchingState === 'error' && 'Error! Retry?'}\n </button>\n </td>\n </tr>\n );\n});\nUITableLoadMore.displayName = 'UITableLoadMore';\n","'use client';\nimport { useMemo, useRef } from 'react';\n\nimport { useVirtualizer } from '@tanstack/react-virtual';\n\nimport { ResizablePanel, ResizablePanelGroup } from '@/components/ui/resizable';\n\nimport { useUITableBodyContext, useUITableContext } from '../hooks/use-context';\nimport { UITableBody, UITableEmptyDisplay, UITableHead, UITableHeadRow, UITableInnerTable, UITableInnerWrapper, UITableLoadMore, UITableRow } from './common';\n\nexport const UITableContainer: React.FC<React.PropsWithChildren> = () => {\n const { table, isEmpty, isFetching, fetchMoreData } = useUITableContext();\n const { rowSelectionState } = useUITableBodyContext();\n\n const tableContainerRef = useRef<HTMLDivElement | null>(null);\n\n const { rows } = table.getRowModel();\n\n // Important: Keep the row virtualizer in the lowest component possible to avoid unnecessary re-renders.\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length + 1,\n estimateSize: () => 40, // estimated row height\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1 ? element => element?.getBoundingClientRect().height : undefined,\n overscan: 2, // Render additional rows beyond viewport for smoother scrolling\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: rowVirtualizer getTotalSize\n const tableBodyHeight = useMemo(() => {\n const totalSize = rowVirtualizer.getTotalSize();\n const containerHeight = tableContainerRef.current?.clientHeight || 0;\n return totalSize < containerHeight ? `${containerHeight}px` : `${totalSize}px`;\n }, [rowVirtualizer.getTotalSize()]);\n\n return (\n <ResizablePanelGroup\n direction=\"horizontal\"\n style={{ direction: table.options.columnResizeDirection }}\n className=\"relative flex w-full max-w-full flex-1 gap-1 overflow-auto border-t border-t-border border-r border-r-border bg-slate-50 p-0 text-sm\"\n >\n <ResizablePanel className=\"relative\">\n <UITableInnerWrapper ref={tableContainerRef}>\n <UITableInnerTable>\n <UITableHead>\n {table.getHeaderGroups().map(headerGroup => (\n <UITableHeadRow key={headerGroup.id} headerGroup={headerGroup} />\n ))}\n </UITableHead>\n <UITableBody height={tableBodyHeight}>\n {rowVirtualizer.getVirtualItems().map(virtualRow => {\n const row = rows[virtualRow.index];\n const isSelected = Object.entries(rowSelectionState).some(([k, v]) => k === `${row?.id}` && v);\n if (!row) {\n return (\n <UITableLoadMore\n key={virtualRow.index}\n virtualRowIndex={virtualRow.index}\n virtualRowStart={virtualRow.start}\n fetchMoreData={fetchMoreData}\n />\n );\n }\n return (\n <UITableRow\n key={virtualRow.index}\n ref={rowVirtualizer.measureElement}\n row={row}\n isSelected={isSelected}\n virtualRowIndex={virtualRow.index}\n virtualRowStart={virtualRow.start}\n />\n );\n })}\n </UITableBody>\n </UITableInnerTable>\n <UITableEmptyDisplay isEmpty={isEmpty} isFetching={isFetching} />\n </UITableInnerWrapper>\n </ResizablePanel>\n </ResizablePanelGroup>\n );\n};\n","/**\n * @file filter.tsx\n * Collapsible side-panel that exposes column-visibility toggles and a future\n * filter builder, rendered as a resizable panel alongside the main table.\n */\nimport { Activity, useState } from 'react';\n\nimport { Columns4Icon, ListFilterIcon, ListFilterPlus } from 'lucide-react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Button } from '@/components/ui/button';\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { ResizablePanel } from '@/components/ui/resizable';\nimport { Separator } from '@/components/ui/separator';\n\nimport { useUITableContext } from '../../hooks/use-context';\n\nconst ColumnVisibility: React.FC<{\n checked: boolean;\n title: string;\n onCheckedChange?: (checked: boolean) => void;\n}> = ({ checked, title, onCheckedChange }) => {\n return (\n <div className=\"flex h-fit items-center gap-2\">\n <Checkbox checked={checked} onCheckedChange={onCheckedChange} />\n <p className=\"text-sm\">{title}</p>\n </div>\n );\n};\n\n/**\n * Collapsible side-panel that lets users toggle column visibility and (in\n * future) add row filters without leaving the table view.\n *\n * The panel collapses to a narrow icon strip when no tab is active and expands\n * to at least 64 units when the \"Columns\" or \"Filters\" tab is selected. The\n * `select` and `actions` columns are excluded from the visibility list.\n *\n * @example\n * ```tsx\n * import { UITableFilter } from '@customafk/lunas-ui/features/tables';\n *\n * // Render inside a ResizablePanelGroup alongside UITable\n * <ResizablePanelGroup direction=\"horizontal\">\n * <ResizablePanel>\n * <UITable />\n * </ResizablePanel>\n * <ResizableHandle />\n * <UITableFilter />\n * </ResizablePanelGroup>\n * ```\n */\nexport const UITableFilter = () => {\n const { table } = useUITableContext();\n const [tab, setTab] = useState<'columns' | 'filters' | null>(null);\n\n return (\n <ResizablePanel defaultSize={25} className={cn('bg-card', tab === null ? 'max-w-8!' : 'min-w-64')}>\n <div className=\"relative z-20 flex size-full bg-muted-bg-subtle\">\n <div className=\"flex-1\">\n <Activity mode={tab === 'columns' ? 'visible' : 'hidden'}>\n <div className=\"flex size-full flex-col gap-2 p-4\">\n <p className=\"px-2 font-medium\">Columns Visibility</p>\n <Separator />\n <div className=\"flex flex-col gap-4 pt-4\">\n {table.getAllColumns().map(column => {\n if (['select', 'actions'].includes(column.id)) return null;\n return (\n <ColumnVisibility\n key={column.id}\n checked={column.getIsVisible()}\n title={String(column.columnDef.header)}\n onCheckedChange={value => column.toggleVisibility(!!value)}\n />\n );\n })}\n </div>\n </div>\n </Activity>\n <Activity mode={tab === 'filters' ? 'visible' : 'hidden'}>\n <div className=\"flex size-full flex-col p-2\">\n <Button variant=\"outline\" color=\"muted\">\n <ListFilterPlus />\n Add Filter\n </Button>\n </div>\n </Activity>\n </div>\n <div className=\"flex h-full flex-col border-border border-l bg-muted-bg-subtle text-sm\">\n <button\n className={cn('flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4', tab === 'columns' && 'bg-card')}\n onClick={() => setTab(tab === 'columns' ? null : 'columns')}\n >\n <Columns4Icon size={18} />\n <span className=\"text-nowrap [writing-mode:vertical-lr]\">Columns</span>\n </button>\n <Separator />\n <button\n className={cn('flex h-32 cursor-pointer flex-col items-center gap-y-2 p-2 py-4', tab === 'filters' && 'bg-card')}\n onClick={() => setTab(tab === 'filters' ? null : 'filters')}\n >\n <ListFilterIcon size={18} />\n <span className=\"text-nowrap [writing-mode:vertical-lr]\">Filters</span>\n </button>\n <Separator />\n </div>\n </div>\n </ResizablePanel>\n );\n};\n","/**\n * @file provider.tsx\n * Context providers that wire TanStack Table state into the UITable component tree.\n *\n * Each sub-provider is a memoised wrapper around a single React context so that\n * only the subtree that consumes a particular slice of state re-renders when that\n * slice changes.\n */\nimport { memo, useCallback, useId, useMemo, useState } from 'react';\n\nimport type { ColumnDef, ColumnPinningState, ExpandedState, RowSelectionState } from '@tanstack/react-table';\nimport { getCoreRowModel, getExpandedRowModel, getGroupedRowModel, useReactTable } from '@tanstack/react-table';\n\nimport type { AnyEntity } from '@/types';\nimport {\n TableBodyContext,\n TableContext,\n TableHeadRowContext,\n TableInnerTableContext,\n TableInnerWrapperContext,\n TableRowContext,\n} from '../../hooks/use-context';\nimport type {\n RowData,\n TableProviderProps,\n TTableBodyContext,\n TTableContext,\n TTableHeadRowContext,\n TTableInnerTableContext,\n TTableInnerWrapperContext,\n TTableRowContext,\n TUITableColumn,\n} from '../../types';\n\n/**\n * Provides the inner-wrapper DOM element id to all descendants via\n * `TableInnerWrapperContext`, enabling virtual-scroll sentinels to locate the\n * scrollable container without prop-drilling.\n */\nconst UITableInnerWrapperProvider = memo<React.PropsWithChildren<TTableInnerWrapperContext>>(({ innerWrapperId, children }) => {\n const value = useMemo<TTableInnerWrapperContext>(() => ({ innerWrapperId }), [innerWrapperId]);\n return <TableInnerWrapperContext.Provider value={value}>{children}</TableInnerWrapperContext.Provider>;\n});\nUITableInnerWrapperProvider.displayName = 'UITableInnerWrapperProvider';\n\n/**\n * Provides the TanStack `table` instance, the inner `<table>` element id, and\n * the pre-computed `totalSize` (sum of all column widths) to descendants via\n * `TableInnerTableContext`.\n */\nconst UITableInnerTableProvider = memo<React.PropsWithChildren<TTableInnerTableContext>>(({ table, innerTableId, totalSize, children }) => {\n const value = useMemo<TTableInnerTableContext>(() => ({ table, innerTableId, totalSize }), [table, innerTableId, totalSize]);\n return <TableInnerTableContext.Provider value={value}>{children}</TableInnerTableContext.Provider>;\n});\nUITableInnerTableProvider.displayName = 'UITableInnerTableProvider';\n\n/**\n * Provides column-pinning state and the \"select all\" toggle to the header-row\n * layer via `TableHeadRowContext`, preventing unnecessary re-renders in the body.\n */\nconst UITableHeadRowProvider = memo<React.PropsWithChildren<TTableHeadRowContext>>(\n ({ isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onToggleAllRowsSelected, children }) => {\n const value = useMemo<TTableHeadRowContext>(\n () => ({ isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onToggleAllRowsSelected }),\n [isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onToggleAllRowsSelected]\n );\n return <TableHeadRowContext.Provider value={value}>{children}</TableHeadRowContext.Provider>;\n }\n);\nUITableHeadRowProvider.displayName = 'UITableHeadRowProvider';\n\n/**\n * Provides loading/empty state and the current row-selection map to the table\n * body layer via `TableBodyContext`.\n */\nconst UITableBodyProvider = memo<React.PropsWithChildren<TTableBodyContext>>(({ isFetching, isEmpty, rowSelectionState, children }) => {\n const value = useMemo<TTableBodyContext>(() => ({ isFetching, isEmpty, rowSelectionState }), [isFetching, isEmpty, rowSelectionState]);\n return <TableBodyContext.Provider value={value}>{children}</TableBodyContext.Provider>;\n});\nUITableBodyProvider.displayName = 'UITableBodyProvider';\n\n/**\n * Provides per-row interaction state — click handler, pinning, and the\n * \"select all\" flag — to individual row renderers via `TableRowContext`.\n */\nconst UITableRowProvider = memo<React.PropsWithChildren<TTableRowContext<AnyEntity, AnyEntity>>>(\n ({ keyOfClickRow, isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onClickRow, children }) => {\n const value = useMemo<TTableRowContext<AnyEntity, AnyEntity>>(\n () => ({\n keyOfClickRow,\n isAllRowsSelected,\n columnPinningState,\n leftPinnedHeaders,\n rightPinnedHeaders,\n onClickRow,\n }),\n [keyOfClickRow, isAllRowsSelected, columnPinningState, leftPinnedHeaders, rightPinnedHeaders, onClickRow]\n );\n return <TableRowContext.Provider value={value}>{children}</TableRowContext.Provider>;\n }\n);\nUITableRowProvider.displayName = 'UITableRowProvider';\n\n/**\n * Root context provider for the UITable component family.\n *\n * Instantiates a TanStack Table instance with virtualisation-friendly settings\n * (column pinning, row selection, row grouping, row expansion) and propagates\n * all derived state through a nested set of memoised context providers so that\n * each layer only re-renders when its own slice of state changes.\n *\n * @example\n * ```tsx\n * import { UITableProvider } from '@customafk/lunas-ui/features/tables';\n *\n * const columns = [\n * { accessorKey: 'name', header: 'Name' },\n * { accessorKey: 'email', header: 'Email' },\n * ];\n *\n * function MyPage() {\n * return (\n * <UITableProvider\n * title=\"Users\"\n * data={users}\n * columns={columns}\n * isFetching={isLoading}\n * onClickRow={(index, id) => console.log(index, id)}\n * >\n * <UITable />\n * </UITableProvider>\n * );\n * }\n * ```\n */\nexport const UITableProvider = <\n TData extends RowData<TData> = RowData<AnyEntity>,\n TKey extends keyof TData = keyof TData,\n TColumns extends ReadonlyArray<TUITableColumn<TData>> = TUITableColumn<TData>[],\n>({\n title,\n\n isFetching = false,\n isRefetching = false,\n\n data,\n columns,\n totalRows,\n\n leftPinnedColumns = [],\n rightPinnedColumns = [],\n\n keyOfClickRow,\n onClickRow,\n onRowSelection,\n onColumnPinning,\n\n fetchMoreData,\n children,\n}: React.PropsWithChildren<TableProviderProps<TData, TKey, TColumns>>) => {\n const innerWrapperId = useId();\n const innerTableId = useId();\n\n const [rowSelection, setRowSelection] = useState<RowSelectionState>({});\n const [columnPinning, setColumnPinning] = useState<ColumnPinningState>({\n right: rightPinnedColumns as unknown as string[],\n left: ['select', ...leftPinnedColumns] as unknown as string[],\n });\n const [expanded, setExpanded] = useState<ExpandedState>({});\n\n const handleRowSelectionChange = useCallback<React.Dispatch<React.SetStateAction<RowSelectionState>>>(\n newRowSelection => {\n setRowSelection(newRowSelection);\n onRowSelection?.(newRowSelection instanceof Function ? newRowSelection(rowSelection) : newRowSelection);\n return newRowSelection;\n },\n [rowSelection, onRowSelection]\n );\n\n const handleColumnPinningChange = useCallback<React.Dispatch<React.SetStateAction<ColumnPinningState>>>(\n newColumnPinning => {\n setColumnPinning(newColumnPinning);\n onColumnPinning?.(newColumnPinning instanceof Function ? newColumnPinning(columnPinning) : newColumnPinning);\n },\n [columnPinning, onColumnPinning]\n );\n\n const table = useReactTable<TData>({\n data: data,\n columns: columns as unknown as ColumnDef<AnyEntity, unknown>[],\n state: {\n rowSelection,\n columnPinning,\n expanded,\n },\n defaultColumn: {\n enableResizing: false,\n size: undefined,\n minSize: undefined,\n maxSize: undefined,\n },\n columnResizeMode: 'onChange',\n columnResizeDirection: 'ltr',\n\n enableColumnPinning: true,\n enableRowSelection: true,\n enableColumnResizing: true,\n enableMultiRowSelection: true,\n\n autoResetAll: false,\n autoResetExpanded: false,\n autoResetPageIndex: false,\n\n getSubRows: row => row.subRows,\n getCoreRowModel: getCoreRowModel(),\n getGroupedRowModel: getGroupedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n\n onRowSelectionChange: handleRowSelectionChange,\n onColumnPinningChange: handleColumnPinningChange,\n onExpandedChange: setExpanded,\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: rows\n const rows = useMemo(() => {\n const { rows } = table.getRowModel();\n return rows;\n }, [table.getRowModel().rows, table.getState().columnPinning]);\n\n const isEmpty = useMemo<boolean>(() => {\n return !isFetching && rows.length === 0;\n }, [rows, isFetching]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const value = useMemo<TTableContext<TData>>(\n () => ({\n title,\n table,\n\n isEmpty,\n isFetching,\n isRefetching,\n\n totalRows,\n\n fetchMoreData,\n }),\n [\n title,\n table,\n\n isEmpty,\n isRefetching,\n isFetching,\n\n totalRows,\n\n fetchMoreData,\n table.getState().columnPinning,\n table.getState().expanded,\n ]\n );\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const tableState = useMemo(() => {\n return table.getState();\n }, [table.getState()]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const isAllRowsSelected = useMemo(() => {\n return table.getIsAllRowsSelected();\n }, [table.getIsAllRowsSelected()]);\n\n const rowSelectionState = useMemo(() => {\n return tableState.rowSelection;\n }, [tableState.rowSelection]);\n\n const columnPinningState = useMemo(() => {\n return tableState.columnPinning;\n }, [tableState.columnPinning]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const leftPinnedHeaders = useMemo(() => {\n return table.getLeftHeaderGroups()[0]?.headers || [];\n }, [table.getState().columnPinning]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get state\n const rightPinnedHeaders = useMemo(() => {\n return table.getRightHeaderGroups()[0]?.headers || [];\n }, [table.getState().columnPinning]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: table get total size\n const totalSize = useMemo(() => {\n return table.getTotalSize();\n }, [table.getTotalSize()]);\n\n return (\n <TableContext.Provider value={value as TTableContext<TData>}>\n <UITableInnerWrapperProvider innerWrapperId={innerWrapperId}>\n <UITableInnerTableProvider table={table} innerTableId={innerTableId} totalSize={totalSize}>\n <UITableHeadRowProvider\n isAllRowsSelected={isAllRowsSelected}\n columnPinningState={columnPinningState}\n leftPinnedHeaders={leftPinnedHeaders}\n rightPinnedHeaders={rightPinnedHeaders}\n onToggleAllRowsSelected={table.toggleAllRowsSelected}\n >\n <UITableBodyProvider isFetching={isFetching} isEmpty={isEmpty} rowSelectionState={rowSelectionState}>\n <UITableRowProvider\n keyOfClickRow={keyOfClickRow}\n isAllRowsSelected={isAllRowsSelected}\n columnPinningState={columnPinningState}\n leftPinnedHeaders={leftPinnedHeaders}\n rightPinnedHeaders={rightPinnedHeaders}\n onClickRow={onClickRow}\n >\n {children}\n </UITableRowProvider>\n </UITableBodyProvider>\n </UITableHeadRowProvider>\n </UITableInnerTableProvider>\n </UITableInnerWrapperProvider>\n </TableContext.Provider>\n );\n};\n","/**\n * @file tooltip.tsx\n * Toolbar components rendered above the table: a debounced search input,\n * an action button group (create / refresh / download), and the outer\n * toolbar shell that displays the table title.\n */\nimport { ArrowRightIcon, CirclePlus, DownloadIcon, RefreshCwIcon, SearchIcon } from 'lucide-react';\n\nimport { useDebounceCallback } from '@customafk/react-toolkit/hooks/useDebounceCallback';\n\nimport { Input } from '@/components/ui/input';\n\nimport { useUITableContext } from '../../hooks/use-context';\n\n/**\n * Debounced search input rendered inside the table toolbar.\n *\n * Fires `onSearch` 500 ms after the user stops typing and delegates all other\n * native input events via the spread `props`.\n *\n * @example\n * ```tsx\n * import { UITableTooltipFilter } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableTooltipFilter\n * placeholder=\"Search users…\"\n * onSearch={value => setQuery(value)}\n * />\n * ```\n */\nexport const UITableTooltipFilter: React.FC<\n Omit<React.ComponentProps<typeof Input>, 'className'> & {\n onSearch?: (value: string) => void;\n }\n> = ({ onSearch, onChange, ...props }) => {\n const debouncedSearch = useDebounceCallback((value: string) => {\n onSearch?.(value);\n }, 500);\n return (\n <div className=\"relative w-full max-w-80 flex-1\">\n <Input\n {...props}\n size=\"lg\"\n type=\"search\"\n placeholder=\"Search records...\"\n className=\"flex-1 ps-9 pe-9\"\n onChange={e => {\n onChange?.(e);\n debouncedSearch(e.target.value ?? '');\n }}\n />\n <div className=\"pointer-events-none absolute inset-y-0 start-0 flex items-center justify-center ps-3 text-text-positive-weak peer-disabled:opacity-50\">\n <SearchIcon size={16} />\n </div>\n <button\n className=\"absolute inset-y-0 end-0 flex h-full w-9 items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:z-10 focus-visible:border focus-visible:border-primary-strong focus-visible:ring-[3px] focus-visible:ring-primary-weak disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\"\n aria-label=\"Submit search\"\n type=\"submit\"\n >\n <ArrowRightIcon size={16} aria-hidden=\"true\" />\n </button>\n </div>\n );\n};\n\nconst ActionButton: React.FC<React.PropsWithChildren<React.ComponentProps<'button'>>> = ({ children, disabled, onClick }) => {\n return (\n <button\n type=\"button\"\n disabled={disabled}\n className=\"flex cursor-pointer items-center gap-x-1 rounded-sm border border-border bg-background p-2.5 text-sm text-text-positive-weak outline-none transition-all hover:shadow-card focus:border-border-emphasis focus:bg-muted-muted active:border-border-emphasis active:bg-muted-muted active:text-text-positive disabled:pointer-events-none disabled:cursor-default disabled:opacity-60 [&_svg]:size-3.5\"\n onClick={onClick}\n >\n {children}\n </button>\n );\n};\n\n/**\n * Grouped action buttons (create, refresh, download) displayed in the table\n * toolbar.\n *\n * Each button is disabled automatically when the corresponding handler prop is\n * omitted, so only the actions relevant to a given table need to be provided.\n *\n * @example\n * ```tsx\n * import { UITableTooltipActions } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableTooltipActions\n * onCreate={() => setOpenCreate(true)}\n * onRefresh={() => refetch()}\n * />\n * ```\n */\nexport const UITableTooltipActions: React.FC<{\n onCreate?: () => void;\n onRefresh?: () => void;\n onDownload?: () => void;\n}> = ({ onCreate, onDownload, onRefresh }) => {\n return (\n <div className=\"flex [&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none\">\n <ActionButton\n disabled={!onCreate}\n onClick={e => {\n onCreate?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <CirclePlus />\n </ActionButton>\n <ActionButton\n disabled={!onRefresh}\n onClick={e => {\n onRefresh?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <RefreshCwIcon />\n </ActionButton>\n <ActionButton\n disabled={!onDownload}\n onClick={e => {\n onDownload?.();\n e.stopPropagation();\n e.preventDefault();\n }}\n >\n <DownloadIcon />\n </ActionButton>\n </div>\n );\n};\n\n/**\n * Outer toolbar shell for the UITable component.\n *\n * Reads the table `title` from `UITableContext` and renders it as a heading\n * above the `children` slot, which typically contains a\n * `UITableTooltipFilter` and/or `UITableTooltipActions`.\n *\n * @example\n * ```tsx\n * import {\n * UITableTooltip,\n * UITableTooltipFilter,\n * UITableTooltipActions,\n * } from '@customafk/lunas-ui/features/tables';\n *\n * <UITableTooltip>\n * <UITableTooltipFilter onSearch={setQuery} />\n * <UITableTooltipActions onCreate={handleCreate} onRefresh={refetch} />\n * </UITableTooltip>\n * ```\n */\nexport const UITableTooltip: React.FC<React.PropsWithChildren> = ({ children }) => {\n const { title } = useUITableContext();\n return (\n <div data-slot=\"table-tooltip\" className=\"relative m-0 flex w-full flex-0 flex-col flex-wrap items-start space-y-2 p-0 px-2 text-sm\">\n <h3 className=\"font-semibold text-base text-text-positive\">{title}</h3>\n <div className=\"flex w-full flex-1 justify-between gap-x-2\">{children}</div>\n </div>\n );\n};\nUITableTooltip.displayName = 'TableTooltip';\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./button-CwDT3m4m.cjs`),n=require(`./tooltip-itUmYz9k.cjs`),r=require(`./separator-BwZb12bh.cjs`),i=require(`./close-DXk_H3Gt.cjs`),a=require(`./dialog-o_68LQXd.cjs`),o=require(`./command-SHd-d_o0.cjs`),s=require(`./checkbox-RZrRNYP2.cjs`),c=require(`./input-Cl5VkKQh.cjs`),l=require(`./popover-AEt-aSy3.cjs`),u=require(`./calendar-CyAPpT2m.cjs`),d=require(`./radio-group-BWLdQw7M.cjs`),f=require(`./select-Py_t2nX1.cjs`),p=require(`./textarea-BsgmN4jy.cjs`);let m=require(`lucide-react`),h=require(`react`),g=require(`react/jsx-runtime`),_=require(`@customafk/react-toolkit/utils`),v=require(`class-variance-authority`),y=require(`@customafk/react-toolkit/date-fns`),b=require(`radix-ui`),x=require(`@tanstack/react-form`);const S=(0,v.cva)([`flex w-fit items-center justify-center rounded-full font-bold text-text-negative-strong`],{variants:{color:{default:`bg-primary-strong`,secondary:`bg-secondary-strong`,success:`bg-success-strong`,info:`bg-info-strong`,warning:`bg-warning-strong`,danger:`border border-danger-strong bg-linear-to-b from-danger-strong/90 via-danger-strong to-danger-strong/90`},size:{xs:`px-1.5 py-0.5 text-xs`,sm:`px-2 py-0.75 text-xs`,md:`px-2.5 py-0.75 text-sm`,lg:`px-3 py-1 text-sm`}},defaultVariants:{color:`default`,size:`sm`}}),C=({label:e,color:t,size:n,className:r,children:i})=>(0,g.jsx)(`div`,{"data-slot":`required-indicator`,className:S({color:t,size:n,className:r}),children:e||i});function w({className:e,children:t,...n}){return(0,g.jsxs)(b.Label.Root,{"data-slot":`label`,className:(0,_.cn)(`text-text-positive`,`flex w-full items-center justify-between`,`select-none font-medium text-sm/6 leading-none`,`group-data-[disabled=true]:pointer-events-none`,`group-data-[disabled=true]:opacity-50`,`peer-disabled:cursor-not-allowed`,`peer-disabled:opacity-50`,`aria-required:*:data-[slot=required-indicator]:inline-block`,e),...n,children:[(0,g.jsx)(`span`,{className:`flex items-center gap-1`,children:t}),(0,g.jsx)(C,{label:`Required`,color:`danger`,size:`xs`,className:`hidden shrink-0`})]})}const T=(0,v.cva)(`group/field flex w-full gap-2 data-[invalid=true]:text-danger *:data-[slot=field-content]:gap-0`,{variants:{orientation:{vertical:[`flex-col *:w-full [&>.sr-only]:w-auto`],horizontal:[`flex-row items-center`,`*:data-[slot=field-label]:flex-auto`,`has-[>[data-slot=field-content]]:items-start`,`has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`],responsive:[`flex-col *:w-full [&>.sr-only]:w-auto`,`@md/field-group:flex-row`,`@md/field-group:items-center`,`@md/field-group:gap-4`,`@md/field-group:*:w-auto`,`@md/field-group:*:data-[slot=field-content]:basis-1/2`,`@md/field-group:*:data-[slot=field-content-main]:basis-1/2`,`@md/field-group:*:data-[slot=field-label]:flex-auto`,`@md/field-group:has-[>[data-slot=field-content]]:items-start`,`@md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`]}},defaultVariants:{orientation:`vertical`}}),E=(0,h.memo)(({className:e,...t})=>(0,g.jsx)(`fieldset`,{"data-slot":`field-set`,className:(0,_.cn)(`flex flex-col gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3`,e),...t}));E.displayName=`FieldSet`;const D=(0,h.memo)(({className:e,variant:t=`legend`,...n})=>(0,g.jsx)(`legend`,{"data-slot":`field-legend`,"data-variant":t,className:(0,_.cn)(`mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base`,e),...n}));D.displayName=`FieldLegend`;const O=(0,h.memo)(({className:e,...t})=>(0,g.jsx)(`div`,{"data-slot":`field-group`,className:(0,_.cn)(`group/field-group @container/field-group`,`flex flex-col gap-7 pt-4`,`data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4`,e),...t}));O.displayName=`FieldGroup`;const k=(0,h.memo)(({className:e,orientation:t=`vertical`,...n})=>(0,g.jsx)(`div`,{"data-slot":`field`,"data-orientation":t,className:(0,_.cn)(T({orientation:t}),e),...n}));k.displayName=`Field`;const A=(0,h.memo)(({className:e,...t})=>(0,g.jsx)(`div`,{"data-slot":`field-content`,className:(0,_.cn)(`group/field-content flex flex-col gap-1.5 leading-snug`,e),...t}));A.displayName=`FieldContent`;const j=(0,h.memo)(({className:e,...t})=>(0,g.jsx)(`div`,{"data-slot":`field-content-main`,className:(0,_.cn)(`relative`,e),...t}));j.displayName=`FieldContentMain`;const M=(0,h.memo)(({className:e,...t})=>(0,g.jsx)(w,{"data-slot":`field-label`,className:(0,_.cn)(`group/field-label peer/field-label min-h-6 gap-1 font-medium leading-snug`,`has-[>[data-slot=field]]:w-full`,`has-[>[data-slot=field]]:flex-col`,`has-[>[data-slot=field]]:rounded-md`,`has-[>[data-slot=field]]:border`,`has-[>[data-slot=field]]:border-border`,`has-data-[state=checked]:border-primary`,`*:data-[slot=field]:p-4 group-data-[disabled=true]/field:opacity-50`,e),...t}));M.displayName=`FieldLabel`;const N=(0,h.memo)(({className:e,...t})=>(0,g.jsx)(`div`,{"data-slot":`field-label`,className:(0,_.cn)(`flex w-fit items-center gap-2 font-medium text-sm leading-snug group-data-[disabled=true]/field:opacity-50`,e),...t}));N.displayName=`FieldTitle`;const P=(0,h.memo)(({className:e,...t})=>(0,g.jsx)(`p`,{"data-slot":`field-description`,className:(0,_.cn)(`nth-last-2:-mt-1 font-normal text-text-positive-weak text-xs leading-normal last:mt-0 [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4 [[data-variant=legend]+&]:-mt-1.5`,e),...t}));P.displayName=`FieldDescription`;const F=(0,h.memo)(({isShow:e=!0,className:t,children:n,...r})=>e===!1?null:(0,g.jsxs)(`div`,{"data-slot":`field-note`,className:(0,_.cn)(`flex items-start gap-1.5 rounded border border-primary-muted/60 bg-primary-bg-subtle/80 px-2.5 py-2 text-text-positive-weak text-xs`,t),...r,children:[(0,g.jsx)(m.InfoIcon,{size:12,className:`mt-0.5 shrink-0 text-primary/70`}),(0,g.jsx)(`span`,{children:n})]}));F.displayName=`FieldNote`;const I=(0,h.memo)(({tooltip:e})=>(0,g.jsxs)(n.t,{children:[(0,g.jsx)(n.i,{asChild:!0,children:(0,g.jsxs)(`button`,{type:`button`,tabIndex:-1,className:`inline-flex cursor-default items-center text-text-positive-weak/70 hover:text-text-positive focus:outline-none`,children:[(0,g.jsx)(m.HelpCircleIcon,{size:13,"aria-hidden":`true`}),(0,g.jsx)(`span`,{className:`sr-only`,children:`More information`})]})}),(0,g.jsx)(n.n,{side:`top`,className:`max-w-xs text-balance`,children:e})]}));I.displayName=`FieldTooltip`;const L=(0,h.memo)(({children:e,className:t,...n})=>(0,g.jsxs)(`div`,{"data-slot":`field-separator`,"data-content":!!e,className:(0,_.cn)(`relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2`,t),...n,children:[(0,g.jsx)(r.t,{className:`absolute inset-0 top-1/2`}),e&&(0,g.jsx)(`span`,{className:`relative mx-auto block w-fit bg-background px-2 text-text-positive-weak`,"data-slot":`field-separator-content`,children:e})]}));L.displayName=`FieldSeparator`;const R=(0,h.memo)(({className:e,children:t,errors:n,...r})=>{let i=(0,h.useMemo)(()=>t||(n?n?.length===1&&n[0]?.message?(0,g.jsx)(`div`,{className:`flex flex-row items-center justify-start gap-x-0.5`,children:(0,g.jsx)(`p`,{children:n[0]?.code===`invalid_type`?`Invalid format`:n[0].message})}):(0,g.jsx)(`ul`,{className:`flex list-none flex-col`,children:n.map(e=>typeof e==`string`?(0,g.jsx)(`li`,{children:e},e):e?.message?(0,g.jsx)(`li`,{children:e.message},e.message):null)}):null),[t,n]);return i?(0,g.jsx)(`div`,{role:`alert`,"data-slot":`field-error`,className:(0,_.cn)(`w-full font-medium text-danger-strong text-xs`,e),...r,children:i}):null});R.displayName=`FieldError`;const z=({label:e,description:t,options:n,tooltip:r,helperText:i,orientation:a})=>{let o=Q(),c=(0,x.useStore)(o.form.store,({isSubmitting:e})=>e);return(0,g.jsxs)(O,{className:`gap-y-4 px-4`,children:[(0,g.jsxs)(k,{orientation:a,children:[(0,g.jsxs)(A,{children:[(0,g.jsxs)(M,{children:[e,r&&(0,g.jsx)(I,{tooltip:r})]}),(0,g.jsx)(P,{children:t}),(0,g.jsx)(F,{isShow:!!i,children:i})]}),(0,g.jsx)(j,{children:(0,g.jsx)(O,{className:`flex flex-col gap-y-2`,children:n.map(e=>(0,g.jsxs)(k,{orientation:`horizontal`,children:[(0,g.jsx)(s.t,{id:`${o.name}-${e.value}`,name:o.name,checked:o.state.value?.includes(e.value)??!1,disabled:c,onCheckedChange:t=>{if(t&&o.state.value!==null)o.pushValue(e.value);else if(t&&o.state.value===null)o.setValue([e.value]);else if(!t&&o.state.value!==null){let t=o.state.value.indexOf(e.value);t>-1&&o.removeValue(t)}else o.setValue(null)}}),(0,g.jsx)(M,{htmlFor:`${o.name}-${e.value}`,className:`text-text-positive`,children:e.label})]},e.value))})})]}),(0,g.jsx)(L,{})]})},B=({label:e,description:n,placeholder:r,tooltip:i,orientation:a=`responsive`,options:s})=>{let c=Q(),u=(0,h.useMemo)(()=>c.state.meta.isTouched&&!c.state.meta.isValid,[c.state.meta.isTouched,c.state.meta.isValid]),d=(0,h.useMemo)(()=>c.state.meta.errors,[c.state.meta.errors]),f=s.find(({value:e})=>e===c.state.value)?.label;return(0,g.jsxs)(O,{className:`px-4`,children:[(0,g.jsxs)(k,{orientation:a,"data-invalid":u,children:[(0,g.jsxs)(A,{children:[(0,g.jsxs)(M,{htmlFor:c.name,children:[e,i&&(0,g.jsx)(I,{tooltip:i})]}),(0,g.jsx)(P,{children:n})]}),(0,g.jsx)(j,{className:`flex justify-end`,children:(0,g.jsxs)(`div`,{className:`flex w-full max-w-60 flex-col`,children:[(0,g.jsxs)(l.t,{children:[(0,g.jsx)(l.a,{asChild:!0,children:(0,g.jsx)(t.t,{variant:`outline`,color:`muted`,size:`lg`,className:(0,_.cn)(`flex items-center justify-start rounded outline-border`,`hover:bg-transparent`,`focus:outline-1 focus:outline-primary-strong focus:ring-4 focus:ring-primary-weak`,`data-[state=open]:text-text-positive-muted data-[state=open]:outline-1 data-[state=open]:outline-primary-strong data-[state=open]:ring-4 data-[state=open]:ring-primary-weak`,!c.state.value&&`text-text-positive-muted`),children:f?(0,g.jsx)(`p`,{className:`flex min-w-0 flex-1 items-center gap-2 text-start`,children:f}):(0,g.jsx)(`p`,{className:`flex-1 text-start text-text-positive-muted`,children:r})})}),(0,g.jsx)(l.i,{align:`end`,side:`bottom`,className:`flex w-fit rounded p-0`,onBlur:c.handleBlur,children:(0,g.jsxs)(o.t,{className:`border-none`,children:[(0,g.jsx)(o.a,{placeholder:r??`Search…`}),(0,g.jsx)(o.s,{children:(0,g.jsx)(o.i,{className:`max-h-40 overflow-y-auto`,children:s.map(({value:e,label:t})=>(0,g.jsx)(o.o,{value:t,onSelect:()=>c.handleChange(e),children:t},e))})}),(0,g.jsx)(o.r,{children:`No results found.`})]})})]}),(0,g.jsx)(`div`,{className:`mt-1 flex w-full flex-col items-end justify-end`,children:(0,g.jsx)(R,{errors:d})})]})})]}),(0,g.jsx)(L,{})]})},V=({label:e,description:n,placeholder:r,orientation:i=`responsive`,tooltip:a,helperText:o,minDate:s,maxDate:c,required:d})=>{let f=Q(),p=(0,h.useMemo)(()=>d?f.state.value===null:!1,[d,f.state.value]),v=(0,h.useMemo)(()=>f.state.meta.isTouched&&!f.state.meta.isValid,[f.state.meta.isTouched,f.state.meta.isValid]);return(0,g.jsxs)(O,{className:`px-4`,children:[(0,g.jsxs)(k,{orientation:i,"data-invalid":v,children:[(0,g.jsxs)(A,{children:[(0,g.jsxs)(M,{htmlFor:f.name,"aria-required":p,children:[e,a&&(0,g.jsx)(I,{tooltip:a})]}),(0,g.jsx)(P,{children:n})]}),(0,g.jsxs)(j,{className:`flex flex-col space-y-1`,children:[(0,g.jsx)(`div`,{className:`flex w-full flex-col`,children:(0,g.jsxs)(l.t,{children:[(0,g.jsx)(l.a,{asChild:!0,children:(0,g.jsxs)(t.t,{variant:`outline`,color:`muted`,size:`lg`,className:(0,_.cn)(`flex items-center justify-between rounded font-normal outline-border`,`hover:bg-transparent`,`focus:outline-1 focus:outline-primary-strong focus:ring-4 focus:ring-primary-weak`,`data-[state=open]:text-text-positive-muted`,`data-[state=open]:outline-1`,`data-[state=open]:outline-primary-strong`,`data-[state=open]:ring-4`,`data-[state=open]:ring-primary-weak`,f.state.value===null&&`text-text-positive-muted`),children:[(0,g.jsx)(`p`,{children:f.state.value===null?r||`Select date`:(0,y.format)(f.state.value,`PPPP`)}),(0,g.jsx)(m.CalendarDaysIcon,{strokeWidth:1})]})}),(0,g.jsxs)(l.i,{align:`start`,side:`bottom`,className:`flex w-fit min-w-0 overflow-y-auto rounded p-0`,onBlur:f.handleBlur,children:[(0,g.jsxs)(`div`,{className:`flex h-full flex-col space-y-2 border-r border-r-border p-2 [&>button]:justify-start [&>button]:text-sm`,children:[(0,g.jsx)(t.t,{variant:`ghost`,color:`muted`,className:`w-32`,onClick:()=>{f.handleChange((0,y.endOfToday)())},children:`Today`}),(0,g.jsx)(t.t,{variant:`ghost`,color:`muted`,className:`w-32`,onClick:()=>{f.handleChange((0,y.endOfTomorrow)())},children:`Tomorrow`}),(0,g.jsx)(t.t,{variant:`ghost`,color:`muted`,className:`w-32`,onClick:()=>{f.handleChange((0,y.endOfYesterday)())},children:`Yesterday`}),(0,g.jsx)(t.t,{variant:`ghost`,color:`muted`,className:`w-32`,onClick:()=>{f.handleChange((0,y.subDays)((0,y.endOfToday)(),3))},children:`Last 3 Days`}),(0,g.jsx)(t.t,{variant:`ghost`,color:`muted`,className:`w-32`,onClick:()=>{f.handleChange((0,y.subDays)((0,y.endOfToday)(),7))},children:`Last 7 Days`}),(0,g.jsx)(t.t,{variant:`ghost`,color:`muted`,className:`w-32`,onClick:()=>{f.handleChange((0,y.subDays)((0,y.endOfToday)(),30))},children:`Last 30 Days`}),(0,g.jsx)(t.t,{variant:`ghost`,color:`muted`,className:`w-32`,onClick:()=>{f.handleChange((0,y.startOfMonth)((0,y.endOfToday)()))},children:`This Month`}),(0,g.jsx)(t.t,{variant:`ghost`,color:`muted`,className:`w-32`,onClick:()=>{f.handleChange((0,y.lastDayOfMonth)((0,y.endOfToday)()))},children:`Last Month`})]}),(0,g.jsx)(`div`,{className:`flex flex-1 flex-col`,children:(0,g.jsx)(`div`,{className:`min-w-73 border-b border-b-border p-2`,children:(0,g.jsx)(u.t,{mode:`single`,selected:f.state.value??void 0,hidden:{before:s??new Date(1900,0,1),after:c??new Date(2100,11,31)},onSelect:e=>{e&&f.handleChange(e)}})})})]})]})}),(0,g.jsx)(F,{isShow:!!o,children:o})]})]}),(0,g.jsx)(L,{})]})},H=({label:e,description:t,placeholder:n,tooltip:r,helperText:i,orientation:a=`responsive`,showErrorMessage:o=!0,required:s=!1,maxLength:l})=>{let{form:u,name:d,state:f,handleBlur:p,handleChange:v}=Q(),y=(0,x.useStore)(u.store,({isSubmitting:e})=>e),b=f.meta.isDirty&&f.meta.isTouched&&!f.meta.isValid,S=s&&f.value===null,C=!y&&!!f.value,w=(0,h.useCallback)(({target:{value:e}})=>{y||l&&e.length>l||v(e||null)},[y,l,v]),T=(0,h.useCallback)(()=>{y||v(null)},[y,v]);return(0,g.jsxs)(O,{className:`gap-y-4 px-4`,children:[(0,g.jsxs)(k,{"data-invalid":b,orientation:a,children:[(0,g.jsxs)(A,{children:[(0,g.jsxs)(M,{htmlFor:d,"aria-required":S,children:[e,r&&(0,g.jsx)(I,{tooltip:r})]}),(0,g.jsx)(P,{children:t})]}),(0,g.jsxs)(j,{children:[(0,g.jsx)(c.t,{id:d,name:d,value:f.value===null?``:f.value,"aria-invalid":b,autoComplete:`email`,placeholder:n,className:(0,_.cn)(`pl-9`,C&&`pr-9`,y&&`pointer-events-none bg-muted-muted opacity-60`),onBlur:p,onChange:w}),(0,g.jsx)(`div`,{className:`absolute top-0 left-0 flex size-9 items-center justify-center text-muted`,children:(0,g.jsx)(m.AtSignIcon,{size:14})}),C&&(0,g.jsx)(`button`,{type:`button`,"aria-label":`Clear`,className:`absolute inset-e-0 inset-y-0 top-3 flex h-fit w-8 cursor-pointer items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:text-text-positive-strong`,onClick:T,children:(0,g.jsx)(m.XIcon,{size:14,"aria-hidden":`true`})}),(0,g.jsx)(`div`,{className:`mt-1 flex w-full items-start justify-start`,children:o&&f.meta.isDirty&&(0,g.jsx)(R,{errors:f.meta.errors})}),(0,g.jsx)(F,{isShow:!!i,children:i})]})]}),(0,g.jsx)(L,{})]})},U=e=>e?/^-?\d*\.?\d*$/:/^\d*\.?\d*$/,ee=e=>Number(e).toLocaleString(),te=(e,t,n)=>{if(n===`none`)return e;let r=10**t,i=e*r;switch(n){case`up`:return Math.ceil(i)/r;case`down`:return Math.floor(i)/r;case`nearest`:return i%1<.1?Math.floor(i)/r:i%1>=.59?Math.ceil(i)/r:(Math.floor(i)+.5)/r;default:return e}},ne=({disabled:e=!1,readOnly:t=!1,allowNegative:n=!1,numberAfterDecimalPoint:r=2,roundingRule:i=`none`,value:a=null,unitText:o,decimal:s,placeholder:l,precision:u,wrapperClassName:d,className:f,onChange:p,onValueChange:m,onFocus:v,onBlur:y,...b})=>{let x=(0,h.useRef)(null),S=(0,h.useRef)(null),[C,w]=(0,h.useState)(a?.toString()??null),T=(0,h.useMemo)(()=>s?.[1]??r,[s,r]),E=(0,h.useMemo)(()=>s&&s[0]-s[1],[s]),D=(0,h.useMemo)(()=>U(n),[n]),O=(0,h.useCallback)(e=>{if(!T||e===`-`)return!0;let[t,n=``]=e.split(`.`),r=t.startsWith(`-`)?t.length-1:t.length;return n.length<=T&&r<=(E??1/0)},[T,E]),k=(0,h.useCallback)(e=>{if(e===`0`)return`0`;if(!Number(e))return null;let[t,n=``]=te(parseFloat(e),Math.min(T-1,u||0),i).toString().split(`.`),r=ee(t);return n?`${r}.${n}`:r},[T,u,i]),A=(0,h.useCallback)(e=>{let t=e===`0`,n=e===`-`||/^-0+(\.0+)?$/.test(e)||/^-0*\.$/.test(e);if(t){m?.(0),w(e);return}if(n){w(()=>(m?.(0),e));return}},[m]),j=(0,h.useCallback)(e=>{p?.(e);let{value:t}=e.target;if(t===``||t===void 0){m?.(null),w(null);return}A(t),!(!D.test(t)||!O(t))&&(m?.(parseFloat(t)||0),w(t))},[O,p,m,A,D]),M=(0,h.useCallback)(e=>{t||(v?.(e),w(e=>typeof e==`string`?e.replace(/,/g,``):null))},[t,v]),N=(0,h.useCallback)(e=>{t||(y?.(e),w(e=>e===null?null:e===`0`||e===`-`||/^-0+(\.0+)?$/.test(e)||/^-0*\.$/.test(e)?`0`:typeof e==`string`?k(e):null))},[t,k,y]);return(0,h.useEffect)(()=>{let e=document.activeElement===S.current;if(a==null||!D.test(a.toString())||!O(a.toString())){w(null);return}w(t=>e?t:k(a.toString()))},[k,a,O,D]),(0,h.useEffect)(()=>{if(!x.current||!S.current||!o)return;let e=x.current.offsetWidth;S.current.style.setProperty(`padding-right`,`${(e+10)/16}rem`)},[o]),(0,g.jsxs)(`div`,{className:(0,_.cn)(`relative`,d),children:[(0,g.jsx)(c.t,{...b,ref:S,value:C||(t?`0`:``),placeholder:l,disabled:e,readOnly:t,className:(0,_.cn)(`text-end font-number text-sm slashed-zero lining-nums tabular-nums`,t&&`bg-muted text-muted-foreground`,f),onChange:j,onFocus:M,onBlur:N}),o&&(0,g.jsx)(`span`,{ref:x,className:`-translate-y-1/2 pointer-events-none absolute top-1/2 right-2 text-muted-foreground text-sm`,children:o})]})},re=({label:e,description:t,placeholder:n,tooltip:r,helperText:i,orientation:a=`responsive`,showErrorMessage:o=!0,rounding:s,decimalPlaces:c,percision:l,unit:u,required:d,allowNegative:f})=>{let p=Q(),v=(0,x.useStore)(p.form.store,({isSubmitting:e})=>e),y=p.state.meta.errors,b=d?p.state.value===null:!1,S=(0,h.useCallback)(e=>{v||p.handleChange(e)},[v,p.handleChange]);return(0,g.jsxs)(O,{className:`gap-y-4 px-4`,children:[(0,g.jsxs)(k,{orientation:a,"data-invalid":p.state.meta.isTouched&&!p.state.meta.isValid,children:[(0,g.jsxs)(A,{children:[(0,g.jsxs)(M,{htmlFor:p.name,"aria-required":b,children:[e,r&&(0,g.jsx)(I,{tooltip:r})]}),(0,g.jsx)(P,{children:t})]}),(0,g.jsxs)(j,{children:[(0,g.jsxs)(`div`,{className:`relative w-full`,children:[(0,g.jsx)(ne,{id:p.name,value:p.state.value,"aria-invalid":p.state.meta.isTouched&&!p.state.meta.isValid&&p.state.meta.isDirty,placeholder:n,roundingRule:s,numberAfterDecimalPoint:c,precision:l,unitText:u,allowNegative:f,className:(0,_.cn)(v&&`pointer-events-none bg-muted-muted opacity-60`),onBlur:p.handleBlur,onValueChange:S}),v&&(0,g.jsx)(`div`,{className:`absolute inset-s-2 inset-y-0 top-2.5 text-muted-weak [&>svg]:size-3.5`,children:(0,g.jsx)(m.Loader2Icon,{className:`animate-spin text-primary-strong`})}),p.state.meta.isDirty&&o&&!!y.length&&(0,g.jsx)(`div`,{className:`absolute inset-s-2 inset-y-0 top-2.75 text-danger-strong [&>svg]:size-3.5`,children:(0,g.jsx)(m.BanIcon,{})}),(0,g.jsx)(`div`,{className:`mt-1 flex w-full flex-col items-end justify-end`,children:p.state.meta.isDirty&&o&&(0,g.jsx)(R,{errors:y})})]}),(0,g.jsx)(F,{isShow:!!i,children:i})]})]}),(0,g.jsx)(L,{})]})},ie=({label:e,description:t,placeholder:n,orientation:r=`responsive`,tooltip:i,helperText:a,showErrorMessage:o=!0})=>{let s=(0,h.useId)(),{form:l,name:u,state:d,handleBlur:f,handleChange:p}=Q(),_=(0,x.useStore)(l.store,({isSubmitting:e})=>e),[v,y]=(0,h.useState)(!1),b=d.meta.isDirty&&d.meta.isTouched&&!d.meta.isValid,S=(0,h.useCallback)(()=>y(e=>!e),[]),C=(0,h.useCallback)(({target:{value:e}})=>{_||p(e||null)},[_,p]);return(0,g.jsxs)(O,{className:`gap-y-4 px-4`,children:[(0,g.jsxs)(k,{"data-invalid":b,orientation:r,children:[(0,g.jsxs)(A,{children:[(0,g.jsxs)(M,{htmlFor:s,children:[e,i&&(0,g.jsx)(I,{tooltip:i})]}),(0,g.jsx)(P,{children:t})]}),(0,g.jsxs)(j,{children:[(0,g.jsx)(c.t,{id:s,name:u,type:v?`text`:`password`,placeholder:n,value:d.value??``,"aria-invalid":b,autoComplete:`new-password`,onBlur:f,onChange:C}),(0,g.jsx)(`button`,{className:`absolute inset-e-0 inset-y-0 flex size-9 items-center justify-center rounded-e-md text-muted outline-none transition-[color,box-shadow] focus:z-10 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,type:`button`,onClick:S,"aria-label":v?`Hide password`:`Show password`,"aria-pressed":v,"aria-controls":s,children:v?(0,g.jsx)(m.EyeOffIcon,{size:16,"aria-hidden":`true`}):(0,g.jsx)(m.EyeIcon,{size:16,"aria-hidden":`true`})}),(0,g.jsx)(`div`,{className:`mt-1 flex w-full items-start justify-start`,children:o&&d.meta.isDirty&&(0,g.jsx)(R,{errors:d.meta.errors})}),(0,g.jsx)(F,{isShow:!!a,children:a})]})]}),(0,g.jsx)(L,{})]})},ae=({label:e,description:t,orientation:n,options:r,tooltip:i,helperText:a})=>{let o=Q(),s=(0,x.useStore)(o.form.store,({isSubmitting:e})=>e);return(0,g.jsxs)(O,{className:`px-4`,children:[(0,g.jsxs)(k,{orientation:n,className:`flex-col gap-2`,children:[(0,g.jsxs)(A,{children:[(0,g.jsxs)(M,{children:[e,i&&(0,g.jsx)(I,{tooltip:i})]}),(0,g.jsx)(P,{children:t}),(0,g.jsx)(F,{isShow:!!a,children:a})]}),(0,g.jsx)(j,{children:(0,g.jsx)(d.t,{value:o.state.value??``,className:`w-full`,onValueChange:o.handleChange,children:r.map(e=>(0,g.jsx)(M,{className:(0,_.cn)(`h-fit`,o.state.value===e.value&&`border-primary-weak! bg-primary-bg-subtle`,s&&`pointer-events-none bg-muted-muted opacity-60`,o.state.value===e.value&&s&&`border-border-strong!`),children:(0,g.jsxs)(k,{orientation:`horizontal`,className:`items-start gap-3 rounded p-2!`,children:[(0,g.jsx)(d.n,{value:e.value,className:`mt-0.5 shrink-0`}),(0,g.jsxs)(A,{className:`gap-0.5!`,children:[(0,g.jsx)(N,{children:e.label}),(0,g.jsx)(P,{className:`text-xs`,children:e.description})]})]})},e.value))})})]}),(0,g.jsx)(L,{})]})},oe=({label:e,description:t,placeholder:n,orientation:r=`responsive`,tooltip:i,options:a,helperText:o,required:s=!1})=>{let c=Q(),l=c.state.meta.isTouched&&!c.state.meta.isValid,u=s&&c.state.value===null,d=c.state.meta.errors;return(0,g.jsxs)(O,{className:`gap-y-4 px-4`,children:[(0,g.jsxs)(k,{orientation:r,"data-invalid":l,children:[(0,g.jsxs)(A,{children:[(0,g.jsxs)(M,{htmlFor:c.name,"aria-required":u,children:[e,i&&(0,g.jsx)(I,{tooltip:i})]}),(0,g.jsx)(P,{children:t})]}),(0,g.jsxs)(j,{className:`flex flex-col`,children:[(0,g.jsxs)(f.t,{value:c.state.value??``,onValueChange:c.handleChange,children:[(0,g.jsx)(f.s,{"aria-invalid":l?`true`:void 0,onBlur:c.handleBlur,children:(0,g.jsx)(f.c,{placeholder:n})}),(0,g.jsxs)(f.n,{children:[!!a.length&&a.map(e=>(0,g.jsx)(f.i,{value:e.value,children:e.label},e.value)),!a.length&&(0,g.jsxs)(`div`,{className:`flex items-center justify-center gap-x-2 rounded border border-border bg-muted-muted px-4 py-6.5 text-center text-sm text-text-positive-weak`,children:[(0,g.jsx)(m.PackagePlusIcon,{strokeWidth:1}),`No options available`]})]})]}),(0,g.jsx)(`div`,{className:`mt-1 flex w-full flex-col items-end justify-end`,children:(0,g.jsx)(R,{errors:d})}),(0,g.jsx)(F,{isShow:!!o,children:o})]})]}),(0,g.jsx)(L,{})]})};function W({className:e,...t}){return(0,g.jsx)(b.Switch.Root,{"data-slot":`switch`,className:(0,_.cn)(`peer`,`w-8 shrink-0 cursor-pointer items-center rounded-full shadow-xs transition-all`,`inline-flex h-5`,`focus-visible:border-primary-strong`,`focus-visible:ring-primary-weak`,`focus-visible:ring-4`,`disabled:cursor-not-allowed`,`disabled:opacity-50`,`-outline-offset-1 inset-shadow-2xs outline-1`,`data-[state=checked]:bg-primary`,`data-[state=checked]:outline-primary-strong`,`data-[state=unchecked]:bg-muted-weak`,`data-[state=unchecked]:outline-border`,`data-[state=unchecked]:[&_span]:size-4`,`data-[state=unchecked]:[&_span]:translate-x-0.5`,`data-[state=unchecked]:[&_span]:rtl:-translate-x-0.5`,e),...t,children:(0,g.jsx)(b.Switch.Thumb,{"data-slot":`switch-thumb`,className:(0,_.cn)(`block size-4 bg-card shadow-xs`,`pointer-events-none rounded-full ring-0 transition-transform`,`data-[state=checked]:translate-x-[calc(100%-3px)]`,`data-[state=unchecked]:translate-x-0`)})})}const G=({label:e,description:t,helperText:n})=>{let r=Q();return(0,g.jsxs)(O,{className:`gap-y-4 px-4`,children:[(0,g.jsxs)(k,{orientation:`vertical`,className:`relative justify-between gap-y-1`,children:[(0,g.jsxs)(A,{children:[(0,g.jsx)(N,{className:`cursor-pointer`,children:(0,g.jsx)(`label`,{htmlFor:r.name,children:e})}),(0,g.jsx)(P,{children:t}),(0,g.jsx)(W,{id:r.name,checked:r.state.value??!1,className:`absolute top-1 right-1`,onBlur:r.handleBlur,onCheckedChange:r.handleChange})]}),(0,g.jsx)(F,{isShow:!!n,children:n})]}),(0,g.jsx)(L,{})]})},K=({label:e,description:t,placeholder:n,tooltip:r,helperText:i,counter:a=!1,orientation:o=`responsive`,showClearButton:s=!1,showErrorMessage:l=!0,required:u=!1,maxLength:d})=>{let f=(0,h.useId)(),p=(0,h.useRef)(null),{form:v,name:y,state:b,handleBlur:S,handleChange:C}=Q(),w=(0,x.useStore)(v.store,({isSubmitting:e})=>e),T=s&&!w&&!!b.value,E=b.value?b.value.length:0,D=(0,h.useMemo)(()=>{if(!a)return``;let e=`character${[0,1].includes(E)?``:`s`}`;return a&&d?`${E} / ${d} character${E?`s`:``}`:`${E} ${e}`},[E,a,d]),N=b.meta.isDirty&&b.meta.isTouched&&!b.meta.isValid,z=u&&b.value===null,B=d&&E>=d*.8,V=d&&E>=d,H=(0,h.useCallback)(({target:{value:e}})=>{w||a&&d&&e.length>d||C(e||null)},[w,a,d,C]),U=(0,h.useCallback)(()=>{w||(C(null),p.current?.focus())},[w,C]);return(0,g.jsxs)(O,{className:`gap-y-4 px-4`,children:[(0,g.jsxs)(k,{orientation:o,"data-invalid":N,children:[(0,g.jsxs)(A,{children:[(0,g.jsxs)(M,{"aria-required":z,htmlFor:f,children:[e,r&&(0,g.jsx)(I,{tooltip:r})]}),(0,g.jsx)(P,{children:t})]}),(0,g.jsxs)(j,{children:[(0,g.jsx)(c.t,{ref:p,id:f,name:y,value:b.value??``,"aria-invalid":N,autoComplete:`off`,placeholder:n,autoCapitalize:`none`,autoCorrect:`off`,className:(0,_.cn)(`pr-6`,w&&`pointer-events-none bg-muted-muted opacity-60`),onBlur:S,onChange:H}),T&&(0,g.jsx)(`button`,{type:`button`,"aria-label":`Clear`,className:`absolute inset-e-0 inset-y-0 top-3 flex h-fit w-8 cursor-pointer items-center justify-center rounded-e-md text-text-positive-weak outline-none transition-[color,box-shadow] hover:text-text-positive focus:text-text-positive-intense [&>svg]:size-3.5`,onClick:U,children:(0,g.jsx)(m.XIcon,{"aria-hidden":`true`})}),w&&(0,g.jsx)(`div`,{className:`absolute inset-e-2 inset-y-0 top-2.5 text-muted-weak`,children:(0,g.jsx)(m.Loader2Icon,{size:14,className:`animate-spin text-primary-strong`})}),!T&&b.meta.isDirty&&l&&!!b.meta.errors.length&&(0,g.jsx)(`div`,{className:`absolute inset-e-2 inset-y-0 top-2.5 text-danger-strong`,children:(0,g.jsx)(m.BanIcon,{"aria-hidden":`true`,size:14})}),(0,g.jsxs)(`div`,{className:`my-1 flex w-full items-start justify-between gap-x-2`,children:[b.meta.isDirty&&l?(0,g.jsx)(R,{className:`flex-1`,errors:b.meta.errors}):(0,g.jsx)(`div`,{}),!!a&&(0,g.jsx)(`p`,{className:(0,_.cn)(`h-4 flex-0 text-nowrap text-end text-xs tabular-nums transition-colors`,V?`font-medium text-danger-strong`:B?`text-warning-strong`:`text-text-positive-weak`),children:D})]}),(0,g.jsx)(F,{isShow:!!i,children:i})]})]}),(0,g.jsx)(L,{})]})},q=(0,h.memo)(({label:e,description:t,placeholder:n,tooltip:r,helperText:i,counter:a=!1,orientation:o=`responsive`,showErrorMessage:s=!0,required:c=!1,maxLength:l})=>{let u=(0,h.useId)(),{form:d,state:f,name:v,handleBlur:y,handleChange:b}=Q(),S=(0,x.useStore)(d.store,({isSubmitting:e})=>e),C=f.value?f.value.length:0,w=(0,h.useMemo)(()=>{if(!a)return``;let e=`character${[0,1].includes(C)?``:`s`}`;return a&&l?`${C} / ${l} character${C?`s`:``}`:`${C} ${e}`},[C,a,l]),T=f.meta.isDirty&&f.meta.isTouched&&!f.meta.isValid,E=c&&f.value===null,D=f.meta.errors,N=l&&C>=l*.8,z=l&&C>=l,B=(0,h.useCallback)(({target:{value:e}})=>{S||a&&l&&e.length>l||b(e||null)},[S,a,l,b]);return(0,g.jsxs)(O,{className:`gap-y-4 px-4`,children:[(0,g.jsxs)(k,{orientation:o,"data-invalid":T,children:[(0,g.jsxs)(A,{children:[(0,g.jsxs)(M,{"aria-required":E,htmlFor:u,children:[e,r&&(0,g.jsx)(I,{tooltip:r})]}),(0,g.jsx)(P,{children:t})]}),(0,g.jsxs)(j,{children:[(0,g.jsx)(p.t,{id:u,name:v,value:f.value===null?``:f.value,"aria-invalid":T,autoCapitalize:`none`,autoComplete:`off`,placeholder:n,className:(0,_.cn)(S&&`pointer-events-none bg-muted-muted opacity-60`),onChange:B,onBlur:y}),S&&(0,g.jsx)(`div`,{className:`absolute inset-e-2 inset-y-0 top-2.5 text-muted-weak`,children:(0,g.jsx)(m.Loader2Icon,{size:14,className:`animate-spin text-primary-strong`})}),f.meta.isDirty&&s&&!!D.length&&(0,g.jsx)(`div`,{className:`absolute inset-e-2 inset-y-0 top-2.5 text-danger-strong`,children:(0,g.jsx)(m.BanIcon,{size:14})}),(0,g.jsxs)(`div`,{className:`my-1 flex w-full items-start justify-between gap-x-2`,children:[f.meta.isDirty&&s?(0,g.jsx)(R,{className:`flex-1`,errors:f.meta.errors}):(0,g.jsx)(`div`,{}),!!a&&(0,g.jsx)(`p`,{className:(0,_.cn)(`h-4 flex-0 text-nowrap text-end text-xs tabular-nums transition-colors`,z?`font-medium text-danger-strong`:N?`text-warning-strong`:`text-text-positive-weak`),children:w})]}),(0,g.jsx)(F,{isShow:!!i,children:i})]})]}),(0,g.jsx)(L,{})]})});q.displayName=`TextareaField`;const se=({label:e,className:n})=>{let r=$(),i=(0,h.useCallback)(async()=>{await r.handleSubmit({submitAction:`submit`}),r.state.isSubmitSuccessful&&r.reset()},[r]);return(0,g.jsx)(r.Subscribe,{selector:e=>({disabled:e.isPristine||!e.isValid||e.isValidating||e.isSubmitting||!e.canSubmit||e.isDefaultValue,isSubmitting:e.isSubmitting}),children:({disabled:r,isSubmitting:a})=>(0,g.jsx)(t.t,{type:`button`,size:`md`,disabled:r,isLoading:a,className:(0,_.cn)(`min-h-8 min-w-32`,n),onClick:i,children:e??`Submit`})})},ce=({type:e=`create`})=>{let n=$();return(0,g.jsxs)(`div`,{className:`flex h-8 items-center justify-between`,children:[(0,g.jsx)(n.Subscribe,{selector:e=>({disabled:e.isPristine||e.isSubmitting}),children:({disabled:e})=>(0,g.jsx)(t.t,{color:`muted`,variant:`outline`,type:`button`,size:`md`,disabled:e,className:`h-full min-w-32`,onClick:()=>n.reset(),children:`Cancel`})}),e===`create`&&(0,g.jsx)(n.Subscribe,{selector:e=>({disabled:e.isPristine||!e.isValid||e.isValidating||e.isSubmitting||!e.canSubmit||e.isDefaultValue,isSubmitting:e.isSubmitting}),children:({disabled:e,isSubmitting:r})=>(0,g.jsxs)(t.t,{type:`submit`,size:`md`,disabled:e,isLoading:r,className:`h-full min-w-32`,onClick:async()=>{await n.handleSubmit({submitAction:`create`}),n.state.isSubmitSuccessful&&n.reset()},children:[(0,g.jsx)(m.PlusIcon,{}),`Add New`]})}),e===`update`&&(0,g.jsx)(n.Subscribe,{selector:e=>({disabled:e.isPristine||!e.isValid||e.isValidating||e.isSubmitting||!e.canSubmit||e.isDefaultValue,isSubmitting:e.isSubmitting}),children:({disabled:e,isSubmitting:r})=>(0,g.jsxs)(t.t,{type:`submit`,size:`md`,disabled:e,isLoading:r,className:`h-full min-w-32`,onClick:async()=>{await n.handleSubmit({submitAction:`update`}),n.state.isSubmitSuccessful&&n.reset()},children:[(0,g.jsx)(m.ArrowDownToLine,{}),`Update`]})})]})};function J({className:e,orientation:t=`horizontal`,decorative:n=!0,...r}){return(0,g.jsx)(b.Separator.Root,{"data-slot":`separator`,decorative:n,orientation:t,className:(0,_.cn)(`shrink-0 bg-border-weak`,`data-[orientation=horizontal]:h-px`,`data-[orientation=horizontal]:w-full`,`data-[orientation=vertical]:h-full`,`data-[orientation=vertical]:w-px`,e),...r})}const le=({title:e,description:n,onDelete:r,children:i})=>(0,g.jsxs)(`section`,{"data-slot":`card-form`,className:`relative flex flex-col rounded-md bg-card pb-4 shadow-card ring-1 ring-border`,children:[(0,g.jsxs)(`div`,{"data-slot":`card-form-header`,className:`flex flex-col space-y-0.5 px-4 py-3`,children:[(0,g.jsx)(`p`,{className:`font-semibold text-base tracking-tight`,children:e}),!!n&&(0,g.jsx)(`p`,{className:`text-text-positive-weak text-sm`,children:n})]}),(0,g.jsx)(J,{}),(0,g.jsx)(`div`,{"data-slot":`card-form-main`,className:`flex flex-col py-4`,children:i}),!!r&&(0,g.jsxs)(t.t,{color:`danger`,variant:`ghost`,size:`sm`,className:`absolute top-2.5 right-3`,onClick:e=>{r?.(),e.preventDefault(),e.stopPropagation()},children:[(0,g.jsx)(m.Trash2Icon,{}),`Remove`]})]}),ue=({children:e})=>(0,g.jsx)(`div`,{"data-slot":`section-form`,className:`flex flex-col space-y-4`,children:e}),Y=({disabled:e,className:n,onClick:r,children:i})=>(0,g.jsx)(t.t,{type:`button`,variant:`outline`,color:`muted`,disabled:e,className:(0,_.cn)(`min-w-40`,n),onClick:r,children:i??`Cancel`}),X=({isSubmitting:e,submitText:n=`Submit`,disabled:r,className:i,onClick:a})=>(0,g.jsx)(t.t,{type:`button`,isLoading:e,disabled:r||e,className:(0,_.cn)(`min-w-40`,i),onClick:a,children:n}),de=({title:e,submitText:t,open:n,onOpenChange:i,children:o})=>{let s=$(),c=(0,h.useCallback)(e=>{e||s.reset(),i?.(e)},[s.reset,i]);return(0,g.jsx)(a.t,{open:n,onOpenChange:c,children:(0,g.jsxs)(a.c,{"data-slot":`dialog-portal`,children:[(0,g.jsx)(a.s,{}),(0,g.jsxs)(a.r,{className:`flex size-full max-h-dvh max-w-dvw flex-col gap-0 overflow-y-auto p-0 shadow-dialog sm:h-auto sm:max-h-[85dvh] sm:max-w-2xl sm:rounded-md`,children:[(0,g.jsx)(`div`,{"data-slot":`dialog-header`,className:`flex items-center justify-center gap-2 px-6 py-5 text-center sm:text-left`,children:(0,g.jsx)(a.l,{"data-slot":`dialog-title`,className:`text-lg font-semibold tracking-tight`,children:e})}),(0,g.jsx)(r.t,{}),(0,g.jsx)(`div`,{"data-slot":`dialog-content`,className:`relative flex flex-col overflow-y-auto p-0 pt-4 max-sm:flex-1 sm:p-4`,children:o}),(0,g.jsx)(r.t,{}),(0,g.jsxs)(`div`,{"data-slot":`dialog-footer`,className:`flex flex-col-reverse items-center justify-end gap-2 px-6 py-4 sm:flex-row max-sm:[&>button]:w-full`,children:[(0,g.jsx)(s.Subscribe,{selector:e=>({disabled:e.isSubmitting}),children:({disabled:e})=>(0,g.jsx)(Y,{disabled:e,onClick:()=>{s.reset(),c(!1)}})}),(0,g.jsx)(s.Subscribe,{selector:e=>({isSubmitting:e.isSubmitting,disabled:e.isPristine||!e.isValid||e.isValidating||e.isSubmitting||!e.canSubmit}),children:({isSubmitting:e,disabled:n})=>(0,g.jsx)(X,{isSubmitting:e,disabled:n,submitText:t,onClick:()=>s.handleSubmit()})})]})]})]})})},fe=({label:e,description:t,helperText:n,orientation:r=`responsive`,children:i})=>(0,g.jsxs)(O,{className:`gap-y-4 px-4`,children:[(0,g.jsxs)(k,{orientation:r,children:[(0,g.jsxs)(A,{children:[(0,g.jsx)(M,{children:e}),(0,g.jsx)(P,{children:t})]}),(0,g.jsxs)(j,{children:[i,(0,g.jsx)(F,{isShow:!!n,children:n})]})]}),(0,g.jsx)(L,{})]}),pe=({title:e,open:t,contentClassName:n,onOpenChange:r,children:a})=>{let o=$();return(0,g.jsx)(b.Dialog.Root,{"data-slot":`dialog`,open:t,onOpenChange:r,children:(0,g.jsxs)(b.Dialog.Portal,{"data-slot":`dialog-portal`,children:[(0,g.jsx)(b.Dialog.Overlay,{"data-slot":`dialog-overlay`,className:(0,_.cn)(`fixed inset-0 z-40 bg-black/40 backdrop-blur-sm`,`data-[state=open]:animate-in data-[state=open]:fade-in`,`data-[state=closed]:animate-out data-[state=closed]:fade-out`)}),(0,g.jsx)(b.Dialog.Content,{"data-slot":`dialog-content`,className:(0,_.cn)(`fixed top-4 right-4 z-50 h-[calc(100dvh-2rem)] min-w-sm max-w-xl rounded-md bg-background shadow-lg ring-1 ring-border`,`duration-300`,`data-[state=open]:animate-in data-[state=open]:slide-in-from-right data-[state=open]:fade-in`,`data-[state=closed]:animate-out data-[state=closed]:slide-out-to-right data-[state=closed]:fade-out`),children:(0,g.jsxs)(`section`,{className:`relative flex size-full flex-col`,children:[(0,g.jsx)(`header`,{className:`flex h-14 shrink-0 items-center border-b border-border px-5`,children:(0,g.jsx)(`h2`,{className:`font-semibold text-base tracking-tight text-text-positive`,children:e})}),(0,g.jsx)(`div`,{className:(0,_.cn)(`flex flex-1 flex-col overflow-y-auto py-4`,n),children:a}),(0,g.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-2 border-t border-border px-4 py-3`,children:[(0,g.jsx)(o.Subscribe,{selector:e=>({isSubmitting:e.isSubmitting,disabled:e.isPristine||!e.isValid||e.isValidating||e.isSubmitting||!e.canSubmit}),children:({isSubmitting:e,disabled:t})=>(0,g.jsx)(X,{isSubmitting:e,disabled:t,className:`w-full`,onClick:()=>o.handleSubmit()})}),(0,g.jsx)(o.Subscribe,{selector:e=>({disabled:e.isPristine||e.isSubmitting}),children:({disabled:e})=>(0,g.jsx)(Y,{disabled:e,className:`w-full`,onClick:()=>{o.reset(),r?.(!1)}})})]}),(0,g.jsx)(b.Dialog.Close,{asChild:!0,children:(0,g.jsx)(i.t,{className:`absolute top-2.5 right-3`})})]})})]})})},me=({children:e})=>(0,g.jsx)(`header`,{"data-slot":`section-header`,className:`flex items-center px-4 py-3 font-semibold text-base text-text-positive tracking-tight`,children:e}),he=({children:e})=>(0,g.jsx)(`main`,{"data-slot":`section-main`,className:`relative flex flex-col py-4`,children:e}),ge=({title:e,children:t})=>(0,g.jsxs)(`section`,{"data-slot":`section-form`,className:`flex flex-col rounded-md bg-background shadow-card ring-1 ring-border`,children:[(0,g.jsx)(me,{children:e}),(0,g.jsx)(J,{}),(0,g.jsx)(he,{children:t})]}),_e=({title:e,description:t,helperText:n})=>(0,g.jsxs)(O,{className:`gap-y-4 px-4`,children:[(0,g.jsxs)(k,{className:`gap-0`,children:[(0,g.jsxs)(A,{children:[(0,g.jsx)(D,{className:`mb-1`,children:e}),(0,g.jsx)(P,{children:t})]}),(0,g.jsx)(F,{isShow:!!n,children:n})]}),(0,g.jsx)(L,{})]}),{fieldContext:ve,formContext:Z,useFieldContext:Q,useFormContext:$}=(0,x.createFormHookContexts)(),{useAppForm:ye,withForm:be,withFieldGroup:xe}=(0,x.createFormHook)({fieldContext:ve,formContext:Z,fieldComponents:{TextField:K,TextareaField:q,NumberField:re,EmailField:H,PasswordField:ie,SelectField:oe,ComboboxField:B,DateField:V,SwitchField:G,RadioGroupField:ae,CheckboxField:z,FieldGroup:O,Field:k,FieldContent:A,FieldLabel:M,FieldContentMain:j,FieldSeparator:L,FieldError:R},formComponents:{TanStackDialogForm:de,TanStackPopoverForm:pe,TanStackContainerForm:ue,TanStackSectionForm:ge,TanStackCardForm:le,TanStackFieldGroup:fe,TanStackTitleField:_e,TanStackActionsForm:ce,TanStackActionSubmit:se}});Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return O}});
|
|
2
|
+
//# sourceMappingURL=tanstack-form-BmV2BXDz.cjs.map
|