@jarllyng/nostromo 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base.css +312 -0
- package/dist/chunk-2DNQXAMB.cjs +2 -0
- package/dist/chunk-2DNQXAMB.cjs.map +1 -0
- package/dist/chunk-2JQROMCM.js +2 -0
- package/dist/chunk-2JQROMCM.js.map +1 -0
- package/dist/chunk-3BNGK67W.js +2 -0
- package/dist/chunk-3BNGK67W.js.map +1 -0
- package/dist/chunk-3V3OIZWQ.cjs +2 -0
- package/dist/chunk-3V3OIZWQ.cjs.map +1 -0
- package/dist/chunk-44HISN45.js +2 -0
- package/dist/chunk-44HISN45.js.map +1 -0
- package/dist/chunk-4FSJEW7W.cjs +2 -0
- package/dist/chunk-4FSJEW7W.cjs.map +1 -0
- package/dist/chunk-4PN7OGLX.cjs +2 -0
- package/dist/chunk-4PN7OGLX.cjs.map +1 -0
- package/dist/chunk-4TYVEXRA.cjs +2 -0
- package/dist/chunk-4TYVEXRA.cjs.map +1 -0
- package/dist/chunk-4WFEVNXW.cjs +2 -0
- package/dist/chunk-4WFEVNXW.cjs.map +1 -0
- package/dist/chunk-55N2IT62.cjs +2 -0
- package/dist/chunk-55N2IT62.cjs.map +1 -0
- package/dist/chunk-5PVFLXPO.cjs +3 -0
- package/dist/chunk-5PVFLXPO.cjs.map +1 -0
- package/dist/chunk-6QAYHUNV.js +3 -0
- package/dist/chunk-6QAYHUNV.js.map +1 -0
- package/dist/chunk-7PPAI3MM.cjs +2 -0
- package/dist/chunk-7PPAI3MM.cjs.map +1 -0
- package/dist/chunk-7SPPGTBT.cjs +2 -0
- package/dist/chunk-7SPPGTBT.cjs.map +1 -0
- package/dist/chunk-7W456HZL.js +2 -0
- package/dist/chunk-7W456HZL.js.map +1 -0
- package/dist/chunk-7WEIVLG3.cjs +2 -0
- package/dist/chunk-7WEIVLG3.cjs.map +1 -0
- package/dist/chunk-7YFUAGIW.cjs +2 -0
- package/dist/chunk-7YFUAGIW.cjs.map +1 -0
- package/dist/chunk-ABA7B5DE.js +2 -0
- package/dist/chunk-ABA7B5DE.js.map +1 -0
- package/dist/chunk-AC2JBXHQ.js +2 -0
- package/dist/chunk-AC2JBXHQ.js.map +1 -0
- package/dist/chunk-AHRTNKXE.js +2 -0
- package/dist/chunk-AHRTNKXE.js.map +1 -0
- package/dist/chunk-AVTJE2O2.js +3 -0
- package/dist/chunk-AVTJE2O2.js.map +1 -0
- package/dist/chunk-B2BWBKZA.cjs +2 -0
- package/dist/chunk-B2BWBKZA.cjs.map +1 -0
- package/dist/chunk-BSUHBLZO.cjs +2 -0
- package/dist/chunk-BSUHBLZO.cjs.map +1 -0
- package/dist/chunk-BYV75TDY.cjs +2 -0
- package/dist/chunk-BYV75TDY.cjs.map +1 -0
- package/dist/chunk-BZF3ZOAN.js +3 -0
- package/dist/chunk-BZF3ZOAN.js.map +1 -0
- package/dist/chunk-CEMOHO3Z.js +2 -0
- package/dist/chunk-CEMOHO3Z.js.map +1 -0
- package/dist/chunk-COXN6XBA.js +2 -0
- package/dist/chunk-COXN6XBA.js.map +1 -0
- package/dist/chunk-CVOSWGQZ.js +2 -0
- package/dist/chunk-CVOSWGQZ.js.map +1 -0
- package/dist/chunk-EFCNLYYW.cjs +2 -0
- package/dist/chunk-EFCNLYYW.cjs.map +1 -0
- package/dist/chunk-EGQ2Q37R.cjs +2 -0
- package/dist/chunk-EGQ2Q37R.cjs.map +1 -0
- package/dist/chunk-EIXD3Y4R.js +2 -0
- package/dist/chunk-EIXD3Y4R.js.map +1 -0
- package/dist/chunk-EVRQYWZ3.cjs +2 -0
- package/dist/chunk-EVRQYWZ3.cjs.map +1 -0
- package/dist/chunk-FUENXWR7.cjs +2 -0
- package/dist/chunk-FUENXWR7.cjs.map +1 -0
- package/dist/chunk-G35BR7SK.cjs +2 -0
- package/dist/chunk-G35BR7SK.cjs.map +1 -0
- package/dist/chunk-G5ZSOVJY.cjs +2 -0
- package/dist/chunk-G5ZSOVJY.cjs.map +1 -0
- package/dist/chunk-G6TR5RGR.js +2 -0
- package/dist/chunk-G6TR5RGR.js.map +1 -0
- package/dist/chunk-GUJB555L.js +2 -0
- package/dist/chunk-GUJB555L.js.map +1 -0
- package/dist/chunk-HD3TMQPR.js +2 -0
- package/dist/chunk-HD3TMQPR.js.map +1 -0
- package/dist/chunk-HWZTMVQV.cjs +2 -0
- package/dist/chunk-HWZTMVQV.cjs.map +1 -0
- package/dist/chunk-IOX4WPJL.cjs +2 -0
- package/dist/chunk-IOX4WPJL.cjs.map +1 -0
- package/dist/chunk-ITRGJNWL.cjs +2 -0
- package/dist/chunk-ITRGJNWL.cjs.map +1 -0
- package/dist/chunk-J4VRJVTO.cjs +2 -0
- package/dist/chunk-J4VRJVTO.cjs.map +1 -0
- package/dist/chunk-JEHIMQQZ.js +2 -0
- package/dist/chunk-JEHIMQQZ.js.map +1 -0
- package/dist/chunk-JUOCEYUF.cjs +2 -0
- package/dist/chunk-JUOCEYUF.cjs.map +1 -0
- package/dist/chunk-JZROH43C.js +2 -0
- package/dist/chunk-JZROH43C.js.map +1 -0
- package/dist/chunk-K2JCGDU7.cjs +3 -0
- package/dist/chunk-K2JCGDU7.cjs.map +1 -0
- package/dist/chunk-LR4VUFOQ.js +2 -0
- package/dist/chunk-LR4VUFOQ.js.map +1 -0
- package/dist/chunk-LXQT7FH6.cjs +2 -0
- package/dist/chunk-LXQT7FH6.cjs.map +1 -0
- package/dist/chunk-LYVCB45L.js +2 -0
- package/dist/chunk-LYVCB45L.js.map +1 -0
- package/dist/chunk-M5IBD3KV.js +2 -0
- package/dist/chunk-M5IBD3KV.js.map +1 -0
- package/dist/chunk-MLJZU63I.cjs +2 -0
- package/dist/chunk-MLJZU63I.cjs.map +1 -0
- package/dist/chunk-MLSE5XSB.cjs +3 -0
- package/dist/chunk-MLSE5XSB.cjs.map +1 -0
- package/dist/chunk-MRZOLUSF.js +2 -0
- package/dist/chunk-MRZOLUSF.js.map +1 -0
- package/dist/chunk-MVCGR7JQ.js +2 -0
- package/dist/chunk-MVCGR7JQ.js.map +1 -0
- package/dist/chunk-NLD4R74T.js +2 -0
- package/dist/chunk-NLD4R74T.js.map +1 -0
- package/dist/chunk-OEN63W3G.cjs +2 -0
- package/dist/chunk-OEN63W3G.cjs.map +1 -0
- package/dist/chunk-OUWOPYAX.js +2 -0
- package/dist/chunk-OUWOPYAX.js.map +1 -0
- package/dist/chunk-OZ3RIKZO.cjs +2 -0
- package/dist/chunk-OZ3RIKZO.cjs.map +1 -0
- package/dist/chunk-PEYPRWZP.js +2 -0
- package/dist/chunk-PEYPRWZP.js.map +1 -0
- package/dist/chunk-PMNNV4ML.cjs +2 -0
- package/dist/chunk-PMNNV4ML.cjs.map +1 -0
- package/dist/chunk-PVHTEE5T.cjs +2 -0
- package/dist/chunk-PVHTEE5T.cjs.map +1 -0
- package/dist/chunk-Q6QMSAJR.js +2 -0
- package/dist/chunk-Q6QMSAJR.js.map +1 -0
- package/dist/chunk-QBAURT3I.js +2 -0
- package/dist/chunk-QBAURT3I.js.map +1 -0
- package/dist/chunk-QF5CRDZI.js +2 -0
- package/dist/chunk-QF5CRDZI.js.map +1 -0
- package/dist/chunk-RC2THAIA.js +2 -0
- package/dist/chunk-RC2THAIA.js.map +1 -0
- package/dist/chunk-RPRISB7O.cjs +2 -0
- package/dist/chunk-RPRISB7O.cjs.map +1 -0
- package/dist/chunk-SD4IIQ2I.cjs +2 -0
- package/dist/chunk-SD4IIQ2I.cjs.map +1 -0
- package/dist/chunk-SLGMKBST.js +2 -0
- package/dist/chunk-SLGMKBST.js.map +1 -0
- package/dist/chunk-TGPWW7FC.js +2 -0
- package/dist/chunk-TGPWW7FC.js.map +1 -0
- package/dist/chunk-TJFZAMBB.js +2 -0
- package/dist/chunk-TJFZAMBB.js.map +1 -0
- package/dist/chunk-UL6MF7ES.js +2 -0
- package/dist/chunk-UL6MF7ES.js.map +1 -0
- package/dist/chunk-V77N662N.cjs +2 -0
- package/dist/chunk-V77N662N.cjs.map +1 -0
- package/dist/chunk-VD6S2PE4.js +2 -0
- package/dist/chunk-VD6S2PE4.js.map +1 -0
- package/dist/chunk-VXMDVKAD.js +2 -0
- package/dist/chunk-VXMDVKAD.js.map +1 -0
- package/dist/chunk-WW2DDHCI.js +2 -0
- package/dist/chunk-WW2DDHCI.js.map +1 -0
- package/dist/chunk-XPIBRXTW.cjs +2 -0
- package/dist/chunk-XPIBRXTW.cjs.map +1 -0
- package/dist/chunk-XQUZ7DUN.js +2 -0
- package/dist/chunk-XQUZ7DUN.js.map +1 -0
- package/dist/chunk-YNSODGYK.js +2 -0
- package/dist/chunk-YNSODGYK.js.map +1 -0
- package/dist/chunk-ZC4HJSII.cjs +2 -0
- package/dist/chunk-ZC4HJSII.cjs.map +1 -0
- package/dist/chunk-ZEJAFIOC.js +2 -0
- package/dist/chunk-ZEJAFIOC.js.map +1 -0
- package/dist/chunk-ZQDFYSZB.cjs +2 -0
- package/dist/chunk-ZQDFYSZB.cjs.map +1 -0
- package/dist/chunk-ZYP2PDSX.cjs +2 -0
- package/dist/chunk-ZYP2PDSX.cjs.map +1 -0
- package/dist/components/core/accordion.cjs +2 -0
- package/dist/components/core/accordion.cjs.map +1 -0
- package/dist/components/core/accordion.d.cts +53 -0
- package/dist/components/core/accordion.d.ts +53 -0
- package/dist/components/core/accordion.js +2 -0
- package/dist/components/core/accordion.js.map +1 -0
- package/dist/components/core/alert.cjs +2 -0
- package/dist/components/core/alert.cjs.map +1 -0
- package/dist/components/core/alert.d.cts +29 -0
- package/dist/components/core/alert.d.ts +29 -0
- package/dist/components/core/alert.js +2 -0
- package/dist/components/core/alert.js.map +1 -0
- package/dist/components/core/avatar.cjs +2 -0
- package/dist/components/core/avatar.cjs.map +1 -0
- package/dist/components/core/avatar.d.cts +22 -0
- package/dist/components/core/avatar.d.ts +22 -0
- package/dist/components/core/avatar.js +2 -0
- package/dist/components/core/avatar.js.map +1 -0
- package/dist/components/core/badge.cjs +2 -0
- package/dist/components/core/badge.cjs.map +1 -0
- package/dist/components/core/badge.d.cts +43 -0
- package/dist/components/core/badge.d.ts +43 -0
- package/dist/components/core/badge.js +2 -0
- package/dist/components/core/badge.js.map +1 -0
- package/dist/components/core/breadcrumb.cjs +2 -0
- package/dist/components/core/breadcrumb.cjs.map +1 -0
- package/dist/components/core/breadcrumb.d.cts +43 -0
- package/dist/components/core/breadcrumb.d.ts +43 -0
- package/dist/components/core/breadcrumb.js +2 -0
- package/dist/components/core/breadcrumb.js.map +1 -0
- package/dist/components/core/button.cjs +2 -0
- package/dist/components/core/button.cjs.map +1 -0
- package/dist/components/core/button.d.cts +39 -0
- package/dist/components/core/button.d.ts +39 -0
- package/dist/components/core/button.js +2 -0
- package/dist/components/core/button.js.map +1 -0
- package/dist/components/core/calendar.cjs +2 -0
- package/dist/components/core/calendar.cjs.map +1 -0
- package/dist/components/core/calendar.d.cts +45 -0
- package/dist/components/core/calendar.d.ts +45 -0
- package/dist/components/core/calendar.js +2 -0
- package/dist/components/core/calendar.js.map +1 -0
- package/dist/components/core/card.cjs +2 -0
- package/dist/components/core/card.cjs.map +1 -0
- package/dist/components/core/card.d.cts +26 -0
- package/dist/components/core/card.d.ts +26 -0
- package/dist/components/core/card.js +2 -0
- package/dist/components/core/card.js.map +1 -0
- package/dist/components/core/charts-lazy.cjs +2 -0
- package/dist/components/core/charts-lazy.cjs.map +1 -0
- package/dist/components/core/charts-lazy.d.cts +31 -0
- package/dist/components/core/charts-lazy.d.ts +31 -0
- package/dist/components/core/charts-lazy.js +2 -0
- package/dist/components/core/charts-lazy.js.map +1 -0
- package/dist/components/core/charts.cjs +2 -0
- package/dist/components/core/charts.cjs.map +1 -0
- package/dist/components/core/charts.d.cts +35 -0
- package/dist/components/core/charts.d.ts +35 -0
- package/dist/components/core/charts.js +2 -0
- package/dist/components/core/charts.js.map +1 -0
- package/dist/components/core/checkbox.cjs +2 -0
- package/dist/components/core/checkbox.cjs.map +1 -0
- package/dist/components/core/checkbox.d.cts +31 -0
- package/dist/components/core/checkbox.d.ts +31 -0
- package/dist/components/core/checkbox.js +2 -0
- package/dist/components/core/checkbox.js.map +1 -0
- package/dist/components/core/data-table.cjs +2 -0
- package/dist/components/core/data-table.cjs.map +1 -0
- package/dist/components/core/data-table.d.cts +54 -0
- package/dist/components/core/data-table.d.ts +54 -0
- package/dist/components/core/data-table.js +2 -0
- package/dist/components/core/data-table.js.map +1 -0
- package/dist/components/core/dialog.cjs +2 -0
- package/dist/components/core/dialog.cjs.map +1 -0
- package/dist/components/core/dialog.d.cts +34 -0
- package/dist/components/core/dialog.d.ts +34 -0
- package/dist/components/core/dialog.js +2 -0
- package/dist/components/core/dialog.js.map +1 -0
- package/dist/components/core/error-boundary.cjs +2 -0
- package/dist/components/core/error-boundary.cjs.map +1 -0
- package/dist/components/core/error-boundary.d.cts +35 -0
- package/dist/components/core/error-boundary.d.ts +35 -0
- package/dist/components/core/error-boundary.js +2 -0
- package/dist/components/core/error-boundary.js.map +1 -0
- package/dist/components/core/error-message.cjs +2 -0
- package/dist/components/core/error-message.cjs.map +1 -0
- package/dist/components/core/error-message.d.cts +13 -0
- package/dist/components/core/error-message.d.ts +13 -0
- package/dist/components/core/error-message.js +2 -0
- package/dist/components/core/error-message.js.map +1 -0
- package/dist/components/core/helper-text.cjs +2 -0
- package/dist/components/core/helper-text.cjs.map +1 -0
- package/dist/components/core/helper-text.d.cts +13 -0
- package/dist/components/core/helper-text.d.ts +13 -0
- package/dist/components/core/helper-text.js +2 -0
- package/dist/components/core/helper-text.js.map +1 -0
- package/dist/components/core/icon.cjs +2 -0
- package/dist/components/core/icon.cjs.map +1 -0
- package/dist/components/core/icon.d.cts +19 -0
- package/dist/components/core/icon.d.ts +19 -0
- package/dist/components/core/icon.js +2 -0
- package/dist/components/core/icon.js.map +1 -0
- package/dist/components/core/input.cjs +2 -0
- package/dist/components/core/input.cjs.map +1 -0
- package/dist/components/core/input.d.cts +18 -0
- package/dist/components/core/input.d.ts +18 -0
- package/dist/components/core/input.js +2 -0
- package/dist/components/core/input.js.map +1 -0
- package/dist/components/core/label.cjs +2 -0
- package/dist/components/core/label.cjs.map +1 -0
- package/dist/components/core/label.d.cts +14 -0
- package/dist/components/core/label.d.ts +14 -0
- package/dist/components/core/label.js +2 -0
- package/dist/components/core/label.js.map +1 -0
- package/dist/components/core/pagination.cjs +2 -0
- package/dist/components/core/pagination.cjs.map +1 -0
- package/dist/components/core/pagination.d.cts +32 -0
- package/dist/components/core/pagination.d.ts +32 -0
- package/dist/components/core/pagination.js +2 -0
- package/dist/components/core/pagination.js.map +1 -0
- package/dist/components/core/progress.cjs +2 -0
- package/dist/components/core/progress.cjs.map +1 -0
- package/dist/components/core/progress.d.cts +44 -0
- package/dist/components/core/progress.d.ts +44 -0
- package/dist/components/core/progress.js +2 -0
- package/dist/components/core/progress.js.map +1 -0
- package/dist/components/core/radio-group.cjs +2 -0
- package/dist/components/core/radio-group.cjs.map +1 -0
- package/dist/components/core/radio-group.d.cts +71 -0
- package/dist/components/core/radio-group.d.ts +71 -0
- package/dist/components/core/radio-group.js +2 -0
- package/dist/components/core/radio-group.js.map +1 -0
- package/dist/components/core/select.cjs +2 -0
- package/dist/components/core/select.cjs.map +1 -0
- package/dist/components/core/select.d.cts +41 -0
- package/dist/components/core/select.d.ts +41 -0
- package/dist/components/core/select.js +2 -0
- package/dist/components/core/select.js.map +1 -0
- package/dist/components/core/separator.cjs +2 -0
- package/dist/components/core/separator.cjs.map +1 -0
- package/dist/components/core/separator.d.cts +16 -0
- package/dist/components/core/separator.d.ts +16 -0
- package/dist/components/core/separator.js +2 -0
- package/dist/components/core/separator.js.map +1 -0
- package/dist/components/core/skeleton.cjs +2 -0
- package/dist/components/core/skeleton.cjs.map +1 -0
- package/dist/components/core/skeleton.d.cts +46 -0
- package/dist/components/core/skeleton.d.ts +46 -0
- package/dist/components/core/skeleton.js +2 -0
- package/dist/components/core/skeleton.js.map +1 -0
- package/dist/components/core/switch.cjs +2 -0
- package/dist/components/core/switch.cjs.map +1 -0
- package/dist/components/core/switch.d.cts +21 -0
- package/dist/components/core/switch.d.ts +21 -0
- package/dist/components/core/switch.js +2 -0
- package/dist/components/core/switch.js.map +1 -0
- package/dist/components/core/table.cjs +2 -0
- package/dist/components/core/table.cjs.map +1 -0
- package/dist/components/core/table.d.cts +84 -0
- package/dist/components/core/table.d.ts +84 -0
- package/dist/components/core/table.js +2 -0
- package/dist/components/core/table.js.map +1 -0
- package/dist/components/core/tabs.cjs +2 -0
- package/dist/components/core/tabs.cjs.map +1 -0
- package/dist/components/core/tabs.d.cts +28 -0
- package/dist/components/core/tabs.d.ts +28 -0
- package/dist/components/core/tabs.js +2 -0
- package/dist/components/core/tabs.js.map +1 -0
- package/dist/components/core/textarea.cjs +2 -0
- package/dist/components/core/textarea.cjs.map +1 -0
- package/dist/components/core/textarea.d.cts +18 -0
- package/dist/components/core/textarea.d.ts +18 -0
- package/dist/components/core/textarea.js +2 -0
- package/dist/components/core/textarea.js.map +1 -0
- package/dist/components/core/toast.cjs +2 -0
- package/dist/components/core/toast.cjs.map +1 -0
- package/dist/components/core/toast.d.cts +50 -0
- package/dist/components/core/toast.d.ts +50 -0
- package/dist/components/core/toast.js +2 -0
- package/dist/components/core/toast.js.map +1 -0
- package/dist/components/core/tooltip.cjs +2 -0
- package/dist/components/core/tooltip.cjs.map +1 -0
- package/dist/components/core/tooltip.d.cts +68 -0
- package/dist/components/core/tooltip.d.ts +68 -0
- package/dist/components/core/tooltip.js +2 -0
- package/dist/components/core/tooltip.js.map +1 -0
- package/dist/components/marketing/features.cjs +2 -0
- package/dist/components/marketing/features.cjs.map +1 -0
- package/dist/components/marketing/features.d.cts +35 -0
- package/dist/components/marketing/features.d.ts +35 -0
- package/dist/components/marketing/features.js +2 -0
- package/dist/components/marketing/features.js.map +1 -0
- package/dist/components/marketing/gallery.cjs +2 -0
- package/dist/components/marketing/gallery.cjs.map +1 -0
- package/dist/components/marketing/gallery.d.cts +38 -0
- package/dist/components/marketing/gallery.d.ts +38 -0
- package/dist/components/marketing/gallery.js +2 -0
- package/dist/components/marketing/gallery.js.map +1 -0
- package/dist/components/marketing/hero.cjs +2 -0
- package/dist/components/marketing/hero.cjs.map +1 -0
- package/dist/components/marketing/hero.d.cts +31 -0
- package/dist/components/marketing/hero.d.ts +31 -0
- package/dist/components/marketing/hero.js +2 -0
- package/dist/components/marketing/hero.js.map +1 -0
- package/dist/components/marketing/logo-wall.cjs +2 -0
- package/dist/components/marketing/logo-wall.cjs.map +1 -0
- package/dist/components/marketing/logo-wall.d.cts +44 -0
- package/dist/components/marketing/logo-wall.d.ts +44 -0
- package/dist/components/marketing/logo-wall.js +2 -0
- package/dist/components/marketing/logo-wall.js.map +1 -0
- package/dist/components/marketing/pricing.cjs +2 -0
- package/dist/components/marketing/pricing.cjs.map +1 -0
- package/dist/components/marketing/pricing.d.cts +52 -0
- package/dist/components/marketing/pricing.d.ts +52 -0
- package/dist/components/marketing/pricing.js +2 -0
- package/dist/components/marketing/pricing.js.map +1 -0
- package/dist/components/marketing/testimonials.cjs +2 -0
- package/dist/components/marketing/testimonials.cjs.map +1 -0
- package/dist/components/marketing/testimonials.d.cts +34 -0
- package/dist/components/marketing/testimonials.d.ts +34 -0
- package/dist/components/marketing/testimonials.js +2 -0
- package/dist/components/marketing/testimonials.js.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +2 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +125 -0
- package/dist/index.d.ts +125 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/lazy.cjs +2 -0
- package/dist/lib/lazy.cjs.map +1 -0
- package/dist/lib/lazy.d.cts +43 -0
- package/dist/lib/lazy.d.ts +43 -0
- package/dist/lib/lazy.js +2 -0
- package/dist/lib/lazy.js.map +1 -0
- package/dist/lib/performance.cjs +2 -0
- package/dist/lib/performance.cjs.map +1 -0
- package/dist/lib/performance.d.cts +52 -0
- package/dist/lib/performance.d.ts +52 -0
- package/dist/lib/performance.js +2 -0
- package/dist/lib/performance.js.map +1 -0
- package/dist/tailwind.css +29 -0
- package/dist/themes/__tests__/themes.test.ts +46 -0
- package/dist/themes/index.ts +50 -0
- package/dist/themes/lv-426.css +342 -0
- package/dist/themes/mother.css +280 -0
- package/dist/themes/nostromo.css +315 -0
- package/dist/themes/sulaco.css +404 -0
- package/dist/themes/utils.ts +105 -0
- package/dist/tokens.css +212 -0
- package/package.json +321 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/core/icon.tsx"],"names":["iconMap","House","User","Gear","MagnifyingGlass","List","X","CaretLeft","CaretRight","CaretUp","CaretDown","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Plus","Minus","Check","XIcon","Trash","PencilSimple","Copy","Download","Upload","Share","Heart","Star","Bookmark","Envelope","Phone","ChatCircle","Bell","BellSlash","Play","Pause","Stop","SpeakerHigh","SpeakerLow","SpeakerX","Camera","Image","VideoCamera","File","Folder","FolderOpen","FileText","FilePdf","FileImage","CheckCircle","XCircle","Warning","Info","Question","Clock","Calendar","Timer","Lock","LockOpen","Eye","EyeSlash","Shield","ShieldCheck","WifiHigh","WifiX","BatteryWarning","Cpu","HardDrive","Sun","Moon","Cloud","CloudRain","CloudSnow","CloudLightning","GithubLogo","TwitterLogo","FacebookLogo","InstagramLogo","LinkedinLogo","YoutubeLogo","ShoppingCart","ShoppingBag","CreditCard","Money","HeartIcon","Activity","Car","Bus","Train","Airplane","Boat","Bicycle","Coffee","Pizza","Hamburger","Basketball","Football","SoccerBall","TennisBall","MusicNote","PlayCircle","PauseCircle","StopCircle","Book","BookOpen","GraduationCap","Lightbulb","Briefcase","Buildings","ChartLine","ChartBar","ChartPie","Wrench","PaintBrush","Tree","Flower","Leaf","Mountains","Rocket","Planet","StarIcon","MoonIcon","GameController","PuzzlePiece","Gift","Key","MapPin","Compass","Flag","Trophy","Medal","Crown","Sparkle","Lightning","Fire","Snowflake","Umbrella","Anchor","Bug","Butterfly","Cat","Dog","Fish","Bird","PawPrint","Alien","Spaceship","Atom","Flask","TestTube","Syringe","Pill","Skull","Ghost","Scroll","BookmarkIcon","CompassIcon","FlagIcon","TrophyIcon","MedalIcon","CrownIcon","SparkleIcon","ZapIcon","FireIcon","SnowflakeIcon","UmbrellaIcon","AnchorIcon","BugIcon","ButterflyIcon","CatIcon","DogIcon","FishIcon","BirdIcon","PawPrintIcon","iconVariants","cva","Icon","React","name","size","weight","color","className","props","ref","IconComponent","cn","iconNames"],"mappings":"6SAsOMA,CAAAA,CAA6C,CAEjD,MAAOC,mBAAAA,CACP,IAAA,CAAMC,kBAAAA,CACN,QAAA,CAAUC,kBAAAA,CACV,MAAA,CAAQC,8BACR,IAAA,CAAMC,kBAAAA,CACN,EAAGC,eAAAA,CACH,cAAA,CAAgBC,wBAChB,eAAA,CAAiBC,wBAAAA,CACjB,YAAA,CAAcC,qBAAAA,CACd,cAAA,CAAgBC,uBAAAA,CAChB,aAAcC,uBAAAA,CACd,aAAA,CAAeC,yBACf,UAAA,CAAYC,qBAAAA,CACZ,aAAcC,uBAAAA,CAGd,IAAA,CAAMC,kBAAAA,CACN,KAAA,CAAOC,mBAAAA,CACP,KAAA,CAAOC,oBACP,QAAA,CAAUC,eAAAA,CACV,MAAOC,mBAAAA,CACP,IAAA,CAAMC,2BACN,IAAA,CAAMC,kBAAAA,CACN,QAAA,CAAUC,sBAAAA,CACV,MAAA,CAAQC,oBAAAA,CACR,MAAOC,mBAAAA,CACP,KAAA,CAAOC,oBACP,IAAA,CAAMC,kBAAAA,CACN,SAAUC,sBAAAA,CAGV,IAAA,CAAMC,sBAAAA,CACN,KAAA,CAAOC,mBAAAA,CACP,gBAAA,CAAkBC,yBAClB,IAAA,CAAMC,kBAAAA,CACN,aAAcC,uBAAAA,CAGd,IAAA,CAAMC,mBACN,KAAA,CAAOC,mBAAAA,CACP,IAAA,CAAMC,kBAAAA,CACN,aAAA,CAAeC,yBAAAA,CACf,aAAcC,wBAAAA,CACd,UAAA,CAAYC,uBACZ,MAAA,CAAQC,oBAAAA,CACR,MAAOC,mBAAAA,CACP,KAAA,CAAOC,yBAAAA,CAGP,IAAA,CAAMC,kBAAAA,CACN,MAAA,CAAQC,qBACR,aAAA,CAAeC,wBAAAA,CACf,YAAaC,sBAAAA,CACb,UAAA,CAAYC,sBACZ,YAAA,CAAcC,uBAAAA,CAGd,cAAA,CAAgBC,yBAAAA,CAChB,UAAA,CAAYC,qBAAAA,CACZ,QAASC,qBAAAA,CACT,IAAA,CAAMC,mBACN,QAAA,CAAUC,sBAAAA,CAGV,MAAOC,mBAAAA,CACP,QAAA,CAAUC,sBAAAA,CACV,KAAA,CAAOC,mBAAAA,CAGP,IAAA,CAAMC,mBACN,WAAA,CAAaC,sBAAAA,CACb,IAAKC,iBAAAA,CACL,WAAA,CAAaC,uBACb,MAAA,CAAQC,oBAAAA,CACR,cAAA,CAAgBC,yBAAAA,CAGhB,IAAA,CAAMC,sBAAAA,CACN,aAAcC,mBAAAA,CACd,iBAAA,CAAmBC,6BACnB,GAAA,CAAKC,iBAAAA,CACL,aAAcC,uBAAAA,CAGd,GAAA,CAAKC,iBAAAA,CACL,IAAA,CAAMC,kBAAAA,CACN,KAAA,CAAOC,oBACP,YAAA,CAAcC,uBAAAA,CACd,aAAcC,uBAAAA,CACd,iBAAA,CAAmBC,6BAGnB,MAAA,CAAQC,wBAAAA,CACR,OAAA,CAASC,yBAAAA,CACT,QAAA,CAAUC,0BAAAA,CACV,UAAWC,2BAAAA,CACX,QAAA,CAAUC,2BACV,OAAA,CAASC,yBAAAA,CAGT,gBAAiBC,0BAAAA,CACjB,cAAA,CAAgBC,yBAAAA,CAChB,aAAA,CAAeC,wBAAAA,CACf,KAAA,CAAOC,oBAGP,YAAA,CAAcC,mBAAAA,CACd,SAAUC,sBAAAA,CAGV,GAAA,CAAKC,kBACL,GAAA,CAAKC,iBAAAA,CACL,KAAA,CAAOC,mBAAAA,CACP,KAAA,CAAOC,sBAAAA,CACP,KAAMC,kBAAAA,CACN,OAAA,CAASC,sBAGT,MAAA,CAAQC,oBAAAA,CACR,MAAOC,mBAAAA,CACP,SAAA,CAAWC,uBAAAA,CAGX,UAAA,CAAYC,wBAAAA,CACZ,QAAA,CAAUC,uBACV,MAAA,CAAQC,wBAAAA,CACR,OAAQC,wBAAAA,CAGR,YAAA,CAAcC,wBACd,aAAA,CAAeC,wBAAAA,CACf,cAAA,CAAgBC,yBAAAA,CAChB,aAAA,CAAeC,wBAAAA,CAGf,KAAMC,kBAAAA,CACN,WAAA,CAAaC,uBACb,gBAAA,CAAkBC,2BAAAA,CAClB,UAAWC,uBAAAA,CAGX,SAAA,CAAWC,uBAAAA,CACX,QAAA,CAAUC,uBAAAA,CACV,YAAA,CAAcC,wBACd,WAAA,CAAaC,sBAAAA,CACb,YAAaC,sBAAAA,CAGb,MAAA,CAAQC,qBACR,aAAA,CAAeC,wBAAAA,CAGf,IAAA,CAAMC,kBAAAA,CACN,MAAA,CAAQC,oBAAAA,CACR,KAAMC,kBAAAA,CACN,QAAA,CAAUC,wBAGV,MAAA,CAAQC,oBAAAA,CACR,OAAQC,oBAAAA,CACR,WAAA,CAAaC,kBAAAA,CACb,WAAA,CAAaC,kBAAAA,CAGb,iBAAA,CAAmBC,6BACnB,MAAA,CAAQC,yBAAAA,CAGR,KAAMC,kBAAAA,CACN,GAAA,CAAKC,kBACL,SAAA,CAAWC,oBAAAA,CACX,OAAA,CAASC,qBAAAA,CACT,IAAA,CAAMC,kBAAAA,CACN,OAAQC,oBAAAA,CACR,KAAA,CAAOC,oBACP,KAAA,CAAOC,mBAAAA,CACP,QAASC,qBAAAA,CACT,GAAA,CAAKC,uBAAAA,CACL,IAAA,CAAMC,kBAAAA,CACN,SAAA,CAAWC,wBACX,QAAA,CAAUC,sBAAAA,CACV,OAAQC,oBAAAA,CACR,GAAA,CAAKC,kBACL,SAAA,CAAWC,uBAAAA,CACX,GAAA,CAAKC,iBAAAA,CACL,GAAA,CAAKC,iBAAAA,CACL,KAAMC,kBAAAA,CACN,IAAA,CAAMC,mBACN,WAAA,CAAaC,sBAAAA,CAGb,MAAOC,mBAAAA,CACP,SAAA,CAAWC,oBAAAA,CACX,IAAA,CAAMC,kBAAAA,CACN,KAAA,CAAOC,oBACP,WAAA,CAAaC,sBAAAA,CACb,QAASC,qBAAAA,CACT,IAAA,CAAMC,mBACN,KAAA,CAAOC,mBAAAA,CACP,KAAA,CAAOC,mBAAAA,CACP,MAAA,CAAQC,oBAAAA,CACR,gBAAiBC,sBAAAA,CACjB,cAAA,CAAgBC,sBAChB,WAAA,CAAaC,kBAAAA,CACb,cAAeC,oBAAAA,CACf,YAAA,CAAcC,mBAAAA,CACd,YAAA,CAAcC,mBAAAA,CACd,cAAA,CAAgBC,sBAChB,UAAA,CAAYC,uBAAAA,CACZ,YAAaC,kBAAAA,CACb,gBAAA,CAAkBC,wBAClB,eAAA,CAAiBC,sBAAAA,CACjB,aAAA,CAAeC,oBAAAA,CACf,UAAA,CAAYC,iBAAAA,CACZ,iBAAkBC,uBAAAA,CAClB,UAAA,CAAYC,kBACZ,UAAA,CAAYC,iBAAAA,CACZ,YAAaC,kBAAAA,CACb,WAAA,CAAaC,kBAAAA,CACb,gBAAA,CAAkBC,sBACpB,CAAA,CAIMC,GAAeC,0BAAAA,CAAI,EAAA,CAAI,CAC3B,QAAA,CAAU,CACR,KAAM,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,UACJ,EAAA,CAAI,SAAA,CACJ,GAAI,SAAA,CACJ,KAAA,CAAO,YACP,KAAA,CAAO,WACT,CAAA,CACA,MAAA,CAAQ,CACN,IAAA,CAAM,GACN,KAAA,CAAO,EAAA,CACP,QAAS,EAAA,CACT,IAAA,CAAM,GACN,IAAA,CAAM,EAAA,CACN,OAAA,CAAS,EACX,CAAA,CACA,KAAA,CAAO,CACL,OAAA,CAAS,cAAA,CACT,QAAS,eAAA,CACT,SAAA,CAAW,gBACX,OAAA,CAAS,gBAAA,CACT,OAAA,CAAS,iBAAA,CACT,KAAA,CAAO,cAAA,CACP,MAAO,eACT,CACF,EACA,eAAA,CAAiB,CACf,KAAM,IAAA,CACN,MAAA,CAAQ,SAAA,CACR,KAAA,CAAO,SACT,CACF,CAAC,CAAA,CASYC,EAAAA,CAAOC,mBAAM,UAAA,CACxB,CAAC,CAAE,IAAA,CAAAC,CAAAA,CAAM,IAAA,CAAAC,CAAAA,CAAM,MAAA,CAAAC,CAAAA,CAAQ,MAAAC,CAAAA,CAAO,SAAA,CAAAC,EAAW,GAAGC,CAAM,EAAGC,CAAAA,GAAQ,CAC3D,IAAMC,CAAAA,CAAgBxL,CAAAA,CAAQiL,CAAI,EAElC,OAAKO,CAAAA,CAMHR,mBAAA,aAAA,CAACQ,CAAAA,CAAA,CACC,GAAA,CAAKD,CAAAA,CACL,MAAA,CAAQJ,CAAAA,CACR,SAAA,CAAWM,mBAAAA,CAAGZ,GAAa,CAAE,IAAA,CAAAK,EAAM,MAAA,CAAAC,CAAAA,CAAQ,MAAAC,CAAM,CAAC,CAAA,CAAGC,CAAS,CAAA,CAC7D,GAAGC,EACN,CAAA,CATO,IAWX,CACF,EAEAP,EAAAA,CAAK,WAAA,CAAc,OAGZ,IAAMW,EAAAA,CAAY,MAAA,CAAO,IAAA,CAAK1L,CAAO","file":"chunk-4TYVEXRA.cjs","sourcesContent":["import React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n// Import commonly used Phosphor icons\nimport {\n // Navigation\n House,\n User,\n Gear,\n MagnifyingGlass,\n List,\n X,\n CaretLeft,\n CaretRight,\n CaretUp,\n CaretDown,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n ArrowDown,\n \n // Actions\n Plus,\n Minus,\n Check,\n X as XIcon,\n Trash,\n PencilSimple,\n Copy,\n Download,\n Upload,\n Share,\n Heart,\n Star,\n Bookmark,\n \n // Communication\n Envelope,\n Phone,\n ChatCircle,\n Bell,\n BellSlash,\n \n // Media\n Play,\n Pause,\n Stop,\n SpeakerHigh,\n SpeakerLow,\n SpeakerX,\n Camera,\n Image,\n VideoCamera,\n \n // Files\n File,\n Folder,\n FolderOpen,\n FileText,\n FilePdf,\n FileImage,\n \n // Status\n CheckCircle,\n XCircle,\n Warning,\n Info,\n Question,\n \n // Time\n Clock,\n Calendar,\n Timer,\n \n // Security\n Lock,\n LockOpen,\n Eye,\n EyeSlash,\n Shield,\n ShieldCheck,\n \n // Technology\n WifiHigh,\n WifiX,\n BatteryWarning,\n Cpu,\n HardDrive,\n \n // Weather\n Sun,\n Moon,\n Cloud,\n CloudRain,\n CloudSnow,\n CloudLightning,\n \n // Social\n GithubLogo,\n TwitterLogo,\n FacebookLogo,\n InstagramLogo,\n LinkedinLogo,\n YoutubeLogo,\n \n // Shopping\n ShoppingCart,\n ShoppingBag,\n CreditCard,\n Money,\n \n // Health\n Heart as HeartIcon,\n Activity,\n \n // Transportation\n Car,\n Bus,\n Train,\n Airplane,\n Boat,\n Bicycle,\n \n // Food\n Coffee,\n Pizza,\n Hamburger,\n \n // Sports\n Basketball,\n Football,\n SoccerBall,\n TennisBall,\n \n // Music\n MusicNote,\n PlayCircle,\n PauseCircle,\n StopCircle,\n \n // Education\n Book,\n BookOpen,\n GraduationCap,\n Lightbulb,\n \n // Business\n Briefcase,\n Buildings,\n ChartLine,\n ChartBar,\n ChartPie,\n \n // Tools\n Wrench,\n PaintBrush,\n \n // Nature\n Tree,\n Flower,\n Leaf,\n Mountains,\n \n // Space\n Rocket,\n Planet,\n Star as StarIcon,\n Moon as MoonIcon,\n \n // Gaming\n GameController,\n PuzzlePiece,\n \n // Miscellaneous\n Gift,\n Key,\n MapPin,\n Compass,\n Flag,\n Trophy,\n Medal,\n Crown,\n Sparkle,\n Lightning,\n Fire,\n Snowflake,\n Umbrella,\n Anchor,\n Bug,\n Butterfly,\n Cat,\n Dog,\n Fish,\n Bird,\n PawPrint,\n \n // Nostromo themed\n Alien,\n Rocket as Spaceship,\n Atom,\n Flask,\n TestTube,\n Syringe,\n Pill,\n Skull,\n Ghost,\n Scroll,\n Bookmark as BookmarkIcon,\n Compass as CompassIcon,\n Flag as FlagIcon,\n Trophy as TrophyIcon,\n Medal as MedalIcon,\n Crown as CrownIcon,\n Sparkle as SparkleIcon,\n Lightning as ZapIcon,\n Fire as FireIcon,\n Snowflake as SnowflakeIcon,\n Umbrella as UmbrellaIcon,\n Anchor as AnchorIcon,\n Bug as BugIcon,\n Butterfly as ButterflyIcon,\n Cat as CatIcon,\n Dog as DogIcon,\n Fish as FishIcon,\n Bird as BirdIcon,\n PawPrint as PawPrintIcon,\n} from 'phosphor-react';\n\n// Create a mapping of icon names to components\nconst iconMap: Record<string, React.ElementType> = {\n // Navigation\n house: House,\n user: User,\n settings: Gear,\n search: MagnifyingGlass,\n menu: List,\n x: X,\n 'chevron-left': CaretLeft,\n 'chevron-right': CaretRight,\n 'chevron-up': CaretUp,\n 'chevron-down': CaretDown,\n 'arrow-left': ArrowLeft,\n 'arrow-right': ArrowRight,\n 'arrow-up': ArrowUp,\n 'arrow-down': ArrowDown,\n \n // Actions\n plus: Plus,\n minus: Minus,\n check: Check,\n 'x-icon': XIcon,\n trash: Trash,\n edit: PencilSimple,\n copy: Copy,\n download: Download,\n upload: Upload,\n share: Share,\n heart: Heart,\n star: Star,\n bookmark: Bookmark,\n \n // Communication\n mail: Envelope,\n phone: Phone,\n 'message-circle': ChatCircle,\n bell: Bell,\n 'bell-slash': BellSlash,\n \n // Media\n play: Play,\n pause: Pause,\n stop: Stop,\n 'volume-high': SpeakerHigh,\n 'volume-low': SpeakerLow,\n 'volume-x': SpeakerX,\n camera: Camera,\n image: Image,\n video: VideoCamera,\n \n // Files\n file: File,\n folder: Folder,\n 'folder-open': FolderOpen,\n 'file-text': FileText,\n 'file-pdf': FilePdf,\n 'file-image': FileImage,\n \n // Status\n 'check-circle': CheckCircle,\n 'x-circle': XCircle,\n warning: Warning,\n info: Info,\n question: Question,\n \n // Time\n clock: Clock,\n calendar: Calendar,\n timer: Timer,\n \n // Security\n lock: Lock,\n 'lock-open': LockOpen,\n eye: Eye,\n 'eye-slash': EyeSlash,\n shield: Shield,\n 'shield-check': ShieldCheck,\n \n // Technology\n wifi: WifiHigh,\n 'wifi-slash': WifiX,\n 'battery-warning': BatteryWarning,\n cpu: Cpu,\n 'hard-drive': HardDrive,\n \n // Weather\n sun: Sun,\n moon: Moon,\n cloud: Cloud,\n 'cloud-rain': CloudRain,\n 'cloud-snow': CloudSnow,\n 'cloud-lightning': CloudLightning,\n \n // Social\n github: GithubLogo,\n twitter: TwitterLogo,\n facebook: FacebookLogo,\n instagram: InstagramLogo,\n linkedin: LinkedinLogo,\n youtube: YoutubeLogo,\n \n // Shopping\n 'shopping-cart': ShoppingCart,\n 'shopping-bag': ShoppingBag,\n 'credit-card': CreditCard,\n money: Money,\n \n // Health\n 'heart-icon': HeartIcon,\n activity: Activity,\n \n // Transportation\n car: Car,\n bus: Bus,\n train: Train,\n plane: Airplane,\n ship: Boat,\n bicycle: Bicycle,\n \n // Food\n coffee: Coffee,\n pizza: Pizza,\n hamburger: Hamburger,\n \n // Sports\n basketball: Basketball,\n football: Football,\n soccer: SoccerBall,\n tennis: TennisBall,\n \n // Music\n 'music-note': MusicNote,\n 'play-circle': PlayCircle,\n 'pause-circle': PauseCircle,\n 'stop-circle': StopCircle,\n \n // Education\n book: Book,\n 'book-open': BookOpen,\n 'graduation-cap': GraduationCap,\n lightbulb: Lightbulb,\n \n // Business\n briefcase: Briefcase,\n building: Buildings,\n 'chart-line': ChartLine,\n 'chart-bar': ChartBar,\n 'chart-pie': ChartPie,\n \n // Tools\n wrench: Wrench,\n 'paint-brush': PaintBrush,\n \n // Nature\n tree: Tree,\n flower: Flower,\n leaf: Leaf,\n mountain: Mountains,\n \n // Space\n rocket: Rocket,\n planet: Planet,\n 'star-icon': StarIcon,\n 'moon-icon': MoonIcon,\n \n // Gaming\n 'game-controller': GameController,\n puzzle: PuzzlePiece,\n \n // Miscellaneous\n gift: Gift,\n key: Key,\n 'map-pin': MapPin,\n compass: Compass,\n flag: Flag,\n trophy: Trophy,\n medal: Medal,\n crown: Crown,\n sparkle: Sparkle,\n zap: Lightning,\n fire: Fire,\n snowflake: Snowflake,\n umbrella: Umbrella,\n anchor: Anchor,\n bug: Bug,\n butterfly: Butterfly,\n cat: Cat,\n dog: Dog,\n fish: Fish,\n bird: Bird,\n 'paw-print': PawPrint,\n \n // Nostromo themed\n alien: Alien,\n spaceship: Spaceship,\n atom: Atom,\n flask: Flask,\n 'test-tube': TestTube,\n syringe: Syringe,\n pill: Pill,\n skull: Skull,\n ghost: Ghost,\n scroll: Scroll,\n 'bookmark-icon': BookmarkIcon,\n 'compass-icon': CompassIcon,\n 'flag-icon': FlagIcon,\n 'trophy-icon': TrophyIcon,\n 'medal-icon': MedalIcon,\n 'crown-icon': CrownIcon,\n 'sparkle-icon': SparkleIcon,\n 'zap-icon': ZapIcon,\n 'fire-icon': FireIcon,\n 'snowflake-icon': SnowflakeIcon,\n 'umbrella-icon': UmbrellaIcon,\n 'anchor-icon': AnchorIcon,\n 'bug-icon': BugIcon,\n 'butterfly-icon': ButterflyIcon,\n 'cat-icon': CatIcon,\n 'dog-icon': DogIcon,\n 'fish-icon': FishIcon,\n 'bird-icon': BirdIcon,\n 'paw-print-icon': PawPrintIcon,\n} as const;\n\nexport type IconName = keyof typeof iconMap;\n\nconst iconVariants = cva('', {\n variants: {\n size: {\n xs: 'w-3 h-3',\n sm: 'w-4 h-4',\n md: 'w-5 h-5',\n lg: 'w-6 h-6',\n xl: 'w-8 h-8',\n '2xl': 'w-10 h-10',\n '3xl': 'w-12 h-12',\n },\n weight: {\n thin: '',\n light: '',\n regular: '',\n bold: '',\n fill: '',\n duotone: '',\n },\n color: {\n current: 'text-current',\n primary: 'text-blue-600',\n secondary: 'text-gray-600',\n success: 'text-green-600',\n warning: 'text-yellow-600',\n error: 'text-red-600',\n muted: 'text-gray-400',\n },\n },\n defaultVariants: {\n size: 'md',\n weight: 'regular',\n color: 'current',\n },\n});\n\nexport interface IconProps\n extends Omit<React.HTMLAttributes<SVGSVGElement>, 'color'>,\n VariantProps<typeof iconVariants> {\n name: IconName;\n className?: string;\n}\n\nexport const Icon = React.forwardRef<SVGSVGElement, IconProps>(\n ({ name, size, weight, color, className, ...props }, ref) => {\n const IconComponent = iconMap[name];\n \n if (!IconComponent) {\n console.warn(`Icon \"${name}\" not found in iconMap`);\n return null;\n }\n\n return (\n <IconComponent\n ref={ref}\n weight={weight as 'thin' | 'light' | 'regular' | 'bold' | 'fill' | 'duotone'}\n className={cn(iconVariants({ size, weight, color }), className)}\n {...props}\n />\n );\n }\n);\n\nIcon.displayName = 'Icon';\n\n// Export icon names for TypeScript autocomplete\nexport const iconNames = Object.keys(iconMap) as IconName[];\n\n// Note: For additional icons, import directly from 'phosphor-react' to avoid bundling unused icons\n// Example: import { CustomIcon } from 'phosphor-react'\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),e=require('react'),classVarianceAuthority=require('class-variance-authority');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var e__namespace=/*#__PURE__*/_interopNamespace(e);var H=classVarianceAuthority.cva("flex min-h-[80px] w-full rounded-md border border-border bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200",{variants:{variant:{default:"border-border focus-visible:ring-ring focus-visible:ring-offset-background",error:"border-destructive focus-visible:ring-destructive focus-visible:ring-offset-background",success:"border-success focus-visible:ring-success focus-visible:ring-offset-background"},size:{sm:"min-h-[60px] px-2 py-1 text-xs",default:"min-h-[80px] px-3 py-2 text-sm",lg:"min-h-[120px] px-4 py-3 text-base"}},defaultVariants:{variant:"default",size:"default"}}),E=e__namespace.forwardRef(({className:x,label:d,helperText:o,error:n,required:f,variant:m,size:p,autoResize:l=true,id:g,...c},t)=>{let v=e__namespace.useId(),s=g||v,b=o?`${s}-helper`:void 0,T=n?`${s}-error`:void 0,R=n?"error":m||"default",r=e__namespace.useRef(null),h=e__namespace.useMemo(()=>a=>{r.current=a,typeof t=="function"?t(a):t&&(t.current=a);},[t]),u=e__namespace.useCallback(()=>{r.current&&l&&(r.current.style.height="auto",r.current.style.height=`${r.current.scrollHeight}px`);},[l]);e__namespace.useEffect(()=>{u();},[u]);let y=a=>{u(),c.onInput&&c.onInput(a);};return e__namespace.createElement("div",{className:"space-y-2"},d&&e__namespace.createElement("label",{htmlFor:s,className:"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"},d,f&&e__namespace.createElement("span",{className:"text-error-500 ml-1"},"*")),e__namespace.createElement("textarea",{ref:h,id:s,className:chunkITRGJNWL_cjs.a(H({variant:R,size:p}),l&&"resize-none",x),"aria-describedby":chunkITRGJNWL_cjs.a(b,T)||void 0,"aria-invalid":n,"aria-required":f,onInput:y,...c}),o&&e__namespace.createElement("p",{id:b,className:chunkITRGJNWL_cjs.a("text-sm text-muted-foreground",n&&"text-destructive")},o))});E.displayName="Textarea";exports.a=H;exports.b=E;//# sourceMappingURL=chunk-4WFEVNXW.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-4WFEVNXW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/core/textarea.tsx"],"names":["textareaVariants","cva","Textarea","e","className","label","helperText","error","required","variant","size","autoResize","id","props","ref","generatedId","textareaId","helperTextId","errorId","textareaVariant","textareaRef","combinedRef","node","adjustHeight","handleInput","event","cn"],"mappings":"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","file":"chunk-4WFEVNXW.cjs","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst textareaVariants = cva(\n \"flex min-h-[80px] w-full rounded-md border border-border bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 transition-all duration-200\",\n {\n variants: {\n variant: {\n default:\n \"border-border focus-visible:ring-ring focus-visible:ring-offset-background\",\n error:\n \"border-destructive focus-visible:ring-destructive focus-visible:ring-offset-background\",\n success:\n \"border-success focus-visible:ring-success focus-visible:ring-offset-background\",\n },\n size: {\n sm: \"min-h-[60px] px-2 py-1 text-xs\",\n default: \"min-h-[80px] px-3 py-2 text-sm\",\n lg: \"min-h-[120px] px-4 py-3 text-base\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface TextareaProps\n extends\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n VariantProps<typeof textareaVariants> {\n label?: string;\n helperText?: string;\n error?: boolean;\n required?: boolean;\n autoResize?: boolean;\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n className,\n label,\n helperText,\n error,\n required,\n variant,\n size,\n autoResize = true,\n id,\n ...props\n },\n ref,\n ) => {\n const generatedId = React.useId();\n const textareaId = id || generatedId;\n const helperTextId = helperText ? `${textareaId}-helper` : undefined;\n const errorId = error ? `${textareaId}-error` : undefined;\n\n const textareaVariant = error ? \"error\" : variant || \"default\";\n\n // Auto-resize functionality\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const combinedRef = React.useMemo(() => {\n return (node: HTMLTextAreaElement | null) => {\n (\n textareaRef as React.MutableRefObject<HTMLTextAreaElement | null>\n ).current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLTextAreaElement | null>).current =\n node;\n }\n };\n }, [ref]);\n\n const adjustHeight = React.useCallback(() => {\n if (textareaRef.current && autoResize) {\n textareaRef.current.style.height = \"auto\";\n textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;\n }\n }, [autoResize]);\n\n React.useEffect(() => {\n adjustHeight();\n }, [adjustHeight]);\n\n const handleInput = (event: React.FormEvent<HTMLTextAreaElement>) => {\n adjustHeight();\n if (props.onInput) {\n props.onInput(event);\n }\n };\n\n return (\n <div className=\"space-y-2\">\n {label && (\n <label\n htmlFor={textareaId}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n {required && <span className=\"text-error-500 ml-1\">*</span>}\n </label>\n )}\n <textarea\n ref={combinedRef}\n id={textareaId}\n className={cn(\n textareaVariants({ variant: textareaVariant, size }),\n autoResize && \"resize-none\",\n className,\n )}\n aria-describedby={cn(helperTextId, errorId) || undefined}\n aria-invalid={error}\n aria-required={required}\n onInput={handleInput}\n {...props}\n />\n {helperText && (\n <p\n id={helperTextId}\n className={cn(\n \"text-sm text-muted-foreground\",\n error && \"text-destructive\",\n )}\n >\n {helperText}\n </p>\n )}\n </div>\n );\n },\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea, textareaVariants };\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunk4FSJEW7W_cjs=require('./chunk-4FSJEW7W.cjs'),e=require('react');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var e__namespace=/*#__PURE__*/_interopNamespace(e);function d({children:r,fallback:t,errorFallback:n}){return e__namespace.createElement(chunk4FSJEW7W_cjs.a,{fallback:n?({error:a,resetError:o})=>a?e__namespace.createElement(n,{error:a,retry:o}):null:void 0},e__namespace.createElement(e__namespace.Suspense,{fallback:t?e__namespace.createElement(t,null):e__namespace.createElement(l,null)},r))}function l(){return e__namespace.createElement("div",{className:"flex items-center justify-center p-4"},e__namespace.createElement("div",{className:"h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent"}))}function p(r,t){let n=e__namespace.forwardRef((a,o)=>e__namespace.createElement(d,{fallback:t?.fallback,errorFallback:t?.errorFallback},e__namespace.createElement(r,a)));return n.displayName=`withLazyLoading(${r.displayName||r.name})`,n}function f(r){let[t,n]=e__namespace.useState(false),a=e__namespace.useRef(null);return e__namespace.useEffect(()=>{let o=a.current;if(!o)return;let c=new IntersectionObserver(([s])=>{s?.isIntersecting&&(n(true),c.disconnect());},{rootMargin:r?.rootMargin||"50px",threshold:r?.threshold||.1});return c.observe(o),()=>c.disconnect()},[r?.rootMargin,r?.threshold]),{ref:a,isVisible:t}}function m({children:r,fallback:t,...n}){let{ref:a,isVisible:o}=f(n);return e__namespace.createElement("div",{ref:a},o?r:t||e__namespace.createElement(l,null))}exports.a=d;exports.b=p;exports.c=f;exports.d=m;//# sourceMappingURL=chunk-55N2IT62.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-55N2IT62.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/lazy.tsx"],"names":["LazyComponent","children","Fallback","ErrorFallback","e","ErrorBoundary","error","resetError","DefaultLoadingFallback","withLazyLoading","Component","options","WrappedComponent","props","_ref","useLazyLoading","isVisible","setIsVisible","ref","element","observer","entry","LazyInView","fallback"],"mappings":"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","file":"chunk-55N2IT62.cjs","sourcesContent":["import * as React from 'react';\nimport { ErrorBoundary } from '../components/core/error-boundary';\n\ninterface LazyComponentProps {\n children: React.ReactNode;\n fallback?: React.ComponentType | undefined;\n errorFallback?: React.ComponentType<{ error: Error; retry: () => void }> | undefined;\n}\n\n/**\n * Lazy loading wrapper component with error boundary and loading fallback\n */\nexport function LazyComponent({ \n children, \n fallback: Fallback,\n errorFallback: ErrorFallback \n}: LazyComponentProps) {\n return (\n <ErrorBoundary\n fallback={ErrorFallback ? ({ error, resetError }) => {\n if (!error) return null;\n return <ErrorFallback error={error} retry={resetError} />;\n } : undefined}\n >\n <React.Suspense fallback={Fallback ? <Fallback /> : <DefaultLoadingFallback />}>\n {children}\n </React.Suspense>\n </ErrorBoundary>\n );\n}\n\n/**\n * Default loading fallback component\n */\nfunction DefaultLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center p-4\">\n <div className=\"h-6 w-6 animate-spin rounded-full border-2 border-primary border-t-transparent\" />\n </div>\n );\n}\n\n/**\n * Higher-order component for lazy loading with error boundary\n */\nexport function withLazyLoading<P extends object>(\n Component: React.ComponentType<P>,\n options?: {\n fallback?: React.ComponentType;\n errorFallback?: React.ComponentType<{ error: Error; retry: () => void }>;\n }\n) {\n const WrappedComponent = React.forwardRef<unknown, P>((props, _ref) => (\n <LazyComponent\n fallback={options?.fallback}\n errorFallback={options?.errorFallback}\n >\n {React.createElement(Component, props as P & { ref?: React.Ref<unknown> })}\n </LazyComponent>\n ));\n \n WrappedComponent.displayName = `withLazyLoading(${Component.displayName || Component.name})`;\n \n return WrappedComponent;\n}\n\n/**\n * Hook for lazy loading with intersection observer\n */\nexport function useLazyLoading(options?: {\n rootMargin?: string;\n threshold?: number;\n}) {\n const [isVisible, setIsVisible] = React.useState(false);\n const ref = React.useRef<HTMLElement>(null);\n\n React.useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry?.isIntersecting) {\n setIsVisible(true);\n observer.disconnect();\n }\n },\n {\n rootMargin: options?.rootMargin || '50px',\n threshold: options?.threshold || 0.1,\n }\n );\n\n observer.observe(element);\n\n return () => observer.disconnect();\n }, [options?.rootMargin, options?.threshold]);\n\n return { ref, isVisible };\n}\n\n/**\n * Lazy loading component that only renders when in viewport\n */\nexport function LazyInView({ \n children, \n fallback,\n ...options \n}: {\n children: React.ReactNode;\n fallback?: React.ReactNode;\n} & Parameters<typeof useLazyLoading>[0]) {\n const { ref, isVisible } = useLazyLoading(options);\n\n return (\n <div ref={ref as React.RefObject<HTMLDivElement>}>\n {isVisible ? children : (fallback || <DefaultLoadingFallback />)}\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';var chunk7SPPGTBT_cjs=require('./chunk-7SPPGTBT.cjs'),chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),e=require('react'),reactSlot=require('@radix-ui/react-slot'),classVarianceAuthority=require('class-variance-authority');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var e__namespace=/*#__PURE__*/_interopNamespace(e);var C=classVarianceAuthority.cva("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:["bg-primary text-primary-foreground shadow-md hover:bg-primary/90 hover:shadow-lg","active:scale-[0.98] active:shadow-sm","border border-primary/20"],secondary:["bg-secondary text-secondary-foreground border border-border","hover:bg-secondary/80 hover:border-border hover:shadow-sm","active:scale-[0.98]"],outline:["border-2 border-border bg-transparent text-foreground","hover:bg-muted hover:border-primary hover:text-primary","focus-visible:ring-ring/20 focus-visible:border-primary","active:scale-[0.98]"],ghost:["text-foreground hover:bg-muted hover:text-foreground","active:bg-muted/80 active:scale-[0.98]"],destructive:["bg-destructive text-destructive-foreground shadow-md hover:bg-destructive/90 hover:shadow-lg","active:scale-[0.98] active:shadow-sm","border border-destructive/20"],subtle:["bg-muted text-muted-foreground border border-border","hover:bg-muted/80 hover:border-border","active:scale-[0.98]"],link:"text-primary underline-offset-4 hover:underline"},size:{sm:"h-8 px-3 text-xs rounded-sm",default:"h-10 px-4 text-sm rounded-md",lg:"h-11 px-6 text-base rounded-lg",xl:"h-12 px-8 text-lg rounded-lg",icon:"h-10 w-10 rounded-md"},state:{default:"",loading:"cursor-wait",success:"bg-success hover:bg-success-600 text-success-foreground",error:"bg-destructive hover:bg-destructive/90 text-destructive-foreground"}},defaultVariants:{variant:"default",size:"default",state:"default"}}),c=e__namespace.forwardRef(({className:u,variant:l,size:m,state:b="default",loading:t=false,loadingText:s,asChild:a=false,children:r,disabled:v,...f},g)=>{let p=a?reactSlot.Slot:"button",n=v||t,h=t?"loading":b,o=t&&s?s:r,x=a&&o!==r&&e__namespace.isValidElement(r)?e__namespace.cloneElement(r,void 0,o):o;return e__namespace.createElement(p,{className:chunkITRGJNWL_cjs.a(C({variant:l,size:m,state:h,className:u})),ref:g,disabled:n,"aria-disabled":n,...f},t&&e__namespace.createElement("svg",{className:"mr-2 h-4 w-4 animate-spin",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","aria-hidden":"true"},e__namespace.createElement("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e__namespace.createElement("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})),e__namespace.createElement(reactSlot.Slottable,null,x))});c.displayName="Button";var E=chunk7SPPGTBT_cjs.a(c);
|
|
2
|
+
exports.a=C;exports.b=E;//# sourceMappingURL=chunk-5PVFLXPO.cjs.map
|
|
3
|
+
//# sourceMappingURL=chunk-5PVFLXPO.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/core/button.tsx"],"names":["buttonVariants","cva","ButtonComponent","e","className","variant","size","state","loading","loadingText","asChild","children","disabled","props","ref","Component","Slot","isDisabled","finalState","label","slotted","cn","Slottable","Button","memo"],"mappings":"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","file":"chunk-5PVFLXPO.cjs","sourcesContent":["import * as React from \"react\";\nimport { Slot, Slottable } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\n\nconst buttonVariants = cva(\n // Base styles with improved spacing and transitions\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n // Enhanced default with better depth\n default: [\n \"bg-primary text-primary-foreground shadow-md hover:bg-primary/90 hover:shadow-lg\",\n \"active:scale-[0.98] active:shadow-sm\",\n \"border border-primary/20\",\n ],\n // Enhanced secondary with better contrast\n secondary: [\n \"bg-secondary text-secondary-foreground border border-border\",\n \"hover:bg-secondary/80 hover:border-border hover:shadow-sm\",\n \"active:scale-[0.98]\",\n ],\n // Enhanced outline with better focus\n outline: [\n \"border-2 border-border bg-transparent text-foreground\",\n \"hover:bg-muted hover:border-primary hover:text-primary\",\n \"focus-visible:ring-ring/20 focus-visible:border-primary\",\n \"active:scale-[0.98]\",\n ],\n // Enhanced ghost with better hover\n ghost: [\n \"text-foreground hover:bg-muted hover:text-foreground\",\n \"active:bg-muted/80 active:scale-[0.98]\",\n ],\n // Enhanced destructive with better feedback\n destructive: [\n \"bg-destructive text-destructive-foreground shadow-md hover:bg-destructive/90 hover:shadow-lg\",\n \"active:scale-[0.98] active:shadow-sm\",\n \"border border-destructive/20\",\n ],\n // Subtle variant for less prominent actions\n subtle: [\n \"bg-muted text-muted-foreground border border-border\",\n \"hover:bg-muted/80 hover:border-border\",\n \"active:scale-[0.98]\",\n ],\n // Link variant\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n // Improved spacing for consistency\n sm: \"h-8 px-3 text-xs rounded-sm\",\n default: \"h-10 px-4 text-sm rounded-md\",\n lg: \"h-11 px-6 text-base rounded-lg\",\n xl: \"h-12 px-8 text-lg rounded-lg\",\n icon: \"h-10 w-10 rounded-md\",\n },\n // State variants for better feedback\n state: {\n default: \"\",\n loading: \"cursor-wait\",\n success: \"bg-success hover:bg-success-600 text-success-foreground\",\n error:\n \"bg-destructive hover:bg-destructive/90 text-destructive-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n state: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * Whether to render the button as a separate component (e.g. for Link)\n * @default false\n */\n asChild?: boolean;\n /**\n * Whether the button is in a loading state.\n * When true, automatically sets state to \"loading\" and shows a spinner.\n * @default false\n */\n loading?: boolean;\n /**\n * The loading text to display when loading is true.\n * If not provided, the button's children will be shown.\n * @default undefined\n */\n loadingText?: string;\n /**\n * The visual state of the button.\n * Note: If `loading` is true, this prop is ignored and state becomes \"loading\".\n * Use `state=\"success\"` or `state=\"error\"` for post-action feedback.\n * @default \"default\"\n */\n state?: \"default\" | \"loading\" | \"success\" | \"error\";\n}\n\nconst ButtonComponent = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n state = \"default\",\n loading = false,\n loadingText,\n asChild = false,\n children,\n disabled,\n ...props\n },\n ref,\n ) => {\n const Component = asChild ? Slot : \"button\";\n const isDisabled = disabled || loading;\n\n // Determine final state: loading prop takes precedence over state prop\n const finalState = loading ? \"loading\" : state;\n\n const label = loading && loadingText ? loadingText : children;\n // With `asChild` the caller's element is what actually renders, so\n // loadingText has to replace the content *inside* it - swapping the element\n // itself for a string would leave Slot with nothing to clone.\n const slotted =\n asChild && label !== children && React.isValidElement(children)\n ? React.cloneElement(children, undefined, label)\n : label;\n\n return (\n <Component\n className={cn(\n buttonVariants({ variant, size, state: finalState, className }),\n )}\n ref={ref}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n {...props}\n >\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {/* Slottable marks the target element for `asChild`, so the spinner can\n sit alongside it. Without it, Slot sees more than one child (the\n falsy spinner expression counts too) and throws Children.only. */}\n <Slottable>{slotted}</Slottable>\n </Component>\n );\n },\n);\nButtonComponent.displayName = \"Button\";\n\n// Memoize Button for performance optimization\nconst Button = memo(ButtonComponent) as typeof ButtonComponent;\n\nexport { Button, buttonVariants };\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {a}from'./chunk-AC2JBXHQ.js';import n,{useState,useCallback}from'react';import {cva}from'class-variance-authority';var L=cva("border border-border rounded-md overflow-hidden",{variants:{variant:{default:"bg-card",outlined:"border-2 border-border",filled:"bg-muted",ghost:"border-transparent bg-transparent"},size:{sm:"text-sm",md:"text-base",lg:"text-lg"}},defaultVariants:{variant:"default",size:"md"}}),z=cva("border-b border-border last:border-b-0",{variants:{variant:{default:"",outlined:"border-border",filled:"border-border",ghost:"border-transparent"}},defaultVariants:{variant:"default"}}),B=cva("flex w-full items-center justify-between py-4 px-6 text-left font-medium transition-colors hover:bg-muted focus:outline-none focus:ring-2 focus:ring-ring focus:ring-inset disabled:opacity-50 disabled:cursor-not-allowed",{variants:{variant:{default:"text-foreground",outlined:"text-foreground",filled:"text-foreground",ghost:"text-foreground"},size:{sm:"py-3 px-4 text-sm",md:"py-4 px-6 text-base",lg:"py-5 px-8 text-lg"}},defaultVariants:{variant:"default",size:"md"}}),K=cva("overflow-hidden transition-all duration-200 ease-in-out",{variants:{size:{sm:"text-sm",md:"text-base",lg:"text-lg"}},defaultVariants:{size:"md"}}),R=cva("h-4 w-4 shrink-0 transition-transform duration-200",{variants:{open:{true:"rotate-180",false:"rotate-0"}},defaultVariants:{open:false}}),E=n.createContext(void 0),N=n.createContext(null),T=()=>{let t=n.useContext(E);if(!t)throw new Error("Accordion components must be used within an Accordion");return t},P=()=>{let t=n.useContext(N);if(!t)throw new Error("Accordion components must be used within an AccordionItem");return t},S=n.forwardRef(({children:t,type:a$1="single",collapsible:c=true,value:l,defaultValue:i,onValueChange:o,variant:u="default",size:s="md",className:r,...f},g)=>{let[y,x]=useState(()=>i!==void 0?i:a$1==="single"?"":[]),p=l!==void 0,A=p?l:y,m=useCallback(e=>{p||x(e),o?.(e);},[p,o]),d={type:a$1,value:A,onValueChange:m,variant:u||"default",size:s||"md"};return n.createElement(E.Provider,{value:d},n.createElement("div",{ref:g,className:a(L({variant:u,size:s}),r),"data-accordion-root":"true",...f},t))});S.displayName="Accordion";var $=n.forwardRef(({value:t,children:a$1,variant:c="default",className:l,disabled:i=false,...o},u)=>{let{variant:s,value:r,type:f,onValueChange:g}=T(),y=c==="default"?s:c,x=n.useId(),p=`accordion-trigger-${t}-${x}`,A=`accordion-content-${t}-${x}`,m=f==="single"?r===t:Array.isArray(r)&&r.includes(t),d=useCallback(()=>{if(!i)if(f==="single")g(m?"":t);else {let C=Array.isArray(r)?r:[];g(m?C.filter(I=>I!==t):[...C,t]);}},[i,m,f,t,r,g]),e={open:m,toggle:d,triggerId:p,contentId:A,value:t,disabled:i};return n.createElement(N.Provider,{value:e},n.createElement("div",{ref:u,className:a(z({variant:y}),i&&"opacity-50 cursor-not-allowed",l),"data-value":t,"data-disabled":i,...o},a$1))});$.displayName="AccordionItem";var O=n.forwardRef(({children:t,variant:a$1="default",size:c="md",className:l,disabled:i=false,...o},u)=>{let{open:s,toggle:r,triggerId:f,contentId:g,disabled:y}=P(),{variant:x,size:p}=T(),A=a$1==="default"?x:a$1||"default",m=c==="md"?p:c||"md",d=y||i||false;return n.createElement("button",{...o,ref:u,type:"button",id:f,"aria-controls":g,"aria-expanded":s,"aria-disabled":d,disabled:d,"data-state":s?"open":"closed","data-accordion-trigger":"true",onClick:e=>{"onClick"in o&&o.onClick&&o.onClick(e),!d&&r();},onKeyDown:e=>{if("onKeyDown"in o&&o.onKeyDown&&o.onKeyDown(e),!d){if(e.key==="Enter"||e.key===" "){e.preventDefault(),e.stopPropagation(),r();return}if(e.key==="ArrowDown"||e.key==="ArrowUp"||e.key==="Home"||e.key==="End"){e.preventDefault();let C=e.currentTarget.closest('[data-accordion-root="true"]');if(!C)return;let b=Array.from(C.querySelectorAll('[data-accordion-trigger="true"]')).filter(D=>!D.disabled),M=e.currentTarget,V=b.indexOf(M);if(V===-1)return;let w;if(e.key==="ArrowDown")w=(V+1)%b.length;else if(e.key==="ArrowUp")w=(V-1+b.length)%b.length;else if(e.key==="Home")w=0;else if(e.key==="End")w=b.length-1;else return;b[w]?.focus();}}},className:a(B({variant:A,size:m}),d&&"opacity-50 cursor-not-allowed",l)},n.createElement("span",{className:"flex-1"},t),n.createElement("svg",{className:a(R({open:s})),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},n.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})))});O.displayName="AccordionTrigger";var j=n.forwardRef(({children:t,size:a$1="md",className:c,...l},i)=>{let{open:o,contentId:u,triggerId:s}=P(),{size:r}=T();return n.createElement("div",{...l,ref:i,id:u,role:"region","aria-labelledby":s,hidden:!o,"data-state":o?"open":"closed",className:a(K({size:a$1==="md"?r:a$1}),"overflow-hidden transition-all duration-200 ease-in-out",c)},n.createElement("div",{className:"px-6 py-4"},t))});j.displayName="AccordionContent";
|
|
2
|
+
export{L as a,z as b,B as c,K as d,R as e,S as f,$ as g,O as h,j as i};//# sourceMappingURL=chunk-6QAYHUNV.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-6QAYHUNV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/core/accordion.tsx"],"names":["accordionVariants","cva","accordionItemVariants","accordionTriggerVariants","accordionContentVariants","accordionChevronVariants","AccordionContext","React","AccordionItemContext","useAccordionContext","context","useAccordionItemContext","Accordion","children","type","_collapsible","controlledValue","defaultValue","onValueChange","variant","size","className","props","ref","internalValue","setInternalValue","useState","isControlled","value","handleValueChange","useCallback","newValue","contextValue","cn","AccordionItem","disabled","contextVariant","accordionValue","finalVariant","baseId","triggerId","contentId","isOpen","handleToggle","currentValue","v","itemContextValue","AccordionTrigger","open","toggle","itemDisabled","contextSize","finalSize","finalDisabled","root","enabled","btn","current","idx","nextIdx","AccordionContent"],"mappings":"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","file":"chunk-6QAYHUNV.js","sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n// Accordion variants\nconst accordionVariants = cva(\n 'border border-border rounded-md overflow-hidden',\n {\n variants: {\n variant: {\n default: 'bg-card',\n outlined: 'border-2 border-border',\n filled: 'bg-muted',\n ghost: 'border-transparent bg-transparent'\n },\n size: {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg'\n }\n },\n defaultVariants: {\n variant: 'default',\n size: 'md'\n }\n }\n);\n\nconst accordionItemVariants = cva(\n 'border-b border-border last:border-b-0',\n {\n variants: {\n variant: {\n default: '',\n outlined: 'border-border',\n filled: 'border-border',\n ghost: 'border-transparent'\n }\n },\n defaultVariants: {\n variant: 'default'\n }\n }\n);\n\nconst accordionTriggerVariants = cva(\n 'flex w-full items-center justify-between py-4 px-6 text-left font-medium transition-colors hover:bg-muted focus:outline-none focus:ring-2 focus:ring-ring focus:ring-inset disabled:opacity-50 disabled:cursor-not-allowed',\n {\n variants: {\n variant: {\n default: 'text-foreground',\n outlined: 'text-foreground',\n filled: 'text-foreground',\n ghost: 'text-foreground'\n },\n size: {\n sm: 'py-3 px-4 text-sm',\n md: 'py-4 px-6 text-base',\n lg: 'py-5 px-8 text-lg'\n }\n },\n defaultVariants: {\n variant: 'default',\n size: 'md'\n }\n }\n);\n\nconst accordionContentVariants = cva(\n 'overflow-hidden transition-all duration-200 ease-in-out',\n {\n variants: {\n size: {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg'\n }\n },\n defaultVariants: {\n size: 'md'\n }\n }\n);\n\nconst accordionChevronVariants = cva(\n 'h-4 w-4 shrink-0 transition-transform duration-200',\n {\n variants: {\n open: {\n true: 'rotate-180',\n false: 'rotate-0'\n }\n },\n defaultVariants: {\n open: false\n }\n }\n);\n\n// Types\nexport interface AccordionProps extends VariantProps<typeof accordionVariants> {\n children: React.ReactNode;\n type?: 'single' | 'multiple';\n collapsible?: boolean;\n value?: string | string[];\n defaultValue?: string | string[];\n onValueChange?: (value: string | string[]) => void;\n className?: string;\n}\n\nexport interface AccordionItemProps extends VariantProps<typeof accordionItemVariants> {\n value: string;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n}\n\nexport interface AccordionTriggerProps extends VariantProps<typeof accordionTriggerVariants>, Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onClick' | 'onKeyDown'> {\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLButtonElement>) => void;\n}\n\nexport interface AccordionContentProps extends VariantProps<typeof accordionContentVariants> {\n children: React.ReactNode;\n className?: string;\n}\n\n// Accordion Context\ninterface AccordionContextType {\n type: 'single' | 'multiple';\n value: string | string[];\n onValueChange: (value: string | string[]) => void;\n variant: 'default' | 'outlined' | 'filled' | 'ghost';\n size: 'sm' | 'md' | 'lg';\n}\n\n// Accordion Item Context\ninterface AccordionItemContextType {\n open: boolean;\n toggle: () => void;\n triggerId: string;\n contentId: string;\n value: string;\n disabled: boolean;\n}\n\nconst AccordionContext = React.createContext<AccordionContextType | undefined>(undefined);\nconst AccordionItemContext = React.createContext<AccordionItemContextType | null>(null);\n\nconst useAccordionContext = () => {\n const context = React.useContext(AccordionContext);\n if (!context) {\n throw new Error('Accordion components must be used within an Accordion');\n }\n return context;\n};\n\nconst useAccordionItemContext = () => {\n const context = React.useContext(AccordionItemContext);\n if (!context) {\n throw new Error('Accordion components must be used within an AccordionItem');\n }\n return context;\n};\n\n// Main Accordion Component\nexport const Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n ({\n children,\n type = 'single',\n collapsible: _collapsible = true,\n value: controlledValue,\n defaultValue,\n onValueChange,\n variant = 'default',\n size = 'md',\n className,\n ...props\n }, ref) => {\n const [internalValue, setInternalValue] = useState<string | string[]>(() => {\n if (defaultValue !== undefined) {\n return defaultValue;\n }\n return type === 'single' ? '' : [];\n });\n \n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n \n const handleValueChange = useCallback((newValue: string | string[]) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n }, [isControlled, onValueChange]);\n\n const contextValue: AccordionContextType = {\n type,\n value,\n onValueChange: handleValueChange,\n variant: variant || 'default',\n size: size || 'md'\n };\n\n return (\n <AccordionContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={cn(accordionVariants({ variant, size }), className)}\n data-accordion-root=\"true\"\n {...props}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n }\n);\n\nAccordion.displayName = 'Accordion';\n\n// Accordion Item Component\nexport const AccordionItem = React.forwardRef<HTMLDivElement, AccordionItemProps>(\n ({\n value,\n children,\n variant = 'default',\n className,\n disabled = false,\n ...props\n }, ref) => {\n const { variant: contextVariant, value: accordionValue, type, onValueChange } = useAccordionContext();\n const finalVariant = variant === 'default' ? contextVariant : variant;\n \n // Stable IDs using useId\n const baseId = React.useId();\n const triggerId = `accordion-trigger-${value}-${baseId}`;\n const contentId = `accordion-content-${value}-${baseId}`;\n \n // Determine if this item is open\n const isOpen = type === 'single' \n ? accordionValue === value \n : Array.isArray(accordionValue) && accordionValue.includes(value);\n \n \n const handleToggle = useCallback(() => {\n if (disabled) return;\n \n if (type === 'single') {\n // Toggle: if currently open, close it; if closed, open it\n onValueChange(isOpen ? '' : value);\n } else {\n const currentValue = Array.isArray(accordionValue) ? accordionValue : [];\n if (isOpen) {\n onValueChange(currentValue.filter(v => v !== value));\n } else {\n onValueChange([...currentValue, value]);\n }\n }\n }, [disabled, isOpen, type, value, accordionValue, onValueChange]);\n\n const itemContextValue: AccordionItemContextType = {\n open: isOpen,\n toggle: handleToggle,\n triggerId,\n contentId,\n value,\n disabled\n };\n\n return (\n <AccordionItemContext.Provider value={itemContextValue}>\n <div\n ref={ref}\n className={cn(\n accordionItemVariants({ variant: finalVariant }),\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n data-value={value}\n data-disabled={disabled}\n {...props}\n >\n {children}\n </div>\n </AccordionItemContext.Provider>\n );\n }\n);\n\nAccordionItem.displayName = 'AccordionItem';\n\n// Accordion Trigger Component\nexport const AccordionTrigger = React.forwardRef<HTMLButtonElement, AccordionTriggerProps>(\n ({\n children,\n variant = 'default',\n size = 'md',\n className,\n disabled = false,\n ...props\n }, ref) => {\n const { open, toggle, triggerId, contentId, disabled: itemDisabled } = useAccordionItemContext();\n const { variant: contextVariant, size: contextSize } = useAccordionContext();\n \n const finalVariant = variant === 'default' ? contextVariant : variant || 'default';\n const finalSize = size === 'md' ? contextSize : size || 'md';\n const finalDisabled = itemDisabled || disabled || false;\n\n return (\n <button\n {...props}\n ref={ref}\n type=\"button\"\n id={triggerId}\n aria-controls={contentId}\n aria-expanded={open}\n aria-disabled={finalDisabled}\n disabled={finalDisabled}\n data-state={open ? 'open' : 'closed'}\n data-accordion-trigger=\"true\"\n onClick={(e) => {\n if ('onClick' in props && props.onClick) {\n props.onClick(e as React.MouseEvent<HTMLButtonElement>);\n }\n if (finalDisabled) return;\n toggle();\n }}\n onKeyDown={(e) => {\n if ('onKeyDown' in props && props.onKeyDown) {\n props.onKeyDown(e as React.KeyboardEvent<HTMLButtonElement>);\n }\n if (finalDisabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n toggle();\n return;\n }\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Home' || e.key === 'End') {\n e.preventDefault();\n const root = (e.currentTarget as HTMLElement).closest('[data-accordion-root=\"true\"]');\n if (!root) return;\n const triggers = Array.from(root.querySelectorAll<HTMLButtonElement>('[data-accordion-trigger=\"true\"]'));\n const enabled = triggers.filter(btn => !btn.disabled);\n const current = e.currentTarget as HTMLButtonElement;\n const idx = enabled.indexOf(current);\n if (idx === -1) return;\n \n let nextIdx: number;\n if (e.key === 'ArrowDown') {\n nextIdx = (idx + 1) % enabled.length;\n } else if (e.key === 'ArrowUp') {\n nextIdx = (idx - 1 + enabled.length) % enabled.length;\n } else if (e.key === 'Home') {\n nextIdx = 0;\n } else if (e.key === 'End') {\n nextIdx = enabled.length - 1;\n } else {\n return;\n }\n \n enabled[nextIdx]?.focus();\n }\n }}\n className={cn(\n accordionTriggerVariants({ variant: finalVariant, size: finalSize }),\n finalDisabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n >\n <span className=\"flex-1\">{children}</span>\n <svg\n className={cn(accordionChevronVariants({ open }))}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n );\n }\n);\n\nAccordionTrigger.displayName = 'AccordionTrigger';\n\n// Accordion Content Component\nexport const AccordionContent = React.forwardRef<HTMLDivElement, AccordionContentProps>(\n ({\n children,\n size = 'md',\n className,\n ...props\n }, ref) => {\n const { open, contentId, triggerId } = useAccordionItemContext();\n const { size: contextSize } = useAccordionContext();\n \n const finalSize = size === 'md' ? contextSize : size;\n\n return (\n <div\n {...props}\n ref={ref}\n id={contentId}\n role=\"region\"\n aria-labelledby={triggerId}\n hidden={!open}\n data-state={open ? 'open' : 'closed'}\n className={cn(\n accordionContentVariants({ size: finalSize }), \n 'overflow-hidden transition-all duration-200 ease-in-out',\n className\n )}\n >\n <div className=\"px-6 py-4\">\n {children}\n </div>\n </div>\n );\n }\n);\n\nAccordionContent.displayName = 'AccordionContent';\n\n// Export variants for external use\nexport { accordionVariants, accordionItemVariants, accordionTriggerVariants, accordionContentVariants, accordionChevronVariants };"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunk5PVFLXPO_cjs=require('./chunk-5PVFLXPO.cjs'),chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),e=require('react'),classVarianceAuthority=require('class-variance-authority');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var e__default=/*#__PURE__*/_interopDefault(e);var S=classVarianceAuthority.cva("grid gap-4",{variants:{columns:{1:"grid-cols-1",2:"grid-cols-1 sm:grid-cols-2",3:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",4:"grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",5:"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5",6:"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6"},spacing:{sm:"gap-2",md:"gap-4",lg:"gap-6",xl:"gap-8"}},defaultVariants:{columns:3,spacing:"md"}}),q=classVarianceAuthority.cva("relative overflow-hidden rounded-lg bg-muted/50 transition-all duration-300 hover:scale-105 hover:shadow-lg",{variants:{aspectRatio:{square:"aspect-square",video:"aspect-video",portrait:"aspect-[3/4]",landscape:"aspect-[4/3]",wide:"aspect-[16/9]"},hover:{none:"",scale:"hover:scale-105",zoom:"hover:scale-110",lift:"hover:-translate-y-2"}},defaultVariants:{aspectRatio:"square",hover:"scale"}}),A=classVarianceAuthority.cva("fixed inset-0 z-50 flex items-center justify-center bg-black/90 backdrop-blur-sm",{variants:{animation:{fade:"animate-in fade-in duration-300",slide:"animate-in slide-in-from-bottom duration-300",zoom:"animate-in zoom-in duration-300"}},defaultVariants:{animation:"fade"}}),B=({images:a,className:y,itemClassName:k,columns:w=3,spacing:N="md",showLightbox:g=true,lightboxAnimation:I="fade",onImageClick:v,itemHover:V="scale",itemAspectRatio:C="square",showThumbnails:z=false,thumbnailSize:D="md",...P})=>{let[l,r]=e.useState(null),[i,n]=e.useState(-1),f=e.useCallback((t,s)=>{g&&(r(t),n(s)),v?.(t,s);},[g,v]),d=e.useCallback(()=>{r(null),n(-1);},[]),b=e.useCallback(()=>{if(i>0){let t=i-1;r(a[t]||null),n(t);}},[i,a]),p=e.useCallback(()=>{if(i<a.length-1){let t=i+1;r(a[t]||null),n(t);}},[i,a]),G=e.useCallback(t=>{t.key==="Escape"?d():t.key==="ArrowLeft"?b():t.key==="ArrowRight"&&p();},[d,b,p]);return e__default.default.createElement(e__default.default.Fragment,null,e__default.default.createElement("div",{className:chunkITRGJNWL_cjs.a(S({columns:w,spacing:N}),y),...P},a.map((t,s)=>e__default.default.createElement("div",{key:t.id||s,className:chunkITRGJNWL_cjs.a(q({aspectRatio:C,hover:V}),k),role:"button",tabIndex:0,onClick:()=>f(t,s),onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),f(t,s));},"aria-label":`View image ${s+1}: ${t.alt}`},e__default.default.createElement("img",{src:z&&t.thumbnail?t.thumbnail:t.src,alt:t.alt,className:"w-full h-full object-cover",loading:"lazy"}),(t.title||t.description)&&e__default.default.createElement("div",{className:"absolute inset-0 bg-black/50 opacity-0 hover:opacity-100 transition-opacity duration-300 flex items-end"},e__default.default.createElement("div",{className:"p-4 text-white"},t.title&&e__default.default.createElement("h3",{className:"font-semibold text-sm sm:text-base"},t.title),t.description&&e__default.default.createElement("p",{className:"text-xs sm:text-sm text-white/80 mt-1"},t.description)))))),l&&g&&e__default.default.createElement("div",{className:chunkITRGJNWL_cjs.a(A({animation:I})),onClick:d,onKeyDown:G,tabIndex:-1,role:"dialog","aria-modal":"true","aria-labelledby":"lightbox-title"},e__default.default.createElement("div",{className:"relative max-w-4xl max-h-[90vh] mx-4",onClick:t=>t.stopPropagation()},e__default.default.createElement("img",{src:l.src,alt:l.alt,className:"max-w-full max-h-full object-contain rounded-lg",id:"lightbox-title"}),(l.title||l.description)&&e__default.default.createElement("div",{className:"absolute bottom-0 left-0 right-0 bg-black/80 text-white p-4 rounded-b-lg"},l.title&&e__default.default.createElement("h3",{className:"font-semibold text-lg mb-2"},l.title),l.description&&e__default.default.createElement("p",{className:"text-sm text-white/80"},l.description)),a.length>1&&e__default.default.createElement(e__default.default.Fragment,null,i>0&&e__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",className:"absolute left-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white",onClick:b,"aria-label":"Previous image"},"\u2190"),i<a.length-1&&e__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",className:"absolute right-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white",onClick:p,"aria-label":"Next image"},"\u2192")),e__default.default.createElement(chunk5PVFLXPO_cjs.b,{variant:"ghost",size:"sm",className:"absolute top-4 right-4 bg-black/50 hover:bg-black/70 text-white",onClick:d,"aria-label":"Close lightbox"},"\u2715"),a.length>1&&e__default.default.createElement("div",{className:"absolute top-4 left-4 bg-black/50 text-white px-3 py-1 rounded-full text-sm"},i+1," / ",a.length))))},F=B;exports.a=B;exports.b=F;//# sourceMappingURL=chunk-7PPAI3MM.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-7PPAI3MM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/marketing/gallery.tsx"],"names":["galleryVariants","cva","galleryItemVariants","lightboxVariants","Gallery","images","className","itemClassName","columns","spacing","showLightbox","lightboxAnimation","onImageClick","itemHover","itemAspectRatio","showThumbnails","_thumbnailSize","props","selectedImage","setSelectedImage","useState","selectedIndex","setSelectedIndex","handleImageClick","useCallback","image","index","handleCloseLightbox","handlePrevious","newIndex","handleNext","handleKeyDown","e","React","cn","Button","gallery_default"],"mappings":"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","file":"chunk-7PPAI3MM.cjs","sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../components/core/button';\n\nconst galleryVariants = cva(\n 'grid gap-4',\n {\n variants: {\n columns: {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n 5: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5',\n 6: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-6',\n },\n spacing: {\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n xl: 'gap-8',\n },\n },\n defaultVariants: {\n columns: 3,\n spacing: 'md',\n },\n }\n);\n\nconst galleryItemVariants = cva(\n 'relative overflow-hidden rounded-lg bg-muted/50 transition-all duration-300 hover:scale-105 hover:shadow-lg',\n {\n variants: {\n aspectRatio: {\n square: 'aspect-square',\n video: 'aspect-video',\n portrait: 'aspect-[3/4]',\n landscape: 'aspect-[4/3]',\n wide: 'aspect-[16/9]',\n },\n hover: {\n none: '',\n scale: 'hover:scale-105',\n zoom: 'hover:scale-110',\n lift: 'hover:-translate-y-2',\n },\n },\n defaultVariants: {\n aspectRatio: 'square',\n hover: 'scale',\n },\n }\n);\n\nconst lightboxVariants = cva(\n 'fixed inset-0 z-50 flex items-center justify-center bg-black/90 backdrop-blur-sm',\n {\n variants: {\n animation: {\n fade: 'animate-in fade-in duration-300',\n slide: 'animate-in slide-in-from-bottom duration-300',\n zoom: 'animate-in zoom-in duration-300',\n },\n },\n defaultVariants: {\n animation: 'fade',\n },\n }\n);\n\nexport interface GalleryImage {\n id: string;\n src: string;\n alt: string;\n title?: string;\n description?: string;\n thumbnail?: string;\n}\n\nexport interface GalleryProps extends VariantProps<typeof galleryVariants> {\n images: GalleryImage[];\n className?: string;\n itemClassName?: string;\n showLightbox?: boolean;\n lightboxAnimation?: VariantProps<typeof lightboxVariants>['animation'];\n onImageClick?: (image: GalleryImage, index: number) => void;\n itemHover?: VariantProps<typeof galleryItemVariants>['hover'];\n itemAspectRatio?: VariantProps<typeof galleryItemVariants>['aspectRatio'];\n showThumbnails?: boolean;\n thumbnailSize?: 'sm' | 'md' | 'lg';\n}\n\nexport const Gallery: React.FC<GalleryProps> = ({\n images,\n className,\n itemClassName,\n columns = 3,\n spacing = 'md',\n showLightbox = true,\n lightboxAnimation = 'fade',\n onImageClick,\n itemHover = 'scale',\n itemAspectRatio = 'square',\n showThumbnails = false,\n thumbnailSize: _thumbnailSize = 'md',\n ...props\n}) => {\n const [selectedImage, setSelectedImage] = useState<GalleryImage | null>(null);\n const [selectedIndex, setSelectedIndex] = useState<number>(-1);\n\n const handleImageClick = useCallback((image: GalleryImage, index: number) => {\n if (showLightbox) {\n setSelectedImage(image);\n setSelectedIndex(index);\n }\n onImageClick?.(image, index);\n }, [showLightbox, onImageClick]);\n\n const handleCloseLightbox = useCallback(() => {\n setSelectedImage(null);\n setSelectedIndex(-1);\n }, []);\n\n const handlePrevious = useCallback(() => {\n if (selectedIndex > 0) {\n const newIndex = selectedIndex - 1;\n setSelectedImage(images[newIndex] || null);\n setSelectedIndex(newIndex);\n }\n }, [selectedIndex, images]);\n\n const handleNext = useCallback(() => {\n if (selectedIndex < images.length - 1) {\n const newIndex = selectedIndex + 1;\n setSelectedImage(images[newIndex] || null);\n setSelectedIndex(newIndex);\n }\n }, [selectedIndex, images]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleCloseLightbox();\n } else if (e.key === 'ArrowLeft') {\n handlePrevious();\n } else if (e.key === 'ArrowRight') {\n handleNext();\n }\n }, [handleCloseLightbox, handlePrevious, handleNext]);\n\n return (\n <>\n <div \n className={cn(galleryVariants({ columns, spacing }), className)}\n {...props}\n >\n {images.map((image, index) => (\n <div\n key={image.id || index}\n className={cn(\n galleryItemVariants({ \n aspectRatio: itemAspectRatio, \n hover: itemHover \n }),\n itemClassName\n )}\n role=\"button\"\n tabIndex={0}\n onClick={() => handleImageClick(image, index)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleImageClick(image, index);\n }\n }}\n aria-label={`View image ${index + 1}: ${image.alt}`}\n >\n <img\n src={showThumbnails && image.thumbnail ? image.thumbnail : image.src}\n alt={image.alt}\n className=\"w-full h-full object-cover\"\n loading=\"lazy\"\n />\n {(image.title || image.description) && (\n <div className=\"absolute inset-0 bg-black/50 opacity-0 hover:opacity-100 transition-opacity duration-300 flex items-end\">\n <div className=\"p-4 text-white\">\n {image.title && (\n <h3 className=\"font-semibold text-sm sm:text-base\">\n {image.title}\n </h3>\n )}\n {image.description && (\n <p className=\"text-xs sm:text-sm text-white/80 mt-1\">\n {image.description}\n </p>\n )}\n </div>\n </div>\n )}\n </div>\n ))}\n </div>\n\n {selectedImage && showLightbox && (\n <div\n className={cn(lightboxVariants({ animation: lightboxAnimation }))}\n onClick={handleCloseLightbox}\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"lightbox-title\"\n >\n <div \n className=\"relative max-w-4xl max-h-[90vh] mx-4\"\n onClick={(e) => e.stopPropagation()}\n >\n <img\n src={selectedImage.src}\n alt={selectedImage.alt}\n className=\"max-w-full max-h-full object-contain rounded-lg\"\n id=\"lightbox-title\"\n />\n \n {(selectedImage.title || selectedImage.description) && (\n <div className=\"absolute bottom-0 left-0 right-0 bg-black/80 text-white p-4 rounded-b-lg\">\n {selectedImage.title && (\n <h3 className=\"font-semibold text-lg mb-2\">\n {selectedImage.title}\n </h3>\n )}\n {selectedImage.description && (\n <p className=\"text-sm text-white/80\">\n {selectedImage.description}\n </p>\n )}\n </div>\n )}\n\n {/* Navigation buttons */}\n {images.length > 1 && (\n <>\n {selectedIndex > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute left-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handlePrevious}\n aria-label=\"Previous image\"\n >\n ←\n </Button>\n )}\n {selectedIndex < images.length - 1 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute right-4 top-1/2 -translate-y-1/2 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handleNext}\n aria-label=\"Next image\"\n >\n →\n </Button>\n )}\n </>\n )}\n\n {/* Close button */}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute top-4 right-4 bg-black/50 hover:bg-black/70 text-white\"\n onClick={handleCloseLightbox}\n aria-label=\"Close lightbox\"\n >\n ✕\n </Button>\n\n {/* Image counter */}\n {images.length > 1 && (\n <div className=\"absolute top-4 left-4 bg-black/50 text-white px-3 py-1 rounded-full text-sm\">\n {selectedIndex + 1} / {images.length}\n </div>\n )}\n </div>\n </div>\n )}\n </>\n );\n};\n\nexport default Gallery;\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var n=require('react');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var n__namespace=/*#__PURE__*/_interopNamespace(n);function t(o){return n__namespace.memo(o)}exports.a=t;//# sourceMappingURL=chunk-7SPPGTBT.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-7SPPGTBT.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/memo.ts"],"names":["memo","Component","n"],"mappings":"0YAeO,SAASA,CAAAA,CAAQC,EAAiB,CACvC,OAAaC,YAAA,CAAA,IAAA,CACXD,CACF,CACF","file":"chunk-7SPPGTBT.cjs","sourcesContent":["import * as React from \"react\";\n\n/**\n * `React.memo` that keeps the component's own type.\n *\n * `React.memo` returns a `MemoExoticComponent`, which drops a `forwardRef`\n * component's call signature and cannot carry the statics that compound\n * components rely on (`Card.Header` and friends). Every memoised component here\n * used to work around that with `as any as typeof Component`, which cost an\n * `no-explicit-any` suppression in thirteen files.\n *\n * The cast is still a cast - it just lives in one auditable place instead of\n * thirteen, and it goes through `unknown` rather than `any`, so nothing\n * downstream silently loses type checking.\n */\nexport function memo<T>(Component: T): T {\n return React.memo(\n Component as unknown as React.FunctionComponent,\n ) as unknown as T;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {d}from'./chunk-GUJB555L.js';import {b}from'./chunk-HD3TMQPR.js';import {a}from'./chunk-COXN6XBA.js';import {a as a$1}from'./chunk-AC2JBXHQ.js';import t,{useState,useMemo,useCallback}from'react';import {cva}from'class-variance-authority';var Ve=cva("flex flex-wrap items-center gap-2 p-4 bg-muted border-b border-border",{variants:{variant:{default:"bg-muted",compact:"p-2 bg-card",minimal:"p-2 bg-transparent border-0"}},defaultVariants:{variant:"default"}});function te({data:F,columns:x,searchable:z=true,searchPlaceholder:oe="Search...",searchKeys:j,onSearch:V,searchTerm:E,onSearchTermChange:K,filterable:D=false,filters:b$1=[],onFilter:B,columnFilters:_,onColumnFiltersChange:q,defaultSortColumn:ae,defaultSortDirection:se="asc",sortColumn:G,sortDirection:ie,onSortChange:y,defaultPageSize:ue=10,showPagination:h=true,currentPage:H,pageSize:J,onPageChange:Q,onPageSizeChange:M,totalItems:s,showSearch:U=true,showFilters:W=true,filterBarClassName:le,searchBarClassName:de,rowKey:ce="id",emptyText:me="No data found",...ge}){let I=E!==void 0,L=_!==void 0,k=G!==void 0,o=H!==void 0,[fe,pe]=useState(""),m=I?E:fe,X=useMemo(()=>I?e=>K?.(e):pe,[I,K]),[be,ye]=useState({}),d$1=L?_:be,$=useMemo(()=>L?e=>q?.(e):ye,[L,q]),[he,ke]=useState(ae),[ve,Te]=useState(se),g=k?G:he,v=k?ie:ve,Y=useMemo(()=>k?e=>{e&&y&&v&&y(e,v);}:ke,[k,y,v]),Z=useMemo(()=>k?e=>{g&&y&&y(g,e);}:Te,[k,y,g]),[xe,Ce]=useState(1),[Se,we]=useState(ue),f=o?H:xe,a=J!==void 0?J:Se,p=useMemo(()=>o?e=>Q?.(e):Ce,[o,Q]),R=useMemo(()=>M?e=>M(e):we,[M]),C=useMemo(()=>{if(!z||!m.trim())return F;let e=m.toLowerCase(),r=j||x.map(n=>n.dataIndex||n.key).filter(Boolean);return F.filter(n=>r.some(i=>{let c=n[i];return c==null?false:String(c).toLowerCase().includes(e)}))},[F,m,z,j,x]),S=useMemo(()=>!D||b$1.length===0||Object.keys(d$1).length===0?C:C.filter(e=>b$1.every(r=>{let n=d$1[r.key];if(n==null||n==="")return true;if(r.filterFn)return r.filterFn(n,e);let i=e[r.key];switch(r.type){case "text":return String(i).toLowerCase().includes(String(n).toLowerCase());case "number":return Number(i)===Number(n);case "boolean":return !!i==!!n;case "select":return String(i)===String(n);default:return String(i).includes(String(n))}})),[C,d$1,D,b$1]),l=useMemo(()=>{if(!g)return S;let e=[...S],r=x.find(n=>n.key===g);return !r||!r.sortable||e.sort((n,i)=>{let c=r.dataIndex?n[r.dataIndex]:n[r.key],w=r.dataIndex?i[r.dataIndex]:i[r.key];if(c==null)return 1;if(w==null)return -1;let N=0;return typeof c=="number"&&typeof w=="number"?N=c-w:N=String(c).localeCompare(String(w)),v==="asc"?N:-N}),e},[S,g,v,x]),Fe=useMemo(()=>{if(!h||o&&s!==void 0)return l;let e=(f-1)*a,r=e+a;return l.slice(e,r)},[l,f,a,h,o,s]);useMemo(()=>h?Math.ceil(o&&s!==void 0?s/a:l.length/a):1,[h,o,s,a,l.length]);let De=useCallback(e=>{X(e),o||p(1);},[X,p,o]),ee=useCallback((e,r)=>{let n={...d$1,[e]:r};$(n),o||p(1);},[d$1,$,p,o]),Ne=useCallback((e,r)=>{Y(e.key),Z(r);},[Y,Z]),Pe=useCallback((e,r)=>{p(e),r!==a&&(R(r),p(1));},[a,p,R]);return t.useEffect(()=>{V&&V(m,C);},[m,C,V]),t.useEffect(()=>{B&&B(d$1,S);},[d$1,S,B]),t.createElement("div",{className:"w-full"},(U||W&&D&&b$1.length>0)&&t.createElement("div",{className:a$1(Ve(),le)},U&&z&&t.createElement("div",{className:a$1("flex-1 min-w-[200px]",de)},t.createElement(b,{type:"text",placeholder:oe,value:m,onChange:e=>De(e.target.value),className:"w-full","aria-label":"Search table"})),W&&D&&b$1.length>0&&t.createElement("div",{className:"flex flex-wrap items-center gap-2"},b$1.map(e=>{let r=d$1[e.key];return e.type==="select"&&e.options?t.createElement("select",{key:e.key,value:String(r||""),onChange:n=>ee(e.key,n.target.value||void 0),className:"rounded-md border border-input px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-primary","aria-label":`Filter by ${e.key}`},t.createElement("option",{value:""},"All ",e.key),e.options.map(n=>t.createElement("option",{key:n.value,value:String(n.value)},n.label))):t.createElement(b,{key:e.key,type:e.type==="number"?"number":"text",placeholder:e.placeholder||`Filter ${e.key}...`,value:String(r||""),onChange:n=>ee(e.key,e.type==="number"?Number(n.target.value):n.target.value),className:"min-w-[150px]","aria-label":`Filter by ${e.key}`})}),Object.keys(d$1).length>0&&t.createElement("button",{type:"button",onClick:()=>$({}),className:"px-3 py-2 text-sm text-muted-foreground hover:text-foreground underline","aria-label":"Clear all filters"},"Clear filters"))),t.createElement(d,{...ge,data:Fe,columns:x,rowKey:ce,emptyText:me,...g&&{sortColumn:g,sortDirection:v},onSort:Ne,...h&&{pagination:{current:f,pageSize:a,total:o&&s!==void 0?s:l.length,onChange:Pe,showSizeChanger:true}}}),h&&(o&&s!==void 0?s>0:l.length>0)&&t.createElement("div",{className:"mt-2 px-4 py-2 text-sm text-muted-foreground"},o&&s!==void 0?t.createElement(t.Fragment,null,"Showing ",(f-1)*a+1," to"," ",Math.min(f*a,s)," of ",s," ","results",m&&" (filtered)"):t.createElement(t.Fragment,null,"Showing ",(f-1)*a+1," to"," ",Math.min(f*a,l.length)," of"," ",l.length," results",m&&` (filtered from ${F.length} total)`)))}te.displayName="DataTable";var Ke=a(te);export{te as a,Ke as b};//# sourceMappingURL=chunk-7W456HZL.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-7W456HZL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/core/data-table.tsx"],"names":["filterBarVariants","cva","DataTable","initialData","columns","searchable","searchPlaceholder","searchKeys","onSearch","controlledSearchTerm","onSearchTermChange","filterable","filters","onFilter","controlledColumnFilters","onColumnFiltersChange","defaultSortColumn","defaultSortDirection","controlledSortColumn","controlledSortDirection","onSortChange","defaultPageSize","showPagination","controlledCurrentPage","controlledPageSize","onPageChange","onPageSizeChange","totalItems","showSearch","showFilters","filterBarClassName","searchBarClassName","rowKey","emptyText","tableProps","isControlledSearch","isControlledFilters","isControlledSort","isControlledPagination","internalSearchTerm","setInternalSearchTerm","useState","searchTerm","setSearchTerm","useMemo","value","internalColumnFilters","setInternalColumnFilters","columnFilters","setColumnFilters","internalSortColumn","setInternalSortColumn","internalSortDirection","setInternalSortDirection","sortColumn","sortDirection","setSortColumn","column","setSortDirection","dir","internalCurrentPage","setInternalCurrentPage","internalPageSize","setInternalPageSize","currentPage","pageSize","setCurrentPage","page","setPageSize","size","searchFilteredData","term","keys","col","record","key","filterFilteredData","filter","filterValue","recordValue","sortedData","sorted","a","b","aValue","bValue","comparison","paginatedData","startIndex","endIndex","handleSearch","useCallback","handleFilterChange","newFilters","handleSort","direction","handlePageChange","newPageSize","React","cn","Input","e","option","Table","DataTableMemoized","memo"],"mappings":"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","file":"chunk-7W456HZL.js","sourcesContent":["import React, { useState, useMemo, useCallback } from \"react\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\nimport { Table, TableColumn, TableProps } from \"./table\";\nimport { Input } from \"./input\";\n\n// Filter types\nexport type FilterType = \"text\" | \"select\" | \"number\" | \"date\" | \"boolean\";\n\nexport interface ColumnFilter<T = Record<string, unknown>> {\n key: string;\n type: FilterType;\n options?: Array<{ label: string; value: string | number }>;\n placeholder?: string;\n filterFn?: (value: unknown, record: T) => boolean;\n}\n\nexport interface DataTableProps<T = Record<string, unknown>> extends Omit<\n TableProps<T>,\n \"data\" | \"onSort\" | \"sortColumn\" | \"sortDirection\"\n> {\n data: T[];\n columns: TableColumn<T>[];\n\n // Search\n searchable?: boolean;\n searchPlaceholder?: string;\n searchKeys?: Array<keyof T | string>;\n onSearch?: (searchTerm: string, filteredData: T[]) => void;\n\n // Controlled search (for server-side filtering)\n searchTerm?: string;\n onSearchTermChange?: (searchTerm: string) => void;\n\n // Filtering\n filterable?: boolean;\n filters?: ColumnFilter<T>[];\n onFilter?: (filters: Record<string, unknown>, filteredData: T[]) => void;\n\n // Controlled filters (for server-side filtering)\n columnFilters?: Record<string, unknown>;\n onColumnFiltersChange?: (filters: Record<string, unknown>) => void;\n\n // Sorting (enhanced)\n defaultSortColumn?: string;\n defaultSortDirection?: \"asc\" | \"desc\";\n\n // Controlled sorting (for server-side sorting)\n sortColumn?: string;\n sortDirection?: \"asc\" | \"desc\";\n onSortChange?: (column: string, direction: \"asc\" | \"desc\") => void;\n\n // Pagination (enhanced)\n defaultPageSize?: number;\n showPagination?: boolean;\n\n // Controlled pagination (for server-side pagination)\n currentPage?: number;\n pageSize?: number;\n onPageChange?: (page: number) => void;\n onPageSizeChange?: (size: number) => void;\n totalItems?: number; // Required for server-side pagination\n\n // UI\n showSearch?: boolean;\n showFilters?: boolean;\n filterBarClassName?: string;\n searchBarClassName?: string;\n}\n\n// Filter bar component\nconst filterBarVariants = cva(\n \"flex flex-wrap items-center gap-2 p-4 bg-muted border-b border-border\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n compact: \"p-2 bg-card\",\n minimal: \"p-2 bg-transparent border-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nexport function DataTable<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n data: initialData,\n columns,\n searchable = true,\n searchPlaceholder = \"Search...\",\n searchKeys,\n onSearch,\n searchTerm: controlledSearchTerm,\n onSearchTermChange,\n filterable = false,\n filters = [],\n onFilter,\n columnFilters: controlledColumnFilters,\n onColumnFiltersChange,\n defaultSortColumn,\n defaultSortDirection = \"asc\",\n sortColumn: controlledSortColumn,\n sortDirection: controlledSortDirection,\n onSortChange,\n defaultPageSize = 10,\n showPagination = true,\n currentPage: controlledCurrentPage,\n pageSize: controlledPageSize,\n onPageChange,\n onPageSizeChange,\n totalItems,\n showSearch = true,\n showFilters = true,\n filterBarClassName,\n searchBarClassName,\n rowKey = \"id\",\n emptyText = \"No data found\",\n ...tableProps\n}: DataTableProps<T>) {\n // Determine if component is in controlled mode\n const isControlledSearch = controlledSearchTerm !== undefined;\n const isControlledFilters = controlledColumnFilters !== undefined;\n const isControlledSort = controlledSortColumn !== undefined;\n const isControlledPagination = controlledCurrentPage !== undefined;\n\n // Search state (controlled or uncontrolled)\n const [internalSearchTerm, setInternalSearchTerm] = useState(\"\");\n const searchTerm = isControlledSearch\n ? controlledSearchTerm\n : internalSearchTerm;\n const setSearchTerm = useMemo(\n () =>\n isControlledSearch\n ? (value: string) => onSearchTermChange?.(value)\n : setInternalSearchTerm,\n [isControlledSearch, onSearchTermChange],\n );\n\n // Filter state (controlled or uncontrolled)\n const [internalColumnFilters, setInternalColumnFilters] = useState<\n Record<string, unknown>\n >({});\n const columnFilters = isControlledFilters\n ? controlledColumnFilters\n : internalColumnFilters;\n const setColumnFilters = useMemo(\n () =>\n isControlledFilters\n ? (filters: Record<string, unknown>) => onColumnFiltersChange?.(filters)\n : setInternalColumnFilters,\n [isControlledFilters, onColumnFiltersChange],\n );\n\n // Sort state (controlled or uncontrolled)\n const [internalSortColumn, setInternalSortColumn] = useState<\n string | undefined\n >(defaultSortColumn);\n const [internalSortDirection, setInternalSortDirection] = useState<\n \"asc\" | \"desc\"\n >(defaultSortDirection);\n const sortColumn = isControlledSort\n ? controlledSortColumn\n : internalSortColumn;\n const sortDirection = isControlledSort\n ? controlledSortDirection\n : internalSortDirection;\n const setSortColumn = useMemo(\n () =>\n isControlledSort\n ? (column: string | undefined) => {\n if (column && onSortChange && sortDirection) {\n onSortChange(column, sortDirection);\n }\n }\n : setInternalSortColumn,\n [isControlledSort, onSortChange, sortDirection],\n );\n const setSortDirection = useMemo(\n () =>\n isControlledSort\n ? (dir: \"asc\" | \"desc\") => {\n if (sortColumn && onSortChange) {\n onSortChange(sortColumn, dir);\n }\n }\n : setInternalSortDirection,\n [isControlledSort, onSortChange, sortColumn],\n );\n\n // Pagination state (controlled or uncontrolled)\n const [internalCurrentPage, setInternalCurrentPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n const currentPage = isControlledPagination\n ? controlledCurrentPage\n : internalCurrentPage;\n const pageSize =\n controlledPageSize !== undefined ? controlledPageSize : internalPageSize;\n const setCurrentPage = useMemo(\n () =>\n isControlledPagination\n ? (page: number) => onPageChange?.(page)\n : setInternalCurrentPage,\n [isControlledPagination, onPageChange],\n );\n const setPageSize = useMemo(\n () =>\n onPageSizeChange\n ? (size: number) => onPageSizeChange(size)\n : setInternalPageSize,\n [onPageSizeChange],\n );\n\n // Apply search\n const searchFilteredData = useMemo(() => {\n if (!searchable || !searchTerm.trim()) {\n return initialData;\n }\n\n const term = searchTerm.toLowerCase();\n const keys =\n searchKeys ||\n columns.map((col) => col.dataIndex || col.key).filter(Boolean);\n\n return initialData.filter((record) => {\n return keys.some((key) => {\n const value =\n typeof key === \"string\"\n ? (record as Record<string, unknown>)[key]\n : record[key as keyof T];\n\n if (value === null || value === undefined) return false;\n\n return String(value).toLowerCase().includes(term);\n });\n });\n }, [initialData, searchTerm, searchable, searchKeys, columns]);\n\n // Apply column filters\n const filterFilteredData = useMemo(() => {\n if (\n !filterable ||\n filters.length === 0 ||\n Object.keys(columnFilters).length === 0\n ) {\n return searchFilteredData;\n }\n\n return searchFilteredData.filter((record) => {\n return filters.every((filter) => {\n const filterValue = columnFilters[filter.key];\n\n // Skip if no filter value\n if (\n filterValue === undefined ||\n filterValue === null ||\n filterValue === \"\"\n ) {\n return true;\n }\n\n // Use custom filter function if provided\n if (filter.filterFn) {\n return filter.filterFn(filterValue, record);\n }\n\n // Default filtering logic\n const recordValue = (record as Record<string, unknown>)[filter.key];\n\n switch (filter.type) {\n case \"text\":\n return String(recordValue)\n .toLowerCase()\n .includes(String(filterValue).toLowerCase());\n case \"number\":\n return Number(recordValue) === Number(filterValue);\n case \"boolean\":\n return Boolean(recordValue) === Boolean(filterValue);\n case \"select\":\n return String(recordValue) === String(filterValue);\n default:\n return String(recordValue).includes(String(filterValue));\n }\n });\n });\n }, [searchFilteredData, columnFilters, filterable, filters]);\n\n // Apply sorting\n const sortedData = useMemo(() => {\n if (!sortColumn) {\n return filterFilteredData;\n }\n\n const sorted = [...filterFilteredData];\n const column = columns.find((col) => col.key === sortColumn);\n\n if (!column || !column.sortable) {\n return sorted;\n }\n\n sorted.sort((a, b) => {\n const aValue = column.dataIndex\n ? a[column.dataIndex]\n : (a as Record<string, unknown>)[column.key];\n const bValue = column.dataIndex\n ? b[column.dataIndex]\n : (b as Record<string, unknown>)[column.key];\n\n // Handle null/undefined\n if (aValue === null || aValue === undefined) return 1;\n if (bValue === null || bValue === undefined) return -1;\n\n // Compare values\n let comparison = 0;\n if (typeof aValue === \"number\" && typeof bValue === \"number\") {\n comparison = aValue - bValue;\n } else {\n comparison = String(aValue).localeCompare(String(bValue));\n }\n\n return sortDirection === \"asc\" ? comparison : -comparison;\n });\n\n return sorted;\n }, [filterFilteredData, sortColumn, sortDirection, columns]);\n\n // Apply pagination\n // In controlled mode with server-side pagination, use provided data directly\n // In uncontrolled mode, slice the data client-side\n const paginatedData = useMemo(() => {\n if (!showPagination) {\n return sortedData;\n }\n\n // If in controlled pagination mode with totalItems, assume data is already paginated\n if (isControlledPagination && totalItems !== undefined) {\n return sortedData; // Data is already paginated server-side\n }\n\n // Client-side pagination\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n\n return sortedData.slice(startIndex, endIndex);\n }, [\n sortedData,\n currentPage,\n pageSize,\n showPagination,\n isControlledPagination,\n totalItems,\n ]);\n\n // Calculate total pages for pagination display\n // Note: Currently not used but kept for future pagination UI enhancements\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _totalPages = useMemo(() => {\n if (!showPagination) return 1;\n if (isControlledPagination && totalItems !== undefined) {\n return Math.ceil(totalItems / pageSize);\n }\n return Math.ceil(sortedData.length / pageSize);\n }, [\n showPagination,\n isControlledPagination,\n totalItems,\n pageSize,\n sortedData.length,\n ]);\n\n // Callbacks\n const handleSearch = useCallback(\n (value: string) => {\n setSearchTerm(value);\n if (!isControlledPagination) {\n setCurrentPage(1); // Reset to first page on search (only in uncontrolled mode)\n }\n },\n [setSearchTerm, setCurrentPage, isControlledPagination],\n );\n\n const handleFilterChange = useCallback(\n (key: string, value: unknown) => {\n const newFilters = {\n ...columnFilters,\n [key]: value,\n };\n setColumnFilters(newFilters);\n if (!isControlledPagination) {\n setCurrentPage(1); // Reset to first page on filter (only in uncontrolled mode)\n }\n },\n [columnFilters, setColumnFilters, setCurrentPage, isControlledPagination],\n );\n\n const handleSort = useCallback(\n (column: TableColumn<T>, direction: \"asc\" | \"desc\") => {\n setSortColumn(column.key);\n setSortDirection(direction);\n },\n [setSortColumn, setSortDirection],\n );\n\n const handlePageChange = useCallback(\n (page: number, newPageSize: number) => {\n setCurrentPage(page);\n if (newPageSize !== pageSize) {\n setPageSize(newPageSize);\n setCurrentPage(1); // Reset to first page when page size changes\n }\n },\n [pageSize, setCurrentPage, setPageSize],\n );\n\n // Notify callbacks\n React.useEffect(() => {\n if (onSearch) {\n onSearch(searchTerm, searchFilteredData);\n }\n }, [searchTerm, searchFilteredData, onSearch]);\n\n React.useEffect(() => {\n if (onFilter) {\n onFilter(columnFilters, filterFilteredData);\n }\n }, [columnFilters, filterFilteredData, onFilter]);\n\n return (\n <div className=\"w-full\">\n {/* Search and Filter Bar */}\n {(showSearch || (showFilters && filterable && filters.length > 0)) && (\n <div className={cn(filterBarVariants(), filterBarClassName)}>\n {/* Search */}\n {showSearch && searchable && (\n <div className={cn(\"flex-1 min-w-[200px]\", searchBarClassName)}>\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchTerm}\n onChange={(e) => handleSearch(e.target.value)}\n className=\"w-full\"\n aria-label=\"Search table\"\n />\n </div>\n )}\n\n {/* Column Filters */}\n {showFilters && filterable && filters.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {filters.map((filter) => {\n const filterValue = columnFilters[filter.key];\n\n if (filter.type === \"select\" && filter.options) {\n return (\n <select\n key={filter.key}\n value={String(filterValue || \"\")}\n onChange={(e) =>\n handleFilterChange(\n filter.key,\n e.target.value || undefined,\n )\n }\n className=\"rounded-md border border-input px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring focus:border-primary\"\n aria-label={`Filter by ${filter.key}`}\n >\n <option value=\"\">All {filter.key}</option>\n {filter.options.map((option) => (\n <option key={option.value} value={String(option.value)}>\n {option.label}\n </option>\n ))}\n </select>\n );\n }\n\n return (\n <Input\n key={filter.key}\n type={filter.type === \"number\" ? \"number\" : \"text\"}\n placeholder={\n filter.placeholder || `Filter ${filter.key}...`\n }\n value={String(filterValue || \"\")}\n onChange={(e) =>\n handleFilterChange(\n filter.key,\n filter.type === \"number\"\n ? Number(e.target.value)\n : e.target.value,\n )\n }\n className=\"min-w-[150px]\"\n aria-label={`Filter by ${filter.key}`}\n />\n );\n })}\n\n {/* Clear Filters */}\n {Object.keys(columnFilters).length > 0 && (\n <button\n type=\"button\"\n onClick={() => setColumnFilters({})}\n className=\"px-3 py-2 text-sm text-muted-foreground hover:text-foreground underline\"\n aria-label=\"Clear all filters\"\n >\n Clear filters\n </button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Table */}\n <Table\n {...tableProps}\n data={paginatedData}\n columns={columns}\n rowKey={rowKey}\n emptyText={emptyText}\n {...(sortColumn && {\n sortColumn,\n sortDirection,\n })}\n onSort={handleSort}\n {...(showPagination && {\n pagination: {\n current: currentPage,\n pageSize: pageSize,\n total:\n isControlledPagination && totalItems !== undefined\n ? totalItems\n : sortedData.length,\n onChange: handlePageChange,\n showSizeChanger: true,\n },\n })}\n />\n\n {/* Results Summary */}\n {showPagination &&\n (isControlledPagination && totalItems !== undefined\n ? totalItems > 0\n : sortedData.length > 0) && (\n <div className=\"mt-2 px-4 py-2 text-sm text-muted-foreground\">\n {isControlledPagination && totalItems !== undefined ? (\n <>\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\n {Math.min(currentPage * pageSize, totalItems)} of {totalItems}{\" \"}\n results\n {searchTerm && \" (filtered)\"}\n </>\n ) : (\n <>\n Showing {(currentPage - 1) * pageSize + 1} to{\" \"}\n {Math.min(currentPage * pageSize, sortedData.length)} of{\" \"}\n {sortedData.length} results\n {searchTerm && ` (filtered from ${initialData.length} total)`}\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n\nDataTable.displayName = \"DataTable\";\n\n// Memoize DataTable for performance optimization\n// DataTable is a complex component with filtering, sorting, and pagination\nexport const DataTableMemoized = memo(DataTable) as typeof DataTable;\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var n=require('react');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var n__namespace=/*#__PURE__*/_interopNamespace(n);function p(r,o={}){let{enabled:e=typeof window<"u"&&window.location?.hostname==="localhost",logToConsole:t=true,onMetric:a,threshold:i=0}=o,c=n__namespace.useRef(0),u=n__namespace.useId(),m=n__namespace.useRef(`${r}-render-${u}`);return n__namespace.useEffect(()=>{if(!e||typeof window>"u"||!window.performance)return;c.current+=1;let s=`${m.current}-${c.current}`;return performance.mark(`${s}-start`),()=>{performance.mark(`${s}-end`);try{performance.measure(`${s}-measure`,`${s}-start`,`${s}-end`);let f=performance.getEntriesByName(`${s}-measure`)[0],l=f?f.duration:0;if(performance.clearMarks(`${s}-start`),performance.clearMarks(`${s}-end`),performance.clearMeasures(`${s}-measure`),l>i){let d={renderTime:l,componentName:r,timestamp:Date.now()};a?.(d);}}catch{}}}),{renderCount:c.current,isMonitoring:e}}function w(r,o,e){let t=n__namespace.forwardRef((a,i)=>{let c=o||r.displayName||r.name||"Unknown";p(c,e);let u=n__namespace.useCallback(m=>{typeof i=="function"?i(m):i&&"current"in i&&(i.current=m);},[i]);return n__namespace.createElement(r,{...a,ref:u})});return t.displayName=`withPerformanceMonitoring(${r.displayName||r.name})`,t}function T(){let[r,o]=n__namespace.useState(null);return n__namespace.useEffect(()=>{if(typeof window>"u"||window.location?.hostname!=="localhost"||typeof window>"u"||!("memory"in performance))return;let e=()=>{let a=performance.memory;a&&o({usedJSHeapSize:a.usedJSHeapSize,totalJSHeapSize:a.totalJSHeapSize,jsHeapSizeLimit:a.jsHeapSizeLimit});};e();let t=setInterval(e,5e3);return ()=>clearInterval(t)},[]),r}var b={debounce:(r,o)=>{let e;return (...t)=>{clearTimeout(e),e=setTimeout(()=>r(...t),o);}},throttle:(r,o)=>{let e;return (...t)=>{e||(r(...t),e=true,setTimeout(()=>e=false,o));}},memoize:r=>{let o=new Map;return((...e)=>{let t=JSON.stringify(e);if(o.has(t))return o.get(t);let a=r(...e);return o.set(t,a),a})}};exports.a=p;exports.b=w;exports.c=T;exports.d=b;//# sourceMappingURL=chunk-7WEIVLG3.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-7WEIVLG3.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/performance.ts"],"names":["usePerformanceMonitor","componentName","options","enabled","logToConsole","onMetric","threshold","renderCount","n","instanceId","markName","currentMark","measure","renderTime","metric","withPerformanceMonitoring","Component","WrappedComponent","props","ref","name","refCallback","instance","useMemoryMonitor","memoryInfo","setMemoryInfo","updateMemoryInfo","memory","interval","performanceUtils","func","wait","timeout","args","limit","inThrottle","fn","cache","key","result"],"mappings":"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","file":"chunk-7WEIVLG3.cjs","sourcesContent":["import * as React from \"react\";\n\ninterface PerformanceMetrics {\n renderTime: number;\n componentName: string;\n timestamp: number;\n}\n\ninterface PerformanceOptions {\n enabled?: boolean;\n logToConsole?: boolean;\n onMetric?: (metric: PerformanceMetrics) => void;\n threshold?: number; // Log only if render time exceeds threshold (ms)\n}\n\n/**\n * Hook for monitoring component render performance\n * Measures actual render/commit time using React's performance API\n */\nexport function usePerformanceMonitor(\n componentName: string,\n options: PerformanceOptions = {},\n) {\n const {\n enabled = typeof window !== \"undefined\" &&\n window.location?.hostname === \"localhost\",\n logToConsole = true,\n onMetric,\n threshold = 0,\n } = options;\n\n const renderCount = React.useRef<number>(0);\n // The mark name only needs to be unique per mounted instance. useId gives\n // that without calling Date.now() during render, which is impure and flagged\n // by react-hooks 7.1+ (components must be idempotent).\n const instanceId = React.useId();\n const markName = React.useRef<string>(\n `${componentName}-render-${instanceId}`,\n );\n\n React.useEffect(() => {\n if (!enabled || typeof window === \"undefined\" || !window.performance)\n return;\n\n renderCount.current += 1;\n const currentMark = `${markName.current}-${renderCount.current}`;\n\n // Mark start of render\n performance.mark(`${currentMark}-start`);\n\n return () => {\n // Mark end of render\n performance.mark(`${currentMark}-end`);\n\n try {\n // Measure the time between marks\n performance.measure(\n `${currentMark}-measure`,\n `${currentMark}-start`,\n `${currentMark}-end`,\n );\n\n const measure = performance.getEntriesByName(\n `${currentMark}-measure`,\n )[0];\n const renderTime = measure ? measure.duration : 0;\n\n // Clean up marks and measures\n performance.clearMarks(`${currentMark}-start`);\n performance.clearMarks(`${currentMark}-end`);\n performance.clearMeasures(`${currentMark}-measure`);\n\n if (renderTime > threshold) {\n const metric: PerformanceMetrics = {\n renderTime,\n componentName,\n timestamp: Date.now(),\n };\n\n if (logToConsole) {\n console.log(\n `[Performance] ${componentName}: ${renderTime.toFixed(2)}ms (render #${renderCount.current})`,\n );\n }\n\n onMetric?.(metric);\n }\n } catch (error) {\n // Silently fail if performance API is not available\n if (logToConsole && enabled) {\n console.warn(\n `[Performance] Failed to measure ${componentName}:`,\n error,\n );\n }\n }\n };\n });\n\n return {\n // eslint-disable-next-line react-hooks/refs -- informational only: the count is for dev logging, and being one render behind is acceptable there\n renderCount: renderCount.current,\n isMonitoring: enabled,\n };\n}\n\n/**\n * Higher-order component for performance monitoring\n */\nexport function withPerformanceMonitoring<P extends object>(\n Component: React.ComponentType<P>,\n componentName?: string,\n options?: PerformanceOptions,\n) {\n const WrappedComponent = React.forwardRef<unknown, P>((props, ref) => {\n const name =\n componentName || Component.displayName || Component.name || \"Unknown\";\n usePerformanceMonitor(name, options);\n\n // Use callback ref to avoid accessing ref.current during render\n const refCallback = React.useCallback(\n (instance: unknown) => {\n if (typeof ref === \"function\") {\n ref(instance);\n } else if (ref && \"current\" in ref) {\n (ref as React.MutableRefObject<unknown>).current = instance;\n }\n },\n [ref],\n );\n\n // eslint-disable-next-line react-hooks/refs -- the ref is forwarded as a prop, not dereferenced during render\n return React.createElement(Component, {\n ...(props as P),\n ref: refCallback,\n } as P & { ref?: React.Ref<unknown> });\n });\n\n WrappedComponent.displayName = `withPerformanceMonitoring(${Component.displayName || Component.name})`;\n\n return WrappedComponent;\n}\n\n/**\n * Hook for monitoring memory usage (development only)\n */\nexport function useMemoryMonitor() {\n const [memoryInfo, setMemoryInfo] = React.useState<{\n usedJSHeapSize: number;\n totalJSHeapSize: number;\n jsHeapSizeLimit: number;\n } | null>(null);\n\n React.useEffect(() => {\n if (\n typeof window === \"undefined\" ||\n window.location?.hostname !== \"localhost\"\n )\n return;\n if (typeof window === \"undefined\" || !(\"memory\" in performance)) return;\n\n const updateMemoryInfo = () => {\n const memory = (\n performance as Performance & {\n memory?: {\n usedJSHeapSize: number;\n totalJSHeapSize: number;\n jsHeapSizeLimit: number;\n };\n }\n ).memory;\n if (memory) {\n setMemoryInfo({\n usedJSHeapSize: memory.usedJSHeapSize,\n totalJSHeapSize: memory.totalJSHeapSize,\n jsHeapSizeLimit: memory.jsHeapSizeLimit,\n });\n }\n };\n\n updateMemoryInfo();\n const interval = setInterval(updateMemoryInfo, 5000);\n\n return () => clearInterval(interval);\n }, []);\n\n return memoryInfo;\n}\n\n/**\n * Performance optimization utilities\n */\nexport const performanceUtils = {\n /**\n * Debounce function for performance optimization\n */\n debounce: <T extends (...args: unknown[]) => unknown>(\n func: T,\n wait: number,\n ): ((...args: Parameters<T>) => void) => {\n let timeout: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n },\n\n /**\n * Throttle function for performance optimization\n */\n throttle: <T extends (...args: unknown[]) => unknown>(\n func: T,\n limit: number,\n ): ((...args: Parameters<T>) => void) => {\n let inThrottle: boolean;\n return (...args: Parameters<T>) => {\n if (!inThrottle) {\n func(...args);\n inThrottle = true;\n setTimeout(() => (inThrottle = false), limit);\n }\n };\n },\n\n /**\n * Memoize expensive calculations\n */\n memoize: <T extends (...args: unknown[]) => unknown>(fn: T): T => {\n const cache = new Map();\n return ((...args: Parameters<T>) => {\n const key = JSON.stringify(args);\n if (cache.has(key)) {\n return cache.get(key);\n }\n const result = fn(...args);\n cache.set(key, result);\n return result;\n }) as T;\n },\n};\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),e=require('react'),classVarianceAuthority=require('class-variance-authority');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var e__namespace=/*#__PURE__*/_interopNamespace(e);var x=classVarianceAuthority.cva("text-sm transition-all duration-200",{variants:{variant:{default:"text-muted-foreground",error:"text-destructive",success:"text-success-600",warning:"text-warning-600",info:"text-info-600"},size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{variant:"default",size:"default"}}),l=e__namespace.forwardRef(({className:r,variant:a,size:s,...i},n)=>e__namespace.createElement("div",{ref:n,className:chunkITRGJNWL_cjs.a(x({variant:a,size:s}),r),...i}));l.displayName="HelperText";exports.a=x;exports.b=l;//# sourceMappingURL=chunk-7YFUAGIW.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-7YFUAGIW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/core/helper-text.tsx"],"names":["helperTextVariants","cva","HelperText","e","className","variant","size","props","ref","cn"],"mappings":"ufAIA,IAAMA,CAAAA,CAAqBC,0BAAAA,CACzB,qCAAA,CACA,CACE,QAAA,CAAU,CACR,QAAS,CACP,OAAA,CAAS,wBACT,KAAA,CAAO,kBAAA,CACP,OAAA,CAAS,kBAAA,CACT,QAAS,kBAAA,CACT,IAAA,CAAM,eACR,CAAA,CACA,KAAM,CACJ,EAAA,CAAI,SAAA,CACJ,OAAA,CAAS,UACT,EAAA,CAAI,WACN,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SAAA,CACT,IAAA,CAAM,SACR,CACF,CACF,CAAA,CAMMC,CAAAA,CAAmBC,YAAA,CAAA,UAAA,CACvB,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,OAAA,CAAAC,EAAS,IAAA,CAAAC,CAAAA,CAAM,GAAGC,CAAM,CAAA,CAAGC,IACvCL,YAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKK,CAAAA,CACL,UAAWC,mBAAAA,CAAGT,CAAAA,CAAmB,CAAE,OAAA,CAAAK,EAAS,IAAA,CAAAC,CAAK,CAAC,CAAA,CAAGF,CAAS,CAAA,CAC7D,GAAGG,EACN,CAEJ,EACAL,EAAW,WAAA,CAAc,YAAA","file":"chunk-7YFUAGIW.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\nconst helperTextVariants = cva(\n 'text-sm transition-all duration-200',\n {\n variants: {\n variant: {\n default: 'text-muted-foreground',\n error: 'text-destructive',\n success: 'text-success-600',\n warning: 'text-warning-600',\n info: 'text-info-600',\n },\n size: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface HelperTextProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof helperTextVariants> {}\n\nconst HelperText = React.forwardRef<HTMLDivElement, HelperTextProps>(\n ({ className, variant, size, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(helperTextVariants({ variant, size }), className)}\n {...props}\n />\n )\n);\nHelperText.displayName = 'HelperText';\n\nexport { HelperText, helperTextVariants };\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a}from'./chunk-AC2JBXHQ.js';import*as e from'react';import {cva}from'class-variance-authority';var x=cva("text-sm transition-all duration-200",{variants:{variant:{default:"text-muted-foreground",error:"text-destructive",success:"text-success-600",warning:"text-warning-600",info:"text-info-600"},size:{sm:"text-xs",default:"text-sm",lg:"text-base"}},defaultVariants:{variant:"default",size:"default"}}),l=e.forwardRef(({className:r,variant:a$1,size:s,...i},n)=>e.createElement("div",{ref:n,className:a(x({variant:a$1,size:s}),r),...i}));l.displayName="HelperText";export{x as a,l as b};//# sourceMappingURL=chunk-ABA7B5DE.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-ABA7B5DE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/core/helper-text.tsx"],"names":["helperTextVariants","cva","HelperText","className","variant","size","props","ref","cn"],"mappings":"uGAIA,IAAMA,CAAAA,CAAqBC,GAAAA,CACzB,qCAAA,CACA,CACE,QAAA,CAAU,CACR,QAAS,CACP,OAAA,CAAS,wBACT,KAAA,CAAO,kBAAA,CACP,OAAA,CAAS,kBAAA,CACT,QAAS,kBAAA,CACT,IAAA,CAAM,eACR,CAAA,CACA,KAAM,CACJ,EAAA,CAAI,SAAA,CACJ,OAAA,CAAS,UACT,EAAA,CAAI,WACN,CACF,CAAA,CACA,eAAA,CAAiB,CACf,OAAA,CAAS,SAAA,CACT,IAAA,CAAM,SACR,CACF,CACF,CAAA,CAMMC,CAAAA,CAAmB,CAAA,CAAA,UAAA,CACvB,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,OAAA,CAAAC,IAAS,IAAA,CAAAC,CAAAA,CAAM,GAAGC,CAAM,CAAA,CAAGC,IACvC,CAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKA,CAAAA,CACL,UAAWC,CAAAA,CAAGR,CAAAA,CAAmB,CAAE,OAAA,CAAAI,IAAS,IAAA,CAAAC,CAAK,CAAC,CAAA,CAAGF,CAAS,CAAA,CAC7D,GAAGG,EACN,CAEJ,EACAJ,EAAW,WAAA,CAAc,YAAA","file":"chunk-ABA7B5DE.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\nconst helperTextVariants = cva(\n 'text-sm transition-all duration-200',\n {\n variants: {\n variant: {\n default: 'text-muted-foreground',\n error: 'text-destructive',\n success: 'text-success-600',\n warning: 'text-warning-600',\n info: 'text-info-600',\n },\n size: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface HelperTextProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof helperTextVariants> {}\n\nconst HelperText = React.forwardRef<HTMLDivElement, HelperTextProps>(\n ({ className, variant, size, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(helperTextVariants({ variant, size }), className)}\n {...props}\n />\n )\n);\nHelperText.displayName = 'HelperText';\n\nexport { HelperText, helperTextVariants };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts"],"names":["cn","inputs","twMerge","clsx"],"mappings":"6DAGO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAsB,CAC1C,OAAOC,OAAAA,CAAQC,IAAAA,CAAKF,CAAM,CAAC,CAC7B","file":"chunk-AC2JBXHQ.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a as a$1}from'./chunk-COXN6XBA.js';import {a}from'./chunk-AC2JBXHQ.js';import*as e from'react';import {cva}from'class-variance-authority';import {X,Info,XCircle,Warning,CheckCircle}from'phosphor-react';var M=cva("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",{variants:{variant:{default:"bg-background text-foreground border-border",success:"bg-success-50 text-success-900 border-success-200 [&>svg]:text-success-600",warning:"bg-warning-50 text-warning-900 border-warning-200 [&>svg]:text-warning-600",error:"bg-error-50 text-error-900 border-error-200 [&>svg]:text-error-600",info:"bg-info-50 text-info-900 border-info-200 [&>svg]:text-info-600"},size:{sm:"p-3 text-sm [&>svg]:h-4 [&>svg]:w-4",default:"p-4 text-sm [&>svg]:h-5 [&>svg]:w-5",lg:"p-6 text-base [&>svg]:h-6 [&>svg]:w-6"}},defaultVariants:{variant:"default",size:"default"}}),d=cva("mb-1 font-medium leading-none tracking-tight"),g=cva("text-sm [&_p]:leading-relaxed"),C=cva("absolute right-2 top-2 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",{variants:{size:{sm:"h-6 w-6",default:"h-7 w-7",lg:"h-8 w-8"}},defaultVariants:{size:"default"}}),u=e.forwardRef(({className:a$1,variant:r,size:s,title:o,description:l,dismissible:b=false,onDismiss:n,icon:c,children:w,...h},x)=>{let[A,N]=e.useState(true),T=e.useCallback(()=>{N(false),n&&n();},[n]),R=()=>{switch(r){case "success":return e.createElement(CheckCircle,{className:"h-5 w-5"});case "warning":return e.createElement(Warning,{className:"h-5 w-5"});case "error":return e.createElement(XCircle,{className:"h-5 w-5"});case "info":return e.createElement(Info,{className:"h-5 w-5"});default:return null}};return A?e.createElement("div",{ref:x,role:"alert",className:a(M({variant:r,size:s}),a$1),...h},c!==null&&(c||R()),b&&e.createElement("button",{type:"button",className:a(C({size:s})),onClick:T,"aria-label":"Dismiss alert"},e.createElement(X,{className:"h-4 w-4"})),o&&e.createElement("div",{className:a(d())},o),l&&e.createElement("div",{className:a(g())},l),w):null});u.displayName="Alert";var m=e.forwardRef(({className:a$1,...r},s)=>e.createElement("h5",{ref:s,className:a(d(),a$1),...r}));m.displayName="AlertTitle";var p=e.forwardRef(({className:a$1,...r},s)=>e.createElement("div",{ref:s,className:a(g(),a$1),...r}));p.displayName="AlertDescription";var v=a$1(u);v.Title=m;v.Description=p;export{M as a,d as b,g as c,C as d,m as e,p as f,v as g};//# sourceMappingURL=chunk-AHRTNKXE.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-AHRTNKXE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/core/alert.tsx"],"names":["alertVariants","cva","alertTitleVariants","alertDescriptionVariants","alertCloseVariants","AlertComponent","className","variant","size","title","description","dismissible","onDismiss","icon","children","props","ref","isVisible","setIsVisible","handleDismiss","getDefaultIcon","CheckCircle","Warning","XCircle","Info","cn","X","AlertTitle","AlertDescription","Alert","memo"],"mappings":"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","file":"chunk-AHRTNKXE.js","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\nimport { X, CheckCircle, Warning, Info, XCircle } from \"phosphor-react\";\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground\",\n {\n variants: {\n variant: {\n default: \"bg-background text-foreground border-border\",\n success:\n \"bg-success-50 text-success-900 border-success-200 [&>svg]:text-success-600\",\n warning:\n \"bg-warning-50 text-warning-900 border-warning-200 [&>svg]:text-warning-600\",\n error:\n \"bg-error-50 text-error-900 border-error-200 [&>svg]:text-error-600\",\n info: \"bg-info-50 text-info-900 border-info-200 [&>svg]:text-info-600\",\n },\n size: {\n sm: \"p-3 text-sm [&>svg]:h-4 [&>svg]:w-4\",\n default: \"p-4 text-sm [&>svg]:h-5 [&>svg]:w-5\",\n lg: \"p-6 text-base [&>svg]:h-6 [&>svg]:w-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nconst alertTitleVariants = cva(\"mb-1 font-medium leading-none tracking-tight\");\n\nconst alertDescriptionVariants = cva(\"text-sm [&_p]:leading-relaxed\");\n\nconst alertCloseVariants = cva(\n \"absolute right-2 top-2 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\",\n {\n variants: {\n size: {\n sm: \"h-6 w-6\",\n default: \"h-7 w-7\",\n lg: \"h-8 w-8\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n },\n);\n\nexport interface AlertProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof alertVariants> {\n title?: string;\n description?: string;\n dismissible?: boolean;\n onDismiss?: () => void;\n icon?: React.ReactNode;\n}\n\nconst AlertComponent = React.forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n className,\n variant,\n size,\n title,\n description,\n dismissible = false,\n onDismiss,\n icon,\n children,\n ...props\n },\n ref,\n ) => {\n const [isVisible, setIsVisible] = React.useState(true);\n\n const handleDismiss = React.useCallback(() => {\n setIsVisible(false);\n if (onDismiss) {\n onDismiss();\n }\n }, [onDismiss]);\n\n const getDefaultIcon = () => {\n switch (variant) {\n case \"success\":\n return <CheckCircle className=\"h-5 w-5\" />;\n case \"warning\":\n return <Warning className=\"h-5 w-5\" />;\n case \"error\":\n return <XCircle className=\"h-5 w-5\" />;\n case \"info\":\n return <Info className=\"h-5 w-5\" />;\n default:\n return null;\n }\n };\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n role=\"alert\"\n className={cn(alertVariants({ variant, size }), className)}\n {...props}\n >\n {icon !== null && (icon || getDefaultIcon())}\n {dismissible && (\n <button\n type=\"button\"\n className={cn(alertCloseVariants({ size }))}\n onClick={handleDismiss}\n aria-label=\"Dismiss alert\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n {title && <div className={cn(alertTitleVariants())}>{title}</div>}\n {description && (\n <div className={cn(alertDescriptionVariants())}>{description}</div>\n )}\n {children}\n </div>\n );\n },\n);\nAlertComponent.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h5 ref={ref} className={cn(alertTitleVariants(), className)} {...props} />\n));\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(alertDescriptionVariants(), className)}\n {...props}\n />\n));\nAlertDescription.displayName = \"AlertDescription\";\n\n// Memoize Alert for performance optimization (after all subcomponents are defined)\nconst Alert = memo(AlertComponent) as typeof AlertComponent & {\n Title: typeof AlertTitle;\n Description: typeof AlertDescription;\n};\n\n// Attach subcomponents to Alert for compound component pattern\nAlert.Title = AlertTitle;\nAlert.Description = AlertDescription;\n\nexport {\n Alert,\n AlertTitle,\n AlertDescription,\n alertVariants,\n alertTitleVariants,\n alertDescriptionVariants,\n alertCloseVariants,\n};\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {a as a$1}from'./chunk-COXN6XBA.js';import {a}from'./chunk-AC2JBXHQ.js';import*as e from'react';import {Slot,Slottable}from'@radix-ui/react-slot';import {cva}from'class-variance-authority';var C=cva("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:["bg-primary text-primary-foreground shadow-md hover:bg-primary/90 hover:shadow-lg","active:scale-[0.98] active:shadow-sm","border border-primary/20"],secondary:["bg-secondary text-secondary-foreground border border-border","hover:bg-secondary/80 hover:border-border hover:shadow-sm","active:scale-[0.98]"],outline:["border-2 border-border bg-transparent text-foreground","hover:bg-muted hover:border-primary hover:text-primary","focus-visible:ring-ring/20 focus-visible:border-primary","active:scale-[0.98]"],ghost:["text-foreground hover:bg-muted hover:text-foreground","active:bg-muted/80 active:scale-[0.98]"],destructive:["bg-destructive text-destructive-foreground shadow-md hover:bg-destructive/90 hover:shadow-lg","active:scale-[0.98] active:shadow-sm","border border-destructive/20"],subtle:["bg-muted text-muted-foreground border border-border","hover:bg-muted/80 hover:border-border","active:scale-[0.98]"],link:"text-primary underline-offset-4 hover:underline"},size:{sm:"h-8 px-3 text-xs rounded-sm",default:"h-10 px-4 text-sm rounded-md",lg:"h-11 px-6 text-base rounded-lg",xl:"h-12 px-8 text-lg rounded-lg",icon:"h-10 w-10 rounded-md"},state:{default:"",loading:"cursor-wait",success:"bg-success hover:bg-success-600 text-success-foreground",error:"bg-destructive hover:bg-destructive/90 text-destructive-foreground"}},defaultVariants:{variant:"default",size:"default",state:"default"}}),c=e.forwardRef(({className:u,variant:l,size:m,state:b="default",loading:t=false,loadingText:s,asChild:a$1=false,children:r,disabled:v,...f},g)=>{let p=a$1?Slot:"button",n=v||t,h=t?"loading":b,o=t&&s?s:r,x=a$1&&o!==r&&e.isValidElement(r)?e.cloneElement(r,void 0,o):o;return e.createElement(p,{className:a(C({variant:l,size:m,state:h,className:u})),ref:g,disabled:n,"aria-disabled":n,...f},t&&e.createElement("svg",{className:"mr-2 h-4 w-4 animate-spin",xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","aria-hidden":"true"},e.createElement("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.createElement("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})),e.createElement(Slottable,null,x))});c.displayName="Button";var E=a$1(c);
|
|
2
|
+
export{C as a,E as b};//# sourceMappingURL=chunk-AVTJE2O2.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-AVTJE2O2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/core/button.tsx"],"names":["buttonVariants","cva","ButtonComponent","className","variant","size","state","loading","loadingText","asChild","children","disabled","props","ref","Component","Slot","isDisabled","finalState","label","slotted","cn","Slottable","Button","memo"],"mappings":"wMAMMA,CAAAA,CAAiBC,GAAAA,CAErB,2QAAA,CACA,CACE,QAAA,CAAU,CACR,OAAA,CAAS,CAEP,OAAA,CAAS,CACP,kFAAA,CACA,sCAAA,CACA,0BACF,CAAA,CAEA,UAAW,CACT,6DAAA,CACA,2DAAA,CACA,qBACF,CAAA,CAEA,OAAA,CAAS,CACP,uDAAA,CACA,wDAAA,CACA,yDAAA,CACA,qBACF,CAAA,CAEA,KAAA,CAAO,CACL,uDACA,wCACF,CAAA,CAEA,WAAA,CAAa,CACX,8FAAA,CACA,sCAAA,CACA,8BACF,CAAA,CAEA,MAAA,CAAQ,CACN,qDAAA,CACA,uCAAA,CACA,qBACF,CAAA,CAEA,KAAM,iDACR,CAAA,CACA,IAAA,CAAM,CAEJ,EAAA,CAAI,6BAAA,CACJ,OAAA,CAAS,8BAAA,CACT,EAAA,CAAI,gCAAA,CACJ,EAAA,CAAI,8BAAA,CACJ,IAAA,CAAM,sBACR,EAEA,KAAA,CAAO,CACL,OAAA,CAAS,EAAA,CACT,OAAA,CAAS,aAAA,CACT,OAAA,CAAS,yDAAA,CACT,KAAA,CACE,oEACJ,CACF,CAAA,CACA,eAAA,CAAiB,CACf,QAAS,SAAA,CACT,IAAA,CAAM,SAAA,CACN,KAAA,CAAO,SACT,CACF,CACF,CAAA,CAgCMC,CAAAA,CAAwB,CAAA,CAAA,UAAA,CAC5B,CACE,CACE,SAAA,CAAAC,CAAAA,CACA,QAAAC,CAAAA,CACA,IAAA,CAAAC,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,SAAA,CACR,OAAA,CAAAC,CAAAA,CAAU,KAAA,CACV,WAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,GAAAA,CAAU,KAAA,CACV,SAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CACA,GAAGC,CACL,CAAA,CACAC,CAAAA,GACG,CACH,IAAMC,CAAAA,CAAYL,GAAAA,CAAUM,IAAAA,CAAO,QAAA,CAC7BC,CAAAA,CAAaL,GAAYJ,CAAAA,CAGzBU,CAAAA,CAAaV,CAAAA,CAAU,SAAA,CAAYD,CAAAA,CAEnCY,CAAAA,CAAQX,CAAAA,EAAWC,CAAAA,CAAcA,CAAAA,CAAcE,CAAAA,CAI/CS,CAAAA,CACJV,GAAAA,EAAWS,CAAAA,GAAUR,CAAAA,EAAkB,iBAAeA,CAAQ,CAAA,CACpD,CAAA,CAAA,YAAA,CAAaA,CAAAA,CAAU,MAAA,CAAWQ,CAAK,CAAA,CAC7CA,CAAAA,CAEN,OACE,CAAA,CAAA,aAAA,CAACJ,CAAAA,CAAA,CACC,SAAA,CAAWM,CAAAA,CACTpB,EAAe,CAAE,OAAA,CAAAI,CAAAA,CAAS,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAOY,CAAAA,CAAY,SAAA,CAAAd,CAAU,CAAC,CAChE,CAAA,CACA,GAAA,CAAKU,CAAAA,CACL,SAAUG,CAAAA,CACV,eAAA,CAAeA,CAAAA,CACd,GAAGJ,CAAAA,CAAAA,CAEHL,CAAAA,EACC,CAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CACC,SAAA,CAAU,2BAAA,CACV,KAAA,CAAM,4BAAA,CACN,IAAA,CAAK,MAAA,CACL,QAAQ,WAAA,CACR,aAAA,CAAY,MAAA,CAAA,CAEZ,CAAA,CAAA,aAAA,CAAC,QAAA,CAAA,CACC,SAAA,CAAU,YAAA,CACV,EAAA,CAAG,IAAA,CACH,EAAA,CAAG,IAAA,CACH,CAAA,CAAE,IAAA,CACF,MAAA,CAAO,eACP,WAAA,CAAY,GAAA,CACd,CAAA,CACA,CAAA,CAAA,aAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,YAAA,CACV,IAAA,CAAK,cAAA,CACL,CAAA,CAAE,iHAAA,CACJ,CACF,CAAA,CAKF,CAAA,CAAA,aAAA,CAACc,UAAA,IAAA,CAAWF,CAAQ,CACtB,CAEJ,CACF,EACAjB,CAAAA,CAAgB,WAAA,CAAc,QAAA,CAG9B,IAAMoB,CAAAA,CAASC,GAAAA,CAAKrB,CAAe","file":"chunk-AVTJE2O2.js","sourcesContent":["import * as React from \"react\";\nimport { Slot, Slottable } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\nimport { memo } from \"../../lib/memo\";\n\nconst buttonVariants = cva(\n // Base styles with improved spacing and transitions\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n // Enhanced default with better depth\n default: [\n \"bg-primary text-primary-foreground shadow-md hover:bg-primary/90 hover:shadow-lg\",\n \"active:scale-[0.98] active:shadow-sm\",\n \"border border-primary/20\",\n ],\n // Enhanced secondary with better contrast\n secondary: [\n \"bg-secondary text-secondary-foreground border border-border\",\n \"hover:bg-secondary/80 hover:border-border hover:shadow-sm\",\n \"active:scale-[0.98]\",\n ],\n // Enhanced outline with better focus\n outline: [\n \"border-2 border-border bg-transparent text-foreground\",\n \"hover:bg-muted hover:border-primary hover:text-primary\",\n \"focus-visible:ring-ring/20 focus-visible:border-primary\",\n \"active:scale-[0.98]\",\n ],\n // Enhanced ghost with better hover\n ghost: [\n \"text-foreground hover:bg-muted hover:text-foreground\",\n \"active:bg-muted/80 active:scale-[0.98]\",\n ],\n // Enhanced destructive with better feedback\n destructive: [\n \"bg-destructive text-destructive-foreground shadow-md hover:bg-destructive/90 hover:shadow-lg\",\n \"active:scale-[0.98] active:shadow-sm\",\n \"border border-destructive/20\",\n ],\n // Subtle variant for less prominent actions\n subtle: [\n \"bg-muted text-muted-foreground border border-border\",\n \"hover:bg-muted/80 hover:border-border\",\n \"active:scale-[0.98]\",\n ],\n // Link variant\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n // Improved spacing for consistency\n sm: \"h-8 px-3 text-xs rounded-sm\",\n default: \"h-10 px-4 text-sm rounded-md\",\n lg: \"h-11 px-6 text-base rounded-lg\",\n xl: \"h-12 px-8 text-lg rounded-lg\",\n icon: \"h-10 w-10 rounded-md\",\n },\n // State variants for better feedback\n state: {\n default: \"\",\n loading: \"cursor-wait\",\n success: \"bg-success hover:bg-success-600 text-success-foreground\",\n error:\n \"bg-destructive hover:bg-destructive/90 text-destructive-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n state: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n /**\n * Whether to render the button as a separate component (e.g. for Link)\n * @default false\n */\n asChild?: boolean;\n /**\n * Whether the button is in a loading state.\n * When true, automatically sets state to \"loading\" and shows a spinner.\n * @default false\n */\n loading?: boolean;\n /**\n * The loading text to display when loading is true.\n * If not provided, the button's children will be shown.\n * @default undefined\n */\n loadingText?: string;\n /**\n * The visual state of the button.\n * Note: If `loading` is true, this prop is ignored and state becomes \"loading\".\n * Use `state=\"success\"` or `state=\"error\"` for post-action feedback.\n * @default \"default\"\n */\n state?: \"default\" | \"loading\" | \"success\" | \"error\";\n}\n\nconst ButtonComponent = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n state = \"default\",\n loading = false,\n loadingText,\n asChild = false,\n children,\n disabled,\n ...props\n },\n ref,\n ) => {\n const Component = asChild ? Slot : \"button\";\n const isDisabled = disabled || loading;\n\n // Determine final state: loading prop takes precedence over state prop\n const finalState = loading ? \"loading\" : state;\n\n const label = loading && loadingText ? loadingText : children;\n // With `asChild` the caller's element is what actually renders, so\n // loadingText has to replace the content *inside* it - swapping the element\n // itself for a string would leave Slot with nothing to clone.\n const slotted =\n asChild && label !== children && React.isValidElement(children)\n ? React.cloneElement(children, undefined, label)\n : label;\n\n return (\n <Component\n className={cn(\n buttonVariants({ variant, size, state: finalState, className }),\n )}\n ref={ref}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n {...props}\n >\n {loading && (\n <svg\n className=\"mr-2 h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {/* Slottable marks the target element for `asChild`, so the spinner can\n sit alongside it. Without it, Slot sees more than one child (the\n falsy spinner expression counts too) and throws Children.only. */}\n <Slottable>{slotted}</Slottable>\n </Component>\n );\n },\n);\nButtonComponent.displayName = \"Button\";\n\n// Memoize Button for performance optimization\nconst Button = memo(ButtonComponent) as typeof ButtonComponent;\n\nexport { Button, buttonVariants };\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkITRGJNWL_cjs=require('./chunk-ITRGJNWL.cjs'),a=require('react'),classVarianceAuthority=require('class-variance-authority');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var a__namespace=/*#__PURE__*/_interopNamespace(a);var d=classVarianceAuthority.cva("shrink-0 bg-border",{variants:{orientation:{horizontal:"h-[1px] w-full",vertical:"h-full w-[1px]"},variant:{default:"bg-border",muted:"bg-muted",subtle:"bg-muted/50"},size:{default:"",sm:"h-px",lg:"h-0.5"}},defaultVariants:{orientation:"horizontal",variant:"default",size:"default"}}),f=a__namespace.forwardRef(({className:o,orientation:t="horizontal",variant:i="default",size:n="default",decorative:r=true,...l},s)=>a__namespace.createElement("div",{ref:s,role:r?"none":"separator",...r?{}:{"aria-orientation":t||void 0},className:chunkITRGJNWL_cjs.a(d({orientation:t,variant:i,size:n}),o),...l}));f.displayName="Separator";exports.a=d;exports.b=f;//# sourceMappingURL=chunk-B2BWBKZA.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-B2BWBKZA.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/core/separator.tsx"],"names":["separatorVariants","cva","Separator","a","className","orientation","variant","size","decorative","props","ref","cn"],"mappings":"ufAIA,IAAMA,CAAAA,CAAoBC,0BAAAA,CACxB,oBAAA,CACA,CACE,QAAA,CAAU,CACR,WAAA,CAAa,CACX,UAAA,CAAY,gBAAA,CACZ,QAAA,CAAU,gBACZ,EACA,OAAA,CAAS,CACP,OAAA,CAAS,WAAA,CACT,KAAA,CAAO,UAAA,CACP,OAAQ,aACV,CAAA,CACA,IAAA,CAAM,CACJ,OAAA,CAAS,EAAA,CACT,GAAI,MAAA,CACJ,EAAA,CAAI,OACN,CACF,CAAA,CACA,eAAA,CAAiB,CACf,WAAA,CAAa,YAAA,CACb,OAAA,CAAS,SAAA,CACT,IAAA,CAAM,SACR,CACF,CACF,CAAA,CASMC,CAAAA,CAAkBC,YAAA,CAAA,UAAA,CACtB,CACE,CACE,UAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CAAc,YAAA,CACd,OAAA,CAAAC,CAAAA,CAAU,UACV,IAAA,CAAAC,CAAAA,CAAO,SAAA,CACP,UAAA,CAAAC,CAAAA,CAAa,IAAA,CACb,GAAGC,CACL,CAAA,CACAC,CAAAA,GAGEP,YAAA,CAAA,aAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAKO,EACL,IAAA,CAAMF,CAAAA,CAAa,MAAA,CAAS,WAAA,CAC3B,GAAIA,CAAAA,CAAa,EAAC,CAAI,CAAE,kBAAA,CAAoBH,CAAAA,EAAe,MAAU,CAAA,CACtE,UAAWM,mBAAAA,CAAGX,CAAAA,CAAkB,CAAE,WAAA,CAAAK,CAAAA,CAAa,OAAA,CAAAC,EAAS,IAAA,CAAAC,CAAK,CAAC,CAAA,CAAGH,CAAS,CAAA,CACzE,GAAGK,CAAAA,CACN,CAGN,EACAP,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-B2BWBKZA.cjs","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst separatorVariants = cva(\n \"shrink-0 bg-border\",\n {\n variants: {\n orientation: {\n horizontal: \"h-[1px] w-full\",\n vertical: \"h-full w-[1px]\",\n },\n variant: {\n default: \"bg-border\",\n muted: \"bg-muted\",\n subtle: \"bg-muted/50\",\n },\n size: {\n default: \"\",\n sm: \"h-px\",\n lg: \"h-0.5\",\n },\n },\n defaultVariants: {\n orientation: \"horizontal\",\n variant: \"default\",\n size: \"default\",\n },\n }\n);\n\nexport interface SeparatorProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"aria-orientation\">,\n VariantProps<typeof separatorVariants> {\n decorative?: boolean;\n \"aria-orientation\"?: \"horizontal\" | \"vertical\";\n}\n\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n {\n className,\n orientation = \"horizontal\",\n variant = \"default\",\n size = \"default\",\n decorative = true,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n role={decorative ? \"none\" : \"separator\"}\n {...(decorative ? {} : { \"aria-orientation\": orientation || undefined })}\n className={cn(separatorVariants({ orientation, variant, size }), className)}\n {...props}\n />\n );\n }\n);\nSeparator.displayName = \"Separator\";\n\nexport { Separator, separatorVariants };\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkOZ3RIKZO_cjs=require('./chunk-OZ3RIKZO.cjs'),a=require('react');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var a__default=/*#__PURE__*/_interopDefault(a);var p=a__default.default.lazy(()=>import('./components/core/charts.cjs').then(t=>({default:t.Chart}))),s=({fallback:t=a__default.default.createElement(chunkOZ3RIKZO_cjs.b,{className:"h-64 w-full"}),...r})=>a__default.default.createElement(a.Suspense,{fallback:t},a__default.default.createElement(p,{...r}));s.displayName="LazyChart";exports.a=s;//# sourceMappingURL=chunk-BSUHBLZO.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-BSUHBLZO.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/core/charts-lazy.tsx"],"names":["ChartLazy","React","module","LazyChart","fallback","Skeleton","props","Suspense"],"mappings":"0MAwBMA,CAAAA,CAAYC,kBAAAA,CAAM,IAAA,CAAK,IAC3B,OAAO,8BAAU,EAAE,IAAA,CAAMC,CAAAA,GAAY,CACnC,OAAA,CAASA,CAAAA,CAAO,KAClB,EAAE,CACJ,CAAA,CAMaC,CAAAA,CAAsC,CAAC,CAClD,QAAA,CAAAC,EAAWH,kBAAAA,CAAA,aAAA,CAACI,mBAAAA,CAAA,CAAS,SAAA,CAAU,aAAA,CAAc,EAC7C,GAAGC,CACL,CAAA,GAEIL,kBAAAA,CAAA,aAAA,CAACM,UAAAA,CAAA,CAAS,QAAA,CAAUH,CAAAA,CAAAA,CAClBH,kBAAAA,CAAA,aAAA,CAACD,CAAAA,CAAA,CAAW,GAAGM,CAAAA,CAAO,CACxB,EAIJH,CAAAA,CAAU,WAAA,CAAc,WAAA","file":"chunk-BSUHBLZO.cjs","sourcesContent":["import React, { Suspense } from \"react\";\nimport { Skeleton } from \"./skeleton\";\n\n/**\n * Lazy-loaded Chart component wrapper\n * Use this for better code splitting when Charts are not immediately needed\n *\n * @example\n * ```tsx\n * import { LazyChart } from '@jarllyng/nostromo/components/core/charts-lazy';\n *\n * function Dashboard() {\n * return (\n * <LazyChart\n * type=\"line\"\n * data={data}\n * dataKeys={['sales', 'revenue']}\n * />\n * );\n * }\n * ```\n */\n\n// Dynamic import for Chart component with recharts\nconst ChartLazy = React.lazy(() =>\n import(\"./charts\").then((module) => ({\n default: module.Chart,\n })),\n);\n\nexport interface LazyChartProps extends React.ComponentProps<typeof ChartLazy> {\n fallback?: React.ReactNode;\n}\n\nexport const LazyChart: React.FC<LazyChartProps> = ({\n fallback = <Skeleton className=\"h-64 w-full\" />,\n ...props\n}) => {\n return (\n <Suspense fallback={fallback}>\n <ChartLazy {...props} />\n </Suspense>\n );\n};\n\nLazyChart.displayName = \"LazyChart\";\n"]}
|