@syntrologie/runtime-sdk 2.1.0 → 2.2.0-canary.10
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/CAPABILITIES.md +50 -43
- package/README.md +7 -7
- package/dist/RuntimeProvider.d.ts +1 -1
- package/dist/ShadowRootContext.d.ts +19 -0
- package/dist/SmartCanvasApp.d.ts +7 -4
- package/dist/SmartCanvasElement.d.ts +7 -2
- package/dist/SmartCanvasPortal.d.ts +1 -1
- package/dist/actions/executors/core-flow.d.ts +19 -0
- package/dist/actions/executors/index.d.ts +4 -3
- package/dist/actions/executors/tour.d.ts +1 -1
- package/dist/actions/index.d.ts +4 -3
- package/dist/actions/schema.d.ts +1229 -0
- package/dist/actions/schema.js +67 -0
- package/dist/actions/schema.js.map +7 -0
- package/dist/api.d.ts +4 -2
- package/dist/apps/builtinRuntimeModules.generated.d.ts +20 -0
- package/dist/apps/examples/gamification-app.example.d.ts +4 -4
- package/dist/apps/index.d.ts +7 -7
- package/dist/blocks/data/index.d.ts +1 -1
- package/dist/blocks/index.d.ts +2 -2
- package/dist/blocks/interactive/index.d.ts +1 -1
- package/dist/blocks/notification/NotificationBlock.d.ts +1 -1
- package/dist/blocks/notification/index.d.ts +1 -1
- package/dist/bootstrap.d.ts +4 -4
- package/dist/chunk-AYTRRBR5.js +251 -0
- package/dist/chunk-AYTRRBR5.js.map +7 -0
- package/dist/chunk-VLWWR22N.js +9266 -0
- package/dist/chunk-VLWWR22N.js.map +7 -0
- package/dist/components/ShadowCanvasOverlay.d.ts +2 -2
- package/dist/components/TileCard.d.ts +1 -1
- package/dist/context/ContextManager.d.ts +1 -1
- package/dist/context/index.d.ts +3 -3
- package/dist/decisions/engine.d.ts +1 -1
- package/dist/decisions/index.d.ts +3 -3
- package/dist/decisions/schema.d.ts +24 -24
- package/dist/decisions/strategies/rules.d.ts +1 -1
- package/dist/decisions/strategies/score.d.ts +1 -1
- package/dist/editorLoader.d.ts +4 -4
- package/dist/events/EventAccumulator.d.ts +1 -1
- package/dist/events/EventBus.d.ts +1 -1
- package/dist/events/index.d.ts +7 -6
- package/dist/events/registerConfigPredicates.d.ts +19 -0
- package/dist/experiments/adapters/growthbook.d.ts +1 -1
- package/dist/experiments/index.d.ts +2 -2
- package/dist/experiments/registry.d.ts +1 -1
- package/dist/fetchers/index.d.ts +2 -2
- package/dist/hooks/useShadowCanvasConfig.d.ts +1 -1
- package/dist/hostPatcher/index.d.ts +2 -2
- package/dist/index.d.ts +24 -21
- package/dist/index.js +2349 -75
- package/dist/index.js.map +7 -1
- package/dist/metrics/index.d.ts +1 -1
- package/dist/notifications/index.d.ts +6 -6
- package/dist/overlays/runtime/index.d.ts +3 -3
- package/dist/overlays/runtime/overlay/root.d.ts +17 -1
- package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
- package/dist/react.js +90 -134
- package/dist/react.js.map +7 -1
- package/dist/render/RenderContext.d.ts +2 -2
- package/dist/render/index.d.ts +2 -2
- package/dist/render/types.d.ts +2 -2
- package/dist/runtime.d.ts +8 -8
- package/dist/smart-canvas.esm.js +158 -126
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +18872 -16744
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +158 -126
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/state/StateStore.d.ts +1 -1
- package/dist/state/helpers/cooldowns.d.ts +1 -1
- package/dist/state/helpers/dismissals.d.ts +1 -1
- package/dist/state/helpers/frequency.d.ts +1 -1
- package/dist/state/index.d.ts +3 -3
- package/dist/surfaces/index.d.ts +3 -3
- package/dist/surfaces/positioning.d.ts +1 -1
- package/dist/telemetry/adapters/posthog.d.ts +2 -2
- package/dist/telemetry/index.d.ts +3 -3
- package/dist/telemetry/registry.d.ts +1 -1
- package/dist/telemetry/types.d.ts +5 -0
- package/dist/theme/ThemeProvider.d.ts +1 -1
- package/dist/theme/extractHostTheme.d.ts +1 -1
- package/dist/theme/index.d.ts +4 -4
- package/dist/types-only.d.ts +1 -1
- package/dist/types-only.js +1 -11
- package/dist/types-only.js.map +7 -1
- package/dist/types.d.ts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/widgets/index.d.ts +1 -1
- package/package.json +29 -17
- package/schema/canvas-config.base.schema.json +351 -0
- package/schema/canvas-config.schema.json +3308 -444
- package/scripts/validate-config.mjs +54 -58
- package/dist/RuntimeProvider.js +0 -113
- package/dist/RuntimeProvider.js.map +0 -1
- package/dist/SmartCanvasApp.js +0 -143
- package/dist/SmartCanvasApp.js.map +0 -1
- package/dist/SmartCanvasElement.js +0 -138
- package/dist/SmartCanvasElement.js.map +0 -1
- package/dist/SmartCanvasPortal.js +0 -17
- package/dist/SmartCanvasPortal.js.map +0 -1
- package/dist/actions/ActionEngine.js +0 -272
- package/dist/actions/ActionEngine.js.map +0 -1
- package/dist/actions/executors/index.js +0 -240
- package/dist/actions/executors/index.js.map +0 -1
- package/dist/actions/executors/tour.js +0 -332
- package/dist/actions/executors/tour.js.map +0 -1
- package/dist/actions/index.js +0 -12
- package/dist/actions/index.js.map +0 -1
- package/dist/actions/types.js +0 -8
- package/dist/actions/types.js.map +0 -1
- package/dist/actions/validation.js +0 -577
- package/dist/actions/validation.js.map +0 -1
- package/dist/adaptives/adaptive-chatbot/index.js +0 -9
- package/dist/adaptives/adaptive-chatbot/index.js.map +0 -7
- package/dist/adaptives/adaptive-content/index.js +0 -22
- package/dist/adaptives/adaptive-content/index.js.map +0 -7
- package/dist/adaptives/adaptive-faq/index.js +0 -11
- package/dist/adaptives/adaptive-faq/index.js.map +0 -7
- package/dist/adaptives/adaptive-gamification/index.js +0 -2
- package/dist/adaptives/adaptive-gamification/index.js.map +0 -7
- package/dist/adaptives/adaptive-nav/index.js +0 -12
- package/dist/adaptives/adaptive-nav/index.js.map +0 -7
- package/dist/adaptives/adaptive-overlays/index.js +0 -94
- package/dist/adaptives/adaptive-overlays/index.js.map +0 -7
- package/dist/antiFlicker.js +0 -39
- package/dist/antiFlicker.js.map +0 -1
- package/dist/api.js +0 -205
- package/dist/api.js.map +0 -1
- package/dist/apps/AppContext.js +0 -91
- package/dist/apps/AppContext.js.map +0 -1
- package/dist/apps/AppLoader.js +0 -293
- package/dist/apps/AppLoader.js.map +0 -1
- package/dist/apps/AppRegistry.js +0 -317
- package/dist/apps/AppRegistry.js.map +0 -1
- package/dist/apps/examples/gamification-app.example.js +0 -329
- package/dist/apps/examples/gamification-app.example.js.map +0 -1
- package/dist/apps/index.js +0 -16
- package/dist/apps/index.js.map +0 -1
- package/dist/apps/types.js +0 -8
- package/dist/apps/types.js.map +0 -1
- package/dist/blocks/data/ComparisonBlock.js +0 -95
- package/dist/blocks/data/ComparisonBlock.js.map +0 -1
- package/dist/blocks/data/StatsBlock.js +0 -102
- package/dist/blocks/data/StatsBlock.js.map +0 -1
- package/dist/blocks/data/index.js +0 -3
- package/dist/blocks/data/index.js.map +0 -1
- package/dist/blocks/index.js +0 -93
- package/dist/blocks/index.js.map +0 -1
- package/dist/blocks/interactive/ChecklistBlock.js +0 -111
- package/dist/blocks/interactive/ChecklistBlock.js.map +0 -1
- package/dist/blocks/interactive/RatingBlock.js +0 -147
- package/dist/blocks/interactive/RatingBlock.js.map +0 -1
- package/dist/blocks/interactive/index.js +0 -3
- package/dist/blocks/interactive/index.js.map +0 -1
- package/dist/blocks/notification/NotificationBlock.js +0 -171
- package/dist/blocks/notification/NotificationBlock.js.map +0 -1
- package/dist/blocks/notification/index.js +0 -2
- package/dist/blocks/notification/index.js.map +0 -1
- package/dist/blocks/theme-tokens.js +0 -25
- package/dist/blocks/theme-tokens.js.map +0 -1
- package/dist/bootstrap.js +0 -448
- package/dist/bootstrap.js.map +0 -1
- package/dist/bundle-entry.js +0 -9
- package/dist/bundle-entry.js.map +0 -1
- package/dist/components/ShadowCanvasOverlay.js +0 -327
- package/dist/components/ShadowCanvasOverlay.js.map +0 -1
- package/dist/components/TileCard.js +0 -103
- package/dist/components/TileCard.js.map +0 -1
- package/dist/components/TileWheel.js +0 -50
- package/dist/components/TileWheel.js.map +0 -1
- package/dist/config-validator.js +0 -173
- package/dist/config-validator.js.map +0 -1
- package/dist/configFetcher.js +0 -131
- package/dist/configFetcher.js.map +0 -1
- package/dist/context/ContextManager.js +0 -269
- package/dist/context/ContextManager.js.map +0 -1
- package/dist/context/index.js +0 -7
- package/dist/context/index.js.map +0 -1
- package/dist/context/schema.js +0 -50
- package/dist/context/schema.js.map +0 -1
- package/dist/context/types.js +0 -8
- package/dist/context/types.js.map +0 -1
- package/dist/controller.js +0 -34
- package/dist/controller.js.map +0 -1
- package/dist/decisions/engine.js +0 -117
- package/dist/decisions/engine.js.map +0 -1
- package/dist/decisions/index.js +0 -10
- package/dist/decisions/index.js.map +0 -1
- package/dist/decisions/schema.js +0 -151
- package/dist/decisions/schema.js.map +0 -1
- package/dist/decisions/strategies/rules.js +0 -166
- package/dist/decisions/strategies/rules.js.map +0 -1
- package/dist/decisions/strategies/score.js +0 -29
- package/dist/decisions/strategies/score.js.map +0 -1
- package/dist/decisions/types.js +0 -2
- package/dist/decisions/types.js.map +0 -1
- package/dist/earlyPatcher.js +0 -20
- package/dist/earlyPatcher.js.map +0 -1
- package/dist/editorLoader.js +0 -254
- package/dist/editorLoader.js.map +0 -1
- package/dist/events/EventAccumulator.js +0 -101
- package/dist/events/EventAccumulator.js.map +0 -1
- package/dist/events/EventBus.js +0 -152
- package/dist/events/EventBus.js.map +0 -1
- package/dist/events/index.js +0 -11
- package/dist/events/index.js.map +0 -1
- package/dist/events/normalizers/canvas.js +0 -116
- package/dist/events/normalizers/canvas.js.map +0 -1
- package/dist/events/normalizers/posthog.js +0 -171
- package/dist/events/normalizers/posthog.js.map +0 -1
- package/dist/events/schema.js +0 -30
- package/dist/events/schema.js.map +0 -1
- package/dist/events/types.js +0 -54
- package/dist/events/types.js.map +0 -1
- package/dist/experiments/adapters/growthbook.js +0 -81
- package/dist/experiments/adapters/growthbook.js.map +0 -1
- package/dist/experiments/index.js +0 -4
- package/dist/experiments/index.js.map +0 -1
- package/dist/experiments/registry.js +0 -30
- package/dist/experiments/registry.js.map +0 -1
- package/dist/experiments/types.js +0 -2
- package/dist/experiments/types.js.map +0 -1
- package/dist/fetchers/cdnFetcher.js +0 -96
- package/dist/fetchers/cdnFetcher.js.map +0 -1
- package/dist/fetchers/experimentsFetcher.js +0 -109
- package/dist/fetchers/experimentsFetcher.js.map +0 -1
- package/dist/fetchers/index.js +0 -5
- package/dist/fetchers/index.js.map +0 -1
- package/dist/fetchers/mergeConfigs.js +0 -38
- package/dist/fetchers/mergeConfigs.js.map +0 -1
- package/dist/fetchers/registry.js +0 -58
- package/dist/fetchers/registry.js.map +0 -1
- package/dist/fetchers/types.js +0 -2
- package/dist/fetchers/types.js.map +0 -1
- package/dist/hooks/useCanvasOverlays.js +0 -128
- package/dist/hooks/useCanvasOverlays.js.map +0 -1
- package/dist/hooks/useHostPatches.js +0 -40
- package/dist/hooks/useHostPatches.js.map +0 -1
- package/dist/hooks/useShadowCanvasConfig.js +0 -63
- package/dist/hooks/useShadowCanvasConfig.js.map +0 -1
- package/dist/hostPatcher/core/patcher.js +0 -181
- package/dist/hostPatcher/core/patcher.js.map +0 -1
- package/dist/hostPatcher/core/sanitizer.js +0 -66
- package/dist/hostPatcher/core/sanitizer.js.map +0 -1
- package/dist/hostPatcher/core/types.js +0 -2
- package/dist/hostPatcher/core/types.js.map +0 -1
- package/dist/hostPatcher/index.js +0 -7
- package/dist/hostPatcher/index.js.map +0 -1
- package/dist/hostPatcher/policy/defaultPolicy.js +0 -23
- package/dist/hostPatcher/policy/defaultPolicy.js.map +0 -1
- package/dist/hostPatcher/utils/anchors.js +0 -105
- package/dist/hostPatcher/utils/anchors.js.map +0 -1
- package/dist/hostPatcher/utils/observer.js +0 -11
- package/dist/hostPatcher/utils/observer.js.map +0 -1
- package/dist/logger.js +0 -81
- package/dist/logger.js.map +0 -1
- package/dist/metrics/index.js +0 -5
- package/dist/metrics/index.js.map +0 -1
- package/dist/metrics/sessionMetrics.js +0 -178
- package/dist/metrics/sessionMetrics.js.map +0 -1
- package/dist/notifications/NotificationToastStack.js +0 -118
- package/dist/notifications/NotificationToastStack.js.map +0 -1
- package/dist/notifications/index.js +0 -6
- package/dist/notifications/index.js.map +0 -1
- package/dist/notifications/matcher.js +0 -66
- package/dist/notifications/matcher.js.map +0 -1
- package/dist/notifications/types.js +0 -13
- package/dist/notifications/types.js.map +0 -1
- package/dist/notifications/useNotifications.js +0 -104
- package/dist/notifications/useNotifications.js.map +0 -1
- package/dist/notifications/useNotifyWatcher.js +0 -62
- package/dist/notifications/useNotifyWatcher.js.map +0 -1
- package/dist/overlays/fetcher.js +0 -15
- package/dist/overlays/fetcher.js.map +0 -1
- package/dist/overlays/recipeRegistry.js +0 -32
- package/dist/overlays/recipeRegistry.js.map +0 -1
- package/dist/overlays/runtime/anchor/resolve.js +0 -87
- package/dist/overlays/runtime/anchor/resolve.js.map +0 -1
- package/dist/overlays/runtime/index.js +0 -8
- package/dist/overlays/runtime/index.js.map +0 -1
- package/dist/overlays/runtime/overlay/highlight.js +0 -160
- package/dist/overlays/runtime/overlay/highlight.js.map +0 -1
- package/dist/overlays/runtime/overlay/modal.js +0 -78
- package/dist/overlays/runtime/overlay/modal.js.map +0 -1
- package/dist/overlays/runtime/overlay/root.js +0 -297
- package/dist/overlays/runtime/overlay/root.js.map +0 -1
- package/dist/overlays/runtime/overlay/runner.js +0 -602
- package/dist/overlays/runtime/overlay/runner.js.map +0 -1
- package/dist/overlays/runtime/overlay/tooltip.js +0 -232
- package/dist/overlays/runtime/overlay/tooltip.js.map +0 -1
- package/dist/overlays/runtime/utils/dom.js +0 -12
- package/dist/overlays/runtime/utils/dom.js.map +0 -1
- package/dist/overlays/schema.js +0 -52
- package/dist/overlays/schema.js.map +0 -1
- package/dist/overlays/types.js +0 -2
- package/dist/overlays/types.js.map +0 -1
- package/dist/render/RenderContext.js +0 -69
- package/dist/render/RenderContext.js.map +0 -1
- package/dist/render/index.js +0 -3
- package/dist/render/index.js.map +0 -1
- package/dist/render/types.js +0 -2
- package/dist/render/types.js.map +0 -1
- package/dist/runtime.js +0 -237
- package/dist/runtime.js.map +0 -1
- package/dist/state/StateStore.js +0 -176
- package/dist/state/StateStore.js.map +0 -1
- package/dist/state/helpers/cooldowns.js +0 -31
- package/dist/state/helpers/cooldowns.js.map +0 -1
- package/dist/state/helpers/dismissals.js +0 -34
- package/dist/state/helpers/dismissals.js.map +0 -1
- package/dist/state/helpers/frequency.js +0 -43
- package/dist/state/helpers/frequency.js.map +0 -1
- package/dist/state/index.js +0 -7
- package/dist/state/index.js.map +0 -1
- package/dist/state/schema.js +0 -25
- package/dist/state/schema.js.map +0 -1
- package/dist/state/types.js +0 -9
- package/dist/state/types.js.map +0 -1
- package/dist/store/example.js +0 -43
- package/dist/store/example.js.map +0 -1
- package/dist/store/mini-effector.js +0 -88
- package/dist/store/mini-effector.js.map +0 -1
- package/dist/surfaces/Surfaces.js +0 -361
- package/dist/surfaces/Surfaces.js.map +0 -1
- package/dist/surfaces/index.js +0 -12
- package/dist/surfaces/index.js.map +0 -1
- package/dist/surfaces/positioning.js +0 -228
- package/dist/surfaces/positioning.js.map +0 -1
- package/dist/surfaces/types.js +0 -23
- package/dist/surfaces/types.js.map +0 -1
- package/dist/telemetry/adapters/noop.js +0 -42
- package/dist/telemetry/adapters/noop.js.map +0 -1
- package/dist/telemetry/adapters/posthog.js +0 -180
- package/dist/telemetry/adapters/posthog.js.map +0 -1
- package/dist/telemetry/index.js +0 -4
- package/dist/telemetry/index.js.map +0 -1
- package/dist/telemetry/registry.js +0 -29
- package/dist/telemetry/registry.js.map +0 -1
- package/dist/telemetry/types.js +0 -2
- package/dist/telemetry/types.js.map +0 -1
- package/dist/theme/ThemeProvider.js +0 -109
- package/dist/theme/ThemeProvider.js.map +0 -1
- package/dist/theme/defaultTheme.js +0 -190
- package/dist/theme/defaultTheme.js.map +0 -1
- package/dist/theme/extractHostTheme.js +0 -259
- package/dist/theme/extractHostTheme.js.map +0 -1
- package/dist/theme/index.js +0 -7
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/types.js +0 -6
- package/dist/theme/types.js.map +0 -1
- package/dist/token.js +0 -44
- package/dist/token.js.map +0 -1
- package/dist/types.js +0 -17
- package/dist/types.js.map +0 -1
- package/dist/version.js +0 -14
- package/dist/version.js.map +0 -1
- package/dist/widgets/WidgetRegistry.js +0 -190
- package/dist/widgets/WidgetRegistry.js.map +0 -1
- package/dist/widgets/index.js +0 -7
- package/dist/widgets/index.js.map +0 -1
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../adaptives/shared-editor-ui/dist/cn.js", "syntro-react:react/jsx-runtime", "../../../../adaptives/shared-editor-ui/dist/components/EditorLayout.js", "../../../../adaptives/shared-editor-ui/dist/components/EditorHeader.js", "../../../../adaptives/shared-editor-ui/dist/components/EditorBody.js", "../../../../adaptives/shared-editor-ui/dist/components/EditorFooter.js", "../../../../adaptives/shared-editor-ui/dist/components/EditorCard.js", "../../../../adaptives/shared-editor-ui/dist/components/DetectionBadge.js", "syntro-react:react", "../../../../adaptives/shared-editor-ui/dist/components/DismissedSection.js", "../../../../adaptives/shared-editor-ui/dist/components/GroupHeader.js", "../../../../adaptives/shared-editor-ui/dist/components/BeforeAfterToggle.js", "../../../../adaptives/shared-editor-ui/dist/components/EditorInput.js", "../../../../adaptives/shared-editor-ui/dist/components/EditBackButton.js", "../../../../adaptives/shared-editor-ui/dist/components/EmptyState.js", "../../../../adaptives/shared-editor-ui/dist/formatConditionLabel.js", "../../../../adaptives/shared-editor-ui/dist/components/ConditionStatusLine.js", "../../../../adaptives/shared-editor-ui/dist/hooks/useShowWhenStatus.js", "../../../../adaptives/adaptive-nav/src/summarize.ts", "../../../../adaptives/adaptive-nav/src/types.ts", "../../../../adaptives/adaptive-nav/src/editor.tsx", "../../../../../design-system/dist/tokens/colors.js", "syntro-react:react-dom/client", "../../../../adaptives/adaptive-nav/src/NavWidget.tsx", "../../../../adaptives/adaptive-nav/src/runtime.ts", "../../../../adaptives/adaptive-nav/src/cdn.ts"],
|
|
4
|
-
"sourcesContent": ["export function cn(...classes) {\n return classes.filter(Boolean).join(' ');\n}\n", "\n function _R() {\n return (typeof SynOS !== 'undefined' && SynOS.React) || {};\n }\n function _jsx(type, props, key) {\n var R = _R();\n var p = props || {};\n var c = p.children;\n delete p.children;\n if (key !== undefined) p.key = key;\n return Array.isArray(c)\n ? R.createElement.apply(null, [type, p].concat(c))\n : c !== undefined\n ? R.createElement(type, p, c)\n : R.createElement(type, p);\n }\n export var jsx = _jsx;\n export var jsxs = _jsx;\n export var Fragment = _R().Fragment;\n ", "import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function EditorLayout({ children }) {\n return _jsx(\"div\", { className: \"se-flex se-flex-col se-h-full se-font-sans\", children: children });\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function EditorHeader({ title, subtitle, onBack }) {\n return (_jsxs(\"div\", { className: \"se-p-4 se-border-b se-border-border-primary se-flex se-items-center se-gap-3\", children: [_jsx(\"button\", { onClick: onBack, className: \"se-px-3 se-py-1.5 se-rounded-md se-border se-border-btn-neutral-border se-bg-transparent se-text-btn-neutral-text se-text-sm se-cursor-pointer hover:se-text-btn-neutral-text-hover\", children: \"\\u2190 Back\" }), _jsxs(\"div\", { children: [_jsx(\"h2\", { className: \"se-m-0 se-text-base se-font-semibold se-text-text-primary\", children: title }), subtitle && (_jsx(\"p\", { className: \"se-mt-0.5 se-mb-0 se-text-xs se-text-text-secondary\", children: subtitle }))] })] }));\n}\n", "import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function EditorBody({ children }) {\n return _jsx(\"div\", { className: \"se-flex-1 se-overflow-auto se-p-6\", children: children });\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function EditorFooter({ onSave, onPublish }) {\n return (_jsxs(\"div\", { className: \"se-py-3 se-px-4 se-border-t se-border-border-primary se-flex se-gap-2\", children: [_jsx(\"button\", { onClick: onSave, className: \"se-flex-1 se-py-2.5 se-rounded-lg se-border-none se-bg-blue-5/15 se-text-blue-5 se-text-base se-font-semibold se-cursor-pointer\", children: \"Save Draft\" }), _jsx(\"button\", { onClick: onPublish, className: \"se-flex-1 se-py-2.5 se-rounded-lg se-border-none se-bg-green-4 se-text-white se-text-base se-font-semibold se-cursor-pointer\", children: \"Publish\" })] }));\n}\n", "import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { cn } from '../cn';\nexport function EditorCard({ children, itemKey, onMouseEnter, onMouseLeave, className, validated, }) {\n return (_jsx(\"div\", { \"data-item-key\": itemKey, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, className: cn('se-py-2 se-px-2.5 se-rounded-lg se-border se-bg-card-bg se-shadow-sm se-mb-1 se-text-sm se-text-text-primary', validated ? 'se-border-green-4/40 se-shadow-glow-green' : 'se-border-border-primary', className), children: children }));\n}\n", "import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { cn } from '../cn';\nexport function DetectionBadge({ found }) {\n return (_jsx(\"span\", { className: cn('se-w-2 se-h-2 se-rounded-full se-shrink-0 se-inline-block', found ? 'se-bg-green-4' : 'se-bg-text-tertiary'), title: found ? 'Found on this page' : 'Not found on this page' }));\n}\n", "\n function _R() {\n return (typeof SynOS !== 'undefined' && SynOS.React) || {};\n }\n\n // Default export \u2014 lazy proxy for React.* access\n export default new Proxy({}, { get: function(_, k) { return _R()[k]; } });\n\n // Hooks \u2014 lazy function wrappers (resolve at call time)\n export function useState() { return _R().useState.apply(null, arguments); }\n export function useEffect() { return _R().useEffect.apply(null, arguments); }\n export function useMemo() { return _R().useMemo.apply(null, arguments); }\n export function useCallback() { return _R().useCallback.apply(null, arguments); }\n export function useRef() { return _R().useRef.apply(null, arguments); }\n export function useContext() { return _R().useContext.apply(null, arguments); }\n export function useReducer() { return _R().useReducer.apply(null, arguments); }\n export function useLayoutEffect() { return _R().useLayoutEffect.apply(null, arguments); }\n export function useId() { return _R().useId.apply(null, arguments); }\n\n // Creation APIs \u2014 lazy function wrappers\n export function createElement() { return _R().createElement.apply(null, arguments); }\n export function createContext() { return _R().createContext.apply(null, arguments); }\n export function forwardRef() { return _R().forwardRef.apply(null, arguments); }\n export function memo() { return _R().memo.apply(null, arguments); }\n export function lazy() { return _R().lazy.apply(null, arguments); }\n export function isValidElement() { return _R().isValidElement.apply(null, arguments); }\n export function cloneElement() { return _R().cloneElement.apply(null, arguments); }\n\n // Component types \u2014 resolved at module eval (runtime loads first)\n var _r = _R();\n export var Fragment = _r.Fragment;\n export var Suspense = _r.Suspense;\n export var Children = _r.Children;\n export var Component = _r.Component;\n export var PureComponent = _r.PureComponent;\n ", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from 'react';\nexport function DismissedSection({ count, children }) {\n const [isOpen, setIsOpen] = useState(false);\n return (_jsxs(\"div\", { className: \"se-mt-4 se-cursor-pointer se-select-none\", children: [_jsxs(\"div\", { className: \"se-text-xs se-font-semibold se-text-text-tertiary se-flex se-items-center se-gap-1.5 se-cursor-pointer\", onClick: () => setIsOpen(!isOpen), children: [_jsx(\"span\", { children: isOpen ? '\\u25be' : '\\u25b8' }), _jsxs(\"span\", { children: [\"Dismissed (\", count, \")\"] })] }), isOpen && _jsx(\"div\", { className: \"se-mt-1.5\", children: children })] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { cn } from '../cn';\nexport function GroupHeader({ label, count, className }) {\n return (_jsxs(\"div\", { className: cn('se-text-xs se-font-bold se-text-text-secondary se-uppercase se-tracking-wide se-py-1 se-pb-2 se-flex se-items-center se-justify-between', className), children: [_jsx(\"span\", { children: label }), _jsx(\"span\", { className: \"se-text-xs se-text-text-tertiary se-bg-badge-slate-bg se-px-1.5 se-py-0.5 se-rounded-lg\", children: count })] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { cn } from '../cn';\nexport function BeforeAfterToggle({ mode, onToggle }) {\n return (_jsxs(\"div\", { className: \"se-flex se-mb-3 se-rounded-lg se-overflow-hidden se-border se-border-border-primary\", children: [_jsx(\"button\", { onClick: () => onToggle('before'), className: cn('se-flex-1 se-py-1.5 se-px-3 se-border-none se-text-sm se-font-semibold se-cursor-pointer', mode === 'before'\n ? 'se-bg-blue-5/20 se-text-blue-5'\n : 'se-bg-transparent se-text-text-secondary'), children: \"Before\" }), _jsx(\"button\", { onClick: () => onToggle('after'), className: cn('se-flex-1 se-py-1.5 se-px-3 se-border-none se-border-l se-border-border-primary se-text-sm se-font-semibold se-cursor-pointer', mode === 'after'\n ? 'se-bg-blue-5/20 se-text-blue-5'\n : 'se-bg-transparent se-text-text-secondary'), children: \"After\" })] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { cn } from '../cn';\nexport function EditorInput({ label, className, ...props }) {\n return (_jsxs(\"div\", { children: [label && (_jsx(\"label\", { className: \"se-text-sm se-font-medium se-text-input-field-text-label se-mb-1 se-block\", children: label })), _jsx(\"input\", { ...props, className: cn('se-w-full se-py-2 se-px-3 se-rounded-lg se-border se-border-input-field-border se-bg-input-field-bg se-text-text-primary se-text-sm se-font-[inherit] se-mb-2 se-box-border', 'placeholder:se-text-input-field-text-placeholder', 'focus:se-border-input-field-border-selected focus:se-outline-none focus:se-ring-1 focus:se-ring-input-field-border-selected', 'disabled:se-bg-input-field-bg-disabled disabled:se-cursor-not-allowed disabled:se-opacity-50', className) })] }));\n}\n", "import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function EditBackButton({ onClick, label = '\\u2190 List' }) {\n return (_jsx(\"button\", { onClick: onClick, className: \"se-py-1.5 se-px-3 se-rounded-md se-border se-border-btn-neutral-border se-bg-transparent se-text-btn-neutral-text se-text-sm se-cursor-pointer se-mt-2 hover:se-text-btn-neutral-text-hover\", children: label }));\n}\n", "import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function EmptyState({ message }) {\n return (_jsx(\"div\", { className: \"se-text-center se-py-8 se-px-4 se-text-text-secondary se-text-sm\", children: message }));\n}\n", "/**\n * Format a showWhen condition into a human-readable label.\n * Pure function \u2014 no runtime dependency.\n */\n/**\n * Format match criteria as a parenthetical string.\n * { tagName: 'a' } \u2192 '(tagName: a)'\n */\nfunction formatMatch(match) {\n if (!match || Object.keys(match).length === 0)\n return '';\n const parts = Object.entries(match).map(([k, v]) => `${k}: ${v}`);\n return ` (${parts.join(', ')})`;\n}\n/**\n * Format an operator for display.\n */\nfunction formatOperator(op) {\n switch (op) {\n case 'gte': return '\\u2265'; // \u2265\n case 'lte': return '\\u2264'; // \u2264\n case 'gt': return '>';\n case 'lt': return '<';\n case 'eq': return '=';\n default: return op;\n }\n}\n/**\n * Convert a Condition object into a human-readable label.\n * For event_count conditions, also returns progress data.\n */\nexport function formatConditionLabel(condition, accumulatorCount) {\n switch (condition.type) {\n case 'event_count': {\n const event = condition.event;\n const match = condition.match;\n const op = condition.operator;\n const target = condition.count;\n const current = accumulatorCount ?? 0;\n return {\n label: `${event}${formatMatch(match)} ${formatOperator(op)} ${target}`,\n progress: { current, target, operator: op },\n };\n }\n case 'page_url':\n return { label: `${condition.url}` };\n case 'anchor_visible':\n return { label: `${condition.anchorId} (${condition.state})` };\n case 'event_occurred':\n return { label: `${condition.eventName}` };\n case 'state_equals':\n return { label: `${condition.key} = ${JSON.stringify(condition.value)}` };\n case 'viewport': {\n const parts = [];\n if (condition.minWidth !== undefined)\n parts.push(`w ${formatOperator('gte')} ${condition.minWidth}px`);\n if (condition.maxWidth !== undefined)\n parts.push(`w ${formatOperator('lte')} ${condition.maxWidth}px`);\n if (condition.minHeight !== undefined)\n parts.push(`h ${formatOperator('gte')} ${condition.minHeight}px`);\n if (condition.maxHeight !== undefined)\n parts.push(`h ${formatOperator('lte')} ${condition.maxHeight}px`);\n return { label: parts.join(', ') || 'any viewport' };\n }\n case 'session_metric':\n return { label: `${condition.key} ${formatOperator(condition.operator)} ${condition.threshold}` };\n case 'dismissed':\n return { label: condition.inverted ? 'not dismissed' : 'dismissed' };\n case 'cooldown_active':\n return { label: condition.inverted ? 'cooldown inactive' : 'cooldown active' };\n case 'frequency_limit':\n return { label: `shown ${formatOperator(condition.inverted ? 'lt' : 'gte')} ${condition.limit} times` };\n default:\n return { label: `${condition.type}` };\n }\n}\n", "import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * ConditionStatusLine \u2014 inline showWhen diagnostic on EditorCard.\n *\n * Shows a compact one-line status for items with showWhen conditions.\n * Click to expand per-condition detail.\n */\nimport { useState } from 'react';\nimport { cn } from '../cn';\nfunction ProgressBar({ current, target }) {\n const pct = Math.min(100, Math.round((current / Math.max(target, 1)) * 100));\n return (_jsx(\"span\", { className: \"se-inline-block se-w-12 se-h-1.5 se-rounded-full se-bg-white/10 se-align-middle se-ml-1\", title: `${current}/${target} (${pct}%)`, children: _jsx(\"span\", { className: cn('se-block se-h-full se-rounded-full se-transition-all', pct >= 100 ? 'se-bg-green-4' : 'se-bg-blue-4'), style: { width: `${pct}%` } }) }));\n}\nfunction ConditionRow({ cs }) {\n return (_jsxs(\"div\", { className: \"se-flex se-items-center se-gap-1 se-pl-3 se-text-[10px] se-text-slate-grey-8\", children: [_jsx(\"span\", { className: cs.passed ? 'se-text-green-4' : 'se-text-red-4', children: cs.passed ? '\\u2713' : '\\u2717' }), _jsxs(\"span\", { children: [cs.type, \":\"] }), _jsx(\"span\", { className: \"se-text-slate-grey-7\", children: cs.formatted.label }), cs.formatted.progress && (_jsxs(_Fragment, { children: [_jsx(ProgressBar, { current: cs.formatted.progress.current, target: cs.formatted.progress.target }), _jsxs(\"span\", { className: \"se-text-slate-grey-7 se-ml-0.5\", children: [cs.formatted.progress.current, \"/\", cs.formatted.progress.target] })] }))] }));\n}\nexport function ConditionStatusLine({ status }) {\n const [expanded, setExpanded] = useState(false);\n if (!status)\n return null;\n const { visible, conditions } = status;\n const passedCount = conditions.filter((c) => c.passed).length;\n const totalCount = conditions.length;\n // Icon: visible = green check, hidden = hourglass, fallback = dash\n const icon = visible ? '\\u2713' : '\\u23f3';\n const iconColor = visible ? 'se-text-green-4' : 'se-text-yellow-5';\n // Single condition: show inline detail\n // Multi condition: show summary, click to expand\n const isSingle = totalCount === 1;\n if (isSingle) {\n const cs = conditions[0];\n return (_jsxs(\"div\", { className: \"se-text-[10px] se-text-slate-grey-8 se-mt-0.5 se-flex se-items-center se-gap-1\", children: [_jsx(\"span\", { className: iconColor, children: icon }), _jsxs(\"span\", { children: [cs.type, \":\"] }), _jsx(\"span\", { className: \"se-text-slate-grey-7\", children: cs.formatted.label }), cs.formatted.progress && (_jsxs(_Fragment, { children: [_jsx(ProgressBar, { current: cs.formatted.progress.current, target: cs.formatted.progress.target }), _jsxs(\"span\", { className: \"se-text-slate-grey-7 se-ml-0.5\", children: [cs.formatted.progress.current, \"/\", cs.formatted.progress.target] })] }))] }));\n }\n // Multi-condition: summary line + expandable detail\n return (_jsxs(\"div\", { className: \"se-mt-0.5\", children: [_jsxs(\"button\", { type: \"button\", className: \"se-flex se-items-center se-gap-1 se-text-[10px] se-text-slate-grey-8 se-bg-transparent se-border-none se-cursor-pointer se-p-0 hover:se-text-slate-grey-6\", onClick: (e) => {\n e.stopPropagation();\n setExpanded(!expanded);\n }, children: [_jsx(\"span\", { className: iconColor, children: icon }), _jsxs(\"span\", { children: [passedCount, \" of \", totalCount, \" conditions met\"] }), _jsx(\"span\", { className: \"se-text-[8px] se-ml-0.5\", children: expanded ? '\\u25b2' : '\\u25bc' })] }), expanded && (_jsx(\"div\", { className: \"se-mt-0.5 se-space-y-0.5\", children: conditions.map((cs, i) => (_jsx(ConditionRow, { cs: cs }, i))) }))] }));\n}\n", "/**\n * useShowWhenStatus \u2014 live showWhen evaluation for editor diagnostics.\n *\n * Subscribes to the runtime's EventAccumulator for reactive updates.\n * Evaluates each item's showWhen strategy locally to get\n * per-condition breakdowns.\n *\n * NOTE: This hook accesses `window.SynOS.handle.runtime` directly\n * because EditorPanelProps doesn't expose runtime. This is safe \u2014\n * the editor only runs after runtime bootstrap.\n */\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport { formatConditionLabel } from '../formatConditionLabel';\nfunction getRuntime() {\n return window.SynOS?.handle?.runtime ?? null;\n}\n/**\n * Evaluate a single condition against the runtime context.\n */\nfunction evaluateConditionLocally(condition, runtime) {\n const ctx = runtime.context.get();\n const type = condition.type;\n let passed = false;\n let accCount;\n switch (type) {\n case 'event_count': {\n if (!runtime.accumulator)\n break;\n const event = condition.event;\n const match = condition.match;\n const withinMs = condition.withinMs;\n const count = runtime.accumulator.getCount(event, match, withinMs);\n accCount = count;\n const target = condition.count;\n const op = condition.operator;\n switch (op) {\n case 'gte':\n passed = count >= target;\n break;\n case 'lte':\n passed = count <= target;\n break;\n case 'eq':\n passed = count === target;\n break;\n case 'gt':\n passed = count > target;\n break;\n case 'lt':\n passed = count < target;\n break;\n }\n break;\n }\n case 'page_url': {\n const url = condition.url;\n const pattern = url\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*\\*/g, '.*')\n .replace(/\\*/g, '[^/]*');\n passed = new RegExp(`^${pattern}$`).test(ctx.page.url);\n break;\n }\n case 'route':\n passed = ctx.page.routeId === condition.routeId;\n break;\n case 'anchor_visible': {\n const anchors = ctx.anchors;\n const anchor = anchors?.find((a) => a.anchorId === condition.anchorId);\n switch (condition.state) {\n case 'visible':\n passed = anchor?.visible === true;\n break;\n case 'present':\n passed = anchor?.present === true;\n break;\n case 'absent':\n passed = !anchor?.present;\n break;\n }\n break;\n }\n case 'event_occurred':\n passed = runtime.events?.hasRecentEvent(condition.eventName, condition.withinMs ?? 60000) ?? false;\n break;\n case 'viewport': {\n const { width, height } = ctx.viewport;\n passed = true;\n if (condition.minWidth !== undefined && width < condition.minWidth)\n passed = false;\n if (condition.maxWidth !== undefined && width > condition.maxWidth)\n passed = false;\n if (condition.minHeight !== undefined && height < condition.minHeight)\n passed = false;\n if (condition.maxHeight !== undefined && height > condition.maxHeight)\n passed = false;\n break;\n }\n case 'session_metric': {\n const val = runtime.state?.getSessionMetric(condition.key) ?? 0;\n const threshold = condition.threshold;\n const op = condition.operator;\n switch (op) {\n case 'gte':\n passed = val >= threshold;\n break;\n case 'lte':\n passed = val <= threshold;\n break;\n case 'eq':\n passed = val === threshold;\n break;\n case 'gt':\n passed = val > threshold;\n break;\n case 'lt':\n passed = val < threshold;\n break;\n }\n break;\n }\n case 'dismissed':\n passed = condition.inverted\n ? !(runtime.state?.isDismissed(condition.key) ?? false)\n : (runtime.state?.isDismissed(condition.key) ?? false);\n break;\n case 'cooldown_active':\n passed = condition.inverted\n ? !(runtime.state?.isCooldownActive(condition.key) ?? false)\n : (runtime.state?.isCooldownActive(condition.key) ?? false);\n break;\n case 'frequency_limit': {\n const count = runtime.state?.getFrequencyCount(condition.key) ?? 0;\n const limitReached = count >= condition.limit;\n passed = condition.inverted ? !limitReached : limitReached;\n break;\n }\n }\n const formatted = formatConditionLabel(condition, accCount);\n return {\n passed,\n cs: { type, passed, formatted },\n };\n}\n/**\n * Evaluate all conditions in a showWhen RuleStrategy.\n */\nfunction evaluateShowWhen(showWhen, runtime) {\n if (showWhen.type !== 'rules' || !showWhen.rules?.length) {\n return { visible: !!showWhen.default, isFallback: true, conditions: [] };\n }\n // Evaluate ALL rules' conditions for diagnostic display\n const allConditions = [];\n for (const rule of showWhen.rules) {\n let ruleMatched = true;\n for (const condition of rule.conditions) {\n const { passed, cs } = evaluateConditionLocally(condition, runtime);\n allConditions.push(cs);\n if (!passed)\n ruleMatched = false;\n }\n if (ruleMatched) {\n return { visible: rule.value, isFallback: false, conditions: allConditions };\n }\n }\n // No rules matched \u2014 use default\n return {\n visible: showWhen.default ?? false,\n isFallback: true,\n conditions: allConditions,\n };\n}\n/**\n * Hook: live showWhen evaluation for a list of action items.\n *\n * @param items Array of items with id + optional showWhen\n * @returns Map from item id \u2192 ShowWhenStatus (null for items without showWhen)\n */\nexport function useShowWhenStatus(items) {\n const [statuses, setStatuses] = useState(new Map());\n const itemsRef = useRef(items);\n itemsRef.current = items;\n const evaluate = useCallback(() => {\n const runtime = getRuntime();\n if (!runtime)\n return;\n const map = new Map();\n for (const item of itemsRef.current) {\n if (!item.showWhen) {\n map.set(item.id, null);\n }\n else {\n map.set(item.id, evaluateShowWhen(item.showWhen, runtime));\n }\n }\n setStatuses(map);\n }, []);\n useEffect(() => {\n // Initial evaluation\n evaluate();\n // Subscribe to accumulator changes for reactive event_count updates\n const runtime = getRuntime();\n const unsubs = [];\n if (runtime?.accumulator) {\n unsubs.push(runtime.accumulator.subscribe(evaluate));\n }\n // Poll every 2s for non-accumulator conditions (page_url, viewport, etc.)\n const interval = setInterval(evaluate, 2000);\n return () => {\n unsubs.forEach((u) => u());\n clearInterval(interval);\n };\n }, [evaluate]);\n return statuses;\n}\n", "/**\n * Human-readable summary generation for Nav items.\n * Pure functions \u2014 no DOM access, just string formatting.\n */\n\nimport type { NavTipAction, DecisionStrategy, RuleStrategy } from './types';\n\nconst MAX_TITLE_LEN = 30;\n\nfunction truncate(text: string, max: number): string {\n if (text.length <= max) return text;\n return `${text.slice(0, max).trimEnd()}...`;\n}\n\nfunction isRuleStrategy(s: unknown): s is RuleStrategy<boolean> {\n return (\n typeof s === 'object' &&\n s !== null &&\n (s as Record<string, unknown>).type === 'rules' &&\n Array.isArray((s as Record<string, unknown>).rules)\n );\n}\n\n/**\n * Parse a showWhen strategy into a human-readable trigger description.\n */\nexport function describeTrigger(showWhen?: DecisionStrategy<boolean> | null): string {\n if (!showWhen) return 'All pages';\n if (!isRuleStrategy(showWhen)) return 'All pages';\n\n const pages: string[] = [];\n const anchors: string[] = [];\n\n for (const rule of showWhen.rules) {\n for (const condition of rule.conditions) {\n if (condition.type === 'page_url' && typeof (condition as any).url === 'string') {\n pages.push((condition as any).url);\n }\n if (condition.type === 'anchor_visible' && typeof (condition as any).anchorId === 'string') {\n anchors.push((condition as any).anchorId);\n }\n }\n }\n\n const parts: string[] = [];\n if (pages.length > 0) parts.push(pages[0]);\n if (anchors.length > 0) parts.push(anchors[0]);\n\n return parts.length > 0 ? parts.join(' \\u00b7 ') : 'All pages';\n}\n\n/**\n * Generate a one-liner summary for a Nav tip.\n */\nexport function summarizeNavItem(item: NavTipAction): string {\n const icon = item.config.icon || '\\u{1F9ED}';\n const title = truncate(item.config.title, MAX_TITLE_LEN);\n return `${icon} ${title}`;\n}\n", "/**\n * Adaptive Nav - Types\n *\n * Type definitions for the navigation tips accordion adaptive.\n * Demonstrates compositional action pattern with per-item showWhen.\n */\n\n// ============================================================================\n// Decision Strategy Types (from runtime-sdk)\n// ============================================================================\n\n/**\n * Simplified DecisionStrategy type for this package.\n * Full definition is in @syntrologie/runtime-sdk.\n */\nexport type DecisionStrategy<T = unknown> =\n | RuleStrategy<T>\n | ScoreStrategy<T>\n | ModelStrategy<T>\n | ExternalStrategy<T>;\n\nexport interface RuleStrategy<T = unknown> {\n type: 'rules';\n rules: Array<{\n conditions: Array<Record<string, unknown>>;\n value: T;\n }>;\n default: T;\n}\n\nexport interface ScoreStrategy<T = unknown> {\n type: 'score';\n field: string;\n threshold: number;\n above: T;\n below: T;\n}\n\nexport interface ModelStrategy<T = unknown> {\n type: 'model';\n modelId: string;\n inputs: string[];\n outputMapping: Record<string, T>;\n default: T;\n}\n\nexport interface ExternalStrategy<T = unknown> {\n type: 'external';\n endpoint: string;\n method?: 'GET' | 'POST';\n default: T;\n timeoutMs?: number;\n}\n\n// ============================================================================\n// Event Scope Types\n// ============================================================================\n\n/**\n * Scoped event filtering for event_count conditions.\n * The adaptive registers a predicate built from this scope.\n */\nexport interface EventScope {\n /** Event names to count */\n events: string[];\n /** URL path substring filter */\n urlContains?: string;\n /** Exact prop matching (e.g. { tagName: \"a\" }) */\n props?: Record<string, string | number | boolean>;\n}\n\n// ============================================================================\n// Nav Tip Action Types\n// ============================================================================\n\n/**\n * Single navigation tip configuration.\n * This is a \"compositional action\" \u2014 rendered as an accordion item by the parent.\n */\nexport interface NavTipAction {\n /** Action kind identifier */\n kind: 'nav:tip';\n /** Tip configuration */\n config: {\n /** Unique identifier for this tip */\n id: string;\n /** Accordion header text */\n title: string;\n /** Expanded body text */\n description: string;\n /** Optional CTA link URL */\n href?: string;\n /** Optional icon (emoji or icon key) */\n icon?: string;\n /** Whether the link opens in a new tab */\n external?: boolean;\n /** Category for grouping */\n category?: string;\n };\n /** Optional per-item activation strategy */\n showWhen?: DecisionStrategy<boolean> | null;\n /** Toast config \u2014 only fires when showWhen transitions false \u2192 true */\n notify?: {\n title?: string;\n body?: string;\n icon?: string;\n };\n /** AI-generated reasoning for why this tip was recommended */\n rationale?: {\n why: string;\n confidence?: number;\n };\n}\n\n/** @deprecated Use NavTipAction instead */\nexport type NavLinkAction = NavTipAction;\n\n// ============================================================================\n// Nav Widget Configuration\n// ============================================================================\n\n/**\n * Expand behavior for the accordion.\n */\nexport type NavExpandBehavior = 'single' | 'multiple';\n\n/**\n * Theme for the navigation widget.\n */\nexport type NavTheme = 'light' | 'dark' | 'auto';\n\n/**\n * Full configuration for the adaptive-nav widget.\n */\nexport interface NavConfig {\n /** Expand behavior */\n expandBehavior: NavExpandBehavior;\n /** Color theme */\n theme: NavTheme;\n /** Navigation tips (compositional actions) */\n actions: NavTipAction[];\n /** Event scope for registering accumulator predicates */\n scope?: EventScope;\n}\n\n// ============================================================================\n// Widget Props Types\n// ============================================================================\n\n/**\n * Runtime services passed to the widget.\n */\nexport interface NavWidgetRuntime {\n /** Synchronously evaluate a decision strategy */\n evaluateSync: <T>(strategy: DecisionStrategy<T>) => { value: T; isFallback: boolean };\n /** Context manager for subscribing to changes */\n context: {\n subscribe: (callback: () => void) => () => void;\n };\n /** Event bus for publishing interactions */\n events: {\n publish: (name: string, props?: Record<string, unknown>) => void;\n };\n /** Event accumulator for event_count-based showWhen */\n accumulator?: {\n subscribe: (callback: () => void) => () => void;\n register: (key: string, predicate: (event: any) => boolean) => void;\n };\n}\n\n/**\n * Props passed to the NavWidget component.\n */\nexport interface NavWidgetProps {\n /** Widget configuration */\n config: NavConfig;\n /** Runtime services */\n runtime: NavWidgetRuntime;\n /** Instance ID for telemetry */\n instanceId: string;\n}\n\n// ============================================================================\n// Navigation Action Types (merged from adaptive-navigation)\n// ============================================================================\n\ninterface BaseAction {\n label?: string;\n}\n\nexport interface ScrollToAction extends BaseAction {\n kind: 'navigation:scrollTo';\n anchorId: string;\n behavior?: ScrollBehavior;\n block?: ScrollLogicalPosition;\n inline?: ScrollLogicalPosition;\n}\n\nexport interface NavigateAction extends BaseAction {\n kind: 'navigation:navigate';\n url: string;\n target?: '_self' | '_blank';\n}\n\n// ============================================================================\n// Action Namespace\n// ============================================================================\n\nexport const ACTION_NAMESPACES = ['nav', 'navigation'] as const;\n\n/**\n * Returns true if the action belongs to this adaptive package.\n * Uses prefix matching so new kinds (e.g. nav:dropdown) are automatically included.\n * Covers both `nav:*` (compositional) and `navigation:*` (executor) prefixes.\n */\nexport function isOwnAction(action: { kind: string }): boolean {\n return ACTION_NAMESPACES.some((ns) => action.kind.startsWith(`${ns}:`));\n}\n\n// ============================================================================\n// Executor Types\n// ============================================================================\n\nexport type ExecutorCleanup = () => void | Promise<void>;\nexport type ExecutorUpdate = (changes: Record<string, unknown>) => void | Promise<void>;\n\nexport interface ExecutorResult {\n cleanup: ExecutorCleanup;\n updateFn?: ExecutorUpdate;\n}\n\nexport interface ExecutorContext {\n overlayRoot: HTMLElement;\n resolveAnchor: (anchorId: string) => HTMLElement | null;\n generateId: () => string;\n publishEvent: (name: string, props?: Record<string, unknown>) => void;\n adaptiveId?: string;\n}\n\nexport type ActionExecutor<T> = (action: T, context: ExecutorContext) => Promise<ExecutorResult>;\n\n// ============================================================================\n// Editor Types\n// ============================================================================\n\nexport interface EditorPanelProps {\n config: Record<string, unknown>;\n onChange: (config: Record<string, unknown>) => void;\n editor: {\n setDirty: (dirty: boolean) => void;\n navigateHome: () => Promise<boolean>;\n save: () => Promise<void>;\n publish: (captureScreenshot?: boolean) => Promise<void>;\n navigateTo: (route: string) => Promise<void>;\n highlightElement: (selector: string) => void;\n clearHighlight: () => void;\n getCurrentRoute: () => string;\n previewConfig: (config: Record<string, unknown>) => void;\n /** Flat action index to open in edit mode (from accordion navigation). */\n initialEditKey?: string;\n /** Open the editor in create mode. */\n initialCreate?: boolean;\n /** Clear the initial navigation state (call after consuming). */\n clearInitialState?: () => void;\n /** Get dismissed keys persisted in navigation context. */\n getDismissedKeys?: () => Set<string>;\n /** Sync dismissed keys back to navigation context. */\n setDismissedKeys?: (keys: Set<string>) => void;\n };\n platformClient?: unknown;\n}\n", "/**\n * Adaptive Nav - Editor Component\n *\n * Review & tweak editor for AI-generated navigation tip decisions.\n * Displays a scannable list of tip cards with trigger, rationale,\n * and inline editing. Includes detection badges and hover-to-highlight.\n */\n\nimport {\n BeforeAfterToggle,\n ConditionStatusLine,\n DetectionBadge,\n DismissedSection,\n EditBackButton,\n EditorBody,\n EditorCard,\n EditorFooter,\n EditorHeader,\n EditorInput,\n EditorLayout,\n EmptyState,\n GroupHeader,\n useShowWhenStatus,\n} from '@syntrologie/shared-editor-ui';\nimport React, { useState, useCallback, useEffect, useRef } from 'react';\n\nimport { summarizeNavItem, describeTrigger } from './summarize';\nimport {\n isOwnAction,\n type NavConfig,\n type NavTipAction,\n type EditorPanelProps,\n type RuleStrategy,\n} from './types';\n\n// ============================================================================\n// Targeting Extraction (inlined -- CDN builds can't import from editor-sdk)\n// ============================================================================\n\ninterface TargetingInfo {\n pagePatterns: string[];\n anchorSelectors: string[];\n hasTargeting: boolean;\n}\n\nfunction isRuleStrategy(s: unknown): s is RuleStrategy<boolean> {\n return (\n typeof s === 'object' &&\n s !== null &&\n (s as Record<string, unknown>).type === 'rules' &&\n Array.isArray((s as Record<string, unknown>).rules)\n );\n}\n\nfunction extractTargetingInfo(showWhen?: unknown | null): TargetingInfo {\n if (!showWhen || !isRuleStrategy(showWhen)) {\n return { pagePatterns: [], anchorSelectors: [], hasTargeting: false };\n }\n\n const pagePatterns = new Set<string>();\n const anchorSelectors = new Set<string>();\n\n for (const rule of showWhen.rules) {\n for (const cond of rule.conditions) {\n const c = cond as Record<string, unknown>;\n if (c.type === 'page_url' && typeof c.url === 'string') {\n pagePatterns.add(c.url);\n } else if (c.type === 'anchor_visible' && typeof c.anchorId === 'string') {\n anchorSelectors.add(c.anchorId);\n }\n }\n }\n\n const hasTargeting = pagePatterns.size > 0 || anchorSelectors.size > 0;\n return {\n pagePatterns: [...pagePatterns],\n anchorSelectors: [...anchorSelectors],\n hasTargeting,\n };\n}\n\nfunction extractFirstPage(showWhen?: unknown | null): string | null {\n const info = extractTargetingInfo(showWhen);\n return info.pagePatterns[0] || null;\n}\n\nfunction extractFirstAnchor(showWhen?: unknown | null): string | null {\n const info = extractTargetingInfo(showWhen);\n return info.anchorSelectors[0] || null;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\ninterface FlatItem {\n key: string;\n index: number;\n summary: string;\n trigger: string;\n rationale?: { why: string; confidence?: number };\n firstAnchor: string | null;\n tip: NavTipAction;\n}\n\nfunction flattenItems(config: NavConfig): FlatItem[] {\n const actions = (config.actions || []).filter(isOwnAction);\n return actions.map((tip, i) => ({\n key: String(i),\n index: i,\n summary: summarizeNavItem(tip),\n trigger: describeTrigger(tip.showWhen),\n rationale: tip.rationale,\n firstAnchor: extractFirstAnchor(tip.showWhen),\n tip,\n }));\n}\n\nfunction filterConfig(config: NavConfig, dismissedKeys: Set<string>): NavConfig {\n const ownActions = (config.actions || []).filter(isOwnAction);\n return {\n ...config,\n actions: ownActions.filter((_, i) => !dismissedKeys.has(String(i))),\n };\n}\n\n// ============================================================================\n// Detection Hook\n// ============================================================================\n\ninterface DetectionEntry {\n found: boolean;\n element: HTMLElement | null;\n}\n\nfunction useDetection(\n items: FlatItem[],\n getCurrentRoute: () => string\n): Map<string, DetectionEntry> {\n const [detectionMap, setDetectionMap] = useState<Map<string, DetectionEntry>>(new Map());\n const itemsRef = useRef(items);\n itemsRef.current = items;\n\n useEffect(() => {\n const runDetection = () => {\n const map = new Map<string, DetectionEntry>();\n const currentPath = getCurrentRoute();\n\n for (const item of itemsRef.current) {\n const targeting = extractTargetingInfo(item.tip.showWhen);\n\n // Check page match\n let pageMatch = true;\n if (targeting.pagePatterns.length > 0) {\n pageMatch = targeting.pagePatterns.some((pattern) => {\n const regex = new RegExp(\n `^${pattern.replace(/\\*\\*/g, '.*').replace(/(?<!\\.)(\\*)/g, '[^/]*')}$`\n );\n return regex.test(currentPath);\n });\n }\n\n // Check anchor presence\n let anchorFound = false;\n let element: HTMLElement | null = null;\n if (item.firstAnchor) {\n try {\n element = document.querySelector(item.firstAnchor) as HTMLElement | null;\n anchorFound = element !== null;\n } catch {\n // Invalid selector\n }\n } else {\n anchorFound = pageMatch;\n }\n\n map.set(item.key, {\n found: pageMatch && anchorFound,\n element,\n });\n }\n\n setDetectionMap(map);\n };\n\n runDetection();\n\n const interval = setInterval(runDetection, 2000);\n window.addEventListener('popstate', runDetection);\n\n return () => {\n clearInterval(interval);\n window.removeEventListener('popstate', runDetection);\n };\n }, [getCurrentRoute]);\n\n return detectionMap;\n}\n\n// ============================================================================\n// NavEditor Component\n// ============================================================================\n\nexport function NavEditor({ config, onChange, editor }: EditorPanelProps) {\n const typedConfig = config as unknown as NavConfig;\n const [dismissedKeys, setDismissedKeys] = useState<Set<string>>(\n () => editor.getDismissedKeys?.() ?? new Set()\n );\n const [editingKey, setEditingKey] = useState<string | null>(null);\n const [previewMode, setPreviewMode] = useState<'before' | 'after'>('after');\n const [_hoveredKey, setHoveredKey] = useState<string | null>(null);\n\n // Sync dismissed keys back to navigation context on every change\n useEffect(() => {\n editor.setDismissedKeys?.(dismissedKeys);\n }, [dismissedKeys, editor]);\n\n // If navigated here with an editKey, jump directly to that item's edit view\n const initialConsumed = useRef(false);\n useEffect(() => {\n if (!initialConsumed.current) {\n initialConsumed.current = true;\n if (editor.initialEditKey != null) {\n setEditingKey(String(editor.initialEditKey));\n }\n editor.clearInitialState?.();\n }\n }, [editor]);\n\n const allItems = flattenItems(typedConfig);\n const activeItems = allItems.filter((item) => !dismissedKeys.has(item.key));\n const dismissedItems = allItems.filter((item) => dismissedKeys.has(item.key));\n const totalLinks = activeItems.length;\n\n // Live showWhen status for condition diagnostics\n const showWhenItems = React.useMemo(\n () => allItems.map((item) => ({\n id: item.key,\n showWhen: item.tip.showWhen,\n })),\n [allItems]\n );\n const showWhenStatuses = useShowWhenStatus(showWhenItems);\n\n const detectionMap = useDetection(allItems, editor.getCurrentRoute);\n const foundCount = activeItems.filter((item) => detectionMap.get(item.key)?.found).length;\n\n const handleDismiss = useCallback(\n (key: string) => {\n setDismissedKeys((prev) => {\n const next = new Set(prev);\n next.add(key);\n return next;\n });\n if (editingKey === key) setEditingKey(null);\n },\n [editingKey]\n );\n\n const handleRestore = useCallback((key: string) => {\n setDismissedKeys((prev) => {\n const next = new Set(prev);\n next.delete(key);\n return next;\n });\n }, []);\n\n const handleCardBodyClick = useCallback((item: FlatItem) => {\n setEditingKey(item.key);\n }, []);\n\n const handleTriggerClick = useCallback(\n (item: FlatItem) => {\n const pageUrl = extractFirstPage(item.tip.showWhen);\n if (pageUrl) {\n editor.navigateTo(pageUrl);\n }\n if (item.firstAnchor) {\n editor.highlightElement(item.firstAnchor);\n }\n },\n [editor]\n );\n\n const handleBackToList = useCallback(() => {\n setEditingKey(null);\n setPreviewMode('after');\n editor.previewConfig(config);\n editor.clearHighlight();\n }, [editor, config]);\n\n const handleBeforeAfter = useCallback(\n (mode: 'before' | 'after') => {\n setPreviewMode(mode);\n if (mode === 'before') {\n const filtered = filterConfig(typedConfig, new Set([editingKey!]));\n editor.previewConfig(filtered as unknown as Record<string, unknown>);\n } else {\n editor.previewConfig(config);\n }\n },\n [typedConfig, editingKey, editor, config]\n );\n\n const handleFieldChange = useCallback(\n (index: number, field: string, value: unknown) => {\n const ownActions = (typedConfig.actions || []).filter(isOwnAction).slice();\n const link = { ...ownActions[index], config: { ...ownActions[index].config } };\n (link.config as Record<string, unknown>)[field] = value;\n ownActions[index] = link;\n const otherActions = (typedConfig.actions || []).filter((a) => !isOwnAction(a));\n const updated = { ...typedConfig, actions: [...otherActions, ...ownActions] };\n onChange(updated as unknown as Record<string, unknown>);\n editor.setDirty(true);\n },\n [typedConfig, onChange, editor]\n );\n\n const handlePublish = useCallback(() => {\n if (dismissedKeys.size > 0) {\n const filtered = filterConfig(typedConfig, dismissedKeys);\n onChange(filtered as unknown as Record<string, unknown>);\n }\n editor.publish();\n }, [dismissedKeys, typedConfig, onChange, editor]);\n\n const handleCardHover = useCallback(\n (item: FlatItem) => {\n setHoveredKey(item.key);\n if (item.firstAnchor) {\n editor.highlightElement(item.firstAnchor);\n }\n },\n [editor]\n );\n\n const handleCardLeave = useCallback(() => {\n setHoveredKey(null);\n editor.clearHighlight();\n }, [editor]);\n\n // ---- Edit form renderer ----\n\n const renderEditFields = (index: number) => {\n const actions = (typedConfig.actions || []).filter(isOwnAction);\n const tip = actions[index];\n if (!tip) return null;\n\n const item = allItems.find((it) => it.key === String(index));\n\n return (\n <div className=\"se-py-1\">\n {/* Trigger line in edit mode */}\n {item && item.trigger !== 'All pages' && (\n <div\n data-trigger\n className=\"se-flex se-items-center se-gap-1 se-text-[11px] se-text-slate-grey-8 se-cursor-pointer se-mb-1\"\n onClick={() => handleTriggerClick(item)}\n >\n <span>{'\\u{1f4cd}'}</span>\n <span>{item.trigger}</span>\n </div>\n )}\n\n <EditorInput\n label=\"Title\"\n value={tip.config.title}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleFieldChange(index, 'title', e.target.value)\n }\n />\n\n <EditorInput\n label=\"Description\"\n value={tip.config.description}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleFieldChange(index, 'description', e.target.value)\n }\n />\n\n <EditorInput\n label=\"Link URL\"\n value={tip.config.href || ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleFieldChange(index, 'href', e.target.value)\n }\n placeholder=\"Optional\"\n />\n\n <EditorInput\n label=\"Icon\"\n value={tip.config.icon || ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleFieldChange(index, 'icon', e.target.value)\n }\n placeholder=\"e.g., \\u{1f9ed}\"\n />\n\n <EditorInput\n label=\"Category\"\n value={tip.config.category || ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleFieldChange(index, 'category', e.target.value)\n }\n placeholder=\"Optional\"\n />\n\n <label className=\"se-flex se-items-center se-gap-2 se-text-xs se-text-slate-grey-8 se-mb-2\">\n <input\n type=\"checkbox\"\n checked={tip.config.external || false}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleFieldChange(index, 'external', e.target.checked)\n }\n />\n Open in new tab\n </label>\n\n <label className=\"se-text-[11px] se-font-semibold se-text-slate-grey-7 se-mb-1 se-block\">\n AI Rationale\n </label>\n <div className=\"se-p-2 se-rounded se-border se-border-dashed se-border-white/15 se-bg-white/[0.02] se-text-slate-grey-8 se-text-xs se-mb-2\">\n {tip.rationale ? tip.rationale.why : 'N/A'}\n </div>\n </div>\n );\n };\n\n const subtitle = `${totalLinks} tip${totalLinks !== 1 ? 's' : ''}${totalLinks > 0 ? ` (${foundCount} found on this page)` : ''}`;\n\n return (\n <EditorLayout>\n <EditorHeader\n title=\"Navigation Tips\"\n subtitle={subtitle}\n onBack={() => editor.navigateHome()}\n />\n\n <EditorBody>\n {editingKey !== null ? (\n /* ---- Edit mode ---- */\n (() => {\n const editIndex = Number(editingKey);\n const editItem = allItems.find((it) => it.key === editingKey);\n return (\n <>\n <div className=\"se-flex se-items-center se-gap-2 se-mb-3 se-text-[13px] se-font-semibold se-text-slate-grey-10\">\n <span>{'\\u{1F9ED}'}</span>\n <span>{editItem?.summary}</span>\n </div>\n <BeforeAfterToggle mode={previewMode} onToggle={handleBeforeAfter} />\n {renderEditFields(editIndex)}\n <EditBackButton onClick={handleBackToList} />\n </>\n );\n })()\n ) : (\n /* ---- List mode ---- */\n <>\n {allItems.length === 0 && <EmptyState message=\"No tips configured.\" />}\n\n {activeItems.length > 0 && (\n <>\n <GroupHeader label=\"TIPS\" count={activeItems.length} />\n {activeItems.map((item) => {\n const detection = detectionMap.get(item.key);\n return (\n <EditorCard\n key={item.key}\n itemKey={item.key}\n onMouseEnter={() => handleCardHover(item)}\n onMouseLeave={handleCardLeave}\n >\n {/* Trigger line */}\n {item.trigger !== 'All pages' && (\n <div\n data-trigger\n className=\"se-flex se-items-center se-gap-1 se-text-[11px] se-text-slate-grey-8 se-cursor-pointer se-mb-1\"\n onClick={(e) => {\n e.stopPropagation();\n handleTriggerClick(item);\n }}\n >\n <span>{'\\u{1f4cd}'}</span>\n <span>{item.trigger}</span>\n </div>\n )}\n {/* Card body: badge + summary + dismiss */}\n <div\n data-card-body\n className=\"se-flex se-items-center se-gap-2 se-cursor-pointer\"\n onClick={() => handleCardBodyClick(item)}\n >\n <DetectionBadge found={detection?.found ?? false} />\n <span className=\"se-flex-1 se-overflow-hidden se-text-ellipsis se-whitespace-nowrap\">\n {item.summary}\n </span>\n <button\n className=\"se-py-0.5 se-px-1.5 se-rounded se-border-none se-bg-transparent se-text-slate-grey-7 se-text-sm se-cursor-pointer se-shrink-0 se-leading-none\"\n onClick={(e) => {\n e.stopPropagation();\n handleDismiss(item.key);\n }}\n title=\"Dismiss this tip\"\n >\n ×\n </button>\n </div>\n {/* Rationale line */}\n <div className=\"se-text-[10px] se-text-slate-grey-7 se-mt-1\">\n WHY: {item.rationale ? item.rationale.why : 'N/A'}\n </div>\n {/* Condition status line */}\n <ConditionStatusLine status={showWhenStatuses.get(item.key) ?? null} />\n </EditorCard>\n );\n })}\n </>\n )}\n\n {/* Dismissed section */}\n {dismissedItems.length > 0 && (\n <DismissedSection count={dismissedItems.length}>\n {dismissedItems.map((item) => (\n <div\n key={item.key}\n className=\"se-flex se-items-center se-gap-2 se-py-1.5 se-px-2.5 se-rounded-md se-border se-border-white/[0.03] se-bg-transparent se-mb-0.5 se-cursor-pointer se-text-xs se-text-slate-grey-6 se-opacity-60\"\n >\n <span className=\"se-flex-1 se-overflow-hidden se-text-ellipsis se-whitespace-nowrap se-line-through\">\n {item.summary}\n </span>\n <button\n className=\"se-py-0.5 se-px-1.5 se-rounded se-border-none se-bg-transparent se-text-blue-5 se-text-[11px] se-cursor-pointer se-shrink-0 se-leading-none\"\n onClick={(e) => {\n e.stopPropagation();\n handleRestore(item.key);\n }}\n >\n Restore\n </button>\n </div>\n ))}\n </DismissedSection>\n )}\n </>\n )}\n </EditorBody>\n\n <EditorFooter onSave={() => editor.save()} onPublish={handlePublish} />\n </EditorLayout>\n );\n}\n\n/**\n * Editor panel configuration for the app registry.\n */\nexport const editorPanel = {\n title: 'Navigation Tips',\n icon: '\\u{1F9ED}',\n description: 'Navigation tips accordion with per-item visibility',\n};\n\nexport const editor = {\n panel: editorPanel,\n component: NavEditor,\n};\n\nexport default NavEditor;\n", "/**\n * Syntro Design System - Color Tokens\n *\n * This file contains all color tokens from the Figma design system.\n * Colors are organized by scale and semantic meaning.\n *\n * @see https://www.figma.com/design/U0Ol5vM7FQvgPfIgCAgxgb/Design-System\n */\n// ============================================================================\n// BASE COLORS\n// ============================================================================\nexport const base = {\n white: '#ffffff',\n black: '#000000',\n};\n// ============================================================================\n// BRAND COLORS\n// ============================================================================\nexport const brand = {\n 0: '#2c0b0a',\n 1: '#5b1715',\n 2: '#89221f',\n 3: '#b72e2a',\n 4: '#d44844',\n 5: '#dd6d69',\n 6: '#e5918f',\n 7: '#eeb6b4',\n 8: '#f6dada',\n 9: '#faebea',\n};\n// ============================================================================\n// NEUTRAL COLORS\n// ============================================================================\nexport const slateGrey = {\n 0: '#07080a',\n 1: '#0f1318',\n 2: '#0e1114',\n 3: '#1c222a',\n 4: '#2b333f',\n 5: '#394454',\n 6: '#475569',\n 7: '#677384',\n 8: '#87919f',\n 9: '#a8afba',\n 10: '#cbd0d7',\n 11: '#e8eaee',\n 12: '#f6f7f9',\n};\n// ============================================================================\n// SEMANTIC COLOR SCALES\n// ============================================================================\nexport const green = {\n 0: '#07230a',\n 1: '#0e4514',\n 2: '#16681e',\n 3: '#1d8a28',\n 4: '#24ad32',\n 5: '#4fbd5a',\n 6: '#7acd82',\n 7: '#a5deab',\n 8: '#d0eed3',\n 9: '#e5f6e7',\n};\nexport const yellow = {\n 0: '#301f09',\n 1: '#5f3e12',\n 2: '#8f5e1b',\n 3: '#be7d24',\n 4: '#ee9c2d',\n 5: '#f1b057',\n 6: '#f5c481',\n 7: '#f8d7ab',\n 8: '#fcebd5',\n 9: '#fdf5ea',\n};\nexport const red = {\n 0: '#330707',\n 1: '#660f0e',\n 2: '#991616',\n 3: '#cc1e1d',\n 4: '#ff2524',\n 5: '#ff5150',\n 6: '#ff7c7c',\n 7: '#ffa8a7',\n 8: '#ffd3d3',\n 9: '#ffe9e9',\n};\nexport const blue = {\n 0: '#051533',\n 1: '#0a2a66',\n 2: '#0f3f98',\n 3: '#1454cb',\n 4: '#1969fe',\n 5: '#4787fe',\n 6: '#75a5fe',\n 7: '#a3c3ff',\n 8: '#d1e1ff',\n 9: '#e8f0ff',\n};\nexport const orange = {\n 0: '#662500',\n 1: '#993d00',\n 2: '#cc5800',\n 3: '#ff7700',\n 4: '#fea85d',\n 5: '#fec58f',\n 6: '#ffd6ae',\n 7: '#fee6cd',\n 8: '#fff1e1',\n 9: '#fff8f0',\n};\nexport const purple = {\n 0: '#151229',\n 1: '#2a2452',\n 2: '#40357c',\n 3: '#5547a5',\n 4: '#6a59ce',\n 5: '#887ad8',\n 6: '#a69be2',\n 7: '#c3bdeb',\n 8: '#e1def5',\n 9: '#f0eefa',\n};\nexport const pink = {\n 0: '#37091f',\n 1: '#69123c',\n 2: '#9b1c58',\n 3: '#cd2575',\n 4: '#ff2e92',\n 5: '#ff58a8',\n 6: '#ff82be',\n 7: '#ffabd3',\n 8: '#ffd5e9',\n 9: '#ffeaf4',\n};\n// ============================================================================\n// LEGACY COLORS (Being phased out)\n// ============================================================================\nexport const legacy = {\n aqua: {\n 0: '#0c5f8d',\n 1: '#146b99',\n 2: '#1d78a6',\n 3: '#2e89b6',\n 4: '#4a9fc4',\n 5: '#6bb4d1',\n 6: '#93cce0',\n 7: '#bddff0',\n 8: '#dceef8',\n 9: '#f2f8fc',\n },\n violet: {\n 0: '#6927da',\n 1: '#7839ee',\n 2: '#875bf7',\n 3: '#a48afb',\n 4: '#c3b4fd',\n 5: '#ddd6fe',\n 6: '#ece9fe',\n 7: '#f5f3ff',\n 8: '#fbfaff',\n },\n fuchsia: {\n 0: '#9f1ab1',\n 1: '#ba24d5',\n 2: '#d444f1',\n 3: '#e478fa',\n 4: '#eeaafd',\n 5: '#f6d0fe',\n 6: '#fbe8ff',\n 7: '#fdf4ff',\n 8: '#fefaff',\n },\n pink: {\n 0: '#a10f5f',\n 1: '#dd2590',\n 2: '#ee46bc',\n 3: '#f670c7',\n 4: '#faa7e0',\n 5: '#fcceee',\n 6: '#fce7f6',\n 7: '#fdf2fa',\n 8: '#fef6fb',\n },\n};\n// ============================================================================\n// TEXT TOKENS\n// ============================================================================\nexport const text = {\n primary: slateGrey[10],\n secondary: slateGrey[9],\n tertiary: slateGrey[8],\n};\n// ============================================================================\n// BACKGROUND TOKENS\n// ============================================================================\nexport const background = {\n primary: slateGrey[2],\n secondary: slateGrey[0],\n};\n// ============================================================================\n// BORDER TOKENS\n// ============================================================================\nexport const border = {\n primary: slateGrey[4],\n secondary: slateGrey[3],\n};\n// ============================================================================\n// BUTTON TOKENS\n// ============================================================================\nexport const button = {\n primary: {\n text: base.white,\n icon: base.white,\n border: brand[3],\n backgroundDefault: brand[3],\n backgroundHover: brand[2],\n },\n neutral: {\n text: slateGrey[10],\n textHover: base.white,\n icon: slateGrey[10],\n iconHover: base.white,\n border: slateGrey[4],\n background: slateGrey[2],\n },\n link: {\n text: base.white,\n icon: base.white,\n hover: brand[5],\n },\n error: {\n text: red[5],\n hover: red[6],\n },\n success: {\n text: green[5],\n hover: green[6],\n },\n};\n// ============================================================================\n// BADGE TOKENS\n// ============================================================================\nexport const badge = {\n slateGrey: {\n content: slateGrey[10],\n pillOutline: slateGrey[10],\n borderPrimary: slateGrey[5],\n borderSecondary: slateGrey[5],\n background: slateGrey[3],\n },\n brand: {\n content: brand[9],\n pillOutline: brand[9],\n borderPrimary: brand[6],\n borderSecondary: brand[6],\n background: brand[0],\n },\n red: {\n content: red[8],\n pillOutline: red[4],\n borderPrimary: red[2],\n borderSecondary: red[2],\n background: red[0],\n },\n yellow: {\n content: yellow[8],\n pillOutline: yellow[4],\n borderPrimary: yellow[2],\n borderSecondary: yellow[2],\n background: yellow[0],\n },\n green: {\n content: green[8],\n pillOutline: green[4],\n borderPrimary: green[2],\n borderSecondary: green[2],\n background: green[0],\n },\n purple: {\n content: purple[8],\n pillOutline: purple[4],\n borderPrimary: purple[2],\n borderSecondary: purple[2],\n background: purple[0],\n },\n blue: {\n content: blue[8],\n pillOutline: blue[4],\n borderPrimary: blue[2],\n borderSecondary: blue[2],\n background: blue[0],\n },\n orange: {\n content: orange[8],\n pillOutline: orange[4],\n borderPrimary: orange[2],\n borderSecondary: orange[2],\n background: orange[0],\n },\n pink: {\n content: pink[8],\n pillOutline: pink[4],\n borderPrimary: pink[2],\n borderSecondary: pink[2],\n background: pink[0],\n },\n};\n// ============================================================================\n// BADGE BANNER TOKENS\n// ============================================================================\nexport const badgeBanner = {\n green: {\n content: green[8],\n border: green[2],\n background: green[0],\n },\n yellow: {\n content: yellow[8],\n border: yellow[2],\n background: yellow[0],\n },\n red: {\n content: red[8],\n border: red[2],\n background: red[0],\n },\n};\n// ============================================================================\n// ALERT TOKENS\n// ============================================================================\nexport const alert = {\n green: {\n content: green[1],\n background: green[9],\n },\n yellow: {\n content: yellow[1],\n background: yellow[9],\n },\n red: {\n content: red[1],\n background: red[9],\n },\n};\n// ============================================================================\n// TAG TOKENS\n// ============================================================================\nexport const tag = {\n content: slateGrey[10],\n border: slateGrey[4],\n background: '#1c2124',\n};\n// ============================================================================\n// MENU TOKENS\n// ============================================================================\nexport const menu = {\n backgroundDefault: slateGrey[2],\n backgroundHover: slateGrey[1],\n selected: slateGrey[3],\n};\n// ============================================================================\n// INPUT/DROPDOWN TOKENS\n// ============================================================================\nexport const inputDropdown = {\n background: slateGrey[2],\n icon: slateGrey[10],\n borderDefault: slateGrey[4],\n borderSelected: brand[3],\n textLabel: slateGrey[9],\n textPlaceholder: slateGrey[8],\n textHint: slateGrey[8],\n};\nexport const inputField = {\n backgroundDefault: slateGrey[2],\n backgroundDisabled: slateGrey[0],\n textLabel: slateGrey[9],\n textPlaceholder: slateGrey[8],\n textHint: slateGrey[8],\n textError: red[5],\n iconDefault: slateGrey[9],\n iconPlaceholder: slateGrey[10],\n iconError: red[5],\n borderDefault: slateGrey[4],\n borderSelected: brand[3],\n borderError: red[5],\n};\n// ============================================================================\n// TOGGLE TOKENS\n// ============================================================================\nexport const toggle = {\n handleDefault: base.white,\n handleDisabled: slateGrey[10],\n off: {\n backgroundDefault: slateGrey[4],\n backgroundHover: slateGrey[5],\n backgroundDisabled: slateGrey[4],\n },\n on: {\n backgroundDefault: green[3],\n backgroundHover: green[2],\n backgroundDisabled: slateGrey[4],\n },\n};\n// ============================================================================\n// CHECKBOX TOKENS\n// ============================================================================\nexport const checkbox = {\n off: {\n backgroundDefault: '#00000000',\n backgroundHover: slateGrey[5],\n backgroundDisabled: slateGrey[2],\n border: slateGrey[6],\n },\n on: {\n backgroundDefault: green[0],\n backgroundHover: green[1],\n backgroundDisabled: slateGrey[2],\n border: green[3],\n },\n};\n// ============================================================================\n// AVATAR TOKENS\n// ============================================================================\nexport const avatar = {\n content: slateGrey[10],\n background: slateGrey[4],\n};\n// ============================================================================\n// PROGRESS BAR & SLIDER TOKENS\n// ============================================================================\nexport const progressBarSlider = {\n background: slateGrey[4],\n active: green[3],\n};\n// ============================================================================\n// CARD TOKENS\n// ============================================================================\nexport const card = {\n background: slateGrey[1],\n content: slateGrey[9],\n border: slateGrey[4],\n};\n// ============================================================================\n// SIDEBAR TOKENS\n// ============================================================================\nexport const sidebar = {\n backgroundDefault: slateGrey[1],\n backgroundHover: slateGrey[3],\n backgroundActive: slateGrey[4],\n border: slateGrey[4],\n contentPrimary: slateGrey[10],\n contentSecondary: slateGrey[9],\n contentTertiary: slateGrey[8],\n};\n// ============================================================================\n// MODAL TOKENS\n// ============================================================================\nexport const modal = {\n background: slateGrey[1],\n content: slateGrey[9],\n border: slateGrey[4],\n};\n// ============================================================================\n// TAB TOKENS\n// ============================================================================\nexport const tab = {\n activeBackground: slateGrey[3],\n activeContent: brand[5],\n inactiveContent: slateGrey[9],\n border: slateGrey[4],\n};\n// ============================================================================\n// TABLE TOKENS\n// ============================================================================\nexport const table = {\n header: {\n textDefault: slateGrey[9],\n textHover: slateGrey[8],\n backgroundDefault: slateGrey[1],\n },\n border: slateGrey[4],\n cell: {\n textPrimary: slateGrey[10],\n textSecondary: slateGrey[9],\n backgroundDefault: slateGrey[2],\n backgroundHover: slateGrey[1],\n },\n};\n// ============================================================================\n// BREADCRUMBS TOKENS\n// ============================================================================\nexport const breadcrumbs = {\n textPrimaryDefault: slateGrey[10],\n textPrimaryHover: slateGrey[10],\n textSecondaryDefault: slateGrey[8],\n textSecondaryHover: slateGrey[9],\n iconPrimary: slateGrey[10],\n iconSecondary: slateGrey[8],\n};\n// ============================================================================\n// LOADING INDICATOR TOKENS\n// ============================================================================\nexport const loadingIndicator = {\n background: green[1],\n active: green[5],\n};\n// ============================================================================\n// DATE PICKER TOKENS\n// ============================================================================\nexport const datePicker = {\n textDefault: slateGrey[10],\n textSelected: base.white,\n textDisabled: slateGrey[7],\n backgroundDefault: slateGrey[2],\n backgroundMiddle: slateGrey[3],\n backgroundSelected: brand[3],\n border: slateGrey[4],\n};\n// ============================================================================\n// MISC TOKENS\n// ============================================================================\nexport const scroll = slateGrey[9];\n// ============================================================================\n// EXPORTS\n// ============================================================================\nexport const colors = {\n base,\n brand,\n slateGrey,\n green,\n yellow,\n red,\n blue,\n orange,\n purple,\n pink,\n legacy,\n text,\n background,\n border,\n button,\n badge,\n badgeBanner,\n alert,\n tag,\n menu,\n inputDropdown,\n inputField,\n toggle,\n checkbox,\n avatar,\n progressBarSlider,\n card,\n sidebar,\n modal,\n tab,\n table,\n breadcrumbs,\n loadingIndicator,\n datePicker,\n scroll,\n};\nexport default colors;\n", "\n function _RD() {\n return (typeof SynOS !== 'undefined' && SynOS.ReactDOM) || {};\n }\n export default new Proxy({}, { get: function(_, k) { return _RD()[k]; } });\n export function createRoot() { return _RD().createRoot.apply(null, arguments); }\n export function hydrateRoot() { return _RD().hydrateRoot.apply(null, arguments); }\n export function createPortal() { return _RD().createPortal.apply(null, arguments); }\n export function flushSync() { return _RD().flushSync.apply(null, arguments); }\n ", "/**\n * Adaptive Nav - NavWidget Component\n *\n * React component that renders a collapsible navigation tips accordion\n * with per-item conditional visibility based on showWhen decision strategies.\n *\n * Demonstrates the compositional action pattern where child actions\n * (nav:tip) serve as configuration data for the parent widget.\n */\n\nimport { base, slateGrey, purple } from '@syntro/design-system/tokens';\nimport React, { useEffect, useReducer, useMemo, useCallback, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport type { NavWidgetProps, NavTipAction, NavConfig, NavWidgetRuntime } from './types';\n\n// ============================================================================\n// Sanitization\n// ============================================================================\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst baseStyles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n padding: '8px',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n accordion: {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '4px',\n },\n item: {\n borderRadius: '8px',\n overflow: 'hidden',\n transition: 'box-shadow 0.2s ease',\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: '12px 16px',\n border: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 500,\n fontFamily: 'inherit',\n textAlign: 'left' as const,\n transition: 'background-color 0.15s ease',\n },\n chevron: {\n fontSize: '10px',\n transition: 'transform 0.2s ease',\n marginLeft: 'auto',\n flexShrink: 0,\n },\n icon: {\n fontSize: '16px',\n flexShrink: 0,\n },\n body: {\n overflow: 'hidden',\n transition: 'max-height 0.25s ease, padding-bottom 0.25s ease',\n padding: '0 16px',\n },\n description: {\n fontSize: '13px',\n lineHeight: '1.5',\n margin: 0,\n },\n linkButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n marginTop: '10px',\n padding: '6px 12px',\n borderRadius: '6px',\n textDecoration: 'none',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n border: 'none',\n transition: 'background-color 0.15s ease',\n },\n categoryHeader: {\n fontSize: '11px',\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n padding: '12px 4px 4px',\n },\n emptyState: {\n fontSize: '13px',\n padding: '16px',\n textAlign: 'center' as const,\n },\n} as const;\n\nconst themeStyles = {\n light: {\n container: {\n backgroundColor: base.white,\n color: slateGrey[1],\n },\n item: {\n backgroundColor: slateGrey[12],\n border: `1px solid ${slateGrey[11]}`,\n },\n itemExpanded: {\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.08)',\n },\n header: {\n backgroundColor: 'transparent',\n color: slateGrey[1],\n },\n headerHover: {\n backgroundColor: slateGrey[12],\n },\n body: {\n color: slateGrey[6],\n },\n linkButton: {\n backgroundColor: purple[8],\n color: purple[2],\n },\n categoryHeader: {\n color: slateGrey[7],\n },\n emptyState: {\n color: slateGrey[8],\n },\n },\n dark: {\n container: {\n backgroundColor: slateGrey[1],\n color: slateGrey[12],\n },\n item: {\n backgroundColor: slateGrey[3],\n border: `1px solid ${slateGrey[5]}`,\n },\n itemExpanded: {\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.3)',\n },\n header: {\n backgroundColor: 'transparent',\n color: slateGrey[12],\n },\n headerHover: {\n backgroundColor: slateGrey[5],\n },\n body: {\n color: slateGrey[8],\n },\n linkButton: {\n backgroundColor: purple[0],\n color: purple[6],\n },\n categoryHeader: {\n color: slateGrey[8],\n },\n emptyState: {\n color: slateGrey[7],\n },\n },\n};\n\n// ============================================================================\n// NavTipItem Component\n// ============================================================================\n\ninterface NavTipItemProps {\n item: NavTipAction;\n isExpanded: boolean;\n onToggle: () => void;\n onNavigate: (href: string, external: boolean) => void;\n theme: 'light' | 'dark';\n}\n\nfunction NavTipItem({ item, isExpanded, onToggle, onNavigate, theme }: NavTipItemProps) {\n const [isHovered, setIsHovered] = useState(false);\n const colors = themeStyles[theme];\n const { title, description, href, icon, external } = item.config;\n\n const itemStyle: React.CSSProperties = {\n ...baseStyles.item,\n ...colors.item,\n ...(isExpanded ? colors.itemExpanded : {}),\n };\n\n const headerStyle: React.CSSProperties = {\n ...baseStyles.header,\n ...colors.header,\n ...(isHovered ? colors.headerHover : {}),\n };\n\n const chevronStyle: React.CSSProperties = {\n ...baseStyles.chevron,\n transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',\n };\n\n const bodyStyle: React.CSSProperties = {\n ...baseStyles.body,\n ...colors.body,\n maxHeight: isExpanded ? '500px' : '0',\n paddingBottom: isExpanded ? '16px' : '0',\n };\n\n const handleLinkClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (href) {\n onNavigate(href, external ?? false);\n }\n };\n\n return (\n <div style={itemStyle} data-nav-tip-id={item.config.id}>\n <button\n style={headerStyle}\n onClick={onToggle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n aria-expanded={isExpanded}\n >\n {icon && <span style={baseStyles.icon}>{icon}</span>}\n <span>{title}</span>\n <span style={chevronStyle}>{'\\u25BC'}</span>\n </button>\n <div style={bodyStyle} aria-hidden={!isExpanded}>\n <p style={baseStyles.description}>{description}</p>\n {href && (\n <a\n href={href}\n onClick={handleLinkClick}\n style={{ ...baseStyles.linkButton, ...colors.linkButton }}\n target={external ? '_blank' : undefined}\n rel={external ? 'noopener noreferrer' : undefined}\n >\n Go {external ? '\\u2197' : '\\u2192'}\n </a>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// NavWidget Component\n// ============================================================================\n\n/**\n * NavWidget - Renders a collapsible navigation tips accordion.\n *\n * This component demonstrates the compositional action pattern:\n * - Parent (NavWidget) receives `config.actions` array\n * - Each action has optional `showWhen` for per-item visibility\n * - Parent evaluates showWhen and filters visible tips\n * - Parent manages expand state and re-rendering on context changes\n */\nexport function NavWidget({ config, runtime, instanceId }: NavWidgetProps) {\n // Force re-render when context/accumulator changes.\n const [renderTick, forceUpdate] = useReducer((x: number) => x + 1, 0);\n\n // Track expanded tip IDs\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set());\n\n // Subscribe to context changes for reactive updates\n useEffect(() => {\n const unsubscribe = runtime.context.subscribe(() => {\n forceUpdate();\n });\n return unsubscribe;\n }, [runtime.context]);\n\n // Subscribe to accumulator changes for event_count-based showWhen\n useEffect(() => {\n if (!runtime.accumulator?.subscribe) return;\n return runtime.accumulator.subscribe(() => {\n forceUpdate();\n });\n }, [runtime.accumulator]);\n\n // Register accumulator predicates from scope config\n useEffect(() => {\n if (!config.scope || !runtime.accumulator?.register) return;\n const { events: eventNames, urlContains, props: propFilters } = config.scope;\n\n // Scan showWhen conditions for event_count keys\n const keys = new Set<string>();\n for (const action of config.actions) {\n if (action.showWhen?.type === 'rules') {\n for (const rule of action.showWhen.rules) {\n for (const cond of rule.conditions) {\n if ((cond as any).type === 'event_count' && (cond as any).key) {\n keys.add((cond as any).key);\n }\n }\n }\n }\n }\n\n for (const key of keys) {\n runtime.accumulator.register(key, (event: any) => {\n if (!eventNames.includes(event.name)) return false;\n if (urlContains) {\n const pathname = String(event.props?.pathname ?? '');\n if (!pathname.includes(urlContains)) return false;\n }\n if (propFilters) {\n for (const [k, v] of Object.entries(propFilters)) {\n if (event.props?.[k] !== v) return false;\n }\n }\n return true;\n });\n }\n }, [config.scope, config.actions, runtime.accumulator]);\n\n // Filter visible tips based on per-item showWhen\n const visibleTips = useMemo(\n () =>\n config.actions.filter((tip) => {\n if (!tip.showWhen) return true;\n try {\n const result = runtime.evaluateSync<boolean>(tip.showWhen);\n return result.value;\n } catch {\n // If strategy evaluation fails, hide the tip (fail-closed)\n return false;\n }\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [config.actions, runtime, renderTick]\n );\n\n // Group by category\n const categoryGroups = useMemo(() => {\n const groups = new Map<string | undefined, NavTipAction[]>();\n for (const tip of visibleTips) {\n const cat = tip.config.category;\n if (!groups.has(cat)) {\n groups.set(cat, []);\n }\n groups.get(cat)!.push(tip);\n }\n return groups;\n }, [visibleTips]);\n\n // Check if any items have categories\n const hasCategories = useMemo(\n () => visibleTips.some((t) => t.config.category),\n [visibleTips]\n );\n\n // Resolve theme (auto \u2192 detect system preference)\n const resolvedTheme = useMemo(() => {\n if (config.theme !== 'auto') return config.theme;\n if (typeof window !== 'undefined') {\n return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return 'light';\n }, [config.theme]);\n\n // Handle tip toggle\n const handleToggle = useCallback(\n (id: string) => {\n setExpandedIds((prev) => {\n const wasExpanded = prev.has(id);\n\n let next: Set<string>;\n if (config.expandBehavior === 'single') {\n // In single mode, emit collapse events for any previously-expanded tips\n for (const prevId of prev) {\n if (prevId !== id) {\n runtime.events.publish('nav:toggled', {\n instanceId,\n tipId: prevId,\n expanded: false,\n timestamp: Date.now(),\n });\n }\n }\n next = wasExpanded ? new Set() : new Set([id]);\n } else {\n next = new Set(prev);\n if (wasExpanded) {\n next.delete(id);\n } else {\n next.add(id);\n }\n }\n\n // Emit event for the clicked tip using fresh state from the updater\n runtime.events.publish('nav:toggled', {\n instanceId,\n tipId: id,\n expanded: !wasExpanded,\n timestamp: Date.now(),\n });\n\n return next;\n });\n },\n [config.expandBehavior, runtime.events, instanceId]\n );\n\n // Handle navigation with event publishing\n const handleNavigate = useCallback(\n (href: string, external: boolean) => {\n // Reject dangerous URIs to prevent XSS\n const normalizedHref = href.trim().toLowerCase();\n if (\n normalizedHref.startsWith('javascript:') ||\n normalizedHref.startsWith('data:')\n ) {\n return;\n }\n\n runtime.events.publish('nav:tip_clicked', {\n instanceId,\n href,\n external,\n timestamp: Date.now(),\n });\n\n if (external) {\n window.open(href, '_blank', 'noopener,noreferrer');\n } else {\n window.location.href = href;\n }\n },\n [runtime.events, instanceId]\n );\n\n // Compute container styles\n const containerStyle: React.CSSProperties = {\n ...baseStyles.container,\n ...themeStyles[resolvedTheme].container,\n };\n\n const categoryHeaderStyle: React.CSSProperties = {\n ...baseStyles.categoryHeader,\n ...themeStyles[resolvedTheme].categoryHeader,\n };\n\n const emptyStateStyle: React.CSSProperties = {\n ...baseStyles.emptyState,\n ...themeStyles[resolvedTheme].emptyState,\n };\n\n // Render a list of nav tip items\n const renderItems = (items: NavTipAction[]) =>\n items.map((tip) => (\n <NavTipItem\n key={tip.config.id}\n item={tip}\n isExpanded={expandedIds.has(tip.config.id)}\n onToggle={() => handleToggle(tip.config.id)}\n onNavigate={handleNavigate}\n theme={resolvedTheme}\n />\n ));\n\n // Empty state\n if (visibleTips.length === 0) {\n return (\n <div style={containerStyle} data-adaptive-id={instanceId} data-adaptive-type=\"adaptive-nav\">\n <div style={emptyStateStyle}>No navigation tips available.</div>\n </div>\n );\n }\n\n return (\n <div style={containerStyle} data-adaptive-id={instanceId} data-adaptive-type=\"adaptive-nav\">\n <div style={baseStyles.accordion}>\n {hasCategories\n ? Array.from(categoryGroups.entries()).map(([category, items]) => (\n <React.Fragment key={category ?? '__ungrouped'}>\n {category && (\n <div style={categoryHeaderStyle} data-category-header={category}>\n {category}\n </div>\n )}\n {renderItems(items)}\n </React.Fragment>\n ))\n : renderItems(visibleTips)}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// Mountable Widget Interface\n// ============================================================================\n\n/**\n * Mountable widget interface for the runtime's WidgetRegistry.\n */\nexport const NavMountableWidget = {\n mount(\n container: HTMLElement,\n config?: NavConfig & { runtime?: NavWidgetRuntime; instanceId?: string }\n ) {\n const {\n runtime,\n instanceId = 'nav-widget',\n ...navConfig\n } = config || {\n expandBehavior: 'single' as const,\n theme: 'auto' as const,\n actions: [],\n };\n\n // React rendering when runtime + ReactDOM are available\n if (runtime && typeof createRoot === 'function') {\n const root = createRoot(container);\n root.render(\n React.createElement(NavWidget, {\n config: navConfig as NavConfig,\n runtime: runtime as NavWidgetRuntime,\n instanceId,\n })\n );\n return () => {\n root.unmount();\n };\n }\n\n // HTML fallback for non-React environments\n const tips = (navConfig as NavConfig).actions || [];\n container.innerHTML = `\n <div style=\"font-family: system-ui; max-width: 100%;\">\n ${tips\n .map(\n (tip) => `\n <div style=\"margin-bottom: 4px; padding: 12px 16px; background: ${slateGrey[12]}; border-radius: 8px;\">\n ${tip.config.icon ? `<span>${escapeHtml(tip.config.icon)}</span> ` : ''}<strong>${escapeHtml(tip.config.title)}</strong>\n <p style=\"margin-top: 8px; color: ${slateGrey[6]}; font-size: 13px;\">${escapeHtml(tip.config.description)}</p>\n ${tip.config.href ? `<a href=\"${escapeHtml(tip.config.href)}\" style=\"color: ${purple[2]}; font-size: 13px;\">Go →</a>` : ''}\n </div>\n `\n )\n .join('')}\n </div>\n `;\n\n return () => {\n container.innerHTML = '';\n };\n },\n};\n\nexport default NavWidget;\n", "/**\n * Adaptive Nav - Runtime Module\n *\n * Runtime manifest for the navigation tips accordion adaptive.\n * Includes widget-based nav tips and navigation action executors\n * (scrollTo, navigate) previously in adaptive-navigation.\n */\n\nimport { NavMountableWidget } from './NavWidget';\nimport type { ScrollToAction, NavigateAction, ExecutorResult, ActionExecutor } from './types';\n\n// ============================================================================\n// Navigation Action Executors (merged from adaptive-navigation)\n// ============================================================================\n\n/**\n * Execute a scrollTo action\n */\nexport const executeScrollTo: ActionExecutor<ScrollToAction> = async (\n action,\n context\n): Promise<ExecutorResult> => {\n const anchorEl = context.resolveAnchor(action.anchorId);\n if (!anchorEl) {\n throw new Error(`Anchor not found: ${action.anchorId}`);\n }\n\n // Scroll to element\n anchorEl.scrollIntoView({\n behavior: action.behavior ?? 'smooth',\n block: action.block ?? 'center',\n inline: action.inline ?? 'nearest',\n });\n\n context.publishEvent('action.applied', {\n id: context.generateId(),\n kind: 'navigation:scrollTo',\n anchorId: action.anchorId,\n behavior: action.behavior ?? 'smooth',\n });\n\n return {\n cleanup: () => {\n // Optionally restore scroll position on revert\n },\n };\n};\n\n/**\n * Execute a navigate action\n */\nexport const executeNavigate: ActionExecutor<NavigateAction> = async (\n action,\n context\n): Promise<ExecutorResult> => {\n // Validate URL to prevent javascript: URLs\n const url = action.url.trim();\n if (url.toLowerCase().startsWith('javascript:')) {\n throw new Error('javascript: URLs are not allowed');\n }\n\n const target = action.target ?? '_self';\n\n context.publishEvent('action.applied', {\n id: context.generateId(),\n kind: 'navigation:navigate',\n url: action.url,\n target,\n });\n\n if (target === '_blank') {\n // Open in new tab\n window.open(url, '_blank', 'noopener,noreferrer');\n } else {\n // Navigate in current tab\n window.location.href = url;\n }\n\n return {\n cleanup: () => {\n // Navigation cannot be reverted\n },\n };\n};\n\n// ============================================================================\n// Executor Definitions for Registration\n// ============================================================================\n\n/**\n * All executors provided by this app.\n * These are registered with the runtime's ExecutorRegistry.\n */\nexport const executors = [\n { kind: 'navigation:scrollTo', executor: executeScrollTo },\n { kind: 'navigation:navigate', executor: executeNavigate },\n] as const;\n\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\n\n/**\n * Runtime manifest for adaptive-nav.\n *\n * Provides:\n * - Navigation action executors (scrollTo, navigate)\n * - Widget-based nav tips accordion (compositional nav:tip actions)\n */\nexport const runtime = {\n id: 'adaptive-nav',\n version: '2.0.0',\n name: 'Navigation Tips',\n description: 'Navigation actions and accordion-based tips with per-item conditional visibility',\n\n /**\n * Navigation action executors (scrollTo, navigate).\n */\n executors,\n\n /**\n * Widget definitions for the runtime's WidgetRegistry.\n */\n widgets: [\n {\n id: 'adaptive-nav:tips',\n component: NavMountableWidget,\n metadata: {\n name: 'Navigation Tips',\n description: 'Accordion of contextual navigation tips with per-item visibility',\n icon: '\\u{1F9ED}',\n },\n },\n ],\n};\n\nexport default runtime;\n", "/**\n * CDN Entry Point for Adaptive Nav\n *\n * This module is bundled for CDN delivery and self-registers with the global\n * SynOS app registry when loaded dynamically via the AppLoader.\n */\n\nimport NavEditor, { editorPanel } from './editor';\nimport { executors, runtime } from './runtime';\nimport type { NavTipAction } from './types';\n\n/**\n * App manifest for registry registration.\n * Follows the AppManifest interface expected by AppLoader/AppRegistry.\n */\nexport const manifest = {\n id: 'adaptive-nav',\n version: runtime.version,\n name: runtime.name,\n description: runtime.description,\n runtime: {\n actions: executors.map(({ kind, executor }) => ({\n kind,\n executor,\n })),\n widgets: runtime.widgets,\n /**\n * Extract notify watcher entries from tile config props.\n * The runtime evaluates these continuously (even with drawer closed)\n * and publishes nav:tip_revealed when showWhen transitions false \u2192 true.\n */\n notifyWatchers(props: Record<string, unknown>) {\n const actions = (props.actions ?? []) as NavTipAction[];\n return actions\n .filter((a) => a.notify && a.showWhen)\n .map((a) => ({\n id: `nav:${a.config.id}`,\n strategy: a.showWhen!,\n eventName: 'nav:tip_revealed',\n eventProps: {\n tipId: a.config.id,\n title: a.notify!.title,\n body: a.notify!.body,\n icon: a.notify!.icon,\n },\n }));\n },\n },\n editor: {\n component: NavEditor,\n panel: editorPanel,\n getActionLabel(action: Record<string, unknown>) {\n const config = (action.config as Record<string, unknown>) || {};\n return (config.title as string) || (action.kind as string) || 'nav:tip';\n },\n },\n metadata: {\n isBuiltIn: false,\n },\n};\n\n/**\n * Self-register with global registry if available.\n * This happens when loaded via script tag (UMD).\n */\nif (typeof window !== 'undefined') {\n const registry = (window as any).SynOS?.appRegistry;\n if (registry && typeof registry.register === 'function') {\n registry.register(manifest);\n }\n}\n\nexport default manifest;\n"],
|
|
5
|
-
"mappings": "AAAO,SAASA,KAAMC,EAAS,CAC3B,OAAOA,EAAQ,OAAO,OAAO,EAAE,KAAK,GAAG,CAC3C,CCDY,SAASC,IAAK,CACZ,OAAQ,OAAO,MAAU,KAAe,MAAM,OAAU,CAAC,CAC3D,CACA,SAASC,GAAKC,EAAMC,EAAOC,EAAK,CAC9B,IAAIC,EAAIL,GAAG,EACPM,EAAIH,GAAS,CAAC,EACdI,EAAID,EAAE,SACV,cAAOA,EAAE,SACLF,IAAQ,SAAWE,EAAE,IAAMF,GACxB,MAAM,QAAQG,CAAC,EAClBF,EAAE,cAAc,MAAM,KAAM,CAACH,EAAMI,CAAC,EAAE,OAAOC,CAAC,CAAC,EAC/CA,IAAM,OACJF,EAAE,cAAcH,EAAMI,EAAGC,CAAC,EAC1BF,EAAE,cAAcH,EAAMI,CAAC,CAC/B,CACO,IAAIE,EAAMP,GACNQ,EAAOR,GACPS,EAAWV,GAAG,EAAE,SCjBhC,SAASW,GAAa,CAAE,SAAAC,CAAS,EAAG,CACvC,OAAOC,EAAK,MAAO,CAAE,UAAW,6CAA8C,SAAUD,CAAS,CAAC,CACtG,CCFO,SAASE,GAAa,CAAE,MAAAC,EAAO,SAAAC,EAAU,OAAAC,CAAO,EAAG,CACtD,OAAQC,EAAM,MAAO,CAAE,UAAW,+EAAgF,SAAU,CAACC,EAAK,SAAU,CAAE,QAASF,EAAQ,UAAW,sLAAuL,SAAU,aAAc,CAAC,EAAGC,EAAM,MAAO,CAAE,SAAU,CAACC,EAAK,KAAM,CAAE,UAAW,4DAA6D,SAAUJ,CAAM,CAAC,EAAGC,GAAaG,EAAK,IAAK,CAAE,UAAW,sDAAuD,SAAUH,CAAS,CAAC,CAAE,CAAE,CAAC,CAAC,CAAE,CAAC,CAC5nB,CCFO,SAASI,GAAW,CAAE,SAAAC,CAAS,EAAG,CACrC,OAAOC,EAAK,MAAO,CAAE,UAAW,oCAAqC,SAAUD,CAAS,CAAC,CAC7F,CCFO,SAASE,GAAa,CAAE,OAAAC,EAAQ,UAAAC,CAAU,EAAG,CAChD,OAAQC,EAAM,MAAO,CAAE,UAAW,wEAAyE,SAAU,CAACC,EAAK,SAAU,CAAE,QAASH,EAAQ,UAAW,kIAAmI,SAAU,YAAa,CAAC,EAAGG,EAAK,SAAU,CAAE,QAASF,EAAW,UAAW,+HAAgI,SAAU,SAAU,CAAC,CAAC,CAAE,CAAC,CAC9gB,CCDO,SAASG,GAAW,CAAE,SAAAC,EAAU,QAAAC,EAAS,aAAAC,EAAc,aAAAC,EAAc,UAAAC,EAAW,UAAAC,CAAW,EAAG,CACjG,OAAQC,EAAK,MAAO,CAAE,gBAAiBL,EAAS,aAAcC,EAAc,aAAcC,EAAc,UAAWI,EAAG,+GAAgHF,EAAY,4CAA8C,2BAA4BD,CAAS,EAAG,SAAUJ,CAAS,CAAC,CAChW,CCFO,SAASQ,GAAe,CAAE,MAAAC,CAAM,EAAG,CACtC,OAAQC,EAAK,OAAQ,CAAE,UAAWC,EAAG,4DAA6DF,EAAQ,gBAAkB,qBAAqB,EAAG,MAAOA,EAAQ,qBAAuB,wBAAyB,CAAC,CACxN,CCHY,SAASG,GAAK,CACZ,OAAQ,OAAO,MAAU,KAAe,MAAM,OAAU,CAAC,CAC3D,CAGA,IAAOC,EAAQ,IAAI,MAAM,CAAC,EAAG,CAAE,IAAK,SAASC,EAAGC,EAAG,CAAE,OAAOH,EAAG,EAAEG,CAAC,CAAG,CAAE,CAAC,EAGjE,SAASC,GAAW,CAAE,OAAOJ,EAAG,EAAE,SAAS,MAAM,KAAM,SAAS,CAAG,CACnE,SAASK,GAAY,CAAE,OAAOL,EAAG,EAAE,UAAU,MAAM,KAAM,SAAS,CAAG,CACrE,SAASM,GAAU,CAAE,OAAON,EAAG,EAAE,QAAQ,MAAM,KAAM,SAAS,CAAG,CACjE,SAASO,GAAc,CAAE,OAAOP,EAAG,EAAE,YAAY,MAAM,KAAM,SAAS,CAAG,CACzE,SAASQ,GAAS,CAAE,OAAOR,EAAG,EAAE,OAAO,MAAM,KAAM,SAAS,CAAG,CAE/D,SAASS,IAAa,CAAE,OAAOC,EAAG,EAAE,WAAW,MAAM,KAAM,SAAS,CAAG,CAc9E,IAAIC,EAAKC,EAAG,EACDC,GAAgBF,EAAG,SACnBG,GAAgBH,EAAG,SACnBI,GAAgBJ,EAAG,SACnBK,GAAgBL,EAAG,UACnBM,GAAgBN,EAAG,cChCnC,SAASO,GAAiB,CAAE,MAAAC,EAAO,SAAAC,CAAS,EAAG,CAClD,GAAM,CAACC,EAAQC,CAAS,EAAIC,EAAS,EAAK,EAC1C,OAAQC,EAAM,MAAO,CAAE,UAAW,2CAA4C,SAAU,CAACA,EAAM,MAAO,CAAE,UAAW,yGAA0G,QAAS,IAAMF,EAAU,CAACD,CAAM,EAAG,SAAU,CAACI,EAAK,OAAQ,CAAE,SAAUJ,EAAS,SAAW,QAAS,CAAC,EAAGG,EAAM,OAAQ,CAAE,SAAU,CAAC,cAAeL,EAAO,GAAG,CAAE,CAAC,CAAC,CAAE,CAAC,EAAGE,GAAUI,EAAK,MAAO,CAAE,UAAW,YAAa,SAAUL,CAAS,CAAC,CAAC,CAAE,CAAC,CAC/c,CCHO,SAASM,GAAY,CAAE,MAAAC,EAAO,MAAAC,EAAO,UAAAC,CAAU,EAAG,CACrD,OAAQC,EAAM,MAAO,CAAE,UAAWC,EAAG,0IAA2IF,CAAS,EAAG,SAAU,CAACG,EAAK,OAAQ,CAAE,SAAUL,CAAM,CAAC,EAAGK,EAAK,OAAQ,CAAE,UAAW,0FAA2F,SAAUJ,CAAM,CAAC,CAAC,CAAE,CAAC,CACxX,CCFO,SAASK,GAAkB,CAAE,KAAAC,EAAM,SAAAC,CAAS,EAAG,CAClD,OAAQC,EAAM,MAAO,CAAE,UAAW,sFAAuF,SAAU,CAACC,EAAK,SAAU,CAAE,QAAS,IAAMF,EAAS,QAAQ,EAAG,UAAWG,EAAG,2FAA4FJ,IAAS,SACzR,iCACA,0CAA0C,EAAG,SAAU,QAAS,CAAC,EAAGG,EAAK,SAAU,CAAE,QAAS,IAAMF,EAAS,OAAO,EAAG,UAAWG,EAAG,gIAAiIJ,IAAS,QAC/Q,iCACA,0CAA0C,EAAG,SAAU,OAAQ,CAAC,CAAC,CAAE,CAAC,CAC1F,CCNO,SAASK,EAAY,CAAE,MAAAC,EAAO,UAAAC,EAAW,GAAGC,CAAM,EAAG,CACxD,OAAQC,EAAM,MAAO,CAAE,SAAU,CAACH,GAAUI,EAAK,QAAS,CAAE,UAAW,4EAA6E,SAAUJ,CAAM,CAAC,EAAII,EAAK,QAAS,CAAE,GAAGF,EAAO,UAAWG,EAAG,8KAA+K,mDAAoD,8HAA+H,+FAAgGJ,CAAS,CAAE,CAAC,CAAC,CAAE,CAAC,CACvqB,CCHO,SAASK,GAAe,CAAE,QAAAC,EAAS,MAAAC,EAAQ,aAAc,EAAG,CAC/D,OAAQC,EAAK,SAAU,CAAE,QAASF,EAAS,UAAW,8LAA+L,SAAUC,CAAM,CAAC,CAC1Q,CCFO,SAASE,GAAW,CAAE,QAAAC,CAAQ,EAAG,CACpC,OAAQC,EAAK,MAAO,CAAE,UAAW,mEAAoE,SAAUD,CAAQ,CAAC,CAC5H,CCKA,SAASE,GAAYC,EAAO,CACxB,MAAI,CAACA,GAAS,OAAO,KAAKA,CAAK,EAAE,SAAW,EACjC,GAEJ,KADO,OAAO,QAAQA,CAAK,EAAE,IAAI,CAAC,CAACC,EAAGC,CAAC,IAAM,GAAGD,CAAC,KAAKC,CAAC,EAAE,EAC9C,KAAK,IAAI,CAAC,GAChC,CAIA,SAASC,EAAeC,EAAI,CACxB,OAAQA,EAAI,CACR,IAAK,MAAO,MAAO,SACnB,IAAK,MAAO,MAAO,SACnB,IAAK,KAAM,MAAO,IAClB,IAAK,KAAM,MAAO,IAClB,IAAK,KAAM,MAAO,IAClB,QAAS,OAAOA,CACpB,CACJ,CAKO,SAASC,GAAqBC,EAAWC,EAAkB,CAC9D,OAAQD,EAAU,KAAM,CACpB,IAAK,cAAe,CAChB,IAAME,EAAQF,EAAU,MAClBN,EAAQM,EAAU,MAClBF,EAAKE,EAAU,SACfG,EAASH,EAAU,MACnBI,EAAUH,GAAoB,EACpC,MAAO,CACH,MAAO,GAAGC,CAAK,GAAGT,GAAYC,CAAK,CAAC,IAAIG,EAAeC,CAAE,CAAC,IAAIK,CAAM,GACpE,SAAU,CAAE,QAAAC,EAAS,OAAAD,EAAQ,SAAUL,CAAG,CAC9C,CACJ,CACA,IAAK,WACD,MAAO,CAAE,MAAO,GAAGE,EAAU,GAAG,EAAG,EACvC,IAAK,iBACD,MAAO,CAAE,MAAO,GAAGA,EAAU,QAAQ,KAAKA,EAAU,KAAK,GAAI,EACjE,IAAK,iBACD,MAAO,CAAE,MAAO,GAAGA,EAAU,SAAS,EAAG,EAC7C,IAAK,eACD,MAAO,CAAE,MAAO,GAAGA,EAAU,GAAG,MAAM,KAAK,UAAUA,EAAU,KAAK,CAAC,EAAG,EAC5E,IAAK,WAAY,CACb,IAAMK,EAAQ,CAAC,EACf,OAAIL,EAAU,WAAa,QACvBK,EAAM,KAAK,KAAKR,EAAe,KAAK,CAAC,IAAIG,EAAU,QAAQ,IAAI,EAC/DA,EAAU,WAAa,QACvBK,EAAM,KAAK,KAAKR,EAAe,KAAK,CAAC,IAAIG,EAAU,QAAQ,IAAI,EAC/DA,EAAU,YAAc,QACxBK,EAAM,KAAK,KAAKR,EAAe,KAAK,CAAC,IAAIG,EAAU,SAAS,IAAI,EAChEA,EAAU,YAAc,QACxBK,EAAM,KAAK,KAAKR,EAAe,KAAK,CAAC,IAAIG,EAAU,SAAS,IAAI,EAC7D,CAAE,MAAOK,EAAM,KAAK,IAAI,GAAK,cAAe,CACvD,CACA,IAAK,iBACD,MAAO,CAAE,MAAO,GAAGL,EAAU,GAAG,IAAIH,EAAeG,EAAU,QAAQ,CAAC,IAAIA,EAAU,SAAS,EAAG,EACpG,IAAK,YACD,MAAO,CAAE,MAAOA,EAAU,SAAW,gBAAkB,WAAY,EACvE,IAAK,kBACD,MAAO,CAAE,MAAOA,EAAU,SAAW,oBAAsB,iBAAkB,EACjF,IAAK,kBACD,MAAO,CAAE,MAAO,SAASH,EAAeG,EAAU,SAAW,KAAO,KAAK,CAAC,IAAIA,EAAU,KAAK,QAAS,EAC1G,QACI,MAAO,CAAE,MAAO,GAAGA,EAAU,IAAI,EAAG,CAC5C,CACJ,CClEA,SAASM,GAAY,CAAE,QAAAC,EAAS,OAAAC,CAAO,EAAG,CACtC,IAAMC,EAAM,KAAK,IAAI,IAAK,KAAK,MAAOF,EAAU,KAAK,IAAIC,EAAQ,CAAC,EAAK,GAAG,CAAC,EAC3E,OAAQE,EAAK,OAAQ,CAAE,UAAW,0FAA2F,MAAO,GAAGH,CAAO,IAAIC,CAAM,KAAKC,CAAG,KAAM,SAAUC,EAAK,OAAQ,CAAE,UAAWC,EAAG,uDAAwDF,GAAO,IAAM,gBAAkB,cAAc,EAAG,MAAO,CAAE,MAAO,GAAGA,CAAG,GAAI,CAAE,CAAC,CAAE,CAAC,CACzV,CACA,SAASG,GAAa,CAAE,GAAAC,CAAG,EAAG,CAC1B,OAAQC,EAAM,MAAO,CAAE,UAAW,+EAAgF,SAAU,CAACJ,EAAK,OAAQ,CAAE,UAAWG,EAAG,OAAS,kBAAoB,gBAAiB,SAAUA,EAAG,OAAS,SAAW,QAAS,CAAC,EAAGC,EAAM,OAAQ,CAAE,SAAU,CAACD,EAAG,KAAM,GAAG,CAAE,CAAC,EAAGH,EAAK,OAAQ,CAAE,UAAW,uBAAwB,SAAUG,EAAG,UAAU,KAAM,CAAC,EAAGA,EAAG,UAAU,UAAaC,EAAMC,EAAW,CAAE,SAAU,CAACL,EAAKJ,GAAa,CAAE,QAASO,EAAG,UAAU,SAAS,QAAS,OAAQA,EAAG,UAAU,SAAS,MAAO,CAAC,EAAGC,EAAM,OAAQ,CAAE,UAAW,iCAAkC,SAAU,CAACD,EAAG,UAAU,SAAS,QAAS,IAAKA,EAAG,UAAU,SAAS,MAAM,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAAE,CAAC,CAC3qB,CACO,SAASG,GAAoB,CAAE,OAAAC,CAAO,EAAG,CAC5C,GAAM,CAACC,EAAUC,CAAW,EAAIC,EAAS,EAAK,EAC9C,GAAI,CAACH,EACD,OAAO,KACX,GAAM,CAAE,QAAAI,EAAS,WAAAC,CAAW,EAAIL,EAC1BM,EAAcD,EAAW,OAAQE,GAAMA,EAAE,MAAM,EAAE,OACjDC,EAAaH,EAAW,OAExBI,EAAOL,EAAU,SAAW,SAC5BM,EAAYN,EAAU,kBAAoB,mBAIhD,GADiBI,IAAe,EAClB,CACV,IAAMZ,EAAKS,EAAW,CAAC,EACvB,OAAQR,EAAM,MAAO,CAAE,UAAW,iFAAkF,SAAU,CAACJ,EAAK,OAAQ,CAAE,UAAWiB,EAAW,SAAUD,CAAK,CAAC,EAAGZ,EAAM,OAAQ,CAAE,SAAU,CAACD,EAAG,KAAM,GAAG,CAAE,CAAC,EAAGH,EAAK,OAAQ,CAAE,UAAW,uBAAwB,SAAUG,EAAG,UAAU,KAAM,CAAC,EAAGA,EAAG,UAAU,UAAaC,EAAMC,EAAW,CAAE,SAAU,CAACL,EAAKJ,GAAa,CAAE,QAASO,EAAG,UAAU,SAAS,QAAS,OAAQA,EAAG,UAAU,SAAS,MAAO,CAAC,EAAGC,EAAM,OAAQ,CAAE,UAAW,iCAAkC,SAAU,CAACD,EAAG,UAAU,SAAS,QAAS,IAAKA,EAAG,UAAU,SAAS,MAAM,CAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAAE,CAAC,CAC5mB,CAEA,OAAQC,EAAM,MAAO,CAAE,UAAW,YAAa,SAAU,CAACA,EAAM,SAAU,CAAE,KAAM,SAAU,UAAW,4JAA6J,QAAUc,GAAM,CACpQA,EAAE,gBAAgB,EAClBT,EAAY,CAACD,CAAQ,CACzB,EAAG,SAAU,CAACR,EAAK,OAAQ,CAAE,UAAWiB,EAAW,SAAUD,CAAK,CAAC,EAAGZ,EAAM,OAAQ,CAAE,SAAU,CAACS,EAAa,OAAQE,EAAY,iBAAiB,CAAE,CAAC,EAAGf,EAAK,OAAQ,CAAE,UAAW,0BAA2B,SAAUQ,EAAW,SAAW,QAAS,CAAC,CAAC,CAAE,CAAC,EAAGA,GAAaR,EAAK,MAAO,CAAE,UAAW,2BAA4B,SAAUY,EAAW,IAAI,CAACT,EAAIgB,IAAOnB,EAAKE,GAAc,CAAE,GAAIC,CAAG,EAAGgB,CAAC,CAAE,CAAE,CAAC,CAAE,CAAE,CAAC,CACha,CCzBA,SAASC,IAAa,CAClB,OAAO,OAAO,OAAO,QAAQ,SAAW,IAC5C,CAIA,SAASC,GAAyBC,EAAWC,EAAS,CAClD,IAAMC,EAAMD,EAAQ,QAAQ,IAAI,EAC1BE,EAAOH,EAAU,KACnBI,EAAS,GACTC,EACJ,OAAQF,EAAM,CACV,IAAK,cAAe,CAChB,GAAI,CAACF,EAAQ,YACT,MACJ,IAAMK,EAAQN,EAAU,MAClBO,EAAQP,EAAU,MAClBQ,EAAWR,EAAU,SACrBS,EAAQR,EAAQ,YAAY,SAASK,EAAOC,EAAOC,CAAQ,EACjEH,EAAWI,EACX,IAAMC,EAASV,EAAU,MAEzB,OADWA,EAAU,SACT,CACR,IAAK,MACDI,EAASK,GAASC,EAClB,MACJ,IAAK,MACDN,EAASK,GAASC,EAClB,MACJ,IAAK,KACDN,EAASK,IAAUC,EACnB,MACJ,IAAK,KACDN,EAASK,EAAQC,EACjB,MACJ,IAAK,KACDN,EAASK,EAAQC,EACjB,KACR,CACA,KACJ,CACA,IAAK,WAAY,CAEb,IAAMC,EADMX,EAAU,IAEjB,QAAQ,oBAAqB,MAAM,EACnC,QAAQ,QAAS,IAAI,EACrB,QAAQ,MAAO,OAAO,EAC3BI,EAAS,IAAI,OAAO,IAAIO,CAAO,GAAG,EAAE,KAAKT,EAAI,KAAK,GAAG,EACrD,KACJ,CACA,IAAK,QACDE,EAASF,EAAI,KAAK,UAAYF,EAAU,QACxC,MACJ,IAAK,iBAAkB,CAEnB,IAAMY,EADUV,EAAI,SACI,KAAMW,GAAMA,EAAE,WAAab,EAAU,QAAQ,EACrE,OAAQA,EAAU,MAAO,CACrB,IAAK,UACDI,EAASQ,GAAQ,UAAY,GAC7B,MACJ,IAAK,UACDR,EAASQ,GAAQ,UAAY,GAC7B,MACJ,IAAK,SACDR,EAAS,CAACQ,GAAQ,QAClB,KACR,CACA,KACJ,CACA,IAAK,iBACDR,EAASH,EAAQ,QAAQ,eAAeD,EAAU,UAAWA,EAAU,UAAY,GAAK,GAAK,GAC7F,MACJ,IAAK,WAAY,CACb,GAAM,CAAE,MAAAc,EAAO,OAAAC,CAAO,EAAIb,EAAI,SAC9BE,EAAS,GACLJ,EAAU,WAAa,QAAac,EAAQd,EAAU,WACtDI,EAAS,IACTJ,EAAU,WAAa,QAAac,EAAQd,EAAU,WACtDI,EAAS,IACTJ,EAAU,YAAc,QAAae,EAASf,EAAU,YACxDI,EAAS,IACTJ,EAAU,YAAc,QAAae,EAASf,EAAU,YACxDI,EAAS,IACb,KACJ,CACA,IAAK,iBAAkB,CACnB,IAAMY,EAAMf,EAAQ,OAAO,iBAAiBD,EAAU,GAAG,GAAK,EACxDiB,EAAYjB,EAAU,UAE5B,OADWA,EAAU,SACT,CACR,IAAK,MACDI,EAASY,GAAOC,EAChB,MACJ,IAAK,MACDb,EAASY,GAAOC,EAChB,MACJ,IAAK,KACDb,EAASY,IAAQC,EACjB,MACJ,IAAK,KACDb,EAASY,EAAMC,EACf,MACJ,IAAK,KACDb,EAASY,EAAMC,EACf,KACR,CACA,KACJ,CACA,IAAK,YACDb,EAASJ,EAAU,SACb,EAAEC,EAAQ,OAAO,YAAYD,EAAU,GAAG,GAAK,IAC9CC,EAAQ,OAAO,YAAYD,EAAU,GAAG,GAAK,GACpD,MACJ,IAAK,kBACDI,EAASJ,EAAU,SACb,EAAEC,EAAQ,OAAO,iBAAiBD,EAAU,GAAG,GAAK,IACnDC,EAAQ,OAAO,iBAAiBD,EAAU,GAAG,GAAK,GACzD,MACJ,IAAK,kBAAmB,CAEpB,IAAMkB,GADQjB,EAAQ,OAAO,kBAAkBD,EAAU,GAAG,GAAK,IACnCA,EAAU,MACxCI,EAASJ,EAAU,SAAW,CAACkB,EAAeA,EAC9C,KACJ,CACJ,CACA,IAAMC,EAAYC,GAAqBpB,EAAWK,CAAQ,EAC1D,MAAO,CACH,OAAAD,EACA,GAAI,CAAE,KAAAD,EAAM,OAAAC,EAAQ,UAAAe,CAAU,CAClC,CACJ,CAIA,SAASE,GAAiBC,EAAUrB,EAAS,CACzC,GAAIqB,EAAS,OAAS,SAAW,CAACA,EAAS,OAAO,OAC9C,MAAO,CAAE,QAAS,CAAC,CAACA,EAAS,QAAS,WAAY,GAAM,WAAY,CAAC,CAAE,EAG3E,IAAMC,EAAgB,CAAC,EACvB,QAAWC,KAAQF,EAAS,MAAO,CAC/B,IAAIG,EAAc,GAClB,QAAWzB,KAAawB,EAAK,WAAY,CACrC,GAAM,CAAE,OAAApB,EAAQ,GAAAsB,CAAG,EAAI3B,GAAyBC,EAAWC,CAAO,EAClEsB,EAAc,KAAKG,CAAE,EAChBtB,IACDqB,EAAc,GACtB,CACA,GAAIA,EACA,MAAO,CAAE,QAASD,EAAK,MAAO,WAAY,GAAO,WAAYD,CAAc,CAEnF,CAEA,MAAO,CACH,QAASD,EAAS,SAAW,GAC7B,WAAY,GACZ,WAAYC,CAChB,CACJ,CAOO,SAASI,GAAkBC,EAAO,CACrC,GAAM,CAACC,EAAUC,CAAW,EAAIC,EAAS,IAAI,GAAK,EAC5CC,EAAWC,EAAOL,CAAK,EAC7BI,EAAS,QAAUJ,EACnB,IAAMM,EAAWC,EAAY,IAAM,CAC/B,IAAMlC,EAAUH,GAAW,EAC3B,GAAI,CAACG,EACD,OACJ,IAAMmC,EAAM,IAAI,IAChB,QAAWC,KAAQL,EAAS,QACnBK,EAAK,SAIND,EAAI,IAAIC,EAAK,GAAIhB,GAAiBgB,EAAK,SAAUpC,CAAO,CAAC,EAHzDmC,EAAI,IAAIC,EAAK,GAAI,IAAI,EAM7BP,EAAYM,CAAG,CACnB,EAAG,CAAC,CAAC,EACL,OAAAE,EAAU,IAAM,CAEZJ,EAAS,EAET,IAAMjC,EAAUH,GAAW,EACrByC,EAAS,CAAC,EACZtC,GAAS,aACTsC,EAAO,KAAKtC,EAAQ,YAAY,UAAUiC,CAAQ,CAAC,EAGvD,IAAMM,EAAW,YAAYN,EAAU,GAAI,EAC3C,MAAO,IAAM,CACTK,EAAO,QAASE,GAAMA,EAAE,CAAC,EACzB,cAAcD,CAAQ,CAC1B,CACJ,EAAG,CAACN,CAAQ,CAAC,EACNL,CACX,CC7MA,SAASa,GAASC,EAAcC,EAAqB,CACnD,OAAID,EAAK,QAAUC,EAAYD,EACxB,GAAGA,EAAK,MAAM,EAAGC,CAAG,EAAE,QAAQ,CAAC,KACxC,CAEA,SAASC,GAAeC,EAAwC,CAC9D,OACE,OAAOA,GAAM,UACbA,IAAM,MACLA,EAA8B,OAAS,SACxC,MAAM,QAASA,EAA8B,KAAK,CAEtD,CAKO,SAASC,GAAgBC,EAAqD,CAEnF,GADI,CAACA,GACD,CAACH,GAAeG,CAAQ,EAAG,MAAO,YAEtC,IAAMC,EAAkB,CAAC,EACnBC,EAAoB,CAAC,EAE3B,QAAWC,KAAQH,EAAS,MAC1B,QAAWI,KAAaD,EAAK,WACvBC,EAAU,OAAS,YAAc,OAAQA,EAAkB,KAAQ,UACrEH,EAAM,KAAMG,EAAkB,GAAG,EAE/BA,EAAU,OAAS,kBAAoB,OAAQA,EAAkB,UAAa,UAChFF,EAAQ,KAAME,EAAkB,QAAQ,EAK9C,IAAMC,EAAkB,CAAC,EACzB,OAAIJ,EAAM,OAAS,GAAGI,EAAM,KAAKJ,EAAM,CAAC,CAAC,EACrCC,EAAQ,OAAS,GAAGG,EAAM,KAAKH,EAAQ,CAAC,CAAC,EAEtCG,EAAM,OAAS,EAAIA,EAAM,KAAK,QAAU,EAAI,WACrD,CAKO,SAASC,GAAiBC,EAA4B,CAC3D,IAAMC,EAAOD,EAAK,OAAO,MAAQ,YAC3BE,EAAQf,GAASa,EAAK,OAAO,MAAO,EAAa,EACvD,MAAO,GAAGC,CAAI,IAAIC,CAAK,EACzB,CCsJO,IAAMC,GAAoB,CAAC,MAAO,YAAY,EAO9C,SAASC,EAAYC,EAAmC,CAC7D,OAAOF,GAAkB,KAAMG,GAAOD,EAAO,KAAK,WAAW,GAAGC,CAAE,GAAG,CAAC,CACxE,CC5KA,SAASC,GAAeC,EAAwC,CAC9D,OACE,OAAOA,GAAM,UACbA,IAAM,MACLA,EAA8B,OAAS,SACxC,MAAM,QAASA,EAA8B,KAAK,CAEtD,CAEA,SAASC,GAAqBC,EAA0C,CACtE,GAAI,CAACA,GAAY,CAACH,GAAeG,CAAQ,EACvC,MAAO,CAAE,aAAc,CAAC,EAAG,gBAAiB,CAAC,EAAG,aAAc,EAAM,EAGtE,IAAMC,EAAe,IAAI,IACnBC,EAAkB,IAAI,IAE5B,QAAWC,KAAQH,EAAS,MAC1B,QAAWI,KAAQD,EAAK,WAAY,CAClC,IAAME,EAAID,EACNC,EAAE,OAAS,YAAc,OAAOA,EAAE,KAAQ,SAC5CJ,EAAa,IAAII,EAAE,GAAG,EACbA,EAAE,OAAS,kBAAoB,OAAOA,EAAE,UAAa,UAC9DH,EAAgB,IAAIG,EAAE,QAAQ,CAElC,CAGF,IAAMC,EAAeL,EAAa,KAAO,GAAKC,EAAgB,KAAO,EACrE,MAAO,CACL,aAAc,CAAC,GAAGD,CAAY,EAC9B,gBAAiB,CAAC,GAAGC,CAAe,EACpC,aAAAI,CACF,CACF,CAEA,SAASC,GAAiBP,EAA0C,CAElE,OADaD,GAAqBC,CAAQ,EAC9B,aAAa,CAAC,GAAK,IACjC,CAEA,SAASQ,GAAmBR,EAA0C,CAEpE,OADaD,GAAqBC,CAAQ,EAC9B,gBAAgB,CAAC,GAAK,IACpC,CAgBA,SAASS,GAAaC,EAA+B,CAEnD,OADiBA,EAAO,SAAW,CAAC,GAAG,OAAOC,CAAW,EAC1C,IAAI,CAACC,EAAK,KAAO,CAC9B,IAAK,OAAO,CAAC,EACb,MAAO,EACP,QAASC,GAAiBD,CAAG,EAC7B,QAASE,GAAgBF,EAAI,QAAQ,EACrC,UAAWA,EAAI,UACf,YAAaJ,GAAmBI,EAAI,QAAQ,EAC5C,IAAAA,CACF,EAAE,CACJ,CAEA,SAASG,GAAaL,EAAmBM,EAAuC,CAC9E,IAAMC,GAAcP,EAAO,SAAW,CAAC,GAAG,OAAOC,CAAW,EAC5D,MAAO,CACL,GAAGD,EACH,QAASO,EAAW,OAAO,CAACC,EAAGC,IAAM,CAACH,EAAc,IAAI,OAAOG,CAAC,CAAC,CAAC,CACpE,CACF,CAWA,SAASC,GACPC,EACAC,EAC6B,CAC7B,GAAM,CAACC,EAAcC,CAAe,EAAIC,EAAsC,IAAI,GAAK,EACjFC,EAAWC,EAAON,CAAK,EAC7B,OAAAK,EAAS,QAAUL,EAEnBO,EAAU,IAAM,CACd,IAAMC,EAAe,IAAM,CACzB,IAAMC,EAAM,IAAI,IACVC,EAAcT,EAAgB,EAEpC,QAAWU,KAAQN,EAAS,QAAS,CACnC,IAAMO,EAAYlC,GAAqBiC,EAAK,IAAI,QAAQ,EAGpDE,EAAY,GACZD,EAAU,aAAa,OAAS,IAClCC,EAAYD,EAAU,aAAa,KAAME,GACzB,IAAI,OAChB,IAAIA,EAAQ,QAAQ,QAAS,IAAI,EAAE,QAAQ,eAAgB,OAAO,CAAC,GACrE,EACa,KAAKJ,CAAW,CAC9B,GAIH,IAAIK,EAAc,GACdC,EAA8B,KAClC,GAAIL,EAAK,YACP,GAAI,CACFK,EAAU,SAAS,cAAcL,EAAK,WAAW,EACjDI,EAAcC,IAAY,IAC5B,MAAQ,CAER,MAEAD,EAAcF,EAGhBJ,EAAI,IAAIE,EAAK,IAAK,CAChB,MAAOE,GAAaE,EACpB,QAAAC,CACF,CAAC,CACH,CAEAb,EAAgBM,CAAG,CACrB,EAEAD,EAAa,EAEb,IAAMS,EAAW,YAAYT,EAAc,GAAI,EAC/C,cAAO,iBAAiB,WAAYA,CAAY,EAEzC,IAAM,CACX,cAAcS,CAAQ,EACtB,OAAO,oBAAoB,WAAYT,CAAY,CACrD,CACF,EAAG,CAACP,CAAe,CAAC,EAEbC,CACT,CAMO,SAASgB,GAAU,CAAE,OAAA7B,EAAQ,SAAA8B,EAAU,OAAAC,CAAO,EAAqB,CACxE,IAAMC,EAAchC,EACd,CAACM,EAAe2B,CAAgB,EAAIlB,EACxC,IAAMgB,EAAO,mBAAmB,GAAK,IAAI,GAC3C,EACM,CAACG,EAAYC,CAAa,EAAIpB,EAAwB,IAAI,EAC1D,CAACqB,EAAaC,CAAc,EAAItB,EAA6B,OAAO,EACpE,CAACuB,EAAaC,CAAa,EAAIxB,EAAwB,IAAI,EAGjEG,EAAU,IAAM,CACda,EAAO,mBAAmBzB,CAAa,CACzC,EAAG,CAACA,EAAeyB,CAAM,CAAC,EAG1B,IAAMS,EAAkBvB,EAAO,EAAK,EACpCC,EAAU,IAAM,CACTsB,EAAgB,UACnBA,EAAgB,QAAU,GACtBT,EAAO,gBAAkB,MAC3BI,EAAc,OAAOJ,EAAO,cAAc,CAAC,EAE7CA,EAAO,oBAAoB,EAE/B,EAAG,CAACA,CAAM,CAAC,EAEX,IAAMU,EAAW1C,GAAaiC,CAAW,EACnCU,EAAcD,EAAS,OAAQnB,GAAS,CAAChB,EAAc,IAAIgB,EAAK,GAAG,CAAC,EACpEqB,EAAiBF,EAAS,OAAQnB,GAAShB,EAAc,IAAIgB,EAAK,GAAG,CAAC,EACtEsB,EAAaF,EAAY,OAGzBG,EAAgBC,EAAM,QAC1B,IAAML,EAAS,IAAKnB,IAAU,CAC5B,GAAIA,EAAK,IACT,SAAUA,EAAK,IAAI,QACrB,EAAE,EACF,CAACmB,CAAQ,CACX,EACMM,EAAmBC,GAAkBH,CAAa,EAElDhC,EAAeH,GAAa+B,EAAUV,EAAO,eAAe,EAC5DkB,EAAaP,EAAY,OAAQpB,GAAST,EAAa,IAAIS,EAAK,GAAG,GAAG,KAAK,EAAE,OAE7E4B,EAAgBC,EACnBC,GAAgB,CACfnB,EAAkBoB,GAAS,CACzB,IAAMC,EAAO,IAAI,IAAID,CAAI,EACzB,OAAAC,EAAK,IAAIF,CAAG,EACLE,CACT,CAAC,EACGpB,IAAekB,GAAKjB,EAAc,IAAI,CAC5C,EACA,CAACD,CAAU,CACb,EAEMqB,EAAgBJ,EAAaC,GAAgB,CACjDnB,EAAkBoB,GAAS,CACzB,IAAMC,EAAO,IAAI,IAAID,CAAI,EACzB,OAAAC,EAAK,OAAOF,CAAG,EACRE,CACT,CAAC,CACH,EAAG,CAAC,CAAC,EAECE,EAAsBL,EAAa7B,GAAmB,CAC1Da,EAAcb,EAAK,GAAG,CACxB,EAAG,CAAC,CAAC,EAECmC,GAAqBN,EACxB7B,GAAmB,CAClB,IAAMoC,EAAU7D,GAAiByB,EAAK,IAAI,QAAQ,EAC9CoC,GACF3B,EAAO,WAAW2B,CAAO,EAEvBpC,EAAK,aACPS,EAAO,iBAAiBT,EAAK,WAAW,CAE5C,EACA,CAACS,CAAM,CACT,EAEM4B,GAAmBR,EAAY,IAAM,CACzChB,EAAc,IAAI,EAClBE,EAAe,OAAO,EACtBN,EAAO,cAAc/B,CAAM,EAC3B+B,EAAO,eAAe,CACxB,EAAG,CAACA,EAAQ/B,CAAM,CAAC,EAEb4D,GAAoBT,EACvBU,GAA6B,CAE5B,GADAxB,EAAewB,CAAI,EACfA,IAAS,SAAU,CACrB,IAAMC,EAAWzD,GAAa2B,EAAa,IAAI,IAAI,CAACE,CAAW,CAAC,CAAC,EACjEH,EAAO,cAAc+B,CAA8C,CACrE,MACE/B,EAAO,cAAc/B,CAAM,CAE/B,EACA,CAACgC,EAAaE,EAAYH,EAAQ/B,CAAM,CAC1C,EAEM+D,EAAoBZ,EACxB,CAACa,EAAeC,EAAeC,IAAmB,CAChD,IAAM3D,GAAcyB,EAAY,SAAW,CAAC,GAAG,OAAO/B,CAAW,EAAE,MAAM,EACnEkE,EAAO,CAAE,GAAG5D,EAAWyD,CAAK,EAAG,OAAQ,CAAE,GAAGzD,EAAWyD,CAAK,EAAE,MAAO,CAAE,EAC5EG,EAAK,OAAmCF,CAAK,EAAIC,EAClD3D,EAAWyD,CAAK,EAAIG,EACpB,IAAMC,IAAgBpC,EAAY,SAAW,CAAC,GAAG,OAAQqC,IAAM,CAACpE,EAAYoE,EAAC,CAAC,EACxEC,GAAU,CAAE,GAAGtC,EAAa,QAAS,CAAC,GAAGoC,GAAc,GAAG7D,CAAU,CAAE,EAC5EuB,EAASwC,EAA6C,EACtDvC,EAAO,SAAS,EAAI,CACtB,EACA,CAACC,EAAaF,EAAUC,CAAM,CAChC,EAEMwC,GAAgBpB,EAAY,IAAM,CACtC,GAAI7C,EAAc,KAAO,EAAG,CAC1B,IAAMwD,EAAWzD,GAAa2B,EAAa1B,CAAa,EACxDwB,EAASgC,CAA8C,CACzD,CACA/B,EAAO,QAAQ,CACjB,EAAG,CAACzB,EAAe0B,EAAaF,EAAUC,CAAM,CAAC,EAE3CyC,GAAkBrB,EACrB7B,GAAmB,CAClBiB,EAAcjB,EAAK,GAAG,EAClBA,EAAK,aACPS,EAAO,iBAAiBT,EAAK,WAAW,CAE5C,EACA,CAACS,CAAM,CACT,EAEM0C,GAAkBtB,EAAY,IAAM,CACxCZ,EAAc,IAAI,EAClBR,EAAO,eAAe,CACxB,EAAG,CAACA,CAAM,CAAC,EAIL2C,GAAoBV,GAAkB,CAE1C,IAAM9D,GADW8B,EAAY,SAAW,CAAC,GAAG,OAAO/B,CAAW,EAC1C+D,CAAK,EACzB,GAAI,CAAC9D,EAAK,OAAO,KAEjB,IAAMoB,EAAOmB,EAAS,KAAMkC,GAAOA,EAAG,MAAQ,OAAOX,CAAK,CAAC,EAE3D,OACEY,EAAC,OAAI,UAAU,UAEZ,UAAAtD,GAAQA,EAAK,UAAY,aACxBsD,EAAC,OACC,eAAY,GACZ,UAAU,iGACV,QAAS,IAAMnB,GAAmBnC,CAAI,EAEtC,UAAAuD,EAAC,QAAM,qBAAY,EACnBA,EAAC,QAAM,SAAAvD,EAAK,QAAQ,GACtB,EAGFuD,EAACC,EAAA,CACC,MAAM,QACN,MAAO5E,EAAI,OAAO,MAClB,SAAW6E,GACThB,EAAkBC,EAAO,QAASe,EAAE,OAAO,KAAK,EAEpD,EAEAF,EAACC,EAAA,CACC,MAAM,cACN,MAAO5E,EAAI,OAAO,YAClB,SAAW6E,GACThB,EAAkBC,EAAO,cAAee,EAAE,OAAO,KAAK,EAE1D,EAEAF,EAACC,EAAA,CACC,MAAM,WACN,MAAO5E,EAAI,OAAO,MAAQ,GAC1B,SAAW6E,GACThB,EAAkBC,EAAO,OAAQe,EAAE,OAAO,KAAK,EAEjD,YAAY,WACd,EAEAF,EAACC,EAAA,CACC,MAAM,OACN,MAAO5E,EAAI,OAAO,MAAQ,GAC1B,SAAW6E,GACThB,EAAkBC,EAAO,OAAQe,EAAE,OAAO,KAAK,EAEjD,YAAY,mBACd,EAEAF,EAACC,EAAA,CACC,MAAM,WACN,MAAO5E,EAAI,OAAO,UAAY,GAC9B,SAAW6E,GACThB,EAAkBC,EAAO,WAAYe,EAAE,OAAO,KAAK,EAErD,YAAY,WACd,EAEAH,EAAC,SAAM,UAAU,2EACf,UAAAC,EAAC,SACC,KAAK,WACL,QAAS3E,EAAI,OAAO,UAAY,GAChC,SAAW6E,GACThB,EAAkBC,EAAO,WAAYe,EAAE,OAAO,OAAO,EAEzD,EAAE,mBAEJ,EAEAF,EAAC,SAAM,UAAU,wEAAwE,wBAEzF,EACAA,EAAC,OAAI,UAAU,6HACZ,SAAA3E,EAAI,UAAYA,EAAI,UAAU,IAAM,MACvC,GACF,CAEJ,EAEM8E,GAAW,GAAGpC,CAAU,OAAOA,IAAe,EAAI,IAAM,EAAE,GAAGA,EAAa,EAAI,KAAKK,CAAU,uBAAyB,EAAE,GAE9H,OACE2B,EAACK,GAAA,CACC,UAAAJ,EAACK,GAAA,CACC,MAAM,kBACN,SAAUF,GACV,OAAQ,IAAMjD,EAAO,aAAa,EACpC,EAEA8C,EAACM,GAAA,CACE,SAAAjD,IAAe,MAEb,IAAM,CACL,IAAMkD,EAAY,OAAOlD,CAAU,EAC7BmD,EAAW5C,EAAS,KAAMkC,GAAOA,EAAG,MAAQzC,CAAU,EAC5D,OACE0C,EAAAU,EAAA,CACE,UAAAV,EAAC,OAAI,UAAU,iGACb,UAAAC,EAAC,QAAM,qBAAY,EACnBA,EAAC,QAAM,SAAAQ,GAAU,QAAQ,GAC3B,EACAR,EAACU,GAAA,CAAkB,KAAMnD,EAAa,SAAUwB,GAAmB,EAClEc,GAAiBU,CAAS,EAC3BP,EAACW,GAAA,CAAe,QAAS7B,GAAkB,GAC7C,CAEJ,GAAG,EAGHiB,EAAAU,EAAA,CACG,UAAA7C,EAAS,SAAW,GAAKoC,EAACY,GAAA,CAAW,QAAQ,sBAAsB,EAEnE/C,EAAY,OAAS,GACpBkC,EAAAU,EAAA,CACE,UAAAT,EAACa,GAAA,CAAY,MAAM,OAAO,MAAOhD,EAAY,OAAQ,EACpDA,EAAY,IAAKpB,GAAS,CACzB,IAAMqE,EAAY9E,EAAa,IAAIS,EAAK,GAAG,EAC3C,OACEsD,EAACgB,GAAA,CAEC,QAAStE,EAAK,IACd,aAAc,IAAMkD,GAAgBlD,CAAI,EACxC,aAAcmD,GAGb,UAAAnD,EAAK,UAAY,aAChBsD,EAAC,OACC,eAAY,GACZ,UAAU,iGACV,QAAUG,GAAM,CACdA,EAAE,gBAAgB,EAClBtB,GAAmBnC,CAAI,CACzB,EAEA,UAAAuD,EAAC,QAAM,qBAAY,EACnBA,EAAC,QAAM,SAAAvD,EAAK,QAAQ,GACtB,EAGFsD,EAAC,OACC,iBAAc,GACd,UAAU,qDACV,QAAS,IAAMpB,EAAoBlC,CAAI,EAEvC,UAAAuD,EAACgB,GAAA,CAAe,MAAOF,GAAW,OAAS,GAAO,EAClDd,EAAC,QAAK,UAAU,qEACb,SAAAvD,EAAK,QACR,EACAuD,EAAC,UACC,UAAU,gJACV,QAAUE,GAAM,CACdA,EAAE,gBAAgB,EAClB7B,EAAc5B,EAAK,GAAG,CACxB,EACA,MAAM,mBACP,gBAED,GACF,EAEAsD,EAAC,OAAI,UAAU,8CAA8C,kBACrDtD,EAAK,UAAYA,EAAK,UAAU,IAAM,OAC9C,EAEAuD,EAACiB,GAAA,CAAoB,OAAQ/C,EAAiB,IAAIzB,EAAK,GAAG,GAAK,KAAM,IA7ChEA,EAAK,GA8CZ,CAEJ,CAAC,GACH,EAIDqB,EAAe,OAAS,GACvBkC,EAACkB,GAAA,CAAiB,MAAOpD,EAAe,OACrC,SAAAA,EAAe,IAAKrB,GACnBsD,EAAC,OAEC,UAAU,kMAEV,UAAAC,EAAC,QAAK,UAAU,qFACb,SAAAvD,EAAK,QACR,EACAuD,EAAC,UACC,UAAU,8IACV,QAAUE,GAAM,CACdA,EAAE,gBAAgB,EAClBxB,EAAcjC,EAAK,GAAG,CACxB,EACD,mBAED,IAdKA,EAAK,GAeZ,CACD,EACH,GAEJ,EAEJ,EAEAuD,EAACmB,GAAA,CAAa,OAAQ,IAAMjE,EAAO,KAAK,EAAG,UAAWwC,GAAe,GACvE,CAEJ,CAKO,IAAM0B,GAAc,CACzB,MAAO,kBACP,KAAM,YACN,YAAa,oDACf,EAOA,IAAOC,GAAQC,GC5iBR,IAAMC,EAAO,CAChB,MAAO,UACP,MAAO,SACX,EAIaC,EAAQ,CACjB,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,SACP,EAIaC,EAAY,CACrB,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,GAAI,UACJ,GAAI,UACJ,GAAI,SACR,EAIaC,EAAQ,CACjB,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,SACP,EACaC,EAAS,CAClB,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,SACP,EACaC,EAAM,CACf,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,SACP,EACaC,EAAO,CAChB,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,SACP,EACaC,GAAS,CAClB,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,SACP,EACaC,EAAS,CAClB,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,SACP,EACaC,GAAO,CAChB,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,SACP,EAsDO,IAAMC,GAAO,CAChB,QAASC,EAAU,EAAE,EACrB,UAAWA,EAAU,CAAC,EACtB,SAAUA,EAAU,CAAC,CACzB,EAIaC,GAAa,CACtB,QAASD,EAAU,CAAC,EACpB,UAAWA,EAAU,CAAC,CAC1B,EAIaE,GAAS,CAClB,QAASF,EAAU,CAAC,EACpB,UAAWA,EAAU,CAAC,CAC1B,EAIaG,GAAS,CAClB,QAAS,CACL,KAAMC,EAAK,MACX,KAAMA,EAAK,MACX,OAAQC,EAAM,CAAC,EACf,kBAAmBA,EAAM,CAAC,EAC1B,gBAAiBA,EAAM,CAAC,CAC5B,EACA,QAAS,CACL,KAAML,EAAU,EAAE,EAClB,UAAWI,EAAK,MAChB,KAAMJ,EAAU,EAAE,EAClB,UAAWI,EAAK,MAChB,OAAQJ,EAAU,CAAC,EACnB,WAAYA,EAAU,CAAC,CAC3B,EACA,KAAM,CACF,KAAMI,EAAK,MACX,KAAMA,EAAK,MACX,MAAOC,EAAM,CAAC,CAClB,EACA,MAAO,CACH,KAAMC,EAAI,CAAC,EACX,MAAOA,EAAI,CAAC,CAChB,EACA,QAAS,CACL,KAAMC,EAAM,CAAC,EACb,MAAOA,EAAM,CAAC,CAClB,CACJ,EAIaC,GAAQ,CACjB,UAAW,CACP,QAASR,EAAU,EAAE,EACrB,YAAaA,EAAU,EAAE,EACzB,cAAeA,EAAU,CAAC,EAC1B,gBAAiBA,EAAU,CAAC,EAC5B,WAAYA,EAAU,CAAC,CAC3B,EACA,MAAO,CACH,QAASK,EAAM,CAAC,EAChB,YAAaA,EAAM,CAAC,EACpB,cAAeA,EAAM,CAAC,EACtB,gBAAiBA,EAAM,CAAC,EACxB,WAAYA,EAAM,CAAC,CACvB,EACA,IAAK,CACD,QAASC,EAAI,CAAC,EACd,YAAaA,EAAI,CAAC,EAClB,cAAeA,EAAI,CAAC,EACpB,gBAAiBA,EAAI,CAAC,EACtB,WAAYA,EAAI,CAAC,CACrB,EACA,OAAQ,CACJ,QAASG,EAAO,CAAC,EACjB,YAAaA,EAAO,CAAC,EACrB,cAAeA,EAAO,CAAC,EACvB,gBAAiBA,EAAO,CAAC,EACzB,WAAYA,EAAO,CAAC,CACxB,EACA,MAAO,CACH,QAASF,EAAM,CAAC,EAChB,YAAaA,EAAM,CAAC,EACpB,cAAeA,EAAM,CAAC,EACtB,gBAAiBA,EAAM,CAAC,EACxB,WAAYA,EAAM,CAAC,CACvB,EACA,OAAQ,CACJ,QAASG,EAAO,CAAC,EACjB,YAAaA,EAAO,CAAC,EACrB,cAAeA,EAAO,CAAC,EACvB,gBAAiBA,EAAO,CAAC,EACzB,WAAYA,EAAO,CAAC,CACxB,EACA,KAAM,CACF,QAASC,EAAK,CAAC,EACf,YAAaA,EAAK,CAAC,EACnB,cAAeA,EAAK,CAAC,EACrB,gBAAiBA,EAAK,CAAC,EACvB,WAAYA,EAAK,CAAC,CACtB,EACA,OAAQ,CACJ,QAASC,GAAO,CAAC,EACjB,YAAaA,GAAO,CAAC,EACrB,cAAeA,GAAO,CAAC,EACvB,gBAAiBA,GAAO,CAAC,EACzB,WAAYA,GAAO,CAAC,CACxB,EACA,KAAM,CACF,QAASC,GAAK,CAAC,EACf,YAAaA,GAAK,CAAC,EACnB,cAAeA,GAAK,CAAC,EACrB,gBAAiBA,GAAK,CAAC,EACvB,WAAYA,GAAK,CAAC,CACtB,CACJ,EAIaC,GAAc,CACvB,MAAO,CACH,QAASP,EAAM,CAAC,EAChB,OAAQA,EAAM,CAAC,EACf,WAAYA,EAAM,CAAC,CACvB,EACA,OAAQ,CACJ,QAASE,EAAO,CAAC,EACjB,OAAQA,EAAO,CAAC,EAChB,WAAYA,EAAO,CAAC,CACxB,EACA,IAAK,CACD,QAASH,EAAI,CAAC,EACd,OAAQA,EAAI,CAAC,EACb,WAAYA,EAAI,CAAC,CACrB,CACJ,EAIaS,GAAQ,CACjB,MAAO,CACH,QAASR,EAAM,CAAC,EAChB,WAAYA,EAAM,CAAC,CACvB,EACA,OAAQ,CACJ,QAASE,EAAO,CAAC,EACjB,WAAYA,EAAO,CAAC,CACxB,EACA,IAAK,CACD,QAASH,EAAI,CAAC,EACd,WAAYA,EAAI,CAAC,CACrB,CACJ,EAIaU,GAAM,CACf,QAAShB,EAAU,EAAE,EACrB,OAAQA,EAAU,CAAC,EACnB,WAAY,SAChB,EAIaiB,GAAO,CAChB,kBAAmBjB,EAAU,CAAC,EAC9B,gBAAiBA,EAAU,CAAC,EAC5B,SAAUA,EAAU,CAAC,CACzB,EAIakB,GAAgB,CACzB,WAAYlB,EAAU,CAAC,EACvB,KAAMA,EAAU,EAAE,EAClB,cAAeA,EAAU,CAAC,EAC1B,eAAgBK,EAAM,CAAC,EACvB,UAAWL,EAAU,CAAC,EACtB,gBAAiBA,EAAU,CAAC,EAC5B,SAAUA,EAAU,CAAC,CACzB,EACamB,GAAa,CACtB,kBAAmBnB,EAAU,CAAC,EAC9B,mBAAoBA,EAAU,CAAC,EAC/B,UAAWA,EAAU,CAAC,EACtB,gBAAiBA,EAAU,CAAC,EAC5B,SAAUA,EAAU,CAAC,EACrB,UAAWM,EAAI,CAAC,EAChB,YAAaN,EAAU,CAAC,EACxB,gBAAiBA,EAAU,EAAE,EAC7B,UAAWM,EAAI,CAAC,EAChB,cAAeN,EAAU,CAAC,EAC1B,eAAgBK,EAAM,CAAC,EACvB,YAAaC,EAAI,CAAC,CACtB,EAIac,GAAS,CAClB,cAAehB,EAAK,MACpB,eAAgBJ,EAAU,EAAE,EAC5B,IAAK,CACD,kBAAmBA,EAAU,CAAC,EAC9B,gBAAiBA,EAAU,CAAC,EAC5B,mBAAoBA,EAAU,CAAC,CACnC,EACA,GAAI,CACA,kBAAmBO,EAAM,CAAC,EAC1B,gBAAiBA,EAAM,CAAC,EACxB,mBAAoBP,EAAU,CAAC,CACnC,CACJ,EAIaqB,GAAW,CACpB,IAAK,CACD,kBAAmB,YACnB,gBAAiBrB,EAAU,CAAC,EAC5B,mBAAoBA,EAAU,CAAC,EAC/B,OAAQA,EAAU,CAAC,CACvB,EACA,GAAI,CACA,kBAAmBO,EAAM,CAAC,EAC1B,gBAAiBA,EAAM,CAAC,EACxB,mBAAoBP,EAAU,CAAC,EAC/B,OAAQO,EAAM,CAAC,CACnB,CACJ,EAIae,GAAS,CAClB,QAAStB,EAAU,EAAE,EACrB,WAAYA,EAAU,CAAC,CAC3B,EAIauB,GAAoB,CAC7B,WAAYvB,EAAU,CAAC,EACvB,OAAQO,EAAM,CAAC,CACnB,EAIaiB,GAAO,CAChB,WAAYxB,EAAU,CAAC,EACvB,QAASA,EAAU,CAAC,EACpB,OAAQA,EAAU,CAAC,CACvB,EAIayB,GAAU,CACnB,kBAAmBzB,EAAU,CAAC,EAC9B,gBAAiBA,EAAU,CAAC,EAC5B,iBAAkBA,EAAU,CAAC,EAC7B,OAAQA,EAAU,CAAC,EACnB,eAAgBA,EAAU,EAAE,EAC5B,iBAAkBA,EAAU,CAAC,EAC7B,gBAAiBA,EAAU,CAAC,CAChC,EAIa0B,GAAQ,CACjB,WAAY1B,EAAU,CAAC,EACvB,QAASA,EAAU,CAAC,EACpB,OAAQA,EAAU,CAAC,CACvB,EAIa2B,GAAM,CACf,iBAAkB3B,EAAU,CAAC,EAC7B,cAAeK,EAAM,CAAC,EACtB,gBAAiBL,EAAU,CAAC,EAC5B,OAAQA,EAAU,CAAC,CACvB,EAIa4B,GAAQ,CACjB,OAAQ,CACJ,YAAa5B,EAAU,CAAC,EACxB,UAAWA,EAAU,CAAC,EACtB,kBAAmBA,EAAU,CAAC,CAClC,EACA,OAAQA,EAAU,CAAC,EACnB,KAAM,CACF,YAAaA,EAAU,EAAE,EACzB,cAAeA,EAAU,CAAC,EAC1B,kBAAmBA,EAAU,CAAC,EAC9B,gBAAiBA,EAAU,CAAC,CAChC,CACJ,EAIa6B,GAAc,CACvB,mBAAoB7B,EAAU,EAAE,EAChC,iBAAkBA,EAAU,EAAE,EAC9B,qBAAsBA,EAAU,CAAC,EACjC,mBAAoBA,EAAU,CAAC,EAC/B,YAAaA,EAAU,EAAE,EACzB,cAAeA,EAAU,CAAC,CAC9B,EAIa8B,GAAmB,CAC5B,WAAYvB,EAAM,CAAC,EACnB,OAAQA,EAAM,CAAC,CACnB,EAIawB,GAAa,CACtB,YAAa/B,EAAU,EAAE,EACzB,aAAcI,EAAK,MACnB,aAAcJ,EAAU,CAAC,EACzB,kBAAmBA,EAAU,CAAC,EAC9B,iBAAkBA,EAAU,CAAC,EAC7B,mBAAoBK,EAAM,CAAC,EAC3B,OAAQL,EAAU,CAAC,CACvB,EAIagC,GAAShC,EAAU,CAAC,ECzgBrB,SAASiC,IAAM,CACb,OAAQ,OAAO,MAAU,KAAe,MAAM,UAAa,CAAC,CAC9D,CACA,IAAOC,GAAQ,IAAI,MAAM,CAAC,EAAG,CAAE,IAAK,SAASC,EAAGC,EAAG,CAAE,OAAOH,GAAI,EAAEG,CAAC,CAAG,CAAE,CAAC,EAClE,SAASC,IAAa,CAAE,OAAOJ,GAAI,EAAE,WAAW,MAAM,KAAM,SAAS,CAAG,CCe3F,SAASK,GAAWC,EAAqB,CACvC,OAAOA,EACJ,QAAQ,KAAM,OAAO,EACrB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,QAAQ,EACtB,QAAQ,KAAM,OAAO,CAC1B,CAMA,IAAMC,EAAa,CACjB,UAAW,CACT,WAAY,uCACZ,QAAS,MACT,SAAU,OACV,SAAU,QACZ,EACA,UAAW,CACT,QAAS,OACT,cAAe,SACf,IAAK,KACP,EACA,KAAM,CACJ,aAAc,MACd,SAAU,SACV,WAAY,sBACd,EACA,OAAQ,CACN,QAAS,OACT,WAAY,SACZ,IAAK,MACL,MAAO,OACP,QAAS,YACT,OAAQ,OACR,OAAQ,UACR,SAAU,OACV,WAAY,IACZ,WAAY,UACZ,UAAW,OACX,WAAY,6BACd,EACA,QAAS,CACP,SAAU,OACV,WAAY,sBACZ,WAAY,OACZ,WAAY,CACd,EACA,KAAM,CACJ,SAAU,OACV,WAAY,CACd,EACA,KAAM,CACJ,SAAU,SACV,WAAY,mDACZ,QAAS,QACX,EACA,YAAa,CACX,SAAU,OACV,WAAY,MACZ,OAAQ,CACV,EACA,WAAY,CACV,QAAS,cACT,WAAY,SACZ,IAAK,MACL,UAAW,OACX,QAAS,WACT,aAAc,MACd,eAAgB,OAChB,SAAU,OACV,WAAY,IACZ,OAAQ,UACR,OAAQ,OACR,WAAY,6BACd,EACA,eAAgB,CACd,SAAU,OACV,WAAY,IACZ,cAAe,YACf,cAAe,SACf,QAAS,cACX,EACA,WAAY,CACV,SAAU,OACV,QAAS,OACT,UAAW,QACb,CACF,EAEMC,GAAc,CAClB,MAAO,CACL,UAAW,CACT,gBAAiBC,EAAK,MACtB,MAAOC,EAAU,CAAC,CACpB,EACA,KAAM,CACJ,gBAAiBA,EAAU,EAAE,EAC7B,OAAQ,aAAaA,EAAU,EAAE,CAAC,EACpC,EACA,aAAc,CACZ,UAAW,gCACb,EACA,OAAQ,CACN,gBAAiB,cACjB,MAAOA,EAAU,CAAC,CACpB,EACA,YAAa,CACX,gBAAiBA,EAAU,EAAE,CAC/B,EACA,KAAM,CACJ,MAAOA,EAAU,CAAC,CACpB,EACA,WAAY,CACV,gBAAiBC,EAAO,CAAC,EACzB,MAAOA,EAAO,CAAC,CACjB,EACA,eAAgB,CACd,MAAOD,EAAU,CAAC,CACpB,EACA,WAAY,CACV,MAAOA,EAAU,CAAC,CACpB,CACF,EACA,KAAM,CACJ,UAAW,CACT,gBAAiBA,EAAU,CAAC,EAC5B,MAAOA,EAAU,EAAE,CACrB,EACA,KAAM,CACJ,gBAAiBA,EAAU,CAAC,EAC5B,OAAQ,aAAaA,EAAU,CAAC,CAAC,EACnC,EACA,aAAc,CACZ,UAAW,+BACb,EACA,OAAQ,CACN,gBAAiB,cACjB,MAAOA,EAAU,EAAE,CACrB,EACA,YAAa,CACX,gBAAiBA,EAAU,CAAC,CAC9B,EACA,KAAM,CACJ,MAAOA,EAAU,CAAC,CACpB,EACA,WAAY,CACV,gBAAiBC,EAAO,CAAC,EACzB,MAAOA,EAAO,CAAC,CACjB,EACA,eAAgB,CACd,MAAOD,EAAU,CAAC,CACpB,EACA,WAAY,CACV,MAAOA,EAAU,CAAC,CACpB,CACF,CACF,EAcA,SAASE,GAAW,CAAE,KAAAC,EAAM,WAAAC,EAAY,SAAAC,EAAU,WAAAC,EAAY,MAAAC,CAAM,EAAoB,CACtF,GAAM,CAACC,EAAWC,CAAY,EAAIC,EAAS,EAAK,EAC1CC,EAASb,GAAYS,CAAK,EAC1B,CAAE,MAAAK,EAAO,YAAAC,EAAa,KAAAC,EAAM,KAAAC,EAAM,SAAAC,CAAS,EAAIb,EAAK,OAEpDc,EAAiC,CACrC,GAAGpB,EAAW,KACd,GAAGc,EAAO,KACV,GAAIP,EAAaO,EAAO,aAAe,CAAC,CAC1C,EAEMO,EAAmC,CACvC,GAAGrB,EAAW,OACd,GAAGc,EAAO,OACV,GAAIH,EAAYG,EAAO,YAAc,CAAC,CACxC,EAEMQ,EAAoC,CACxC,GAAGtB,EAAW,QACd,UAAWO,EAAa,iBAAmB,cAC7C,EAEMgB,EAAiC,CACrC,GAAGvB,EAAW,KACd,GAAGc,EAAO,KACV,UAAWP,EAAa,QAAU,IAClC,cAAeA,EAAa,OAAS,GACvC,EAEMiB,EAAmBC,GAAwB,CAC/CA,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EACdR,GACFR,EAAWQ,EAAME,GAAY,EAAK,CAEtC,EAEA,OACEO,EAAC,OAAI,MAAON,EAAW,kBAAiBd,EAAK,OAAO,GAClD,UAAAoB,EAAC,UACC,MAAOL,EACP,QAASb,EACT,aAAc,IAAMI,EAAa,EAAI,EACrC,aAAc,IAAMA,EAAa,EAAK,EACtC,gBAAeL,EAEd,UAAAW,GAAQS,EAAC,QAAK,MAAO3B,EAAW,KAAO,SAAAkB,EAAK,EAC7CS,EAAC,QAAM,SAAAZ,EAAM,EACbY,EAAC,QAAK,MAAOL,EAAe,kBAAS,GACvC,EACAI,EAAC,OAAI,MAAOH,EAAW,cAAa,CAAChB,EACnC,UAAAoB,EAAC,KAAE,MAAO3B,EAAW,YAAc,SAAAgB,EAAY,EAC9CC,GACCS,EAAC,KACC,KAAMT,EACN,QAASO,EACT,MAAO,CAAE,GAAGxB,EAAW,WAAY,GAAGc,EAAO,UAAW,EACxD,OAAQK,EAAW,SAAW,OAC9B,IAAKA,EAAW,sBAAwB,OACzC,gBACKA,EAAW,SAAW,UAC5B,GAEJ,GACF,CAEJ,CAeO,SAASS,GAAU,CAAE,OAAAC,EAAQ,QAAAC,EAAS,WAAAC,CAAW,EAAmB,CAEzE,GAAM,CAACC,EAAYC,CAAW,EAAIC,GAAYC,GAAcA,EAAI,EAAG,CAAC,EAG9D,CAACC,EAAaC,CAAc,EAAIxB,EAAsB,IAAI,GAAK,EAGrEyB,EAAU,IACYR,EAAQ,QAAQ,UAAU,IAAM,CAClDG,EAAY,CACd,CAAC,EAEA,CAACH,EAAQ,OAAO,CAAC,EAGpBQ,EAAU,IAAM,CACd,GAAKR,EAAQ,aAAa,UAC1B,OAAOA,EAAQ,YAAY,UAAU,IAAM,CACzCG,EAAY,CACd,CAAC,CACH,EAAG,CAACH,EAAQ,WAAW,CAAC,EAGxBQ,EAAU,IAAM,CACd,GAAI,CAACT,EAAO,OAAS,CAACC,EAAQ,aAAa,SAAU,OACrD,GAAM,CAAE,OAAQS,EAAY,YAAAC,EAAa,MAAOC,CAAY,EAAIZ,EAAO,MAGjEa,EAAO,IAAI,IACjB,QAAWC,KAAUd,EAAO,QAC1B,GAAIc,EAAO,UAAU,OAAS,QAC5B,QAAWC,KAAQD,EAAO,SAAS,MACjC,QAAWE,KAAQD,EAAK,WACjBC,EAAa,OAAS,eAAkBA,EAAa,KACxDH,EAAK,IAAKG,EAAa,GAAG,EAOpC,QAAWC,KAAOJ,EAChBZ,EAAQ,YAAY,SAASgB,EAAMC,GAAe,CAEhD,GADI,CAACR,EAAW,SAASQ,EAAM,IAAI,GAC/BP,GAEE,CADa,OAAOO,EAAM,OAAO,UAAY,EAAE,EACrC,SAASP,CAAW,EAAG,MAAO,GAE9C,GAAIC,GACF,OAAW,CAACO,EAAGC,EAAC,IAAK,OAAO,QAAQR,CAAW,EAC7C,GAAIM,EAAM,QAAQC,CAAC,IAAMC,GAAG,MAAO,GAGvC,MAAO,EACT,CAAC,CAEL,EAAG,CAACpB,EAAO,MAAOA,EAAO,QAASC,EAAQ,WAAW,CAAC,EAGtD,IAAMoB,EAAcC,EAClB,IACEtB,EAAO,QAAQ,OAAQuB,GAAQ,CAC7B,GAAI,CAACA,EAAI,SAAU,MAAO,GAC1B,GAAI,CAEF,OADetB,EAAQ,aAAsBsB,EAAI,QAAQ,EAC3C,KAChB,MAAQ,CAEN,MAAO,EACT,CACF,CAAC,EAEH,CAACvB,EAAO,QAASC,EAASE,CAAU,CACtC,EAGMqB,EAAiBF,EAAQ,IAAM,CACnC,IAAMG,EAAS,IAAI,IACnB,QAAWF,KAAOF,EAAa,CAC7B,IAAMK,EAAMH,EAAI,OAAO,SAClBE,EAAO,IAAIC,CAAG,GACjBD,EAAO,IAAIC,EAAK,CAAC,CAAC,EAEpBD,EAAO,IAAIC,CAAG,EAAG,KAAKH,CAAG,CAC3B,CACA,OAAOE,CACT,EAAG,CAACJ,CAAW,CAAC,EAGVM,EAAgBL,EACpB,IAAMD,EAAY,KAAMO,GAAMA,EAAE,OAAO,QAAQ,EAC/C,CAACP,CAAW,CACd,EAGMQ,EAAgBP,EAAQ,IACxBtB,EAAO,QAAU,OAAeA,EAAO,MACvC,OAAO,OAAW,KACb,OAAO,aAAa,8BAA8B,EAAE,QAAU,OAEhE,QACN,CAACA,EAAO,KAAK,CAAC,EAGX8B,EAAeC,EAClBC,GAAe,CACdxB,EAAgByB,GAAS,CACvB,IAAMC,EAAcD,EAAK,IAAID,CAAE,EAE3BG,EACJ,GAAInC,EAAO,iBAAmB,SAAU,CAEtC,QAAWoC,KAAUH,EACfG,IAAWJ,GACb/B,EAAQ,OAAO,QAAQ,cAAe,CACpC,WAAAC,EACA,MAAOkC,EACP,SAAU,GACV,UAAW,KAAK,IAAI,CACtB,CAAC,EAGLD,EAAOD,EAAc,IAAI,IAAQ,IAAI,IAAI,CAACF,CAAE,CAAC,CAC/C,MACEG,EAAO,IAAI,IAAIF,CAAI,EACfC,EACFC,EAAK,OAAOH,CAAE,EAEdG,EAAK,IAAIH,CAAE,EAKf,OAAA/B,EAAQ,OAAO,QAAQ,cAAe,CACpC,WAAAC,EACA,MAAO8B,EACP,SAAU,CAACE,EACX,UAAW,KAAK,IAAI,CACtB,CAAC,EAEMC,CACT,CAAC,CACH,EACA,CAACnC,EAAO,eAAgBC,EAAQ,OAAQC,CAAU,CACpD,EAGMmC,EAAiBN,EACrB,CAAC3C,EAAcE,IAAsB,CAEnC,IAAMgD,EAAiBlD,EAAK,KAAK,EAAE,YAAY,EAE7CkD,EAAe,WAAW,aAAa,GACvCA,EAAe,WAAW,OAAO,IAKnCrC,EAAQ,OAAO,QAAQ,kBAAmB,CACxC,WAAAC,EACA,KAAAd,EACA,SAAAE,EACA,UAAW,KAAK,IAAI,CACtB,CAAC,EAEGA,EACF,OAAO,KAAKF,EAAM,SAAU,qBAAqB,EAEjD,OAAO,SAAS,KAAOA,EAE3B,EACA,CAACa,EAAQ,OAAQC,CAAU,CAC7B,EAGMqC,EAAsC,CAC1C,GAAGpE,EAAW,UACd,GAAGC,GAAYyD,CAAa,EAAE,SAChC,EAEMW,EAA2C,CAC/C,GAAGrE,EAAW,eACd,GAAGC,GAAYyD,CAAa,EAAE,cAChC,EAEMY,EAAuC,CAC3C,GAAGtE,EAAW,WACd,GAAGC,GAAYyD,CAAa,EAAE,UAChC,EAGMa,EAAeC,GACnBA,EAAM,IAAKpB,GACTzB,EAACtB,GAAA,CAEC,KAAM+C,EACN,WAAYhB,EAAY,IAAIgB,EAAI,OAAO,EAAE,EACzC,SAAU,IAAMO,EAAaP,EAAI,OAAO,EAAE,EAC1C,WAAYc,EACZ,MAAOR,GALFN,EAAI,OAAO,EAMlB,CACD,EAGH,OAAIF,EAAY,SAAW,EAEvBvB,EAAC,OAAI,MAAOyC,EAAgB,mBAAkBrC,EAAY,qBAAmB,eAC3E,SAAAJ,EAAC,OAAI,MAAO2C,EAAiB,yCAA6B,EAC5D,EAKF3C,EAAC,OAAI,MAAOyC,EAAgB,mBAAkBrC,EAAY,qBAAmB,eAC3E,SAAAJ,EAAC,OAAI,MAAO3B,EAAW,UACpB,SAAAwD,EACG,MAAM,KAAKH,EAAe,QAAQ,CAAC,EAAE,IAAI,CAAC,CAACoB,EAAUD,CAAK,IACxD9C,EAACgD,EAAM,SAAN,CACE,UAAAD,GACC9C,EAAC,OAAI,MAAO0C,EAAqB,uBAAsBI,EACpD,SAAAA,EACH,EAEDF,EAAYC,CAAK,IANCC,GAAY,aAOjC,CACD,EACDF,EAAYrB,CAAW,EAC7B,EACF,CAEJ,CASO,IAAMyB,GAAqB,CAChC,MACEC,EACA/C,EACA,CACA,GAAM,CACJ,QAAAC,EACA,WAAAC,EAAa,aACb,GAAG8C,CACL,EAAIhD,GAAU,CACZ,eAAgB,SAChB,MAAO,OACP,QAAS,CAAC,CACZ,EAGA,GAAIC,GAAW,OAAOgD,IAAe,WAAY,CAC/C,IAAMC,EAAOD,GAAWF,CAAS,EACjC,OAAAG,EAAK,OACHL,EAAM,cAAc9C,GAAW,CAC7B,OAAQiD,EACR,QAAS/C,EACT,WAAAC,CACF,CAAC,CACH,EACO,IAAM,CACXgD,EAAK,QAAQ,CACf,CACF,CAGA,IAAMC,EAAQH,EAAwB,SAAW,CAAC,EAClD,OAAAD,EAAU,UAAY;AAAA;AAAA,UAEhBI,EACC,IACE5B,GAAQ;AAAA,4EACuDjD,EAAU,EAAE,CAAC;AAAA,cAC3EiD,EAAI,OAAO,KAAO,SAAStD,GAAWsD,EAAI,OAAO,IAAI,CAAC,WAAa,EAAE,WAAWtD,GAAWsD,EAAI,OAAO,KAAK,CAAC;AAAA,gDAC1EjD,EAAU,CAAC,CAAC,uBAAuBL,GAAWsD,EAAI,OAAO,WAAW,CAAC;AAAA,cACvGA,EAAI,OAAO,KAAO,YAAYtD,GAAWsD,EAAI,OAAO,IAAI,CAAC,mBAAmBhD,EAAO,CAAC,CAAC,oCAAsC,EAAE;AAAA;AAAA,SAGjI,EACC,KAAK,EAAE,CAAC;AAAA;AAAA,MAIR,IAAM,CACXwE,EAAU,UAAY,EACxB,CACF,CACF,ECpiBO,IAAMK,GAAkD,MAC7DC,EACAC,IAC4B,CAC5B,IAAMC,EAAWD,EAAQ,cAAcD,EAAO,QAAQ,EACtD,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,qBAAqBF,EAAO,QAAQ,EAAE,EAIxD,OAAAE,EAAS,eAAe,CACtB,SAAUF,EAAO,UAAY,SAC7B,MAAOA,EAAO,OAAS,SACvB,OAAQA,EAAO,QAAU,SAC3B,CAAC,EAEDC,EAAQ,aAAa,iBAAkB,CACrC,GAAIA,EAAQ,WAAW,EACvB,KAAM,sBACN,SAAUD,EAAO,SACjB,SAAUA,EAAO,UAAY,QAC/B,CAAC,EAEM,CACL,QAAS,IAAM,CAEf,CACF,CACF,EAKaG,GAAkD,MAC7DH,EACAC,IAC4B,CAE5B,IAAMG,EAAMJ,EAAO,IAAI,KAAK,EAC5B,GAAII,EAAI,YAAY,EAAE,WAAW,aAAa,EAC5C,MAAM,IAAI,MAAM,kCAAkC,EAGpD,IAAMC,EAASL,EAAO,QAAU,QAEhC,OAAAC,EAAQ,aAAa,iBAAkB,CACrC,GAAIA,EAAQ,WAAW,EACvB,KAAM,sBACN,IAAKD,EAAO,IACZ,OAAAK,CACF,CAAC,EAEGA,IAAW,SAEb,OAAO,KAAKD,EAAK,SAAU,qBAAqB,EAGhD,OAAO,SAAS,KAAOA,EAGlB,CACL,QAAS,IAAM,CAEf,CACF,CACF,EAUaE,GAAY,CACvB,CAAE,KAAM,sBAAuB,SAAUP,EAAgB,EACzD,CAAE,KAAM,sBAAuB,SAAUI,EAAgB,CAC3D,EAaaI,GAAU,CACrB,GAAI,eACJ,QAAS,QACT,KAAM,kBACN,YAAa,mFAKb,UAAAD,GAKA,QAAS,CACP,CACE,GAAI,oBACJ,UAAWE,GACX,SAAU,CACR,KAAM,kBACN,YAAa,mEACb,KAAM,WACR,CACF,CACF,CACF,ECvHO,IAAMC,GAAW,CACtB,GAAI,eACJ,QAASC,GAAQ,QACjB,KAAMA,GAAQ,KACd,YAAaA,GAAQ,YACrB,QAAS,CACP,QAASC,GAAU,IAAI,CAAC,CAAE,KAAAC,EAAM,SAAAC,CAAS,KAAO,CAC9C,KAAAD,EACA,SAAAC,CACF,EAAE,EACF,QAASH,GAAQ,QAMjB,eAAeI,EAAgC,CAE7C,OADiBA,EAAM,SAAW,CAAC,GAEhC,OAAQC,GAAMA,EAAE,QAAUA,EAAE,QAAQ,EACpC,IAAKA,IAAO,CACX,GAAI,OAAOA,EAAE,OAAO,EAAE,GACtB,SAAUA,EAAE,SACZ,UAAW,mBACX,WAAY,CACV,MAAOA,EAAE,OAAO,GAChB,MAAOA,EAAE,OAAQ,MACjB,KAAMA,EAAE,OAAQ,KAChB,KAAMA,EAAE,OAAQ,IAClB,CACF,EAAE,CACN,CACF,EACA,OAAQ,CACN,UAAWC,GACX,MAAOC,GACP,eAAeC,EAAiC,CAE9C,OADgBA,EAAO,QAAsC,CAAC,GAC/C,OAAqBA,EAAO,MAAmB,SAChE,CACF,EACA,SAAU,CACR,UAAW,EACb,CACF,EAMA,GAAI,OAAO,OAAW,IAAa,CACjC,IAAMC,EAAY,OAAe,OAAO,YACpCA,GAAY,OAAOA,EAAS,UAAa,YAC3CA,EAAS,SAASV,EAAQ,CAE9B,CAEA,IAAOW,GAAQX",
|
|
6
|
-
"names": ["cn", "classes", "_R", "_jsx", "type", "props", "key", "R", "p", "c", "jsx", "jsxs", "Fragment", "EditorLayout", "children", "jsx", "EditorHeader", "title", "subtitle", "onBack", "jsxs", "jsx", "EditorBody", "children", "jsx", "EditorFooter", "onSave", "onPublish", "jsxs", "jsx", "EditorCard", "children", "itemKey", "onMouseEnter", "onMouseLeave", "className", "validated", "jsx", "cn", "DetectionBadge", "found", "jsx", "cn", "_R", "react_default", "_", "k", "useState", "useEffect", "useMemo", "useCallback", "useRef", "useReducer", "_R", "_r", "_R", "Fragment", "Suspense", "Children", "Component", "PureComponent", "DismissedSection", "count", "children", "isOpen", "setIsOpen", "useState", "jsxs", "jsx", "GroupHeader", "label", "count", "className", "jsxs", "cn", "jsx", "BeforeAfterToggle", "mode", "onToggle", "jsxs", "jsx", "cn", "EditorInput", "label", "className", "props", "jsxs", "jsx", "cn", "EditBackButton", "onClick", "label", "jsx", "EmptyState", "message", "jsx", "formatMatch", "match", "k", "v", "formatOperator", "op", "formatConditionLabel", "condition", "accumulatorCount", "event", "target", "current", "parts", "ProgressBar", "current", "target", "pct", "jsx", "cn", "ConditionRow", "cs", "jsxs", "Fragment", "ConditionStatusLine", "status", "expanded", "setExpanded", "useState", "visible", "conditions", "passedCount", "c", "totalCount", "icon", "iconColor", "e", "i", "getRuntime", "evaluateConditionLocally", "condition", "runtime", "ctx", "type", "passed", "accCount", "event", "match", "withinMs", "count", "target", "pattern", "anchor", "a", "width", "height", "val", "threshold", "limitReached", "formatted", "formatConditionLabel", "evaluateShowWhen", "showWhen", "allConditions", "rule", "ruleMatched", "cs", "useShowWhenStatus", "items", "statuses", "setStatuses", "useState", "itemsRef", "useRef", "evaluate", "useCallback", "map", "item", "useEffect", "unsubs", "interval", "u", "truncate", "text", "max", "isRuleStrategy", "s", "describeTrigger", "showWhen", "pages", "anchors", "rule", "condition", "parts", "summarizeNavItem", "item", "icon", "title", "ACTION_NAMESPACES", "isOwnAction", "action", "ns", "isRuleStrategy", "s", "extractTargetingInfo", "showWhen", "pagePatterns", "anchorSelectors", "rule", "cond", "c", "hasTargeting", "extractFirstPage", "extractFirstAnchor", "flattenItems", "config", "isOwnAction", "tip", "summarizeNavItem", "describeTrigger", "filterConfig", "dismissedKeys", "ownActions", "_", "i", "useDetection", "items", "getCurrentRoute", "detectionMap", "setDetectionMap", "useState", "itemsRef", "useRef", "useEffect", "runDetection", "map", "currentPath", "item", "targeting", "pageMatch", "pattern", "anchorFound", "element", "interval", "NavEditor", "onChange", "editor", "typedConfig", "setDismissedKeys", "editingKey", "setEditingKey", "previewMode", "setPreviewMode", "_hoveredKey", "setHoveredKey", "initialConsumed", "allItems", "activeItems", "dismissedItems", "totalLinks", "showWhenItems", "react_default", "showWhenStatuses", "useShowWhenStatus", "foundCount", "handleDismiss", "useCallback", "key", "prev", "next", "handleRestore", "handleCardBodyClick", "handleTriggerClick", "pageUrl", "handleBackToList", "handleBeforeAfter", "mode", "filtered", "handleFieldChange", "index", "field", "value", "link", "otherActions", "a", "updated", "handlePublish", "handleCardHover", "handleCardLeave", "renderEditFields", "it", "jsxs", "jsx", "EditorInput", "e", "subtitle", "EditorLayout", "EditorHeader", "EditorBody", "editIndex", "editItem", "Fragment", "BeforeAfterToggle", "EditBackButton", "EmptyState", "GroupHeader", "detection", "EditorCard", "DetectionBadge", "ConditionStatusLine", "DismissedSection", "EditorFooter", "editorPanel", "editor_default", "NavEditor", "base", "brand", "slateGrey", "green", "yellow", "red", "blue", "orange", "purple", "pink", "text", "slateGrey", "background", "border", "button", "base", "brand", "red", "green", "badge", "yellow", "purple", "blue", "orange", "pink", "badgeBanner", "alert", "tag", "menu", "inputDropdown", "inputField", "toggle", "checkbox", "avatar", "progressBarSlider", "card", "sidebar", "modal", "tab", "table", "breadcrumbs", "loadingIndicator", "datePicker", "scroll", "_RD", "client_default", "_", "k", "createRoot", "escapeHtml", "str", "baseStyles", "themeStyles", "base", "slateGrey", "purple", "NavTipItem", "item", "isExpanded", "onToggle", "onNavigate", "theme", "isHovered", "setIsHovered", "useState", "colors", "title", "description", "href", "icon", "external", "itemStyle", "headerStyle", "chevronStyle", "bodyStyle", "handleLinkClick", "e", "jsxs", "jsx", "NavWidget", "config", "runtime", "instanceId", "renderTick", "forceUpdate", "useReducer", "x", "expandedIds", "setExpandedIds", "useEffect", "eventNames", "urlContains", "propFilters", "keys", "action", "rule", "cond", "key", "event", "k", "v", "visibleTips", "useMemo", "tip", "categoryGroups", "groups", "cat", "hasCategories", "t", "resolvedTheme", "handleToggle", "useCallback", "id", "prev", "wasExpanded", "next", "prevId", "handleNavigate", "normalizedHref", "containerStyle", "categoryHeaderStyle", "emptyStateStyle", "renderItems", "items", "category", "react_default", "NavMountableWidget", "container", "navConfig", "createRoot", "root", "tips", "executeScrollTo", "action", "context", "anchorEl", "executeNavigate", "url", "target", "executors", "runtime", "NavMountableWidget", "manifest", "runtime", "executors", "kind", "executor", "props", "a", "editor_default", "editorPanel", "action", "registry", "cdn_default"]
|
|
7
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
function W(...e){return e.filter(Boolean).join(" ")}function ya(){return typeof SynOS<"u"&&SynOS.React||{}}function ka(e,a,t){var o=ya(),r=a||{},s=r.children;return delete r.children,t!==void 0&&(r.key=t),Array.isArray(s)?o.createElement.apply(null,[e,r].concat(s)):s!==void 0?o.createElement(e,r,s):o.createElement(e,r)}var m=ka,y=ka,we=ya().Fragment;function sa({children:e}){return m("div",{className:"se-flex se-flex-col se-h-full se-font-sans",children:e})}function la({title:e,subtitle:a,onBack:t}){return y("div",{className:"se-p-4 se-border-b se-border-border-primary se-flex se-items-center se-gap-3",children:[m("button",{onClick:t,className:"se-px-3 se-py-1.5 se-rounded-md se-border se-border-btn-neutral-border se-bg-transparent se-text-btn-neutral-text se-text-sm se-cursor-pointer hover:se-text-btn-neutral-text-hover",children:"\u2190 Back"}),y("div",{children:[m("h2",{className:"se-m-0 se-text-base se-font-semibold se-text-text-primary",children:e}),a&&m("p",{className:"se-mt-0.5 se-mb-0 se-text-xs se-text-text-secondary",children:a})]})]})}function ua({children:e}){return m("div",{className:"se-flex-1 se-overflow-auto se-p-6",children:e})}function da({onSave:e,onPublish:a}){return y("div",{className:"se-py-3 se-px-4 se-border-t se-border-border-primary se-flex se-gap-2",children:[m("button",{onClick:e,className:"se-flex-1 se-py-2.5 se-rounded-lg se-border-none se-bg-blue-5/15 se-text-blue-5 se-text-base se-font-semibold se-cursor-pointer",children:"Save Draft"}),m("button",{onClick:a,className:"se-flex-1 se-py-2.5 se-rounded-lg se-border-none se-bg-green-4 se-text-white se-text-base se-font-semibold se-cursor-pointer",children:"Publish"})]})}function fa({children:e,itemKey:a,onMouseEnter:t,onMouseLeave:o,className:r,validated:s}){return m("div",{"data-item-key":a,onMouseEnter:t,onMouseLeave:o,className:W("se-py-2 se-px-2.5 se-rounded-lg se-border se-bg-card-bg se-shadow-sm se-mb-1 se-text-sm se-text-text-primary",s?"se-border-green-4/40 se-shadow-glow-green":"se-border-border-primary",r),children:e})}function na({found:e}){return m("span",{className:W("se-w-2 se-h-2 se-rounded-full se-shrink-0 se-inline-block",e?"se-bg-green-4":"se-bg-text-tertiary"),title:e?"Found on this page":"Not found on this page"})}function ie(){return typeof SynOS<"u"&&SynOS.React||{}}var Bo=new Proxy({},{get:function(e,a){return ie()[a]}});function ee(){return ie().useState.apply(null,arguments)}function ve(){return ie().useEffect.apply(null,arguments)}function ae(){return ie().useCallback.apply(null,arguments)}function Ae(){return ie().useRef.apply(null,arguments)}function Me(){return ie().createElement.apply(null,arguments)}function $e(){return ie().forwardRef.apply(null,arguments)}var Be=ie(),Do=Be.Fragment,Ro=Be.Suspense,Fo=Be.Children,To=Be.Component,Oo=Be.PureComponent;function ia({count:e,children:a}){let[t,o]=ee(!1);return y("div",{className:"se-mt-4 se-cursor-pointer se-select-none",children:[y("div",{className:"se-text-xs se-font-semibold se-text-text-tertiary se-flex se-items-center se-gap-1.5 se-cursor-pointer",onClick:()=>o(!t),children:[m("span",{children:t?"\u25BE":"\u25B8"}),y("span",{children:["Dismissed (",e,")"]})]}),t&&m("div",{className:"se-mt-1.5",children:a})]})}function Xe({label:e,count:a,className:t}){return y("div",{className:W("se-text-xs se-font-bold se-text-text-secondary se-uppercase se-tracking-wide se-py-1 se-pb-2 se-flex se-items-center se-justify-between",t),children:[m("span",{children:e}),m("span",{className:"se-text-xs se-text-text-tertiary se-bg-badge-slate-bg se-px-1.5 se-py-0.5 se-rounded-lg",children:a})]})}function ca({mode:e,onToggle:a}){return y("div",{className:"se-flex se-mb-3 se-rounded-lg se-overflow-hidden se-border se-border-border-primary",children:[m("button",{onClick:()=>a("before"),className:W("se-flex-1 se-py-1.5 se-px-3 se-border-none se-text-sm se-font-semibold se-cursor-pointer",e==="before"?"se-bg-blue-5/20 se-text-blue-5":"se-bg-transparent se-text-text-secondary"),children:"Before"}),m("button",{onClick:()=>a("after"),className:W("se-flex-1 se-py-1.5 se-px-3 se-border-none se-border-l se-border-border-primary se-text-sm se-font-semibold se-cursor-pointer",e==="after"?"se-bg-blue-5/20 se-text-blue-5":"se-bg-transparent se-text-text-secondary"),children:"After"})]})}function Le({label:e,className:a,...t}){return y("div",{children:[e&&m("label",{className:"se-text-sm se-font-medium se-text-input-field-text-label se-mb-1 se-block",children:e}),m("input",{...t,className:W("se-w-full se-py-2 se-px-3 se-rounded-lg se-border se-border-input-field-border se-bg-input-field-bg se-text-text-primary se-text-sm se-font-[inherit] se-mb-2 se-box-border","placeholder:se-text-input-field-text-placeholder","focus:se-border-input-field-border-selected focus:se-outline-none focus:se-ring-1 focus:se-ring-input-field-border-selected","disabled:se-bg-input-field-bg-disabled disabled:se-cursor-not-allowed disabled:se-opacity-50",a)})]})}function Ke({label:e,className:a,...t}){return y("div",{children:[e&&m("label",{className:"se-text-sm se-font-medium se-text-input-field-text-label se-mb-1 se-block",children:e}),m("textarea",{...t,className:W("se-w-full se-py-2 se-px-3 se-rounded-lg se-border se-border-input-field-border se-bg-input-field-bg se-text-text-primary se-text-sm se-font-[inherit] se-mb-2 se-resize-y se-min-h-[60px] se-box-border","placeholder:se-text-input-field-text-placeholder","focus:se-border-input-field-border-selected focus:se-outline-none focus:se-ring-1 focus:se-ring-input-field-border-selected","disabled:se-bg-input-field-bg-disabled disabled:se-cursor-not-allowed disabled:se-opacity-50",a)})]})}function pa({onClick:e,label:a="\u2190 List"}){return m("button",{onClick:e,className:"se-py-1.5 se-px-3 se-rounded-md se-border se-border-btn-neutral-border se-bg-transparent se-text-btn-neutral-text se-text-sm se-cursor-pointer se-mt-2 hover:se-text-btn-neutral-text-hover",children:a})}function ma({message:e}){return m("div",{className:"se-text-center se-py-8 se-px-4 se-text-text-secondary se-text-sm",children:e})}var Pa=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),je=(...e)=>e.filter((a,t,o)=>!!a&&a.trim()!==""&&o.indexOf(a)===t).join(" ").trim();var va={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var Aa=$e(({color:e="currentColor",size:a=24,strokeWidth:t=2,absoluteStrokeWidth:o,className:r="",children:s,iconNode:l,...u},d)=>Me("svg",{ref:d,...va,width:a,height:a,stroke:e,strokeWidth:o?Number(t)*24/Number(a):t,className:je("lucide",r),...u},[...l.map(([f,L])=>Me(f,L)),...Array.isArray(s)?s:[s]]));var Z=(e,a)=>{let t=$e(({className:o,...r},s)=>Me(Aa,{ref:s,iconNode:a,className:je(`lucide-${Pa(e)}`,o),...r}));return t.displayName=`${e}`,t};var De=Z("MessageSquare",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]]);var Re=Z("Route",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]);var ce=Z("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);var Fe=Z("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);var Te=Z("Tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);var Oe=Z("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);function _e(e){if(!e)return"(no target)";if(e.startsWith("#"))return Ma(e.slice(1),50);let a=e.match(/\[data-testid="([^"]+)"\]/);return a?`${a[1]} element`:Ma(e,50)}function Ma(e,a){return e.length<=a?e:`${e.slice(0,a)}...`}function Ba(e,a){return e.length<=a?`"${e}"`:`"${e.slice(0,a)}..."`}function xa(e,a){switch(e){case"tooltips":{let t=a.anchorId||"",o=_e(t),s=a.content?.body||"";return`Tooltip on ${o}: ${Ba(s,40)}`}case"highlights":{let t=a.anchorId||"";return`Highlight ${_e(t)}`}case"badges":{let t=a.anchorId||"",o=_e(t);return`Badge "${a.content||""}" on ${o}`}case"pulses":{let t=a.anchorId||"";return`Pulse on ${_e(t)}`}case"modals":{let t=a.content,o=t?.title||t?.body||"";return`Modal: ${Ba(o,40)}`}case"tours":{let t=a.tourId||"unknown",r=(a.steps||[]).length;return`Tour: ${t} (${r} ${r===1?"step":"steps"})`}default:return"Unknown overlay"}}function ga(e,a){return`${e}:${a}`}var Fa=["tooltips","highlights","badges","pulses","modals"],bt={tooltips:De,highlights:ce,badges:Te,pulses:Oe,modals:Fe,tours:Re};function La({section:e,className:a}){let t=bt[e];return m(t,{size:16,className:a})}function Da(e){let a=[];for(let o of Fa)(e[o]||[]).forEach((s,l)=>{let u=s;a.push({key:ga(o,l),section:o,index:l,summary:xa(o,u),anchorId:u.anchorId||"",isTour:!1})});return(e.tours||[]).forEach((o,r)=>{a.push({key:ga("tours",r),section:"tours",index:r,summary:xa("tours",o),anchorId:"",isTour:!0})}),a}function Ra(e,a){let t={...e},o=[...Fa,"tours"];for(let r of o){let l=(e[r]||[]).filter((u,d)=>!a.has(ga(r,d)));(l.length>0||e[r]!==void 0)&&(t[r]=l)}return t}function yt(e){let t=e.action.kind||"";return t.includes("tooltip")?"\u{1F4AC}":t.includes("highlight")?"\u2728":t.includes("modal")?"\u{1F4E6}":t.includes("badge")?"\u{1F3F7}\uFE0F":t.includes("pulse")?"\u{1F4AB}":"\u25CF"}function kt(e){let a=e.action,t=a.anchorId;if(t)return t;let o=a.content;return o?.title?o.title:o?.body?o.body.slice(0,30):e.id}function Pt(e,a){let[t,o]=ee(new Map),r=Ae(e),s=Ae(a);return r.current=e,s.current=a,ve(()=>{let l=()=>{let d=new Map;for(let f of r.current){let L=f.anchorId;if(f.isTour&&!L){let g=(s.current.tours||[])[f.index];g&&g.steps.length>0&&(L=g.steps[0].action?.anchorId||"")}if(!L){d.set(f.key,{found:!1,element:null});continue}try{let x=document.querySelector(L);d.set(f.key,{found:x!==null,element:x})}catch{d.set(f.key,{found:!1,element:null})}}o(d)};l();let u=setInterval(l,2e3);return()=>clearInterval(u)},[]),t}function vt(e){let[a,t]=e.split(":");return{section:a,index:Number(t)}}function At({config:e,onChange:a,editor:t}){let o=e,[r,s]=ee(()=>t.getDismissedKeys?.()??new Set),[l,u]=ee(null),[d,f]=ee(null),[L,x]=ee("after");ve(()=>{t.setDismissedKeys?.(r)},[r,t]);let g=Ae(!1);ve(()=>{if(t.initialEditKey!=null&&!g.current){g.current=!0;let p=Da(o),P=Number(t.initialEditKey);if(P>=0&&P<p.length){let R=p[P];R.isTour?u(R.key):(f(R.key),R.anchorId&&t.highlightElement(R.anchorId))}t.clearInitialState?.()}else t.initialCreate&&!g.current&&(g.current=!0,t.clearInitialState?.())},[t,o]);let n=Da(o),h=n.filter(p=>!r.has(p.key)),S=n.filter(p=>r.has(p.key)),w=h.filter(p=>!p.isTour),c=h.filter(p=>p.isTour),I=h.length,[b,k]=ee(null),C=Pt(n,o),M=h.filter(p=>C.get(p.key)?.found).length,T=ae(p=>{s(P=>{let R=new Set(P);return R.add(p),R}),l===p&&u(null),d===p&&f(null)},[l,d]),G=ae(p=>{s(P=>{let R=new Set(P);return R.delete(p),R})},[]),B=ae(p=>{p.isTour?u(P=>P===p.key?null:p.key):(p.anchorId&&t.highlightElement(p.anchorId),f(p.key))},[t]),v=ae(()=>{f(null),x("after"),t.previewConfig(e),t.clearHighlight()},[t,e]),F=ae(p=>{if(x(p),p==="before"){let P=Ra(o,new Set([d]));t.previewConfig(P)}else t.previewConfig(e)},[o,d,t,e]),D=ae((p,P,R)=>{let U=(o[p]||[]).slice(),ue={...U[P]};U[P]=R(ue);let K={...o,[p]:U};a(K),t.setDirty(!0)},[o,a,t]),E=ae(()=>{if(r.size>0){let p=Ra(o,r);a(p)}t.publish()},[r,o,a,t]),O=ae(p=>{k(p.key),p.anchorId&&t.highlightElement(p.anchorId)},[t]),z=ae(()=>{k(null),t.clearHighlight()},[t]),A=(p,P)=>{let U=(o[p]||[])[P];if(!U)return null;let ue=U.anchorId||"";switch(p){case"tooltips":{let K=U.content||{};return y("div",{className:"se-py-1",children:[m("div",{className:"se-text-[11px] se-font-mono se-text-slate-grey-8 se-py-1 se-px-2 se-bg-white/[0.04] se-rounded se-mb-3",children:ue}),m(Le,{label:"Title",value:K.title||"",onChange:$=>D(p,P,Y=>({...Y,content:{...Y.content,title:$.target.value}}))}),m(Ke,{label:"Body",value:K.body||"",onChange:$=>D(p,P,Y=>({...Y,content:{...Y.content,body:$.target.value}}))})]})}case"highlights":return y("div",{className:"se-py-1",children:[m("div",{className:"se-text-[11px] se-font-mono se-text-slate-grey-8 se-py-1 se-px-2 se-bg-white/[0.04] se-rounded se-mb-3",children:ue}),m(Le,{label:"Color",value:U.style?.color||"",onChange:K=>D(p,P,$=>({...$,style:{...$.style||{},color:K.target.value}}))})]});case"badges":return y("div",{className:"se-py-1",children:[m("div",{className:"se-text-[11px] se-font-mono se-text-slate-grey-8 se-py-1 se-px-2 se-bg-white/[0.04] se-rounded se-mb-3",children:ue}),m(Le,{label:"Content",value:U.content||"",onChange:K=>D(p,P,$=>({...$,content:K.target.value}))})]});case"pulses":return y("div",{className:"se-py-1",children:[m("div",{className:"se-text-[11px] se-font-mono se-text-slate-grey-8 se-py-1 se-px-2 se-bg-white/[0.04] se-rounded se-mb-3",children:ue}),m(Le,{label:"Duration (ms)",type:"number",value:U.duration||"",onChange:K=>D(p,P,$=>({...$,duration:Number(K.target.value)||void 0}))})]});case"modals":{let K=U.content||{};return y("div",{className:"se-py-1",children:[m(Le,{label:"Title",value:K.title||"",onChange:$=>D(p,P,Y=>({...Y,content:{...Y.content,title:$.target.value}}))}),m(Ke,{label:"Body",value:K.body||"",onChange:$=>D(p,P,Y=>({...Y,content:{...Y.content,body:$.target.value}}))})]})}default:return null}},H=p=>{let R=(o.tours||[])[p];return R?y("div",{className:"se-p-3 se-rounded-lg se-border se-border-white/[0.08] se-bg-white/[0.02] se-mt-1 se-mb-2",children:[y("div",{className:"se-text-[13px] se-font-semibold se-text-slate-grey-10 se-mb-2",children:["\u{1F3AF}"," Tour: ",R.tourId]}),y("label",{className:"se-flex se-items-center se-gap-2 se-text-xs se-text-[#d1d5db] se-mb-2",children:[m("input",{type:"checkbox",checked:R.autoStart||!1,readOnly:!0}),"Auto-start tour"]}),R.steps.map((U,ue)=>y("div",{className:"se-flex se-items-center se-gap-2 se-py-1.5 se-px-2 se-rounded se-border se-border-white/[0.04] se-mb-1 se-text-xs se-text-[#d1d5db]",children:[y("span",{className:"se-text-[11px] se-font-bold se-text-slate-grey-7 se-min-w-[18px]",children:[ue+1,"."]}),m("span",{children:yt(U)}),y("div",{className:"se-flex-1 se-overflow-hidden",children:[m("div",{children:kt(U)}),U.route&&m("div",{className:"se-text-[10px] se-text-slate-grey-7 se-font-mono",children:U.route})]})]},U.id||ue)),R.steps.length===0&&m("div",{className:"se-text-xs se-text-slate-grey-7 se-py-2",children:"No steps in this tour."}),m("button",{className:"se-py-1 se-px-2.5 se-rounded se-border se-border-white/10 se-bg-transparent se-text-slate-grey-8 se-text-[11px] se-cursor-pointer se-mt-2",onClick:()=>u(null),children:"\u2190 Back to list"})]}):null},N=p=>{let P=C.get(p.key);return y("div",{children:[y(fa,{itemKey:p.key,className:"se-flex se-items-center se-gap-2 se-cursor-pointer",onMouseEnter:()=>O(p),onMouseLeave:z,children:[m(na,{found:P?.found??!1}),m("span",{className:"se-shrink-0 se-flex se-items-center -se-ml-1",onClick:R=>{R.stopPropagation(),B(p)},children:m(La,{section:p.section})}),m("span",{className:"se-flex-1 se-overflow-hidden se-text-ellipsis se-whitespace-nowrap",onClick:()=>B(p),children:p.summary}),m("button",{className:"se-py-0.5 se-px-1.5 se-rounded se-border-none se-bg-transparent se-text-slate-grey-7 se-text-sm se-cursor-pointer se-shrink-0 se-leading-none",onClick:R=>{R.stopPropagation(),T(p.key)},title:"Dismiss",children:"\xD7"})]}),p.isTour&&l===p.key&&H(p.index)]},p.key)};return y(sa,{children:[m(la,{title:"Review Changes",subtitle:`${I} item${I!==1?"s":""}${I>0?` (${M} found on this page)`:""}`,onBack:()=>t.navigateHome()}),m(ua,{children:d!==null?(()=>{let p=vt(d),P=n.find(R=>R.key===d);return y(we,{children:[y("div",{className:"se-flex se-items-center se-gap-2 se-mb-3 se-text-[13px] se-font-semibold se-text-slate-grey-10",children:[m("span",{children:P&&m(La,{section:P.section})}),m("span",{children:P?.summary})]}),m(ca,{mode:L,onToggle:F}),A(p.section,p.index),m(pa,{onClick:v})]})})():y(we,{children:[n.length===0&&m(ma,{message:"No overlays configured."}),w.length>0&&y(we,{children:[m(Xe,{label:"OVERLAYS",count:w.length}),w.map(N)]}),c.length>0&&y(we,{children:[m(Xe,{label:"TOURS",count:c.length,className:w.length>0?"se-mt-4":""}),c.map(N)]}),S.length>0&&m(ia,{count:S.length,children:S.map(p=>y("div",{className:"se-flex se-items-center se-gap-2 se-py-1.5 se-px-2.5 se-rounded-md se-border se-border-white/[0.03] se-bg-transparent se-mb-0.5 se-cursor-pointer se-text-xs se-text-slate-grey-6 se-opacity-60",children:[m("span",{className:"se-shrink-0 se-flex se-items-center -se-ml-1",children:m(La,{section:p.section})}),m("span",{className:"se-flex-1 se-overflow-hidden se-text-ellipsis se-whitespace-nowrap se-line-through",children:p.summary}),m("button",{className:"se-py-0.5 se-px-1.5 se-rounded se-border-none se-bg-transparent se-text-blue-5 se-text-[11px] se-cursor-pointer se-shrink-0 se-leading-none",onClick:P=>{P.stopPropagation(),G(p.key)},children:"Restore"})]},p.key))})]})}),m(da,{onSave:()=>t.save(),onPublish:E})]})}var Ia={panel:{title:"Overlays",icon:"\u{1F4AC}",description:"Tooltips, highlights, and visual overlays"},component:At},Ls=Ia.panel;var se={white:"#ffffff",black:"#000000"},j={0:"#2c0b0a",1:"#5b1715",2:"#89221f",3:"#b72e2a",4:"#d44844",5:"#dd6d69",6:"#e5918f",7:"#eeb6b4",8:"#f6dada",9:"#faebea"},i={0:"#07080a",1:"#0f1318",2:"#0e1114",3:"#1c222a",4:"#2b333f",5:"#394454",6:"#475569",7:"#677384",8:"#87919f",9:"#a8afba",10:"#cbd0d7",11:"#e8eaee",12:"#f6f7f9"},q={0:"#07230a",1:"#0e4514",2:"#16681e",3:"#1d8a28",4:"#24ad32",5:"#4fbd5a",6:"#7acd82",7:"#a5deab",8:"#d0eed3",9:"#e5f6e7"},le={0:"#301f09",1:"#5f3e12",2:"#8f5e1b",3:"#be7d24",4:"#ee9c2d",5:"#f1b057",6:"#f5c481",7:"#f8d7ab",8:"#fcebd5",9:"#fdf5ea"},V={0:"#330707",1:"#660f0e",2:"#991616",3:"#cc1e1d",4:"#ff2524",5:"#ff5150",6:"#ff7c7c",7:"#ffa8a7",8:"#ffd3d3",9:"#ffe9e9"},pe={0:"#051533",1:"#0a2a66",2:"#0f3f98",3:"#1454cb",4:"#1969fe",5:"#4787fe",6:"#75a5fe",7:"#a3c3ff",8:"#d1e1ff",9:"#e8f0ff"},qe={0:"#662500",1:"#993d00",2:"#cc5800",3:"#ff7700",4:"#fea85d",5:"#fec58f",6:"#ffd6ae",7:"#fee6cd",8:"#fff1e1",9:"#fff8f0"},Ee={0:"#151229",1:"#2a2452",2:"#40357c",3:"#5547a5",4:"#6a59ce",5:"#887ad8",6:"#a69be2",7:"#c3bdeb",8:"#e1def5",9:"#f0eefa"},He={0:"#37091f",1:"#69123c",2:"#9b1c58",3:"#cd2575",4:"#ff2e92",5:"#ff58a8",6:"#ff82be",7:"#ffabd3",8:"#ffd5e9",9:"#ffeaf4"};var hs={primary:i[10],secondary:i[9],tertiary:i[8]},Cs={primary:i[2],secondary:i[0]},Ss={primary:i[4],secondary:i[3]},ws={primary:{text:se.white,icon:se.white,border:j[3],backgroundDefault:j[3],backgroundHover:j[2]},neutral:{text:i[10],textHover:se.white,icon:i[10],iconHover:se.white,border:i[4],background:i[2]},link:{text:se.white,icon:se.white,hover:j[5]},error:{text:V[5],hover:V[6]},success:{text:q[5],hover:q[6]}},bs={slateGrey:{content:i[10],pillOutline:i[10],borderPrimary:i[5],borderSecondary:i[5],background:i[3]},brand:{content:j[9],pillOutline:j[9],borderPrimary:j[6],borderSecondary:j[6],background:j[0]},red:{content:V[8],pillOutline:V[4],borderPrimary:V[2],borderSecondary:V[2],background:V[0]},yellow:{content:le[8],pillOutline:le[4],borderPrimary:le[2],borderSecondary:le[2],background:le[0]},green:{content:q[8],pillOutline:q[4],borderPrimary:q[2],borderSecondary:q[2],background:q[0]},purple:{content:Ee[8],pillOutline:Ee[4],borderPrimary:Ee[2],borderSecondary:Ee[2],background:Ee[0]},blue:{content:pe[8],pillOutline:pe[4],borderPrimary:pe[2],borderSecondary:pe[2],background:pe[0]},orange:{content:qe[8],pillOutline:qe[4],borderPrimary:qe[2],borderSecondary:qe[2],background:qe[0]},pink:{content:He[8],pillOutline:He[4],borderPrimary:He[2],borderSecondary:He[2],background:He[0]}},ys={green:{content:q[8],border:q[2],background:q[0]},yellow:{content:le[8],border:le[2],background:le[0]},red:{content:V[8],border:V[2],background:V[0]}},ks={green:{content:q[1],background:q[9]},yellow:{content:le[1],background:le[9]},red:{content:V[1],background:V[9]}},Ps={content:i[10],border:i[4],background:"#1c2124"},vs={backgroundDefault:i[2],backgroundHover:i[1],selected:i[3]},As={background:i[2],icon:i[10],borderDefault:i[4],borderSelected:j[3],textLabel:i[9],textPlaceholder:i[8],textHint:i[8]},Ms={backgroundDefault:i[2],backgroundDisabled:i[0],textLabel:i[9],textPlaceholder:i[8],textHint:i[8],textError:V[5],iconDefault:i[9],iconPlaceholder:i[10],iconError:V[5],borderDefault:i[4],borderSelected:j[3],borderError:V[5]},Bs={handleDefault:se.white,handleDisabled:i[10],off:{backgroundDefault:i[4],backgroundHover:i[5],backgroundDisabled:i[4]},on:{backgroundDefault:q[3],backgroundHover:q[2],backgroundDisabled:i[4]}},Ds={off:{backgroundDefault:"#00000000",backgroundHover:i[5],backgroundDisabled:i[2],border:i[6]},on:{backgroundDefault:q[0],backgroundHover:q[1],backgroundDisabled:i[2],border:q[3]}},Rs={content:i[10],background:i[4]},Fs={background:i[4],active:q[3]},Ts={background:i[1],content:i[9],border:i[4]},Os={backgroundDefault:i[1],backgroundHover:i[3],backgroundActive:i[4],border:i[4],contentPrimary:i[10],contentSecondary:i[9],contentTertiary:i[8]},qs={background:i[1],content:i[9],border:i[4]},Es={activeBackground:i[3],activeContent:j[5],inactiveContent:i[9],border:i[4]},Hs={header:{textDefault:i[9],textHover:i[8],backgroundDefault:i[1]},border:i[4],cell:{textPrimary:i[10],textSecondary:i[9],backgroundDefault:i[2],backgroundHover:i[1]}},Us={textPrimaryDefault:i[10],textPrimaryHover:i[10],textSecondaryDefault:i[8],textSecondaryHover:i[9],iconPrimary:i[10],iconSecondary:i[8]},Ns={background:q[1],active:q[5]},Ws={textDefault:i[10],textSelected:se.white,textDisabled:i[7],backgroundDefault:i[2],backgroundMiddle:i[3],backgroundSelected:j[3],border:i[4]},Vs=i[9];var Ta=typeof CSS<"u"&&CSS.supports?.("clip-path","path('M0 0 H1 V1 Z')");function Oa(e,a,t){let o=t?.paddingPx??12,r=t?.radiusPx??12,s=Math.min(Math.max(t?.scrimOpacity??.55,0),1),l=t?.ringColor??`var(--syntro-ring, ${pe[5]})`,u=t?.blocking??!1,d=t?.onClickOutside??!0,f=t?.onEsc??!0,L=getComputedStyle(document.documentElement),x=L.getPropertyValue("--syntro-spotlight-backdrop").trim(),g=L.getPropertyValue("--syntro-ring").trim(),n=document.createElement("div");n.className="syntro-spotlight-scrim";let h=u||d;Object.assign(n.style,{position:"fixed",inset:"0",zIndex:"2147483646",pointerEvents:h?"auto":"none",background:x||`rgba(2, 6, 23, ${s})`,transition:"opacity 220ms ease",opacity:"0"}),a.appendChild(n),requestAnimationFrame(()=>n.style.opacity="1");let S=document.createElement("div");S.className="syntro-spotlight-ring",Object.assign(S.style,{position:"fixed",pointerEvents:"none",borderRadius:`${r}px`,border:`2px solid ${l||g||pe[5]}`,boxShadow:"0 0 0 4px rgba(255,255,255,0.35)",zIndex:"2147483647",transition:"all 220ms cubic-bezier(0.16,1,0.3,1)"}),a.appendChild(S);let w=[];if(!Ta)for(let B=0;B<4;B++){let v=document.createElement("div");v.style.position="fixed",v.style.background="inherit",w.push(v),n.appendChild(v)}let c=B=>{n.style.clipPath=B,n.style.webkitClipPath=B},I=()=>{let B=e.getBoundingClientRect(),v=Math.max(0,B.left-o),F=Math.max(0,B.top-o),D=Math.min(window.innerWidth,B.width+o*2),E=Math.min(window.innerHeight,B.height+o*2);if(Object.assign(S.style,{left:`${v}px`,top:`${F}px`,width:`${D}px`,height:`${E}px`}),Ta){let O=window.innerWidth,z=window.innerHeight,A=Math.min(r,D/2,E/2),H=`M 0 0 L ${O} 0 L ${O} ${z} L 0 ${z} Z`,N=`M ${v+A} ${F} A ${A} ${A} 0 0 0 ${v} ${F+A} L ${v} ${F+E-A} A ${A} ${A} 0 0 0 ${v+A} ${F+E} L ${v+D-A} ${F+E} A ${A} ${A} 0 0 0 ${v+D} ${F+E-A} L ${v+D} ${F+A} A ${A} ${A} 0 0 0 ${v+D-A} ${F} L ${v+A} ${F} Z`;c(`path('${H} ${N}')`)}else{let[O,z,A,H]=w;Object.assign(O.style,{left:"0px",top:"0px",width:"100vw",height:`${F}px`}),Object.assign(A.style,{left:"0px",top:`${F+E}px`,width:"100vw",height:`${Math.max(0,window.innerHeight-(F+E))}px`}),Object.assign(H.style,{left:"0px",top:`${F}px`,width:`${v}px`,height:`${E}px`}),Object.assign(z.style,{left:`${v+D}px`,top:`${F}px`,width:`${Math.max(0,window.innerWidth-(v+D))}px`,height:`${E}px`})}},b=new ResizeObserver(()=>requestAnimationFrame(I));b.observe(e);let k=()=>requestAnimationFrame(I),C=()=>requestAnimationFrame(I);window.addEventListener("scroll",k,!0),window.addEventListener("resize",C);let M=B=>{B.key==="Escape"&&f&&G.destroy()};f&&window.addEventListener("keydown",M);let T=B=>{u?(B.preventDefault(),B.stopPropagation()):d&&G.destroy()};n.addEventListener("click",T);let G={destroy(){b.disconnect(),window.removeEventListener("scroll",k,!0),window.removeEventListener("resize",C),f&&window.removeEventListener("keydown",M),n.removeEventListener("click",T),n.style.opacity="0",setTimeout(()=>{n.remove(),S.remove()},220)}};return I(),G}var Mt=new Set(["b","strong","i","em","u","span","div","p","br","ul","ol","li","code","pre","small","sup","sub","a","button"]);function _(e){if(typeof window.Sanitizer=="function")try{let u=new window.Sanitizer({}).sanitizeToFragment(e),d=document.createElement("div");return d.append(u),d.innerHTML}catch{}let t=document.createElement("template");t.innerHTML=e;let o=t.content,r=document.createTreeWalker(o,NodeFilter.SHOW_ELEMENT,null),s=[];for(;r.nextNode();){let l=r.currentNode,u=l.tagName.toLowerCase();if(!Mt.has(u)){s.push(l);continue}for(let d of Array.from(l.attributes)){let f=d.name.toLowerCase(),L=d.value.trim().toLowerCase(),x=f.startsWith("on"),g=(f==="href"||f==="src")&&L.startsWith("javascript:");(x||g)&&l.removeAttribute(d.name)}}for(let l of s){for(;l.firstChild;)l.parentNode?.insertBefore(l.firstChild,l);l.remove()}return t.innerHTML}var qa=async(e,a)=>{let{content:t,size:o="md",blocking:r=!1,scrim:s,dismiss:l,ctaButtons:u}=e,d=document.createElement("div");d.className="syntro-modal-scrim",d.style.cssText=`
|
|
2
|
-
position: fixed;
|
|
3
|
-
inset: 0;
|
|
4
|
-
background: rgba(0, 0, 0, ${s?.opacity??.6});
|
|
5
|
-
z-index: 2147483645;
|
|
6
|
-
opacity: 0;
|
|
7
|
-
transition: opacity 200ms ease-out;
|
|
8
|
-
`,a.overlayRoot.appendChild(d);let f=document.createElement("div");f.className=`syntro-modal syntro-modal-${o}`,f.setAttribute("role","dialog"),f.setAttribute("aria-modal","true");let L={sm:"360px",md:"480px",lg:"640px"};f.style.cssText=`
|
|
9
|
-
position: fixed;
|
|
10
|
-
top: 50%;
|
|
11
|
-
left: 50%;
|
|
12
|
-
transform: translate(-50%, -50%) scale(0.95);
|
|
13
|
-
max-width: ${L[o]};
|
|
14
|
-
width: 90%;
|
|
15
|
-
background: ${se.white};
|
|
16
|
-
border-radius: 12px;
|
|
17
|
-
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
|
|
18
|
-
z-index: 2147483646;
|
|
19
|
-
opacity: 0;
|
|
20
|
-
transition: opacity 200ms ease-out, transform 200ms ease-out;
|
|
21
|
-
padding: 24px;
|
|
22
|
-
`;let x="";if(t.title&&(x+=`<h2 class="syntro-modal-title" style="margin: 0 0 12px 0; font-size: 18px; font-weight: 600; color: #111827;">${_(t.title)}</h2>`),x+=`<div class="syntro-modal-body" style="color: #4b5563; line-height: 1.5;">${_(t.body)}</div>`,l?.closeButton!==!1&&(x+=`
|
|
23
|
-
<button class="syntro-modal-close" data-syntro-action="dismiss" style="
|
|
24
|
-
position: absolute;
|
|
25
|
-
top: 16px;
|
|
26
|
-
right: 16px;
|
|
27
|
-
background: none;
|
|
28
|
-
border: none;
|
|
29
|
-
cursor: pointer;
|
|
30
|
-
padding: 4px;
|
|
31
|
-
color: #6b7280;
|
|
32
|
-
" aria-label="Close">
|
|
33
|
-
<svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor">
|
|
34
|
-
<path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/>
|
|
35
|
-
</svg>
|
|
36
|
-
</button>
|
|
37
|
-
`),u&&u.length>0){x+='<div class="syntro-modal-actions" style="display: flex; gap: 12px; margin-top: 24px; justify-content: flex-end;">';for(let C of u){let M=C.primary??!1;x+=`
|
|
38
|
-
<button
|
|
39
|
-
class="syntro-modal-btn ${M?"syntro-modal-btn-primary":""}"
|
|
40
|
-
data-syntro-action="${_(C.actionId)}"
|
|
41
|
-
style="
|
|
42
|
-
padding: 10px 20px;
|
|
43
|
-
border-radius: 8px;
|
|
44
|
-
font-size: 14px;
|
|
45
|
-
font-weight: 500;
|
|
46
|
-
cursor: pointer;
|
|
47
|
-
transition: background 150ms ease;
|
|
48
|
-
${M?"background: #4f46e5; color: white; border: none;":"background: white; color: #374151; border: 1px solid #d1d5db;"}
|
|
49
|
-
"
|
|
50
|
-
>
|
|
51
|
-
${_(C.label)}
|
|
52
|
-
</button>
|
|
53
|
-
`}x+="</div>"}f.innerHTML=x,a.overlayRoot.appendChild(f);let g=null,n=f.querySelectorAll("[data-syntro-action]"),h=C=>{let T=C.currentTarget.getAttribute("data-syntro-action");T&&(g=T,a.publishEvent("action.modal_cta_clicked",{actionId:T}),T==="dismiss"&&k.destroy())};n.forEach(C=>C.addEventListener("click",h));let S=C=>{C.key==="Escape"&&l?.onEsc!==!1&&k.destroy()};window.addEventListener("keydown",S);let w=()=>{r||k.destroy()};d.addEventListener("click",w);let c=[];r&&Array.from(document.body.children).forEach(C=>{C!==a.overlayRoot&&C.getAttribute("inert")===null&&!C.querySelector("[data-syntro-editor-panel]")&&!C.hasAttribute("data-syntro-editor-panel")&&(C.setAttribute("inert",""),c.push(C))});let I;l?.timeoutMs&&(I=setTimeout(()=>{k.destroy()},l.timeoutMs));let b=f.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');b.length>0&&requestAnimationFrame(()=>b[0].focus()),requestAnimationFrame(()=>{d.style.opacity="1",f.style.opacity="1",f.style.transform="translate(-50%, -50%) scale(1)"}),a.publishEvent("action.applied",{id:a.generateId(),kind:"overlays:modal",size:o,blocking:r});let k={destroy(){I&&clearTimeout(I),window.removeEventListener("keydown",S),d.removeEventListener("click",w),n.forEach(C=>C.removeEventListener("click",h)),c.forEach(C=>C.removeAttribute("inert")),f.style.opacity="0",f.style.transform="translate(-50%, -50%) scale(0.95)",d.style.opacity="0",setTimeout(()=>{f.remove(),d.remove()},200),a.publishEvent("action.modal_dismissed",{actionClicked:g})}};return{cleanup:()=>{k.destroy()}}};var Ua=["top","right","bottom","left"];var me=Math.min,de=Math.max,Ne=Math.round,We=Math.floor,te=e=>({x:e,y:e}),Bt={left:"right",right:"left",bottom:"top",top:"bottom"},Dt={start:"end",end:"start"};function Je(e,a,t){return de(e,me(a,t))}function ge(e,a){return typeof e=="function"?e(a):e}function xe(e){return e.split("-")[0]}function be(e){return e.split("-")[1]}function ha(e){return e==="x"?"y":"x"}function Qe(e){return e==="y"?"height":"width"}var Rt=new Set(["top","bottom"]);function fe(e){return Rt.has(xe(e))?"y":"x"}function Ye(e){return ha(fe(e))}function Na(e,a,t){t===void 0&&(t=!1);let o=be(e),r=Ye(e),s=Qe(r),l=r==="x"?o===(t?"end":"start")?"right":"left":o==="start"?"bottom":"top";return a.reference[s]>a.floating[s]&&(l=Ue(l)),[l,Ue(l)]}function Wa(e){let a=Ue(e);return[Ze(e),a,Ze(a)]}function Ze(e){return e.replace(/start|end/g,a=>Dt[a])}var Ea=["left","right"],Ha=["right","left"],Ft=["top","bottom"],Tt=["bottom","top"];function Ot(e,a,t){switch(e){case"top":case"bottom":return t?a?Ha:Ea:a?Ea:Ha;case"left":case"right":return a?Ft:Tt;default:return[]}}function Va(e,a,t,o){let r=be(e),s=Ot(xe(e),t==="start",o);return r&&(s=s.map(l=>l+"-"+r),a&&(s=s.concat(s.map(Ze)))),s}function Ue(e){return e.replace(/left|right|bottom|top/g,a=>Bt[a])}function qt(e){return{top:0,right:0,bottom:0,left:0,...e}}function Ca(e){return typeof e!="number"?qt(e):{top:e,right:e,bottom:e,left:e}}function Ie(e){let{x:a,y:t,width:o,height:r}=e;return{width:o,height:r,top:t,left:a,right:a+o,bottom:t+r,x:a,y:t}}function Ga(e,a,t){let{reference:o,floating:r}=e,s=fe(a),l=Ye(a),u=Qe(l),d=xe(a),f=s==="y",L=o.x+o.width/2-r.width/2,x=o.y+o.height/2-r.height/2,g=o[u]/2-r[u]/2,n;switch(d){case"top":n={x:L,y:o.y-r.height};break;case"bottom":n={x:L,y:o.y+o.height};break;case"right":n={x:o.x+o.width,y:x};break;case"left":n={x:o.x-r.width,y:x};break;default:n={x:o.x,y:o.y}}switch(be(a)){case"start":n[l]-=g*(t&&f?-1:1);break;case"end":n[l]+=g*(t&&f?-1:1);break}return n}async function Xa(e,a){var t;a===void 0&&(a={});let{x:o,y:r,platform:s,rects:l,elements:u,strategy:d}=e,{boundary:f="clippingAncestors",rootBoundary:L="viewport",elementContext:x="floating",altBoundary:g=!1,padding:n=0}=ge(a,e),h=Ca(n),w=u[g?x==="floating"?"reference":"floating":x],c=Ie(await s.getClippingRect({element:(t=await(s.isElement==null?void 0:s.isElement(w)))==null||t?w:w.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(u.floating)),boundary:f,rootBoundary:L,strategy:d})),I=x==="floating"?{x:o,y:r,width:l.floating.width,height:l.floating.height}:l.reference,b=await(s.getOffsetParent==null?void 0:s.getOffsetParent(u.floating)),k=await(s.isElement==null?void 0:s.isElement(b))?await(s.getScale==null?void 0:s.getScale(b))||{x:1,y:1}:{x:1,y:1},C=Ie(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:u,rect:I,offsetParent:b,strategy:d}):I);return{top:(c.top-C.top+h.top)/k.y,bottom:(C.bottom-c.bottom+h.bottom)/k.y,left:(c.left-C.left+h.left)/k.x,right:(C.right-c.right+h.right)/k.x}}var Ka=async(e,a,t)=>{let{placement:o="bottom",strategy:r="absolute",middleware:s=[],platform:l}=t,u=s.filter(Boolean),d=await(l.isRTL==null?void 0:l.isRTL(a)),f=await l.getElementRects({reference:e,floating:a,strategy:r}),{x:L,y:x}=Ga(f,o,d),g=o,n={},h=0;for(let w=0;w<u.length;w++){var S;let{name:c,fn:I}=u[w],{x:b,y:k,data:C,reset:M}=await I({x:L,y:x,initialPlacement:o,placement:g,strategy:r,middlewareData:n,rects:f,platform:{...l,detectOverflow:(S=l.detectOverflow)!=null?S:Xa},elements:{reference:e,floating:a}});L=b??L,x=k??x,n={...n,[c]:{...n[c],...C}},M&&h<=50&&(h++,typeof M=="object"&&(M.placement&&(g=M.placement),M.rects&&(f=M.rects===!0?await l.getElementRects({reference:e,floating:a,strategy:r}):M.rects),{x:L,y:x}=Ga(f,g,d)),w=-1)}return{x:L,y:x,placement:g,strategy:r,middlewareData:n}},ja=e=>({name:"arrow",options:e,async fn(a){let{x:t,y:o,placement:r,rects:s,platform:l,elements:u,middlewareData:d}=a,{element:f,padding:L=0}=ge(e,a)||{};if(f==null)return{};let x=Ca(L),g={x:t,y:o},n=Ye(r),h=Qe(n),S=await l.getDimensions(f),w=n==="y",c=w?"top":"left",I=w?"bottom":"right",b=w?"clientHeight":"clientWidth",k=s.reference[h]+s.reference[n]-g[n]-s.floating[h],C=g[n]-s.reference[n],M=await(l.getOffsetParent==null?void 0:l.getOffsetParent(f)),T=M?M[b]:0;(!T||!await(l.isElement==null?void 0:l.isElement(M)))&&(T=u.floating[b]||s.floating[h]);let G=k/2-C/2,B=T/2-S[h]/2-1,v=me(x[c],B),F=me(x[I],B),D=v,E=T-S[h]-F,O=T/2-S[h]/2+G,z=Je(D,O,E),A=!d.arrow&&be(r)!=null&&O!==z&&s.reference[h]/2-(O<D?v:F)-S[h]/2<0,H=A?O<D?O-D:O-E:0;return{[n]:g[n]+H,data:{[n]:z,centerOffset:O-z-H,...A&&{alignmentOffset:H}},reset:A}}});var _a=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(a){var t,o;let{placement:r,middlewareData:s,rects:l,initialPlacement:u,platform:d,elements:f}=a,{mainAxis:L=!0,crossAxis:x=!0,fallbackPlacements:g,fallbackStrategy:n="bestFit",fallbackAxisSideDirection:h="none",flipAlignment:S=!0,...w}=ge(e,a);if((t=s.arrow)!=null&&t.alignmentOffset)return{};let c=xe(r),I=fe(u),b=xe(u)===u,k=await(d.isRTL==null?void 0:d.isRTL(f.floating)),C=g||(b||!S?[Ue(u)]:Wa(u)),M=h!=="none";!g&&M&&C.push(...Va(u,S,h,k));let T=[u,...C],G=await d.detectOverflow(a,w),B=[],v=((o=s.flip)==null?void 0:o.overflows)||[];if(L&&B.push(G[c]),x){let O=Na(r,l,k);B.push(G[O[0]],G[O[1]])}if(v=[...v,{placement:r,overflows:B}],!B.every(O=>O<=0)){var F,D;let O=(((F=s.flip)==null?void 0:F.index)||0)+1,z=T[O];if(z&&(!(x==="alignment"?I!==fe(z):!1)||v.every(N=>fe(N.placement)===I?N.overflows[0]>0:!0)))return{data:{index:O,overflows:v},reset:{placement:z}};let A=(D=v.filter(H=>H.overflows[0]<=0).sort((H,N)=>H.overflows[1]-N.overflows[1])[0])==null?void 0:D.placement;if(!A)switch(n){case"bestFit":{var E;let H=(E=v.filter(N=>{if(M){let p=fe(N.placement);return p===I||p==="y"}return!0}).map(N=>[N.placement,N.overflows.filter(p=>p>0).reduce((p,P)=>p+P,0)]).sort((N,p)=>N[1]-p[1])[0])==null?void 0:E[0];H&&(A=H);break}case"initialPlacement":A=u;break}if(r!==A)return{reset:{placement:A}}}return{}}}};function za(e,a){return{top:e.top-a.height,right:e.right-a.width,bottom:e.bottom-a.height,left:e.left-a.width}}function $a(e){return Ua.some(a=>e[a]>=0)}var Za=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(a){let{rects:t,platform:o}=a,{strategy:r="referenceHidden",...s}=ge(e,a);switch(r){case"referenceHidden":{let l=await o.detectOverflow(a,{...s,elementContext:"reference"}),u=za(l,t.reference);return{data:{referenceHiddenOffsets:u,referenceHidden:$a(u)}}}case"escaped":{let l=await o.detectOverflow(a,{...s,altBoundary:!0}),u=za(l,t.floating);return{data:{escapedOffsets:u,escaped:$a(u)}}}default:return{}}}}};var Et=new Set(["left","top"]);async function Ht(e,a){let{placement:t,platform:o,elements:r}=e,s=await(o.isRTL==null?void 0:o.isRTL(r.floating)),l=xe(t),u=be(t),d=fe(t)==="y",f=Et.has(l)?-1:1,L=s&&d?-1:1,x=ge(a,e),{mainAxis:g,crossAxis:n,alignmentAxis:h}=typeof x=="number"?{mainAxis:x,crossAxis:0,alignmentAxis:null}:{mainAxis:x.mainAxis||0,crossAxis:x.crossAxis||0,alignmentAxis:x.alignmentAxis};return u&&typeof h=="number"&&(n=u==="end"?h*-1:h),d?{x:n*L,y:g*f}:{x:g*f,y:n*L}}var Ja=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(a){var t,o;let{x:r,y:s,placement:l,middlewareData:u}=a,d=await Ht(a,e);return l===((t=u.offset)==null?void 0:t.placement)&&(o=u.arrow)!=null&&o.alignmentOffset?{}:{x:r+d.x,y:s+d.y,data:{...d,placement:l}}}}},Qa=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(a){let{x:t,y:o,placement:r,platform:s}=a,{mainAxis:l=!0,crossAxis:u=!1,limiter:d={fn:c=>{let{x:I,y:b}=c;return{x:I,y:b}}},...f}=ge(e,a),L={x:t,y:o},x=await s.detectOverflow(a,f),g=fe(xe(r)),n=ha(g),h=L[n],S=L[g];if(l){let c=n==="y"?"top":"left",I=n==="y"?"bottom":"right",b=h+x[c],k=h-x[I];h=Je(b,h,k)}if(u){let c=g==="y"?"top":"left",I=g==="y"?"bottom":"right",b=S+x[c],k=S-x[I];S=Je(b,S,k)}let w=d.fn({...a,[n]:h,[g]:S});return{...w,data:{x:w.x-t,y:w.y-o,enabled:{[n]:l,[g]:u}}}}}};function ea(){return typeof window<"u"}function he(e){return et(e)?(e.nodeName||"").toLowerCase():"#document"}function X(e){var a;return(e==null||(a=e.ownerDocument)==null?void 0:a.defaultView)||window}function oe(e){var a;return(a=(et(e)?e.ownerDocument:e.document)||window.document)==null?void 0:a.documentElement}function et(e){return ea()?e instanceof Node||e instanceof X(e).Node:!1}function J(e){return ea()?e instanceof Element||e instanceof X(e).Element:!1}function re(e){return ea()?e instanceof HTMLElement||e instanceof X(e).HTMLElement:!1}function Ya(e){return!ea()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof X(e).ShadowRoot}var Ut=new Set(["inline","contents"]);function ke(e){let{overflow:a,overflowX:t,overflowY:o,display:r}=Q(e);return/auto|scroll|overlay|hidden|clip/.test(a+o+t)&&!Ut.has(r)}var Nt=new Set(["table","td","th"]);function at(e){return Nt.has(he(e))}var Wt=[":popover-open",":modal"];function Ve(e){return Wt.some(a=>{try{return e.matches(a)}catch{return!1}})}var Vt=["transform","translate","scale","rotate","perspective"],Gt=["transform","translate","scale","rotate","perspective","filter"],zt=["paint","layout","strict","content"];function aa(e){let a=ta(),t=J(e)?Q(e):e;return Vt.some(o=>t[o]?t[o]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!a&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!a&&(t.filter?t.filter!=="none":!1)||Gt.some(o=>(t.willChange||"").includes(o))||zt.some(o=>(t.contain||"").includes(o))}function tt(e){let a=ne(e);for(;re(a)&&!Ce(a);){if(aa(a))return a;if(Ve(a))return null;a=ne(a)}return null}function ta(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}var $t=new Set(["html","body","#document"]);function Ce(e){return $t.has(he(e))}function Q(e){return X(e).getComputedStyle(e)}function Ge(e){return J(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function ne(e){if(he(e)==="html")return e;let a=e.assignedSlot||e.parentNode||Ya(e)&&e.host||oe(e);return Ya(a)?a.host:a}function ot(e){let a=ne(e);return Ce(a)?e.ownerDocument?e.ownerDocument.body:e.body:re(a)&&ke(a)?a:ot(a)}function ye(e,a,t){var o;a===void 0&&(a=[]),t===void 0&&(t=!0);let r=ot(e),s=r===((o=e.ownerDocument)==null?void 0:o.body),l=X(r);if(s){let u=oa(l);return a.concat(l,l.visualViewport||[],ke(r)?r:[],u&&t?ye(u):[])}return a.concat(r,ye(r,[],t))}function oa(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function ut(e){let a=Q(e),t=parseFloat(a.width)||0,o=parseFloat(a.height)||0,r=re(e),s=r?e.offsetWidth:t,l=r?e.offsetHeight:o,u=Ne(t)!==s||Ne(o)!==l;return u&&(t=s,o=l),{width:t,height:o,$:u}}function wa(e){return J(e)?e:e.contextElement}function Pe(e){let a=wa(e);if(!re(a))return te(1);let t=a.getBoundingClientRect(),{width:o,height:r,$:s}=ut(a),l=(s?Ne(t.width):t.width)/o,u=(s?Ne(t.height):t.height)/r;return(!l||!Number.isFinite(l))&&(l=1),(!u||!Number.isFinite(u))&&(u=1),{x:l,y:u}}var Xt=te(0);function dt(e){let a=X(e);return!ta()||!a.visualViewport?Xt:{x:a.visualViewport.offsetLeft,y:a.visualViewport.offsetTop}}function Kt(e,a,t){return a===void 0&&(a=!1),!t||a&&t!==X(e)?!1:a}function Se(e,a,t,o){a===void 0&&(a=!1),t===void 0&&(t=!1);let r=e.getBoundingClientRect(),s=wa(e),l=te(1);a&&(o?J(o)&&(l=Pe(o)):l=Pe(e));let u=Kt(s,t,o)?dt(s):te(0),d=(r.left+u.x)/l.x,f=(r.top+u.y)/l.y,L=r.width/l.x,x=r.height/l.y;if(s){let g=X(s),n=o&&J(o)?X(o):o,h=g,S=oa(h);for(;S&&o&&n!==h;){let w=Pe(S),c=S.getBoundingClientRect(),I=Q(S),b=c.left+(S.clientLeft+parseFloat(I.paddingLeft))*w.x,k=c.top+(S.clientTop+parseFloat(I.paddingTop))*w.y;d*=w.x,f*=w.y,L*=w.x,x*=w.y,d+=b,f+=k,h=X(S),S=oa(h)}}return Ie({width:L,height:x,x:d,y:f})}function ra(e,a){let t=Ge(e).scrollLeft;return a?a.left+t:Se(oe(e)).left+t}function ft(e,a){let t=e.getBoundingClientRect(),o=t.left+a.scrollLeft-ra(e,t),r=t.top+a.scrollTop;return{x:o,y:r}}function jt(e){let{elements:a,rect:t,offsetParent:o,strategy:r}=e,s=r==="fixed",l=oe(o),u=a?Ve(a.floating):!1;if(o===l||u&&s)return t;let d={scrollLeft:0,scrollTop:0},f=te(1),L=te(0),x=re(o);if((x||!x&&!s)&&((he(o)!=="body"||ke(l))&&(d=Ge(o)),re(o))){let n=Se(o);f=Pe(o),L.x=n.x+o.clientLeft,L.y=n.y+o.clientTop}let g=l&&!x&&!s?ft(l,d):te(0);return{width:t.width*f.x,height:t.height*f.y,x:t.x*f.x-d.scrollLeft*f.x+L.x+g.x,y:t.y*f.y-d.scrollTop*f.y+L.y+g.y}}function _t(e){return Array.from(e.getClientRects())}function Zt(e){let a=oe(e),t=Ge(e),o=e.ownerDocument.body,r=de(a.scrollWidth,a.clientWidth,o.scrollWidth,o.clientWidth),s=de(a.scrollHeight,a.clientHeight,o.scrollHeight,o.clientHeight),l=-t.scrollLeft+ra(e),u=-t.scrollTop;return Q(o).direction==="rtl"&&(l+=de(a.clientWidth,o.clientWidth)-r),{width:r,height:s,x:l,y:u}}var rt=25;function Jt(e,a){let t=X(e),o=oe(e),r=t.visualViewport,s=o.clientWidth,l=o.clientHeight,u=0,d=0;if(r){s=r.width,l=r.height;let L=ta();(!L||L&&a==="fixed")&&(u=r.offsetLeft,d=r.offsetTop)}let f=ra(o);if(f<=0){let L=o.ownerDocument,x=L.body,g=getComputedStyle(x),n=L.compatMode==="CSS1Compat"&&parseFloat(g.marginLeft)+parseFloat(g.marginRight)||0,h=Math.abs(o.clientWidth-x.clientWidth-n);h<=rt&&(s-=h)}else f<=rt&&(s+=f);return{width:s,height:l,x:u,y:d}}var Qt=new Set(["absolute","fixed"]);function Yt(e,a){let t=Se(e,!0,a==="fixed"),o=t.top+e.clientTop,r=t.left+e.clientLeft,s=re(e)?Pe(e):te(1),l=e.clientWidth*s.x,u=e.clientHeight*s.y,d=r*s.x,f=o*s.y;return{width:l,height:u,x:d,y:f}}function st(e,a,t){let o;if(a==="viewport")o=Jt(e,t);else if(a==="document")o=Zt(oe(e));else if(J(a))o=Yt(a,t);else{let r=dt(e);o={x:a.x-r.x,y:a.y-r.y,width:a.width,height:a.height}}return Ie(o)}function nt(e,a){let t=ne(e);return t===a||!J(t)||Ce(t)?!1:Q(t).position==="fixed"||nt(t,a)}function eo(e,a){let t=a.get(e);if(t)return t;let o=ye(e,[],!1).filter(u=>J(u)&&he(u)!=="body"),r=null,s=Q(e).position==="fixed",l=s?ne(e):e;for(;J(l)&&!Ce(l);){let u=Q(l),d=aa(l);!d&&u.position==="fixed"&&(r=null),(s?!d&&!r:!d&&u.position==="static"&&!!r&&Qt.has(r.position)||ke(l)&&!d&&nt(e,l))?o=o.filter(L=>L!==l):r=u,l=ne(l)}return a.set(e,o),o}function ao(e){let{element:a,boundary:t,rootBoundary:o,strategy:r}=e,l=[...t==="clippingAncestors"?Ve(a)?[]:eo(a,this._c):[].concat(t),o],u=l[0],d=l.reduce((f,L)=>{let x=st(a,L,r);return f.top=de(x.top,f.top),f.right=me(x.right,f.right),f.bottom=me(x.bottom,f.bottom),f.left=de(x.left,f.left),f},st(a,u,r));return{width:d.right-d.left,height:d.bottom-d.top,x:d.left,y:d.top}}function to(e){let{width:a,height:t}=ut(e);return{width:a,height:t}}function oo(e,a,t){let o=re(a),r=oe(a),s=t==="fixed",l=Se(e,!0,s,a),u={scrollLeft:0,scrollTop:0},d=te(0);function f(){d.x=ra(r)}if(o||!o&&!s)if((he(a)!=="body"||ke(r))&&(u=Ge(a)),o){let n=Se(a,!0,s,a);d.x=n.x+a.clientLeft,d.y=n.y+a.clientTop}else r&&f();s&&!o&&r&&f();let L=r&&!o&&!s?ft(r,u):te(0),x=l.left+u.scrollLeft-d.x-L.x,g=l.top+u.scrollTop-d.y-L.y;return{x,y:g,width:l.width,height:l.height}}function Sa(e){return Q(e).position==="static"}function lt(e,a){if(!re(e)||Q(e).position==="fixed")return null;if(a)return a(e);let t=e.offsetParent;return oe(e)===t&&(t=t.ownerDocument.body),t}function it(e,a){let t=X(e);if(Ve(e))return t;if(!re(e)){let r=ne(e);for(;r&&!Ce(r);){if(J(r)&&!Sa(r))return r;r=ne(r)}return t}let o=lt(e,a);for(;o&&at(o)&&Sa(o);)o=lt(o,a);return o&&Ce(o)&&Sa(o)&&!aa(o)?t:o||tt(e)||t}var ro=async function(e){let a=this.getOffsetParent||it,t=this.getDimensions,o=await t(e.floating);return{reference:oo(e.reference,await a(e.floating),e.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function so(e){return Q(e).direction==="rtl"}var lo={convertOffsetParentRelativeRectToViewportRelativeRect:jt,getDocumentElement:oe,getClippingRect:ao,getOffsetParent:it,getElementRects:ro,getClientRects:_t,getDimensions:to,getScale:Pe,isElement:J,isRTL:so};function ct(e,a){return e.x===a.x&&e.y===a.y&&e.width===a.width&&e.height===a.height}function uo(e,a){let t=null,o,r=oe(e);function s(){var u;clearTimeout(o),(u=t)==null||u.disconnect(),t=null}function l(u,d){u===void 0&&(u=!1),d===void 0&&(d=1),s();let f=e.getBoundingClientRect(),{left:L,top:x,width:g,height:n}=f;if(u||a(),!g||!n)return;let h=We(x),S=We(r.clientWidth-(L+g)),w=We(r.clientHeight-(x+n)),c=We(L),b={rootMargin:-h+"px "+-S+"px "+-w+"px "+-c+"px",threshold:de(0,me(1,d))||1},k=!0;function C(M){let T=M[0].intersectionRatio;if(T!==d){if(!k)return l();T?l(!1,T):o=setTimeout(()=>{l(!1,1e-7)},1e3)}T===1&&!ct(f,e.getBoundingClientRect())&&l(),k=!1}try{t=new IntersectionObserver(C,{...b,root:r.ownerDocument})}catch{t=new IntersectionObserver(C,b)}t.observe(e)}return l(!0),s}function pt(e,a,t,o){o===void 0&&(o={});let{ancestorScroll:r=!0,ancestorResize:s=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:u=typeof IntersectionObserver=="function",animationFrame:d=!1}=o,f=wa(e),L=r||s?[...f?ye(f):[],...ye(a)]:[];L.forEach(c=>{r&&c.addEventListener("scroll",t,{passive:!0}),s&&c.addEventListener("resize",t)});let x=f&&u?uo(f,t):null,g=-1,n=null;l&&(n=new ResizeObserver(c=>{let[I]=c;I&&I.target===f&&n&&(n.unobserve(a),cancelAnimationFrame(g),g=requestAnimationFrame(()=>{var b;(b=n)==null||b.observe(a)})),t()}),f&&!d&&n.observe(f),n.observe(a));let h,S=d?Se(e):null;d&&w();function w(){let c=Se(e);S&&!ct(S,c)&&t(),S=c,h=requestAnimationFrame(w)}return t(),()=>{var c;L.forEach(I=>{r&&I.removeEventListener("scroll",t),s&&I.removeEventListener("resize",t)}),x?.(),(c=n)==null||c.disconnect(),n=null,d&&cancelAnimationFrame(h)}}var mt=Ja;var xt=Qa,Lt=_a;var gt=Za,It=ja;var ht=(e,a,t)=>{let o=new Map,r={platform:lo,...t},s={...r.platform,_c:o};return Ka(e,a,{...r,platform:s})};function fo(e){let a=e.getBoundingClientRect(),t=window.innerWidth,o=window.innerHeight;if(!(a.width>t*.8||a.height>o*.8))return e;let s=Math.max(a.left,0),l=Math.max(a.top,0),u=Math.min(a.right,t),d=Math.min(a.bottom,o),f=(s+u)/2,L=(l+d)/2;return{getBoundingClientRect(){return{width:0,height:0,x:f,y:L,top:L,left:f,right:f,bottom:L}}}}function Ct(e,a,t){let o=e.getBoundingClientRect();o.width>window.innerWidth*.8||o.height>window.innerHeight*.8||e.scrollIntoView({behavior:"smooth",block:"center",inline:"center"});let s=document.createElement("div");if(s.className="syntro-tooltip",s.setAttribute("role","tooltip"),s.innerHTML=_(t.html),!t.trigger||t.trigger==="immediate"){let c=document.createElement("button");c.className="syntro-tooltip-close",c.setAttribute("aria-label","Close"),c.textContent="\xD7",Object.assign(c.style,{position:"absolute",top:"4px",right:"4px",background:"none",border:"none",color:"inherit",fontSize:"16px",lineHeight:"1",cursor:"pointer",opacity:"0.6",padding:"2px 4px"}),c.addEventListener("mouseenter",()=>{c.style.opacity="1"}),c.addEventListener("mouseleave",()=>{c.style.opacity="0.6"}),c.addEventListener("click",()=>w.destroy()),s.style.position="relative",s.appendChild(c)}let l=s.querySelectorAll("[data-syntro-action]"),u=c=>{let b=c.currentTarget.getAttribute("data-syntro-action");b&&t.onAction&&t.onAction(b)};l.forEach(c=>c.addEventListener("click",u));let d=document.createElement("div");d.className="syntro-tooltip-arrow",s.appendChild(d),a.appendChild(s);let f=[mt(t.offsetPx??8),Lt(),xt({padding:8}),gt(),It({element:d})],L=t.placement&&t.placement!=="auto"?t.placement:"top",x=pt(e,s,async()=>{let c=fo(e),I=await ht(c,s,{placement:L,middleware:f}),{x:b,y:k,strategy:C,middlewareData:M,placement:T}=I;if(Object.assign(s.style,{left:`${b}px`,top:`${k}px`,position:C}),M.arrow){let{x:G,y:B}=M.arrow,v=T.split("-")[0],F={top:"bottom",right:"left",bottom:"top",left:"right"};Object.assign(d.style,{left:G!=null?`${G}px`:"",top:B!=null?`${B}px`:"",right:"",bottom:"",[F[v]]:"-4px"});let D={top:"0deg",right:"90deg",bottom:"180deg",left:"270deg"};d.style.transform=`rotate(${D[v]||"0deg"})`}}),g=c=>{c.key==="Escape"&&w.destroy()};window.addEventListener("keydown",g);let n=[];if(t.blocking){Array.from(document.body.children).forEach(I=>{I!==a&&I.getAttribute("inert")===null&&(I.setAttribute("inert",""),n.push(I.id||I.tagName))});let c=Array.from(s.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'));if(c.length>0){let I=c[0],b=c[c.length-1],k=C=>{C.key==="Tab"&&(C.shiftKey?document.activeElement===I&&(b.focus(),C.preventDefault()):document.activeElement===b&&(I.focus(),C.preventDefault()))};s.addEventListener("keydown",k),requestAnimationFrame(()=>I.focus())}}let S=(()=>{if(t.trigger==="hover"){let c=()=>{s.style.visibility="visible",s.style.opacity="1"},I=()=>{s.style.visibility="hidden",s.style.opacity="0"};return s.style.visibility="hidden",s.style.opacity="0",s.style.transition="opacity 200ms ease, visibility 200ms",e.addEventListener("mouseenter",c),e.addEventListener("mouseleave",I),e.addEventListener("focus",c),e.addEventListener("blur",I),()=>{e.removeEventListener("mouseenter",c),e.removeEventListener("mouseleave",I),e.removeEventListener("focus",c),e.removeEventListener("blur",I)}}if(t.trigger==="click"){let c=()=>{s.style.visibility==="visible"?w.destroy():(s.style.visibility="visible",s.style.opacity="1")};return s.style.visibility="hidden",s.style.opacity="0",s.style.transition="opacity 200ms ease, visibility 200ms",e.addEventListener("click",c),()=>e.removeEventListener("click",c)}return s.style.opacity="0",s.style.transition="opacity 200ms ease",requestAnimationFrame(()=>{s.style.opacity="1"}),()=>{}})(),w={el:s,destroy(){x(),S(),window.removeEventListener("keydown",g),l.forEach(c=>c.removeEventListener("click",u)),t.blocking&&Array.from(document.body.children).forEach(c=>{c!==a&&c.removeAttribute("inert")}),s.style.opacity="0",setTimeout(()=>s.remove(),200)}};return w}var no=async(e,a)=>{let t=a.resolveAnchor(e.anchorId);if(!t)throw new Error(`Anchor not found: ${e.anchorId}`);let o=Oa(t,a.overlayRoot,{paddingPx:e.style?.paddingPx??12,radiusPx:e.style?.radiusPx??12,scrimOpacity:e.style?.scrimOpacity??.55,ringColor:e.style?.color,blocking:e.blocking??!1,onClickOutside:e.onClickOutside??!0,onEsc:e.onEsc??!0});return a.publishEvent("action.applied",{id:a.generateId(),kind:"overlays:highlight",anchorId:e.anchorId}),{cleanup:()=>{o.destroy()}}},io=async(e,a)=>{let t=a.resolveAnchor(e.anchorId);if(!t)throw new Error(`Anchor not found: ${e.anchorId}`);let o=e.duration??2e3;if(!document.querySelector("[data-syntro-pulse-styles]")){let l=document.createElement("style");l.setAttribute("data-syntro-pulse-styles",""),l.textContent=`
|
|
54
|
-
@keyframes syntro-pulse-anim {
|
|
55
|
-
0%, 100% {
|
|
56
|
-
box-shadow: 0 0 0 0 rgba(79, 70, 229, 0.4);
|
|
57
|
-
}
|
|
58
|
-
50% {
|
|
59
|
-
box-shadow: 0 0 0 8px rgba(79, 70, 229, 0);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
`,document.head.appendChild(l)}let r=t.style.animation;t.style.animation="syntro-pulse-anim 1s cubic-bezier(0.4, 0, 0.6, 1) infinite",t.setAttribute("data-syntro-pulse","true");let s=setTimeout(()=>{t.style.animation=r,t.removeAttribute("data-syntro-pulse")},o);return a.publishEvent("action.applied",{id:a.generateId(),kind:"overlays:pulse",anchorId:e.anchorId,duration:o}),{cleanup:()=>{clearTimeout(s),t.style.animation=r,t.removeAttribute("data-syntro-pulse")}}},co=async(e,a)=>{let t=a.resolveAnchor(e.anchorId);if(!t)throw new Error(`Anchor not found: ${e.anchorId}`);let o=document.createElement("div");o.textContent=e.content,o.setAttribute("data-syntro-badge",e.anchorId),Object.assign(o.style,{position:"absolute",padding:"2px 6px",fontSize:"12px",fontWeight:"600",lineHeight:"1",color:"white",background:"var(--syntro-accent, #4f46e5)",borderRadius:"9999px",pointerEvents:"none",zIndex:"2147483646",whiteSpace:"nowrap"});let r=e.position??"top-right",s=t.style.position;switch(getComputedStyle(t).position==="static"&&(t.style.position="relative"),t.appendChild(o),r){case"top-left":Object.assign(o.style,{top:"-8px",left:"-8px"});break;case"top-right":Object.assign(o.style,{top:"-8px",right:"-8px"});break;case"bottom-left":Object.assign(o.style,{bottom:"-8px",left:"-8px"});break;case"bottom-right":Object.assign(o.style,{bottom:"-8px",right:"-8px"});break}return a.publishEvent("action.applied",{id:a.generateId(),kind:"overlays:badge",anchorId:e.anchorId,content:e.content,position:r}),{cleanup:()=>{o.remove(),s!==void 0&&(t.style.position=s)},updateFn:l=>{"content"in l&&typeof l.content=="string"&&(o.textContent=l.content)}}},po=async(e,a)=>{let t=a.resolveAnchor(e.anchorId);if(!t)throw new Error(`Anchor not found: ${e.anchorId}`);let{content:o}=e,r="";if(o.title&&(r+=`<div class="syntro-tt-title">${_(o.title)}</div>`),r+=`<div class="syntro-tt-body">${_(o.body)}</div>`,o.ctaButtons&&o.ctaButtons.length>0){r+='<div class="syntro-tt-actions">';for(let l of o.ctaButtons){let u=l.primary??!1;r+=`
|
|
63
|
-
<button
|
|
64
|
-
class="syntro-tt-btn ${u?"syntro-tt-btn-primary":""}"
|
|
65
|
-
data-syntro-action="${_(l.actionId)}"
|
|
66
|
-
>
|
|
67
|
-
${_(l.label)}
|
|
68
|
-
</button>
|
|
69
|
-
`}r+="</div>"}else o.cta&&(r+=`<div class="syntro-tt-actions">
|
|
70
|
-
<button class="syntro-tt-btn syntro-tt-btn-primary" data-syntro-action="cta">
|
|
71
|
-
${_(o.cta.label)}
|
|
72
|
-
</button>
|
|
73
|
-
</div>`);let s=Ct(t,a.overlayRoot,{html:r,placement:e.placement??"top",trigger:e.trigger??"immediate",onAction:l=>{if(l==="dismiss"){s.destroy();return}if(l==="cta"&&o.cta)a.publishEvent("action.cta_clicked",{anchorId:e.anchorId,ctaLabel:o.cta.label});else if(o.ctaButtons){let u=o.ctaButtons.find(d=>d.actionId===l);u&&a.publishEvent("action.tooltip_cta_clicked",{anchorId:e.anchorId,actionId:l,label:u.label})}}});return a.publishEvent("action.applied",{id:a.generateId(),kind:"overlays:tooltip",anchorId:e.anchorId,trigger:e.trigger??"immediate"}),{cleanup:()=>{s.destroy()}}},ba=[{kind:"overlays:highlight",executor:no},{kind:"overlays:pulse",executor:io},{kind:"overlays:badge",executor:co},{kind:"overlays:tooltip",executor:po},{kind:"overlays:modal",executor:qa}],ze={id:"adaptive-overlays",version:"1.0.0",name:"Overlays",description:"Tooltips, highlights, badges, modals, and visual overlays",executors:ba};var St={id:ze.id,version:ze.version,name:ze.name,description:ze.description,runtime:{actions:ba.map(({kind:e,executor:a})=>({kind:e,executor:a}))},editor:Ia,metadata:{isBuiltIn:!0}};if(typeof window<"u"){let e=window.SynOS?.appRegistry;e&&typeof e.register=="function"&&e.register(St)}var yl=St;export{yl as default,St as manifest};
|
|
74
|
-
/*! Bundled license information:
|
|
75
|
-
|
|
76
|
-
lucide-react/dist/esm/shared/src/utils.js:
|
|
77
|
-
lucide-react/dist/esm/defaultAttributes.js:
|
|
78
|
-
lucide-react/dist/esm/Icon.js:
|
|
79
|
-
lucide-react/dist/esm/createLucideIcon.js:
|
|
80
|
-
lucide-react/dist/esm/icons/message-square.js:
|
|
81
|
-
lucide-react/dist/esm/icons/route.js:
|
|
82
|
-
lucide-react/dist/esm/icons/sparkles.js:
|
|
83
|
-
lucide-react/dist/esm/icons/square.js:
|
|
84
|
-
lucide-react/dist/esm/icons/tag.js:
|
|
85
|
-
lucide-react/dist/esm/icons/zap.js:
|
|
86
|
-
lucide-react/dist/esm/lucide-react.js:
|
|
87
|
-
(**
|
|
88
|
-
* @license lucide-react v0.460.0 - ISC
|
|
89
|
-
*
|
|
90
|
-
* This source code is licensed under the ISC license.
|
|
91
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
92
|
-
*)
|
|
93
|
-
*/
|
|
94
|
-
//# sourceMappingURL=index.js.map
|