@omerdlw/base-framework 1.0.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/LICENSE +21 -0
- package/README.md +117 -0
- package/dist/atoms/button.d.ts +11 -0
- package/dist/atoms/button.d.ts.map +1 -0
- package/dist/atoms/icon.d.ts +15 -0
- package/dist/atoms/icon.d.ts.map +1 -0
- package/dist/atoms/index.d.ts +6 -0
- package/dist/atoms/index.d.ts.map +1 -0
- package/dist/atoms/index.js +169 -0
- package/dist/atoms/index.js.map +1 -0
- package/dist/atoms/spinner.d.ts +9 -0
- package/dist/atoms/spinner.d.ts.map +1 -0
- package/dist/atoms/tooltip.d.ts +18 -0
- package/dist/atoms/tooltip.d.ts.map +1 -0
- package/dist/error/boundary.d.ts +14 -0
- package/dist/error/boundary.d.ts.map +1 -0
- package/dist/error/constants.d.ts +18 -0
- package/dist/error/constants.d.ts.map +1 -0
- package/dist/error/index.d.ts +9 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +688 -0
- package/dist/error/index.js.map +1 -0
- package/dist/error/listener.d.ts +2 -0
- package/dist/error/listener.d.ts.map +1 -0
- package/dist/error/reporter.d.ts +32 -0
- package/dist/error/reporter.d.ts.map +1 -0
- package/dist/error/theme.d.ts +3 -0
- package/dist/error/theme.d.ts.map +1 -0
- package/dist/error/types.d.ts +91 -0
- package/dist/error/types.d.ts.map +1 -0
- package/dist/error/utils.d.ts +21 -0
- package/dist/error/utils.d.ts.map +1 -0
- package/dist/events.d.ts +51 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +88 -0
- package/dist/events.js.map +1 -0
- package/dist/hooks/index.d.ts +17 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +804 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/types.d.ts +58 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/use-async-action.d.ts +3 -0
- package/dist/hooks/use-async-action.d.ts.map +1 -0
- package/dist/hooks/use-click-outside.d.ts +3 -0
- package/dist/hooks/use-click-outside.d.ts.map +1 -0
- package/dist/hooks/use-controllable-state.d.ts +3 -0
- package/dist/hooks/use-controllable-state.d.ts.map +1 -0
- package/dist/hooks/use-debounce.d.ts +2 -0
- package/dist/hooks/use-debounce.d.ts.map +1 -0
- package/dist/hooks/use-fullscreen-state.d.ts +4 -0
- package/dist/hooks/use-fullscreen-state.d.ts.map +1 -0
- package/dist/hooks/use-global-event.d.ts +7 -0
- package/dist/hooks/use-global-event.d.ts.map +1 -0
- package/dist/hooks/use-hotkey.d.ts +4 -0
- package/dist/hooks/use-hotkey.d.ts.map +1 -0
- package/dist/hooks/use-intersection-observer.d.ts +4 -0
- package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
- package/dist/hooks/use-isomorphic-layout-effect.d.ts +3 -0
- package/dist/hooks/use-isomorphic-layout-effect.d.ts.map +1 -0
- package/dist/hooks/use-media-query.d.ts +2 -0
- package/dist/hooks/use-media-query.d.ts.map +1 -0
- package/dist/hooks/use-mounted.d.ts +2 -0
- package/dist/hooks/use-mounted.d.ts.map +1 -0
- package/dist/hooks/use-required-context.d.ts +3 -0
- package/dist/hooks/use-required-context.d.ts.map +1 -0
- package/dist/hooks/use-server-action.d.ts +4 -0
- package/dist/hooks/use-server-action.d.ts.map +1 -0
- package/dist/hooks/use-storage-state.d.ts +5 -0
- package/dist/hooks/use-storage-state.d.ts.map +1 -0
- package/dist/hooks/use-store.d.ts +3 -0
- package/dist/hooks/use-store.d.ts.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20415 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel/adapters.d.ts +5 -0
- package/dist/kernel/adapters.d.ts.map +1 -0
- package/dist/kernel/compose.d.ts +15 -0
- package/dist/kernel/compose.d.ts.map +1 -0
- package/dist/kernel/constants.d.ts +12 -0
- package/dist/kernel/constants.d.ts.map +1 -0
- package/dist/kernel/context-registry.d.ts +3 -0
- package/dist/kernel/context-registry.d.ts.map +1 -0
- package/dist/kernel/handlers.d.ts +3 -0
- package/dist/kernel/handlers.d.ts.map +1 -0
- package/dist/kernel/hooks.d.ts +7 -0
- package/dist/kernel/hooks.d.ts.map +1 -0
- package/dist/kernel/index.d.ts +14 -0
- package/dist/kernel/index.d.ts.map +1 -0
- package/dist/kernel/index.js +2109 -0
- package/dist/kernel/index.js.map +1 -0
- package/dist/kernel/installed.d.ts +21 -0
- package/dist/kernel/installed.d.ts.map +1 -0
- package/dist/kernel/module.d.ts +32 -0
- package/dist/kernel/module.d.ts.map +1 -0
- package/dist/kernel/operations.d.ts +21 -0
- package/dist/kernel/operations.d.ts.map +1 -0
- package/dist/kernel/page-controller.d.ts +8 -0
- package/dist/kernel/page-controller.d.ts.map +1 -0
- package/dist/kernel/provider.d.ts +18 -0
- package/dist/kernel/provider.d.ts.map +1 -0
- package/dist/kernel/runtime.d.ts +30 -0
- package/dist/kernel/runtime.d.ts.map +1 -0
- package/dist/kernel/schema.d.ts +13 -0
- package/dist/kernel/schema.d.ts.map +1 -0
- package/dist/kernel/store.d.ts +4 -0
- package/dist/kernel/store.d.ts.map +1 -0
- package/dist/kernel/types.d.ts +233 -0
- package/dist/kernel/types.d.ts.map +1 -0
- package/dist/kernel/utils.d.ts +20 -0
- package/dist/kernel/utils.d.ts.map +1 -0
- package/dist/modules/ambient/constants.d.ts +23 -0
- package/dist/modules/ambient/constants.d.ts.map +1 -0
- package/dist/modules/ambient/context.d.ts +10 -0
- package/dist/modules/ambient/context.d.ts.map +1 -0
- package/dist/modules/ambient/index.d.ts +6 -0
- package/dist/modules/ambient/index.d.ts.map +1 -0
- package/dist/modules/ambient/index.js +896 -0
- package/dist/modules/ambient/index.js.map +1 -0
- package/dist/modules/ambient/module.d.ts +12 -0
- package/dist/modules/ambient/module.d.ts.map +1 -0
- package/dist/modules/ambient/types.d.ts +84 -0
- package/dist/modules/ambient/types.d.ts.map +1 -0
- package/dist/modules/ambient/utils.d.ts +18 -0
- package/dist/modules/ambient/utils.d.ts.map +1 -0
- package/dist/modules/background/constants.d.ts +12 -0
- package/dist/modules/background/constants.d.ts.map +1 -0
- package/dist/modules/background/context.d.ts +13 -0
- package/dist/modules/background/context.d.ts.map +1 -0
- package/dist/modules/background/hooks.d.ts +119 -0
- package/dist/modules/background/hooks.d.ts.map +1 -0
- package/dist/modules/background/index.d.ts +7 -0
- package/dist/modules/background/index.d.ts.map +1 -0
- package/dist/modules/background/index.js +3195 -0
- package/dist/modules/background/index.js.map +1 -0
- package/dist/modules/background/module.d.ts +14 -0
- package/dist/modules/background/module.d.ts.map +1 -0
- package/dist/modules/background/motion.d.ts +13 -0
- package/dist/modules/background/motion.d.ts.map +1 -0
- package/dist/modules/background/overlay.d.ts +49 -0
- package/dist/modules/background/overlay.d.ts.map +1 -0
- package/dist/modules/background/types.d.ts +153 -0
- package/dist/modules/background/types.d.ts.map +1 -0
- package/dist/modules/background/utils.d.ts +56 -0
- package/dist/modules/background/utils.d.ts.map +1 -0
- package/dist/modules/background/youtube/iframe.d.ts +52 -0
- package/dist/modules/background/youtube/iframe.d.ts.map +1 -0
- package/dist/modules/background/youtube/parse.d.ts +17 -0
- package/dist/modules/background/youtube/parse.d.ts.map +1 -0
- package/dist/modules/context-menu/constants.d.ts +8 -0
- package/dist/modules/context-menu/constants.d.ts.map +1 -0
- package/dist/modules/context-menu/context.d.ts +16 -0
- package/dist/modules/context-menu/context.d.ts.map +1 -0
- package/dist/modules/context-menu/hooks.d.ts +31 -0
- package/dist/modules/context-menu/hooks.d.ts.map +1 -0
- package/dist/modules/context-menu/index.d.ts +6 -0
- package/dist/modules/context-menu/index.d.ts.map +1 -0
- package/dist/modules/context-menu/index.js +2008 -0
- package/dist/modules/context-menu/index.js.map +1 -0
- package/dist/modules/context-menu/module.d.ts +12 -0
- package/dist/modules/context-menu/module.d.ts.map +1 -0
- package/dist/modules/context-menu/motion.d.ts +9 -0
- package/dist/modules/context-menu/motion.d.ts.map +1 -0
- package/dist/modules/context-menu/overlay.d.ts +15 -0
- package/dist/modules/context-menu/overlay.d.ts.map +1 -0
- package/dist/modules/context-menu/resolver.d.ts +7 -0
- package/dist/modules/context-menu/resolver.d.ts.map +1 -0
- package/dist/modules/context-menu/state.d.ts +4 -0
- package/dist/modules/context-menu/state.d.ts.map +1 -0
- package/dist/modules/context-menu/types.d.ts +171 -0
- package/dist/modules/context-menu/types.d.ts.map +1 -0
- package/dist/modules/context-menu/utils.d.ts +16 -0
- package/dist/modules/context-menu/utils.d.ts.map +1 -0
- package/dist/modules/controls/constants.d.ts +7 -0
- package/dist/modules/controls/constants.d.ts.map +1 -0
- package/dist/modules/controls/hooks.d.ts +15 -0
- package/dist/modules/controls/hooks.d.ts.map +1 -0
- package/dist/modules/controls/index.d.ts +6 -0
- package/dist/modules/controls/index.d.ts.map +1 -0
- package/dist/modules/controls/index.js +1242 -0
- package/dist/modules/controls/index.js.map +1 -0
- package/dist/modules/controls/module.d.ts +12 -0
- package/dist/modules/controls/module.d.ts.map +1 -0
- package/dist/modules/controls/overlay.d.ts +2 -0
- package/dist/modules/controls/overlay.d.ts.map +1 -0
- package/dist/modules/controls/types.d.ts +86 -0
- package/dist/modules/controls/types.d.ts.map +1 -0
- package/dist/modules/controls/utils.d.ts +9 -0
- package/dist/modules/controls/utils.d.ts.map +1 -0
- package/dist/modules/dock/cards.d.ts +1035 -0
- package/dist/modules/dock/cards.d.ts.map +1 -0
- package/dist/modules/dock/constants.d.ts +157 -0
- package/dist/modules/dock/constants.d.ts.map +1 -0
- package/dist/modules/dock/context.d.ts +26 -0
- package/dist/modules/dock/context.d.ts.map +1 -0
- package/dist/modules/dock/hooks.d.ts +957 -0
- package/dist/modules/dock/hooks.d.ts.map +1 -0
- package/dist/modules/dock/hud.d.ts +43 -0
- package/dist/modules/dock/hud.d.ts.map +1 -0
- package/dist/modules/dock/index.d.ts +27 -0
- package/dist/modules/dock/index.d.ts.map +1 -0
- package/dist/modules/dock/index.js +12111 -0
- package/dist/modules/dock/index.js.map +1 -0
- package/dist/modules/dock/module.d.ts +71 -0
- package/dist/modules/dock/module.d.ts.map +1 -0
- package/dist/modules/dock/motion.d.ts +986 -0
- package/dist/modules/dock/motion.d.ts.map +1 -0
- package/dist/modules/dock/overlay.d.ts +79 -0
- package/dist/modules/dock/overlay.d.ts.map +1 -0
- package/dist/modules/dock/provider.d.ts +3 -0
- package/dist/modules/dock/provider.d.ts.map +1 -0
- package/dist/modules/dock/routing/breadcrumbs.d.ts +43 -0
- package/dist/modules/dock/routing/breadcrumbs.d.ts.map +1 -0
- package/dist/modules/dock/routing/continuity.d.ts +19 -0
- package/dist/modules/dock/routing/continuity.d.ts.map +1 -0
- package/dist/modules/dock/routing/guards.d.ts +21 -0
- package/dist/modules/dock/routing/guards.d.ts.map +1 -0
- package/dist/modules/dock/routing/navigation.d.ts +37 -0
- package/dist/modules/dock/routing/navigation.d.ts.map +1 -0
- package/dist/modules/dock/routing/transactions.d.ts +21 -0
- package/dist/modules/dock/routing/transactions.d.ts.map +1 -0
- package/dist/modules/dock/runtime/commands.d.ts +18 -0
- package/dist/modules/dock/runtime/commands.d.ts.map +1 -0
- package/dist/modules/dock/runtime/display.d.ts +36 -0
- package/dist/modules/dock/runtime/display.d.ts.map +1 -0
- package/dist/modules/dock/runtime/dock.d.ts +123 -0
- package/dist/modules/dock/runtime/dock.d.ts.map +1 -0
- package/dist/modules/dock/state.d.ts +22 -0
- package/dist/modules/dock/state.d.ts.map +1 -0
- package/dist/modules/dock/status/events.d.ts +37 -0
- package/dist/modules/dock/status/events.d.ts.map +1 -0
- package/dist/modules/dock/status/hooks.d.ts +6 -0
- package/dist/modules/dock/status/hooks.d.ts.map +1 -0
- package/dist/modules/dock/status/model.d.ts +65 -0
- package/dist/modules/dock/status/model.d.ts.map +1 -0
- package/dist/modules/dock/surface/context.d.ts +43 -0
- package/dist/modules/dock/surface/context.d.ts.map +1 -0
- package/dist/modules/dock/surface/definition.d.ts +38 -0
- package/dist/modules/dock/surface/definition.d.ts.map +1 -0
- package/dist/modules/dock/surface/hooks.d.ts +123 -0
- package/dist/modules/dock/surface/hooks.d.ts.map +1 -0
- package/dist/modules/dock/surface/machine.d.ts +75 -0
- package/dist/modules/dock/surface/machine.d.ts.map +1 -0
- package/dist/modules/dock/surface/stack.d.ts +38 -0
- package/dist/modules/dock/surface/stack.d.ts.map +1 -0
- package/dist/modules/dock/surface/view-model.d.ts +3 -0
- package/dist/modules/dock/surface/view-model.d.ts.map +1 -0
- package/dist/modules/dock/types.d.ts +1158 -0
- package/dist/modules/dock/types.d.ts.map +1 -0
- package/dist/modules/dock/utils.d.ts +93 -0
- package/dist/modules/dock/utils.d.ts.map +1 -0
- package/dist/modules/index.d.ts +12 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/modules/index.js +18020 -0
- package/dist/modules/index.js.map +1 -0
- package/dist/modules/loading/constants.d.ts +5 -0
- package/dist/modules/loading/constants.d.ts.map +1 -0
- package/dist/modules/loading/context.d.ts +13 -0
- package/dist/modules/loading/context.d.ts.map +1 -0
- package/dist/modules/loading/hooks.d.ts +6 -0
- package/dist/modules/loading/hooks.d.ts.map +1 -0
- package/dist/modules/loading/index.d.ts +7 -0
- package/dist/modules/loading/index.d.ts.map +1 -0
- package/dist/modules/loading/index.js +1256 -0
- package/dist/modules/loading/index.js.map +1 -0
- package/dist/modules/loading/module.d.ts +14 -0
- package/dist/modules/loading/module.d.ts.map +1 -0
- package/dist/modules/loading/overlay.d.ts +2 -0
- package/dist/modules/loading/overlay.d.ts.map +1 -0
- package/dist/modules/loading/types.d.ts +47 -0
- package/dist/modules/loading/types.d.ts.map +1 -0
- package/dist/modules/loading/utils.d.ts +4 -0
- package/dist/modules/loading/utils.d.ts.map +1 -0
- package/dist/modules/media/constants.d.ts +7 -0
- package/dist/modules/media/constants.d.ts.map +1 -0
- package/dist/modules/media/context.d.ts +6 -0
- package/dist/modules/media/context.d.ts.map +1 -0
- package/dist/modules/media/hooks.d.ts +3 -0
- package/dist/modules/media/hooks.d.ts.map +1 -0
- package/dist/modules/media/index.d.ts +8 -0
- package/dist/modules/media/index.d.ts.map +1 -0
- package/dist/modules/media/index.js +728 -0
- package/dist/modules/media/index.js.map +1 -0
- package/dist/modules/media/module.d.ts +11 -0
- package/dist/modules/media/module.d.ts.map +1 -0
- package/dist/modules/media/overlay.d.ts +9 -0
- package/dist/modules/media/overlay.d.ts.map +1 -0
- package/dist/modules/media/types.d.ts +77 -0
- package/dist/modules/media/types.d.ts.map +1 -0
- package/dist/modules/media/utils.d.ts +17 -0
- package/dist/modules/media/utils.d.ts.map +1 -0
- package/dist/modules/modal/constants.d.ts +20 -0
- package/dist/modules/modal/constants.d.ts.map +1 -0
- package/dist/modules/modal/context.d.ts +20 -0
- package/dist/modules/modal/context.d.ts.map +1 -0
- package/dist/modules/modal/hooks.d.ts +41 -0
- package/dist/modules/modal/hooks.d.ts.map +1 -0
- package/dist/modules/modal/index.d.ts +7 -0
- package/dist/modules/modal/index.d.ts.map +1 -0
- package/dist/modules/modal/index.js +2672 -0
- package/dist/modules/modal/index.js.map +1 -0
- package/dist/modules/modal/module.d.ts +12 -0
- package/dist/modules/modal/module.d.ts.map +1 -0
- package/dist/modules/modal/motion.d.ts +16 -0
- package/dist/modules/modal/motion.d.ts.map +1 -0
- package/dist/modules/modal/overlay.d.ts +4 -0
- package/dist/modules/modal/overlay.d.ts.map +1 -0
- package/dist/modules/modal/state.d.ts +4 -0
- package/dist/modules/modal/state.d.ts.map +1 -0
- package/dist/modules/modal/types.d.ts +109 -0
- package/dist/modules/modal/types.d.ts.map +1 -0
- package/dist/modules/modal/utils.d.ts +31 -0
- package/dist/modules/modal/utils.d.ts.map +1 -0
- package/dist/modules/notification/constants.d.ts +9 -0
- package/dist/modules/notification/constants.d.ts.map +1 -0
- package/dist/modules/notification/context.d.ts +7 -0
- package/dist/modules/notification/context.d.ts.map +1 -0
- package/dist/modules/notification/hooks.d.ts +10 -0
- package/dist/modules/notification/hooks.d.ts.map +1 -0
- package/dist/modules/notification/index.d.ts +7 -0
- package/dist/modules/notification/index.d.ts.map +1 -0
- package/dist/modules/notification/index.js +905 -0
- package/dist/modules/notification/index.js.map +1 -0
- package/dist/modules/notification/module.d.ts +11 -0
- package/dist/modules/notification/module.d.ts.map +1 -0
- package/dist/modules/notification/motion.d.ts +15 -0
- package/dist/modules/notification/motion.d.ts.map +1 -0
- package/dist/modules/notification/overlay.d.ts +3 -0
- package/dist/modules/notification/overlay.d.ts.map +1 -0
- package/dist/modules/notification/types.d.ts +57 -0
- package/dist/modules/notification/types.d.ts.map +1 -0
- package/dist/modules/notification/utils.d.ts +9 -0
- package/dist/modules/notification/utils.d.ts.map +1 -0
- package/dist/modules/theme.d.ts +3 -0
- package/dist/modules/theme.d.ts.map +1 -0
- package/dist/provider.d.ts +23 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +1973 -0
- package/dist/provider.js.map +1 -0
- package/dist/result.d.ts +50 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +163 -0
- package/dist/result.js.map +1 -0
- package/dist/theme.d.ts +25 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +44 -0
- package/dist/theme.js.map +1 -0
- package/dist/tokens/index.d.ts +3 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +325 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/motion.d.ts +315 -0
- package/dist/tokens/motion.d.ts.map +1 -0
- package/dist/tokens/tokens.d.ts +34 -0
- package/dist/tokens/tokens.d.ts.map +1 -0
- package/dist/utils/cn.d.ts +3 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/dom.d.ts +5 -0
- package/dist/utils/dom.d.ts.map +1 -0
- package/dist/utils/index.d.ts +16 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +485 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json.d.ts +3 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/number.d.ts +4 -0
- package/dist/utils/number.d.ts.map +1 -0
- package/dist/utils/object.d.ts +7 -0
- package/dist/utils/object.d.ts.map +1 -0
- package/dist/utils/report.d.ts +5 -0
- package/dist/utils/report.d.ts.map +1 -0
- package/dist/utils/scheduler.d.ts +34 -0
- package/dist/utils/scheduler.d.ts.map +1 -0
- package/dist/utils/store.d.ts +11 -0
- package/dist/utils/store.d.ts.map +1 -0
- package/dist/utils/string.d.ts +8 -0
- package/dist/utils/string.d.ts.map +1 -0
- package/dist/utils/timing.d.ts +8 -0
- package/dist/utils/timing.d.ts.map +1 -0
- package/dist/utils/user-message.d.ts +20 -0
- package/dist/utils/user-message.d.ts.map +1 -0
- package/package.json +113 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/error/constants.ts","../../src/error/utils.ts","../../src/error/reporter.ts","../../src/utils/report.ts","../../src/events.ts","../../src/atoms/icon.tsx","../../src/atoms/button.tsx","../../src/kernel/context-registry.ts","../../src/theme.tsx","../../src/error/theme.ts","../../src/utils/user-message.ts","../../src/error/boundary.tsx","../../src/error/listener.ts"],"names":["IS_BROWSER","report","IconifyIcon","jsx","jsxs"],"mappings":";;;;;;;;;AAAO,IAAM,cAAA,GAAiB,OAAO,MAAA,CAAO;AAAA,EAC1C,YAAA,EAAc,sBAAA;AAAA,EACd,UAAA,EAAY,qDAAA;AAAA,EACZ,YAAA,EAAc,sBAAA;AAAA,EACd,UAAA,EAAY,gEAAA;AAAA,EACZ,aAAA,EAAe,mDAAA;AAAA,EACf,cAAA,EAAgB,sBAAA;AAAA,EAChB,YAAA,EAAc;AAChB,CAAU;AAEH,IAAM,WAAA,GAAc;AACpB,IAAM,gBAAA,GAAmB;AACzB,IAAM,qBAAA,GAAwB;AAE9B,IAAM,qBAAA,GAAwB,OAAO,MAAA,CAAO;AAAA,EACjD,SAAA,EAAW,EAAA;AAAA,EACX,QAAA,EAAU,GAAA;AAAA,EACV,OAAA,EAAS,OAAO,MAAA,CAAO;AAAA,IACrB,sBAAA;AAAA,IACA,yBAAA;AAAA,IACA,gBAAA;AAAA,IACA,0BAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACD;AACH,CAAU;;;AClBV,IAAM,UAAA,GAAa,OAAO,MAAA,KAAW,WAAA;AACrC,IAAM,aAAA,GAAgB,OAAO,SAAA,KAAc,WAAA;AAEpC,IAAM,iBAAiB,MAC5B,OAAO,WAAW,WAAA,GAAc,MAAA,CAAO,SAAS,QAAA,GAAW;AAEtD,IAAM,eAAe,MAC1B,OAAO,SAAA,KAAc,WAAA,GAAc,UAAU,SAAA,GAAY;AAEpD,SAAS,kBAAA,CAAmB;AAAA,EACjC,SAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAKqB;AACnB,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,WAAW,cAAA,IAAkB,IAAA;AAAA,IAC7C,OAAO,cAAA,EAAe;AAAA,IACtB,WAAW,YAAA,EAAa;AAAA,IACxB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,IAClC,IAAA,EAAM,QAAQ,KAAA,IAAS,eAAA;AAAA,IACvB,SAAS,OAAA,IAAW,SAAA;AAAA,IACpB,MAAA,EAAQ;AAAA,GACV;AACF;AAEO,SAAS,oBAAoB,KAAA,EAAwB;AAC1D,EAAA,MAAM,UAAA,GAAa,OAAO,KAAK,CAAA;AAC/B,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAU,CAAC,CAAA,GAAI,CAAA;AAC9E;AAEO,SAAS,sBAAsB,KAAA,EAAwB;AAC5D,EAAA,MAAM,YAAA,GAAe,OAAO,KAAK,CAAA;AACjC,EAAA,OAAO,MAAA,CAAO,SAAS,YAAY,CAAA,GAC/B,KAAK,GAAA,CAAI,CAAA,EAAG,YAAY,CAAA,GACxB,qBAAA;AACN;AAEO,SAAS,sBACd,KAAA,EACoB;AACpB,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA,KAAU,UAAA,GAAa,MAAA,CAAO,SAAS,QAAA,GAAW,IAAA,CAAA;AAAA,IACzD,SAAA,EAAW,aAAA,GAAgB,SAAA,CAAU,SAAA,GAAY,IAAA;AAAA,IACjD,QAAA,EAAU,aAAA,GAAgB,SAAA,CAAU,QAAA,GAAW,IAAA;AAAA,IAC/C,QAAA,EAAU,aAAA,GAAgB,SAAA,CAAU,QAAA,GAAW,IAAA;AAAA,IAC/C,MAAA,EAAQ,aAAA,GAAgB,SAAA,CAAU,MAAA,GAAS,IAAA;AAAA,IAC3C,GAAA,EAAK,UAAA,GAAa,MAAA,CAAO,QAAA,CAAS,IAAA,GAAO;AAAA,GAC3C;AACF;AAEO,SAAS,WAAA,CACd,KAAA,EACA,OAAA,GAAqC,EAAC,EAC9B;AACR,EAAA,MAAM,QAAA,GACJ,OAAO,OAAA,CAAQ,cAAA,KAAmB,QAAA,GAC9B,OAAA,CAAQ,cAAA,CAAe,KAAA,CAAM,IAAI,CAAA,CAAE,IAAA,CAAK,OAAO,KAAK,EAAA,GACpD,EAAA;AAEN,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,MAAM,YAAA,GAAA,CAAgB,QAAQ,OAAA,IAAW,MAAA,CAAO,SAAS,EAAE,CAAA,EAAG,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAC1E,EAAA,MAAM,SAAA,GAAY,QAAQ,IAAA,IAAQ,cAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,EAAA;AAE/B,EAAA,OAAO,CAAC,QAAA,EAAU,YAAA,EAAc,SAAA,EAAW,KAAK,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC7E;AAEO,SAAS,aACd,KAAA,EACA;AAAA,EACE,UAAU,EAAC;AAAA,EACX,OAAO;AACT,CAAA,GAGI,EAAC,EACQ;AACb,EAAA,MAAM,MAAA,GAAS,KAAA;AAKf,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,MAAA,EAAQ,OAAA,IAAW,MAAA,CAAO,KAAK,CAAA;AAAA,MACxC,KAAA,EAAO,QAAQ,KAAA,IAAS,IAAA;AAAA,MACxB,IAAA,EAAM,QAAQ,IAAA,IAAQ;AAAA,KACxB;AAAA,IACA,WAAA,EAAa,WAAA,CAAY,KAAA,EAAO,OAAoC,CAAA;AAAA,IACpE,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,IAClC,WAAA,EAAa,qBAAA,CAAsB,OAAA,CAAQ,KAA2B,CAAA;AAAA,IACtE,cAAA,EAAiB,QAAQ,cAAA,IAA6B,IAAA;AAAA,IACtD,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,gBAAgB,KAAA,EAAwB;AACtD,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,MAAM,IAAA,EAAK;AACjD,EAAA,IAAI,KAAA,YAAiB,KAAA,EAAO,OAAO,KAAA,CAAM,QAAQ,IAAA,EAAK;AAEtD,EAAA,MAAM,MAAA,GAAS,KAAA;AACf,EAAA,OAAO,MAAA,CAAO,QAAQ,OAAA,IAAW,MAAA,EAAQ,YAAW,IAAK,KAAK,EAAE,IAAA,EAAK;AACvE;AAEO,SAAS,kBAAkB,KAAA,EAAyB;AACzD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,EAAA,MAAM,eAAA,GAAkB,KAAA;AACxB,EAAA,IACE,OAAO,eAAA,EAAiB,UAAA,KAAe,UAAA,IACvC,eAAA,CAAgB,YAAW,EAC3B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,gBAAgB,KAAK,CAAA;AACrC,EAAA,OAAO,qBAAA,CAAsB,QAAQ,IAAA,CAAK,CAAC,YAAY,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAC,CAAA;AAC9E;;;ACpHA,IAAM,aAAA,GAAgB,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA;AAC/C,IAAMA,WAAAA,GAAa,OAAO,MAAA,KAAW,WAAA;AAWrC,IAAM,gBAAN,MAAoB;AAAA,EACV,WAAmC,EAAC;AAAA,EACpC,UAAmC,EAAC;AAAA,EACpC,OAA+B,EAAC;AAAA,EAChC,IAAA,uBAAW,GAAA,EAAY;AAAA,EACvB,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EAER,WAAA,CAAY,OAAA,GAAgC,EAAC,EAAG;AAC9C,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,IAAA;AAClC,IAAA,IAAA,CAAK,UAAA,GAAa,mBAAA,CAAoB,OAAA,CAAQ,UAAA,IAAc,CAAC,CAAA;AAC7D,IAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,UAAA,IAAc,IAAA;AACxC,IAAA,IAAA,CAAK,YAAA,GAAe,qBAAA;AAAA,MAClB,QAAQ,iBAAA,IAAqB;AAAA,KAC/B;AAAA,EACF;AAAA,EAEA,WAAW,OAAA,EAAqC;AAC9C,IAAA,IAAI,OAAO,OAAA,EAAS,MAAA,KAAW,UAAA,EAAY;AACzC,MAAA,IAAA,CAAK,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,IAC5B;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,cAAc,IAAA,EAAoB;AAChC,IAAA,IAAA,CAAK,QAAA,GAAW,KAAK,QAAA,CAAS,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,SAAS,IAAI,CAAA;AACvE,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,UAAA,CAAW,KAAa,KAAA,EAAsB;AAC5C,IAAA,IACE,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,GAAG,CAAA,IAC/B,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,GAAS,WAAA,EACnC;AACA,MAAA,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,GAAI,KAAA;AAAA,IACtB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAA,CAAO,KAAa,KAAA,EAAsB;AACxC,IAAA,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,YAAA,CACE,KAAA,EACA,YAAA,GAAwC,EAAC,EAChB;AACzB,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,KAAK,MAAA,EAAO,GAAI,KAAK,UAAA,EAAY;AAEtD,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAE3B,IAAA,MAAM,UAAU,EAAE,GAAG,IAAA,CAAK,OAAA,EAAS,GAAG,YAAA,EAAa;AACnD,IAAA,IAAIC,OAAAA,GAAS,YAAA,CAAa,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA,EAAM,EAAE,GAAG,IAAA,CAAK,IAAA,EAAK,EAAG,CAAA;AACpE,IAAA,MAAM,YAAYA,OAAAA,CAAO,WAAA;AAEzB,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,EAAG;AAE9B,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAA,IAAQ,gBAAA,EAAkB;AACtC,MAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AACtC,MAAA,IAAI,KAAA,EAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,IACnC;AAEA,IAAA,IAAA,CAAK,IAAA,CAAK,IAAI,SAAS,CAAA;AACvB,IAAA,UAAA,CAAW,MAAM,IAAA,CAAK,IAAA,CAAK,OAAO,SAAS,CAAA,EAAG,KAAK,YAAY,CAAA;AAE/D,IAAA,IAAI,OAAO,IAAA,CAAK,UAAA,KAAe,UAAA,EAAY;AACzC,MAAA,IAAI;AACF,QAAA,MAAM,WAAA,GAAc,IAAA,CAAK,UAAA,CAAWA,OAAM,CAAA;AAC1C,QAAA,IAAI,CAAC,WAAA,EAAa;AAClB,QAAAA,OAAAA,GAAS,WAAA;AAAA,MACX,CAAA,CAAA,MAAQ;AAAA,MAAC;AAAA,IACX;AAEA,IAAA,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,KAAY;AACjC,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,OAAOA,OAAM,CAAA;AAAA,MACvB,CAAA,CAAA,MAAQ;AAAA,MAAC;AAAA,IACX,CAAC,CAAA;AAED,IAAA,OAAOA,OAAAA;AAAA,EACT;AAAA,EAEA,eACE,OAAA,EACA,KAAA,GAAQ,MAAA,EACR,OAAA,GAAmC,EAAC,EACX;AACzB,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,IAAA,KAAA,CAAM,IAAA,GAAO,SAAA;AACb,IAAA,OAAO,KAAK,YAAA,CAAa,KAAA,EAAO,EAAE,GAAG,OAAA,EAAS,OAAO,CAAA;AAAA,EACvD;AAAA,EAEA,qBAAA,GAA8B;AAC5B,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,IAAU,CAACD,WAAAA,EAAY;AAEzC,IAAA,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,oBAAA,EAAsB,CAAA;AAEzC,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,MAAM,aAAA,GAAgB,mBAAA,CAAoB,MAAA,CAAO,MAAM,CAAA;AACvD,MAAA,IAAI,aAAA,CAAc,SAAS,QAAA,EAAU;AACnC,QAAA,IAAA,CAAK,QAAA,CAAS,KAAK,aAAa,CAAA;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAEA,IAAI,QAAA,GAAiC,IAAA;AAE9B,SAAS,gBAAA,CACd,OAAA,GAAgC,EAAC,EAClB;AACf,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,QAAA,GAAW,IAAI,cAAc,OAAO,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,oBAAA,GAA6C;AAC3D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,OAAOC,OAAAA,EAAqB;AAC1B,MAAA,IAAI,aAAA,EAAe;AACnB,MAAA,OAAA,CAAQ,MAAM,iBAAA,EAAmB;AAAA,QAC/B,KAAA,EAAOA,QAAO,KAAA,CAAM,OAAA;AAAA,QACpB,aAAaA,OAAAA,CAAO,WAAA;AAAA,QACpB,KAAA,EAAOA,QAAO,WAAA,CAAY;AAAA,OAC3B,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAEO,SAAS,oBAAoB,MAAA,EAAuC;AACzE,EAAA,MAAM,SAAA,GAAY,MAAA;AAKlB,EAAA,IACE,CAAC,aACD,OAAO,SAAA,CAAU,qBAAqB,UAAA,IACtC,OAAO,SAAA,CAAU,SAAA,KAAc,UAAA,EAC/B;AACA,IAAA,OAAO,oBAAA,EAAqB;AAAA,EAC9B;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,OAAOA,OAAAA,EAAqB;AAC1B,MAAA,SAAA,CAAU,SAAA,CAAW,CAAC,KAAA,KAAuB;AAC3C,QAAA,IAAIA,QAAO,WAAA,EAAa,KAAA,CAAM,eAAe,CAACA,OAAAA,CAAO,WAAW,CAAC,CAAA;AACjE,QAAA,IAAIA,OAAAA,CAAO,IAAA,EAAM,KAAA,CAAM,OAAA,CAAQA,QAAO,IAAI,CAAA;AAE1C,QAAA,IAAIA,OAAAA,CAAO,IAAA,IAAQ,OAAOA,OAAAA,CAAO,SAAS,QAAA,EAAU;AAClD,UAAA,MAAA,CAAO,OAAA,CAAQA,OAAAA,CAAO,IAAI,CAAA,CAAE,OAAA;AAAA,YAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAC9C,MAAM,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC;AAAA,WACjC;AAAA,QACF;AAEA,QAAA,IAAIA,OAAAA,CAAO,WAAA;AACT,UAAA,KAAA,CAAM,UAAA,CAAW,aAAA,EAAeA,OAAAA,CAAO,WAAW,CAAA;AACpD,QAAA,IAAIA,QAAO,OAAA,EAAS,KAAA,CAAM,UAAA,CAAW,QAAA,EAAUA,QAAO,OAAO,CAAA;AAC7D,QAAA,IAAIA,OAAAA,CAAO,cAAA;AACT,UAAA,KAAA,CAAM,QAAA,CAAS,gBAAA,EAAkBA,OAAAA,CAAO,cAAc,CAAA;AAExD,QAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAMA,OAAAA,CAAO,MAAM,OAAO,CAAA;AAC5C,QAAA,KAAA,CAAM,IAAA,GAAOA,OAAAA,CAAO,KAAA,CAAM,IAAA,IAAQ,OAAA;AAClC,QAAA,KAAA,CAAM,KAAA,GAAQA,OAAAA,CAAO,KAAA,CAAM,KAAA,IAAS,MAAA;AAEpC,QAAA,SAAA,CAAU,iBAAkB,KAAK,CAAA;AAAA,MACnC,CAAC,CAAA;AAAA,IACH;AAAA,GACF;AACF;;;ACpMA,IAAI,IAAA,GAA0B,IAAA;AAEvB,SAAS,MAAA,CACd,KAAA,EACA,KAAA,EACA,KAAA,GAAqB,OAAA,EACf;AACN,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,KAAA,EAAO,OAAO,KAAK,CAAA;AACxB,MAAA;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAAC;AAAA,EACX;AAEA,EAAA,IAAI,QAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,IAAgB,OAAO,WAAW,WAAA,EAAa;AAC1E,IAAA;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA,CAAA,EAAI,KAAK,KAAK,KAAK,CAAA;AACpC;AAEO,SAAS,cAAc,IAAA,EAA8B;AAC1D,EAAA,IAAA,GAAO,IAAA;AACP,EAAA,OAAO,MAAM;AACX,IAAA,IAAI,IAAA,KAAS,MAAM,IAAA,GAAO,IAAA;AAAA,EAC5B,CAAA;AACF;;;AC9BO,IAAM,WAAA,GAAc,OAAO,MAAA,CAAO;AAAA,EACvC,gBAAA,EAAkB,kBAAA;AAAA,EAClB,YAAA,EAAc,cAAA;AAAA,EACd,SAAA,EAAW,WAAA;AAAA,EACX,SAAA,EAAW;AACb,CAAU,CAAA;AA8BH,IAAM,eAAN,MAA+D;AAAA,EAC5D,MAAA,uBAAqD,GAAA,EAAI;AAAA,EACzD,cAAA,uBACF,GAAA,EAAI;AAAA,EAOV,SAAA,CAAU,OAAe,QAAA,EAA4C;AACnE,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,IAAS,OAAO,aAAa,UAAA,EAAY;AACzE,MAAA,OAAO,MAAM;AAAA,MAAC,CAAA;AAAA,IAChB;AACA,IAAA,MAAM,YAAY,IAAA,CAAK,MAAA,CAAO,IAAI,KAAK,CAAA,wBAAS,GAAA,EAA0B;AAC1E,IAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAA,EAAO,SAAS,CAAA;AAEhC,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AACzB,MAAA,IAAI,UAAU,IAAA,KAAS,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,IACpD,CAAA;AAAA,EACF;AAAA,EASA,IAAA,CAAK,OAAe,OAAA,EAAyB;AAC3C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AACvC,IAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,IAAA,KAAS,CAAA,EAAG;AACxC,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA;AACrC,IAAA,KAAA,MAAW,YAAY,QAAA,EAAU;AAC/B,MAAA,IAAI;AACF,QAAC,SAAoC,OAAO,CAAA;AAAA,MAC9C,SAAS,KAAA,EAAO;AACd,QAAA,MAAA,CAAO,CAAA,gBAAA,EAAmB,MAAA,CAAO,KAAK,CAAC,KAAK,KAAK,CAAA;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA,EAQA,aAAA,CAAc,KAAA,EAAe,OAAA,EAAmB,MAAA,GAAiB,GAAA,EAAW;AAC1E,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAC9C,IAAA,IAAI,QAAA,eAAuB,QAAQ,CAAA;AAEnC,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAChC,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,IAC1B,GAAG,MAAM,CAAA;AAET,IAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAA,EAAO,KAAK,CAAA;AAAA,EACtC;AAAA,EAEA,gBAAgB,KAAA,EAAsB;AACpC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAC3C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,IAAA,CAAK,cAAA,CAAe,OAAO,KAAK,CAAA;AAAA,MAClC;AAAA,IACF,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,cAAA,CAAe,MAAA,EAAO,EAAG;AAChD,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AACA,MAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,eAAe,KAAA,EAAsB;AACnC,IAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAC1B,IAAA,IAAI,KAAA,EAAO,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAAA,SAC9B,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,EACzB;AAAA,EAEA,aAAa,KAAA,EAAwB;AACnC,IAAA,OAAO,QAAQ,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,GAAG,IAAI,CAAA;AAAA,EAC7C;AAAA,EAEA,iBAAiB,KAAA,EAAuB;AACtC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,KAAK,GAAG,IAAA,IAAQ,CAAA;AAAA,EACzC;AAAA,EAEA,YAAA,GAAyB;AACvB,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,EAC/B;AACF,CAAA;AAEA,IAAM,iBAAA,mBAAoB,MAAA,CAAO,GAAA,CAAI,kCAAkC,CAAA;AAKvE,IAAM,OAAA,GAAU,UAAA;AACT,IAAM,YAAA,GACX,QAAQ,iBAAiB,CAAA,KACxB,QAAQ,iBAAiB,CAAA,GAAI,IAAI,YAAA,EAAgC,CAAA;AC/H7D,SAAS,IAAA,CAAK;AAAA,EACnB,SAAA,GAAY,QAAA;AAAA,EACZ,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA,GAAO,EAAA;AAAA,EACP,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAc;AACZ,EAAA,uBACE,GAAA;AAAA,IAACC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,MAAA,EAAQ,IAAA;AAAA,MACR,IAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA,EAAO,EAAE,KAAA,EAAO,GAAG,KAAA,EAAM;AAAA,MACzB,KAAA,EAAO,IAAA;AAAA,MACN,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AC3BZ,SAAS,MAAA,CAAO;AAAA,EACrB,GAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,OAAA,GAAU,KAAA;AAAA,EACV,IAAA,GAAO,QAAA;AAAA,EACP,GAAG;AACL,CAAA,EAAgB;AACd,EAAA,uBACEC,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAU,QAAA,IAAY,OAAA;AAAA,MACtB,WAAA,EAAW,UAAU,IAAA,GAAO,MAAA;AAAA,MAC5B,SAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;AC/Bd,SAAS,wBAAA,CACd,MACA,YAAA,EACY;AACZ,EAAA,MAAM,GAAA,mBAAM,MAAA,CAAO,GAAA,CAAI,CAAA,gCAAA,EAAmC,IAAI,CAAA,CAAE,CAAA;AAChE,EAAA,MAAM,KAAA,GAAQ,UAAA;AACd,EAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,EAAG;AACf,IAAA,KAAA,CAAM,GAAG,CAAA,GAAI,aAAA,CAAiB,YAAY,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAM,GAAG,CAAA;AAClB;;;ACkBO,SAAS,gBAAkC,EAAA,EAA0B;AAC1E,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,EAAA,EAAI,CAAA;AAC7B;AAWA,IAAM,KAAA,uBAAuD,GAAA,EAAI;AACjE,IAAM,YAAA,GAAe,wBAAA,CAEnB,cAAA,EAAgB,KAAK,CAAA;AAahB,SAAS,SACd,IAAA,EACkB;AAClB,EAAA,MAAM,SAAS,UAAA,CAAW,YAAY,CAAA,CAAE,GAAA,CAAI,KAAK,EAAE,CAAA;AACnD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,OAAA,EAAU,KAAK,EAAE,CAAA,mFAAA;AAAA,KACnB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,MAAA,EAAQ,MAAA,CAAO,MAAA,IAAU;AAAC,GAC5B;AACF;;;ACpEO,IAAM,UAAA,GAAa,gBAAgC,OAAO;;;ACJ1D,IAAM,aAAA,GAAgB,OAAO,MAAA,CAAO;AAAA,EACzC,OAAA,EAAS,wCAAA;AAAA,EACT,OAAA,EAAS,+DAAA;AAAA,EACT,OAAA,EAAS,sCAAA;AAAA,EACT,YAAA,EAAc,gDAAA;AAAA,EACd,SAAA,EAAW,sCAAA;AAAA,EACX,QAAA,EAAU,4CAAA;AAAA,EACV,WAAA,EAAa,uDAAA;AAAA,EACb,MAAA,EAAQ;AACV,CAAU,CAAA;AAEH,IAAM,SAAA,GAAN,cAAwB,KAAA,CAAM;AAAA,EAC1B,MAAA;AAAA,EAET,WAAA,CAAY,SAAiB,MAAA,EAAiB;AAC5C,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF,CAAA;AAOA,IAAM,eAAA,GAAkB,mDAAA;AAExB,SAAS,SAAA,CACP,MAAA,EACA,KAAA,EACA,IAAA,EACe;AACf,EAAA,MAAM,KAAA,GAAS,SAA4C,KAAK,CAAA;AAChE,EAAA,OAAO,OAAO,KAAA,KAAU,IAAA,GAAQ,KAAA,GAAc,MAAA;AAChD;AAEA,SAAS,mBAAmB,KAAA,EAAoC;AAC9D,EAAA,MAAM,UAAW,KAAA,EAAwC,OAAA;AACzD,EAAA,MAAM,UAAU,SAAA,CAAkB,OAAA,EAAS,OAAA,EAAS,QAAQ,GAAG,IAAA,EAAK;AACpE,EAAA,OAAO,OAAA,IAAW,MAAA;AACpB;AAEO,SAAS,aAAA,CACd,OACA,EAAE,KAAA,EAAO,WAAW,aAAA,CAAc,OAAA,EAAQ,GAAwB,EAAC,EAC3D;AACR,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA,CAAM,MAAK,IAAK,QAAA;AACtD,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,UAAU,OAAO,QAAA;AAEhD,EAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,GAAA,EAAK,OAAO,aAAA,CAAc,YAAA;AAC/C,IAAA,OAAO,MAAM,OAAA,IAAW,QAAA;AAAA,EAC1B;AACA,EAAA,IAAK,KAAA,CAA4B,IAAA,KAAS,YAAA,EAAc,OAAO,QAAA;AAE/D,EAAA,MAAM,IAAA,GAAO,SAAA,CAAkB,KAAA,EAAO,MAAA,EAAQ,QAAQ,CAAA;AACtD,EAAA,IAAI,QAAQ,KAAA,GAAQ,IAAI,CAAA,EAAG,OAAO,MAAM,IAAI,CAAA;AAE5C,EAAA,MAAM,MAAA,GAAS,SAAA,CAAkB,KAAA,EAAO,QAAA,EAAU,QAAQ,CAAA;AAE1D,EAAA,IAAI,MAAA,KAAW,GAAA,EAAK,OAAO,aAAA,CAAc,YAAA;AACzC,EAAA,IAAI,MAAA,KAAW,GAAA,EAAK,OAAO,aAAA,CAAc,WAAA;AACzC,EAAA,IAAI,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,SAAY,aAAA,CAAc,OAAA;AAC3D,EAAA,IAAI,MAAA,KAAW,MAAA,IAAa,MAAA,IAAU,GAAA,SAAY,aAAA,CAAc,MAAA;AAEhE,EAAA,IAAI,MAAA,KAAW,MAAA,IAAa,MAAA,IAAU,GAAA,EAAK;AACzC,IAAA,MAAM,QAAA,GAAW,mBAAmB,KAAK,CAAA;AACzC,IAAA,IAAI,UAAU,OAAO,QAAA;AACrB,IAAA,IAAI,MAAA,KAAW,GAAA,EAAK,OAAO,aAAA,CAAc,SAAA;AACzC,IAAA,IAAI,MAAA,KAAW,GAAA,EAAK,OAAO,aAAA,CAAc,QAAA;AACzC,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAA,GACJ,OAAO,SAAA,KAAc,WAAA,IAAe,UAAU,MAAA,KAAW,KAAA;AAC3D,EAAA,IACE,SAAA,IACC,eAAA,CAAgB,IAAA,CAAM,KAAA,CAAgB,OAAA,IAAW,EAAE,CAAA,KACjD,KAAA,YAAiB,SAAA,IAAa,QAAA,CAAS,IAAA,CAAM,KAAA,CAAgB,IAAI,CAAA,CAAA,EACpE;AACA,IAAA,OAAO,aAAA,CAAc,OAAA;AAAA,EACvB;AAEA,EAAA,OAAO,QAAA;AACT;ACjEA,IAAM,YAAA,GAAe,MAAA;AAOrB,SAAS,oBAAA,CAAqB;AAAA,EAC5B,KAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,KAAA,GAAQ,SAAS,UAAU,CAAA;AAEjC,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,KAAA,CAAM,MAAM,MAAA,EAC1B,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,KAAA,CAAM,KAAA,CAAM,IAAA,EAC1B,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,0BAAA,EAA4B,IAAA,EAAM,IAAI,CAAA,EACpD,CAAA;AAAA,oBACAA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAM,KAAA,CAAM,KAAA,EACxB,QAAA,EAAA,OAAA,IACC,aAAA,CAAc,OAAO,EAAE,QAAA,EAAU,cAAA,CAAe,YAAA,EAAc,CAAA,EAClE,CAAA;AAAA,oBACAA,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,MAAM,KAAA,CAAM,WAAA;AAAA,QACvB,OAAA,EAAS,UAAA;AAAA,QACT,IAAA,EAAK,QAAA;AAAA,QACN,QAAA,EAAA;AAAA;AAAA;AAED,GAAA,EACF,CAAA;AAEJ;AAEO,IAAM,iBAAA,GAAN,cAAgC,KAAA,CAAM,SAAA,CAG3C;AAAA,EACA,YAAY,KAAA,EAA+B;AACzC,IAAA,KAAA,CAAM,KAAK,CAAA;AACX,IAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU,KAAA;AAAA,MACV,cAAc,KAAA,CAAM;AAAA,KACtB;AAAA,EACF;AAAA,EAEA,OAAO,yBACL,KAAA,EACiC;AACjC,IAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAU,IAAA,EAAK;AAAA,EACjC;AAAA,EAEA,OAAO,wBAAA,CACL,KAAA,EACA,KAAA,EACwC;AACxC,IAAA,IAAI,KAAA,CAAM,QAAA,KAAa,KAAA,CAAM,YAAA,EAAc;AACzC,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,IAAA;AAAA,QACP,SAAA,EAAW,IAAA;AAAA,QACX,QAAA,EAAU,KAAA;AAAA,QACV,cAAc,KAAA,CAAM;AAAA,OACtB;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,iBAAA,CAAkB,OAAc,SAAA,EAAsB;AACpD,IAAA,IAAA,CAAK,QAAA,CAAS,EAAE,SAAA,EAAW,CAAA;AAE3B,IAAA,MAAM,EAAE,SAAS,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,EAAO,OAAA,KAAY,IAAA,CAAK,KAAA;AAChE,IAAA,MAAM,UAAU,kBAAA,CAAmB,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,SAAS,CAAA;AAEtE,IAAA,IAAI;AACF,MAAA,OAAA,GAAU,KAAA,EAAO,WAAW,OAAO,CAAA;AAAA,IACrC,SAAS,aAAA,EAAe;AACtB,MAAA,MAAA,CAAO,gCAAA,EAAkC,eAAe,MAAM,CAAA;AAAA,IAChE;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,YAAA,CAAa,IAAA,CAAK,YAAY,SAAA,EAAW;AAAA,QACvC,KAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAA,EAAS,OAAA,IAAW,aAAA,CAAc,KAAK,CAAA;AAAA,QACvC,YAAY,IAAA,CAAK;AAAA,OAClB,CAAA;AAAA,IACH;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,gBAAA,EAAiB;AAClC,MAAA,QAAA,EAAU,YAAA,GAAe,OAAO,OAAO,CAAA;AAAA,IACzC,SAAS,cAAA,EAAgB;AACvB,MAAA,MAAA,CAAO,yBAAA,EAA2B,gBAAgB,MAAM,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,aAAa,MAAM;AACjB,IAAA,IAAA,CAAK,QAAA,CAAS;AAAA,MACZ,KAAA,EAAO,IAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,QAAA,EAAU;AAAA,KACX,CAAA;AACD,IAAA,IAAA,CAAK,MAAM,OAAA,IAAU;AAAA,EACvB,CAAA;AAAA,EAEA,MAAA,GAAoB;AAClB,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,OAAO,KAAK,KAAA,CAAM,QAAA;AAE5C,IAAA,MAAM,EAAE,QAAA,EAAU,OAAA,EAAS,KAAA,KAAU,IAAA,CAAK,KAAA;AAC1C,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,IAAA,CAAK,KAAA;AAEvB,IAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,MAAA,OAAO,SAAS,EAAE,KAAA,EAAO,UAAA,EAAY,IAAA,CAAK,YAAY,CAAA;AAAA,IACxD;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,uBACEA,GAAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEO,SAAS,WAAA,CAAY,EAAE,QAAA,EAAU,QAAA,EAAU,SAAQ,EAAqB;AAC7E,EAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,EAAA,uBACEA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,QAAA;AAAA,MACA,SAAS,cAAA,CAAe,UAAA;AAAA,MACxB,OAAA;AAAA,MACA,QAAA,EAAU,QAAA;AAAA,MACV,OAAO,cAAA,CAAe,YAAA;AAAA,MACtB,OAAA,EAAQ,MAAA;AAAA,MAEP;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,WAAA,CAAY;AAAA,EAC1B,QAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,uBACEA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,QAAA;AAAA,MACA,SAAS,cAAA,CAAe,UAAA;AAAA,MACxB,IAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA,EAAO,IAAA,GAAO,CAAA,EAAG,IAAI,WAAW,cAAA,CAAe,YAAA;AAAA,MAC/C,OAAA,EAAQ,QAAA;AAAA,MAEP;AAAA;AAAA,GACH;AAEJ;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,uBACEA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,QAAA;AAAA,MACA,OAAA,EAAS,WAAW,cAAA,CAAe,aAAA;AAAA,MACnC,OAAA;AAAA,MACA,OAAA,EAAQ,QAAA;AAAA,MAEP;AAAA;AAAA,GACH;AAEJ;AC1MO,SAAS,mBAAA,GAA4B;AAC1C,EAAA,MAAM,SAAA,GAAY,OAAe,CAAC,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,OAAe,CAAC,CAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,MAAA,iBAAoB,IAAI,GAAA,EAAK,CAAA;AAE3C,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,CAAC,KAAA,EAAgB,SAAS,SAAA,KAAc;AACtE,IAAA,IAAI,iBAAA,CAAkB,KAAK,CAAA,EAAG;AAE9B,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AAErB,IAAA,IAAI,KAAA,CAAM,OAAA,IAAW,qBAAA,CAAsB,SAAA,EAAW;AACtD,IAAA,IAAI,GAAA,GAAM,SAAA,CAAU,OAAA,GAAU,qBAAA,CAAsB,QAAA,EAAU;AAE9D,IAAA,MAAM,OAAA,GAAU,gBAAgB,KAAK,CAAA;AACrC,IAAA,MAAM,GAAA,GAAM,OAAA,IAAW,MAAA,CAAO,KAAK,CAAA;AAEnC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG;AAC5B,IAAA,KAAA,CAAM,OAAA,CAAQ,IAAI,GAAG,CAAA;AAErB,IAAA,SAAA,CAAU,OAAA,GAAU,GAAA;AACpB,IAAA,KAAA,CAAM,OAAA,IAAW,CAAA;AAEjB,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,gBAAA,EAAiB;AAClC,MAAA,QAAA,EAAU,eAAe,KAAA,EAAO;AAAA,QAC9B,cAAA,EAAgB,IAAA;AAAA,QAChB;AAAA,OACD,CAAA;AAAA,IACH,SAAS,cAAA,EAAgB;AACvB,MAAA,MAAA,CAAO,uBAAA,EAAyB,gBAAgB,MAAM,CAAA;AAAA,IACxD;AAEA,IAAA,YAAA,CAAa,IAAA,CAAK,YAAY,SAAA,EAAW;AAAA,MACvC,KAAA;AAAA,MACA,OAAA,EAAS,cAAc,KAAK;AAAA,KAC7B,CAAA;AAAA,EACH,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAA,GAAa,aAAA,CAAc,CAAC,KAAA,EAAO,OAAO,KAAA,KAAU;AACxD,MAAA,IAAI;AACF,QAAA,gBAAA,GAAmB,YAAA,CAAa,KAAA,EAAO,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,MACzD,CAAA,CAAA,MAAQ;AAAA,MAAC;AAAA,IACX,CAAC,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KACf,WAAA,CAAY,MAAM,KAAA,IAAS,KAAA,CAAM,SAAS,gBAAgB,CAAA;AAC5D,IAAA,MAAM,cAAc,CAAC,KAAA,KACnB,WAAA,CAAY,KAAA,CAAM,QAAQ,oBAAoB,CAAA;AAEhD,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,OAAO,CAAA;AACxC,IAAA,MAAA,CAAO,gBAAA,CAAiB,sBAAsB,WAAW,CAAA;AAEzD,IAAA,OAAO,MAAM;AACX,MAAA,UAAA,EAAW;AACX,MAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC3C,MAAA,MAAA,CAAO,mBAAA,CAAoB,sBAAsB,WAAW,CAAA;AAAA,IAC9D,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,OAAO,IAAA;AACT","file":"index.js","sourcesContent":["export const ERROR_MESSAGES = Object.freeze({\n GLOBAL_TITLE: \"Something went wrong\",\n GLOBAL_MSG: \"We ran into an unexpected problem. Please try again\",\n MODULE_TITLE: \"Something went wrong\",\n MODULE_MSG: \"This part of the app isn't working right now. Please try again\",\n COMPONENT_MSG: \"This section couldn't be loaded. Please try again\",\n FALLBACK_TITLE: \"Something went wrong\",\n FALLBACK_MSG: \"This section couldn't be loaded. Please try again\",\n} as const);\n\nexport const MAX_CONTEXT = 10;\nexport const MAX_FINGERPRINTS = 100;\nexport const DEFAULT_DEDUPE_WINDOW = 60000;\n\nexport const ERROR_LISTENER_CONFIG = Object.freeze({\n maxErrors: 10,\n throttle: 2000,\n ignored: Object.freeze([\n /ResizeObserver loop/i,\n /Network request failed/i,\n /Loading chunk/i,\n /Unexpected end of input/i,\n /Failed to fetch/i,\n /Script error/i,\n /HTTP\\s*404/i,\n ]),\n} as const);\n","import type { ErrorInfo } from \"react\";\nimport { DEFAULT_DEDUPE_WINDOW, ERROR_LISTENER_CONFIG } from \"./constants\";\nimport type {\n BrowserEnvironment,\n ErrorContextData,\n ErrorReport,\n} from \"./types\";\n\nconst IS_BROWSER = typeof window !== \"undefined\";\nconst HAS_NAVIGATOR = typeof navigator !== \"undefined\";\n\nexport const getRuntimePath = (): string | null =>\n typeof window !== \"undefined\" ? window.location.pathname : null;\n\nexport const getUserAgent = (): string | null =>\n typeof navigator !== \"undefined\" ? navigator.userAgent : null;\n\nexport function createErrorContext({\n errorInfo,\n name,\n title,\n variant,\n}: {\n errorInfo?: ErrorInfo | null;\n name?: string;\n title?: string;\n variant?: string;\n}): ErrorContextData {\n return {\n componentStack: errorInfo?.componentStack || null,\n route: getRuntimePath(),\n userAgent: getUserAgent(),\n timestamp: new Date().toISOString(),\n name: name || title || \"ErrorBoundary\",\n variant: variant || \"default\",\n source: \"ErrorBoundary\",\n };\n}\n\nexport function normalizeSampleRate(value: unknown): number {\n const sampleRate = Number(value);\n return Number.isFinite(sampleRate) ? Math.min(1, Math.max(0, sampleRate)) : 1;\n}\n\nexport function normalizeDedupeWindow(value: unknown): number {\n const dedupeWindow = Number(value);\n return Number.isFinite(dedupeWindow)\n ? Math.max(0, dedupeWindow)\n : DEFAULT_DEDUPE_WINDOW;\n}\n\nexport function getBrowserEnvironment(\n route?: string | null,\n): BrowserEnvironment {\n return {\n route: route || (IS_BROWSER ? window.location.pathname : null),\n userAgent: HAS_NAVIGATOR ? navigator.userAgent : null,\n platform: HAS_NAVIGATOR ? navigator.platform : null,\n language: HAS_NAVIGATOR ? navigator.language : null,\n online: HAS_NAVIGATOR ? navigator.onLine : true,\n url: IS_BROWSER ? window.location.href : null,\n };\n}\n\nexport function fingerprint(\n error: unknown,\n context: Partial<ErrorContextData> = {},\n): string {\n const stackTop =\n typeof context.componentStack === \"string\"\n ? context.componentStack.split(\"\\n\").find(Boolean) || \"\"\n : \"\";\n\n const errObj = error as { message?: string; name?: string } | null;\n const errorMessage = (errObj?.message || String(error || \"\")).slice(0, 100);\n const errorName = errObj?.name || \"UnknownError\";\n const route = context.route || \"\";\n\n return [stackTop, errorMessage, errorName, route].filter(Boolean).join(\"::\");\n}\n\nexport function createReport(\n error: unknown,\n {\n context = {},\n tags = {},\n }: {\n context?: Record<string, unknown>;\n tags?: Record<string, string>;\n } = {},\n): ErrorReport {\n const errObj = error as {\n message?: string;\n name?: string;\n stack?: string;\n } | null;\n return {\n error: {\n message: errObj?.message || String(error),\n stack: errObj?.stack || null,\n name: errObj?.name || \"UnknownError\",\n },\n fingerprint: fingerprint(error, context as Partial<ErrorContextData>),\n timestamp: new Date().toISOString(),\n environment: getBrowserEnvironment(context.route as string | undefined),\n componentStack: (context.componentStack as string) || null,\n context,\n tags,\n };\n}\n\nexport function getErrorMessage(error: unknown): string {\n if (!error) return \"\";\n if (typeof error === \"string\") return error.trim();\n if (error instanceof Error) return error.message.trim();\n\n const errObj = error as { message?: string; toString?: () => string };\n return String(errObj?.message || errObj?.toString?.() || error).trim();\n}\n\nexport function shouldIgnoreError(error: unknown): boolean {\n if (!error) return true;\n\n const errWithNotFound = error as { isNotFound?: () => boolean };\n if (\n typeof errWithNotFound?.isNotFound === \"function\" &&\n errWithNotFound.isNotFound()\n ) {\n return true;\n }\n\n const message = getErrorMessage(error);\n return ERROR_LISTENER_CONFIG.ignored.some((pattern) => pattern.test(message));\n}\n","import {\n DEFAULT_DEDUPE_WINDOW,\n MAX_CONTEXT,\n MAX_FINGERPRINTS,\n} from \"./constants\";\nimport type {\n ErrorReport,\n ErrorReporterHandler,\n ErrorReporterOptions,\n SentryScope,\n} from \"./types\";\nimport {\n createReport,\n normalizeDedupeWindow,\n normalizeSampleRate,\n} from \"./utils\";\n\nconst IS_PRODUCTION = process.env.NODE_ENV === \"production\";\nconst IS_BROWSER = typeof window !== \"undefined\";\n\ndeclare global {\n interface Window {\n Sentry?: {\n captureException: (error: unknown) => void;\n withScope: (callback: (scope: SentryScope) => void) => void;\n };\n }\n}\n\nclass ErrorReporter {\n private handlers: ErrorReporterHandler[] = [];\n private context: Record<string, unknown> = {};\n private tags: Record<string, string> = {};\n private seen = new Set<string>();\n private enabled: boolean;\n private sampleRate: number;\n private beforeSend: ((report: ErrorReport) => ErrorReport | null) | null;\n private dedupeWindow: number;\n\n constructor(options: ErrorReporterOptions = {}) {\n this.enabled = options.enabled ?? true;\n this.sampleRate = normalizeSampleRate(options.sampleRate ?? 1);\n this.beforeSend = options.beforeSend || null;\n this.dedupeWindow = normalizeDedupeWindow(\n options.deduplicateWindow ?? DEFAULT_DEDUPE_WINDOW,\n );\n }\n\n addHandler(handler: ErrorReporterHandler): this {\n if (typeof handler?.handle === \"function\") {\n this.handlers.push(handler);\n }\n return this;\n }\n\n removeHandler(name: string): this {\n this.handlers = this.handlers.filter((handler) => handler.name !== name);\n return this;\n }\n\n setContext(key: string, value: unknown): this {\n if (\n Object.hasOwn(this.context, key) ||\n Object.keys(this.context).length < MAX_CONTEXT\n ) {\n this.context[key] = value;\n }\n return this;\n }\n\n setTag(key: string, value: unknown): this {\n this.tags[key] = String(value);\n return this;\n }\n\n captureError(\n error: unknown,\n extraContext: Record<string, unknown> = {},\n ): ErrorReport | undefined {\n if (!this.enabled || Math.random() > this.sampleRate) return;\n\n this.ensureDefaultHandlers();\n\n const context = { ...this.context, ...extraContext };\n let report = createReport(error, { context, tags: { ...this.tags } });\n const dedupeKey = report.fingerprint;\n\n if (this.seen.has(dedupeKey)) return;\n\n if (this.seen.size >= MAX_FINGERPRINTS) {\n const first = this.seen.keys().next().value;\n if (first) this.seen.delete(first);\n }\n\n this.seen.add(dedupeKey);\n setTimeout(() => this.seen.delete(dedupeKey), this.dedupeWindow);\n\n if (typeof this.beforeSend === \"function\") {\n try {\n const transformed = this.beforeSend(report);\n if (!transformed) return;\n report = transformed;\n } catch {}\n }\n\n this.handlers.forEach((handler) => {\n try {\n handler.handle(report);\n } catch {}\n });\n\n return report;\n }\n\n captureMessage(\n message: string,\n level = \"info\",\n context: Record<string, unknown> = {},\n ): ErrorReport | undefined {\n const error = new Error(message);\n error.name = \"Message\";\n return this.captureError(error, { ...context, level });\n }\n\n ensureDefaultHandlers(): void {\n if (this.handlers.length || !IS_BROWSER) return;\n\n this.handlers.push(createConsoleHandler());\n\n if (window.Sentry) {\n const sentryHandler = createSentryHandler(window.Sentry);\n if (sentryHandler.name === \"sentry\") {\n this.handlers.push(sentryHandler);\n }\n }\n }\n}\n\nlet instance: ErrorReporter | null = null;\n\nexport function getErrorReporter(\n options: ErrorReporterOptions = {},\n): ErrorReporter {\n if (!instance) {\n instance = new ErrorReporter(options);\n }\n return instance;\n}\n\nexport function createConsoleHandler(): ErrorReporterHandler {\n return {\n name: \"console\",\n handle(report: ErrorReport) {\n if (IS_PRODUCTION) return;\n console.error(\"[ErrorReporter]\", {\n error: report.error.message,\n fingerprint: report.fingerprint,\n route: report.environment.route,\n });\n },\n };\n}\n\nexport function createSentryHandler(Sentry: unknown): ErrorReporterHandler {\n const sentryObj = Sentry as {\n captureException?: (err: Error) => void;\n withScope?: (cb: (scope: SentryScope) => void) => void;\n } | null;\n\n if (\n !sentryObj ||\n typeof sentryObj.captureException !== \"function\" ||\n typeof sentryObj.withScope !== \"function\"\n ) {\n return createConsoleHandler();\n }\n\n return {\n name: \"sentry\",\n handle(report: ErrorReport) {\n sentryObj.withScope!((scope: SentryScope) => {\n if (report.fingerprint) scope.setFingerprint([report.fingerprint]);\n if (report.user) scope.setUser(report.user);\n\n if (report.tags && typeof report.tags === \"object\") {\n Object.entries(report.tags).forEach(([key, value]) =>\n scope.setTag(key, String(value)),\n );\n }\n\n if (report.environment)\n scope.setContext(\"environment\", report.environment);\n if (report.context) scope.setContext(\"custom\", report.context);\n if (report.componentStack)\n scope.setExtra(\"componentStack\", report.componentStack);\n\n const error = new Error(report.error.message);\n error.name = report.error.name || \"Error\";\n error.stack = report.error.stack || undefined;\n\n sentryObj.captureException!(error);\n });\n },\n };\n}\n","export type ReportLevel = \"error\" | \"warn\";\n\nexport type ReportSink = (\n scope: string,\n error: unknown,\n level: ReportLevel,\n) => void;\n\nlet sink: ReportSink | null = null;\n\nexport function report(\n scope: string,\n error: unknown,\n level: ReportLevel = \"error\",\n): void {\n if (sink) {\n try {\n sink(scope, error, level);\n return;\n } catch {}\n }\n\n if (process.env.NODE_ENV === \"production\" && typeof window !== \"undefined\") {\n return;\n }\n console[level](`[${scope}]`, error);\n}\n\nexport function setReportSink(next: ReportSink): () => void {\n sink = next;\n return () => {\n if (sink === next) sink = null;\n };\n}\n","import { report } from \"./utils/report\";\nexport type EventListener<T = unknown> = (payload: T) => void;\n\nexport const EVENT_TYPES = Object.freeze({\n API_UNAUTHORIZED: \"API_UNAUTHORIZED\",\n STATE_CHANGE: \"STATE_CHANGE\",\n API_ERROR: \"API_ERROR\",\n APP_ERROR: \"APP_ERROR\",\n} as const);\n\nexport interface FrameworkEventMap {\n [EVENT_TYPES.API_UNAUTHORIZED]: {\n error?: unknown;\n status?: number;\n [key: string]: unknown;\n };\n [EVENT_TYPES.API_ERROR]: {\n error: unknown;\n isCritical?: boolean;\n message?: string;\n retry?: () => void;\n status?: number;\n [key: string]: unknown;\n };\n [EVENT_TYPES.APP_ERROR]: {\n error?: unknown;\n message?: string;\n resetError?: () => void;\n source?: string;\n [key: string]: unknown;\n };\n [EVENT_TYPES.STATE_CHANGE]: {\n message?: string;\n status?: \"success\" | \"warning\" | \"info\" | \"error\" | string;\n [key: string]: unknown;\n };\n}\n\nexport class EventEmitter<TEvents extends object = FrameworkEventMap> {\n private events: Map<string, Set<EventListener<never>>> = new Map();\n private debounceTimers: Map<string, ReturnType<typeof setTimeout>> =\n new Map();\n\n subscribe<K extends keyof TEvents>(\n event: K,\n callback: EventListener<TEvents[K]>,\n ): () => void;\n subscribe<T = unknown>(event: string, callback: EventListener<T>): () => void;\n subscribe(event: string, callback: EventListener<never>): () => void {\n if (typeof event !== \"string\" || !event || typeof callback !== \"function\") {\n return () => {};\n }\n const listeners = this.events.get(event) || new Set<EventListener<never>>();\n listeners.add(callback);\n this.events.set(event, listeners);\n\n return () => {\n listeners.delete(callback);\n if (listeners.size === 0) this.events.delete(event);\n };\n }\n\n emit<K extends keyof TEvents>(\n event: K,\n ...args: TEvents[K] extends void | undefined\n ? [payload?: TEvents[K]]\n : [payload: TEvents[K]]\n ): void;\n emit<T = unknown>(event: string, payload?: T): void;\n emit(event: string, payload?: unknown): void {\n const listeners = this.events.get(event);\n if (!listeners || listeners.size === 0) return;\n const snapshot = Array.from(listeners);\n for (const callback of snapshot) {\n try {\n (callback as EventListener<unknown>)(payload);\n } catch (error) {\n report(`Event listener (${String(event)})`, error);\n }\n }\n }\n\n emitDebounced<K extends keyof TEvents>(\n event: K,\n payload: TEvents[K],\n waitMs?: number,\n ): void;\n emitDebounced<T = unknown>(event: string, payload?: T, waitMs?: number): void;\n emitDebounced(event: string, payload?: unknown, waitMs: number = 100): void {\n const existing = this.debounceTimers.get(event);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.debounceTimers.delete(event);\n this.emit(event, payload);\n }, waitMs);\n\n this.debounceTimers.set(event, timer);\n }\n\n cancelDebounced(event?: string): void {\n if (event) {\n const timer = this.debounceTimers.get(event);\n if (timer) {\n clearTimeout(timer);\n this.debounceTimers.delete(event);\n }\n } else {\n for (const timer of this.debounceTimers.values()) {\n clearTimeout(timer);\n }\n this.debounceTimers.clear();\n }\n }\n\n unsubscribeAll(event?: string): void {\n this.cancelDebounced(event);\n if (event) this.events.delete(event);\n else this.events.clear();\n }\n\n hasListeners(event: string): boolean {\n return Boolean(this.events.get(event)?.size);\n }\n\n getListenerCount(event: string): number {\n return this.events.get(event)?.size || 0;\n }\n\n getAllEvents(): string[] {\n return [...this.events.keys()];\n }\n}\n\nconst GLOBAL_EVENTS_KEY = Symbol.for(\"__base_framework_global_events__\");\ntype GlobalWithEvents = typeof globalThis & {\n [GLOBAL_EVENTS_KEY]?: EventEmitter<FrameworkEventMap>;\n};\n\nconst _global = globalThis as GlobalWithEvents;\nexport const globalEvents: EventEmitter<FrameworkEventMap> =\n _global[GLOBAL_EVENTS_KEY] ??\n (_global[GLOBAL_EVENTS_KEY] = new EventEmitter<FrameworkEventMap>());\n","\"use client\";\n\nimport { Icon as IconifyIcon } from \"@iconify-icon/react\";\nimport type { ComponentProps, CSSProperties } from \"react\";\n\nexport interface IconProps\n extends Omit<ComponentProps<typeof IconifyIcon>, \"icon\" | \"size\"> {\n icon: string | ComponentProps<typeof IconifyIcon>[\"icon\"];\n size?: number | string;\n color?: string;\n className?: string;\n style?: CSSProperties;\n onClick?: () => void;\n}\n\nexport function Icon({\n className = \"center\",\n color,\n icon,\n onClick,\n size = 20,\n style,\n ...props\n}: IconProps) {\n return (\n <IconifyIcon\n className={className}\n height={size}\n icon={icon}\n onClick={onClick}\n style={{ color, ...style }}\n width={size}\n {...props}\n />\n );\n}\n\nIcon.displayName = \"Icon\";\n","\"use client\";\n\nimport type { ButtonHTMLAttributes, ReactNode, Ref } from \"react\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n ref?: Ref<HTMLButtonElement>;\n children?: ReactNode;\n loading?: boolean;\n}\n\nexport function Button({\n ref,\n children,\n className,\n disabled = false,\n loading = false,\n type = \"button\",\n ...props\n}: ButtonProps) {\n return (\n <button\n ref={ref}\n type={type}\n disabled={disabled || loading}\n aria-busy={loading ? true : undefined}\n className={className}\n {...props}\n >\n {children}\n </button>\n );\n}\n\nButton.displayName = \"Button\";\n","import { createContext, type Context } from \"react\";\n\nexport function getOrCreateGlobalContext<T>(\n name: string,\n defaultValue: T,\n): Context<T> {\n const sym = Symbol.for(`@omerdlw/base-framework/context/${name}`);\n const store = globalThis as unknown as Record<symbol, Context<T>>;\n if (!store[sym]) {\n store[sym] = createContext<T>(defaultValue);\n }\n return store[sym];\n}\n","\"use client\";\n\nimport {\n createContext,\n createElement,\n useContext,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\n\nexport interface ThemeSpec<S extends string = string> {\n readonly id: string;\n readonly _slots?: S;\n}\n\nexport interface ThemeConfig<S extends string> {\n slots: Readonly<Record<S, string>>;\n styles?: Readonly<Partial<Record<S, CSSProperties>>>;\n}\n\nexport interface ResolvedTheme<S extends string> {\n readonly slots: Readonly<Record<S, string>>;\n readonly styles: Readonly<Partial<Record<S, CSSProperties>>>;\n}\n\nexport interface ThemeEntry {\n readonly id: string;\n readonly config: ThemeConfig<string>;\n}\n\nexport function defineThemeSpec<S extends string>(id: string): ThemeSpec<S> {\n return Object.freeze({ id });\n}\n\nexport function defineTheme<S extends string>(\n spec: ThemeSpec<S>,\n config: ThemeConfig<NoInfer<S>>,\n): ThemeEntry {\n return { id: spec.id, config: config as ThemeEntry[\"config\"] };\n}\n\nimport { getOrCreateGlobalContext } from \"@/kernel/context-registry\";\n\nconst EMPTY: ReadonlyMap<string, ThemeEntry[\"config\"]> = new Map();\nconst ThemeContext = getOrCreateGlobalContext<\n ReadonlyMap<string, ThemeEntry[\"config\"]>\n>(\"ThemeContext\", EMPTY);\n\nexport function ThemeProvider({\n children,\n themes,\n}: {\n children?: ReactNode;\n themes: readonly ThemeEntry[];\n}) {\n const configs = new Map(themes.map((entry) => [entry.id, entry.config]));\n return createElement(ThemeContext.Provider, { value: configs }, children);\n}\n\nexport function useTheme<S extends string>(\n spec: ThemeSpec<S>,\n): ResolvedTheme<S> {\n const config = useContext(ThemeContext).get(spec.id);\n if (!config) {\n throw new Error(\n `Theme \"${spec.id}\" is missing. Add its theme file to src/config/ and list it in src/config/index.ts.`,\n );\n }\n return {\n slots: config.slots,\n styles: config.styles ?? {},\n } as ResolvedTheme<S>;\n}\n","import { defineThemeSpec } from \"@/theme\";\n\nexport type ErrorThemeSlot = \"screen\" | \"icon\" | \"title\" | \"retryButton\";\n\nexport const errorTheme = defineThemeSpec<ErrorThemeSlot>(\"error\");\n","export const USER_MESSAGES = Object.freeze({\n generic: \"Something went wrong. Please try again\",\n network: \"You appear to be offline. Check your connection and try again\",\n timeout: \"That took too long. Please try again\",\n unauthorized: \"Your session has expired. Please sign in again\",\n forbidden: \"You don't have permission to do that\",\n notFound: \"We couldn't find what you were looking for\",\n rateLimited: \"Too many attempts. Please wait a moment and try again\",\n server: \"We're having trouble on our end. Please try again in a moment\",\n} as const);\n\nexport class UserError extends Error {\n readonly status?: number;\n\n constructor(message: string, status?: number) {\n super(message);\n this.name = \"UserError\";\n this.status = status;\n }\n}\n\nexport interface UserMessageOptions {\n fallback?: string;\n codes?: Readonly<Record<string, string>>;\n}\n\nconst NETWORK_FAILURE = /failed to fetch|network|load failed|fetch failed/i;\n\nfunction readField<T>(\n source: unknown,\n field: string,\n type: \"string\" | \"number\",\n): T | undefined {\n const value = (source as Record<string, unknown> | null)?.[field];\n return typeof value === type ? (value as T) : undefined;\n}\n\nfunction readPayloadMessage(error: unknown): string | undefined {\n const payload = (error as { payload?: unknown } | null)?.payload;\n const message = readField<string>(payload, \"error\", \"string\")?.trim();\n return message || undefined;\n}\n\nexport function toUserMessage(\n error: unknown,\n { codes, fallback = USER_MESSAGES.generic }: UserMessageOptions = {},\n): string {\n if (typeof error === \"string\") return error.trim() || fallback;\n if (!error || typeof error !== \"object\") return fallback;\n\n if (error instanceof UserError) {\n if (error.status === 401) return USER_MESSAGES.unauthorized;\n return error.message || fallback;\n }\n if ((error as { name?: string }).name === \"AbortError\") return fallback;\n\n const code = readField<string>(error, \"code\", \"string\");\n if (code && codes?.[code]) return codes[code];\n\n const status = readField<number>(error, \"status\", \"number\");\n\n if (status === 401) return USER_MESSAGES.unauthorized;\n if (status === 429) return USER_MESSAGES.rateLimited;\n if (status === 408 || status === 504) return USER_MESSAGES.timeout;\n if (status !== undefined && status >= 500) return USER_MESSAGES.server;\n\n if (status !== undefined && status >= 400) {\n const authored = readPayloadMessage(error);\n if (authored) return authored;\n if (status === 403) return USER_MESSAGES.forbidden;\n if (status === 404) return USER_MESSAGES.notFound;\n return fallback;\n }\n\n const isOffline =\n typeof navigator !== \"undefined\" && navigator.onLine === false;\n if (\n isOffline ||\n (NETWORK_FAILURE.test((error as Error).message ?? \"\") &&\n (error instanceof TypeError || /fetch/i.test((error as Error).name)))\n ) {\n return USER_MESSAGES.network;\n }\n\n return fallback;\n}\n","\"use client\";\n\nimport React, { type ErrorInfo, type ReactNode } from \"react\";\nimport { usePathname } from \"next/navigation\";\nimport { EVENT_TYPES, globalEvents } from \"@/events\";\nimport { Button, Icon } from \"@/atoms\";\nimport { useTheme } from \"@/theme\";\nimport { ERROR_MESSAGES } from \"./constants\";\nimport { errorTheme } from \"./theme\";\nimport { getErrorReporter } from \"./reporter\";\nimport type {\n ComponentErrorProps,\n ErrorBoundaryCoreProps,\n ErrorBoundaryCoreState,\n GlobalErrorProps,\n ModuleErrorProps,\n} from \"./types\";\nimport { createErrorContext } from \"./utils\";\nimport { report, toUserMessage } from \"@/utils\";\n\nconst ActionButton = Button as React.ComponentType<{\n children?: ReactNode;\n className?: string;\n onClick?: () => void;\n type?: \"button\" | \"submit\" | \"reset\";\n}>;\n\nfunction DefaultErrorFallback({\n error,\n message,\n resetError,\n title,\n}: {\n error: Error | null;\n message?: string;\n resetError: () => void;\n title?: string;\n}) {\n const theme = useTheme(errorTheme);\n\n return (\n <div className={theme.slots.screen}>\n <div className={theme.slots.icon}>\n <Icon icon={\"solar:danger-circle-bold\"} size={30} />\n </div>\n <h3 className={theme.slots.title}>\n {message ||\n toUserMessage(error, { fallback: ERROR_MESSAGES.FALLBACK_MSG })}\n </h3>\n <ActionButton\n className={theme.slots.retryButton}\n onClick={resetError}\n type=\"button\"\n >\n Try again\n </ActionButton>\n </div>\n );\n}\n\nexport class ErrorBoundaryCore extends React.Component<\n ErrorBoundaryCoreProps,\n ErrorBoundaryCoreState\n> {\n constructor(props: ErrorBoundaryCoreProps) {\n super(props);\n this.state = {\n error: null,\n errorInfo: null,\n hasError: false,\n lastResetKey: props.resetKey,\n };\n }\n\n static getDerivedStateFromError(\n error: Error,\n ): Partial<ErrorBoundaryCoreState> {\n return { error, hasError: true };\n }\n\n static getDerivedStateFromProps(\n props: ErrorBoundaryCoreProps,\n state: ErrorBoundaryCoreState,\n ): Partial<ErrorBoundaryCoreState> | null {\n if (props.resetKey !== state.lastResetKey) {\n return {\n error: null,\n errorInfo: null,\n hasError: false,\n lastResetKey: props.resetKey,\n };\n }\n return null;\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n this.setState({ errorInfo });\n\n const { message, name, onError, silent, title, variant } = this.props;\n const context = createErrorContext({ errorInfo, name, title, variant });\n\n try {\n onError?.(error, errorInfo, context);\n } catch (callbackError) {\n report(\"ErrorBoundary onError callback\", callbackError, \"warn\");\n }\n\n if (!silent) {\n globalEvents.emit(EVENT_TYPES.APP_ERROR, {\n error,\n errorInfo,\n message: message || toUserMessage(error),\n resetError: this.resetError,\n });\n }\n\n try {\n const reporter = getErrorReporter();\n reporter?.captureError?.(error, context);\n } catch (reportingError) {\n report(\"ErrorBoundary reporting\", reportingError, \"warn\");\n }\n }\n\n resetError = () => {\n this.setState({\n error: null,\n errorInfo: null,\n hasError: false,\n });\n this.props.onReset?.();\n };\n\n render(): ReactNode {\n if (!this.state.hasError) return this.props.children;\n\n const { fallback, message, title } = this.props;\n const { error } = this.state;\n\n if (typeof fallback === \"function\") {\n return fallback({ error, resetError: this.resetError });\n }\n\n if (fallback) {\n return fallback;\n }\n\n return (\n <DefaultErrorFallback\n error={error}\n message={message}\n resetError={this.resetError}\n title={title}\n />\n );\n }\n}\n\nexport function GlobalError({ children, fallback, onReset }: GlobalErrorProps) {\n const pathname = usePathname();\n\n return (\n <ErrorBoundaryCore\n fallback={fallback}\n message={ERROR_MESSAGES.GLOBAL_MSG}\n onReset={onReset}\n resetKey={pathname}\n title={ERROR_MESSAGES.GLOBAL_TITLE}\n variant=\"full\"\n >\n {children}\n </ErrorBoundaryCore>\n );\n}\n\nexport function ModuleError({\n children,\n fallback,\n name,\n onReset,\n}: ModuleErrorProps) {\n return (\n <ErrorBoundaryCore\n fallback={fallback}\n message={ERROR_MESSAGES.MODULE_MSG}\n name={name}\n onReset={onReset}\n title={name ? `${name} Error` : ERROR_MESSAGES.MODULE_TITLE}\n variant=\"module\"\n >\n {children}\n </ErrorBoundaryCore>\n );\n}\n\nexport function ComponentError({\n children,\n fallback,\n message,\n onReset,\n}: ComponentErrorProps) {\n return (\n <ErrorBoundaryCore\n fallback={fallback}\n message={message || ERROR_MESSAGES.COMPONENT_MSG}\n onReset={onReset}\n variant=\"inline\"\n >\n {children}\n </ErrorBoundaryCore>\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { EVENT_TYPES, globalEvents } from \"@/events\";\nimport { ERROR_LISTENER_CONFIG } from \"./constants\";\nimport { getErrorReporter } from \"./reporter\";\nimport { getErrorMessage, shouldIgnoreError } from \"./utils\";\nimport { report, setReportSink, toUserMessage } from \"@/utils\";\n\nexport function GlobalErrorListener(): null {\n const lastError = useRef<number>(0);\n const count = useRef<number>(0);\n const shown = useRef<Set<string>>(new Set());\n\n const handleError = useCallback((error: unknown, source = \"runtime\") => {\n if (shouldIgnoreError(error)) return;\n\n const now = Date.now();\n\n if (count.current >= ERROR_LISTENER_CONFIG.maxErrors) return;\n if (now - lastError.current < ERROR_LISTENER_CONFIG.throttle) return;\n\n const message = getErrorMessage(error);\n const key = message || String(error);\n\n if (shown.current.has(key)) return;\n shown.current.add(key);\n\n lastError.current = now;\n count.current += 1;\n\n try {\n const reporter = getErrorReporter();\n reporter?.captureError?.(error, {\n globalListener: true,\n source,\n });\n } catch (reportingError) {\n report(\"GlobalError reporting\", reportingError, \"warn\");\n }\n\n globalEvents.emit(EVENT_TYPES.APP_ERROR, {\n error,\n message: toUserMessage(error),\n });\n }, []);\n\n useEffect(() => {\n const removeSink = setReportSink((scope, error, level) => {\n try {\n getErrorReporter().captureError(error, { level, scope });\n } catch {}\n });\n const onError = (event: ErrorEvent) =>\n handleError(event.error || event.message, \"window.onerror\");\n const onRejection = (event: PromiseRejectionEvent) =>\n handleError(event.reason, \"unhandledrejection\");\n\n window.addEventListener(\"error\", onError);\n window.addEventListener(\"unhandledrejection\", onRejection);\n\n return () => {\n removeSink();\n window.removeEventListener(\"error\", onError);\n window.removeEventListener(\"unhandledrejection\", onRejection);\n };\n }, [handleError]);\n\n return null;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/error/listener.ts"],"names":[],"mappings":"AASA,wBAAgB,mBAAmB,IAAI,IAAI,CA4D1C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ErrorReport, ErrorReporterHandler, ErrorReporterOptions, SentryScope } from "./types";
|
|
2
|
+
declare global {
|
|
3
|
+
interface Window {
|
|
4
|
+
Sentry?: {
|
|
5
|
+
captureException: (error: unknown) => void;
|
|
6
|
+
withScope: (callback: (scope: SentryScope) => void) => void;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
declare class ErrorReporter {
|
|
11
|
+
private handlers;
|
|
12
|
+
private context;
|
|
13
|
+
private tags;
|
|
14
|
+
private seen;
|
|
15
|
+
private enabled;
|
|
16
|
+
private sampleRate;
|
|
17
|
+
private beforeSend;
|
|
18
|
+
private dedupeWindow;
|
|
19
|
+
constructor(options?: ErrorReporterOptions);
|
|
20
|
+
addHandler(handler: ErrorReporterHandler): this;
|
|
21
|
+
removeHandler(name: string): this;
|
|
22
|
+
setContext(key: string, value: unknown): this;
|
|
23
|
+
setTag(key: string, value: unknown): this;
|
|
24
|
+
captureError(error: unknown, extraContext?: Record<string, unknown>): ErrorReport | undefined;
|
|
25
|
+
captureMessage(message: string, level?: string, context?: Record<string, unknown>): ErrorReport | undefined;
|
|
26
|
+
ensureDefaultHandlers(): void;
|
|
27
|
+
}
|
|
28
|
+
export declare function getErrorReporter(options?: ErrorReporterOptions): ErrorReporter;
|
|
29
|
+
export declare function createConsoleHandler(): ErrorReporterHandler;
|
|
30
|
+
export declare function createSentryHandler(Sentry: unknown): ErrorReporterHandler;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/error/reporter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,EACZ,MAAM,SAAS,CAAC;AAUjB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,MAAM,CAAC,EAAE;YACP,gBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;YAC3C,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,KAAK,IAAI,CAAC;SAC7D,CAAC;KACH;CACF;AAED,cAAM,aAAa;IACjB,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAuD;IACzE,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,GAAE,oBAAyB;IAS9C,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAO/C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKjC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAU7C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAKzC,YAAY,CACV,KAAK,EAAE,OAAO,EACd,YAAY,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACzC,WAAW,GAAG,SAAS;IAoC1B,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,KAAK,SAAS,EACd,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,WAAW,GAAG,SAAS;IAM1B,qBAAqB,IAAI,IAAI;CAY9B;AAID,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,oBAAyB,GACjC,aAAa,CAKf;AAED,wBAAgB,oBAAoB,IAAI,oBAAoB,CAY3D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,oBAAoB,CAyCzE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/error/theme.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,CAAC;AAEzE,eAAO,MAAM,UAAU,6CAA2C,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { ErrorInfo, ReactNode } from "react";
|
|
2
|
+
export interface ErrorContextData {
|
|
3
|
+
[key: string]: unknown;
|
|
4
|
+
componentStack: string | null;
|
|
5
|
+
name: string;
|
|
6
|
+
route: string | null;
|
|
7
|
+
source: string;
|
|
8
|
+
timestamp: string;
|
|
9
|
+
userAgent: string | null;
|
|
10
|
+
variant: string;
|
|
11
|
+
}
|
|
12
|
+
export interface BrowserEnvironment {
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
language: string | null;
|
|
15
|
+
online: boolean;
|
|
16
|
+
platform: string | null;
|
|
17
|
+
route: string | null;
|
|
18
|
+
url: string | null;
|
|
19
|
+
userAgent: string | null;
|
|
20
|
+
}
|
|
21
|
+
export interface ErrorReport {
|
|
22
|
+
componentStack: string | null;
|
|
23
|
+
context: Record<string, unknown>;
|
|
24
|
+
environment: BrowserEnvironment;
|
|
25
|
+
error: {
|
|
26
|
+
message: string;
|
|
27
|
+
name: string;
|
|
28
|
+
stack: string | null;
|
|
29
|
+
};
|
|
30
|
+
fingerprint: string;
|
|
31
|
+
tags: Record<string, string>;
|
|
32
|
+
timestamp: string;
|
|
33
|
+
user?: unknown;
|
|
34
|
+
}
|
|
35
|
+
export interface ErrorReporterHandler {
|
|
36
|
+
name: string;
|
|
37
|
+
handle: (report: ErrorReport) => void;
|
|
38
|
+
}
|
|
39
|
+
export interface ErrorReporterOptions {
|
|
40
|
+
beforeSend?: ((report: ErrorReport) => ErrorReport | null) | null;
|
|
41
|
+
deduplicateWindow?: number;
|
|
42
|
+
enabled?: boolean;
|
|
43
|
+
sampleRate?: number;
|
|
44
|
+
}
|
|
45
|
+
export type ErrorFallbackRender = (props: {
|
|
46
|
+
error: Error | null;
|
|
47
|
+
resetError: () => void;
|
|
48
|
+
}) => ReactNode;
|
|
49
|
+
export interface ErrorBoundaryCoreProps {
|
|
50
|
+
children?: ReactNode;
|
|
51
|
+
fallback?: ReactNode | ErrorFallbackRender;
|
|
52
|
+
message?: string;
|
|
53
|
+
name?: string;
|
|
54
|
+
onError?: (error: Error, errorInfo: ErrorInfo, context: ErrorContextData) => void;
|
|
55
|
+
onReset?: () => void;
|
|
56
|
+
resetKey?: unknown;
|
|
57
|
+
silent?: boolean;
|
|
58
|
+
title?: string;
|
|
59
|
+
variant?: "default" | "full" | "module" | "inline" | string;
|
|
60
|
+
}
|
|
61
|
+
export interface ErrorBoundaryCoreState {
|
|
62
|
+
error: Error | null;
|
|
63
|
+
errorInfo: ErrorInfo | null;
|
|
64
|
+
hasError: boolean;
|
|
65
|
+
lastResetKey?: unknown;
|
|
66
|
+
}
|
|
67
|
+
export interface GlobalErrorProps {
|
|
68
|
+
children?: ReactNode;
|
|
69
|
+
fallback?: ReactNode | ErrorFallbackRender;
|
|
70
|
+
onReset?: () => void;
|
|
71
|
+
}
|
|
72
|
+
export interface ModuleErrorProps {
|
|
73
|
+
children?: ReactNode;
|
|
74
|
+
fallback?: ReactNode | ErrorFallbackRender;
|
|
75
|
+
name?: string;
|
|
76
|
+
onReset?: () => void;
|
|
77
|
+
}
|
|
78
|
+
export interface ComponentErrorProps {
|
|
79
|
+
children?: ReactNode;
|
|
80
|
+
fallback?: ReactNode | ErrorFallbackRender;
|
|
81
|
+
message?: string;
|
|
82
|
+
onReset?: () => void;
|
|
83
|
+
}
|
|
84
|
+
export interface SentryScope {
|
|
85
|
+
setContext: (name: string, context: Record<string, unknown>) => void;
|
|
86
|
+
setExtra: (key: string, extra: unknown) => void;
|
|
87
|
+
setFingerprint: (fingerprint: string[]) => void;
|
|
88
|
+
setTag: (key: string, value: string) => void;
|
|
89
|
+
setUser: (user: unknown) => void;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/error/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ErrorInfo } from "react";
|
|
2
|
+
import type { BrowserEnvironment, ErrorContextData, ErrorReport } from "./types";
|
|
3
|
+
export declare const getRuntimePath: () => string | null;
|
|
4
|
+
export declare const getUserAgent: () => string | null;
|
|
5
|
+
export declare function createErrorContext({ errorInfo, name, title, variant, }: {
|
|
6
|
+
errorInfo?: ErrorInfo | null;
|
|
7
|
+
name?: string;
|
|
8
|
+
title?: string;
|
|
9
|
+
variant?: string;
|
|
10
|
+
}): ErrorContextData;
|
|
11
|
+
export declare function normalizeSampleRate(value: unknown): number;
|
|
12
|
+
export declare function normalizeDedupeWindow(value: unknown): number;
|
|
13
|
+
export declare function getBrowserEnvironment(route?: string | null): BrowserEnvironment;
|
|
14
|
+
export declare function fingerprint(error: unknown, context?: Partial<ErrorContextData>): string;
|
|
15
|
+
export declare function createReport(error: unknown, { context, tags, }?: {
|
|
16
|
+
context?: Record<string, unknown>;
|
|
17
|
+
tags?: Record<string, string>;
|
|
18
|
+
}): ErrorReport;
|
|
19
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
20
|
+
export declare function shouldIgnoreError(error: unknown): boolean;
|
|
21
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/error/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACZ,MAAM,SAAS,CAAC;AAKjB,eAAO,MAAM,cAAc,QAAO,MAAM,GAAG,IACsB,CAAC;AAElE,eAAO,MAAM,YAAY,QAAO,MAAM,GAAG,IACsB,CAAC;AAEhE,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,IAAI,EACJ,KAAK,EACL,OAAO,GACR,EAAE;IACD,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,gBAAgB,CAUnB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG1D;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK5D;AAED,wBAAgB,qBAAqB,CACnC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,kBAAkB,CASpB;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACtC,MAAM,CAYR;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,EACd,EACE,OAAY,EACZ,IAAS,GACV,GAAE;IACD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1B,GACL,WAAW,CAmBb;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOtD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAazD"}
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export type EventListener<T = unknown> = (payload: T) => void;
|
|
2
|
+
export declare const EVENT_TYPES: Readonly<{
|
|
3
|
+
readonly API_UNAUTHORIZED: "API_UNAUTHORIZED";
|
|
4
|
+
readonly STATE_CHANGE: "STATE_CHANGE";
|
|
5
|
+
readonly API_ERROR: "API_ERROR";
|
|
6
|
+
readonly APP_ERROR: "APP_ERROR";
|
|
7
|
+
}>;
|
|
8
|
+
export interface FrameworkEventMap {
|
|
9
|
+
[EVENT_TYPES.API_UNAUTHORIZED]: {
|
|
10
|
+
error?: unknown;
|
|
11
|
+
status?: number;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
};
|
|
14
|
+
[EVENT_TYPES.API_ERROR]: {
|
|
15
|
+
error: unknown;
|
|
16
|
+
isCritical?: boolean;
|
|
17
|
+
message?: string;
|
|
18
|
+
retry?: () => void;
|
|
19
|
+
status?: number;
|
|
20
|
+
[key: string]: unknown;
|
|
21
|
+
};
|
|
22
|
+
[EVENT_TYPES.APP_ERROR]: {
|
|
23
|
+
error?: unknown;
|
|
24
|
+
message?: string;
|
|
25
|
+
resetError?: () => void;
|
|
26
|
+
source?: string;
|
|
27
|
+
[key: string]: unknown;
|
|
28
|
+
};
|
|
29
|
+
[EVENT_TYPES.STATE_CHANGE]: {
|
|
30
|
+
message?: string;
|
|
31
|
+
status?: "success" | "warning" | "info" | "error" | string;
|
|
32
|
+
[key: string]: unknown;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export declare class EventEmitter<TEvents extends object = FrameworkEventMap> {
|
|
36
|
+
private events;
|
|
37
|
+
private debounceTimers;
|
|
38
|
+
subscribe<K extends keyof TEvents>(event: K, callback: EventListener<TEvents[K]>): () => void;
|
|
39
|
+
subscribe<T = unknown>(event: string, callback: EventListener<T>): () => void;
|
|
40
|
+
emit<K extends keyof TEvents>(event: K, ...args: TEvents[K] extends void | undefined ? [payload?: TEvents[K]] : [payload: TEvents[K]]): void;
|
|
41
|
+
emit<T = unknown>(event: string, payload?: T): void;
|
|
42
|
+
emitDebounced<K extends keyof TEvents>(event: K, payload: TEvents[K], waitMs?: number): void;
|
|
43
|
+
emitDebounced<T = unknown>(event: string, payload?: T, waitMs?: number): void;
|
|
44
|
+
cancelDebounced(event?: string): void;
|
|
45
|
+
unsubscribeAll(event?: string): void;
|
|
46
|
+
hasListeners(event: string): boolean;
|
|
47
|
+
getListenerCount(event: string): number;
|
|
48
|
+
getAllEvents(): string[];
|
|
49
|
+
}
|
|
50
|
+
export declare const globalEvents: EventEmitter<FrameworkEventMap>;
|
|
51
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/events.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// src/utils/report.ts
|
|
2
|
+
function report(scope, error, level = "error") {
|
|
3
|
+
if (process.env.NODE_ENV === "production" && typeof window !== "undefined") {
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
console[level](`[${scope}]`, error);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// src/events.ts
|
|
10
|
+
var EVENT_TYPES = Object.freeze({
|
|
11
|
+
API_UNAUTHORIZED: "API_UNAUTHORIZED",
|
|
12
|
+
STATE_CHANGE: "STATE_CHANGE",
|
|
13
|
+
API_ERROR: "API_ERROR",
|
|
14
|
+
APP_ERROR: "APP_ERROR"
|
|
15
|
+
});
|
|
16
|
+
var EventEmitter = class {
|
|
17
|
+
events = /* @__PURE__ */ new Map();
|
|
18
|
+
debounceTimers = /* @__PURE__ */ new Map();
|
|
19
|
+
subscribe(event, callback) {
|
|
20
|
+
if (typeof event !== "string" || !event || typeof callback !== "function") {
|
|
21
|
+
return () => {
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const listeners = this.events.get(event) || /* @__PURE__ */ new Set();
|
|
25
|
+
listeners.add(callback);
|
|
26
|
+
this.events.set(event, listeners);
|
|
27
|
+
return () => {
|
|
28
|
+
listeners.delete(callback);
|
|
29
|
+
if (listeners.size === 0) this.events.delete(event);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
emit(event, payload) {
|
|
33
|
+
const listeners = this.events.get(event);
|
|
34
|
+
if (!listeners || listeners.size === 0) return;
|
|
35
|
+
const snapshot = Array.from(listeners);
|
|
36
|
+
for (const callback of snapshot) {
|
|
37
|
+
try {
|
|
38
|
+
callback(payload);
|
|
39
|
+
} catch (error) {
|
|
40
|
+
report(`Event listener (${String(event)})`, error);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
emitDebounced(event, payload, waitMs = 100) {
|
|
45
|
+
const existing = this.debounceTimers.get(event);
|
|
46
|
+
if (existing) clearTimeout(existing);
|
|
47
|
+
const timer = setTimeout(() => {
|
|
48
|
+
this.debounceTimers.delete(event);
|
|
49
|
+
this.emit(event, payload);
|
|
50
|
+
}, waitMs);
|
|
51
|
+
this.debounceTimers.set(event, timer);
|
|
52
|
+
}
|
|
53
|
+
cancelDebounced(event) {
|
|
54
|
+
if (event) {
|
|
55
|
+
const timer = this.debounceTimers.get(event);
|
|
56
|
+
if (timer) {
|
|
57
|
+
clearTimeout(timer);
|
|
58
|
+
this.debounceTimers.delete(event);
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
for (const timer of this.debounceTimers.values()) {
|
|
62
|
+
clearTimeout(timer);
|
|
63
|
+
}
|
|
64
|
+
this.debounceTimers.clear();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
unsubscribeAll(event) {
|
|
68
|
+
this.cancelDebounced(event);
|
|
69
|
+
if (event) this.events.delete(event);
|
|
70
|
+
else this.events.clear();
|
|
71
|
+
}
|
|
72
|
+
hasListeners(event) {
|
|
73
|
+
return Boolean(this.events.get(event)?.size);
|
|
74
|
+
}
|
|
75
|
+
getListenerCount(event) {
|
|
76
|
+
return this.events.get(event)?.size || 0;
|
|
77
|
+
}
|
|
78
|
+
getAllEvents() {
|
|
79
|
+
return [...this.events.keys()];
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
var GLOBAL_EVENTS_KEY = /* @__PURE__ */ Symbol.for("__base_framework_global_events__");
|
|
83
|
+
var _global = globalThis;
|
|
84
|
+
var globalEvents = _global[GLOBAL_EVENTS_KEY] ?? (_global[GLOBAL_EVENTS_KEY] = new EventEmitter());
|
|
85
|
+
|
|
86
|
+
export { EVENT_TYPES, EventEmitter, globalEvents };
|
|
87
|
+
//# sourceMappingURL=events.js.map
|
|
88
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/report.ts","../src/events.ts"],"names":[],"mappings":"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","file":"events.js","sourcesContent":["export type ReportLevel = \"error\" | \"warn\";\n\nexport type ReportSink = (\n scope: string,\n error: unknown,\n level: ReportLevel,\n) => void;\n\nlet sink: ReportSink | null = null;\n\nexport function report(\n scope: string,\n error: unknown,\n level: ReportLevel = \"error\",\n): void {\n if (sink) {\n try {\n sink(scope, error, level);\n return;\n } catch {}\n }\n\n if (process.env.NODE_ENV === \"production\" && typeof window !== \"undefined\") {\n return;\n }\n console[level](`[${scope}]`, error);\n}\n\nexport function setReportSink(next: ReportSink): () => void {\n sink = next;\n return () => {\n if (sink === next) sink = null;\n };\n}\n","import { report } from \"./utils/report\";\nexport type EventListener<T = unknown> = (payload: T) => void;\n\nexport const EVENT_TYPES = Object.freeze({\n API_UNAUTHORIZED: \"API_UNAUTHORIZED\",\n STATE_CHANGE: \"STATE_CHANGE\",\n API_ERROR: \"API_ERROR\",\n APP_ERROR: \"APP_ERROR\",\n} as const);\n\nexport interface FrameworkEventMap {\n [EVENT_TYPES.API_UNAUTHORIZED]: {\n error?: unknown;\n status?: number;\n [key: string]: unknown;\n };\n [EVENT_TYPES.API_ERROR]: {\n error: unknown;\n isCritical?: boolean;\n message?: string;\n retry?: () => void;\n status?: number;\n [key: string]: unknown;\n };\n [EVENT_TYPES.APP_ERROR]: {\n error?: unknown;\n message?: string;\n resetError?: () => void;\n source?: string;\n [key: string]: unknown;\n };\n [EVENT_TYPES.STATE_CHANGE]: {\n message?: string;\n status?: \"success\" | \"warning\" | \"info\" | \"error\" | string;\n [key: string]: unknown;\n };\n}\n\nexport class EventEmitter<TEvents extends object = FrameworkEventMap> {\n private events: Map<string, Set<EventListener<never>>> = new Map();\n private debounceTimers: Map<string, ReturnType<typeof setTimeout>> =\n new Map();\n\n subscribe<K extends keyof TEvents>(\n event: K,\n callback: EventListener<TEvents[K]>,\n ): () => void;\n subscribe<T = unknown>(event: string, callback: EventListener<T>): () => void;\n subscribe(event: string, callback: EventListener<never>): () => void {\n if (typeof event !== \"string\" || !event || typeof callback !== \"function\") {\n return () => {};\n }\n const listeners = this.events.get(event) || new Set<EventListener<never>>();\n listeners.add(callback);\n this.events.set(event, listeners);\n\n return () => {\n listeners.delete(callback);\n if (listeners.size === 0) this.events.delete(event);\n };\n }\n\n emit<K extends keyof TEvents>(\n event: K,\n ...args: TEvents[K] extends void | undefined\n ? [payload?: TEvents[K]]\n : [payload: TEvents[K]]\n ): void;\n emit<T = unknown>(event: string, payload?: T): void;\n emit(event: string, payload?: unknown): void {\n const listeners = this.events.get(event);\n if (!listeners || listeners.size === 0) return;\n const snapshot = Array.from(listeners);\n for (const callback of snapshot) {\n try {\n (callback as EventListener<unknown>)(payload);\n } catch (error) {\n report(`Event listener (${String(event)})`, error);\n }\n }\n }\n\n emitDebounced<K extends keyof TEvents>(\n event: K,\n payload: TEvents[K],\n waitMs?: number,\n ): void;\n emitDebounced<T = unknown>(event: string, payload?: T, waitMs?: number): void;\n emitDebounced(event: string, payload?: unknown, waitMs: number = 100): void {\n const existing = this.debounceTimers.get(event);\n if (existing) clearTimeout(existing);\n\n const timer = setTimeout(() => {\n this.debounceTimers.delete(event);\n this.emit(event, payload);\n }, waitMs);\n\n this.debounceTimers.set(event, timer);\n }\n\n cancelDebounced(event?: string): void {\n if (event) {\n const timer = this.debounceTimers.get(event);\n if (timer) {\n clearTimeout(timer);\n this.debounceTimers.delete(event);\n }\n } else {\n for (const timer of this.debounceTimers.values()) {\n clearTimeout(timer);\n }\n this.debounceTimers.clear();\n }\n }\n\n unsubscribeAll(event?: string): void {\n this.cancelDebounced(event);\n if (event) this.events.delete(event);\n else this.events.clear();\n }\n\n hasListeners(event: string): boolean {\n return Boolean(this.events.get(event)?.size);\n }\n\n getListenerCount(event: string): number {\n return this.events.get(event)?.size || 0;\n }\n\n getAllEvents(): string[] {\n return [...this.events.keys()];\n }\n}\n\nconst GLOBAL_EVENTS_KEY = Symbol.for(\"__base_framework_global_events__\");\ntype GlobalWithEvents = typeof globalThis & {\n [GLOBAL_EVENTS_KEY]?: EventEmitter<FrameworkEventMap>;\n};\n\nconst _global = globalThis as GlobalWithEvents;\nexport const globalEvents: EventEmitter<FrameworkEventMap> =\n _global[GLOBAL_EVENTS_KEY] ??\n (_global[GLOBAL_EVENTS_KEY] = new EventEmitter<FrameworkEventMap>());\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { useRequiredContext } from "./use-required-context";
|
|
2
|
+
export { useStore } from "./use-store";
|
|
3
|
+
export { useClickOutside } from "./use-click-outside";
|
|
4
|
+
export { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect";
|
|
5
|
+
export { useDebounce } from "./use-debounce";
|
|
6
|
+
export { useMounted } from "./use-mounted";
|
|
7
|
+
export { useMediaQuery } from "./use-media-query";
|
|
8
|
+
export { useControllableState } from "./use-controllable-state";
|
|
9
|
+
export { useHotkey, useEscapeKey } from "./use-hotkey";
|
|
10
|
+
export { useGlobalEvent, useEventState } from "./use-global-event";
|
|
11
|
+
export { useAsyncAction } from "./use-async-action";
|
|
12
|
+
export { useServerAction } from "./use-server-action";
|
|
13
|
+
export { useStorageState, useLocalStorage, useSessionStorage, } from "./use-storage-state";
|
|
14
|
+
export { useIntersectionObserver } from "./use-intersection-observer";
|
|
15
|
+
export { useIsFullscreenStateActive } from "./use-fullscreen-state";
|
|
16
|
+
export type * from "./types";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,mBAAmB,SAAS,CAAC"}
|