@omnifyjp/ui 0.4.4 → 0.5.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/README.md +379 -133
- package/dist/chunk-2ZIFL2X3.js +189 -0
- package/dist/chunk-2ZIFL2X3.js.map +1 -0
- package/dist/chunk-5BL4VFRJ.js +57 -0
- package/dist/chunk-5BL4VFRJ.js.map +1 -0
- package/dist/chunk-5D3OAVOZ.js +91 -0
- package/dist/chunk-5D3OAVOZ.js.map +1 -0
- package/dist/chunk-DTM76EJD.js +235 -0
- package/dist/chunk-DTM76EJD.js.map +1 -0
- package/dist/chunk-EJEVW4RO.js +49 -0
- package/dist/chunk-EJEVW4RO.js.map +1 -0
- package/dist/chunk-JXFBHSPN.js +37 -0
- package/dist/chunk-JXFBHSPN.js.map +1 -0
- package/dist/chunk-O25D7DCP.js +72 -0
- package/dist/chunk-O25D7DCP.js.map +1 -0
- package/dist/chunk-OY3PSPA5.js +661 -0
- package/dist/chunk-OY3PSPA5.js.map +1 -0
- package/dist/chunk-SHHZRZMM.js +83 -0
- package/dist/chunk-SHHZRZMM.js.map +1 -0
- package/dist/chunk-X57K24P3.js +224 -0
- package/dist/chunk-X57K24P3.js.map +1 -0
- package/dist/chunk-XDXGUPCR.js +123 -0
- package/dist/chunk-XDXGUPCR.js.map +1 -0
- package/dist/components/AppShell.d.ts +27 -0
- package/dist/components/AppShell.js +11 -0
- package/dist/components/AppShell.js.map +1 -0
- package/dist/components/Header.d.ts +11 -0
- package/dist/components/Header.js +6 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/OrganizationSelector.d.ts +8 -0
- package/dist/components/OrganizationSelector.js +4 -0
- package/dist/components/OrganizationSelector.js.map +1 -0
- package/dist/components/OrganizationSetupModal.d.ts +5 -0
- package/dist/components/OrganizationSetupModal.js +4 -0
- package/dist/components/OrganizationSetupModal.js.map +1 -0
- package/dist/components/PageContainer.d.ts +105 -0
- package/dist/components/PageContainer.js +3 -0
- package/dist/components/PageContainer.js.map +1 -0
- package/dist/components/ServiceMenu.d.ts +11 -0
- package/dist/components/ServiceMenu.js +3 -0
- package/dist/components/ServiceMenu.js.map +1 -0
- package/dist/components/Sidebar.d.ts +11 -0
- package/dist/components/Sidebar.js +5 -0
- package/dist/components/Sidebar.js.map +1 -0
- package/dist/contexts/OrganizationContext.d.ts +26 -0
- package/dist/contexts/OrganizationContext.js +3 -0
- package/dist/contexts/OrganizationContext.js.map +1 -0
- package/dist/contexts/ThemeContext.d.ts +14 -0
- package/dist/contexts/ThemeContext.js +3 -0
- package/dist/contexts/ThemeContext.js.map +1 -0
- package/dist/hooks/useDateFormat.d.ts +28 -0
- package/dist/hooks/useDateFormat.js +4 -0
- package/dist/hooks/useDateFormat.js.map +1 -0
- package/dist/i18n.d.ts +38 -0
- package/dist/i18n.js +3 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +13 -109
- package/dist/index.js +11 -70
- package/dist/types.d.ts +89 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +23 -70
- package/dist/chunk-2C2HRGM7.js +0 -51
- package/dist/chunk-2C2HRGM7.js.map +0 -1
- package/dist/chunk-2TUWDXAC.js +0 -196
- package/dist/chunk-2TUWDXAC.js.map +0 -1
- package/dist/chunk-34ARZSNP.js +0 -63
- package/dist/chunk-34ARZSNP.js.map +0 -1
- package/dist/chunk-35DNN46W.js +0 -13
- package/dist/chunk-35DNN46W.js.map +0 -1
- package/dist/chunk-35U6QG4P.js +0 -116
- package/dist/chunk-35U6QG4P.js.map +0 -1
- package/dist/chunk-36YYHIJU.js +0 -52
- package/dist/chunk-36YYHIJU.js.map +0 -1
- package/dist/chunk-3EOHW4QN.js +0 -35
- package/dist/chunk-3EOHW4QN.js.map +0 -1
- package/dist/chunk-3UPBCOS4.js +0 -39
- package/dist/chunk-3UPBCOS4.js.map +0 -1
- package/dist/chunk-3VU56V66.js +0 -41
- package/dist/chunk-3VU56V66.js.map +0 -1
- package/dist/chunk-55E7D2HR.js +0 -99
- package/dist/chunk-55E7D2HR.js.map +0 -1
- package/dist/chunk-67YUL2ZS.js +0 -53
- package/dist/chunk-67YUL2ZS.js.map +0 -1
- package/dist/chunk-6DIDQ4TB.js +0 -131
- package/dist/chunk-6DIDQ4TB.js.map +0 -1
- package/dist/chunk-6GWVQB3Q.js +0 -155
- package/dist/chunk-6GWVQB3Q.js.map +0 -1
- package/dist/chunk-75WZR6HF.js +0 -44
- package/dist/chunk-75WZR6HF.js.map +0 -1
- package/dist/chunk-7IRLBU2I.js +0 -114
- package/dist/chunk-7IRLBU2I.js.map +0 -1
- package/dist/chunk-7RMTPT6O.js +0 -99
- package/dist/chunk-7RMTPT6O.js.map +0 -1
- package/dist/chunk-7XH3MGBR.js +0 -128
- package/dist/chunk-7XH3MGBR.js.map +0 -1
- package/dist/chunk-A3BB5ZOC.js +0 -77
- package/dist/chunk-A3BB5ZOC.js.map +0 -1
- package/dist/chunk-B434PORR.js +0 -239
- package/dist/chunk-B434PORR.js.map +0 -1
- package/dist/chunk-BAQWGQJG.js +0 -106
- package/dist/chunk-BAQWGQJG.js.map +0 -1
- package/dist/chunk-BRSM3SZP.js +0 -46
- package/dist/chunk-BRSM3SZP.js.map +0 -1
- package/dist/chunk-C34KSTWA.js +0 -43
- package/dist/chunk-C34KSTWA.js.map +0 -1
- package/dist/chunk-C5NZAOA7.js +0 -54
- package/dist/chunk-C5NZAOA7.js.map +0 -1
- package/dist/chunk-CUZR4JWM.js +0 -23
- package/dist/chunk-CUZR4JWM.js.map +0 -1
- package/dist/chunk-DGPY4WP3.js +0 -11
- package/dist/chunk-DGPY4WP3.js.map +0 -1
- package/dist/chunk-EWBCV7VA.js +0 -65
- package/dist/chunk-EWBCV7VA.js.map +0 -1
- package/dist/chunk-F2ZJLKDP.js +0 -119
- package/dist/chunk-F2ZJLKDP.js.map +0 -1
- package/dist/chunk-FLWMT4DB.js +0 -66
- package/dist/chunk-FLWMT4DB.js.map +0 -1
- package/dist/chunk-FRKG7JQY.js +0 -48
- package/dist/chunk-FRKG7JQY.js.map +0 -1
- package/dist/chunk-G7HTZBUR.js +0 -187
- package/dist/chunk-G7HTZBUR.js.map +0 -1
- package/dist/chunk-HWTW64R5.js +0 -90
- package/dist/chunk-HWTW64R5.js.map +0 -1
- package/dist/chunk-IAWKX5W4.js +0 -219
- package/dist/chunk-IAWKX5W4.js.map +0 -1
- package/dist/chunk-INLM7UJC.js +0 -238
- package/dist/chunk-INLM7UJC.js.map +0 -1
- package/dist/chunk-JAJMM32I.js +0 -18
- package/dist/chunk-JAJMM32I.js.map +0 -1
- package/dist/chunk-JJSVA3TH.js +0 -61
- package/dist/chunk-JJSVA3TH.js.map +0 -1
- package/dist/chunk-JLTBUACL.js +0 -121
- package/dist/chunk-JLTBUACL.js.map +0 -1
- package/dist/chunk-JRU2QX7T.js +0 -38
- package/dist/chunk-JRU2QX7T.js.map +0 -1
- package/dist/chunk-JXGRW2MR.js +0 -17
- package/dist/chunk-JXGRW2MR.js.map +0 -1
- package/dist/chunk-KTBOZ4NE.js +0 -93
- package/dist/chunk-KTBOZ4NE.js.map +0 -1
- package/dist/chunk-LMT327XH.js +0 -56
- package/dist/chunk-LMT327XH.js.map +0 -1
- package/dist/chunk-LTTNCAAA.js +0 -138
- package/dist/chunk-LTTNCAAA.js.map +0 -1
- package/dist/chunk-LVZNNIK4.js +0 -111
- package/dist/chunk-LVZNNIK4.js.map +0 -1
- package/dist/chunk-MJLFJPUG.js +0 -143
- package/dist/chunk-MJLFJPUG.js.map +0 -1
- package/dist/chunk-MZ2P566X.js +0 -65
- package/dist/chunk-MZ2P566X.js.map +0 -1
- package/dist/chunk-N47H4MHX.js +0 -41
- package/dist/chunk-N47H4MHX.js.map +0 -1
- package/dist/chunk-NNJTKHCE.js +0 -160
- package/dist/chunk-NNJTKHCE.js.map +0 -1
- package/dist/chunk-NPL2R5LD.js +0 -171
- package/dist/chunk-NPL2R5LD.js.map +0 -1
- package/dist/chunk-NU56GKGM.js +0 -44
- package/dist/chunk-NU56GKGM.js.map +0 -1
- package/dist/chunk-P3M5TZD2.js +0 -24
- package/dist/chunk-P3M5TZD2.js.map +0 -1
- package/dist/chunk-PGWNOZDX.js +0 -28
- package/dist/chunk-PGWNOZDX.js.map +0 -1
- package/dist/chunk-QB3UWRZH.js +0 -92
- package/dist/chunk-QB3UWRZH.js.map +0 -1
- package/dist/chunk-R2CDE5DO.js +0 -33
- package/dist/chunk-R2CDE5DO.js.map +0 -1
- package/dist/chunk-RQNZDWY3.js +0 -65
- package/dist/chunk-RQNZDWY3.js.map +0 -1
- package/dist/chunk-S6PDRGR5.js +0 -109
- package/dist/chunk-S6PDRGR5.js.map +0 -1
- package/dist/chunk-TGYQ3AKH.js +0 -95
- package/dist/chunk-TGYQ3AKH.js.map +0 -1
- package/dist/chunk-THQUH6WX.js +0 -81
- package/dist/chunk-THQUH6WX.js.map +0 -1
- package/dist/chunk-TJMK2KBE.js +0 -112
- package/dist/chunk-TJMK2KBE.js.map +0 -1
- package/dist/chunk-TTH7TWVX.js +0 -30
- package/dist/chunk-TTH7TWVX.js.map +0 -1
- package/dist/chunk-USIHM7FV.js +0 -211
- package/dist/chunk-USIHM7FV.js.map +0 -1
- package/dist/chunk-VVYSAGB3.js +0 -104
- package/dist/chunk-VVYSAGB3.js.map +0 -1
- package/dist/chunk-WD5KZE25.js +0 -25
- package/dist/chunk-WD5KZE25.js.map +0 -1
- package/dist/chunk-WL4ZO2H3.js +0 -33
- package/dist/chunk-WL4ZO2H3.js.map +0 -1
- package/dist/chunk-WRCHR4AK.js +0 -23
- package/dist/chunk-WRCHR4AK.js.map +0 -1
- package/dist/chunk-XOJJBNDX.js +0 -33
- package/dist/chunk-XOJJBNDX.js.map +0 -1
- package/dist/chunk-XUVLD65E.js +0 -617
- package/dist/chunk-XUVLD65E.js.map +0 -1
- package/dist/chunk-YBMEQZX7.js +0 -164
- package/dist/chunk-YBMEQZX7.js.map +0 -1
- package/dist/chunk-Z2QAABLM.js +0 -86
- package/dist/chunk-Z2QAABLM.js.map +0 -1
- package/dist/chunk-ZHEKDP5X.js +0 -41
- package/dist/chunk-ZHEKDP5X.js.map +0 -1
- package/dist/chunk-ZPMXRW2A.js +0 -63
- package/dist/chunk-ZPMXRW2A.js.map +0 -1
- package/dist/chunk-ZYEGBF7G.js +0 -25
- package/dist/chunk-ZYEGBF7G.js.map +0 -1
- package/dist/components/accordion.d.ts +0 -37
- package/dist/components/accordion.js +0 -4
- package/dist/components/accordion.js.map +0 -1
- package/dist/components/alert-dialog.d.ts +0 -56
- package/dist/components/alert-dialog.js +0 -5
- package/dist/components/alert-dialog.js.map +0 -1
- package/dist/components/alert.d.ts +0 -68
- package/dist/components/alert.js +0 -4
- package/dist/components/alert.js.map +0 -1
- package/dist/components/aspect-ratio.d.ts +0 -23
- package/dist/components/aspect-ratio.js +0 -3
- package/dist/components/aspect-ratio.js.map +0 -1
- package/dist/components/avatar.d.ts +0 -48
- package/dist/components/avatar.js +0 -4
- package/dist/components/avatar.js.map +0 -1
- package/dist/components/badge.d.ts +0 -52
- package/dist/components/badge.js +0 -4
- package/dist/components/badge.js.map +0 -1
- package/dist/components/breadcrumb.d.ts +0 -50
- package/dist/components/breadcrumb.js +0 -4
- package/dist/components/breadcrumb.js.map +0 -1
- package/dist/components/button.d.ts +0 -81
- package/dist/components/button.js +0 -4
- package/dist/components/button.js.map +0 -1
- package/dist/components/calendar-category-badge.d.ts +0 -24
- package/dist/components/calendar-category-badge.js +0 -5
- package/dist/components/calendar-category-badge.js.map +0 -1
- package/dist/components/calendar-event-chip.d.ts +0 -41
- package/dist/components/calendar-event-chip.js +0 -4
- package/dist/components/calendar-event-chip.js.map +0 -1
- package/dist/components/calendar-event-sheet.d.ts +0 -68
- package/dist/components/calendar-event-sheet.js +0 -9
- package/dist/components/calendar-event-sheet.js.map +0 -1
- package/dist/components/calendar-mini.d.ts +0 -65
- package/dist/components/calendar-mini.js +0 -6
- package/dist/components/calendar-mini.js.map +0 -1
- package/dist/components/calendar-toolbar.d.ts +0 -58
- package/dist/components/calendar-toolbar.js +0 -7
- package/dist/components/calendar-toolbar.js.map +0 -1
- package/dist/components/calendar.d.ts +0 -19
- package/dist/components/calendar.js +0 -5
- package/dist/components/calendar.js.map +0 -1
- package/dist/components/card.d.ts +0 -43
- package/dist/components/card.js +0 -4
- package/dist/components/card.js.map +0 -1
- package/dist/components/carousel.d.ts +0 -53
- package/dist/components/carousel.js +0 -5
- package/dist/components/carousel.js.map +0 -1
- package/dist/components/chart.d.ts +0 -103
- package/dist/components/chart.js +0 -4
- package/dist/components/chart.js.map +0 -1
- package/dist/components/checkbox.d.ts +0 -24
- package/dist/components/checkbox.js +0 -4
- package/dist/components/checkbox.js.map +0 -1
- package/dist/components/collapsible.d.ts +0 -28
- package/dist/components/collapsible.js +0 -3
- package/dist/components/collapsible.js.map +0 -1
- package/dist/components/color-picker.d.ts +0 -35
- package/dist/components/color-picker.js +0 -7
- package/dist/components/color-picker.js.map +0 -1
- package/dist/components/combobox.d.ts +0 -98
- package/dist/components/combobox.js +0 -8
- package/dist/components/combobox.js.map +0 -1
- package/dist/components/command.d.ts +0 -63
- package/dist/components/command.js +0 -5
- package/dist/components/command.js.map +0 -1
- package/dist/components/context-menu.d.ts +0 -70
- package/dist/components/context-menu.js +0 -4
- package/dist/components/context-menu.js.map +0 -1
- package/dist/components/date-picker.d.ts +0 -71
- package/dist/components/date-picker.js +0 -7
- package/dist/components/date-picker.js.map +0 -1
- package/dist/components/dialog.d.ts +0 -58
- package/dist/components/dialog.js +0 -4
- package/dist/components/dialog.js.map +0 -1
- package/dist/components/drawer.d.ts +0 -60
- package/dist/components/drawer.js +0 -4
- package/dist/components/drawer.js.map +0 -1
- package/dist/components/dropdown-menu.d.ts +0 -76
- package/dist/components/dropdown-menu.js +0 -4
- package/dist/components/dropdown-menu.js.map +0 -1
- package/dist/components/file-upload.d.ts +0 -44
- package/dist/components/file-upload.js +0 -5
- package/dist/components/file-upload.js.map +0 -1
- package/dist/components/form.d.ts +0 -67
- package/dist/components/form.js +0 -5
- package/dist/components/form.js.map +0 -1
- package/dist/components/hover-card.d.ts +0 -43
- package/dist/components/hover-card.js +0 -4
- package/dist/components/hover-card.js.map +0 -1
- package/dist/components/input-otp.d.ts +0 -38
- package/dist/components/input-otp.js +0 -4
- package/dist/components/input-otp.js.map +0 -1
- package/dist/components/input.d.ts +0 -38
- package/dist/components/input.js +0 -4
- package/dist/components/input.js.map +0 -1
- package/dist/components/label.d.ts +0 -20
- package/dist/components/label.js +0 -4
- package/dist/components/label.js.map +0 -1
- package/dist/components/menubar.d.ts +0 -82
- package/dist/components/menubar.js +0 -4
- package/dist/components/menubar.js.map +0 -1
- package/dist/components/navigation-menu.d.ts +0 -64
- package/dist/components/navigation-menu.js +0 -4
- package/dist/components/navigation-menu.js.map +0 -1
- package/dist/components/pagination.d.ts +0 -59
- package/dist/components/pagination.js +0 -5
- package/dist/components/pagination.js.map +0 -1
- package/dist/components/password-input.d.ts +0 -32
- package/dist/components/password-input.js +0 -5
- package/dist/components/password-input.js.map +0 -1
- package/dist/components/permission-grid.d.ts +0 -67
- package/dist/components/permission-grid.js +0 -5
- package/dist/components/permission-grid.js.map +0 -1
- package/dist/components/popover.d.ts +0 -37
- package/dist/components/popover.js +0 -4
- package/dist/components/popover.js.map +0 -1
- package/dist/components/progress.d.ts +0 -20
- package/dist/components/progress.js +0 -4
- package/dist/components/progress.js.map +0 -1
- package/dist/components/radio-group.d.ts +0 -38
- package/dist/components/radio-group.js +0 -4
- package/dist/components/radio-group.js.map +0 -1
- package/dist/components/rating.d.ts +0 -35
- package/dist/components/rating.js +0 -4
- package/dist/components/rating.js.map +0 -1
- package/dist/components/resizable.d.ts +0 -36
- package/dist/components/resizable.js +0 -4
- package/dist/components/resizable.js.map +0 -1
- package/dist/components/scope-tree.d.ts +0 -78
- package/dist/components/scope-tree.js +0 -5
- package/dist/components/scope-tree.js.map +0 -1
- package/dist/components/scope-type-badge.d.ts +0 -35
- package/dist/components/scope-type-badge.js +0 -5
- package/dist/components/scope-type-badge.js.map +0 -1
- package/dist/components/scroll-area.d.ts +0 -29
- package/dist/components/scroll-area.js +0 -4
- package/dist/components/scroll-area.js.map +0 -1
- package/dist/components/select.d.ts +0 -52
- package/dist/components/select.js +0 -4
- package/dist/components/select.js.map +0 -1
- package/dist/components/separator.d.ts +0 -24
- package/dist/components/separator.js +0 -4
- package/dist/components/separator.js.map +0 -1
- package/dist/components/sheet.d.ts +0 -51
- package/dist/components/sheet.js +0 -4
- package/dist/components/sheet.js.map +0 -1
- package/dist/components/sidebar.d.ts +0 -169
- package/dist/components/sidebar.js +0 -11
- package/dist/components/sidebar.js.map +0 -1
- package/dist/components/skeleton.d.ts +0 -25
- package/dist/components/skeleton.js +0 -4
- package/dist/components/skeleton.js.map +0 -1
- package/dist/components/slider.d.ts +0 -24
- package/dist/components/slider.js +0 -4
- package/dist/components/slider.js.map +0 -1
- package/dist/components/slug-input.d.ts +0 -50
- package/dist/components/slug-input.js +0 -6
- package/dist/components/slug-input.js.map +0 -1
- package/dist/components/sonner.d.ts +0 -22
- package/dist/components/sonner.js +0 -3
- package/dist/components/sonner.js.map +0 -1
- package/dist/components/stage-type-badge.d.ts +0 -30
- package/dist/components/stage-type-badge.js +0 -5
- package/dist/components/stage-type-badge.js.map +0 -1
- package/dist/components/switch.d.ts +0 -26
- package/dist/components/switch.js +0 -4
- package/dist/components/switch.js.map +0 -1
- package/dist/components/table.d.ts +0 -57
- package/dist/components/table.js +0 -4
- package/dist/components/table.js.map +0 -1
- package/dist/components/tabs.d.ts +0 -39
- package/dist/components/tabs.js +0 -4
- package/dist/components/tabs.js.map +0 -1
- package/dist/components/tag-input.d.ts +0 -40
- package/dist/components/tag-input.js +0 -5
- package/dist/components/tag-input.js.map +0 -1
- package/dist/components/textarea.d.ts +0 -21
- package/dist/components/textarea.js +0 -4
- package/dist/components/textarea.js.map +0 -1
- package/dist/components/time-picker.d.ts +0 -57
- package/dist/components/time-picker.js +0 -8
- package/dist/components/time-picker.js.map +0 -1
- package/dist/components/toggle-group.d.ts +0 -45
- package/dist/components/toggle-group.js +0 -5
- package/dist/components/toggle-group.js.map +0 -1
- package/dist/components/toggle.d.ts +0 -31
- package/dist/components/toggle.js +0 -4
- package/dist/components/toggle.js.map +0 -1
- package/dist/components/tooltip.d.ts +0 -34
- package/dist/components/tooltip.js +0 -4
- package/dist/components/tooltip.js.map +0 -1
- package/dist/components/workflow-category-badge.d.ts +0 -32
- package/dist/components/workflow-category-badge.js +0 -5
- package/dist/components/workflow-category-badge.js.map +0 -1
- package/dist/components/workflow-diagram.d.ts +0 -63
- package/dist/components/workflow-diagram.js +0 -5
- package/dist/components/workflow-diagram.js.map +0 -1
- package/dist/components/workflow-status-badge.d.ts +0 -30
- package/dist/components/workflow-status-badge.js +0 -5
- package/dist/components/workflow-status-badge.js.map +0 -1
- package/dist/components/workflow-stepper.d.ts +0 -52
- package/dist/components/workflow-stepper.js +0 -4
- package/dist/components/workflow-stepper.js.map +0 -1
- package/dist/hooks/use-mobile.d.ts +0 -3
- package/dist/hooks/use-mobile.js +0 -3
- package/dist/hooks/use-mobile.js.map +0 -1
- package/dist/lib/utils.d.ts +0 -5
- package/dist/lib/utils.js +0 -3
- package/dist/lib/utils.js.map +0 -1
- package/dist/types-CBVkScfB.d.ts +0 -84
- package/src/styles/fonts.css +0 -0
- package/src/styles/index.css +0 -3
- package/src/styles/tailwind.css +0 -4
- package/src/styles/theme.css +0 -461
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/locales/en.json","../src/locales/vi.json","../src/locales/ja.json","../src/i18n.ts"],"names":[],"mappings":";;;;;;;AAAA,IAAA,UAAA,GAAA;AAAA,EACE,MAAA,EAAU;AAAA,IACR,IAAA,EAAQ,cAAA;AAAA,IACR,MAAA,EAAU,QAAA;AAAA,IACV,MAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,MAAA,EAAU,QAAA;AAAA,IACV,MAAA,EAAU,QAAA;AAAA,IACV,KAAA,EAAS,OAAA;AAAA,IACT,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY,UAAA;AAAA,IACZ,MAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAQ,MAAA;AAAA,IACR,KAAA,EAAS,OAAA;AAAA,IACT,SAAA,EAAa,WAAA;AAAA,IACb,OAAA,EAAW,UAAA;AAAA,IACX,QAAA,EAAY,WAAA;AAAA,IACZ,MAAA,EAAU,SAAA;AAAA,IACV,OAAA,EAAW,YAAA;AAAA,IACX,QAAA,EAAY,UAAA;AAAA,IACZ,OAAA,EAAW,SAAA;AAAA,IACX,KAAA,EAAS,OAAA;AAAA,IACT,SAAA,EAAa,WAAA;AAAA,IACb,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY,UAAA;AAAA,IACZ,OAAA,EAAW,SAAA;AAAA,IACX,OAAA,EAAW,SAAA;AAAA,IACX,UAAA,EAAc;AAAA,GAChB;AAAA,EACA,OAAA,EAAW;AAAA,IACT,QAAA,EAAY,UAAA;AAAA,IACZ,SAAA,EAAa,WAAA;AAAA,IACb,QAAA,EAAY,UAAA;AAAA,IACZ,cAAA,EAAkB,iBAAA;AAAA,IAClB,WAAA,EAAe,cAAA;AAAA,IACf,aAAA,EAAiB,mBAAA;AAAA,IACjB,UAAA,EAAc,cAAA;AAAA,IACd,QAAA,EAAY,UAAA;AAAA,IACZ,aAAA,EAAiB,gBAAA;AAAA,IACjB,eAAA,EAAmB;AAAA,GACrB;AAAA,EACA,MAAA,EAAU;AAAA,IACR,iBAAA,EAAqB,2BAAA;AAAA,IACrB,QAAA,EAAY,UAAA;AAAA,IACZ,aAAA,EAAiB,eAAA;AAAA,IACjB,oBAAA,EAAwB,wBAAA;AAAA,IACxB,SAAA,EAAa,YAAA;AAAA,IACb,OAAA,EAAW,SAAA;AAAA,IACX,MAAA,EAAU,SAAA;AAAA,IACV,cAAA,EAAkB,oBAAA;AAAA,IAClB,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA,OAAA,EAAW;AAAA,IACT,KAAA,EAAS,UAAA;AAAA,IACT,KAAA,EAAS,iBAAA;AAAA,IACT,OAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAU;AAAA,IACR,OAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAQ,OAAA;AAAA,IACR,UAAA,EAAc,aAAA;AAAA,IACd,MAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAQ;AAAA,GACV;AAAA,EACA,QAAA,EAAY;AAAA,IACV,GAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAQ,MAAA;AAAA,IACR,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAW;AAAA,IACT,EAAA,EAAM,sBAAA;AAAA,IACN,kBAAA,EAAsB,qBAAA;AAAA,IACtB,UAAA,EAAc,YAAA;AAAA,IACd,QAAA,EAAY,UAAA;AAAA,IACZ,WAAA,EAAe,aAAA;AAAA,IACf,UAAA,EAAc,sBAAA;AAAA,IACd,eAAA,EAAmB,YAAA;AAAA,IACnB,OAAA,EAAW,UAAA;AAAA,IACX,QAAA,EAAY,WAAA;AAAA,IACZ,eAAA,EAAmB,mBAAA;AAAA,IACnB,KAAA,EAAS,kBAAA;AAAA,IACT,GAAA,EAAO,qBAAA;AAAA,IACP,OAAA,EAAW,UAAA;AAAA,IACX,GAAA,EAAO,KAAA;AAAA,IACP,SAAA,EAAa,WAAA;AAAA,IACb,UAAA,EAAc,YAAA;AAAA,IACd,SAAA,EAAa,uBAAA;AAAA,IACb,QAAA,EAAY,UAAA;AAAA,IACZ,kBAAA,EAAsB,qBAAA;AAAA,IACtB,WAAA,EAAe,aAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,UAAA;AAAA,IACZ,QAAA,EAAY,cAAA;AAAA,IACZ,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,YAAA,EAAgB,wBAAA;AAAA,IAChB,aAAA,EAAiB,qBAAA;AAAA,IACjB,aAAA,EAAiB,kBAAA;AAAA,IACjB,UAAA,EAAc,uBAAA;AAAA,IACd,QAAA,EAAY,qBAAA;AAAA,IACZ,OAAA,EAAW;AAAA,GACb;AAAA,EACA,GAAA,EAAO;AAAA,IACL,aAAA,EAAiB,0BAAA;AAAA,IACjB,gBAAA,EAAoB,oBAAA;AAAA,IACpB,SAAA,EAAa,qBAAA;AAAA,IACb,YAAA,EAAgB,eAAA;AAAA,IAChB,aAAA,EAAiB,uDAAA;AAAA,IACjB,gBAAA,EAAoB,8BAAA;AAAA,IACpB,OAAA,EAAW,cAAA;AAAA,IACX,UAAA,EAAc,QAAA;AAAA,IACd,WAAA,EAAe,oBAAA;AAAA,IACf,WAAA,EAAe,uBAAA;AAAA,IACf,YAAA,EAAgB,oBAAA;AAAA,IAChB,aAAA,EAAiB;AAAA,GACnB;AAAA,EACA,QAAA,EAAY;AAAA,IACV,KAAA,EAAS,UAAA;AAAA,IACT,QAAA,EAAY,4CAAA;AAAA,IACZ,UAAA,EAAc,SAAA;AAAA,IACd,gBAAA,EAAoB,eAAA;AAAA,IACpB,WAAA,EAAe,UAAA;AAAA,IACf,cAAA,EAAkB,aAAA;AAAA,IAClB,YAAA,EAAgB,sBAAA;AAAA,IAChB,gBAAA,EAAoB,gCAAA;AAAA,IACpB,WAAA,EAAe,cAAA;AAAA,IACf,SAAA,EAAa,0BAAA;AAAA,IACb,SAAA,EAAa,YAAA;AAAA,IACb,QAAA,EAAY,WAAA;AAAA,IACZ,KAAA,EAAS,OAAA;AAAA,IACT,KAAA,EAAS,cAAA;AAAA,IACT,GAAA,EAAO,KAAA;AAAA,IACP,cAAA,EAAkB,qCAAA;AAAA,IAClB,WAAA,EAAe,8BAAA;AAAA,IACf,kBAAA,EAAsB,qBAAA;AAAA,IACtB,sBAAA,EAA0B,4BAAA;AAAA,IAC1B,iBAAA,EAAqB,6BAAA;AAAA,IACrB,qBAAA,EAAyB,uCAAA;AAAA,IACzB,WAAA,EAAe,cAAA;AAAA,IACf,eAAA,EAAmB,2CAAA;AAAA,IACnB,WAAA,EAAe,cAAA;AAAA,IACf,eAAA,EAAmB,4CAAA;AAAA,IACnB,iBAAA,EAAqB,oBAAA;AAAA,IACrB,qBAAA,EAAyB,8BAAA;AAAA,IACzB,UAAA,EAAc,2BAAA;AAAA,IACd,cAAA,EAAkB,4BAAA;AAAA,IAClB,cAAA,EAAkB,iBAAA;AAAA,IAClB,kBAAA,EAAsB,6CAAA;AAAA,IACtB,eAAA,EAAmB,kBAAA;AAAA,IACnB,WAAA,EAAe,cAAA;AAAA,IACf,eAAA,EAAmB,sBAAA;AAAA,IACnB,cAAA,EAAkB,iBAAA;AAAA,IAClB,eAAA,EAAmB,gCAAA;AAAA,IACnB,SAAA,EAAa,2BAAA;AAAA,IACb,aAAA,EAAiB,yDAAA;AAAA,IACjB,SAAA,EAAa,YAAA;AAAA,IACb,aAAA,EAAiB,oCAAA;AAAA,IACjB,UAAA,EAAc,YAAA;AAAA,IACd,cAAA,EAAkB,4CAAA;AAAA,IAClB,KAAA,EAAS,OAAA;AAAA,IACT,UAAA,EAAc,OAAA;AAAA,IACd,SAAA,EAAa,MAAA;AAAA,IACb,WAAA,EAAe,QAAA;AAAA,IACf,QAAA,EAAY,UAAA;AAAA,IACZ,QAAA,EAAY;AAAA,GACd;AAAA,EACA,KAAA,EAAS;AAAA,IACP,QAAA,EAAY,8BAAA;AAAA,IACZ,KAAA,EAAS,SAAA;AAAA,IACT,UAAA,EAAc,OAAA;AAAA,IACd,aAAA,EAAiB,UAAA;AAAA,IACjB,cAAA,EAAkB,kBAAA;AAAA,IAClB,iBAAA,EAAqB,oCAAA;AAAA,IACrB,mBAAA,EAAuB,gBAAA;AAAA,IACvB,UAAA,EAAc,aAAA;AAAA,IACd,SAAA,EAAa,eAAA;AAAA,IACb,WAAA,EAAe,SAAA;AAAA,IACf,gBAAA,EAAoB,sCAAA;AAAA,IACpB,OAAA,EAAW,yBAAA;AAAA,IACX,YAAA,EAAgB;AAAA,GAClB;AAAA,EACA,QAAA,EAAY;AAAA,IACV,KAAA,EAAS,gBAAA;AAAA,IACT,WAAA,EAAe,uEAAA;AAAA,IACf,MAAA,EAAU,SAAA;AAAA,IACV,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,UAAA,EAAc,aAAA;AAAA,IACd,eAAA,EAAmB;AAAA;AAEvB,CAAA;;;ACnMA,IAAA,UAAA,GAAA;AAAA,EACE,MAAA,EAAU;AAAA,IACR,IAAA,EAAQ,6BAAA;AAAA,IACR,MAAA,EAAU,UAAA;AAAA,IACV,MAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAQ,qBAAA;AAAA,IACR,IAAA,EAAQ,aAAA;AAAA,IACR,MAAA,EAAU,kBAAA;AAAA,IACV,MAAA,EAAU,kBAAA;AAAA,IACV,KAAA,EAAS,cAAA;AAAA,IACT,IAAA,EAAQ,eAAA;AAAA,IACR,IAAA,EAAQ,gBAAA;AAAA,IACR,QAAA,EAAY,kBAAA;AAAA,IACZ,MAAA,EAAU,UAAA;AAAA,IACV,IAAA,EAAQ,UAAA;AAAA,IACR,KAAA,EAAS,YAAA;AAAA,IACT,SAAA,EAAa,YAAA;AAAA,IACb,OAAA,EAAW,sBAAA;AAAA,IACX,QAAA,EAAY,2BAAA;AAAA,IACZ,MAAA,EAAU,kCAAA;AAAA,IACV,OAAA,EAAW,uBAAA;AAAA,IACX,QAAA,EAAY,wBAAA;AAAA,IACZ,OAAA,EAAW,kBAAA;AAAA,IACX,KAAA,EAAS,OAAA;AAAA,IACT,SAAA,EAAa,kBAAA;AAAA,IACb,IAAA,EAAQ,SAAA;AAAA,IACR,QAAA,EAAY,qBAAA;AAAA,IACZ,OAAA,EAAW,eAAA;AAAA,IACX,OAAA,EAAW,qBAAA;AAAA,IACX,UAAA,EAAc;AAAA,GAChB;AAAA,EACA,OAAA,EAAW;AAAA,IACT,QAAA,EAAY,eAAA;AAAA,IACZ,SAAA,EAAa,kBAAA;AAAA,IACb,QAAA,EAAY,sBAAA;AAAA,IACZ,cAAA,EAAkB,oCAAA;AAAA,IAClB,WAAA,EAAe,gCAAA;AAAA,IACf,aAAA,EAAiB,yBAAA;AAAA,IACjB,UAAA,EAAc,4BAAA;AAAA,IACd,QAAA,EAAY,cAAA;AAAA,IACZ,aAAA,EAAiB,2BAAA;AAAA,IACjB,eAAA,EAAmB;AAAA,GACrB;AAAA,EACA,MAAA,EAAU;AAAA,IACR,iBAAA,EAAqB,yCAAA;AAAA,IACrB,QAAA,EAAY,mBAAA;AAAA,IACZ,aAAA,EAAiB,iBAAA;AAAA,IACjB,oBAAA,EAAwB,sCAAA;AAAA,IACxB,SAAA,EAAa,mCAAA;AAAA,IACb,OAAA,EAAW,iBAAA;AAAA,IACX,MAAA,EAAU,0BAAA;AAAA,IACV,cAAA,EAAkB,6BAAA;AAAA,IAClB,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA,OAAA,EAAW;AAAA,IACT,KAAA,EAAS,sBAAA;AAAA,IACT,KAAA,EAAS,gBAAA;AAAA,IACT,OAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAU;AAAA,IACR,OAAA,EAAW,SAAA;AAAA,IACX,IAAA,EAAQ,iBAAA;AAAA,IACR,UAAA,EAAc,kBAAA;AAAA,IACd,MAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAQ;AAAA,GACV;AAAA,EACA,QAAA,EAAY;AAAA,IACV,GAAA,EAAO,KAAA;AAAA,IACP,MAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAQ,MAAA;AAAA,IACR,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAW;AAAA,IACT,EAAA,EAAM,sBAAA;AAAA,IACN,kBAAA,EAAsB,iCAAA;AAAA,IACtB,UAAA,EAAc,mBAAA;AAAA,IACd,QAAA,EAAY,sBAAA;AAAA,IACZ,WAAA,EAAe,sBAAA;AAAA,IACf,UAAA,EAAc,mCAAA;AAAA,IACd,eAAA,EAAmB,iBAAA;AAAA,IACnB,OAAA,EAAW,sBAAA;AAAA,IACX,QAAA,EAAY,6BAAA;AAAA,IACZ,eAAA,EAAmB,+BAAA;AAAA,IACnB,KAAA,EAAS,6BAAA;AAAA,IACT,GAAA,EAAO,sBAAA;AAAA,IACP,OAAA,EAAW,eAAA;AAAA,IACX,GAAA,EAAO,KAAA;AAAA,IACP,SAAA,EAAa,WAAA;AAAA,IACb,UAAA,EAAc,kBAAA;AAAA,IACd,SAAA,EAAa,oBAAA;AAAA,IACb,QAAA,EAAY,sBAAA;AAAA,IACZ,kBAAA,EAAsB,iCAAA;AAAA,IACtB,WAAA,EAAe,iBAAA;AAAA,IACf,OAAA,EAAW,4BAAA;AAAA,IACX,QAAA,EAAY,UAAA;AAAA,IACZ,QAAA,EAAY,oBAAA;AAAA,IACZ,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,YAAA,EAAgB,mCAAA;AAAA,IAChB,aAAA,EAAiB,+BAAA;AAAA,IACjB,aAAA,EAAiB,kCAAA;AAAA,IACjB,UAAA,EAAc,mCAAA;AAAA,IACd,QAAA,EAAY,oCAAA;AAAA,IACZ,OAAA,EAAW;AAAA,GACb;AAAA,EACA,GAAA,EAAO;AAAA,IACL,aAAA,EAAiB,uCAAA;AAAA,IACjB,gBAAA,EAAoB,kCAAA;AAAA,IACpB,SAAA,EAAa,6BAAA;AAAA,IACb,YAAA,EAAgB,wBAAA;AAAA,IAChB,aAAA,EAAiB,8EAAA;AAAA,IACjB,gBAAA,EAAoB,oFAAA;AAAA,IACpB,OAAA,EAAW,mBAAA;AAAA,IACX,UAAA,EAAc,cAAA;AAAA,IACd,WAAA,EAAe,wBAAA;AAAA,IACf,WAAA,EAAe,wCAAA;AAAA,IACf,YAAA,EAAgB,wBAAA;AAAA,IAChB,aAAA,EAAiB;AAAA,GACnB;AAAA,EACA,QAAA,EAAY;AAAA,IACV,KAAA,EAAS,sBAAA;AAAA,IACT,QAAA,EAAY,2FAAA;AAAA,IACZ,UAAA,EAAc,iBAAA;AAAA,IACd,gBAAA,EAAoB,iBAAA;AAAA,IACpB,WAAA,EAAe,mBAAA;AAAA,IACf,cAAA,EAAkB,mBAAA;AAAA,IAClB,YAAA,EAAgB,4BAAA;AAAA,IAChB,gBAAA,EAAoB,0GAAA;AAAA,IACpB,WAAA,EAAe,6BAAA;AAAA,IACf,SAAA,EAAa,8CAAA;AAAA,IACb,SAAA,EAAa,SAAA;AAAA,IACb,QAAA,EAAY,QAAA;AAAA,IACZ,KAAA,EAAS,OAAA;AAAA,IACT,KAAA,EAAS,mCAAA;AAAA,IACT,GAAA,EAAO,sBAAA;AAAA,IACP,cAAA,EAAkB,sDAAA;AAAA,IAClB,WAAA,EAAe,gFAAA;AAAA,IACf,kBAAA,EAAsB,uBAAA;AAAA,IACtB,sBAAA,EAA0B,gFAAA;AAAA,IAC1B,iBAAA,EAAqB,iCAAA;AAAA,IACrB,qBAAA,EAAyB,yEAAA;AAAA,IACzB,WAAA,EAAe,yBAAA;AAAA,IACf,eAAA,EAAmB,+FAAA;AAAA,IACnB,WAAA,EAAe,4BAAA;AAAA,IACf,eAAA,EAAmB,0FAAA;AAAA,IACnB,iBAAA,EAAqB,sBAAA;AAAA,IACrB,qBAAA,EAAyB,gFAAA;AAAA,IACzB,UAAA,EAAc,+BAAA;AAAA,IACd,cAAA,EAAkB,oDAAA;AAAA,IAClB,cAAA,EAAkB,kCAAA;AAAA,IAClB,kBAAA,EAAsB,yGAAA;AAAA,IACtB,eAAA,EAAmB,uCAAA;AAAA,IACnB,WAAA,EAAe,6BAAA;AAAA,IACf,eAAA,EAAmB,8CAAA;AAAA,IACnB,cAAA,EAAkB,uCAAA;AAAA,IAClB,eAAA,EAAmB,uEAAA;AAAA,IACnB,SAAA,EAAa,uCAAA;AAAA,IACb,aAAA,EAAiB,8GAAA;AAAA,IACjB,SAAA,EAAa,+BAAA;AAAA,IACb,aAAA,EAAiB,qEAAA;AAAA,IACjB,UAAA,EAAc,gBAAA;AAAA,IACd,cAAA,EAAkB,0EAAA;AAAA,IAClB,KAAA,EAAS,uBAAA;AAAA,IACT,UAAA,EAAc,SAAA;AAAA,IACd,SAAA,EAAa,UAAA;AAAA,IACb,WAAA,EAAe,yBAAA;AAAA,IACf,QAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAY;AAAA,GACd;AAAA,EACA,KAAA,EAAS;AAAA,IACP,QAAA,EAAY,kDAAA;AAAA,IACZ,KAAA,EAAS,0BAAA;AAAA,IACT,UAAA,EAAc,OAAA;AAAA,IACd,aAAA,EAAiB,oBAAA;AAAA,IACjB,cAAA,EAAkB,6BAAA;AAAA,IAClB,iBAAA,EAAqB,6GAAA;AAAA,IACrB,mBAAA,EAAuB,8BAAA;AAAA,IACvB,UAAA,EAAc,uCAAA;AAAA,IACd,SAAA,EAAa,uCAAA;AAAA,IACb,WAAA,EAAe,0BAAA;AAAA,IACf,gBAAA,EAAoB,iFAAA;AAAA,IACpB,OAAA,EAAW,4CAAA;AAAA,IACX,YAAA,EAAgB;AAAA,GAClB;AAAA,EACA,QAAA,EAAY;AAAA,IACV,KAAA,EAAS,iCAAA;AAAA,IACT,WAAA,EAAe,6IAAA;AAAA,IACf,MAAA,EAAU,eAAA;AAAA,IACV,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,UAAA,EAAc,mBAAA;AAAA,IACd,eAAA,EAAmB;AAAA;AAEvB,CAAA;;;ACnMA,IAAA,UAAA,GAAA;AAAA,EACE,MAAA,EAAU;AAAA,IACR,IAAA,EAAQ,gCAAA;AAAA,IACR,MAAA,EAAU,gCAAA;AAAA,IACV,MAAA,EAAU,cAAA;AAAA,IACV,IAAA,EAAQ,cAAA;AAAA,IACR,IAAA,EAAQ,oBAAA;AAAA,IACR,MAAA,EAAU,cAAA;AAAA,IACV,MAAA,EAAU,gCAAA;AAAA,IACV,KAAA,EAAS,oBAAA;AAAA,IACT,IAAA,EAAQ,cAAA;AAAA,IACR,IAAA,EAAQ,cAAA;AAAA,IACR,QAAA,EAAY,cAAA;AAAA,IACZ,MAAA,EAAU,cAAA;AAAA,IACV,IAAA,EAAQ,cAAA;AAAA,IACR,KAAA,EAAS,cAAA;AAAA,IACT,SAAA,EAAa,cAAA;AAAA,IACb,OAAA,EAAW,gCAAA;AAAA,IACX,QAAA,EAAY,4CAAA;AAAA,IACZ,MAAA,EAAU,gCAAA;AAAA,IACV,OAAA,EAAW,mCAAA;AAAA,IACX,QAAA,EAAY,cAAA;AAAA,IACZ,OAAA,EAAW,0BAAA;AAAA,IACX,KAAA,EAAS,oBAAA;AAAA,IACT,SAAA,EAAa,cAAA;AAAA,IACb,IAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAY,sCAAA;AAAA,IACZ,OAAA,EAAW,cAAA;AAAA,IACX,OAAA,EAAW,gCAAA;AAAA,IACX,UAAA,EAAc;AAAA,GAChB;AAAA,EACA,OAAA,EAAW;AAAA,IACT,QAAA,EAAY,sCAAA;AAAA,IACZ,SAAA,EAAa,sCAAA;AAAA,IACb,QAAA,EAAY,cAAA;AAAA,IACZ,cAAA,EAAkB,wDAAA;AAAA,IAClB,WAAA,EAAe,8DAAA;AAAA,IACf,aAAA,EAAiB,2DAAA;AAAA,IACjB,UAAA,EAAc,sCAAA;AAAA,IACd,QAAA,EAAY,gCAAA;AAAA,IACZ,aAAA,EAAiB,kDAAA;AAAA,IACjB,eAAA,EAAmB;AAAA,GACrB;AAAA,EACA,MAAA,EAAU;AAAA,IACR,iBAAA,EAAqB,mFAAA;AAAA,IACrB,QAAA,EAAY,0BAAA;AAAA,IACZ,aAAA,EAAiB,cAAA;AAAA,IACjB,oBAAA,EAAwB,wDAAA;AAAA,IACxB,SAAA,EAAa,4CAAA;AAAA,IACb,OAAA,EAAW,sCAAA;AAAA,IACX,MAAA,EAAU,gCAAA;AAAA,IACV,cAAA,EAAkB,+CAAA;AAAA,IAClB,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA,OAAA,EAAW;AAAA,IACT,KAAA,EAAS,gCAAA;AAAA,IACT,KAAA,EAAS,8BAAA;AAAA,IACT,OAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAU;AAAA,IACR,OAAA,EAAW,gCAAA;AAAA,IACX,IAAA,EAAQ,oBAAA;AAAA,IACR,UAAA,EAAc,oBAAA;AAAA,IACd,MAAA,EAAU,0BAAA;AAAA,IACV,IAAA,EAAQ;AAAA,GACV;AAAA,EACA,QAAA,EAAY;AAAA,IACV,GAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAU,QAAA;AAAA,IACV,IAAA,EAAQ,QAAA;AAAA,IACR,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAW;AAAA,IACT,EAAA,EAAM,mBAAA;AAAA,IACN,kBAAA,EAAsB,gCAAA;AAAA,IACtB,UAAA,EAAc,0BAAA;AAAA,IACd,QAAA,EAAY,cAAA;AAAA,IACZ,WAAA,EAAe,cAAA;AAAA,IACf,UAAA,EAAc,gCAAA;AAAA,IACd,eAAA,EAAmB,cAAA;AAAA,IACnB,OAAA,EAAW,oBAAA;AAAA,IACX,QAAA,EAAY,0BAAA;AAAA,IACZ,eAAA,EAAmB,sCAAA;AAAA,IACnB,KAAA,EAAS,gCAAA;AAAA,IACT,GAAA,EAAO,iBAAA;AAAA,IACP,OAAA,EAAW,cAAA;AAAA,IACX,GAAA,EAAO,KAAA;AAAA,IACP,SAAA,EAAa,4CAAA;AAAA,IACb,UAAA,EAAc,4CAAA;AAAA,IACd,SAAA,EAAa,gCAAA;AAAA,IACb,QAAA,EAAY,cAAA;AAAA,IACZ,kBAAA,EAAsB,0BAAA;AAAA,IACtB,WAAA,EAAe,sCAAA;AAAA,IACf,OAAA,EAAW,kDAAA;AAAA,IACX,QAAA,EAAY,sCAAA;AAAA,IACZ,QAAA,EAAY,+BAAA;AAAA,IACZ,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA,YAAA,EAAgB;AAAA,IACd,YAAA,EAAgB,oEAAA;AAAA,IAChB,aAAA,EAAiB,0EAAA;AAAA,IACjB,aAAA,EAAiB,8DAAA;AAAA,IACjB,UAAA,EAAc,uBAAA;AAAA,IACd,QAAA,EAAY,6BAAA;AAAA,IACZ,OAAA,EAAW;AAAA,GACb;AAAA,EACA,GAAA,EAAO;AAAA,IACL,aAAA,EAAiB,sCAAA;AAAA,IACjB,gBAAA,EAAoB,sCAAA;AAAA,IACpB,SAAA,EAAa,gCAAA;AAAA,IACb,YAAA,EAAgB,gCAAA;AAAA,IAChB,aAAA,EAAiB,kGAAA;AAAA,IACjB,gBAAA,EAAoB,kGAAA;AAAA,IACpB,OAAA,EAAW,cAAA;AAAA,IACX,UAAA,EAAc,cAAA;AAAA,IACd,WAAA,EAAe,wBAAA;AAAA,IACf,WAAA,EAAe,4CAAA;AAAA,IACf,YAAA,EAAgB,mCAAA;AAAA,IAChB,aAAA,EAAiB;AAAA,GACnB;AAAA,EACA,QAAA,EAAY;AAAA,IACV,KAAA,EAAS,cAAA;AAAA,IACT,QAAA,EAAY,4FAAA;AAAA,IACZ,UAAA,EAAc,sCAAA;AAAA,IACd,gBAAA,EAAoB,cAAA;AAAA,IACpB,WAAA,EAAe,sCAAA;AAAA,IACf,cAAA,EAAkB,sCAAA;AAAA,IAClB,YAAA,EAAgB,0BAAA;AAAA,IAChB,gBAAA,EAAoB,sFAAA;AAAA,IACpB,WAAA,EAAe,gCAAA;AAAA,IACf,SAAA,EAAa,4CAAA;AAAA,IACb,SAAA,EAAa,QAAA;AAAA,IACb,QAAA,EAAY,QAAA;AAAA,IACZ,KAAA,EAAS,oBAAA;AAAA,IACT,KAAA,EAAS,0BAAA;AAAA,IACT,GAAA,EAAO,0BAAA;AAAA,IACP,cAAA,EAAkB,6EAAA;AAAA,IAClB,WAAA,EAAe,oEAAA;AAAA,IACf,kBAAA,EAAsB,gCAAA;AAAA,IACtB,sBAAA,EAA0B,kDAAA;AAAA,IAC1B,iBAAA,EAAqB,kDAAA;AAAA,IACrB,qBAAA,EAAyB,wGAAA;AAAA,IACzB,WAAA,EAAe,gCAAA;AAAA,IACf,eAAA,EAAmB,4FAAA;AAAA,IACnB,WAAA,EAAe,4CAAA;AAAA,IACf,eAAA,EAAmB,kGAAA;AAAA,IACnB,iBAAA,EAAqB,sCAAA;AAAA,IACrB,qBAAA,EAAyB,wDAAA;AAAA,IACzB,UAAA,EAAc,8DAAA;AAAA,IACd,cAAA,EAAkB,oEAAA;AAAA,IAClB,cAAA,EAAkB,4CAAA;AAAA,IAClB,kBAAA,EAAsB,gIAAA;AAAA,IACtB,eAAA,EAAmB,kDAAA;AAAA,IACnB,WAAA,EAAe,kDAAA;AAAA,IACf,eAAA,EAAmB,oEAAA;AAAA,IACnB,cAAA,EAAkB,kDAAA;AAAA,IAClB,eAAA,EAAmB,sFAAA;AAAA,IACnB,SAAA,EAAa,gCAAA;AAAA,IACb,aAAA,EAAiB,0HAAA;AAAA,IACjB,SAAA,EAAa,6BAAA;AAAA,IACb,aAAA,EAAiB,sFAAA;AAAA,IACjB,UAAA,EAAc,cAAA;AAAA,IACd,cAAA,EAAkB,4IAAA;AAAA,IAClB,KAAA,EAAS,oBAAA;AAAA,IACT,UAAA,EAAc,oBAAA;AAAA,IACd,SAAA,EAAa,oBAAA;AAAA,IACb,WAAA,EAAe,0BAAA;AAAA,IACf,QAAA,EAAY,cAAA;AAAA,IACZ,QAAA,EAAY;AAAA,GACd;AAAA,EACA,KAAA,EAAS;AAAA,IACP,QAAA,EAAY,0EAAA;AAAA,IACZ,KAAA,EAAS,0BAAA;AAAA,IACT,UAAA,EAAc,oBAAA;AAAA,IACd,aAAA,EAAiB,gCAAA;AAAA,IACjB,cAAA,EAAkB,8DAAA;AAAA,IAClB,iBAAA,EAAqB,8GAAA;AAAA,IACrB,mBAAA,EAAuB,kDAAA;AAAA,IACvB,UAAA,EAAc,4CAAA;AAAA,IACd,SAAA,EAAa,mCAAA;AAAA,IACb,WAAA,EAAe,0BAAA;AAAA,IACf,gBAAA,EAAoB,8GAAA;AAAA,IACpB,OAAA,EAAW,0EAAA;AAAA,IACX,YAAA,EAAgB;AAAA,GAClB;AAAA,EACA,QAAA,EAAY;AAAA,IACV,KAAA,EAAS,oEAAA;AAAA,IACT,WAAA,EAAe,wMAAA;AAAA,IACf,MAAA,EAAU,cAAA;AAAA,IACV,MAAA,EAAU;AAAA,GACZ;AAAA,EACA,UAAA,EAAc;AAAA,IACZ,UAAA,EAAc,gCAAA;AAAA,IACd,eAAA,EAAmB;AAAA;AAEvB,CAAA;;;AC3LO,IAAM,aAAA,GAAmD;AAAA,EAC9D,EAAA,EAAI,sBAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI;AACN;AAEA,SAAS,iBAAA,GAAuC;AAC9C,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,IAAA;AAC1C,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,iBAAiB,CAAA;AACpD,EAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAM,OAAO,KAAA;AAC/D,EAAA,OAAO,IAAA;AACT;AAGA,IAAA,CAAK,GAAA,CAAI,gBAAgB,CAAA,CAAE,IAAA,CAAK;AAAA,EAC9B,SAAA,EAAW;AAAA,IACT,EAAA,EAAI,EAAE,KAAA,EAAO,UAAA,EAAQ;AAAA,IACrB,EAAA,EAAI,EAAE,KAAA,EAAO,UAAA,EAAQ;AAAA,IACrB,EAAA,EAAI,EAAE,KAAA,EAAO,UAAA;AAAQ,GACvB;AAAA,EACA,KAAK,iBAAA,EAAkB;AAAA,EACvB,WAAA,EAAa,IAAA;AAAA,EACb,SAAA,EAAW,OAAA;AAAA,EACX,UAAA,EAAY,OAAA;AAAA,EACZ,EAAA,EAAI,CAAC,OAAO,CAAA;AAAA,EACZ,aAAA,EAAe;AAAA,IACb,WAAA,EAAa;AAAA;AAAA;AAEjB,CAAC,CAAA;AA2BM,SAAS,cAAA,CAAe,OAAA,GAAiC,EAAC,EAAG;AAClE,EAAA,MAAM,EAAE,UAAA,EAAY,SAAA,EAAU,GAAI,OAAA;AAGlC,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACpD,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,SAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACrD,QAAA,IAAA,CAAK,iBAAA,CAAkB,IAAA,EAAM,EAAA,EAAI,SAAA,EAAW,MAAM,IAAI,CAAA;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAEpD,MAAA,MAAM,SAAiD,EAAC;AACxD,MAAA,KAAA,MAAW,CAAC,OAAA,EAAS,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACnD,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC/B,QAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,UAAA,MAAM,CAAC,OAAA,EAAS,GAAG,CAAA,GAAI,KAAA;AACvB,UAAA,IAAI,CAAC,MAAA,CAAO,OAAO,GAAG,MAAA,CAAO,OAAO,IAAI,EAAC;AACzC,UAAA,MAAA,CAAO,OAAO,CAAA,CAAE,GAAG,CAAA,GAAI,KAAA;AAAA,QACzB;AAAA,MACF;AACA,MAAA,IAAA,CAAK,iBAAA,CAAkB,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,MAAM,IAAI,CAAA;AAAA,IAC1D;AAAA,EACF;AACF;AAMO,SAAS,eAAe,IAAA,EAAyB;AACtD,EAAA,YAAA,CAAa,OAAA,CAAQ,mBAAmB,IAAI,CAAA;AAC5C,EAAA,OAAO,IAAA,CAAK,eAAe,IAAI,CAAA;AACjC;AAGA,IAAO,YAAA,GAAQ","file":"chunk-OY3PSPA5.js","sourcesContent":["{\n \"common\": {\n \"save\": \"Save changes\",\n \"cancel\": \"Cancel\",\n \"delete\": \"Delete\",\n \"edit\": \"Edit\",\n \"copy\": \"Copy\",\n \"search\": \"Search\",\n \"filter\": \"Filter\",\n \"close\": \"Close\",\n \"back\": \"Back\",\n \"next\": \"Next\",\n \"complete\": \"Complete\",\n \"create\": \"Create\",\n \"send\": \"Send\",\n \"today\": \"Today\",\n \"yesterday\": \"Yesterday\",\n \"viewAll\": \"View all\",\n \"notFound\": \"Not found\",\n \"noData\": \"No data\",\n \"loading\": \"Loading...\",\n \"progress\": \"Progress\",\n \"members\": \"members\",\n \"tasks\": \"tasks\",\n \"completed\": \"completed\",\n \"days\": \"days\",\n \"download\": \"Download\",\n \"details\": \"Details\",\n \"preview\": \"Preview\",\n \"assignToMe\": \"Assign to me\"\n },\n \"sidebar\": {\n \"projects\": \"Projects\",\n \"documents\": \"Documents\",\n \"settings\": \"Settings\",\n \"recentProjects\": \"Recent Projects\",\n \"allProjects\": \"All Projects\",\n \"searchProject\": \"Search project...\",\n \"backToList\": \"Back to list\",\n \"collapse\": \"Collapse\",\n \"expandSidebar\": \"Expand sidebar\",\n \"collapseSidebar\": \"Collapse sidebar\"\n },\n \"header\": {\n \"searchPlaceholder\": \"Search tasks, projects...\",\n \"services\": \"Services\",\n \"notifications\": \"Notifications\",\n \"viewAllNotifications\": \"View all notifications\",\n \"myAccount\": \"My Account\",\n \"profile\": \"Profile\",\n \"logout\": \"Log out\",\n \"searchServices\": \"Search services...\",\n \"noServiceFound\": \"No service found\"\n },\n \"myTasks\": {\n \"title\": \"My Tasks\",\n \"count\": \"{{count}} tasks\",\n \"noTasks\": \"No tasks assigned\"\n },\n \"status\": {\n \"backlog\": \"Backlog\",\n \"todo\": \"To Do\",\n \"inProgress\": \"In Progress\",\n \"review\": \"Review\",\n \"done\": \"Done\"\n },\n \"priority\": {\n \"low\": \"Low\",\n \"medium\": \"Medium\",\n \"high\": \"High\",\n \"urgent\": \"Urgent\"\n },\n \"service\": {\n \"hr\": \"Human Resources (HR)\",\n \"employeeManagement\": \"Employee Management\",\n \"attendance\": \"Attendance\",\n \"training\": \"Training\",\n \"recruitment\": \"Recruitment\",\n \"accounting\": \"Accounting & Finance\",\n \"accountingLabel\": \"Accounting\",\n \"invoice\": \"Invoices\",\n \"cashFund\": \"Cash Fund\",\n \"financialReport\": \"Financial Reports\",\n \"sales\": \"Sales & Commerce\",\n \"pos\": \"Point of Sale (POS)\",\n \"payment\": \"Payments\",\n \"crm\": \"CRM\",\n \"marketing\": \"Marketing\",\n \"operations\": \"Operations\",\n \"warehouse\": \"Warehouse & Inventory\",\n \"shipping\": \"Shipping\",\n \"facilityManagement\": \"Facility Management\",\n \"maintenance\": \"Maintenance\",\n \"support\": \"Support & Others\",\n \"helpdesk\": \"Helpdesk\",\n \"reportBI\": \"Reports & BI\",\n \"systemSettings\": \"System Settings\"\n },\n \"notification\": {\n \"assignedTask\": \"assigned a task to you\",\n \"commentedTask\": \"commented on a task\",\n \"completedTask\": \"completed a task\",\n \"minutesAgo\": \"{{count}} minutes ago\",\n \"hoursAgo\": \"{{count}} hours ago\",\n \"daysAgo\": \"{{count}} days ago\"\n },\n \"org\": {\n \"noOrgSelected\": \"No organization selected\",\n \"noBranchSelected\": \"No branch selected\",\n \"selectOrg\": \"Select Organization\",\n \"selectBranch\": \"Select Branch\",\n \"selectOrgDesc\": \"Please select the organization you want to work with.\",\n \"selectBranchDesc\": \"Select a branch to continue.\",\n \"orgStep\": \"Organization\",\n \"branchStep\": \"Branch\",\n \"branchCount\": \"{{count}} branches\",\n \"selectedOrg\": \"Selected organization\",\n \"searchBranch\": \"Search branches...\",\n \"noBranchFound\": \"No branches found\"\n },\n \"settings\": {\n \"title\": \"Settings\",\n \"subtitle\": \"Manage your account and system preferences\",\n \"profileTab\": \"Profile\",\n \"notificationsTab\": \"Notifications\",\n \"securityTab\": \"Security\",\n \"preferencesTab\": \"Preferences\",\n \"personalInfo\": \"Personal Information\",\n \"personalInfoDesc\": \"Update your profile and avatar\",\n \"changePhoto\": \"Change photo\",\n \"photoHint\": \"JPG, PNG or GIF. Max 2MB\",\n \"firstName\": \"First name\",\n \"lastName\": \"Last name\",\n \"email\": \"Email\",\n \"phone\": \"Phone number\",\n \"bio\": \"Bio\",\n \"bioPlaceholder\": \"Write a few lines about yourself...\",\n \"saveSuccess\": \"Settings saved successfully!\",\n \"emailNotifications\": \"Email Notifications\",\n \"emailNotificationsDesc\": \"Manage email notifications\",\n \"receiveEmailNotif\": \"Receive email notifications\",\n \"receiveEmailNotifDesc\": \"Get emails about important activities\",\n \"taskUpdates\": \"Task updates\",\n \"taskUpdatesDesc\": \"Notify when tasks are assigned or updated\",\n \"newComments\": \"New comments\",\n \"newCommentsDesc\": \"Notify when someone comments on your tasks\",\n \"pushNotifications\": \"Push Notifications\",\n \"pushNotificationsDesc\": \"Manage browser notifications\",\n \"enablePush\": \"Enable push notifications\",\n \"enablePushDesc\": \"Show desktop notifications\",\n \"changePassword\": \"Change Password\",\n \"changePasswordDesc\": \"Update your password to secure your account\",\n \"currentPassword\": \"Current password\",\n \"newPassword\": \"New password\",\n \"confirmPassword\": \"Confirm new password\",\n \"updatePassword\": \"Update password\",\n \"passwordUpdated\": \"Password updated successfully!\",\n \"twoFactor\": \"Two-Factor Authentication\",\n \"twoFactorDesc\": \"Enhance account security with two-factor authentication\",\n \"enable2FA\": \"Enable 2FA\",\n \"enable2FADesc\": \"Require verification code on login\",\n \"appearance\": \"Appearance\",\n \"appearanceDesc\": \"Customize the interface to your preference\",\n \"theme\": \"Theme\",\n \"themeLight\": \"Light\",\n \"themeDark\": \"Dark\",\n \"themeSystem\": \"System\",\n \"language\": \"Language\",\n \"timezone\": \"Timezone\"\n },\n \"login\": {\n \"subtitle\": \"Efficient project management\",\n \"title\": \"Sign in\",\n \"emailLabel\": \"Email\",\n \"passwordLabel\": \"Password\",\n \"forgotPassword\": \"Forgot password?\",\n \"forgotPasswordMsg\": \"Password reset feature coming soon\",\n \"passwordPlaceholder\": \"Enter password\",\n \"rememberMe\": \"Remember me\",\n \"loggingIn\": \"Signing in...\",\n \"loginButton\": \"Sign in\",\n \"emptyFieldsError\": \"Please enter both email and password\",\n \"success\": \"Signed in successfully!\",\n \"demoPassword\": \"Password: anything\"\n },\n \"notFound\": {\n \"title\": \"Page not found\",\n \"description\": \"Sorry, the page you are looking for does not exist or has been moved.\",\n \"goBack\": \"Go back\",\n \"goHome\": \"Go home\"\n },\n \"datePicker\": {\n \"selectDate\": \"Select date\",\n \"selectDateRange\": \"Select date range\"\n }\n}\n","{\n \"common\": {\n \"save\": \"Lưu thay đổi\",\n \"cancel\": \"Hủy\",\n \"delete\": \"Xóa\",\n \"edit\": \"Chỉnh sửa\",\n \"copy\": \"Sao chép\",\n \"search\": \"Tìm kiếm\",\n \"filter\": \"Bộ lọc\",\n \"close\": \"Đóng\",\n \"back\": \"Quay lại\",\n \"next\": \"Tiếp theo\",\n \"complete\": \"Hoàn thành\",\n \"create\": \"Tạo\",\n \"send\": \"Gửi\",\n \"today\": \"Hôm nay\",\n \"yesterday\": \"Hôm qua\",\n \"viewAll\": \"Xem tất cả\",\n \"notFound\": \"Không tìm thấy\",\n \"noData\": \"Không có dữ liệu\",\n \"loading\": \"Đang tải...\",\n \"progress\": \"Tiến độ\",\n \"members\": \"thành viên\",\n \"tasks\": \"tasks\",\n \"completed\": \"hoàn thành\",\n \"days\": \"ngày\",\n \"download\": \"Tải xuống\",\n \"details\": \"Chi tiết\",\n \"preview\": \"Xem trước\",\n \"assignToMe\": \"Gán cho tôi\"\n },\n \"sidebar\": {\n \"projects\": \"Dự án\",\n \"documents\": \"Tài liệu\",\n \"settings\": \"Cài đặt\",\n \"recentProjects\": \"Dự án gần đây\",\n \"allProjects\": \"Tất cả dự án\",\n \"searchProject\": \"Tìm dự án...\",\n \"backToList\": \"Quay lại danh sách\",\n \"collapse\": \"Thu gọn\",\n \"expandSidebar\": \"Mở rộng sidebar\",\n \"collapseSidebar\": \"Thu gọn sidebar\"\n },\n \"header\": {\n \"searchPlaceholder\": \"Tìm kiếm task, dự án...\",\n \"services\": \"Dịch vụ\",\n \"notifications\": \"Thông báo\",\n \"viewAllNotifications\": \"Xem tất cả thông báo\",\n \"myAccount\": \"Tài khoản của tôi\",\n \"profile\": \"Hồ sơ\",\n \"logout\": \"Đăng xuất\",\n \"searchServices\": \"Tìm dịch vụ...\",\n \"noServiceFound\": \"Không tìm thấy dịch vụ\"\n },\n \"myTasks\": {\n \"title\": \"Task của tôi\",\n \"count\": \"{{count}} task\",\n \"noTasks\": \"Không có task nào được giao\"\n },\n \"status\": {\n \"backlog\": \"Backlog\",\n \"todo\": \"Cần làm\",\n \"inProgress\": \"Đang làm\",\n \"review\": \"Review\",\n \"done\": \"Hoàn thành\"\n },\n \"priority\": {\n \"low\": \"Low\",\n \"medium\": \"Medium\",\n \"high\": \"High\",\n \"urgent\": \"Urgent\"\n },\n \"service\": {\n \"hr\": \"Nhân sự (HR)\",\n \"employeeManagement\": \"Quản lý nhân viên\",\n \"attendance\": \"Chấm công\",\n \"training\": \"Đào tạo\",\n \"recruitment\": \"Tuyển dụng\",\n \"accounting\": \"Kế toán & Tài chính\",\n \"accountingLabel\": \"Kế toán\",\n \"invoice\": \"Hóa đơn\",\n \"cashFund\": \"Quỹ tiền mặt\",\n \"financialReport\": \"Báo cáo tài chính\",\n \"sales\": \"Kinh doanh & Bán hàng\",\n \"pos\": \"Bán hàng (POS)\",\n \"payment\": \"Thanh toán\",\n \"crm\": \"CRM\",\n \"marketing\": \"Marketing\",\n \"operations\": \"Vận hành\",\n \"warehouse\": \"Kho & Tồn kho\",\n \"shipping\": \"Vận chuyển\",\n \"facilityManagement\": \"Quản lý cơ sở\",\n \"maintenance\": \"Bảo trì\",\n \"support\": \"Hỗ trợ & Khác\",\n \"helpdesk\": \"Helpdesk\",\n \"reportBI\": \"Báo cáo & BI\",\n \"systemSettings\": \"Cài đặt hệ thống\"\n },\n \"notification\": {\n \"assignedTask\": \"đã giao task cho bạn\",\n \"commentedTask\": \"đã comment trong task\",\n \"completedTask\": \"đã hoàn thành task\",\n \"minutesAgo\": \"{{count}} phút trước\",\n \"hoursAgo\": \"{{count}} giờ trước\",\n \"daysAgo\": \"{{count}} ngày trước\"\n },\n \"org\": {\n \"noOrgSelected\": \"Chưa chọn tổ chức\",\n \"noBranchSelected\": \"Chưa chọn chi nhánh\",\n \"selectOrg\": \"Chọn Tổ chức\",\n \"selectBranch\": \"Chọn Chi nhánh\",\n \"selectOrgDesc\": \"Vui lòng chọn tổ chức bạn muốn làm việc.\",\n \"selectBranchDesc\": \"Chọn chi nhánh của tổ chức để tiếp tục.\",\n \"orgStep\": \"Tổ chức\",\n \"branchStep\": \"Chi nhánh\",\n \"branchCount\": \"{{count}} chi nhánh\",\n \"selectedOrg\": \"Tổ chức đã chọn\",\n \"searchBranch\": \"Tìm chi nhánh...\",\n \"noBranchFound\": \"Không tìm thấy chi nhánh\"\n },\n \"settings\": {\n \"title\": \"Cài đặt\",\n \"subtitle\": \"Quản lý thông tin tài khoản và tùy chỉnh hệ thống\",\n \"profileTab\": \"Hồ sơ\",\n \"notificationsTab\": \"Thông báo\",\n \"securityTab\": \"Bảo mật\",\n \"preferencesTab\": \"Tùy chỉnh\",\n \"personalInfo\": \"Thông tin cá nhân\",\n \"personalInfoDesc\": \"Cập nhật thông tin hồ sơ và ảnh đại diện của bạn\",\n \"changePhoto\": \"Thay đổi ảnh\",\n \"photoHint\": \"JPG, PNG hoặc GIF. Tối đa 2MB\",\n \"firstName\": \"Họ\",\n \"lastName\": \"Tên\",\n \"email\": \"Email\",\n \"phone\": \"Số điện thoại\",\n \"bio\": \"Giới thiệu\",\n \"bioPlaceholder\": \"Viết vài dòng về bản thân...\",\n \"saveSuccess\": \"Cài đặt đã được lưu thành công!\",\n \"emailNotifications\": \"Thông báo Email\",\n \"emailNotificationsDesc\": \"Quản lý thông báo gửi đến email của bạn\",\n \"receiveEmailNotif\": \"Nhận thông báo email\",\n \"receiveEmailNotifDesc\": \"Nhận email về các hoạt động quan trọng\",\n \"taskUpdates\": \"Cập nhật task\",\n \"taskUpdatesDesc\": \"Thông báo khi có task mới được giao hoặc cập nhật\",\n \"newComments\": \"Bình luận mới\",\n \"newCommentsDesc\": \"Thông báo khi có người bình luận trong task của bạn\",\n \"pushNotifications\": \"Thông báo Push\",\n \"pushNotificationsDesc\": \"Quản lý thông báo hiển thị trên trình duyệt\",\n \"enablePush\": \"Bật thông báo push\",\n \"enablePushDesc\": \"Hiển thị thông báo trên desktop\",\n \"changePassword\": \"Đổi mật khẩu\",\n \"changePasswordDesc\": \"Cập nhật mật khẩu để bảo vệ tài khoản của bạn\",\n \"currentPassword\": \"Mật khẩu hiện tại\",\n \"newPassword\": \"Mật khẩu mới\",\n \"confirmPassword\": \"Xác nhận mật khẩu mới\",\n \"updatePassword\": \"Cập nhật mật khẩu\",\n \"passwordUpdated\": \"Mật khẩu đã được cập nhật!\",\n \"twoFactor\": \"Xác thực hai yếu tố\",\n \"twoFactorDesc\": \"Tăng cường bảo mật tài khoản với xác thực hai yếu tố\",\n \"enable2FA\": \"Bật xác thực 2FA\",\n \"enable2FADesc\": \"Yêu cầu mã xác thực khi đăng nhập\",\n \"appearance\": \"Giao diện\",\n \"appearanceDesc\": \"Tùy chỉnh giao diện theo sở thích của bạn\",\n \"theme\": \"Chủ đề\",\n \"themeLight\": \"Sáng\",\n \"themeDark\": \"Tối\",\n \"themeSystem\": \"Theo hệ thống\",\n \"language\": \"Ngôn ngữ\",\n \"timezone\": \"Múi giờ\"\n },\n \"login\": {\n \"subtitle\": \"Quản lý dự án hiệu quả\",\n \"title\": \"Đăng nhập\",\n \"emailLabel\": \"Email\",\n \"passwordLabel\": \"Mật khẩu\",\n \"forgotPassword\": \"Quên mật khẩu?\",\n \"forgotPasswordMsg\": \"Tính năng đặt lại mật khẩu sẽ được triển khai sau\",\n \"passwordPlaceholder\": \"Nhập mật khẩu\",\n \"rememberMe\": \"Ghi nhớ đăng nhập\",\n \"loggingIn\": \"Đang đăng nhập...\",\n \"loginButton\": \"Đăng nhập\",\n \"emptyFieldsError\": \"Vui lòng nhập đầy đủ email và mật khẩu\",\n \"success\": \"Đăng nhập thành công!\",\n \"demoPassword\": \"Password: bất kỳ\"\n },\n \"notFound\": {\n \"title\": \"Không tìm thấy trang\",\n \"description\": \"Xin lỗi, trang bạn đang tìm kiếm không tồn tại hoặc đã được di chuyển.\",\n \"goBack\": \"Quay lại\",\n \"goHome\": \"Về trang chủ\"\n },\n \"datePicker\": {\n \"selectDate\": \"Chọn ngày\",\n \"selectDateRange\": \"Chọn khoảng ngày\"\n }\n}\n","{\n \"common\": {\n \"save\": \"変更を保存\",\n \"cancel\": \"キャンセル\",\n \"delete\": \"削除\",\n \"edit\": \"編集\",\n \"copy\": \"コピー\",\n \"search\": \"検索\",\n \"filter\": \"フィルター\",\n \"close\": \"閉じる\",\n \"back\": \"戻る\",\n \"next\": \"次へ\",\n \"complete\": \"完了\",\n \"create\": \"作成\",\n \"send\": \"送信\",\n \"today\": \"今日\",\n \"yesterday\": \"昨日\",\n \"viewAll\": \"すべて表示\",\n \"notFound\": \"見つかりません\",\n \"noData\": \"データなし\",\n \"loading\": \"読み込み中...\",\n \"progress\": \"進捗\",\n \"members\": \"メンバー\",\n \"tasks\": \"タスク\",\n \"completed\": \"完了\",\n \"days\": \"日\",\n \"download\": \"ダウンロード\",\n \"details\": \"詳細\",\n \"preview\": \"プレビュー\",\n \"assignToMe\": \"自分に割り当て\"\n },\n \"sidebar\": {\n \"projects\": \"プロジェクト\",\n \"documents\": \"ドキュメント\",\n \"settings\": \"設定\",\n \"recentProjects\": \"最近のプロジェクト\",\n \"allProjects\": \"すべてのプロジェクト\",\n \"searchProject\": \"プロジェクトを検索...\",\n \"backToList\": \"リストに戻る\",\n \"collapse\": \"折りたたむ\",\n \"expandSidebar\": \"サイドバーを展開\",\n \"collapseSidebar\": \"サイドバーを折りたたむ\"\n },\n \"header\": {\n \"searchPlaceholder\": \"タスク、プロジェクトを検索...\",\n \"services\": \"サービス\",\n \"notifications\": \"通知\",\n \"viewAllNotifications\": \"すべての通知を表示\",\n \"myAccount\": \"マイアカウント\",\n \"profile\": \"プロフィール\",\n \"logout\": \"ログアウト\",\n \"searchServices\": \"サービスを検索...\",\n \"noServiceFound\": \"サービスが見つかりません\"\n },\n \"myTasks\": {\n \"title\": \"マイタスク\",\n \"count\": \"{{count}} タスク\",\n \"noTasks\": \"割り当てられたタスクはありません\"\n },\n \"status\": {\n \"backlog\": \"バックログ\",\n \"todo\": \"未着手\",\n \"inProgress\": \"進行中\",\n \"review\": \"レビュー\",\n \"done\": \"完了\"\n },\n \"priority\": {\n \"low\": \"低\",\n \"medium\": \"中\",\n \"high\": \"高\",\n \"urgent\": \"緊急\"\n },\n \"service\": {\n \"hr\": \"人事 (HR)\",\n \"employeeManagement\": \"従業員管理\",\n \"attendance\": \"勤怠管理\",\n \"training\": \"研修\",\n \"recruitment\": \"採用\",\n \"accounting\": \"会計・財務\",\n \"accountingLabel\": \"会計\",\n \"invoice\": \"請求書\",\n \"cashFund\": \"現金管理\",\n \"financialReport\": \"財務レポート\",\n \"sales\": \"営業・販売\",\n \"pos\": \"POS販売\",\n \"payment\": \"決済\",\n \"crm\": \"CRM\",\n \"marketing\": \"マーケティング\",\n \"operations\": \"オペレーション\",\n \"warehouse\": \"倉庫・在庫\",\n \"shipping\": \"配送\",\n \"facilityManagement\": \"施設管理\",\n \"maintenance\": \"メンテナンス\",\n \"support\": \"サポート・その他\",\n \"helpdesk\": \"ヘルプデスク\",\n \"reportBI\": \"レポート & BI\",\n \"systemSettings\": \"システム設定\"\n },\n \"notification\": {\n \"assignedTask\": \"タスクを割り当てました\",\n \"commentedTask\": \"タスクにコメントしました\",\n \"completedTask\": \"タスクを完了しました\",\n \"minutesAgo\": \"{{count}}分前\",\n \"hoursAgo\": \"{{count}}時間前\",\n \"daysAgo\": \"{{count}}日前\"\n },\n \"org\": {\n \"noOrgSelected\": \"組織が未選択\",\n \"noBranchSelected\": \"支店が未選択\",\n \"selectOrg\": \"組織を選択\",\n \"selectBranch\": \"支店を選択\",\n \"selectOrgDesc\": \"作業する組織を選択してください。\",\n \"selectBranchDesc\": \"続行する支店を選択してください。\",\n \"orgStep\": \"組織\",\n \"branchStep\": \"支店\",\n \"branchCount\": \"{{count}} 支店\",\n \"selectedOrg\": \"選択された組織\",\n \"searchBranch\": \"支店を検索...\",\n \"noBranchFound\": \"支店が見つかりません\"\n },\n \"settings\": {\n \"title\": \"設定\",\n \"subtitle\": \"アカウントとシステム設定の管理\",\n \"profileTab\": \"プロフィール\",\n \"notificationsTab\": \"通知\",\n \"securityTab\": \"セキュリティ\",\n \"preferencesTab\": \"カスタマイズ\",\n \"personalInfo\": \"個人情報\",\n \"personalInfoDesc\": \"プロフィールとアバターを更新\",\n \"changePhoto\": \"写真を変更\",\n \"photoHint\": \"JPG、PNG、GIF。最大2MB\",\n \"firstName\": \"姓\",\n \"lastName\": \"名\",\n \"email\": \"メール\",\n \"phone\": \"電話番号\",\n \"bio\": \"自己紹介\",\n \"bioPlaceholder\": \"自己紹介を書いてください...\",\n \"saveSuccess\": \"設定が保存されました!\",\n \"emailNotifications\": \"メール通知\",\n \"emailNotificationsDesc\": \"メール通知の管理\",\n \"receiveEmailNotif\": \"メール通知を受信\",\n \"receiveEmailNotifDesc\": \"重要なアクティビティのメールを受信\",\n \"taskUpdates\": \"タスク更新\",\n \"taskUpdatesDesc\": \"タスクの割り当てや更新時に通知\",\n \"newComments\": \"新しいコメント\",\n \"newCommentsDesc\": \"タスクにコメントがあった時に通知\",\n \"pushNotifications\": \"プッシュ通知\",\n \"pushNotificationsDesc\": \"ブラウザ通知の管理\",\n \"enablePush\": \"プッシュ通知を有効化\",\n \"enablePushDesc\": \"デスクトップ通知を表示\",\n \"changePassword\": \"パスワード変更\",\n \"changePasswordDesc\": \"アカウントを保護するためにパスワードを更新\",\n \"currentPassword\": \"現在のパスワード\",\n \"newPassword\": \"新しいパスワード\",\n \"confirmPassword\": \"新しいパスワードの確認\",\n \"updatePassword\": \"パスワードを更新\",\n \"passwordUpdated\": \"パスワードが更新されました!\",\n \"twoFactor\": \"二要素認証\",\n \"twoFactorDesc\": \"二要素認証でアカウントセキュリティを強化\",\n \"enable2FA\": \"2FAを有効化\",\n \"enable2FADesc\": \"ログイン時に認証コードを要求\",\n \"appearance\": \"外観\",\n \"appearanceDesc\": \"お好みに合わせてインターフェースをカスタマイズ\",\n \"theme\": \"テーマ\",\n \"themeLight\": \"ライト\",\n \"themeDark\": \"ダーク\",\n \"themeSystem\": \"システム\",\n \"language\": \"言語\",\n \"timezone\": \"タイムゾーン\"\n },\n \"login\": {\n \"subtitle\": \"効率的なプロジェクト管理\",\n \"title\": \"ログイン\",\n \"emailLabel\": \"メール\",\n \"passwordLabel\": \"パスワード\",\n \"forgotPassword\": \"パスワードを忘れた?\",\n \"forgotPasswordMsg\": \"パスワードリセット機能は近日公開予定\",\n \"passwordPlaceholder\": \"パスワードを入力\",\n \"rememberMe\": \"ログインを記憶\",\n \"loggingIn\": \"ログイン中...\",\n \"loginButton\": \"ログイン\",\n \"emptyFieldsError\": \"メールとパスワードを入力してください\",\n \"success\": \"ログインに成功しました!\",\n \"demoPassword\": \"Password: 任意\"\n },\n \"notFound\": {\n \"title\": \"ページが見つかりません\",\n \"description\": \"申し訳ありませんが、お探しのページは存在しないか、移動されました。\",\n \"goBack\": \"戻る\",\n \"goHome\": \"ホームへ\"\n },\n \"datePicker\": {\n \"selectDate\": \"日付を選択\",\n \"selectDateRange\": \"期間を選択\"\n }\n}\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport shellEn from './locales/en.json';\nimport shellVi from './locales/vi.json';\nimport shellJa from './locales/ja.json';\n\nexport type SupportedLanguage = 'vi' | 'en' | 'ja';\n\nexport const languageNames: Record<SupportedLanguage, string> = {\n vi: 'Tiếng Việt',\n en: 'English',\n ja: '日本語',\n};\n\nfunction loadSavedLanguage(): SupportedLanguage {\n if (typeof window === 'undefined') return 'vi';\n const saved = localStorage.getItem('omnify_language');\n if (saved === 'vi' || saved === 'en' || saved === 'ja') return saved;\n return 'vi';\n}\n\n// Initialize i18next with shell namespace built-in\ni18n.use(initReactI18next).init({\n resources: {\n en: { shell: shellEn },\n vi: { shell: shellVi },\n ja: { shell: shellJa },\n },\n lng: loadSavedLanguage(),\n fallbackLng: 'vi',\n defaultNS: 'shell',\n fallbackNS: 'shell',\n ns: ['shell'],\n interpolation: {\n escapeValue: false, // React already escapes\n },\n});\n\nexport interface InitOmnifyI18nOptions {\n /** Add service-specific namespace translations */\n namespaces?: Record<string, Record<string, Record<string, unknown>>>;\n /** Override shell translation keys */\n overrides?: Record<string, Record<string, string>>;\n}\n\n/**\n * Initialize Omnify i18n for a service.\n * Call this once in your service's entry point.\n *\n * @example\n * ```ts\n * import { initOmnifyI18n } from '@omnifyjp/ui';\n * import pmVi from './locales/vi.json';\n * import pmEn from './locales/en.json';\n *\n * initOmnifyI18n({\n * namespaces: { pm: { vi: pmVi, en: pmEn } },\n * overrides: {\n * vi: { 'common.save': 'Lưu hồ sơ' },\n * }\n * });\n * ```\n */\nexport function initOmnifyI18n(options: InitOmnifyI18nOptions = {}) {\n const { namespaces, overrides } = options;\n\n // Add service namespaces\n if (namespaces) {\n for (const [ns, langs] of Object.entries(namespaces)) {\n for (const [lang, resources] of Object.entries(langs)) {\n i18n.addResourceBundle(lang, ns, resources, true, true);\n }\n }\n }\n\n // Apply overrides to shell namespace\n if (overrides) {\n for (const [lang, keys] of Object.entries(overrides)) {\n // Convert flat keys like 'common.save' to nested { common: { save: '...' } }\n const nested: Record<string, Record<string, string>> = {};\n for (const [flatKey, value] of Object.entries(keys)) {\n const parts = flatKey.split('.');\n if (parts.length === 2) {\n const [section, key] = parts;\n if (!nested[section]) nested[section] = {};\n nested[section][key] = value;\n }\n }\n i18n.addResourceBundle(lang, 'shell', nested, true, true);\n }\n }\n}\n\n/**\n * Change the current language.\n * Persists to localStorage and updates i18next.\n */\nexport function changeLanguage(lang: SupportedLanguage) {\n localStorage.setItem('omnify_language', lang);\n return i18n.changeLanguage(lang);\n}\n\nexport { i18n };\nexport default i18n;\n"]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { createContext, useState, useEffect, useContext } from 'react';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
// src/contexts/OrganizationContext.tsx
|
|
5
|
+
var OrganizationContext = createContext(void 0);
|
|
6
|
+
function loadSavedOrganization(organizations) {
|
|
7
|
+
if (typeof window === "undefined") return null;
|
|
8
|
+
const savedOrgId = localStorage.getItem("selectedOrganizationId");
|
|
9
|
+
if (savedOrgId) {
|
|
10
|
+
return organizations.find((o) => o.id === savedOrgId) ?? null;
|
|
11
|
+
}
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
function loadSavedBranch(branches) {
|
|
15
|
+
if (typeof window === "undefined") return null;
|
|
16
|
+
const savedBranchId = localStorage.getItem("selectedBranchId");
|
|
17
|
+
if (savedBranchId) {
|
|
18
|
+
return branches.find((b) => b.id === savedBranchId) ?? null;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
function OrganizationProvider({
|
|
23
|
+
children,
|
|
24
|
+
organizations = [],
|
|
25
|
+
branches = [],
|
|
26
|
+
onOrganizationChange,
|
|
27
|
+
onBranchChange
|
|
28
|
+
}) {
|
|
29
|
+
const [selectedOrganization, setSelectedOrganizationState] = useState(
|
|
30
|
+
() => loadSavedOrganization(organizations)
|
|
31
|
+
);
|
|
32
|
+
const [selectedBranch, setSelectedBranchState] = useState(
|
|
33
|
+
() => loadSavedBranch(branches)
|
|
34
|
+
);
|
|
35
|
+
const setSelectedOrganization = (org) => {
|
|
36
|
+
setSelectedOrganizationState(org);
|
|
37
|
+
if (org) onOrganizationChange?.(org);
|
|
38
|
+
};
|
|
39
|
+
const setSelectedBranch = (branch) => {
|
|
40
|
+
setSelectedBranchState(branch);
|
|
41
|
+
if (branch) onBranchChange?.(branch);
|
|
42
|
+
};
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (selectedOrganization) {
|
|
45
|
+
localStorage.setItem("selectedOrganizationId", selectedOrganization.id);
|
|
46
|
+
} else {
|
|
47
|
+
localStorage.removeItem("selectedOrganizationId");
|
|
48
|
+
}
|
|
49
|
+
}, [selectedOrganization]);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (selectedBranch) {
|
|
52
|
+
localStorage.setItem("selectedBranchId", selectedBranch.id);
|
|
53
|
+
} else {
|
|
54
|
+
localStorage.removeItem("selectedBranchId");
|
|
55
|
+
}
|
|
56
|
+
}, [selectedBranch]);
|
|
57
|
+
const getBranchesByOrg = (orgId) => {
|
|
58
|
+
return branches.filter((b) => b.organizationId === orgId);
|
|
59
|
+
};
|
|
60
|
+
const isSetupComplete = selectedOrganization !== null && selectedBranch !== null;
|
|
61
|
+
const value = {
|
|
62
|
+
organizations,
|
|
63
|
+
branches,
|
|
64
|
+
selectedOrganization,
|
|
65
|
+
selectedBranch,
|
|
66
|
+
setSelectedOrganization,
|
|
67
|
+
setSelectedBranch,
|
|
68
|
+
getBranchesByOrg,
|
|
69
|
+
isSetupComplete
|
|
70
|
+
};
|
|
71
|
+
return /* @__PURE__ */ jsx(OrganizationContext.Provider, { value, children });
|
|
72
|
+
}
|
|
73
|
+
function useOrganization() {
|
|
74
|
+
const context = useContext(OrganizationContext);
|
|
75
|
+
if (context === void 0) {
|
|
76
|
+
throw new Error("useOrganization must be used within an OrganizationProvider");
|
|
77
|
+
}
|
|
78
|
+
return context;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export { OrganizationProvider, useOrganization };
|
|
82
|
+
//# sourceMappingURL=chunk-SHHZRZMM.js.map
|
|
83
|
+
//# sourceMappingURL=chunk-SHHZRZMM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/contexts/OrganizationContext.tsx"],"names":[],"mappings":"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","file":"chunk-SHHZRZMM.js","sourcesContent":["import { createContext, useContext, useState, useEffect, ReactNode } from 'react';\nimport type { Organization, Branch } from '../types';\n\ninterface OrganizationContextType {\n organizations: Organization[];\n branches: Branch[];\n selectedOrganization: Organization | null;\n selectedBranch: Branch | null;\n setSelectedOrganization: (org: Organization | null) => void;\n setSelectedBranch: (branch: Branch | null) => void;\n getBranchesByOrg: (orgId: string) => Branch[];\n isSetupComplete: boolean;\n}\n\nconst OrganizationContext = createContext<OrganizationContextType | undefined>(undefined);\n\ninterface OrganizationProviderProps {\n children: ReactNode;\n organizations?: Organization[];\n branches?: Branch[];\n onOrganizationChange?: (org: Organization) => void;\n onBranchChange?: (branch: Branch) => void;\n}\n\nfunction loadSavedOrganization(organizations: Organization[]): Organization | null {\n if (typeof window === 'undefined') return null;\n const savedOrgId = localStorage.getItem('selectedOrganizationId');\n if (savedOrgId) {\n return organizations.find(o => o.id === savedOrgId) ?? null;\n }\n return null;\n}\n\nfunction loadSavedBranch(branches: Branch[]): Branch | null {\n if (typeof window === 'undefined') return null;\n const savedBranchId = localStorage.getItem('selectedBranchId');\n if (savedBranchId) {\n return branches.find(b => b.id === savedBranchId) ?? null;\n }\n return null;\n}\n\nexport function OrganizationProvider({\n children,\n organizations = [],\n branches = [],\n onOrganizationChange,\n onBranchChange,\n}: OrganizationProviderProps) {\n const [selectedOrganization, setSelectedOrganizationState] = useState<Organization | null>(\n () => loadSavedOrganization(organizations)\n );\n const [selectedBranch, setSelectedBranchState] = useState<Branch | null>(\n () => loadSavedBranch(branches)\n );\n\n const setSelectedOrganization = (org: Organization | null) => {\n setSelectedOrganizationState(org);\n if (org) onOrganizationChange?.(org);\n };\n\n const setSelectedBranch = (branch: Branch | null) => {\n setSelectedBranchState(branch);\n if (branch) onBranchChange?.(branch);\n };\n\n useEffect(() => {\n if (selectedOrganization) {\n localStorage.setItem('selectedOrganizationId', selectedOrganization.id);\n } else {\n localStorage.removeItem('selectedOrganizationId');\n }\n }, [selectedOrganization]);\n\n useEffect(() => {\n if (selectedBranch) {\n localStorage.setItem('selectedBranchId', selectedBranch.id);\n } else {\n localStorage.removeItem('selectedBranchId');\n }\n }, [selectedBranch]);\n\n const getBranchesByOrg = (orgId: string) => {\n return branches.filter(b => b.organizationId === orgId);\n };\n\n const isSetupComplete = selectedOrganization !== null && selectedBranch !== null;\n\n const value: OrganizationContextType = {\n organizations,\n branches,\n selectedOrganization,\n selectedBranch,\n setSelectedOrganization,\n setSelectedBranch,\n getBranchesByOrg,\n isSetupComplete,\n };\n\n return (\n <OrganizationContext.Provider value={value}>\n {children}\n </OrganizationContext.Provider>\n );\n}\n\nexport function useOrganization() {\n const context = useContext(OrganizationContext);\n if (context === undefined) {\n throw new Error('useOrganization must be used within an OrganizationProvider');\n }\n return context;\n}\n"]}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { OrganizationSelector } from './chunk-DTM76EJD.js';
|
|
2
|
+
import { useOrganization } from './chunk-SHHZRZMM.js';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { useLocation, useParams, Link } from 'react-router';
|
|
5
|
+
import { useTranslation } from 'react-i18next';
|
|
6
|
+
import { Button } from '@omnifyjp/ui-components/components/button';
|
|
7
|
+
import { Separator } from '@omnifyjp/ui-components/components/separator';
|
|
8
|
+
import { Popover, PopoverTrigger, PopoverContent } from '@omnifyjp/ui-components/components/popover';
|
|
9
|
+
import { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent } from '@omnifyjp/ui-components/components/tooltip';
|
|
10
|
+
import { ChevronsUpDown, Search, ChevronsRight, ChevronsLeft, ChevronRight } from 'lucide-react';
|
|
11
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
12
|
+
|
|
13
|
+
function Sidebar({ config }) {
|
|
14
|
+
const location = useLocation();
|
|
15
|
+
const params = useParams();
|
|
16
|
+
const [collapsed, setCollapsed] = useState(false);
|
|
17
|
+
const [contextSwitcherOpen, setContextSwitcherOpen] = useState(false);
|
|
18
|
+
const [contextSearch, setContextSearch] = useState("");
|
|
19
|
+
const [expandedGroups, setExpandedGroups] = useState(/* @__PURE__ */ new Set());
|
|
20
|
+
const { t } = useTranslation("shell");
|
|
21
|
+
const { selectedOrganization, selectedBranch } = useOrganization();
|
|
22
|
+
const { app, sidebar } = config;
|
|
23
|
+
const contextParamValue = sidebar.contextMenu ? params[sidebar.contextMenu.paramName] : void 0;
|
|
24
|
+
const isInContext = !!contextParamValue;
|
|
25
|
+
const isActive = (path) => {
|
|
26
|
+
return location.pathname === path || location.pathname.startsWith(path + "/");
|
|
27
|
+
};
|
|
28
|
+
const renderMenuItem = (item, active) => {
|
|
29
|
+
const Icon = item.icon;
|
|
30
|
+
const path = item.path;
|
|
31
|
+
const content = /* @__PURE__ */ jsxs(
|
|
32
|
+
Link,
|
|
33
|
+
{
|
|
34
|
+
to: path,
|
|
35
|
+
className: `flex items-center ${collapsed ? "justify-center" : "gap-2"} px-3 py-2 rounded-md text-sm transition-colors ${active ? "bg-sidebar-primary/10 text-sidebar-primary font-medium" : "text-sidebar-foreground hover:bg-sidebar-accent"}`,
|
|
36
|
+
children: [
|
|
37
|
+
/* @__PURE__ */ jsx(Icon, { className: "w-4 h-4 flex-shrink-0" }),
|
|
38
|
+
!collapsed && /* @__PURE__ */ jsx("span", { children: item.label }),
|
|
39
|
+
!collapsed && item.badge !== void 0 && item.badge > 0 && /* @__PURE__ */ jsx("span", { className: "ml-auto text-xs bg-muted text-muted-foreground px-1.5 py-0.5 rounded-full", children: item.badge })
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
if (collapsed) {
|
|
44
|
+
return /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
45
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: content }),
|
|
46
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "right", className: "font-medium", children: item.label })
|
|
47
|
+
] }) }, path);
|
|
48
|
+
}
|
|
49
|
+
return /* @__PURE__ */ jsx("div", { children: content }, path);
|
|
50
|
+
};
|
|
51
|
+
const isGroupActive = (item) => {
|
|
52
|
+
if (item.children) {
|
|
53
|
+
return item.children.some((child) => child.path ? isActive(child.path) : false);
|
|
54
|
+
}
|
|
55
|
+
return item.path ? isActive(item.path) : false;
|
|
56
|
+
};
|
|
57
|
+
const toggleGroup = (label) => {
|
|
58
|
+
setExpandedGroups((prev) => {
|
|
59
|
+
const next = new Set(prev);
|
|
60
|
+
if (next.has(label)) {
|
|
61
|
+
next.delete(label);
|
|
62
|
+
} else {
|
|
63
|
+
next.add(label);
|
|
64
|
+
}
|
|
65
|
+
return next;
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
const renderMenuItemOrGroup = (item) => {
|
|
69
|
+
if (!item.children) {
|
|
70
|
+
return renderMenuItem(item, item.path ? isActive(item.path) : false);
|
|
71
|
+
}
|
|
72
|
+
const groupActive = isGroupActive(item);
|
|
73
|
+
const isExpanded = expandedGroups.has(item.label) || groupActive;
|
|
74
|
+
const Icon = item.icon;
|
|
75
|
+
if (collapsed) {
|
|
76
|
+
return /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
77
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
78
|
+
"button",
|
|
79
|
+
{
|
|
80
|
+
onClick: () => toggleGroup(item.label),
|
|
81
|
+
className: `flex items-center justify-center w-full px-3 py-2 rounded-md text-sm transition-colors ${groupActive ? "bg-sidebar-primary/10 text-sidebar-primary font-medium" : "text-sidebar-foreground hover:bg-sidebar-accent"}`,
|
|
82
|
+
children: /* @__PURE__ */ jsx(Icon, { className: "w-4 h-4 flex-shrink-0" })
|
|
83
|
+
}
|
|
84
|
+
) }),
|
|
85
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "right", className: "font-medium", children: item.label })
|
|
86
|
+
] }) }, item.label);
|
|
87
|
+
}
|
|
88
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
89
|
+
/* @__PURE__ */ jsxs(
|
|
90
|
+
"button",
|
|
91
|
+
{
|
|
92
|
+
onClick: () => toggleGroup(item.label),
|
|
93
|
+
className: `flex items-center gap-2 w-full px-3 py-2 rounded-md text-sm transition-colors ${groupActive ? "text-sidebar-primary font-medium" : "text-sidebar-foreground hover:bg-sidebar-accent"}`,
|
|
94
|
+
children: [
|
|
95
|
+
/* @__PURE__ */ jsx(Icon, { className: "w-4 h-4 flex-shrink-0" }),
|
|
96
|
+
/* @__PURE__ */ jsx("span", { children: item.label }),
|
|
97
|
+
/* @__PURE__ */ jsx(ChevronRight, { className: `w-3.5 h-3.5 ml-auto text-muted-foreground transition-transform duration-200 ${isExpanded ? "rotate-90" : ""}` })
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
),
|
|
101
|
+
isExpanded && /* @__PURE__ */ jsx("div", { className: "ml-4 pl-2 border-l border-sidebar-border space-y-0.5 mt-0.5", children: item.children.map((child) => renderMenuItem(child, child.path ? isActive(child.path) : false)) })
|
|
102
|
+
] }, item.label);
|
|
103
|
+
};
|
|
104
|
+
const contextMenuItems = isInContext && sidebar.contextMenu ? sidebar.contextMenu.getItems(contextParamValue) : [];
|
|
105
|
+
const contextHeader = isInContext && sidebar.contextMenu?.getHeader ? sidebar.contextMenu.getHeader(contextParamValue) : null;
|
|
106
|
+
const footerItems = isInContext && sidebar.contextMenu?.getFooterItems ? sidebar.contextMenu.getFooterItems() : [];
|
|
107
|
+
return /* @__PURE__ */ jsxs("aside", { className: `${collapsed ? "w-16" : "w-64"} bg-sidebar border-r border-sidebar-border flex flex-col transition-all duration-300`, children: [
|
|
108
|
+
/* @__PURE__ */ jsx("div", { className: `h-header border-b border-sidebar-border flex items-center ${collapsed ? "justify-center" : "px-4"} transition-all duration-300`, children: /* @__PURE__ */ jsxs(Link, { to: "/", className: "flex items-center gap-2", children: [
|
|
109
|
+
/* @__PURE__ */ jsx("div", { className: `w-8 h-8 rounded-lg flex items-center justify-center flex-shrink-0 ${app.logo.color ? "" : "bg-primary"}`, style: app.logo.color ? { backgroundColor: app.logo.color } : void 0, children: /* @__PURE__ */ jsx(app.logo.icon, { className: "w-4 h-4 text-white" }) }),
|
|
110
|
+
!collapsed && /* @__PURE__ */ jsx("span", { className: "font-bold text-sm", children: app.logo.text })
|
|
111
|
+
] }) }),
|
|
112
|
+
/* @__PURE__ */ jsx("nav", { className: "flex-1 px-3 py-3 overflow-y-auto", children: isInContext ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
113
|
+
contextHeader && !collapsed ? /* @__PURE__ */ jsxs(Popover, { open: contextSwitcherOpen, onOpenChange: (open) => {
|
|
114
|
+
setContextSwitcherOpen(open);
|
|
115
|
+
if (!open) setContextSearch("");
|
|
116
|
+
}, children: [
|
|
117
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs("button", { className: "w-full mb-3 px-3 py-2 flex items-center gap-2 rounded-md hover:bg-sidebar-accent transition-colors text-left", children: [
|
|
118
|
+
contextHeader,
|
|
119
|
+
/* @__PURE__ */ jsx(ChevronsUpDown, { className: "w-3.5 h-3.5 text-muted-foreground flex-shrink-0" })
|
|
120
|
+
] }) }),
|
|
121
|
+
/* @__PURE__ */ jsx(PopoverContent, { side: "right", align: "start", className: "w-72 p-0", children: /* @__PURE__ */ jsx("div", { className: "p-2 border-b", children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
122
|
+
/* @__PURE__ */ jsx(Search, { className: "absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground" }),
|
|
123
|
+
/* @__PURE__ */ jsx(
|
|
124
|
+
"input",
|
|
125
|
+
{
|
|
126
|
+
className: "w-full pl-8 pr-3 py-1.5 text-sm border rounded-md outline-none focus:ring-1 focus:ring-ring bg-background",
|
|
127
|
+
placeholder: t("sidebar.searchProject"),
|
|
128
|
+
value: contextSearch,
|
|
129
|
+
onChange: (e) => setContextSearch(e.target.value),
|
|
130
|
+
autoFocus: true
|
|
131
|
+
}
|
|
132
|
+
)
|
|
133
|
+
] }) }) })
|
|
134
|
+
] }) : contextHeader && collapsed ? /* @__PURE__ */ jsx("div", { className: "mb-3 w-full flex justify-center py-1 rounded-md hover:bg-sidebar-accent transition-colors", children: contextHeader }) : null,
|
|
135
|
+
!collapsed && contextHeader && /* @__PURE__ */ jsx(Separator, { className: "my-3" }),
|
|
136
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-1", children: contextMenuItems.map((item) => {
|
|
137
|
+
const active = item.path ? isActive(item.path) : false;
|
|
138
|
+
return renderMenuItem(item, active);
|
|
139
|
+
}) }),
|
|
140
|
+
footerItems.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
141
|
+
!collapsed && /* @__PURE__ */ jsx(Separator, { className: "my-3" }),
|
|
142
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-1", children: footerItems.map((item) => renderMenuItem(item, false)) })
|
|
143
|
+
] })
|
|
144
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
145
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-1", children: sidebar.menuItems.map((item) => renderMenuItemOrGroup(item)) }),
|
|
146
|
+
sidebar.recentItems && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
147
|
+
!collapsed && /* @__PURE__ */ jsx(Separator, { className: "my-3" }),
|
|
148
|
+
!collapsed ? /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
149
|
+
/* @__PURE__ */ jsx("h3", { className: "px-3 py-1 text-xs font-medium text-muted-foreground uppercase tracking-wider", children: sidebar.recentItems.title }),
|
|
150
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: sidebar.recentItems.items.map((item) => /* @__PURE__ */ jsxs(
|
|
151
|
+
Link,
|
|
152
|
+
{
|
|
153
|
+
to: item.path,
|
|
154
|
+
className: "flex items-center gap-2 px-3 py-2 rounded-md text-sm text-sidebar-foreground hover:bg-sidebar-accent",
|
|
155
|
+
children: [
|
|
156
|
+
item.color && /* @__PURE__ */ jsx(
|
|
157
|
+
"div",
|
|
158
|
+
{
|
|
159
|
+
className: "w-5 h-5 rounded flex items-center justify-center text-white text-[9px] font-bold flex-shrink-0",
|
|
160
|
+
style: { backgroundColor: item.color },
|
|
161
|
+
children: item.badge
|
|
162
|
+
}
|
|
163
|
+
),
|
|
164
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: item.label })
|
|
165
|
+
]
|
|
166
|
+
},
|
|
167
|
+
item.path
|
|
168
|
+
)) })
|
|
169
|
+
] }) : /* @__PURE__ */ jsx("div", { className: "space-y-0.5 mt-3", children: sidebar.recentItems.items.map((item) => /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
170
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
171
|
+
Link,
|
|
172
|
+
{
|
|
173
|
+
to: item.path,
|
|
174
|
+
className: "flex justify-center px-3 py-2 rounded-md text-sidebar-foreground hover:bg-sidebar-accent",
|
|
175
|
+
children: item.color && /* @__PURE__ */ jsx(
|
|
176
|
+
"div",
|
|
177
|
+
{
|
|
178
|
+
className: "w-5 h-5 rounded flex items-center justify-center text-white text-[9px] font-bold",
|
|
179
|
+
style: { backgroundColor: item.color },
|
|
180
|
+
children: item.badge
|
|
181
|
+
}
|
|
182
|
+
)
|
|
183
|
+
}
|
|
184
|
+
) }),
|
|
185
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "right", children: /* @__PURE__ */ jsx("p", { className: "font-medium text-sm", children: item.label }) })
|
|
186
|
+
] }) }, item.path)) })
|
|
187
|
+
] })
|
|
188
|
+
] }) }),
|
|
189
|
+
/* @__PURE__ */ jsx("div", { className: "px-3 py-2 border-t border-sidebar-border", children: /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
190
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
191
|
+
Button,
|
|
192
|
+
{
|
|
193
|
+
variant: "ghost",
|
|
194
|
+
size: "sm",
|
|
195
|
+
onClick: () => setCollapsed(!collapsed),
|
|
196
|
+
className: `w-full h-8 ${collapsed ? "px-0 justify-center" : "justify-start"} hover:bg-sidebar-accent`,
|
|
197
|
+
children: collapsed ? /* @__PURE__ */ jsx(ChevronsRight, { className: "w-3.5 h-3.5 text-muted-foreground" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
198
|
+
/* @__PURE__ */ jsx(ChevronsLeft, { className: "w-3.5 h-3.5 text-muted-foreground mr-2" }),
|
|
199
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: t("sidebar.collapse") })
|
|
200
|
+
] })
|
|
201
|
+
}
|
|
202
|
+
) }),
|
|
203
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "right", children: collapsed ? t("sidebar.expandSidebar") : t("sidebar.collapseSidebar") })
|
|
204
|
+
] }) }) }),
|
|
205
|
+
!collapsed ? /* @__PURE__ */ jsx("div", { className: "border-t border-sidebar-border", children: /* @__PURE__ */ jsx(OrganizationSelector, { variant: "sidebar" }) }) : selectedOrganization && /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
206
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx("div", { className: "px-3 py-3 border-t border-sidebar-border flex justify-center cursor-pointer hover:bg-sidebar-accent transition-colors", children: /* @__PURE__ */ jsx(
|
|
207
|
+
"div",
|
|
208
|
+
{
|
|
209
|
+
className: "w-8 h-8 rounded-lg flex items-center justify-center text-white font-bold text-xs",
|
|
210
|
+
style: { backgroundColor: selectedOrganization.color },
|
|
211
|
+
children: selectedOrganization.shortName
|
|
212
|
+
}
|
|
213
|
+
) }) }),
|
|
214
|
+
/* @__PURE__ */ jsxs(TooltipContent, { side: "right", children: [
|
|
215
|
+
/* @__PURE__ */ jsx("p", { className: "font-semibold text-sm", children: selectedOrganization.name }),
|
|
216
|
+
selectedBranch && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: selectedBranch.name })
|
|
217
|
+
] })
|
|
218
|
+
] }) })
|
|
219
|
+
] });
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export { Sidebar };
|
|
223
|
+
//# sourceMappingURL=chunk-X57K24P3.js.map
|
|
224
|
+
//# sourceMappingURL=chunk-X57K24P3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Sidebar.tsx"],"names":[],"mappings":"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","file":"chunk-X57K24P3.js","sourcesContent":["import { useState } from 'react';\nimport { useLocation, useParams, Link } from 'react-router';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '@omnifyjp/ui-components/components/button';\nimport { Separator } from '@omnifyjp/ui-components/components/separator';\nimport { Popover, PopoverContent, PopoverTrigger } from '@omnifyjp/ui-components/components/popover';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@omnifyjp/ui-components/components/tooltip';\nimport {\n ChevronsLeft,\n ChevronsRight,\n ChevronsUpDown,\n ChevronRight,\n Search,\n} from 'lucide-react';\nimport { useOrganization } from '../contexts/OrganizationContext';\nimport { OrganizationSelector } from './OrganizationSelector';\nimport type { ShellConfig, SidebarMenuItem } from '../types';\n\ninterface SidebarProps {\n config: ShellConfig;\n}\n\nexport function Sidebar({ config }: SidebarProps) {\n const location = useLocation();\n const params = useParams();\n const [collapsed, setCollapsed] = useState(false);\n const [contextSwitcherOpen, setContextSwitcherOpen] = useState(false);\n const [contextSearch, setContextSearch] = useState('');\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set());\n const { t } = useTranslation('shell');\n const { selectedOrganization, selectedBranch } = useOrganization();\n\n const { app, sidebar } = config;\n\n // Determine if we're in context mode (e.g., inside a project)\n const contextParamValue = sidebar.contextMenu\n ? params[sidebar.contextMenu.paramName] as string | undefined\n : undefined;\n const isInContext = !!contextParamValue;\n\n const isActive = (path: string) => {\n return location.pathname === path || location.pathname.startsWith(path + '/');\n };\n\n const renderMenuItem = (item: SidebarMenuItem, active: boolean) => {\n const Icon = item.icon;\n const path = item.path!;\n const content = (\n <Link\n to={path}\n className={`flex items-center ${collapsed ? 'justify-center' : 'gap-2'} px-3 py-2 rounded-md text-sm transition-colors ${\n active\n ? 'bg-sidebar-primary/10 text-sidebar-primary font-medium'\n : 'text-sidebar-foreground hover:bg-sidebar-accent'\n }`}\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n {!collapsed && <span>{item.label}</span>}\n {!collapsed && item.badge !== undefined && item.badge > 0 && (\n <span className=\"ml-auto text-xs bg-muted text-muted-foreground px-1.5 py-0.5 rounded-full\">\n {item.badge}\n </span>\n )}\n </Link>\n );\n\n if (collapsed) {\n return (\n <TooltipProvider key={path} delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n {content}\n </TooltipTrigger>\n <TooltipContent side=\"right\" className=\"font-medium\">\n {item.label}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return <div key={path}>{content}</div>;\n };\n\n const isGroupActive = (item: SidebarMenuItem): boolean => {\n if (item.children) {\n return item.children.some(child => child.path ? isActive(child.path) : false);\n }\n return item.path ? isActive(item.path) : false;\n };\n\n const toggleGroup = (label: string) => {\n setExpandedGroups(prev => {\n const next = new Set(prev);\n if (next.has(label)) {\n next.delete(label);\n } else {\n next.add(label);\n }\n return next;\n });\n };\n\n const renderMenuItemOrGroup = (item: SidebarMenuItem) => {\n if (!item.children) {\n return renderMenuItem(item, item.path ? isActive(item.path) : false);\n }\n\n const groupActive = isGroupActive(item);\n const isExpanded = expandedGroups.has(item.label) || groupActive;\n const Icon = item.icon;\n\n if (collapsed) {\n return (\n <TooltipProvider key={item.label} delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => toggleGroup(item.label)}\n className={`flex items-center justify-center w-full px-3 py-2 rounded-md text-sm transition-colors ${\n groupActive\n ? 'bg-sidebar-primary/10 text-sidebar-primary font-medium'\n : 'text-sidebar-foreground hover:bg-sidebar-accent'\n }`}\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"right\" className=\"font-medium\">\n {item.label}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return (\n <div key={item.label}>\n <button\n onClick={() => toggleGroup(item.label)}\n className={`flex items-center gap-2 w-full px-3 py-2 rounded-md text-sm transition-colors ${\n groupActive\n ? 'text-sidebar-primary font-medium'\n : 'text-sidebar-foreground hover:bg-sidebar-accent'\n }`}\n >\n <Icon className=\"w-4 h-4 flex-shrink-0\" />\n <span>{item.label}</span>\n <ChevronRight className={`w-3.5 h-3.5 ml-auto text-muted-foreground transition-transform duration-200 ${isExpanded ? 'rotate-90' : ''}`} />\n </button>\n {isExpanded && (\n <div className=\"ml-4 pl-2 border-l border-sidebar-border space-y-0.5 mt-0.5\">\n {item.children.map(child => renderMenuItem(child, child.path ? isActive(child.path) : false))}\n </div>\n )}\n </div>\n );\n };\n\n // Get context menu items if in context mode\n const contextMenuItems = isInContext && sidebar.contextMenu\n ? sidebar.contextMenu.getItems(contextParamValue!)\n : [];\n\n const contextHeader = isInContext && sidebar.contextMenu?.getHeader\n ? sidebar.contextMenu.getHeader(contextParamValue!)\n : null;\n\n const footerItems = isInContext && sidebar.contextMenu?.getFooterItems\n ? sidebar.contextMenu.getFooterItems()\n : [];\n\n return (\n <aside className={`${collapsed ? 'w-16' : 'w-64'} bg-sidebar border-r border-sidebar-border flex flex-col transition-all duration-300`}>\n {/* Logo */}\n <div className={`h-header border-b border-sidebar-border flex items-center ${collapsed ? 'justify-center' : 'px-4'} transition-all duration-300`}>\n <Link to=\"/\" className=\"flex items-center gap-2\">\n <div className={`w-8 h-8 rounded-lg flex items-center justify-center flex-shrink-0 ${app.logo.color ? '' : 'bg-primary'}`} style={app.logo.color ? { backgroundColor: app.logo.color } : undefined}>\n <app.logo.icon className=\"w-4 h-4 text-white\" />\n </div>\n {!collapsed && <span className=\"font-bold text-sm\">{app.logo.text}</span>}\n </Link>\n </div>\n\n {/* Menu */}\n <nav className=\"flex-1 px-3 py-3 overflow-y-auto\">\n {isInContext ? (\n <>\n {/* Context Switcher (e.g., project switcher) */}\n {contextHeader && !collapsed ? (\n <Popover open={contextSwitcherOpen} onOpenChange={(open) => { setContextSwitcherOpen(open); if (!open) setContextSearch(''); }}>\n <PopoverTrigger asChild>\n <button className=\"w-full mb-3 px-3 py-2 flex items-center gap-2 rounded-md hover:bg-sidebar-accent transition-colors text-left\">\n {contextHeader}\n <ChevronsUpDown className=\"w-3.5 h-3.5 text-muted-foreground flex-shrink-0\" />\n </button>\n </PopoverTrigger>\n <PopoverContent side=\"right\" align=\"start\" className=\"w-72 p-0\">\n <div className=\"p-2 border-b\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground\" />\n <input\n className=\"w-full pl-8 pr-3 py-1.5 text-sm border rounded-md outline-none focus:ring-1 focus:ring-ring bg-background\"\n placeholder={t('sidebar.searchProject')}\n value={contextSearch}\n onChange={(e) => setContextSearch(e.target.value)}\n autoFocus\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n ) : contextHeader && collapsed ? (\n <div className=\"mb-3 w-full flex justify-center py-1 rounded-md hover:bg-sidebar-accent transition-colors\">\n {contextHeader}\n </div>\n ) : null}\n\n {!collapsed && contextHeader && <Separator className=\"my-3\" />}\n\n {/* Context Menu Items */}\n <div className=\"space-y-1\">\n {contextMenuItems.map((item) => {\n const active = item.path ? isActive(item.path) : false;\n return renderMenuItem(item, active);\n })}\n </div>\n\n {footerItems.length > 0 && (\n <>\n {!collapsed && <Separator className=\"my-3\" />}\n <div className=\"space-y-1\">\n {footerItems.map((item) => renderMenuItem(item, false))}\n </div>\n </>\n )}\n </>\n ) : (\n <>\n {/* Main Menu Items */}\n <div className=\"space-y-1\">\n {sidebar.menuItems.map((item) => renderMenuItemOrGroup(item))}\n </div>\n\n {sidebar.recentItems && (\n <>\n {!collapsed && <Separator className=\"my-3\" />}\n\n {!collapsed ? (\n <div className=\"space-y-1\">\n <h3 className=\"px-3 py-1 text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n {sidebar.recentItems.title}\n </h3>\n <div className=\"space-y-0.5\">\n {sidebar.recentItems.items.map((item) => (\n <Link\n key={item.path}\n to={item.path}\n className=\"flex items-center gap-2 px-3 py-2 rounded-md text-sm text-sidebar-foreground hover:bg-sidebar-accent\"\n >\n {item.color && (\n <div\n className=\"w-5 h-5 rounded flex items-center justify-center text-white text-[9px] font-bold flex-shrink-0\"\n style={{ backgroundColor: item.color }}\n >\n {item.badge}\n </div>\n )}\n <span className=\"truncate\">{item.label}</span>\n </Link>\n ))}\n </div>\n </div>\n ) : (\n <div className=\"space-y-0.5 mt-3\">\n {sidebar.recentItems.items.map((item) => (\n <TooltipProvider key={item.path} delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Link\n to={item.path}\n className=\"flex justify-center px-3 py-2 rounded-md text-sidebar-foreground hover:bg-sidebar-accent\"\n >\n {item.color && (\n <div\n className=\"w-5 h-5 rounded flex items-center justify-center text-white text-[9px] font-bold\"\n style={{ backgroundColor: item.color }}\n >\n {item.badge}\n </div>\n )}\n </Link>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p className=\"font-medium text-sm\">{item.label}</p>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ))}\n </div>\n )}\n </>\n )}\n </>\n )}\n </nav>\n\n {/* Collapse Toggle Button */}\n <div className=\"px-3 py-2 border-t border-sidebar-border\">\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setCollapsed(!collapsed)}\n className={`w-full h-8 ${collapsed ? 'px-0 justify-center' : 'justify-start'} hover:bg-sidebar-accent`}\n >\n {collapsed ? (\n <ChevronsRight className=\"w-3.5 h-3.5 text-muted-foreground\" />\n ) : (\n <>\n <ChevronsLeft className=\"w-3.5 h-3.5 text-muted-foreground mr-2\" />\n <span className=\"text-xs text-muted-foreground\">{t('sidebar.collapse')}</span>\n </>\n )}\n </Button>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n {collapsed ? t('sidebar.expandSidebar') : t('sidebar.collapseSidebar')}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n\n {/* Organization & Branch selector */}\n {!collapsed ? (\n <div className=\"border-t border-sidebar-border\">\n <OrganizationSelector variant=\"sidebar\" />\n </div>\n ) : (\n selectedOrganization && (\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <div className=\"px-3 py-3 border-t border-sidebar-border flex justify-center cursor-pointer hover:bg-sidebar-accent transition-colors\">\n <div\n className=\"w-8 h-8 rounded-lg flex items-center justify-center text-white font-bold text-xs\"\n style={{ backgroundColor: selectedOrganization.color }}\n >\n {selectedOrganization.shortName}\n </div>\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"right\">\n <p className=\"font-semibold text-sm\">{selectedOrganization.name}</p>\n {selectedBranch && (\n <p className=\"text-xs text-muted-foreground\">{selectedBranch.name}</p>\n )}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n )}\n </aside>\n );\n}\n"]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { changeLanguage } from './chunk-OY3PSPA5.js';
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
import { useTranslation } from 'react-i18next';
|
|
4
|
+
import { format, formatDistanceToNow } from 'date-fns';
|
|
5
|
+
import { ja, enUS, vi } from 'date-fns/locale';
|
|
6
|
+
|
|
7
|
+
var timezoneLabels = {
|
|
8
|
+
"Asia/Ho_Chi_Minh": "(UTC+7) Ho Chi Minh",
|
|
9
|
+
"Asia/Tokyo": "(UTC+9) Tokyo",
|
|
10
|
+
"America/New_York": "(UTC-5) New York",
|
|
11
|
+
"America/Los_Angeles": "(UTC-8) Los Angeles",
|
|
12
|
+
"Europe/London": "(UTC+0) London",
|
|
13
|
+
"UTC": "(UTC+0) UTC"
|
|
14
|
+
};
|
|
15
|
+
var dateFnsLocales = {
|
|
16
|
+
vi: vi,
|
|
17
|
+
en: enUS,
|
|
18
|
+
ja: ja
|
|
19
|
+
};
|
|
20
|
+
var dateFormatPatterns = {
|
|
21
|
+
vi: "dd/MM/yyyy",
|
|
22
|
+
en: "MM/dd/yyyy",
|
|
23
|
+
ja: "yyyy/MM/dd"
|
|
24
|
+
};
|
|
25
|
+
var dateTimeFormatPatterns = {
|
|
26
|
+
vi: "dd/MM/yyyy HH:mm",
|
|
27
|
+
en: "MM/dd/yyyy HH:mm",
|
|
28
|
+
ja: "yyyy/MM/dd HH:mm"
|
|
29
|
+
};
|
|
30
|
+
var shortDatePatterns = {
|
|
31
|
+
vi: "dd/MM",
|
|
32
|
+
en: "MM/dd",
|
|
33
|
+
ja: "MM/dd"
|
|
34
|
+
};
|
|
35
|
+
var localeTags = {
|
|
36
|
+
vi: "vi-VN",
|
|
37
|
+
en: "en-US",
|
|
38
|
+
ja: "ja-JP"
|
|
39
|
+
};
|
|
40
|
+
function toDate(d) {
|
|
41
|
+
return typeof d === "string" ? new Date(d) : d;
|
|
42
|
+
}
|
|
43
|
+
function loadSavedTimezone() {
|
|
44
|
+
if (typeof window === "undefined") return "Asia/Ho_Chi_Minh";
|
|
45
|
+
const saved = localStorage.getItem("omnify_timezone");
|
|
46
|
+
if (saved && saved in timezoneLabels) return saved;
|
|
47
|
+
return "Asia/Ho_Chi_Minh";
|
|
48
|
+
}
|
|
49
|
+
function useDateFormat() {
|
|
50
|
+
const { i18n } = useTranslation();
|
|
51
|
+
const language = i18n.language || "vi";
|
|
52
|
+
const locale = dateFnsLocales[language] || vi;
|
|
53
|
+
const [timezone, setTimezoneState] = useState(() => loadSavedTimezone());
|
|
54
|
+
const setTimezone = useCallback((tz) => {
|
|
55
|
+
localStorage.setItem("omnify_timezone", tz);
|
|
56
|
+
setTimezoneState(tz);
|
|
57
|
+
}, []);
|
|
58
|
+
const setLanguage = useCallback((lang) => {
|
|
59
|
+
changeLanguage(lang);
|
|
60
|
+
}, []);
|
|
61
|
+
const formatDate = useCallback(
|
|
62
|
+
(date) => {
|
|
63
|
+
return format(toDate(date), dateFormatPatterns[language] || "dd/MM/yyyy", { locale });
|
|
64
|
+
},
|
|
65
|
+
[language, locale]
|
|
66
|
+
);
|
|
67
|
+
const formatDateTime = useCallback(
|
|
68
|
+
(date) => {
|
|
69
|
+
return format(toDate(date), dateTimeFormatPatterns[language] || "dd/MM/yyyy HH:mm", { locale });
|
|
70
|
+
},
|
|
71
|
+
[language, locale]
|
|
72
|
+
);
|
|
73
|
+
const formatRelativeTime = useCallback(
|
|
74
|
+
(date) => {
|
|
75
|
+
return formatDistanceToNow(toDate(date), { addSuffix: true, locale });
|
|
76
|
+
},
|
|
77
|
+
[locale]
|
|
78
|
+
);
|
|
79
|
+
const formatShortDate = useCallback(
|
|
80
|
+
(date) => {
|
|
81
|
+
return format(toDate(date), shortDatePatterns[language] || "dd/MM", { locale });
|
|
82
|
+
},
|
|
83
|
+
[language, locale]
|
|
84
|
+
);
|
|
85
|
+
const formatMonthYear = useCallback(
|
|
86
|
+
(date) => {
|
|
87
|
+
return format(toDate(date), "MMMM yyyy", { locale });
|
|
88
|
+
},
|
|
89
|
+
[locale]
|
|
90
|
+
);
|
|
91
|
+
const formatDayOfWeek = useCallback(
|
|
92
|
+
(date) => {
|
|
93
|
+
return format(toDate(date), "EEE", { locale });
|
|
94
|
+
},
|
|
95
|
+
[locale]
|
|
96
|
+
);
|
|
97
|
+
const formatDateLong = useCallback(
|
|
98
|
+
(date) => {
|
|
99
|
+
return format(toDate(date), "PPP", { locale });
|
|
100
|
+
},
|
|
101
|
+
[locale]
|
|
102
|
+
);
|
|
103
|
+
return {
|
|
104
|
+
language,
|
|
105
|
+
timezone,
|
|
106
|
+
setLanguage,
|
|
107
|
+
setTimezone,
|
|
108
|
+
formatDate,
|
|
109
|
+
formatDateTime,
|
|
110
|
+
formatRelativeTime,
|
|
111
|
+
formatShortDate,
|
|
112
|
+
formatMonthYear,
|
|
113
|
+
formatDayOfWeek,
|
|
114
|
+
formatDateLong,
|
|
115
|
+
dateFnsLocale: locale,
|
|
116
|
+
localeTag: localeTags[language] || "vi-VN",
|
|
117
|
+
languageNames: { vi: "Ti\u1EBFng Vi\u1EC7t", en: "English", ja: "\u65E5\u672C\u8A9E" }
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export { timezoneLabels, useDateFormat };
|
|
122
|
+
//# sourceMappingURL=chunk-XDXGUPCR.js.map
|
|
123
|
+
//# sourceMappingURL=chunk-XDXGUPCR.js.map
|