@buoy-gg/shared-ui 7.0.41 → 7.0.42
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/dataViewer.js +1 -9
- package/floating.js +1 -2
- package/history.js +1 -7
- package/hooks.js +1 -7
- package/lib/commonjs/JsModal.js +1 -1766
- package/lib/commonjs/JsModal.web.js +1 -1589
- package/lib/commonjs/clipboard/autoDetectClipboard.js +1 -67
- package/lib/commonjs/clipboard/clipboard-impl.js +1 -128
- package/lib/commonjs/clipboard/clipboard-impl.web.js +1 -21
- package/lib/commonjs/clipboard/copyToClipboard.js +1 -64
- package/lib/commonjs/clipboard/index.js +1 -25
- package/lib/commonjs/colors/index.js +1 -49
- package/lib/commonjs/context/HintsContext.js +1 -49
- package/lib/commonjs/context/index.js +1 -24
- package/lib/commonjs/dataViewer/CyberpunkInput.js +1 -388
- package/lib/commonjs/dataViewer/DataTreeActionBar.js +1 -390
- package/lib/commonjs/dataViewer/DataTreeActionDock.js +1 -226
- package/lib/commonjs/dataViewer/DataViewer.js +1 -158
- package/lib/commonjs/dataViewer/DiffSummary.js +1 -134
- package/lib/commonjs/dataViewer/IndentGuides.js +1 -128
- package/lib/commonjs/dataViewer/IndentGuidesOverlay.js +1 -104
- package/lib/commonjs/dataViewer/JsonStringNotice.js +1 -59
- package/lib/commonjs/dataViewer/LiveExplorer.js +1 -943
- package/lib/commonjs/dataViewer/SplitDiffViewer.js +1 -421
- package/lib/commonjs/dataViewer/ThemedSplitView.js +1 -642
- package/lib/commonjs/dataViewer/TimestampDeltaBar.js +1 -96
- package/lib/commonjs/dataViewer/TypeLegend.js +1 -111
- package/lib/commonjs/dataViewer/ValueEditModal.js +1 -386
- package/lib/commonjs/dataViewer/VirtualizedDataExplorer.js +1 -1270
- package/lib/commonjs/dataViewer/diffThemes.js +1 -113
- package/lib/commonjs/dataViewer/index.js +1 -320
- package/lib/commonjs/dataViewer/jsonOps.js +1 -320
- package/lib/commonjs/dataViewer/jsonStringValue.js +1 -94
- package/lib/commonjs/dataViewer/lineDiff.js +1 -568
- package/lib/commonjs/dataViewer/nestedPath.js +1 -115
- package/lib/commonjs/dataViewer/objectDiff.js +1 -304
- package/lib/commonjs/dataViewer/timestampDiff.js +1 -146
- package/lib/commonjs/dataViewer/tree/TreeDiffViewer.js +1 -915
- package/lib/commonjs/dataViewer/treeActions.js +1 -168
- package/lib/commonjs/dataViewer/useTreeDraft.js +1 -125
- package/lib/commonjs/dataViewer/useTreeEditor.js +1 -105
- package/lib/commonjs/env/EnvironmentIndicator.js +1 -129
- package/lib/commonjs/env/EnvironmentIndicator.web.js +1 -114
- package/lib/commonjs/env/EnvironmentSelector.js +1 -205
- package/lib/commonjs/env/EnvironmentSelectorInline.js +1 -299
- package/lib/commonjs/env/EnvironmentSelectorInline.web.js +1 -178
- package/lib/commonjs/history/HistoryProvider.js +1 -246
- package/lib/commonjs/history/components/HistoryEntryRow.js +1 -146
- package/lib/commonjs/history/components/HistoryList.js +1 -174
- package/lib/commonjs/history/components/index.js +1 -25
- package/lib/commonjs/history/index.js +1 -61
- package/lib/commonjs/history/types.js +1 -5
- package/lib/commonjs/hooks/index.js +1 -77
- package/lib/commonjs/hooks/safe-area-impl.js +1 -28
- package/lib/commonjs/hooks/useChangeLog.js +1 -55
- package/lib/commonjs/hooks/useDeviceInfo.js +1 -524
- package/lib/commonjs/hooks/useEventStoreEvents.js +1 -65
- package/lib/commonjs/hooks/useFilterManager.js +1 -136
- package/lib/commonjs/hooks/usePersistedState.js +1 -106
- package/lib/commonjs/hooks/useSafeAreaInsets.js +1 -250
- package/lib/commonjs/hooks/useSafeAreaInsets.web.js +1 -41
- package/lib/commonjs/icons/BenchmarkIcon.js +1 -109
- package/lib/commonjs/icons/EnvLaptopIcon.js +1 -204
- package/lib/commonjs/icons/IconBackground.js +1 -279
- package/lib/commonjs/icons/ReactQueryIcon.js +1 -17
- package/lib/commonjs/icons/RenderCountIcon.js +1 -147
- package/lib/commonjs/icons/RouteMapIcon.js +1 -250
- package/lib/commonjs/icons/SentryBugIcon.js +1 -19
- package/lib/commonjs/icons/StackPulseIcon.js +1 -158
- package/lib/commonjs/icons/StorageStackIcon.js +1 -156
- package/lib/commonjs/icons/WifiCircuitIcon.js +1 -169
- package/lib/commonjs/icons/index.js +1 -840
- package/lib/commonjs/icons/lucide-icons-original-full.js +1 -3248
- package/lib/commonjs/icons/lucide-icons.js +1 -2476
- package/lib/commonjs/icons/primitives/GlobeIcon.js +1 -66
- package/lib/commonjs/icons/primitives/icon-primitives.js +1 -169
- package/lib/commonjs/icons/primitives/index.js +1 -49
- package/lib/commonjs/index.js +1 -1132
- package/lib/commonjs/license/AccountSetup.js +1 -35
- package/lib/commonjs/license/AccountSetup.web.js +2 -83
- package/lib/commonjs/license/AccountSetupContent.js +1 -482
- package/lib/commonjs/license/FeatureGate.js +1 -788
- package/lib/commonjs/license/FreeAccountPrompt.js +1 -59
- package/lib/commonjs/license/LicenseEntryModal.js +2 -387
- package/lib/commonjs/license/accountRuntime.js +1 -8
- package/lib/commonjs/license/accountRuntime.web.js +1 -9
- package/lib/commonjs/license/index.js +1 -106
- package/lib/commonjs/license/licenseModule.js +1 -121
- package/lib/commonjs/license/openPricing.js +1 -36
- package/lib/commonjs/license/tierLimits.js +1 -128
- package/lib/commonjs/logger/index-sentry.js +1 -245
- package/lib/commonjs/logger/index.js +1 -62
- package/lib/commonjs/logger/logDump.js +1 -19
- package/lib/commonjs/logger/types.js +1 -38
- package/lib/commonjs/settings/components/BubbleSettingsSection.js +1 -384
- package/lib/commonjs/settings/index.js +1 -24
- package/lib/commonjs/storage/definePersistedSetting.js +1 -67
- package/lib/commonjs/storage/devToolsStorageKeys.js +1 -359
- package/lib/commonjs/storage/index.js +1 -25
- package/lib/commonjs/stores/BaseEventStore.js +1 -343
- package/lib/commonjs/stores/ChangeLog.js +1 -197
- package/lib/commonjs/stores/createToolStore.js +1 -193
- package/lib/commonjs/stores/floatingToolStore.js +1 -71
- package/lib/commonjs/stores/floatingToolStore.test.js +1 -112
- package/lib/commonjs/stores/ignoredPatternsCore.js +1 -75
- package/lib/commonjs/stores/ignoredPatternsStore.js +1 -16
- package/lib/commonjs/stores/ignoredPatternsStore.shared.js +1 -205
- package/lib/commonjs/stores/ignoredPatternsStore.web.js +1 -16
- package/lib/commonjs/stores/index.js +1 -51
- package/lib/commonjs/sync/keyedArrays.js +1 -209
- package/lib/commonjs/sync/toolActionRegistry.js +1 -249
- package/lib/commonjs/sync/toolAttention.test.js +1 -51
- package/lib/commonjs/sync/toolSyncAdapter.js +1 -63
- package/lib/commonjs/sync/toolUiBridge.js +1 -132
- package/lib/commonjs/sync/typedEdit.js +1 -228
- package/lib/commonjs/sync/valuePath.js +1 -337
- package/lib/commonjs/sync/valueShape.js +1 -161
- package/lib/commonjs/sync/wireBudget.js +1 -97
- package/lib/commonjs/sync/wireForm.js +1 -172
- package/lib/commonjs/tools/defineTool.js +1 -79
- package/lib/commonjs/types/types.d.js +1 -1
- package/lib/commonjs/types/types.js +1 -37
- package/lib/commonjs/ui/backgrounds/BackgroundSwitcher.js +1 -354
- package/lib/commonjs/ui/backgrounds/ToolBackground.js +1 -76
- package/lib/commonjs/ui/backgrounds/backgroundStore.js +1 -130
- package/lib/commonjs/ui/backgrounds/index.js +1 -167
- package/lib/commonjs/ui/backgrounds/primitives.js +1 -369
- package/lib/commonjs/ui/backgrounds/registry.js +1 -98
- package/lib/commonjs/ui/backgrounds/rng.js +1 -93
- package/lib/commonjs/ui/backgrounds/skyClock.js +1 -45
- package/lib/commonjs/ui/backgrounds/types.js +1 -1
- package/lib/commonjs/ui/backgrounds/variants/daylight.js +1 -453
- package/lib/commonjs/ui/backgrounds/variants/deepField.js +1 -381
- package/lib/commonjs/ui/backgrounds/variants/hyperspace.js +1 -218
- package/lib/commonjs/ui/backgrounds/variants/liveSky.js +1 -898
- package/lib/commonjs/ui/backgrounds/variants/meteors.js +1 -401
- package/lib/commonjs/ui/backgrounds/variants/moonlight.js +1 -472
- package/lib/commonjs/ui/backgrounds/variants/underwater.js +1 -757
- package/lib/commonjs/ui/backgrounds/variants/wormhole/motion.js +1 -48
- package/lib/commonjs/ui/backgrounds/variants/wormhole/textures.js +1 -3
- package/lib/commonjs/ui/backgrounds/variants/wormhole.js +1 -136
- package/lib/commonjs/ui/components/BackButton.js +1 -47
- package/lib/commonjs/ui/components/Badge.js +1 -226
- package/lib/commonjs/ui/components/ChangeRow.js +1 -111
- package/lib/commonjs/ui/components/ChipStrip.js +1 -94
- package/lib/commonjs/ui/components/ClipboardHintBanner.js +1 -149
- package/lib/commonjs/ui/components/CollapsibleSection.js +1 -170
- package/lib/commonjs/ui/components/CompactFilterChips.js +1 -114
- package/lib/commonjs/ui/components/CompactRow.js +1 -295
- package/lib/commonjs/ui/components/CopyButton.js +1 -307
- package/lib/commonjs/ui/components/DataInspector.js +1 -323
- package/lib/commonjs/ui/components/DetailView.js +1 -358
- package/lib/commonjs/ui/components/DetailViewToggle.js +1 -130
- package/lib/commonjs/ui/components/DevToolsCard.js +1 -126
- package/lib/commonjs/ui/components/DraggableHeader.js +1 -215
- package/lib/commonjs/ui/components/DynamicFilterView.js +1 -758
- package/lib/commonjs/ui/components/EmptyState.js +1 -151
- package/lib/commonjs/ui/components/EntityFilterView.js +1 -355
- package/lib/commonjs/ui/components/EventHistoryViewer/CompareBar.js +1 -211
- package/lib/commonjs/ui/components/EventHistoryViewer/DiffModeTabs.js +1 -99
- package/lib/commonjs/ui/components/EventHistoryViewer/EventHistoryViewer.js +1 -184
- package/lib/commonjs/ui/components/EventHistoryViewer/EventPickerModal.js +1 -208
- package/lib/commonjs/ui/components/EventHistoryViewer/ViewToggleCards.js +1 -137
- package/lib/commonjs/ui/components/EventHistoryViewer/index.js +1 -40
- package/lib/commonjs/ui/components/EventHistoryViewer/types.js +1 -5
- package/lib/commonjs/ui/components/EventListItem.js +1 -247
- package/lib/commonjs/ui/components/EventStepperFooter.js +1 -185
- package/lib/commonjs/ui/components/ExpandablePopover.js +1 -381
- package/lib/commonjs/ui/components/ExpandedInfoRow.js +1 -108
- package/lib/commonjs/ui/components/ExportPreview.js +1 -174
- package/lib/commonjs/ui/components/FilterComponents.js +1 -291
- package/lib/commonjs/ui/components/GripVerticalIcon.js +1 -65
- package/lib/commonjs/ui/components/HeaderSearchButton.js +1 -50
- package/lib/commonjs/ui/components/InfoRow.js +1 -91
- package/lib/commonjs/ui/components/ListItem.js +1 -173
- package/lib/commonjs/ui/components/ModalHeader.js +1 -305
- package/lib/commonjs/ui/components/ModalHintBanner.js +1 -147
- package/lib/commonjs/ui/components/Pill.js +1 -115
- package/lib/commonjs/ui/components/PowerToggleButton.js +1 -78
- package/lib/commonjs/ui/components/SearchBar.js +1 -165
- package/lib/commonjs/ui/components/SectionHeader.js +1 -129
- package/lib/commonjs/ui/components/StatsCard.js +1 -198
- package/lib/commonjs/ui/components/StatusIndicator.js +1 -231
- package/lib/commonjs/ui/components/StorageTypeBadge.js +1 -97
- package/lib/commonjs/ui/components/TabSelector.js +1 -102
- package/lib/commonjs/ui/components/TimeDisplay.js +1 -142
- package/lib/commonjs/ui/components/ToggleRow.js +1 -116
- package/lib/commonjs/ui/components/ToolButton.js +1 -93
- package/lib/commonjs/ui/components/ToolEmptyState.js +1 -154
- package/lib/commonjs/ui/components/ToolFooter.js +1 -205
- package/lib/commonjs/ui/components/ValueTypeBadge.js +1 -147
- package/lib/commonjs/ui/components/WindowControls.js +1 -387
- package/lib/commonjs/ui/components/index.js +1 -507
- package/lib/commonjs/ui/components/windowDrag.js +1 -45
- package/lib/commonjs/ui/console/CyberpunkButtonOutline.js +1 -261
- package/lib/commonjs/ui/console/CyberpunkIconContainer.js +1 -186
- package/lib/commonjs/ui/console/CyberpunkSectionButton.js +1 -123
- package/lib/commonjs/ui/floating/FloatingTool.js +1 -1010
- package/lib/commonjs/ui/floating/FloatingTool.web.js +1 -601
- package/lib/commonjs/ui/floating/FloatingToolHost.js +1 -32
- package/lib/commonjs/ui/floating/FloatingToolHost.web.js +1 -28
- package/lib/commonjs/ui/floating/index.js +1 -105
- package/lib/commonjs/ui/floating/index.web.js +1 -105
- package/lib/commonjs/ui/floating/onboardingConstants.js +1 -70
- package/lib/commonjs/ui/floating/onboardingConstants.web.js +1 -34
- package/lib/commonjs/ui/fonts.js +1 -12
- package/lib/commonjs/ui/gameUI/components/GameUICollapsibleSection.js +1 -121
- package/lib/commonjs/ui/gameUI/components/GameUICompactStats.js +1 -336
- package/lib/commonjs/ui/gameUI/components/GameUIIssuesList.js +1 -284
- package/lib/commonjs/ui/gameUI/components/GameUIStatusHeader.js +1 -145
- package/lib/commonjs/ui/gameUI/constants/gameUIColors.js +1 -224
- package/lib/commonjs/ui/gameUI/constants/macOSDesignSystemColors.js +1 -224
- package/lib/commonjs/ui/gameUI/hooks/useGameUIAlertState.js +1 -110
- package/lib/commonjs/ui/gameUI/index.js +1 -72
- package/lib/commonjs/ui/index.js +1 -217
- package/lib/commonjs/ui/listPresets.js +1 -43
- package/lib/commonjs/ui/night/nightTheme.js +1 -130
- package/lib/commonjs/ui/night/primitives.js +1 -524
- package/lib/commonjs/ui/otto/OttoSceneView.js +1 -69
- package/lib/commonjs/ui/otto/OttoSprite.js +1 -510
- package/lib/commonjs/ui/otto/index.js +1 -60
- package/lib/commonjs/ui/otto/ottoEngine.js +1 -2737
- package/lib/commonjs/ui/otto/ottoScenes.js +1 -949
- package/lib/commonjs/ui/otto/ottoSheet.js +1 -191
- package/lib/commonjs/ui/toolTheme.js +1 -97
- package/lib/commonjs/utils/absoluteFill.js +1 -28
- package/lib/commonjs/utils/browserAsyncStorage.js +1 -157
- package/lib/commonjs/utils/browserNavigation.js +1 -116
- package/lib/commonjs/utils/devServer.js +1 -66
- package/lib/commonjs/utils/devServer.web.js +1 -10
- package/lib/commonjs/utils/displayValue.js +1 -41
- package/lib/commonjs/utils/domRuntime.js +1 -143
- package/lib/commonjs/utils/expoRouterModule.js +1 -51
- package/lib/commonjs/utils/expoRouterModule.web.js +1 -14
- package/lib/commonjs/utils/formatting/dataFormatting.js +1 -102
- package/lib/commonjs/utils/formatting/httpFormatting.js +1 -147
- package/lib/commonjs/utils/formatting/index.js +1 -27
- package/lib/commonjs/utils/getSafeAreaInsets.js +1 -40
- package/lib/commonjs/utils/getSafeAreaInsets.web.js +1 -35
- package/lib/commonjs/utils/index.js +1 -416
- package/lib/commonjs/utils/loadOptionalModule.js +1 -94
- package/lib/commonjs/utils/loadToolModule.js +1 -46
- package/lib/commonjs/utils/loadToolModule.web.js +1 -12
- package/lib/commonjs/utils/minimalSuperJSON.js +1 -347
- package/lib/commonjs/utils/modalStorage.js +1 -42
- package/lib/commonjs/utils/nativeWeb.js +1 -454
- package/lib/commonjs/utils/persistentStorage.js +1 -609
- package/lib/commonjs/utils/persistentStorage.web.js +1 -78
- package/lib/commonjs/utils/realNow.js +1 -0
- package/lib/commonjs/utils/reloadApp.js +1 -105
- package/lib/commonjs/utils/reloadPlatform.js +1 -37
- package/lib/commonjs/utils/reloadPlatform.web.js +1 -17
- package/lib/commonjs/utils/renderCaptureRegistry.js +1 -59
- package/lib/commonjs/utils/safeExpoRouter.js +1 -200
- package/lib/commonjs/utils/safeExpoRouter.web.js +1 -48
- package/lib/commonjs/utils/safeStringify.js +1 -229
- package/lib/commonjs/utils/snapshotProviderKit.js +1 -167
- package/lib/commonjs/utils/stateSnapshotRegistry.js +1 -71
- package/lib/commonjs/utils/stateTools.js +1 -160
- package/lib/commonjs/utils/subscribable.js +1 -113
- package/lib/commonjs/utils/subscriberCountNotifier.js +1 -72
- package/lib/commonjs/utils/time/RelativeTime.js +1 -31
- package/lib/commonjs/utils/time/TickContext.js +1 -43
- package/lib/commonjs/utils/time/formatRelativeTime.js +1 -34
- package/lib/commonjs/utils/time/index.js +1 -39
- package/lib/commonjs/utils/time/useRelativeTime.js +1 -36
- package/lib/commonjs/utils/toolModules.js +1 -25
- package/lib/commonjs/utils/typeHelpers.js +1 -142
- package/lib/commonjs/utils/valueFormatting.js +1 -140
- package/lib/module/JsModal.js +1 -1762
- package/lib/module/JsModal.web.js +1 -1585
- package/lib/module/clipboard/autoDetectClipboard.js +1 -45
- package/lib/module/clipboard/clipboard-impl.js +1 -121
- package/lib/module/clipboard/clipboard-impl.web.js +1 -14
- package/lib/module/clipboard/copyToClipboard.js +1 -60
- package/lib/module/clipboard/index.js +1 -5
- package/lib/module/colors/index.js +1 -21
- package/lib/module/context/HintsContext.js +1 -43
- package/lib/module/context/index.js +1 -3
- package/lib/module/dataViewer/CyberpunkInput.js +1 -384
- package/lib/module/dataViewer/DataTreeActionBar.js +1 -385
- package/lib/module/dataViewer/DataTreeActionDock.js +1 -222
- package/lib/module/dataViewer/DataViewer.js +1 -153
- package/lib/module/dataViewer/DiffSummary.js +1 -129
- package/lib/module/dataViewer/IndentGuides.js +1 -124
- package/lib/module/dataViewer/IndentGuidesOverlay.js +1 -99
- package/lib/module/dataViewer/JsonStringNotice.js +1 -54
- package/lib/module/dataViewer/LiveExplorer.js +1 -937
- package/lib/module/dataViewer/SplitDiffViewer.js +1 -416
- package/lib/module/dataViewer/ThemedSplitView.js +1 -637
- package/lib/module/dataViewer/TimestampDeltaBar.js +1 -91
- package/lib/module/dataViewer/TypeLegend.js +1 -105
- package/lib/module/dataViewer/ValueEditModal.js +1 -382
- package/lib/module/dataViewer/VirtualizedDataExplorer.js +1 -1265
- package/lib/module/dataViewer/diffThemes.js +1 -109
- package/lib/module/dataViewer/index.js +1 -57
- package/lib/module/dataViewer/jsonOps.js +1 -311
- package/lib/module/dataViewer/jsonStringValue.js +1 -89
- package/lib/module/dataViewer/lineDiff.js +1 -564
- package/lib/module/dataViewer/nestedPath.js +1 -109
- package/lib/module/dataViewer/objectDiff.js +1 -297
- package/lib/module/dataViewer/timestampDiff.js +1 -139
- package/lib/module/dataViewer/tree/TreeDiffViewer.js +1 -909
- package/lib/module/dataViewer/treeActions.js +1 -162
- package/lib/module/dataViewer/useTreeDraft.js +1 -121
- package/lib/module/dataViewer/useTreeEditor.js +1 -101
- package/lib/module/env/EnvironmentIndicator.js +1 -125
- package/lib/module/env/EnvironmentIndicator.web.js +1 -108
- package/lib/module/env/EnvironmentSelector.js +1 -201
- package/lib/module/env/EnvironmentSelectorInline.js +1 -295
- package/lib/module/env/EnvironmentSelectorInline.web.js +1 -173
- package/lib/module/history/HistoryProvider.js +1 -237
- package/lib/module/history/components/HistoryEntryRow.js +1 -142
- package/lib/module/history/components/HistoryList.js +1 -169
- package/lib/module/history/components/index.js +1 -8
- package/lib/module/history/index.js +1 -15
- package/lib/module/history/types.js +1 -3
- package/lib/module/hooks/index.js +1 -9
- package/lib/module/hooks/safe-area-impl.js +1 -23
- package/lib/module/hooks/useChangeLog.js +1 -50
- package/lib/module/hooks/useDeviceInfo.js +1 -519
- package/lib/module/hooks/useEventStoreEvents.js +1 -61
- package/lib/module/hooks/useFilterManager.js +1 -132
- package/lib/module/hooks/usePersistedState.js +1 -102
- package/lib/module/hooks/useSafeAreaInsets.js +1 -245
- package/lib/module/hooks/useSafeAreaInsets.web.js +1 -30
- package/lib/module/icons/BenchmarkIcon.js +1 -104
- package/lib/module/icons/EnvLaptopIcon.js +1 -199
- package/lib/module/icons/IconBackground.js +1 -274
- package/lib/module/icons/ReactQueryIcon.js +1 -12
- package/lib/module/icons/RenderCountIcon.js +1 -142
- package/lib/module/icons/RouteMapIcon.js +1 -245
- package/lib/module/icons/SentryBugIcon.js +1 -14
- package/lib/module/icons/StackPulseIcon.js +1 -153
- package/lib/module/icons/StorageStackIcon.js +1 -151
- package/lib/module/icons/WifiCircuitIcon.js +1 -164
- package/lib/module/icons/index.js +1 -63
- package/lib/module/icons/lucide-icons-original-full.js +1 -3178
- package/lib/module/icons/lucide-icons.js +1 -2420
- package/lib/module/icons/primitives/GlobeIcon.js +1 -61
- package/lib/module/icons/primitives/icon-primitives.js +1 -161
- package/lib/module/icons/primitives/index.js +1 -15
- package/lib/module/index.js +1 -111
- package/lib/module/license/AccountSetup.js +1 -31
- package/lib/module/license/AccountSetup.web.js +3 -80
- package/lib/module/license/AccountSetupContent.js +1 -476
- package/lib/module/license/FeatureGate.js +1 -778
- package/lib/module/license/FreeAccountPrompt.js +1 -50
- package/lib/module/license/LicenseEntryModal.js +2 -381
- package/lib/module/license/accountRuntime.js +1 -3
- package/lib/module/license/accountRuntime.web.js +1 -4
- package/lib/module/license/index.js +1 -9
- package/lib/module/license/licenseModule.js +1 -109
- package/lib/module/license/openPricing.js +1 -31
- package/lib/module/license/tierLimits.js +1 -122
- package/lib/module/logger/index-sentry.js +1 -230
- package/lib/module/logger/index.js +1 -13
- package/lib/module/logger/logDump.js +1 -13
- package/lib/module/logger/types.js +1 -37
- package/lib/module/settings/components/BubbleSettingsSection.js +1 -378
- package/lib/module/settings/index.js +1 -3
- package/lib/module/storage/definePersistedSetting.js +1 -63
- package/lib/module/storage/devToolsStorageKeys.js +1 -352
- package/lib/module/storage/index.js +1 -4
- package/lib/module/stores/BaseEventStore.js +1 -339
- package/lib/module/stores/ChangeLog.js +1 -192
- package/lib/module/stores/createToolStore.js +1 -189
- package/lib/module/stores/floatingToolStore.js +1 -61
- package/lib/module/stores/floatingToolStore.test.js +1 -111
- package/lib/module/stores/ignoredPatternsCore.js +1 -69
- package/lib/module/stores/ignoredPatternsStore.js +1 -3
- package/lib/module/stores/ignoredPatternsStore.shared.js +1 -189
- package/lib/module/stores/ignoredPatternsStore.web.js +1 -3
- package/lib/module/stores/index.js +1 -10
- package/lib/module/sync/keyedArrays.js +1 -204
- package/lib/module/sync/toolActionRegistry.js +1 -236
- package/lib/module/sync/toolAttention.test.js +1 -50
- package/lib/module/sync/toolSyncAdapter.js +1 -58
- package/lib/module/sync/toolUiBridge.js +1 -123
- package/lib/module/sync/typedEdit.js +1 -220
- package/lib/module/sync/valuePath.js +1 -330
- package/lib/module/sync/valueShape.js +1 -153
- package/lib/module/sync/wireBudget.js +1 -92
- package/lib/module/sync/wireForm.js +1 -159
- package/lib/module/tools/defineTool.js +1 -74
- package/lib/module/types/types.d.js +1 -1
- package/lib/module/types/types.js +1 -32
- package/lib/module/ui/backgrounds/BackgroundSwitcher.js +1 -350
- package/lib/module/ui/backgrounds/ToolBackground.js +1 -72
- package/lib/module/ui/backgrounds/backgroundStore.js +1 -125
- package/lib/module/ui/backgrounds/index.js +1 -19
- package/lib/module/ui/backgrounds/primitives.js +1 -365
- package/lib/module/ui/backgrounds/registry.js +1 -91
- package/lib/module/ui/backgrounds/rng.js +1 -85
- package/lib/module/ui/backgrounds/skyClock.js +1 -39
- package/lib/module/ui/backgrounds/types.js +1 -1
- package/lib/module/ui/backgrounds/variants/daylight.js +1 -449
- package/lib/module/ui/backgrounds/variants/deepField.js +1 -378
- package/lib/module/ui/backgrounds/variants/hyperspace.js +1 -214
- package/lib/module/ui/backgrounds/variants/liveSky.js +1 -893
- package/lib/module/ui/backgrounds/variants/meteors.js +1 -397
- package/lib/module/ui/backgrounds/variants/moonlight.js +1 -468
- package/lib/module/ui/backgrounds/variants/underwater.js +1 -753
- package/lib/module/ui/backgrounds/variants/wormhole/motion.js +1 -44
- package/lib/module/ui/backgrounds/variants/wormhole/textures.js +1 -3
- package/lib/module/ui/backgrounds/variants/wormhole.js +1 -132
- package/lib/module/ui/components/BackButton.js +1 -43
- package/lib/module/ui/components/Badge.js +1 -218
- package/lib/module/ui/components/ChangeRow.js +1 -106
- package/lib/module/ui/components/ChipStrip.js +1 -91
- package/lib/module/ui/components/ClipboardHintBanner.js +1 -145
- package/lib/module/ui/components/CollapsibleSection.js +1 -166
- package/lib/module/ui/components/CompactFilterChips.js +1 -110
- package/lib/module/ui/components/CompactRow.js +1 -291
- package/lib/module/ui/components/CopyButton.js +1 -303
- package/lib/module/ui/components/DataInspector.js +1 -319
- package/lib/module/ui/components/DetailView.js +1 -354
- package/lib/module/ui/components/DetailViewToggle.js +1 -125
- package/lib/module/ui/components/DevToolsCard.js +1 -122
- package/lib/module/ui/components/DraggableHeader.js +1 -211
- package/lib/module/ui/components/DynamicFilterView.js +1 -754
- package/lib/module/ui/components/EmptyState.js +1 -144
- package/lib/module/ui/components/EntityFilterView.js +1 -351
- package/lib/module/ui/components/EventHistoryViewer/CompareBar.js +1 -206
- package/lib/module/ui/components/EventHistoryViewer/DiffModeTabs.js +1 -94
- package/lib/module/ui/components/EventHistoryViewer/EventHistoryViewer.js +1 -179
- package/lib/module/ui/components/EventHistoryViewer/EventPickerModal.js +1 -203
- package/lib/module/ui/components/EventHistoryViewer/ViewToggleCards.js +1 -132
- package/lib/module/ui/components/EventHistoryViewer/index.js +1 -19
- package/lib/module/ui/components/EventHistoryViewer/types.js +1 -3
- package/lib/module/ui/components/EventListItem.js +1 -243
- package/lib/module/ui/components/EventStepperFooter.js +1 -180
- package/lib/module/ui/components/ExpandablePopover.js +1 -378
- package/lib/module/ui/components/ExpandedInfoRow.js +1 -103
- package/lib/module/ui/components/ExportPreview.js +1 -169
- package/lib/module/ui/components/FilterComponents.js +1 -282
- package/lib/module/ui/components/GripVerticalIcon.js +1 -61
- package/lib/module/ui/components/HeaderSearchButton.js +1 -46
- package/lib/module/ui/components/InfoRow.js +1 -87
- package/lib/module/ui/components/ListItem.js +1 -169
- package/lib/module/ui/components/ModalHeader.js +1 -297
- package/lib/module/ui/components/ModalHintBanner.js +1 -143
- package/lib/module/ui/components/Pill.js +1 -111
- package/lib/module/ui/components/PowerToggleButton.js +1 -74
- package/lib/module/ui/components/SearchBar.js +1 -161
- package/lib/module/ui/components/SectionHeader.js +1 -125
- package/lib/module/ui/components/StatsCard.js +1 -194
- package/lib/module/ui/components/StatusIndicator.js +1 -227
- package/lib/module/ui/components/StorageTypeBadge.js +1 -93
- package/lib/module/ui/components/TabSelector.js +1 -98
- package/lib/module/ui/components/TimeDisplay.js +1 -138
- package/lib/module/ui/components/ToggleRow.js +1 -112
- package/lib/module/ui/components/ToolButton.js +1 -89
- package/lib/module/ui/components/ToolEmptyState.js +1 -149
- package/lib/module/ui/components/ToolFooter.js +1 -197
- package/lib/module/ui/components/ValueTypeBadge.js +1 -143
- package/lib/module/ui/components/WindowControls.js +1 -383
- package/lib/module/ui/components/index.js +1 -52
- package/lib/module/ui/components/windowDrag.js +1 -41
- package/lib/module/ui/console/CyberpunkButtonOutline.js +1 -257
- package/lib/module/ui/console/CyberpunkIconContainer.js +1 -182
- package/lib/module/ui/console/CyberpunkSectionButton.js +1 -119
- package/lib/module/ui/floating/FloatingTool.js +1 -1003
- package/lib/module/ui/floating/FloatingTool.web.js +1 -600
- package/lib/module/ui/floating/FloatingToolHost.js +1 -29
- package/lib/module/ui/floating/FloatingToolHost.web.js +1 -25
- package/lib/module/ui/floating/index.js +1 -6
- package/lib/module/ui/floating/index.web.js +1 -6
- package/lib/module/ui/floating/onboardingConstants.js +1 -64
- package/lib/module/ui/floating/onboardingConstants.web.js +1 -27
- package/lib/module/ui/fonts.js +1 -8
- package/lib/module/ui/gameUI/components/GameUICollapsibleSection.js +1 -117
- package/lib/module/ui/gameUI/components/GameUICompactStats.js +1 -332
- package/lib/module/ui/gameUI/components/GameUIIssuesList.js +1 -280
- package/lib/module/ui/gameUI/components/GameUIStatusHeader.js +1 -141
- package/lib/module/ui/gameUI/constants/gameUIColors.js +1 -220
- package/lib/module/ui/gameUI/constants/macOSDesignSystemColors.js +1 -219
- package/lib/module/ui/gameUI/hooks/useGameUIAlertState.js +1 -105
- package/lib/module/ui/gameUI/index.js +1 -19
- package/lib/module/ui/index.js +1 -31
- package/lib/module/ui/listPresets.js +1 -39
- package/lib/module/ui/night/nightTheme.js +1 -126
- package/lib/module/ui/night/primitives.js +1 -511
- package/lib/module/ui/otto/OttoSceneView.js +1 -64
- package/lib/module/ui/otto/OttoSprite.js +1 -496
- package/lib/module/ui/otto/index.js +1 -22
- package/lib/module/ui/otto/ottoEngine.js +1 -2729
- package/lib/module/ui/otto/ottoScenes.js +1 -942
- package/lib/module/ui/otto/ottoSheet.js +1 -180
- package/lib/module/ui/toolTheme.js +1 -93
- package/lib/module/utils/absoluteFill.js +1 -24
- package/lib/module/utils/browserAsyncStorage.js +1 -151
- package/lib/module/utils/browserNavigation.js +1 -108
- package/lib/module/utils/devServer.js +1 -62
- package/lib/module/utils/devServer.web.js +1 -6
- package/lib/module/utils/displayValue.js +1 -36
- package/lib/module/utils/domRuntime.js +1 -134
- package/lib/module/utils/expoRouterModule.js +1 -46
- package/lib/module/utils/expoRouterModule.web.js +1 -9
- package/lib/module/utils/formatting/dataFormatting.js +1 -93
- package/lib/module/utils/formatting/httpFormatting.js +1 -142
- package/lib/module/utils/formatting/index.js +1 -8
- package/lib/module/utils/getSafeAreaInsets.js +1 -36
- package/lib/module/utils/getSafeAreaInsets.web.js +1 -31
- package/lib/module/utils/index.js +1 -23
- package/lib/module/utils/loadOptionalModule.js +1 -89
- package/lib/module/utils/loadToolModule.js +1 -42
- package/lib/module/utils/loadToolModule.web.js +1 -8
- package/lib/module/utils/minimalSuperJSON.js +1 -342
- package/lib/module/utils/modalStorage.js +1 -37
- package/lib/module/utils/nativeWeb.js +1 -107
- package/lib/module/utils/persistentStorage.js +1 -603
- package/lib/module/utils/persistentStorage.web.js +1 -72
- package/lib/module/utils/realNow.js +1 -0
- package/lib/module/utils/reloadApp.js +1 -99
- package/lib/module/utils/reloadPlatform.js +1 -31
- package/lib/module/utils/reloadPlatform.web.js +1 -11
- package/lib/module/utils/renderCaptureRegistry.js +1 -54
- package/lib/module/utils/safeExpoRouter.js +1 -189
- package/lib/module/utils/safeExpoRouter.web.js +1 -37
- package/lib/module/utils/safeStringify.js +1 -225
- package/lib/module/utils/snapshotProviderKit.js +1 -156
- package/lib/module/utils/stateSnapshotRegistry.js +1 -64
- package/lib/module/utils/stateTools.js +1 -154
- package/lib/module/utils/subscribable.js +1 -108
- package/lib/module/utils/subscriberCountNotifier.js +1 -66
- package/lib/module/utils/time/RelativeTime.js +1 -28
- package/lib/module/utils/time/TickContext.js +1 -38
- package/lib/module/utils/time/formatRelativeTime.js +1 -30
- package/lib/module/utils/time/index.js +1 -6
- package/lib/module/utils/time/useRelativeTime.js +1 -33
- package/lib/module/utils/toolModules.js +1 -19
- package/lib/module/utils/typeHelpers.js +1 -130
- package/lib/module/utils/valueFormatting.js +1 -131
- package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
- package/lib/typescript/commonjs/icons/index.d.ts +1 -0
- package/lib/typescript/commonjs/index.d.ts +1 -1
- package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts +8 -0
- package/lib/typescript/commonjs/ui/night/primitives.d.ts +9 -3
- package/lib/typescript/commonjs/utils/index.d.ts +1 -0
- package/lib/typescript/commonjs/utils/realNow.d.ts +11 -0
- package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
- package/lib/typescript/module/icons/index.d.ts +1 -0
- package/lib/typescript/module/index.d.ts +1 -1
- package/lib/typescript/module/storage/devToolsStorageKeys.d.ts +8 -0
- package/lib/typescript/module/ui/night/primitives.d.ts +9 -3
- package/lib/typescript/module/utils/index.d.ts +1 -0
- package/lib/typescript/module/utils/realNow.d.ts +11 -0
- package/lib/web/asyncStorage.mjs +1 -2
- package/lib/web/chunks/chunk-26OV3QDY.mjs +1 -0
- package/lib/web/chunks/chunk-3UTMGIUG.mjs +1 -2
- package/lib/web/chunks/chunk-53J2FMUD.mjs +1 -2
- package/lib/web/chunks/chunk-5KWAGM5V.mjs +1 -0
- package/lib/web/chunks/chunk-5NZOQR6Q.mjs +1 -2
- package/lib/web/chunks/chunk-7PRKERDN.mjs +1 -0
- package/lib/web/chunks/chunk-CE5U3CSQ.mjs +1 -2
- package/lib/web/chunks/chunk-D4RXBAOO.mjs +15 -0
- package/lib/web/chunks/chunk-ER3T3IDI.mjs +1 -0
- package/lib/web/chunks/chunk-GF5C5DVX.mjs +1 -2
- package/lib/web/chunks/chunk-K7CGIEFU.mjs +1 -2
- package/lib/web/chunks/{chunk-GTYIS7H7.mjs → chunk-L3AFTHWX.mjs} +8 -9
- package/lib/web/chunks/chunk-LZ7FZZ7R.mjs +1 -2
- package/lib/web/chunks/chunk-PTK5FO6C.mjs +1 -2
- package/lib/web/chunks/chunk-TJUBBXXK.mjs +1 -0
- package/lib/web/chunks/chunk-UKYVRCMZ.mjs +1 -0
- package/lib/web/chunks/chunk-XYUAUO57.mjs +1 -2
- package/lib/web/chunks/persistentStorage.web-6OAJAVRK.mjs +1 -0
- package/lib/web/colors.mjs +1 -2
- package/lib/web/dataViewer.mjs +2 -3
- package/lib/web/floating.mjs +1 -2
- package/lib/web/history.mjs +1 -2
- package/lib/web/hooks.mjs +1 -2
- package/lib/web/index.mjs +2 -3
- package/lib/web/native.mjs +1 -2
- package/lib/web/ui.mjs +1 -2
- package/lib/web/utils.mjs +1 -2
- package/package.json +8 -7
- package/scripts/detect-clipboard.js +5 -121
- package/scripts/detect-safe-area.js +3 -127
- package/ui.js +1 -7
- package/utils.js +1 -7
- package/lib/typescript/commonjs/JsModal.d.ts.map +0 -1
- package/lib/typescript/commonjs/JsModal.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/clipboard/autoDetectClipboard.d.ts.map +0 -1
- package/lib/typescript/commonjs/clipboard/clipboard-impl.d.ts.map +0 -1
- package/lib/typescript/commonjs/clipboard/clipboard-impl.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/clipboard/copyToClipboard.d.ts.map +0 -1
- package/lib/typescript/commonjs/clipboard/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/colors/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/context/HintsContext.d.ts.map +0 -1
- package/lib/typescript/commonjs/context/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/CyberpunkInput.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/DataTreeActionBar.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/DataTreeActionDock.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/DataViewer.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/DiffSummary.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/IndentGuides.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/IndentGuidesOverlay.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/JsonStringNotice.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/LiveExplorer.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/SplitDiffViewer.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/ThemedSplitView.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/TimestampDeltaBar.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/TypeLegend.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/ValueEditModal.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/VirtualizedDataExplorer.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/diffThemes.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/jsonOps.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/jsonStringValue.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/lineDiff.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/nestedPath.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/objectDiff.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/timestampDiff.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/tree/TreeDiffViewer.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/treeActions.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/useTreeDraft.d.ts.map +0 -1
- package/lib/typescript/commonjs/dataViewer/useTreeEditor.d.ts.map +0 -1
- package/lib/typescript/commonjs/env/EnvironmentIndicator.d.ts.map +0 -1
- package/lib/typescript/commonjs/env/EnvironmentIndicator.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/env/EnvironmentSelector.d.ts.map +0 -1
- package/lib/typescript/commonjs/env/EnvironmentSelectorInline.d.ts.map +0 -1
- package/lib/typescript/commonjs/env/EnvironmentSelectorInline.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/history/HistoryProvider.d.ts.map +0 -1
- package/lib/typescript/commonjs/history/components/HistoryEntryRow.d.ts.map +0 -1
- package/lib/typescript/commonjs/history/components/HistoryList.d.ts.map +0 -1
- package/lib/typescript/commonjs/history/components/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/history/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/history/types.d.ts.map +0 -1
- package/lib/typescript/commonjs/hooks/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts.map +0 -1
- package/lib/typescript/commonjs/hooks/useChangeLog.d.ts.map +0 -1
- package/lib/typescript/commonjs/hooks/useDeviceInfo.d.ts.map +0 -1
- package/lib/typescript/commonjs/hooks/useEventStoreEvents.d.ts.map +0 -1
- package/lib/typescript/commonjs/hooks/useFilterManager.d.ts.map +0 -1
- package/lib/typescript/commonjs/hooks/usePersistedState.d.ts.map +0 -1
- package/lib/typescript/commonjs/hooks/useSafeAreaInsets.d.ts.map +0 -1
- package/lib/typescript/commonjs/hooks/useSafeAreaInsets.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/BenchmarkIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/EnvLaptopIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/IconBackground.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/ReactQueryIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/RenderCountIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/RouteMapIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/SentryBugIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/StackPulseIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/StorageStackIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/WifiCircuitIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/lucide-icons-original-full.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/lucide-icons.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/primitives/GlobeIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/primitives/icon-primitives.d.ts.map +0 -1
- package/lib/typescript/commonjs/icons/primitives/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/license/AccountSetup.d.ts.map +0 -1
- package/lib/typescript/commonjs/license/AccountSetup.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/license/AccountSetupContent.d.ts.map +0 -1
- package/lib/typescript/commonjs/license/FeatureGate.d.ts.map +0 -1
- package/lib/typescript/commonjs/license/FreeAccountPrompt.d.ts.map +0 -1
- package/lib/typescript/commonjs/license/LicenseEntryModal.d.ts.map +0 -1
- package/lib/typescript/commonjs/license/accountRuntime.d.ts.map +0 -1
- package/lib/typescript/commonjs/license/accountRuntime.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/license/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/license/licenseModule.d.ts.map +0 -1
- package/lib/typescript/commonjs/license/openPricing.d.ts.map +0 -1
- package/lib/typescript/commonjs/license/tierLimits.d.ts.map +0 -1
- package/lib/typescript/commonjs/logger/index-sentry.d.ts.map +0 -1
- package/lib/typescript/commonjs/logger/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/logger/logDump.d.ts.map +0 -1
- package/lib/typescript/commonjs/logger/types.d.ts.map +0 -1
- package/lib/typescript/commonjs/settings/components/BubbleSettingsSection.d.ts.map +0 -1
- package/lib/typescript/commonjs/settings/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/storage/definePersistedSetting.d.ts.map +0 -1
- package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts.map +0 -1
- package/lib/typescript/commonjs/storage/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/stores/BaseEventStore.d.ts.map +0 -1
- package/lib/typescript/commonjs/stores/ChangeLog.d.ts.map +0 -1
- package/lib/typescript/commonjs/stores/createToolStore.d.ts.map +0 -1
- package/lib/typescript/commonjs/stores/floatingToolStore.d.ts.map +0 -1
- package/lib/typescript/commonjs/stores/floatingToolStore.test.d.ts.map +0 -1
- package/lib/typescript/commonjs/stores/ignoredPatternsCore.d.ts.map +0 -1
- package/lib/typescript/commonjs/stores/ignoredPatternsStore.d.ts.map +0 -1
- package/lib/typescript/commonjs/stores/ignoredPatternsStore.shared.d.ts.map +0 -1
- package/lib/typescript/commonjs/stores/ignoredPatternsStore.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/stores/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/sync/keyedArrays.d.ts.map +0 -1
- package/lib/typescript/commonjs/sync/toolActionRegistry.d.ts.map +0 -1
- package/lib/typescript/commonjs/sync/toolAttention.test.d.ts.map +0 -1
- package/lib/typescript/commonjs/sync/toolSyncAdapter.d.ts.map +0 -1
- package/lib/typescript/commonjs/sync/toolUiBridge.d.ts.map +0 -1
- package/lib/typescript/commonjs/sync/typedEdit.d.ts.map +0 -1
- package/lib/typescript/commonjs/sync/valuePath.d.ts.map +0 -1
- package/lib/typescript/commonjs/sync/valueShape.d.ts.map +0 -1
- package/lib/typescript/commonjs/sync/wireBudget.d.ts.map +0 -1
- package/lib/typescript/commonjs/sync/wireForm.d.ts.map +0 -1
- package/lib/typescript/commonjs/tools/defineTool.d.ts.map +0 -1
- package/lib/typescript/commonjs/types/types.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/BackgroundSwitcher.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/ToolBackground.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/backgroundStore.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/primitives.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/registry.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/rng.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/skyClock.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/types.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/daylight.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/deepField.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/hyperspace.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/liveSky.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/meteors.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/moonlight.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/underwater.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole/motion.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole/textures.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/backgrounds/variants/wormhole.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/BackButton.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/Badge.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ChangeRow.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ChipStrip.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ClipboardHintBanner.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/CollapsibleSection.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/CompactFilterChips.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/CompactRow.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/CopyButton.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/DataInspector.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/DetailView.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/DetailViewToggle.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/DevToolsCard.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/DraggableHeader.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/DynamicFilterView.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/EmptyState.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/EntityFilterView.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/EventHistoryViewer/CompareBar.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/EventHistoryViewer/DiffModeTabs.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/EventHistoryViewer/EventHistoryViewer.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/EventHistoryViewer/EventPickerModal.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/EventHistoryViewer/ViewToggleCards.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/EventHistoryViewer/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/EventHistoryViewer/types.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/EventListItem.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/EventStepperFooter.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ExpandablePopover.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ExpandedInfoRow.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ExportPreview.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/FilterComponents.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/GripVerticalIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/HeaderSearchButton.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/InfoRow.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ListItem.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ModalHeader.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ModalHintBanner.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/Pill.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/PowerToggleButton.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/SearchBar.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/SectionHeader.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/StatsCard.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/StatusIndicator.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/StorageTypeBadge.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/TabSelector.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/TimeDisplay.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ToggleRow.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ToolButton.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ToolEmptyState.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ToolFooter.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/ValueTypeBadge.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/WindowControls.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/components/windowDrag.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/console/CyberpunkButtonOutline.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/console/CyberpunkIconContainer.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/console/CyberpunkSectionButton.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/floating/FloatingTool.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/floating/FloatingTool.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/floating/FloatingToolHost.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/floating/FloatingToolHost.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/floating/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/floating/index.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/floating/onboardingConstants.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/floating/onboardingConstants.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/fonts.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/gameUI/components/GameUICollapsibleSection.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/gameUI/components/GameUICompactStats.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/gameUI/components/GameUIIssuesList.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/gameUI/components/GameUIStatusHeader.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/gameUI/constants/gameUIColors.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/gameUI/constants/macOSDesignSystemColors.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/gameUI/hooks/useGameUIAlertState.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/gameUI/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/listPresets.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/night/nightTheme.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/night/primitives.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/otto/OttoSceneView.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/otto/OttoSprite.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/otto/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/otto/ottoEngine.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/otto/ottoScenes.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/otto/ottoSheet.d.ts.map +0 -1
- package/lib/typescript/commonjs/ui/toolTheme.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/absoluteFill.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/browserAsyncStorage.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/browserNavigation.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/devServer.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/devServer.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/displayValue.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/domRuntime.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/expoRouterModule.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/expoRouterModule.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/formatting/dataFormatting.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/formatting/httpFormatting.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/formatting/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/getSafeAreaInsets.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/getSafeAreaInsets.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/loadOptionalModule.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/loadToolModule.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/loadToolModule.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/minimalSuperJSON.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/modalStorage.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/nativeWeb.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/persistentStorage.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/persistentStorage.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/reloadApp.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/reloadPlatform.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/reloadPlatform.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/renderCaptureRegistry.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/safeExpoRouter.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/safeExpoRouter.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/safeStringify.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/snapshotProviderKit.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/stateSnapshotRegistry.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/stateTools.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/subscribable.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/subscriberCountNotifier.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/time/RelativeTime.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/time/TickContext.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/time/formatRelativeTime.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/time/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/time/useRelativeTime.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/toolModules.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/typeHelpers.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/valueFormatting.d.ts.map +0 -1
- package/lib/typescript/module/JsModal.d.ts.map +0 -1
- package/lib/typescript/module/JsModal.web.d.ts.map +0 -1
- package/lib/typescript/module/clipboard/autoDetectClipboard.d.ts.map +0 -1
- package/lib/typescript/module/clipboard/clipboard-impl.d.ts.map +0 -1
- package/lib/typescript/module/clipboard/clipboard-impl.web.d.ts.map +0 -1
- package/lib/typescript/module/clipboard/copyToClipboard.d.ts.map +0 -1
- package/lib/typescript/module/clipboard/index.d.ts.map +0 -1
- package/lib/typescript/module/colors/index.d.ts.map +0 -1
- package/lib/typescript/module/context/HintsContext.d.ts.map +0 -1
- package/lib/typescript/module/context/index.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/CyberpunkInput.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/DataTreeActionBar.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/DataTreeActionDock.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/DataViewer.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/DiffSummary.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/IndentGuides.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/IndentGuidesOverlay.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/JsonStringNotice.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/LiveExplorer.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/SplitDiffViewer.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/ThemedSplitView.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/TimestampDeltaBar.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/TypeLegend.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/ValueEditModal.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/VirtualizedDataExplorer.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/diffThemes.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/index.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/jsonOps.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/jsonStringValue.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/lineDiff.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/nestedPath.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/objectDiff.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/timestampDiff.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/tree/TreeDiffViewer.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/treeActions.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/useTreeDraft.d.ts.map +0 -1
- package/lib/typescript/module/dataViewer/useTreeEditor.d.ts.map +0 -1
- package/lib/typescript/module/env/EnvironmentIndicator.d.ts.map +0 -1
- package/lib/typescript/module/env/EnvironmentIndicator.web.d.ts.map +0 -1
- package/lib/typescript/module/env/EnvironmentSelector.d.ts.map +0 -1
- package/lib/typescript/module/env/EnvironmentSelectorInline.d.ts.map +0 -1
- package/lib/typescript/module/env/EnvironmentSelectorInline.web.d.ts.map +0 -1
- package/lib/typescript/module/history/HistoryProvider.d.ts.map +0 -1
- package/lib/typescript/module/history/components/HistoryEntryRow.d.ts.map +0 -1
- package/lib/typescript/module/history/components/HistoryList.d.ts.map +0 -1
- package/lib/typescript/module/history/components/index.d.ts.map +0 -1
- package/lib/typescript/module/history/index.d.ts.map +0 -1
- package/lib/typescript/module/history/types.d.ts.map +0 -1
- package/lib/typescript/module/hooks/index.d.ts.map +0 -1
- package/lib/typescript/module/hooks/safe-area-impl.d.ts.map +0 -1
- package/lib/typescript/module/hooks/useChangeLog.d.ts.map +0 -1
- package/lib/typescript/module/hooks/useDeviceInfo.d.ts.map +0 -1
- package/lib/typescript/module/hooks/useEventStoreEvents.d.ts.map +0 -1
- package/lib/typescript/module/hooks/useFilterManager.d.ts.map +0 -1
- package/lib/typescript/module/hooks/usePersistedState.d.ts.map +0 -1
- package/lib/typescript/module/hooks/useSafeAreaInsets.d.ts.map +0 -1
- package/lib/typescript/module/hooks/useSafeAreaInsets.web.d.ts.map +0 -1
- package/lib/typescript/module/icons/BenchmarkIcon.d.ts.map +0 -1
- package/lib/typescript/module/icons/EnvLaptopIcon.d.ts.map +0 -1
- package/lib/typescript/module/icons/IconBackground.d.ts.map +0 -1
- package/lib/typescript/module/icons/ReactQueryIcon.d.ts.map +0 -1
- package/lib/typescript/module/icons/RenderCountIcon.d.ts.map +0 -1
- package/lib/typescript/module/icons/RouteMapIcon.d.ts.map +0 -1
- package/lib/typescript/module/icons/SentryBugIcon.d.ts.map +0 -1
- package/lib/typescript/module/icons/StackPulseIcon.d.ts.map +0 -1
- package/lib/typescript/module/icons/StorageStackIcon.d.ts.map +0 -1
- package/lib/typescript/module/icons/WifiCircuitIcon.d.ts.map +0 -1
- package/lib/typescript/module/icons/index.d.ts.map +0 -1
- package/lib/typescript/module/icons/lucide-icons-original-full.d.ts.map +0 -1
- package/lib/typescript/module/icons/lucide-icons.d.ts.map +0 -1
- package/lib/typescript/module/icons/primitives/GlobeIcon.d.ts.map +0 -1
- package/lib/typescript/module/icons/primitives/icon-primitives.d.ts.map +0 -1
- package/lib/typescript/module/icons/primitives/index.d.ts.map +0 -1
- package/lib/typescript/module/index.d.ts.map +0 -1
- package/lib/typescript/module/license/AccountSetup.d.ts.map +0 -1
- package/lib/typescript/module/license/AccountSetup.web.d.ts.map +0 -1
- package/lib/typescript/module/license/AccountSetupContent.d.ts.map +0 -1
- package/lib/typescript/module/license/FeatureGate.d.ts.map +0 -1
- package/lib/typescript/module/license/FreeAccountPrompt.d.ts.map +0 -1
- package/lib/typescript/module/license/LicenseEntryModal.d.ts.map +0 -1
- package/lib/typescript/module/license/accountRuntime.d.ts.map +0 -1
- package/lib/typescript/module/license/accountRuntime.web.d.ts.map +0 -1
- package/lib/typescript/module/license/index.d.ts.map +0 -1
- package/lib/typescript/module/license/licenseModule.d.ts.map +0 -1
- package/lib/typescript/module/license/openPricing.d.ts.map +0 -1
- package/lib/typescript/module/license/tierLimits.d.ts.map +0 -1
- package/lib/typescript/module/logger/index-sentry.d.ts.map +0 -1
- package/lib/typescript/module/logger/index.d.ts.map +0 -1
- package/lib/typescript/module/logger/logDump.d.ts.map +0 -1
- package/lib/typescript/module/logger/types.d.ts.map +0 -1
- package/lib/typescript/module/settings/components/BubbleSettingsSection.d.ts.map +0 -1
- package/lib/typescript/module/settings/index.d.ts.map +0 -1
- package/lib/typescript/module/storage/definePersistedSetting.d.ts.map +0 -1
- package/lib/typescript/module/storage/devToolsStorageKeys.d.ts.map +0 -1
- package/lib/typescript/module/storage/index.d.ts.map +0 -1
- package/lib/typescript/module/stores/BaseEventStore.d.ts.map +0 -1
- package/lib/typescript/module/stores/ChangeLog.d.ts.map +0 -1
- package/lib/typescript/module/stores/createToolStore.d.ts.map +0 -1
- package/lib/typescript/module/stores/floatingToolStore.d.ts.map +0 -1
- package/lib/typescript/module/stores/floatingToolStore.test.d.ts.map +0 -1
- package/lib/typescript/module/stores/ignoredPatternsCore.d.ts.map +0 -1
- package/lib/typescript/module/stores/ignoredPatternsStore.d.ts.map +0 -1
- package/lib/typescript/module/stores/ignoredPatternsStore.shared.d.ts.map +0 -1
- package/lib/typescript/module/stores/ignoredPatternsStore.web.d.ts.map +0 -1
- package/lib/typescript/module/stores/index.d.ts.map +0 -1
- package/lib/typescript/module/sync/keyedArrays.d.ts.map +0 -1
- package/lib/typescript/module/sync/toolActionRegistry.d.ts.map +0 -1
- package/lib/typescript/module/sync/toolAttention.test.d.ts.map +0 -1
- package/lib/typescript/module/sync/toolSyncAdapter.d.ts.map +0 -1
- package/lib/typescript/module/sync/toolUiBridge.d.ts.map +0 -1
- package/lib/typescript/module/sync/typedEdit.d.ts.map +0 -1
- package/lib/typescript/module/sync/valuePath.d.ts.map +0 -1
- package/lib/typescript/module/sync/valueShape.d.ts.map +0 -1
- package/lib/typescript/module/sync/wireBudget.d.ts.map +0 -1
- package/lib/typescript/module/sync/wireForm.d.ts.map +0 -1
- package/lib/typescript/module/tools/defineTool.d.ts.map +0 -1
- package/lib/typescript/module/types/types.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/BackgroundSwitcher.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/ToolBackground.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/backgroundStore.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/index.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/primitives.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/registry.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/rng.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/skyClock.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/types.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/variants/daylight.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/variants/deepField.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/variants/hyperspace.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/variants/liveSky.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/variants/meteors.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/variants/moonlight.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/variants/underwater.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/variants/wormhole/motion.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/variants/wormhole/textures.d.ts.map +0 -1
- package/lib/typescript/module/ui/backgrounds/variants/wormhole.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/BackButton.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/Badge.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ChangeRow.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ChipStrip.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ClipboardHintBanner.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/CollapsibleSection.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/CompactFilterChips.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/CompactRow.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/CopyButton.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/DataInspector.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/DetailView.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/DetailViewToggle.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/DevToolsCard.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/DraggableHeader.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/DynamicFilterView.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/EmptyState.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/EntityFilterView.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/EventHistoryViewer/CompareBar.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/EventHistoryViewer/DiffModeTabs.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/EventHistoryViewer/EventHistoryViewer.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/EventHistoryViewer/EventPickerModal.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/EventHistoryViewer/ViewToggleCards.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/EventHistoryViewer/index.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/EventHistoryViewer/types.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/EventListItem.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/EventStepperFooter.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ExpandablePopover.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ExpandedInfoRow.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ExportPreview.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/FilterComponents.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/GripVerticalIcon.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/HeaderSearchButton.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/InfoRow.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ListItem.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ModalHeader.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ModalHintBanner.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/Pill.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/PowerToggleButton.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/SearchBar.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/SectionHeader.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/StatsCard.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/StatusIndicator.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/StorageTypeBadge.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/TabSelector.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/TimeDisplay.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ToggleRow.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ToolButton.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ToolEmptyState.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ToolFooter.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/ValueTypeBadge.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/WindowControls.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/index.d.ts.map +0 -1
- package/lib/typescript/module/ui/components/windowDrag.d.ts.map +0 -1
- package/lib/typescript/module/ui/console/CyberpunkButtonOutline.d.ts.map +0 -1
- package/lib/typescript/module/ui/console/CyberpunkIconContainer.d.ts.map +0 -1
- package/lib/typescript/module/ui/console/CyberpunkSectionButton.d.ts.map +0 -1
- package/lib/typescript/module/ui/floating/FloatingTool.d.ts.map +0 -1
- package/lib/typescript/module/ui/floating/FloatingTool.web.d.ts.map +0 -1
- package/lib/typescript/module/ui/floating/FloatingToolHost.d.ts.map +0 -1
- package/lib/typescript/module/ui/floating/FloatingToolHost.web.d.ts.map +0 -1
- package/lib/typescript/module/ui/floating/index.d.ts.map +0 -1
- package/lib/typescript/module/ui/floating/index.web.d.ts.map +0 -1
- package/lib/typescript/module/ui/floating/onboardingConstants.d.ts.map +0 -1
- package/lib/typescript/module/ui/floating/onboardingConstants.web.d.ts.map +0 -1
- package/lib/typescript/module/ui/fonts.d.ts.map +0 -1
- package/lib/typescript/module/ui/gameUI/components/GameUICollapsibleSection.d.ts.map +0 -1
- package/lib/typescript/module/ui/gameUI/components/GameUICompactStats.d.ts.map +0 -1
- package/lib/typescript/module/ui/gameUI/components/GameUIIssuesList.d.ts.map +0 -1
- package/lib/typescript/module/ui/gameUI/components/GameUIStatusHeader.d.ts.map +0 -1
- package/lib/typescript/module/ui/gameUI/constants/gameUIColors.d.ts.map +0 -1
- package/lib/typescript/module/ui/gameUI/constants/macOSDesignSystemColors.d.ts.map +0 -1
- package/lib/typescript/module/ui/gameUI/hooks/useGameUIAlertState.d.ts.map +0 -1
- package/lib/typescript/module/ui/gameUI/index.d.ts.map +0 -1
- package/lib/typescript/module/ui/index.d.ts.map +0 -1
- package/lib/typescript/module/ui/listPresets.d.ts.map +0 -1
- package/lib/typescript/module/ui/night/nightTheme.d.ts.map +0 -1
- package/lib/typescript/module/ui/night/primitives.d.ts.map +0 -1
- package/lib/typescript/module/ui/otto/OttoSceneView.d.ts.map +0 -1
- package/lib/typescript/module/ui/otto/OttoSprite.d.ts.map +0 -1
- package/lib/typescript/module/ui/otto/index.d.ts.map +0 -1
- package/lib/typescript/module/ui/otto/ottoEngine.d.ts.map +0 -1
- package/lib/typescript/module/ui/otto/ottoScenes.d.ts.map +0 -1
- package/lib/typescript/module/ui/otto/ottoSheet.d.ts.map +0 -1
- package/lib/typescript/module/ui/toolTheme.d.ts.map +0 -1
- package/lib/typescript/module/utils/absoluteFill.d.ts.map +0 -1
- package/lib/typescript/module/utils/browserAsyncStorage.d.ts.map +0 -1
- package/lib/typescript/module/utils/browserNavigation.d.ts.map +0 -1
- package/lib/typescript/module/utils/devServer.d.ts.map +0 -1
- package/lib/typescript/module/utils/devServer.web.d.ts.map +0 -1
- package/lib/typescript/module/utils/displayValue.d.ts.map +0 -1
- package/lib/typescript/module/utils/domRuntime.d.ts.map +0 -1
- package/lib/typescript/module/utils/expoRouterModule.d.ts.map +0 -1
- package/lib/typescript/module/utils/expoRouterModule.web.d.ts.map +0 -1
- package/lib/typescript/module/utils/formatting/dataFormatting.d.ts.map +0 -1
- package/lib/typescript/module/utils/formatting/httpFormatting.d.ts.map +0 -1
- package/lib/typescript/module/utils/formatting/index.d.ts.map +0 -1
- package/lib/typescript/module/utils/getSafeAreaInsets.d.ts.map +0 -1
- package/lib/typescript/module/utils/getSafeAreaInsets.web.d.ts.map +0 -1
- package/lib/typescript/module/utils/index.d.ts.map +0 -1
- package/lib/typescript/module/utils/loadOptionalModule.d.ts.map +0 -1
- package/lib/typescript/module/utils/loadToolModule.d.ts.map +0 -1
- package/lib/typescript/module/utils/loadToolModule.web.d.ts.map +0 -1
- package/lib/typescript/module/utils/minimalSuperJSON.d.ts.map +0 -1
- package/lib/typescript/module/utils/modalStorage.d.ts.map +0 -1
- package/lib/typescript/module/utils/nativeWeb.d.ts.map +0 -1
- package/lib/typescript/module/utils/persistentStorage.d.ts.map +0 -1
- package/lib/typescript/module/utils/persistentStorage.web.d.ts.map +0 -1
- package/lib/typescript/module/utils/reloadApp.d.ts.map +0 -1
- package/lib/typescript/module/utils/reloadPlatform.d.ts.map +0 -1
- package/lib/typescript/module/utils/reloadPlatform.web.d.ts.map +0 -1
- package/lib/typescript/module/utils/renderCaptureRegistry.d.ts.map +0 -1
- package/lib/typescript/module/utils/safeExpoRouter.d.ts.map +0 -1
- package/lib/typescript/module/utils/safeExpoRouter.web.d.ts.map +0 -1
- package/lib/typescript/module/utils/safeStringify.d.ts.map +0 -1
- package/lib/typescript/module/utils/snapshotProviderKit.d.ts.map +0 -1
- package/lib/typescript/module/utils/stateSnapshotRegistry.d.ts.map +0 -1
- package/lib/typescript/module/utils/stateTools.d.ts.map +0 -1
- package/lib/typescript/module/utils/subscribable.d.ts.map +0 -1
- package/lib/typescript/module/utils/subscriberCountNotifier.d.ts.map +0 -1
- package/lib/typescript/module/utils/time/RelativeTime.d.ts.map +0 -1
- package/lib/typescript/module/utils/time/TickContext.d.ts.map +0 -1
- package/lib/typescript/module/utils/time/formatRelativeTime.d.ts.map +0 -1
- package/lib/typescript/module/utils/time/index.d.ts.map +0 -1
- package/lib/typescript/module/utils/time/useRelativeTime.d.ts.map +0 -1
- package/lib/typescript/module/utils/toolModules.d.ts.map +0 -1
- package/lib/typescript/module/utils/typeHelpers.d.ts.map +0 -1
- package/lib/typescript/module/utils/valueFormatting.d.ts.map +0 -1
- package/lib/web/chunks/chunk-2MHKRRQW.mjs +0 -8
- package/lib/web/chunks/chunk-2Q3SDPH2.mjs +0 -14
- package/lib/web/chunks/chunk-34YQ42KI.mjs +0 -2
- package/lib/web/chunks/chunk-3NNNCQYP.mjs +0 -14
- package/lib/web/chunks/chunk-46CXXOQB.mjs +0 -2
- package/lib/web/chunks/chunk-475BSDCB.mjs +0 -2
- package/lib/web/chunks/chunk-552W4COI.mjs +0 -2
- package/lib/web/chunks/chunk-56TTTMX4.mjs +0 -6145
- package/lib/web/chunks/chunk-5LOQZINQ.mjs +0 -14
- package/lib/web/chunks/chunk-5NOIO6ZM.mjs +0 -16
- package/lib/web/chunks/chunk-6CCRCSA2.mjs +0 -2
- package/lib/web/chunks/chunk-6Q52HRBL.mjs +0 -2
- package/lib/web/chunks/chunk-6TEDFSNM.mjs +0 -655
- package/lib/web/chunks/chunk-7BMRSMHN.mjs +0 -2
- package/lib/web/chunks/chunk-A2SOFE47.mjs +0 -24
- package/lib/web/chunks/chunk-A7KJCK4R.mjs +0 -14
- package/lib/web/chunks/chunk-AEXGGXS7.mjs +0 -2
- package/lib/web/chunks/chunk-AGD7ZT6O.mjs +0 -15
- package/lib/web/chunks/chunk-AIEOQWNG.mjs +0 -2
- package/lib/web/chunks/chunk-ASTM35HG.mjs +0 -16
- package/lib/web/chunks/chunk-AZBMFPMX.mjs +0 -1421
- package/lib/web/chunks/chunk-B2V2UDCU.mjs +0 -16
- package/lib/web/chunks/chunk-BFGKGTAC.mjs +0 -2
- package/lib/web/chunks/chunk-BHW6AFO6.mjs +0 -2
- package/lib/web/chunks/chunk-BWRW3NJ2.mjs +0 -16
- package/lib/web/chunks/chunk-CBM2IZAK.mjs +0 -2
- package/lib/web/chunks/chunk-CDLCFF44.mjs +0 -2
- package/lib/web/chunks/chunk-CI5CO7FQ.mjs +0 -2
- package/lib/web/chunks/chunk-CIB4U2YK.mjs +0 -2
- package/lib/web/chunks/chunk-CLLTZQGD.mjs +0 -596
- package/lib/web/chunks/chunk-D5HQLRFW.mjs +0 -655
- package/lib/web/chunks/chunk-DZDTNXXK.mjs +0 -2
- package/lib/web/chunks/chunk-FDOZ6YSS.mjs +0 -2
- package/lib/web/chunks/chunk-FMEWNGQO.mjs +0 -2
- package/lib/web/chunks/chunk-G4DH7GMT.mjs +0 -2
- package/lib/web/chunks/chunk-GBUZCZE4.mjs +0 -2
- package/lib/web/chunks/chunk-GLMS5ZLJ.mjs +0 -445
- package/lib/web/chunks/chunk-GNGMIA7V.mjs +0 -2
- package/lib/web/chunks/chunk-HJ36IONA.mjs +0 -15
- package/lib/web/chunks/chunk-HXPTZMAZ.mjs +0 -2
- package/lib/web/chunks/chunk-I27M4JCS.mjs +0 -2
- package/lib/web/chunks/chunk-IVCT27JB.mjs +0 -2
- package/lib/web/chunks/chunk-JG4QSK5B.mjs +0 -2
- package/lib/web/chunks/chunk-JR7BJW6B.mjs +0 -389
- package/lib/web/chunks/chunk-K46ZJUXJ.mjs +0 -90
- package/lib/web/chunks/chunk-K4LXMO4D.mjs +0 -2
- package/lib/web/chunks/chunk-KBTYK5YE.mjs +0 -662
- package/lib/web/chunks/chunk-KHP6CSSM.mjs +0 -2
- package/lib/web/chunks/chunk-KRDRIW7T.mjs +0 -14
- package/lib/web/chunks/chunk-L2DTKDER.mjs +0 -2
- package/lib/web/chunks/chunk-LFDFDGHY.mjs +0 -655
- package/lib/web/chunks/chunk-MAIUUK4E.mjs +0 -2
- package/lib/web/chunks/chunk-MKJKS3IG.mjs +0 -275
- package/lib/web/chunks/chunk-MRQKVLXG.mjs +0 -2
- package/lib/web/chunks/chunk-NK3OISOL.mjs +0 -14
- package/lib/web/chunks/chunk-NLJDDIXW.mjs +0 -2
- package/lib/web/chunks/chunk-OENR3XFI.mjs +0 -11
- package/lib/web/chunks/chunk-OZB3VKZE.mjs +0 -2
- package/lib/web/chunks/chunk-P64PFJT3.mjs +0 -17618
- package/lib/web/chunks/chunk-PACPGYH7.mjs +0 -2
- package/lib/web/chunks/chunk-PART6HOE.mjs +0 -14
- package/lib/web/chunks/chunk-PMRXUQRH.mjs +0 -2
- package/lib/web/chunks/chunk-PZ45TQ55.mjs +0 -14
- package/lib/web/chunks/chunk-Q5LN7GET.mjs +0 -17624
- package/lib/web/chunks/chunk-QCD6T6L4.mjs +0 -297
- package/lib/web/chunks/chunk-QD5EUANU.mjs +0 -2
- package/lib/web/chunks/chunk-QJTECJCO.mjs +0 -2
- package/lib/web/chunks/chunk-QPIZURPZ.mjs +0 -2
- package/lib/web/chunks/chunk-QPY45R5F.mjs +0 -274
- package/lib/web/chunks/chunk-R2SGZIG5.mjs +0 -2
- package/lib/web/chunks/chunk-S3GYQYVJ.mjs +0 -16
- package/lib/web/chunks/chunk-SCCXVTDM.mjs +0 -2
- package/lib/web/chunks/chunk-SHJHD646.mjs +0 -2
- package/lib/web/chunks/chunk-TCRVZ55E.mjs +0 -2
- package/lib/web/chunks/chunk-TJ6ZVV2L.mjs +0 -15
- package/lib/web/chunks/chunk-TPSY4RC3.mjs +0 -14
- package/lib/web/chunks/chunk-U5KNX5O6.mjs +0 -17624
- package/lib/web/chunks/chunk-UCKELQSM.mjs +0 -2
- package/lib/web/chunks/chunk-UGGCYHRH.mjs +0 -15
- package/lib/web/chunks/chunk-UNYQJZET.mjs +0 -16
- package/lib/web/chunks/chunk-VE72SWLV.mjs +0 -15
- package/lib/web/chunks/chunk-VKONO6MI.mjs +0 -2
- package/lib/web/chunks/chunk-W4BGMPJO.mjs +0 -2
- package/lib/web/chunks/chunk-WHNEEKLR.mjs +0 -2
- package/lib/web/chunks/chunk-WLGUP3KY.mjs +0 -16
- package/lib/web/chunks/chunk-WY7D4WBZ.mjs +0 -2
- package/lib/web/chunks/chunk-XRNB2MHO.mjs +0 -107
- package/lib/web/chunks/chunk-XXTIAXQY.mjs +0 -2
- package/lib/web/chunks/chunk-YG6DIKQD.mjs +0 -2
- package/lib/web/chunks/chunk-YIZFMU66.mjs +0 -2
- package/lib/web/chunks/chunk-YOGAPOGC.mjs +0 -2
- package/lib/web/chunks/chunk-Z7373DS5.mjs +0 -2
- package/lib/web/chunks/chunk-Z76GRN66.mjs +0 -17627
- package/lib/web/chunks/persistentStorage.web-4FBAOYJ4.mjs +0 -12
- package/lib/web/chunks/persistentStorage.web-7W3Y6Q24.mjs +0 -12
- package/lib/web/chunks/persistentStorage.web-GOWNFMVT.mjs +0 -2
- package/lib/web/chunks/persistentStorage.web-RF47FXIK.mjs +0 -12
- package/scripts/generate-wormhole-textures.cjs +0 -261
- package/scripts/test-wormhole-motion.cjs +0 -59
package/lib/commonjs/JsModal.js
CHANGED
|
@@ -1,1766 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.JsModal = void 0;
|
|
7
|
-
var _licenseModule = require("./license/licenseModule.js");
|
|
8
|
-
var _AccountSetup = require("./license/AccountSetup");
|
|
9
|
-
var _react = require("react");
|
|
10
|
-
var _reactNative = require("react-native");
|
|
11
|
-
var _absoluteFill = require("./utils/absoluteFill.js");
|
|
12
|
-
var _useSafeAreaInsets = require("./hooks/useSafeAreaInsets");
|
|
13
|
-
var _index = require("./ui/gameUI/index.js");
|
|
14
|
-
var _index2 = require("./ui/components/index.js");
|
|
15
|
-
var _ToolBackground = require("./ui/backgrounds/ToolBackground.js");
|
|
16
|
-
var _nightTheme = require("./ui/night/nightTheme.js");
|
|
17
|
-
var _persistentStorage = require("./utils/persistentStorage");
|
|
18
|
-
var _modalStorage = require("./utils/modalStorage.js");
|
|
19
|
-
var _devToolsStorageKeys = require("./storage/devToolsStorageKeys.js");
|
|
20
|
-
var _index3 = require("./context/index.js");
|
|
21
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
22
|
-
/**
|
|
23
|
-
* JsModal - Ultra-optimized for true 60FPS performance
|
|
24
|
-
*
|
|
25
|
-
* Achieves 60FPS by following the principles from the dial menu:
|
|
26
|
-
* 1. ALWAYS use native driver (useNativeDriver: true)
|
|
27
|
-
* 2. Use transforms instead of layout properties (translateY instead of height)
|
|
28
|
-
* 3. Use interpolation for all calculations (no JS thread math)
|
|
29
|
-
* 4. Minimize PanResponder JS work (direct setValue, no state updates)
|
|
30
|
-
*
|
|
31
|
-
* Structure follows SRP with each function doing ONE thing only.
|
|
32
|
-
*/
|
|
33
|
-
|
|
34
|
-
// ============================================================================
|
|
35
|
-
// CONSTANTS - Modal dimensions and configuration
|
|
36
|
-
// ============================================================================
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Tool modals open and close without an entrance animation.
|
|
40
|
-
*
|
|
41
|
-
* The animated entrance was `parallel([spring(tension:180, friction:22),
|
|
42
|
-
* timing(200ms)])`. Two measured problems: the modal mounts at opacity 0 and
|
|
43
|
-
* the fade only starts once its content has committed, so a tap left the screen
|
|
44
|
-
* unchanged for ~240ms; and the spring's completion did not land until ~1s,
|
|
45
|
-
* creeping long after it looked settled. Snapping to the final state made the
|
|
46
|
-
* whole devtools UI feel markedly faster.
|
|
47
|
-
*
|
|
48
|
-
* Setting this to `false` restores the animation for every tool modal — this is
|
|
49
|
-
* shared chrome, not settings-specific.
|
|
50
|
-
*/
|
|
51
|
-
const INSTANT_MODAL_ENTRANCE = true;
|
|
52
|
-
const SCREEN = _reactNative.Dimensions.get("window");
|
|
53
|
-
const MIN_HEIGHT = 100;
|
|
54
|
-
const DEFAULT_HEIGHT = 400;
|
|
55
|
-
const FLOATING_WIDTH = SCREEN.width; // Full width
|
|
56
|
-
const FLOATING_HEIGHT = 500;
|
|
57
|
-
const FLOATING_MIN_WIDTH = SCREEN.width * 0.25; // 1/4 of screen width
|
|
58
|
-
const FLOATING_MIN_HEIGHT = 80; // Just a bit more than header height (60px header + 20px content)
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Vertical band the absolutely-positioned window controls occupy at the top
|
|
62
|
-
* right of the chrome: `windowControlsContainer` top 4 + the expandable
|
|
63
|
-
* trigger's 2pt padding + a 12pt dot + 2 = 20. The drag-indicator strip above
|
|
64
|
-
* custom header content reserves exactly this, which is what lets a tool's
|
|
65
|
-
* header row below run the FULL width instead of buying its clearance with a
|
|
66
|
-
* right inset (that inset read as a hole on the right of every tool's nav).
|
|
67
|
-
*/
|
|
68
|
-
const WINDOW_CONTROLS_BAND = 20;
|
|
69
|
-
|
|
70
|
-
// ============================================================================
|
|
71
|
-
// TYPE DEFINITIONS - Interface contracts for the modal
|
|
72
|
-
// ============================================================================
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Chrome variant. "night" (the default since the suite-wide theme move) is
|
|
76
|
-
* the Everlights-style sheet (see ui/night): near-black `#050505` surfaces at
|
|
77
|
-
* radius 16, a hairline accent border, a neutral drag handle instead of the
|
|
78
|
-
* teal bar, a transparent header, and the ToolBackground hoisted to the sheet
|
|
79
|
-
* root so the star field runs through the header instead of stopping under
|
|
80
|
-
* it. "default" is the legacy card-grey chrome, kept as an escape hatch.
|
|
81
|
-
*/
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Modal state that can be saved and restored when minimizing/restoring
|
|
85
|
-
*/
|
|
86
|
-
|
|
87
|
-
// ============================================================================
|
|
88
|
-
// ICON COMPONENTS - Visual indicators for modal controls
|
|
89
|
-
// ============================================================================
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* DragIndicator - Visual feedback for draggable areas
|
|
93
|
-
*/
|
|
94
|
-
const DragIndicator = /*#__PURE__*/(0, _react.memo)(function DragIndicator({
|
|
95
|
-
isResizing,
|
|
96
|
-
mode,
|
|
97
|
-
hasCustomContent = false,
|
|
98
|
-
variant = "default"
|
|
99
|
-
}) {
|
|
100
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
101
|
-
style: [styles.dragIndicatorContainer, hasCustomContent && styles.dragIndicatorContainerCustom],
|
|
102
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
103
|
-
style: [styles.dragIndicator, mode === "floating" && styles.floatingDragIndicator, isResizing && styles.dragIndicatorActive,
|
|
104
|
-
// Night: the neutral Everlights sheet handle, no glow, both modes.
|
|
105
|
-
variant === "night" && styles.nightDragIndicator]
|
|
106
|
-
}), isResizing && mode === "bottomSheet" && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
107
|
-
style: styles.resizeGripContainer,
|
|
108
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
109
|
-
style: styles.resizeGripLine
|
|
110
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
111
|
-
style: styles.resizeGripLine
|
|
112
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
113
|
-
style: styles.resizeGripLine
|
|
114
|
-
})]
|
|
115
|
-
})]
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* CornerHandle - Resize handle for floating mode corners
|
|
121
|
-
*/
|
|
122
|
-
const CornerHandle = /*#__PURE__*/(0, _react.memo)(function CornerHandle({
|
|
123
|
-
position,
|
|
124
|
-
isActive
|
|
125
|
-
}) {
|
|
126
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
127
|
-
style: [styles.cornerHandle],
|
|
128
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
129
|
-
style: [styles.handler, isActive && styles.handlerActive]
|
|
130
|
-
})
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* ModalHeader - Header bar with title, controls, and drag area
|
|
136
|
-
*/
|
|
137
|
-
|
|
138
|
-
const ModalHeader = /*#__PURE__*/(0, _react.memo)(function ModalHeader({
|
|
139
|
-
header,
|
|
140
|
-
onClose,
|
|
141
|
-
onToggleMode,
|
|
142
|
-
onMinimize,
|
|
143
|
-
isResizing,
|
|
144
|
-
mode,
|
|
145
|
-
panHandlers,
|
|
146
|
-
variant = "default"
|
|
147
|
-
}) {
|
|
148
|
-
const lastTapRef = (0, _react.useRef)(0);
|
|
149
|
-
const tapCountRef = (0, _react.useRef)(0);
|
|
150
|
-
const tapTimeoutRef = (0, _react.useRef)(null);
|
|
151
|
-
const handleHeaderTap = (0, _react.useCallback)(() => {
|
|
152
|
-
const now = Date.now();
|
|
153
|
-
const timeSinceLastTap = now - lastTapRef.current;
|
|
154
|
-
|
|
155
|
-
// Reset tap count if more than 500ms since last tap
|
|
156
|
-
if (timeSinceLastTap > 500) {
|
|
157
|
-
tapCountRef.current = 0;
|
|
158
|
-
}
|
|
159
|
-
tapCountRef.current++;
|
|
160
|
-
lastTapRef.current = now;
|
|
161
|
-
|
|
162
|
-
// Clear existing timeout
|
|
163
|
-
if (tapTimeoutRef.current) {
|
|
164
|
-
clearTimeout(tapTimeoutRef.current);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Set timeout to process the tap gesture
|
|
168
|
-
tapTimeoutRef.current = setTimeout(() => {
|
|
169
|
-
if (tapCountRef.current === 2) {
|
|
170
|
-
// Double tap - toggle mode
|
|
171
|
-
onToggleMode();
|
|
172
|
-
} else if (tapCountRef.current >= 3) {
|
|
173
|
-
// Triple tap - minimize modal (if available)
|
|
174
|
-
if (onMinimize) {
|
|
175
|
-
onMinimize();
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
tapCountRef.current = 0;
|
|
179
|
-
}, 300);
|
|
180
|
-
}, [onToggleMode, onMinimize]);
|
|
181
|
-
|
|
182
|
-
// Clean up timeout on unmount
|
|
183
|
-
(0, _react.useEffect)(() => {
|
|
184
|
-
return () => {
|
|
185
|
-
if (tapTimeoutRef.current) {
|
|
186
|
-
clearTimeout(tapTimeoutRef.current);
|
|
187
|
-
}
|
|
188
|
-
};
|
|
189
|
-
}, []);
|
|
190
|
-
const headerProps = panHandlers ? panHandlers : {};
|
|
191
|
-
// Disable tap handling when no panHandlers (i.e., when using DraggableHeader in floating mode)
|
|
192
|
-
const shouldHandleTap = !!panHandlers;
|
|
193
|
-
|
|
194
|
-
// If custom content is provided, check if it's a complete replacement
|
|
195
|
-
if (header?.customContent) {
|
|
196
|
-
// Check if the custom content is a complete header replacement (like CyberpunkModalHeader)
|
|
197
|
-
// by checking if it's a React element with specific props
|
|
198
|
-
const isCompleteReplacement = /*#__PURE__*/(0, _react.isValidElement)(header.customContent) && typeof header.customContent.type === "function" && header.customContent.type.name === "CyberpunkModalHeader";
|
|
199
|
-
if (isCompleteReplacement) {
|
|
200
|
-
// Clone the element and pass the necessary props
|
|
201
|
-
return /*#__PURE__*/(0, _react.cloneElement)(header.customContent, {
|
|
202
|
-
onToggleMode,
|
|
203
|
-
onClose,
|
|
204
|
-
mode,
|
|
205
|
-
panHandlers: headerProps,
|
|
206
|
-
showToggleButton: header?.showToggleButton !== false,
|
|
207
|
-
hideCloseButton: header?.hideCloseButton
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Otherwise, render custom content within the standard header structure
|
|
212
|
-
// Apply pan handlers to the outer View for dragging in floating mode
|
|
213
|
-
// If the custom content is a React element, inject onMinimize so it can trigger minimize
|
|
214
|
-
let customContentWithMinimize = header.customContent;
|
|
215
|
-
if (/*#__PURE__*/(0, _react.isValidElement)(header.customContent) && onMinimize) {
|
|
216
|
-
customContentWithMinimize = /*#__PURE__*/(0, _react.cloneElement)(header.customContent, {
|
|
217
|
-
onMinimize
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
const headerContent = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
221
|
-
style: styles.headerInner,
|
|
222
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DragIndicator, {
|
|
223
|
-
isResizing: isResizing,
|
|
224
|
-
mode: mode,
|
|
225
|
-
hasCustomContent: true,
|
|
226
|
-
variant: variant
|
|
227
|
-
}), customContentWithMinimize]
|
|
228
|
-
});
|
|
229
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
230
|
-
style: [styles.header, variant === "night" && styles.nightHeader],
|
|
231
|
-
...headerProps,
|
|
232
|
-
children: shouldHandleTap ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableWithoutFeedback, {
|
|
233
|
-
onPress: handleHeaderTap,
|
|
234
|
-
children: headerContent
|
|
235
|
-
}) : headerContent
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
const headerContent = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
239
|
-
style: styles.headerInner,
|
|
240
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(DragIndicator, {
|
|
241
|
-
isResizing: isResizing,
|
|
242
|
-
mode: mode,
|
|
243
|
-
variant: variant
|
|
244
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
245
|
-
style: styles.headerContent,
|
|
246
|
-
children: [header?.title && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
247
|
-
style: styles.headerTitle,
|
|
248
|
-
children: header.title
|
|
249
|
-
}), header?.subtitle && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
250
|
-
style: styles.headerSubtitle,
|
|
251
|
-
children: header.subtitle
|
|
252
|
-
})]
|
|
253
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
254
|
-
style: styles.headerHintText,
|
|
255
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
256
|
-
style: styles.hintText,
|
|
257
|
-
children: "Double tap: Toggle \u2022 Triple tap: Close"
|
|
258
|
-
})
|
|
259
|
-
})]
|
|
260
|
-
});
|
|
261
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
262
|
-
style: [styles.header, mode === "floating" && styles.floatingModeHeader, variant === "night" && styles.nightHeader],
|
|
263
|
-
...headerProps,
|
|
264
|
-
children: shouldHandleTap ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableWithoutFeedback, {
|
|
265
|
-
onPress: handleHeaderTap,
|
|
266
|
-
children: headerContent
|
|
267
|
-
}) : headerContent
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
// ============================================================================
|
|
272
|
-
// MAIN COMPONENT - Optimized for 60FPS with transforms and interpolation
|
|
273
|
-
// ============================================================================
|
|
274
|
-
/**
|
|
275
|
-
* JsModal - Ultra-optimized modal component for true 60FPS performance
|
|
276
|
-
*
|
|
277
|
-
* This modal component is designed for maximum performance using native driver
|
|
278
|
-
* animations, transforms instead of layout properties, and minimal JavaScript
|
|
279
|
-
* thread work. It supports two modes: bottom sheet and floating window.
|
|
280
|
-
*
|
|
281
|
-
* Key Performance Features:
|
|
282
|
-
* - Uses native driver for all animations (useNativeDriver: true)
|
|
283
|
-
* - Transform-based positioning instead of layout changes
|
|
284
|
-
* - Interpolation for all calculations on the native thread
|
|
285
|
-
* - Minimal PanResponder JavaScript work
|
|
286
|
-
* - State persistence with AsyncStorage
|
|
287
|
-
* - Drag and resize functionality in both modes
|
|
288
|
-
*
|
|
289
|
-
* @param props - Modal configuration and content
|
|
290
|
-
* @returns JSX.Element representing the modal
|
|
291
|
-
*
|
|
292
|
-
* @example
|
|
293
|
-
* ```typescript
|
|
294
|
-
* <JsModal
|
|
295
|
-
* visible={isVisible}
|
|
296
|
-
* onClose={() => setVisible(false)}
|
|
297
|
-
* header={{
|
|
298
|
-
* title: "Settings",
|
|
299
|
-
* subtitle: "Configure your preferences"
|
|
300
|
-
* }}
|
|
301
|
-
* persistenceKey="settings-modal"
|
|
302
|
-
* enablePersistence={true}
|
|
303
|
-
* >
|
|
304
|
-
* <SettingsContent />
|
|
305
|
-
* </JsModal>
|
|
306
|
-
* ```
|
|
307
|
-
*
|
|
308
|
-
* @performance All animations use native driver for 60FPS performance
|
|
309
|
-
* @performance Uses transform-based positioning for optimal rendering
|
|
310
|
-
* @performance Includes state persistence and restoration capabilities
|
|
311
|
-
*/
|
|
312
|
-
const JsModalComponent = ({
|
|
313
|
-
visible,
|
|
314
|
-
onClose,
|
|
315
|
-
children,
|
|
316
|
-
header,
|
|
317
|
-
styles: customStyles = {},
|
|
318
|
-
minHeight = MIN_HEIGHT,
|
|
319
|
-
maxHeight,
|
|
320
|
-
initialHeight = DEFAULT_HEIGHT,
|
|
321
|
-
animatedHeight: externalAnimatedHeight,
|
|
322
|
-
benchMotion,
|
|
323
|
-
initialMode = "bottomSheet",
|
|
324
|
-
onModeChange,
|
|
325
|
-
persistenceKey,
|
|
326
|
-
enablePersistence = true,
|
|
327
|
-
initialFloatingPosition,
|
|
328
|
-
footer,
|
|
329
|
-
footerHeight = 0,
|
|
330
|
-
onBack,
|
|
331
|
-
onMinimize,
|
|
332
|
-
minimizeRequest = 0,
|
|
333
|
-
minimizeTargetPosition,
|
|
334
|
-
initialModalState,
|
|
335
|
-
zIndex,
|
|
336
|
-
disableScrollWrapper = false,
|
|
337
|
-
background = true,
|
|
338
|
-
variant = "night"
|
|
339
|
-
}) => {
|
|
340
|
-
const insets = (0, _useSafeAreaInsets.useSafeAreaInsets)();
|
|
341
|
-
const [isStateLoaded, setIsStateLoaded] = (0, _react.useState)(!enablePersistence);
|
|
342
|
-
const [mode, setMode] = (0, _react.useState)(initialMode);
|
|
343
|
-
const [isResizing, setIsResizing] = (0, _react.useState)(false);
|
|
344
|
-
const [isDragging, setIsDragging] = (0, _react.useState)(false);
|
|
345
|
-
const [panelHeight, setPanelHeight] = (0, _react.useState)(initialHeight);
|
|
346
|
-
const [dimensions, setDimensions] = (0, _react.useState)({
|
|
347
|
-
width: FLOATING_WIDTH,
|
|
348
|
-
height: FLOATING_HEIGHT,
|
|
349
|
-
top: (SCREEN.height - FLOATING_HEIGHT) / 2,
|
|
350
|
-
left: 0 // Flush with left edge
|
|
351
|
-
});
|
|
352
|
-
const [containerBounds] = (0, _react.useState)({
|
|
353
|
-
width: SCREEN.width,
|
|
354
|
-
height: SCREEN.height
|
|
355
|
-
});
|
|
356
|
-
const [showHint, setShowHint] = (0, _react.useState)(false);
|
|
357
|
-
const [hintLoaded, setHintLoaded] = (0, _react.useState)(false);
|
|
358
|
-
const hintsDisabled = (0, _index3.useHintsDisabled)();
|
|
359
|
-
|
|
360
|
-
// ============================================================================
|
|
361
|
-
// ANIMATED VALUES - All using native driver
|
|
362
|
-
// ============================================================================
|
|
363
|
-
|
|
364
|
-
// Main visibility progress (0 = hidden, 1 = visible)
|
|
365
|
-
const visibilityProgress = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
|
|
366
|
-
|
|
367
|
-
// Bottom sheet specific - using translateY for performance!
|
|
368
|
-
const bottomSheetTranslateY = (0, _react.useRef)(new _reactNative.Animated.Value(SCREEN.height)).current;
|
|
369
|
-
const dragOffset = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
|
|
370
|
-
|
|
371
|
-
// Height tracking for resize - actual position from bottom
|
|
372
|
-
const animatedBottomPosition = (0, _react.useRef)(new _reactNative.Animated.Value(initialHeight)).current;
|
|
373
|
-
const currentHeightRef = (0, _react.useRef)(initialHeight);
|
|
374
|
-
|
|
375
|
-
// Save state with debounce
|
|
376
|
-
(0, _react.useEffect)(() => {
|
|
377
|
-
if (!enablePersistence || !persistenceKey || !isStateLoaded) return;
|
|
378
|
-
const timeoutId = setTimeout(() => {
|
|
379
|
-
_modalStorage.ModalStorage.save(persistenceKey, {
|
|
380
|
-
mode,
|
|
381
|
-
panelHeight: currentHeightRef.current,
|
|
382
|
-
dimensions,
|
|
383
|
-
isVisible: visible
|
|
384
|
-
});
|
|
385
|
-
}, 500);
|
|
386
|
-
return () => clearTimeout(timeoutId);
|
|
387
|
-
}, [mode, panelHeight, dimensions, visible, persistenceKey, enablePersistence, isStateLoaded]);
|
|
388
|
-
|
|
389
|
-
// Seed the external height ONCE. This used to re-run when `isResizing`
|
|
390
|
-
// flipped, which snapped an externally-controlled sheet back to
|
|
391
|
-
// initialHeight the moment a drag-resize ended (the release handler had
|
|
392
|
-
// just written the real height). The host owns the value after the seed;
|
|
393
|
-
// persistence restore above may overwrite the seed, which is correct.
|
|
394
|
-
const externalHeightSeeded = (0, _react.useRef)(false);
|
|
395
|
-
(0, _react.useEffect)(() => {
|
|
396
|
-
if (externalAnimatedHeight && !externalHeightSeeded.current) {
|
|
397
|
-
externalHeightSeeded.current = true;
|
|
398
|
-
currentHeightRef.current = initialHeight;
|
|
399
|
-
externalAnimatedHeight.setValue(initialHeight);
|
|
400
|
-
}
|
|
401
|
-
}, [externalAnimatedHeight, initialHeight]);
|
|
402
|
-
|
|
403
|
-
// Update refs when dimensions change
|
|
404
|
-
(0, _react.useEffect)(() => {
|
|
405
|
-
currentDimensionsRef.current = dimensions;
|
|
406
|
-
}, [dimensions]);
|
|
407
|
-
|
|
408
|
-
// Floating mode animations - use initialFloatingPosition if provided
|
|
409
|
-
const floatingPosition = (0, _react.useRef)(new _reactNative.Animated.ValueXY({
|
|
410
|
-
x: initialFloatingPosition?.x ?? 0,
|
|
411
|
-
// Flush with left edge
|
|
412
|
-
y: initialFloatingPosition?.y ?? (SCREEN.height - FLOATING_HEIGHT) / 2
|
|
413
|
-
})).current;
|
|
414
|
-
const floatingScale = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
|
|
415
|
-
const animatedWidth = (0, _react.useRef)(new _reactNative.Animated.Value(FLOATING_WIDTH)).current;
|
|
416
|
-
const animatedFloatingHeight = (0, _react.useRef)(new _reactNative.Animated.Value(FLOATING_HEIGHT)).current;
|
|
417
|
-
|
|
418
|
-
// Refs for resize handles
|
|
419
|
-
const currentDimensionsRef = (0, _react.useRef)(dimensions);
|
|
420
|
-
const startDimensionsRef = (0, _react.useRef)(dimensions);
|
|
421
|
-
const offsetX = (0, _react.useRef)(0);
|
|
422
|
-
const offsetY = (0, _react.useRef)(0);
|
|
423
|
-
const sHeight = (0, _react.useRef)(0);
|
|
424
|
-
const sWidth = (0, _react.useRef)(0);
|
|
425
|
-
|
|
426
|
-
// Load hint acknowledgment status on mount
|
|
427
|
-
(0, _react.useEffect)(() => {
|
|
428
|
-
let mounted = true;
|
|
429
|
-
const loadHintStatus = async () => {
|
|
430
|
-
try {
|
|
431
|
-
const hintKey = _devToolsStorageKeys.devToolsStorageKeys.modal.hintAcknowledged();
|
|
432
|
-
const acknowledged = await _persistentStorage.persistentStorage.getItem(hintKey);
|
|
433
|
-
if (mounted) {
|
|
434
|
-
// Show hint if not acknowledged yet
|
|
435
|
-
setShowHint(acknowledged !== "true");
|
|
436
|
-
setHintLoaded(true);
|
|
437
|
-
}
|
|
438
|
-
} catch (error) {
|
|
439
|
-
// Failed to load hint status, default to showing hint
|
|
440
|
-
if (mounted) {
|
|
441
|
-
setShowHint(true);
|
|
442
|
-
setHintLoaded(true);
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
};
|
|
446
|
-
loadHintStatus();
|
|
447
|
-
return () => {
|
|
448
|
-
mounted = false;
|
|
449
|
-
};
|
|
450
|
-
}, []);
|
|
451
|
-
|
|
452
|
-
// Handle hint acknowledgment
|
|
453
|
-
const handleHintAcknowledge = (0, _react.useCallback)(async () => {
|
|
454
|
-
try {
|
|
455
|
-
const hintKey = _devToolsStorageKeys.devToolsStorageKeys.modal.hintAcknowledged();
|
|
456
|
-
await _persistentStorage.persistentStorage.setItem(hintKey, "true");
|
|
457
|
-
setShowHint(false);
|
|
458
|
-
} catch (error) {
|
|
459
|
-
// Failed to save hint acknowledgment, just hide it locally
|
|
460
|
-
setShowHint(false);
|
|
461
|
-
}
|
|
462
|
-
}, []);
|
|
463
|
-
|
|
464
|
-
// Parents routinely pass an inline `onModeChange` (a new identity every
|
|
465
|
-
// render). The persisted-state load below is mount/key-scoped — if the
|
|
466
|
-
// callback identity re-triggered it, every parent re-render would reload
|
|
467
|
-
// the OLD persisted mode and stomp a live toggleMode() before the 500ms
|
|
468
|
-
// save debounce could write the new one (mode flipped to floating, then
|
|
469
|
-
// snapped back ~50ms later). So the callback rides in a ref instead of
|
|
470
|
-
// the dependency list.
|
|
471
|
-
const onModeChangeRef = (0, _react.useRef)(onModeChange);
|
|
472
|
-
onModeChangeRef.current = onModeChange;
|
|
473
|
-
|
|
474
|
-
// Load persisted state on mount
|
|
475
|
-
(0, _react.useEffect)(() => {
|
|
476
|
-
if (!enablePersistence || !persistenceKey) {
|
|
477
|
-
setIsStateLoaded(true);
|
|
478
|
-
return;
|
|
479
|
-
}
|
|
480
|
-
let mounted = true;
|
|
481
|
-
const loadState = async () => {
|
|
482
|
-
const savedState = await _modalStorage.ModalStorage.load(persistenceKey);
|
|
483
|
-
if (mounted && savedState) {
|
|
484
|
-
// Restore mode
|
|
485
|
-
if (savedState.mode) {
|
|
486
|
-
setMode(savedState.mode);
|
|
487
|
-
// Notify parent of loaded mode
|
|
488
|
-
onModeChangeRef.current?.(savedState.mode);
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
// Restore bottom sheet height. The external animated height (when a
|
|
492
|
-
// host passes one) IS the rendered height, so it must be restored
|
|
493
|
-
// too or a persisted sheet always reopens at initialHeight.
|
|
494
|
-
if (savedState.panelHeight) {
|
|
495
|
-
setPanelHeight(savedState.panelHeight);
|
|
496
|
-
currentHeightRef.current = savedState.panelHeight;
|
|
497
|
-
animatedBottomPosition.setValue(savedState.panelHeight);
|
|
498
|
-
externalAnimatedHeight?.setValue(savedState.panelHeight);
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
// Restore floating dimensions and position
|
|
502
|
-
if (savedState.dimensions) {
|
|
503
|
-
setDimensions(savedState.dimensions);
|
|
504
|
-
floatingPosition.setValue({
|
|
505
|
-
x: savedState.dimensions.left,
|
|
506
|
-
y: savedState.dimensions.top
|
|
507
|
-
});
|
|
508
|
-
animatedWidth.setValue(savedState.dimensions.width);
|
|
509
|
-
animatedFloatingHeight.setValue(savedState.dimensions.height);
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
if (mounted) setIsStateLoaded(true);
|
|
513
|
-
};
|
|
514
|
-
loadState();
|
|
515
|
-
return () => {
|
|
516
|
-
mounted = false;
|
|
517
|
-
};
|
|
518
|
-
}, [persistenceKey, enablePersistence, animatedBottomPosition, animatedFloatingHeight, animatedWidth, floatingPosition]);
|
|
519
|
-
|
|
520
|
-
// Cleanup on unmount
|
|
521
|
-
(0, _react.useEffect)(() => {
|
|
522
|
-
// Mount/Unmount effect
|
|
523
|
-
return () => {
|
|
524
|
-
// Stop all animations and reset when component unmounts
|
|
525
|
-
visibilityProgress.stopAnimation();
|
|
526
|
-
bottomSheetTranslateY.stopAnimation();
|
|
527
|
-
floatingScale.stopAnimation();
|
|
528
|
-
dragOffset.stopAnimation();
|
|
529
|
-
animatedBottomPosition.stopAnimation();
|
|
530
|
-
floatingPosition.stopAnimation();
|
|
531
|
-
animatedWidth.stopAnimation();
|
|
532
|
-
animatedFloatingHeight.stopAnimation();
|
|
533
|
-
|
|
534
|
-
// Reset to initial values
|
|
535
|
-
visibilityProgress.setValue(0);
|
|
536
|
-
bottomSheetTranslateY.setValue(SCREEN.height);
|
|
537
|
-
floatingScale.setValue(0);
|
|
538
|
-
dragOffset.setValue(0);
|
|
539
|
-
animatedBottomPosition.setValue(initialHeight);
|
|
540
|
-
currentHeightRef.current = initialHeight;
|
|
541
|
-
};
|
|
542
|
-
}, []);
|
|
543
|
-
|
|
544
|
-
// ============================================================================
|
|
545
|
-
// INTERPOLATIONS - All math done natively!
|
|
546
|
-
// ============================================================================
|
|
547
|
-
|
|
548
|
-
// Opacity interpolation for smooth fade
|
|
549
|
-
const modalOpacity = visibilityProgress.interpolate({
|
|
550
|
-
inputRange: [0, 1],
|
|
551
|
-
outputRange: [0, 1],
|
|
552
|
-
extrapolate: "clamp"
|
|
553
|
-
});
|
|
554
|
-
|
|
555
|
-
// ============================================================================
|
|
556
|
-
// REFS for values we need to track
|
|
557
|
-
// ============================================================================
|
|
558
|
-
const effectiveMaxHeight = maxHeight || SCREEN.height - insets.top;
|
|
559
|
-
|
|
560
|
-
// Mode toggle handler
|
|
561
|
-
/**
|
|
562
|
-
* Toggle between bottom sheet and floating modal modes
|
|
563
|
-
*
|
|
564
|
-
* Clears active dragging and resizing states to prevent visual artifacts
|
|
565
|
-
* when switching between modes with different interaction patterns.
|
|
566
|
-
*/
|
|
567
|
-
const toggleMode = (0, _react.useCallback)(() => {
|
|
568
|
-
// Avoid carrying active styling across modes
|
|
569
|
-
setIsDragging(false);
|
|
570
|
-
setIsResizing(false);
|
|
571
|
-
const newMode = mode === "bottomSheet" ? "floating" : "bottomSheet";
|
|
572
|
-
setMode(newMode);
|
|
573
|
-
onModeChange?.(newMode);
|
|
574
|
-
}, [mode, onModeChange]);
|
|
575
|
-
|
|
576
|
-
// Belt-and-suspenders: also clear flags when mode changes
|
|
577
|
-
(0, _react.useEffect)(() => {
|
|
578
|
-
setIsDragging(false);
|
|
579
|
-
setIsResizing(false);
|
|
580
|
-
}, [mode]);
|
|
581
|
-
|
|
582
|
-
// Minimize handler - captures current state and animates out
|
|
583
|
-
const handleMinimize = (0, _react.useCallback)(() => {
|
|
584
|
-
if (!onMinimize) return;
|
|
585
|
-
|
|
586
|
-
// Capture current modal state for restoration
|
|
587
|
-
const currentState = {
|
|
588
|
-
mode,
|
|
589
|
-
panelHeight: currentHeightRef.current,
|
|
590
|
-
floatingPosition: {
|
|
591
|
-
x: currentDimensionsRef.current.left,
|
|
592
|
-
y: currentDimensionsRef.current.top
|
|
593
|
-
},
|
|
594
|
-
floatingDimensions: {
|
|
595
|
-
width: currentDimensionsRef.current.width,
|
|
596
|
-
height: currentDimensionsRef.current.height
|
|
597
|
-
}
|
|
598
|
-
};
|
|
599
|
-
if (enablePersistence && persistenceKey) void _modalStorage.ModalStorage.saveMinimized(persistenceKey, currentState);
|
|
600
|
-
|
|
601
|
-
// Animate modal shrinking toward target position
|
|
602
|
-
const targetX = minimizeTargetPosition?.x ?? SCREEN.width - 50;
|
|
603
|
-
const targetY = minimizeTargetPosition?.y ?? SCREEN.height - 150;
|
|
604
|
-
|
|
605
|
-
// Calculate animation based on current mode
|
|
606
|
-
if (mode === "bottomSheet") {
|
|
607
|
-
// Animate bottom sheet shrinking and moving toward target
|
|
608
|
-
_reactNative.Animated.parallel([_reactNative.Animated.timing(visibilityProgress, {
|
|
609
|
-
toValue: 0,
|
|
610
|
-
duration: 300,
|
|
611
|
-
useNativeDriver: true
|
|
612
|
-
}), _reactNative.Animated.timing(bottomSheetTranslateY, {
|
|
613
|
-
toValue: SCREEN.height,
|
|
614
|
-
duration: 300,
|
|
615
|
-
useNativeDriver: true
|
|
616
|
-
})]).start(() => {
|
|
617
|
-
onMinimize(currentState);
|
|
618
|
-
});
|
|
619
|
-
} else {
|
|
620
|
-
// Floating mode - animate scale and position toward icon
|
|
621
|
-
_reactNative.Animated.parallel([_reactNative.Animated.timing(floatingScale, {
|
|
622
|
-
toValue: 0,
|
|
623
|
-
duration: 300,
|
|
624
|
-
useNativeDriver: true
|
|
625
|
-
}), _reactNative.Animated.timing(visibilityProgress, {
|
|
626
|
-
toValue: 0,
|
|
627
|
-
duration: 300,
|
|
628
|
-
useNativeDriver: true
|
|
629
|
-
}), _reactNative.Animated.timing(floatingPosition, {
|
|
630
|
-
toValue: {
|
|
631
|
-
x: targetX,
|
|
632
|
-
y: targetY
|
|
633
|
-
},
|
|
634
|
-
duration: 300,
|
|
635
|
-
useNativeDriver: true
|
|
636
|
-
})]).start(() => {
|
|
637
|
-
onMinimize(currentState);
|
|
638
|
-
});
|
|
639
|
-
}
|
|
640
|
-
}, [mode, onMinimize, minimizeTargetPosition, enablePersistence, persistenceKey, visibilityProgress, bottomSheetTranslateY, floatingScale, floatingPosition]);
|
|
641
|
-
const lastMinimizeRequest = (0, _react.useRef)(minimizeRequest);
|
|
642
|
-
(0, _react.useEffect)(() => {
|
|
643
|
-
if (lastMinimizeRequest.current === minimizeRequest) return;
|
|
644
|
-
lastMinimizeRequest.current = minimizeRequest;
|
|
645
|
-
handleMinimize();
|
|
646
|
-
}, [minimizeRequest, handleMinimize]);
|
|
647
|
-
|
|
648
|
-
// Apply initial modal state when restoring from minimized
|
|
649
|
-
(0, _react.useEffect)(() => {
|
|
650
|
-
if (!initialModalState) return;
|
|
651
|
-
|
|
652
|
-
// Restore mode
|
|
653
|
-
if (initialModalState.mode) {
|
|
654
|
-
setMode(initialModalState.mode);
|
|
655
|
-
onModeChange?.(initialModalState.mode);
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
// Restore bottom sheet height
|
|
659
|
-
if (initialModalState.panelHeight) {
|
|
660
|
-
setPanelHeight(initialModalState.panelHeight);
|
|
661
|
-
currentHeightRef.current = initialModalState.panelHeight;
|
|
662
|
-
animatedBottomPosition.setValue(initialModalState.panelHeight);
|
|
663
|
-
}
|
|
664
|
-
|
|
665
|
-
// Restore floating dimensions and position
|
|
666
|
-
if (initialModalState.floatingDimensions && initialModalState.floatingPosition) {
|
|
667
|
-
const newDimensions = {
|
|
668
|
-
width: initialModalState.floatingDimensions.width,
|
|
669
|
-
height: initialModalState.floatingDimensions.height,
|
|
670
|
-
top: initialModalState.floatingPosition.y,
|
|
671
|
-
left: initialModalState.floatingPosition.x
|
|
672
|
-
};
|
|
673
|
-
setDimensions(newDimensions);
|
|
674
|
-
floatingPosition.setValue({
|
|
675
|
-
x: initialModalState.floatingPosition.x,
|
|
676
|
-
y: initialModalState.floatingPosition.y
|
|
677
|
-
});
|
|
678
|
-
animatedWidth.setValue(initialModalState.floatingDimensions.width);
|
|
679
|
-
animatedFloatingHeight.setValue(initialModalState.floatingDimensions.height);
|
|
680
|
-
}
|
|
681
|
-
}, [initialModalState]);
|
|
682
|
-
|
|
683
|
-
// ============================================================================
|
|
684
|
-
// EFFECT: Visibility Animations - All using native driver!
|
|
685
|
-
// ============================================================================
|
|
686
|
-
const snapVisibility = shown => {
|
|
687
|
-
if (shown) {
|
|
688
|
-
if (mode === "bottomSheet") {
|
|
689
|
-
bottomSheetTranslateY.setValue(0);
|
|
690
|
-
} else {
|
|
691
|
-
floatingScale.setValue(1);
|
|
692
|
-
floatingPosition.setValue({
|
|
693
|
-
x: currentDimensionsRef.current.left,
|
|
694
|
-
y: currentDimensionsRef.current.top
|
|
695
|
-
});
|
|
696
|
-
}
|
|
697
|
-
visibilityProgress.setValue(1);
|
|
698
|
-
} else {
|
|
699
|
-
if (mode === "bottomSheet") {
|
|
700
|
-
bottomSheetTranslateY.setValue(SCREEN.height);
|
|
701
|
-
}
|
|
702
|
-
visibilityProgress.setValue(0);
|
|
703
|
-
}
|
|
704
|
-
};
|
|
705
|
-
|
|
706
|
-
/**
|
|
707
|
-
* Snap DURING RENDER when `visible` flips, not only in the effect below.
|
|
708
|
-
*
|
|
709
|
-
* These values drive the sheet's opacity/translate through the native
|
|
710
|
-
* driver. The React commit for a `visible` change carries whatever the
|
|
711
|
-
* JS-side values are at render time — the OLD, hidden ones when the snap
|
|
712
|
-
* only happens in the effect — and on Fabric that commit's mount can land
|
|
713
|
-
* on the main thread AFTER the effect's native `setValue`, overwriting it.
|
|
714
|
-
* The Animated node then says "shown" while the UIView sits at opacity 0,
|
|
715
|
-
* until some unrelated re-render commits the JS-side values again. That
|
|
716
|
-
* is how "restore tool A: nothing; restore tool B: A appears; hide B: now
|
|
717
|
-
* B appears" happened — every restore was one commit behind.
|
|
718
|
-
*
|
|
719
|
-
* Setting the values before the render's props are computed makes the
|
|
720
|
-
* commit and the native node agree, whichever lands last. `setValue` is
|
|
721
|
-
* idempotent, so a re-run render is harmless.
|
|
722
|
-
*/
|
|
723
|
-
const snappedVisibleRef = (0, _react.useRef)(null);
|
|
724
|
-
if (INSTANT_MODAL_ENTRANCE && snappedVisibleRef.current !== visible) {
|
|
725
|
-
snappedVisibleRef.current = visible;
|
|
726
|
-
snapVisibility(visible);
|
|
727
|
-
}
|
|
728
|
-
(0, _react.useEffect)(() => {
|
|
729
|
-
// Visibility effect
|
|
730
|
-
let openAnimation = null;
|
|
731
|
-
let closeAnimation = null;
|
|
732
|
-
if (INSTANT_MODAL_ENTRANCE) {
|
|
733
|
-
// Snap to the final state — no animation in either direction. The
|
|
734
|
-
// render-phase snap above already did this for a `visible` flip; this
|
|
735
|
-
// re-applies it for a `mode` change while shown.
|
|
736
|
-
snapVisibility(visible);
|
|
737
|
-
return;
|
|
738
|
-
}
|
|
739
|
-
if (visible) {
|
|
740
|
-
// Reset position if needed and then open
|
|
741
|
-
bottomSheetTranslateY.setValue(SCREEN.height);
|
|
742
|
-
visibilityProgress.setValue(0);
|
|
743
|
-
|
|
744
|
-
// Open animations
|
|
745
|
-
if (mode === "bottomSheet") {
|
|
746
|
-
// Parallel animations for smooth opening
|
|
747
|
-
openAnimation = _reactNative.Animated.parallel([
|
|
748
|
-
// Slide up from bottom
|
|
749
|
-
_reactNative.Animated.spring(bottomSheetTranslateY, {
|
|
750
|
-
toValue: 0,
|
|
751
|
-
tension: 180,
|
|
752
|
-
friction: 22,
|
|
753
|
-
useNativeDriver: true
|
|
754
|
-
}),
|
|
755
|
-
// Fade in backdrop
|
|
756
|
-
_reactNative.Animated.timing(visibilityProgress, {
|
|
757
|
-
toValue: 1,
|
|
758
|
-
duration: 200,
|
|
759
|
-
useNativeDriver: true
|
|
760
|
-
})]);
|
|
761
|
-
openAnimation.start();
|
|
762
|
-
} else {
|
|
763
|
-
// Floating mode entrance - simple fade without scale pop
|
|
764
|
-
floatingScale.setValue(1); // Set scale to 1 directly, no animation
|
|
765
|
-
// Minimizing animated the window to the dock icon's corner. Put it
|
|
766
|
-
// back where it actually lives, or reopening leaves it parked
|
|
767
|
-
// off-screen — `initialModalState` only covers the dock's restore
|
|
768
|
-
// path, and the dial opens the same tool without one.
|
|
769
|
-
floatingPosition.setValue({
|
|
770
|
-
x: currentDimensionsRef.current.left,
|
|
771
|
-
y: currentDimensionsRef.current.top
|
|
772
|
-
});
|
|
773
|
-
openAnimation = _reactNative.Animated.timing(visibilityProgress, {
|
|
774
|
-
toValue: 1,
|
|
775
|
-
duration: 200,
|
|
776
|
-
useNativeDriver: true
|
|
777
|
-
});
|
|
778
|
-
openAnimation.start();
|
|
779
|
-
}
|
|
780
|
-
} else {
|
|
781
|
-
// Close animations
|
|
782
|
-
if (mode === "bottomSheet") {
|
|
783
|
-
closeAnimation = _reactNative.Animated.parallel([
|
|
784
|
-
// Slide down
|
|
785
|
-
_reactNative.Animated.spring(bottomSheetTranslateY, {
|
|
786
|
-
toValue: SCREEN.height,
|
|
787
|
-
tension: 180,
|
|
788
|
-
friction: 22,
|
|
789
|
-
useNativeDriver: true
|
|
790
|
-
}),
|
|
791
|
-
// Fade out backdrop
|
|
792
|
-
_reactNative.Animated.timing(visibilityProgress, {
|
|
793
|
-
toValue: 0,
|
|
794
|
-
duration: 200,
|
|
795
|
-
useNativeDriver: true
|
|
796
|
-
})]);
|
|
797
|
-
closeAnimation.start();
|
|
798
|
-
} else {
|
|
799
|
-
// Floating mode exit - simple fade without scale
|
|
800
|
-
closeAnimation = _reactNative.Animated.timing(visibilityProgress, {
|
|
801
|
-
toValue: 0,
|
|
802
|
-
duration: 200,
|
|
803
|
-
useNativeDriver: true
|
|
804
|
-
});
|
|
805
|
-
closeAnimation.start();
|
|
806
|
-
}
|
|
807
|
-
}
|
|
808
|
-
|
|
809
|
-
// Cleanup function - only stop animations, don't reset values
|
|
810
|
-
return () => {
|
|
811
|
-
// Cleanup animations
|
|
812
|
-
if (openAnimation) {
|
|
813
|
-
openAnimation.stop();
|
|
814
|
-
// Stopped open animation
|
|
815
|
-
}
|
|
816
|
-
if (closeAnimation) {
|
|
817
|
-
closeAnimation.stop();
|
|
818
|
-
// Stopped close animation
|
|
819
|
-
}
|
|
820
|
-
};
|
|
821
|
-
}, [visible, mode, visibilityProgress, bottomSheetTranslateY, floatingScale, floatingPosition, externalAnimatedHeight]); // Removed initialHeight to prevent animation restarts on height changes
|
|
822
|
-
|
|
823
|
-
// ============================================================================
|
|
824
|
-
// OPTIMIZED PAN RESPONDER: Bottom Sheet Resize
|
|
825
|
-
// Following the documentation pattern for proper resize
|
|
826
|
-
// ============================================================================
|
|
827
|
-
const headerTouchOffsetRef = (0, _react.useRef)(0);
|
|
828
|
-
|
|
829
|
-
// DEV-ONLY scripted resize motion (see benchMotion prop). Mirrors
|
|
830
|
-
// onPanResponderMove exactly: direct setValue, no per-frame state. Every
|
|
831
|
-
// ~2.5s it simulates a grab/release (setIsResizing toggles) so the
|
|
832
|
-
// benchmark includes the gesture-boundary re-render cost.
|
|
833
|
-
(0, _react.useEffect)(() => {
|
|
834
|
-
if (!__DEV__ || !benchMotion || !visible) return undefined;
|
|
835
|
-
let rafId = null;
|
|
836
|
-
let intervalId = null;
|
|
837
|
-
let running = true;
|
|
838
|
-
const start = Date.now();
|
|
839
|
-
let grabbed = false;
|
|
840
|
-
const setGrab = on => {
|
|
841
|
-
grabbed = on;
|
|
842
|
-
if (benchMotion === "resize" || benchMotion === "float-resize") {
|
|
843
|
-
setIsResizing(on);
|
|
844
|
-
} else if (benchMotion === "float-drag") {
|
|
845
|
-
setIsDragging(on);
|
|
846
|
-
}
|
|
847
|
-
};
|
|
848
|
-
if (benchMotion === "mode-cycle") {
|
|
849
|
-
intervalId = setInterval(() => toggleMode(), 2200);
|
|
850
|
-
} else {
|
|
851
|
-
const min = minHeight;
|
|
852
|
-
const max = effectiveMaxHeight;
|
|
853
|
-
const tick = () => {
|
|
854
|
-
if (!running) return;
|
|
855
|
-
const t = (Date.now() - start) / 1000;
|
|
856
|
-
const phase = t % 2.5; // grab 2s, release 0.5s
|
|
857
|
-
if (phase < 2 && !grabbed) setGrab(true);else if (phase >= 2 && grabbed) setGrab(false);
|
|
858
|
-
if (grabbed) {
|
|
859
|
-
const wave = (Math.sin(t * 2.2) + 1) / 2;
|
|
860
|
-
if (benchMotion === "resize") {
|
|
861
|
-
const targetHeight = min + wave * (max - min);
|
|
862
|
-
animatedBottomPosition.setValue(targetHeight);
|
|
863
|
-
currentHeightRef.current = targetHeight;
|
|
864
|
-
if (externalAnimatedHeight) {
|
|
865
|
-
externalAnimatedHeight.setValue(targetHeight);
|
|
866
|
-
}
|
|
867
|
-
} else if (benchMotion === "float-drag") {
|
|
868
|
-
// Same write DraggableHeader makes per move event.
|
|
869
|
-
const wave2 = (Math.sin(t * 1.7) + 1) / 2;
|
|
870
|
-
floatingPosition.setValue({
|
|
871
|
-
x: 10 + wave * Math.max(SCREEN.width - FLOATING_WIDTH - 20, 0),
|
|
872
|
-
y: 70 + wave2 * 260
|
|
873
|
-
});
|
|
874
|
-
} else if (benchMotion === "float-resize") {
|
|
875
|
-
// Same writes as the bottom-right corner resize handler.
|
|
876
|
-
const width = FLOATING_WIDTH + wave * Math.max(SCREEN.width - FLOATING_WIDTH - 40, 0);
|
|
877
|
-
const height = FLOATING_HEIGHT + wave * 240;
|
|
878
|
-
animatedWidth.setValue(width);
|
|
879
|
-
animatedFloatingHeight.setValue(height);
|
|
880
|
-
currentDimensionsRef.current = {
|
|
881
|
-
...currentDimensionsRef.current,
|
|
882
|
-
width,
|
|
883
|
-
height
|
|
884
|
-
};
|
|
885
|
-
}
|
|
886
|
-
}
|
|
887
|
-
rafId = requestAnimationFrame(tick);
|
|
888
|
-
};
|
|
889
|
-
rafId = requestAnimationFrame(tick);
|
|
890
|
-
}
|
|
891
|
-
return () => {
|
|
892
|
-
running = false;
|
|
893
|
-
if (rafId != null) cancelAnimationFrame(rafId);
|
|
894
|
-
if (intervalId != null) clearInterval(intervalId);
|
|
895
|
-
setIsResizing(false);
|
|
896
|
-
setIsDragging(false);
|
|
897
|
-
};
|
|
898
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
899
|
-
}, [benchMotion, visible]);
|
|
900
|
-
const bottomSheetPanResponder = (0, _react.useMemo)(() => _reactNative.PanResponder.create({
|
|
901
|
-
// An external `animatedHeight` used to disable this responder
|
|
902
|
-
// outright ("externally controlled"), which left Ask Buoy's sheet —
|
|
903
|
-
// the one host that passes one, for its peek animation — with a
|
|
904
|
-
// header that could not be dragged in bottom-sheet mode. The move
|
|
905
|
-
// and release handlers below already write every height into the
|
|
906
|
-
// external value, so the host and the finger share one number; the
|
|
907
|
-
// grab just has to stop whatever the host is animating first.
|
|
908
|
-
onStartShouldSetPanResponder: () => mode === "bottomSheet",
|
|
909
|
-
onMoveShouldSetPanResponder: (evt, gestureState) => mode === "bottomSheet" && Math.abs(gestureState.dy) > 3,
|
|
910
|
-
onPanResponderTerminationRequest: () => false,
|
|
911
|
-
onPanResponderGrant: evt => {
|
|
912
|
-
setIsResizing(true);
|
|
913
|
-
|
|
914
|
-
// Where inside the header the finger grabbed
|
|
915
|
-
headerTouchOffsetRef.current = evt.nativeEvent.locationY || 0;
|
|
916
|
-
|
|
917
|
-
// Stop any in-flight animations so we start from truth
|
|
918
|
-
animatedBottomPosition.stopAnimation(val => {
|
|
919
|
-
currentHeightRef.current = val;
|
|
920
|
-
});
|
|
921
|
-
externalAnimatedHeight?.stopAnimation();
|
|
922
|
-
bottomSheetTranslateY.stopAnimation();
|
|
923
|
-
},
|
|
924
|
-
onPanResponderMove: evt => {
|
|
925
|
-
// Absolute finger anchoring: sheet top should match finger (minus header offset)
|
|
926
|
-
const sheetTop = evt.nativeEvent.pageY - headerTouchOffsetRef.current;
|
|
927
|
-
// Height is from bottom of screen to sheetTop
|
|
928
|
-
let targetHeight = SCREEN.height - sheetTop;
|
|
929
|
-
|
|
930
|
-
// Clamp
|
|
931
|
-
targetHeight = Math.max(minHeight, Math.min(targetHeight, effectiveMaxHeight));
|
|
932
|
-
|
|
933
|
-
// Push to UI (no React state!)
|
|
934
|
-
animatedBottomPosition.setValue(targetHeight);
|
|
935
|
-
currentHeightRef.current = targetHeight;
|
|
936
|
-
if (externalAnimatedHeight) {
|
|
937
|
-
externalAnimatedHeight.setValue(targetHeight);
|
|
938
|
-
}
|
|
939
|
-
},
|
|
940
|
-
onPanResponderRelease: (evt, gestureState) => {
|
|
941
|
-
setIsResizing(false);
|
|
942
|
-
const finalHeight = currentHeightRef.current;
|
|
943
|
-
|
|
944
|
-
// Optional: close with fast downward swipe
|
|
945
|
-
const shouldClose = gestureState.vy > 0.8 && gestureState.dy > 50 || gestureState.dy > 150 && finalHeight <= minHeight;
|
|
946
|
-
if (shouldClose) {
|
|
947
|
-
_reactNative.Animated.parallel([_reactNative.Animated.timing(visibilityProgress, {
|
|
948
|
-
toValue: 0,
|
|
949
|
-
duration: 200,
|
|
950
|
-
useNativeDriver: true
|
|
951
|
-
}), _reactNative.Animated.spring(bottomSheetTranslateY, {
|
|
952
|
-
toValue: SCREEN.height,
|
|
953
|
-
tension: 180,
|
|
954
|
-
friction: 22,
|
|
955
|
-
useNativeDriver: true
|
|
956
|
-
})]).start(() => onClose());
|
|
957
|
-
return;
|
|
958
|
-
}
|
|
959
|
-
|
|
960
|
-
// We're already at the finger-tracked height; avoid re-animating it.
|
|
961
|
-
setPanelHeight(finalHeight);
|
|
962
|
-
if (externalAnimatedHeight) externalAnimatedHeight.setValue(finalHeight);
|
|
963
|
-
},
|
|
964
|
-
onPanResponderTerminate: () => {
|
|
965
|
-
setIsResizing(false);
|
|
966
|
-
// snap back to the last stable height if you want; otherwise no-op
|
|
967
|
-
}
|
|
968
|
-
}), [mode, minHeight, effectiveMaxHeight, animatedBottomPosition, externalAnimatedHeight, bottomSheetTranslateY, visibilityProgress, onClose]);
|
|
969
|
-
|
|
970
|
-
// ============================================================================
|
|
971
|
-
// CREATE RESIZE HANDLER: For 4-corner resize in floating mode (fixed geometry)
|
|
972
|
-
// ============================================================================
|
|
973
|
-
/**
|
|
974
|
-
* Create a PanResponder for handling corner-based resizing in floating mode
|
|
975
|
-
*
|
|
976
|
-
* This function generates resize handlers for each corner that allow users to
|
|
977
|
-
* resize the floating modal by dragging from any corner. It includes boundary
|
|
978
|
-
* checking and minimum size constraints.
|
|
979
|
-
*
|
|
980
|
-
* @param corner - Which corner this handler is for
|
|
981
|
-
* @returns PanResponder configured for that corner's resize behavior
|
|
982
|
-
*
|
|
983
|
-
* @performance Uses direct animated value updates for smooth resizing
|
|
984
|
-
* @performance Includes safe area boundary checking for all corners
|
|
985
|
-
*/
|
|
986
|
-
const createResizeHandler = (0, _react.useCallback)(corner => {
|
|
987
|
-
let didResize = false;
|
|
988
|
-
return _reactNative.PanResponder.create({
|
|
989
|
-
onStartShouldSetPanResponder: () => mode === "floating",
|
|
990
|
-
onMoveShouldSetPanResponder: () => mode === "floating",
|
|
991
|
-
onPanResponderGrant: () => {
|
|
992
|
-
didResize = false;
|
|
993
|
-
const currentDims = currentDimensionsRef.current;
|
|
994
|
-
|
|
995
|
-
// If any animation is in-flight, stop and capture final XY to keep math consistent
|
|
996
|
-
floatingPosition.stopAnimation(({
|
|
997
|
-
x,
|
|
998
|
-
y
|
|
999
|
-
}) => {
|
|
1000
|
-
floatingPosition.setValue({
|
|
1001
|
-
x,
|
|
1002
|
-
y
|
|
1003
|
-
});
|
|
1004
|
-
});
|
|
1005
|
-
setIsResizing(true);
|
|
1006
|
-
// Snapshot starting rect
|
|
1007
|
-
startDimensionsRef.current = {
|
|
1008
|
-
...currentDims
|
|
1009
|
-
};
|
|
1010
|
-
|
|
1011
|
-
// Keep your existing refs up-to-date (not strictly needed now, but harmless)
|
|
1012
|
-
sHeight.current = currentDims.height;
|
|
1013
|
-
sWidth.current = currentDims.width;
|
|
1014
|
-
offsetX.current = currentDims.left;
|
|
1015
|
-
offsetY.current = currentDims.top;
|
|
1016
|
-
},
|
|
1017
|
-
onPanResponderMove: (_evt, gestureState) => {
|
|
1018
|
-
const {
|
|
1019
|
-
dx,
|
|
1020
|
-
dy
|
|
1021
|
-
} = gestureState;
|
|
1022
|
-
if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5) return;
|
|
1023
|
-
didResize = true;
|
|
1024
|
-
// Safe-area–aware bounds
|
|
1025
|
-
const minLeft = Math.max(0, insets.left || 0);
|
|
1026
|
-
const maxRight = containerBounds.width - Math.max(0, insets.right || 0);
|
|
1027
|
-
const minTop = Math.max(0, insets.top || 0);
|
|
1028
|
-
const maxBottom = containerBounds.height - Math.max(0, insets.bottom || 0);
|
|
1029
|
-
const start = startDimensionsRef.current;
|
|
1030
|
-
const startRight = start.left + start.width;
|
|
1031
|
-
const startBottom = start.top + start.height;
|
|
1032
|
-
let left = start.left;
|
|
1033
|
-
let top = start.top;
|
|
1034
|
-
let right = startRight;
|
|
1035
|
-
let bottom = startBottom;
|
|
1036
|
-
switch (corner) {
|
|
1037
|
-
case "topLeft":
|
|
1038
|
-
{
|
|
1039
|
-
// Move left & top; anchor right & bottom
|
|
1040
|
-
const newLeft = Math.max(minLeft, Math.min(start.left + dx, startRight - FLOATING_MIN_WIDTH));
|
|
1041
|
-
const newTop = Math.max(minTop, Math.min(start.top + dy, startBottom - FLOATING_MIN_HEIGHT));
|
|
1042
|
-
left = newLeft;
|
|
1043
|
-
top = newTop;
|
|
1044
|
-
right = startRight;
|
|
1045
|
-
bottom = startBottom;
|
|
1046
|
-
break;
|
|
1047
|
-
}
|
|
1048
|
-
case "topRight":
|
|
1049
|
-
{
|
|
1050
|
-
// Move right & top; anchor left & bottom
|
|
1051
|
-
const newRight = Math.min(maxRight, Math.max(startRight + dx, start.left + FLOATING_MIN_WIDTH));
|
|
1052
|
-
const newTop = Math.max(minTop, Math.min(start.top + dy, startBottom - FLOATING_MIN_HEIGHT));
|
|
1053
|
-
left = start.left;
|
|
1054
|
-
top = newTop;
|
|
1055
|
-
right = newRight;
|
|
1056
|
-
bottom = startBottom;
|
|
1057
|
-
break;
|
|
1058
|
-
}
|
|
1059
|
-
case "bottomLeft":
|
|
1060
|
-
{
|
|
1061
|
-
// Move left & bottom; anchor right & top
|
|
1062
|
-
const newLeft = Math.max(minLeft, Math.min(start.left + dx, startRight - FLOATING_MIN_WIDTH));
|
|
1063
|
-
const newBottom = Math.min(maxBottom, Math.max(startBottom + dy, start.top + FLOATING_MIN_HEIGHT));
|
|
1064
|
-
left = newLeft;
|
|
1065
|
-
top = start.top;
|
|
1066
|
-
right = startRight;
|
|
1067
|
-
bottom = newBottom;
|
|
1068
|
-
break;
|
|
1069
|
-
}
|
|
1070
|
-
case "bottomRight":
|
|
1071
|
-
{
|
|
1072
|
-
// Move right & bottom; anchor left & top
|
|
1073
|
-
const newRight = Math.min(maxRight, Math.max(startRight + dx, start.left + FLOATING_MIN_WIDTH));
|
|
1074
|
-
const newBottom = Math.min(maxBottom, Math.max(startBottom + dy, start.top + FLOATING_MIN_HEIGHT));
|
|
1075
|
-
left = start.left;
|
|
1076
|
-
top = start.top;
|
|
1077
|
-
right = newRight;
|
|
1078
|
-
bottom = newBottom;
|
|
1079
|
-
break;
|
|
1080
|
-
}
|
|
1081
|
-
}
|
|
1082
|
-
|
|
1083
|
-
// Derive width/height from the edges
|
|
1084
|
-
const updatedWidth = Math.max(FLOATING_MIN_WIDTH, right - left);
|
|
1085
|
-
const updatedHeight = Math.max(FLOATING_MIN_HEIGHT, bottom - top);
|
|
1086
|
-
|
|
1087
|
-
// Push to UI
|
|
1088
|
-
setDimensions({
|
|
1089
|
-
width: updatedWidth,
|
|
1090
|
-
height: updatedHeight,
|
|
1091
|
-
left,
|
|
1092
|
-
top
|
|
1093
|
-
});
|
|
1094
|
-
|
|
1095
|
-
// Keep animated values in sync for your transforms
|
|
1096
|
-
animatedWidth.setValue(updatedWidth);
|
|
1097
|
-
animatedFloatingHeight.setValue(updatedHeight);
|
|
1098
|
-
floatingPosition.setValue({
|
|
1099
|
-
x: left,
|
|
1100
|
-
y: top
|
|
1101
|
-
});
|
|
1102
|
-
|
|
1103
|
-
// Cache
|
|
1104
|
-
currentDimensionsRef.current = {
|
|
1105
|
-
width: updatedWidth,
|
|
1106
|
-
height: updatedHeight,
|
|
1107
|
-
left,
|
|
1108
|
-
top
|
|
1109
|
-
};
|
|
1110
|
-
},
|
|
1111
|
-
onPanResponderRelease: () => {
|
|
1112
|
-
setIsResizing(false);
|
|
1113
|
-
didResize = false;
|
|
1114
|
-
// currentDimensionsRef already holds the last values
|
|
1115
|
-
setDimensions(currentDimensionsRef.current);
|
|
1116
|
-
},
|
|
1117
|
-
onPanResponderTerminate: () => {
|
|
1118
|
-
setIsResizing(false);
|
|
1119
|
-
didResize = false;
|
|
1120
|
-
}
|
|
1121
|
-
});
|
|
1122
|
-
}, [mode, containerBounds, insets.left, insets.right, insets.top, insets.bottom, floatingPosition, animatedWidth, animatedFloatingHeight, onClose, onBack]);
|
|
1123
|
-
const resizeHandlers = (0, _react.useMemo)(() => {
|
|
1124
|
-
return {
|
|
1125
|
-
topLeft: createResizeHandler("topLeft"),
|
|
1126
|
-
topRight: createResizeHandler("topRight"),
|
|
1127
|
-
bottomLeft: createResizeHandler("bottomLeft"),
|
|
1128
|
-
bottomRight: createResizeHandler("bottomRight")
|
|
1129
|
-
};
|
|
1130
|
-
}, [createResizeHandler]);
|
|
1131
|
-
|
|
1132
|
-
// ============================================================================
|
|
1133
|
-
// Floating Mode Drag Handlers for DraggableHeader
|
|
1134
|
-
// ============================================================================
|
|
1135
|
-
const handleFloatingDragStart = (0, _react.useCallback)(() => {
|
|
1136
|
-
setIsDragging(true);
|
|
1137
|
-
}, []);
|
|
1138
|
-
const handleFloatingDragEnd = (0, _react.useCallback)(finalPosition => {
|
|
1139
|
-
setIsDragging(false);
|
|
1140
|
-
|
|
1141
|
-
// Update dimensions state to match final position
|
|
1142
|
-
const currentDims = currentDimensionsRef.current;
|
|
1143
|
-
const newDimensions = {
|
|
1144
|
-
...currentDims,
|
|
1145
|
-
left: finalPosition.x,
|
|
1146
|
-
top: finalPosition.y
|
|
1147
|
-
};
|
|
1148
|
-
setDimensions(newDimensions);
|
|
1149
|
-
}, []);
|
|
1150
|
-
|
|
1151
|
-
// Track taps for double/triple tap functionality
|
|
1152
|
-
const lastTapRef = (0, _react.useRef)(0);
|
|
1153
|
-
const tapCountRef = (0, _react.useRef)(0);
|
|
1154
|
-
const tapTimeoutRef = (0, _react.useRef)(null);
|
|
1155
|
-
const handleFloatingTap = (0, _react.useCallback)(() => {
|
|
1156
|
-
const now = Date.now();
|
|
1157
|
-
const timeSinceLastTap = now - lastTapRef.current;
|
|
1158
|
-
|
|
1159
|
-
// Reset tap count if more than 500ms since last tap
|
|
1160
|
-
if (timeSinceLastTap > 500) {
|
|
1161
|
-
tapCountRef.current = 0;
|
|
1162
|
-
}
|
|
1163
|
-
tapCountRef.current++;
|
|
1164
|
-
lastTapRef.current = now;
|
|
1165
|
-
|
|
1166
|
-
// Clear existing timeout
|
|
1167
|
-
if (tapTimeoutRef.current) {
|
|
1168
|
-
clearTimeout(tapTimeoutRef.current);
|
|
1169
|
-
}
|
|
1170
|
-
|
|
1171
|
-
// Set timeout to process the tap gesture
|
|
1172
|
-
tapTimeoutRef.current = setTimeout(() => {
|
|
1173
|
-
if (tapCountRef.current === 2) {
|
|
1174
|
-
// Double tap - toggle mode
|
|
1175
|
-
toggleMode();
|
|
1176
|
-
} else if (tapCountRef.current >= 3) {
|
|
1177
|
-
// Triple tap - minimize modal (if available)
|
|
1178
|
-
if (onMinimize) {
|
|
1179
|
-
handleMinimize();
|
|
1180
|
-
}
|
|
1181
|
-
}
|
|
1182
|
-
tapCountRef.current = 0;
|
|
1183
|
-
}, 300);
|
|
1184
|
-
}, [toggleMode, onMinimize, handleMinimize]);
|
|
1185
|
-
|
|
1186
|
-
// Clean up timeout on unmount for main component tap handler
|
|
1187
|
-
(0, _react.useEffect)(() => {
|
|
1188
|
-
return () => {
|
|
1189
|
-
if (tapTimeoutRef.current) {
|
|
1190
|
-
clearTimeout(tapTimeoutRef.current);
|
|
1191
|
-
}
|
|
1192
|
-
};
|
|
1193
|
-
}, []);
|
|
1194
|
-
|
|
1195
|
-
// ============================================================================
|
|
1196
|
-
// RENDER: Modal UI with transform-based animations
|
|
1197
|
-
// ============================================================================
|
|
1198
|
-
|
|
1199
|
-
// When not visible the SAME tree is rendered, just parked off-screen. It has
|
|
1200
|
-
// to be the same tree: React reconciles by position, so a separate "hidden"
|
|
1201
|
-
// branch would unmount and rebuild every child on each minimize AND each
|
|
1202
|
-
// restore — which is the whole cost minimizing is supposed to avoid.
|
|
1203
|
-
|
|
1204
|
-
// Render floating mode
|
|
1205
|
-
if (mode === "floating") {
|
|
1206
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
|
|
1207
|
-
nativeID: "jsmodal-root",
|
|
1208
|
-
pointerEvents: visible ? "auto" : "none",
|
|
1209
|
-
accessibilityElementsHidden: !visible,
|
|
1210
|
-
importantForAccessibility: visible ? "auto" : "no-hide-descendants",
|
|
1211
|
-
style: [styles.floatingModal, {
|
|
1212
|
-
width: dimensions.width,
|
|
1213
|
-
// Use state dimensions for real-time updates
|
|
1214
|
-
height: dimensions.height,
|
|
1215
|
-
opacity: modalOpacity,
|
|
1216
|
-
transform: [{
|
|
1217
|
-
translateX: floatingPosition.x
|
|
1218
|
-
}, {
|
|
1219
|
-
translateY: floatingPosition.y
|
|
1220
|
-
}],
|
|
1221
|
-
...(zIndex !== undefined && {
|
|
1222
|
-
zIndex
|
|
1223
|
-
})
|
|
1224
|
-
}, variant === "night" && styles.nightFloatingModal, (isDragging || isResizing) && styles.floatingModalDragging, customStyles.container, !visible && styles.parkedOffscreen],
|
|
1225
|
-
children: [background && variant === "night" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1226
|
-
style: styles.nightBackdropFloating,
|
|
1227
|
-
pointerEvents: "none",
|
|
1228
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolBackground.ToolBackground, {})
|
|
1229
|
-
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.DraggableHeader, {
|
|
1230
|
-
position: floatingPosition,
|
|
1231
|
-
onDragStart: handleFloatingDragStart,
|
|
1232
|
-
onDragEnd: handleFloatingDragEnd,
|
|
1233
|
-
onTap: handleFloatingTap,
|
|
1234
|
-
containerBounds: containerBounds,
|
|
1235
|
-
elementSize: dimensions,
|
|
1236
|
-
minPosition: {
|
|
1237
|
-
x: 0,
|
|
1238
|
-
y: insets.top
|
|
1239
|
-
},
|
|
1240
|
-
style: styles.floatingHeader,
|
|
1241
|
-
enabled: mode === "floating" && !isResizing,
|
|
1242
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ModalHeader, {
|
|
1243
|
-
header: header,
|
|
1244
|
-
onClose: onClose,
|
|
1245
|
-
onToggleMode: toggleMode,
|
|
1246
|
-
onMinimize: onMinimize ? handleMinimize : undefined,
|
|
1247
|
-
isResizing: isDragging || isResizing,
|
|
1248
|
-
mode: mode,
|
|
1249
|
-
variant: variant
|
|
1250
|
-
})
|
|
1251
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1252
|
-
style: styles.windowControlsContainer,
|
|
1253
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.WindowControls, {
|
|
1254
|
-
onClose: onClose,
|
|
1255
|
-
onMinimize: onMinimize ? handleMinimize : undefined,
|
|
1256
|
-
onToggleMode: toggleMode,
|
|
1257
|
-
mode: mode,
|
|
1258
|
-
variant: variant
|
|
1259
|
-
})
|
|
1260
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1261
|
-
style: [styles.content, variant === "night" && styles.nightContent, customStyles.content],
|
|
1262
|
-
children: [background && variant !== "night" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolBackground.ToolBackground, {}) : null, disableScrollWrapper ?
|
|
1263
|
-
/*#__PURE__*/
|
|
1264
|
-
// Render children directly when they manage their own scrolling (FlatList, etc.)
|
|
1265
|
-
(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1266
|
-
style: {
|
|
1267
|
-
flex: 1,
|
|
1268
|
-
paddingBottom: footerHeight
|
|
1269
|
-
},
|
|
1270
|
-
children: children
|
|
1271
|
-
}) :
|
|
1272
|
-
/*#__PURE__*/
|
|
1273
|
-
// Wrap in ScrollView for content that needs scrolling
|
|
1274
|
-
(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
|
|
1275
|
-
style: {
|
|
1276
|
-
flex: 1
|
|
1277
|
-
},
|
|
1278
|
-
contentContainerStyle: {
|
|
1279
|
-
flexGrow: 1,
|
|
1280
|
-
paddingBottom: footerHeight
|
|
1281
|
-
},
|
|
1282
|
-
showsVerticalScrollIndicator: true,
|
|
1283
|
-
nestedScrollEnabled: true
|
|
1284
|
-
// Without this, a tap on a button while the keyboard is up only
|
|
1285
|
-
// dismisses the keyboard: typing a URL and tapping Load did nothing.
|
|
1286
|
-
,
|
|
1287
|
-
keyboardShouldPersistTaps: "handled",
|
|
1288
|
-
children: children
|
|
1289
|
-
}), footer ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1290
|
-
style: footerStyles.footerContainer,
|
|
1291
|
-
children: footer
|
|
1292
|
-
}) : null]
|
|
1293
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1294
|
-
...resizeHandlers.bottomLeft.panHandlers,
|
|
1295
|
-
style: [styles.cornerHandleWrapper, {
|
|
1296
|
-
bottom: 4,
|
|
1297
|
-
left: 4
|
|
1298
|
-
}],
|
|
1299
|
-
hitSlop: {
|
|
1300
|
-
top: 2,
|
|
1301
|
-
left: 2,
|
|
1302
|
-
right: 2,
|
|
1303
|
-
bottom: 2
|
|
1304
|
-
},
|
|
1305
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(CornerHandle, {
|
|
1306
|
-
position: "bottomLeft",
|
|
1307
|
-
isActive: isDragging || isResizing
|
|
1308
|
-
})
|
|
1309
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1310
|
-
...resizeHandlers.bottomRight.panHandlers,
|
|
1311
|
-
style: [styles.cornerHandleWrapper, {
|
|
1312
|
-
bottom: 4,
|
|
1313
|
-
right: 4
|
|
1314
|
-
}],
|
|
1315
|
-
hitSlop: {
|
|
1316
|
-
top: 2,
|
|
1317
|
-
left: 2,
|
|
1318
|
-
right: 2,
|
|
1319
|
-
bottom: 2
|
|
1320
|
-
},
|
|
1321
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(CornerHandle, {
|
|
1322
|
-
position: "bottomRight",
|
|
1323
|
-
isActive: isDragging || isResizing
|
|
1324
|
-
})
|
|
1325
|
-
})]
|
|
1326
|
-
});
|
|
1327
|
-
}
|
|
1328
|
-
|
|
1329
|
-
// Render bottom sheet mode with proper height animation
|
|
1330
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1331
|
-
style: [
|
|
1332
|
-
// Same box either way — parking it off-screen instead of resizing it
|
|
1333
|
-
// keeps the sheet's layout intact, so coming back is a translate and
|
|
1334
|
-
// not a full relayout.
|
|
1335
|
-
visible ? styles.fullScreenContainer : styles.parkedFullScreen, visible && zIndex !== undefined && {
|
|
1336
|
-
zIndex
|
|
1337
|
-
}],
|
|
1338
|
-
pointerEvents: visible ? "box-none" : "none",
|
|
1339
|
-
accessibilityElementsHidden: !visible,
|
|
1340
|
-
importantForAccessibility: visible ? "auto" : "no-hide-descendants",
|
|
1341
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
|
|
1342
|
-
nativeID: "jsmodal-root",
|
|
1343
|
-
style: [styles.bottomSheetWrapper, {
|
|
1344
|
-
opacity: modalOpacity,
|
|
1345
|
-
transform: [{
|
|
1346
|
-
translateY: bottomSheetTranslateY
|
|
1347
|
-
}]
|
|
1348
|
-
}],
|
|
1349
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
|
|
1350
|
-
style: [styles.bottomSheet, variant === "night" && styles.nightBottomSheet, customStyles.container, {
|
|
1351
|
-
height: externalAnimatedHeight || animatedBottomPosition
|
|
1352
|
-
}],
|
|
1353
|
-
children: [background && variant === "night" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1354
|
-
style: styles.nightBackdropSheet,
|
|
1355
|
-
pointerEvents: "none",
|
|
1356
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolBackground.ToolBackground, {})
|
|
1357
|
-
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(ModalHeader, {
|
|
1358
|
-
header: header,
|
|
1359
|
-
onClose: onClose,
|
|
1360
|
-
onToggleMode: toggleMode,
|
|
1361
|
-
onMinimize: onMinimize ? handleMinimize : undefined,
|
|
1362
|
-
isResizing: isResizing,
|
|
1363
|
-
mode: mode,
|
|
1364
|
-
panHandlers: bottomSheetPanResponder.panHandlers,
|
|
1365
|
-
variant: variant
|
|
1366
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1367
|
-
style: styles.windowControlsContainer,
|
|
1368
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.WindowControls, {
|
|
1369
|
-
onClose: onClose,
|
|
1370
|
-
onMinimize: onMinimize ? handleMinimize : undefined,
|
|
1371
|
-
onToggleMode: toggleMode,
|
|
1372
|
-
mode: mode,
|
|
1373
|
-
variant: variant
|
|
1374
|
-
})
|
|
1375
|
-
}), hintLoaded && showHint && mode === "bottomSheet" && !hintsDisabled && /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.ModalHintBanner, {
|
|
1376
|
-
onAcknowledge: handleHintAcknowledge
|
|
1377
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
1378
|
-
style: [styles.content, variant === "night" && styles.nightContent, customStyles.content],
|
|
1379
|
-
children: [background && variant !== "night" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolBackground.ToolBackground, {}) : null, disableScrollWrapper ?
|
|
1380
|
-
/*#__PURE__*/
|
|
1381
|
-
// Render children directly when they manage their own scrolling (FlatList, etc.)
|
|
1382
|
-
(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1383
|
-
style: {
|
|
1384
|
-
flex: 1,
|
|
1385
|
-
paddingBottom: footerHeight
|
|
1386
|
-
},
|
|
1387
|
-
children: children
|
|
1388
|
-
}) :
|
|
1389
|
-
/*#__PURE__*/
|
|
1390
|
-
// Wrap in ScrollView for content that needs scrolling
|
|
1391
|
-
(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
|
|
1392
|
-
style: {
|
|
1393
|
-
flex: 1
|
|
1394
|
-
},
|
|
1395
|
-
contentContainerStyle: {
|
|
1396
|
-
flexGrow: 1,
|
|
1397
|
-
paddingBottom: footerHeight
|
|
1398
|
-
},
|
|
1399
|
-
showsVerticalScrollIndicator: true,
|
|
1400
|
-
nestedScrollEnabled: true,
|
|
1401
|
-
keyboardShouldPersistTaps: "handled",
|
|
1402
|
-
children: children
|
|
1403
|
-
}), footer ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1404
|
-
style: footerStyles.footerContainer,
|
|
1405
|
-
children: footer
|
|
1406
|
-
}) : null]
|
|
1407
|
-
})]
|
|
1408
|
-
})
|
|
1409
|
-
})
|
|
1410
|
-
});
|
|
1411
|
-
};
|
|
1412
|
-
|
|
1413
|
-
// ============================================================================
|
|
1414
|
-
// STYLES - Visual styling for all modal components
|
|
1415
|
-
// ============================================================================
|
|
1416
|
-
const styles = _reactNative.StyleSheet.create({
|
|
1417
|
-
fullScreenContainer: {
|
|
1418
|
-
..._absoluteFill.absoluteFill,
|
|
1419
|
-
zIndex: 1000
|
|
1420
|
-
},
|
|
1421
|
-
bottomSheetWrapper: {
|
|
1422
|
-
position: "absolute",
|
|
1423
|
-
bottom: 0,
|
|
1424
|
-
left: 0,
|
|
1425
|
-
right: 0
|
|
1426
|
-
},
|
|
1427
|
-
bottomSheet: {
|
|
1428
|
-
backgroundColor: _index.buoyColors.card,
|
|
1429
|
-
// Buoy card
|
|
1430
|
-
borderTopLeftRadius: 6,
|
|
1431
|
-
borderTopRightRadius: 6,
|
|
1432
|
-
borderWidth: 1,
|
|
1433
|
-
borderColor: _index.buoyColors.border,
|
|
1434
|
-
shadowColor: _index.buoyColors.primary,
|
|
1435
|
-
shadowOffset: {
|
|
1436
|
-
width: 0,
|
|
1437
|
-
height: -4
|
|
1438
|
-
},
|
|
1439
|
-
shadowOpacity: 0.2,
|
|
1440
|
-
shadowRadius: 12,
|
|
1441
|
-
elevation: 20
|
|
1442
|
-
},
|
|
1443
|
-
/** Off-screen park for a minimized floating modal — same box, moved away. */
|
|
1444
|
-
parkedOffscreen: {
|
|
1445
|
-
left: -9999,
|
|
1446
|
-
top: -9999,
|
|
1447
|
-
opacity: 0
|
|
1448
|
-
},
|
|
1449
|
-
/**
|
|
1450
|
-
* Off-screen park for a minimized bottom sheet. Screen-sized on purpose:
|
|
1451
|
-
* `fullScreenContainer` is an absolute fill, and shrinking it here would
|
|
1452
|
-
* relayout the whole sheet on every minimize/restore.
|
|
1453
|
-
*/
|
|
1454
|
-
parkedFullScreen: {
|
|
1455
|
-
position: "absolute",
|
|
1456
|
-
left: -9999,
|
|
1457
|
-
top: -9999,
|
|
1458
|
-
width: SCREEN.width,
|
|
1459
|
-
height: SCREEN.height,
|
|
1460
|
-
opacity: 0
|
|
1461
|
-
},
|
|
1462
|
-
floatingModal: {
|
|
1463
|
-
position: "absolute",
|
|
1464
|
-
backgroundColor: _index.buoyColors.card,
|
|
1465
|
-
borderRadius: 6,
|
|
1466
|
-
borderWidth: 1,
|
|
1467
|
-
borderColor: _index.buoyColors.border,
|
|
1468
|
-
shadowColor: _index.buoyColors.primary,
|
|
1469
|
-
shadowOffset: {
|
|
1470
|
-
width: 0,
|
|
1471
|
-
height: 0
|
|
1472
|
-
},
|
|
1473
|
-
shadowOpacity: 0.3,
|
|
1474
|
-
shadowRadius: 20,
|
|
1475
|
-
elevation: 24,
|
|
1476
|
-
zIndex: 1000,
|
|
1477
|
-
// Default dimensions, will be overridden by animated values
|
|
1478
|
-
width: FLOATING_WIDTH,
|
|
1479
|
-
height: FLOATING_HEIGHT
|
|
1480
|
-
},
|
|
1481
|
-
floatingModalDragging: {
|
|
1482
|
-
borderColor: _index.buoyColors.primary,
|
|
1483
|
-
borderWidth: 2,
|
|
1484
|
-
shadowColor: _index.buoyColors.primary + "99",
|
|
1485
|
-
shadowOpacity: 0.8,
|
|
1486
|
-
shadowRadius: 12
|
|
1487
|
-
},
|
|
1488
|
-
header: {
|
|
1489
|
-
borderTopLeftRadius: 6,
|
|
1490
|
-
borderTopRightRadius: 6,
|
|
1491
|
-
backgroundColor: _index.buoyColors.card,
|
|
1492
|
-
// Buoy card color
|
|
1493
|
-
minHeight: 56,
|
|
1494
|
-
borderWidth: 1,
|
|
1495
|
-
borderColor: _index.buoyColors.border,
|
|
1496
|
-
// Buoy border
|
|
1497
|
-
borderBottomWidth: 1,
|
|
1498
|
-
borderBottomColor: _index.buoyColors.border
|
|
1499
|
-
},
|
|
1500
|
-
// ── Night variant (Everlights sheet — see ui/night/nightTheme.ts) ────────
|
|
1501
|
-
// NO `overflow: "hidden"` on the sheets: Fabric clips children to the
|
|
1502
|
-
// square rect, so the star-field layer's corner painted OVER the rounded
|
|
1503
|
-
// corner (it read as chopped off) — and iOS suppresses a layer's own shadow
|
|
1504
|
-
// when it clips. The backdrop clips itself instead (nightBackdrop* below).
|
|
1505
|
-
nightBottomSheet: {
|
|
1506
|
-
backgroundColor: _nightTheme.night.color.bg,
|
|
1507
|
-
borderTopLeftRadius: _nightTheme.night.radius.sheet,
|
|
1508
|
-
borderTopRightRadius: _nightTheme.night.radius.sheet,
|
|
1509
|
-
borderWidth: _reactNative.StyleSheet.hairlineWidth,
|
|
1510
|
-
borderColor: _nightTheme.night.color.accent + "55",
|
|
1511
|
-
shadowColor: _nightTheme.night.color.accent,
|
|
1512
|
-
shadowOffset: {
|
|
1513
|
-
width: 0,
|
|
1514
|
-
height: -4
|
|
1515
|
-
},
|
|
1516
|
-
shadowOpacity: 0.22,
|
|
1517
|
-
shadowRadius: 10
|
|
1518
|
-
},
|
|
1519
|
-
nightFloatingModal: {
|
|
1520
|
-
backgroundColor: _nightTheme.night.color.bg,
|
|
1521
|
-
borderRadius: _nightTheme.night.radius.sheet,
|
|
1522
|
-
borderWidth: _reactNative.StyleSheet.hairlineWidth,
|
|
1523
|
-
borderColor: _nightTheme.night.color.accent + "55",
|
|
1524
|
-
shadowColor: _nightTheme.night.color.accent,
|
|
1525
|
-
shadowOffset: {
|
|
1526
|
-
width: 0,
|
|
1527
|
-
height: 0
|
|
1528
|
-
},
|
|
1529
|
-
shadowOpacity: 0.22,
|
|
1530
|
-
shadowRadius: 14
|
|
1531
|
-
},
|
|
1532
|
-
/** The header is glass — the sheet-level star field runs through it. */
|
|
1533
|
-
nightHeader: {
|
|
1534
|
-
backgroundColor: "transparent",
|
|
1535
|
-
borderWidth: 0,
|
|
1536
|
-
borderBottomWidth: 0,
|
|
1537
|
-
borderTopLeftRadius: _nightTheme.night.radius.sheet,
|
|
1538
|
-
borderTopRightRadius: _nightTheme.night.radius.sheet
|
|
1539
|
-
},
|
|
1540
|
-
nightContent: {
|
|
1541
|
-
backgroundColor: "transparent"
|
|
1542
|
-
},
|
|
1543
|
-
/**
|
|
1544
|
-
* The hoisted star field clips ITSELF to the sheet's corners (matching
|
|
1545
|
-
* radii + overflow hidden) — see the note on the sheet styles above. It
|
|
1546
|
-
* also keeps scenes that animate outside their own bounds (Hyperspace's
|
|
1547
|
-
* scaled shells) from bleeding past the window.
|
|
1548
|
-
*/
|
|
1549
|
-
nightBackdropSheet: {
|
|
1550
|
-
..._absoluteFill.absoluteFill,
|
|
1551
|
-
borderTopLeftRadius: _nightTheme.night.radius.sheet,
|
|
1552
|
-
borderTopRightRadius: _nightTheme.night.radius.sheet,
|
|
1553
|
-
overflow: "hidden"
|
|
1554
|
-
},
|
|
1555
|
-
nightBackdropFloating: {
|
|
1556
|
-
..._absoluteFill.absoluteFill,
|
|
1557
|
-
borderRadius: _nightTheme.night.radius.sheet,
|
|
1558
|
-
overflow: "hidden"
|
|
1559
|
-
},
|
|
1560
|
-
/** Neutral Everlights handle instead of the glowing teal bar. */
|
|
1561
|
-
nightDragIndicator: {
|
|
1562
|
-
width: 36,
|
|
1563
|
-
height: 5,
|
|
1564
|
-
borderRadius: 2.5,
|
|
1565
|
-
backgroundColor: _nightTheme.night.color.placeholder,
|
|
1566
|
-
shadowOpacity: 0,
|
|
1567
|
-
elevation: 0
|
|
1568
|
-
},
|
|
1569
|
-
floatingHeader: {
|
|
1570
|
-
borderTopLeftRadius: 6,
|
|
1571
|
-
borderTopRightRadius: 6
|
|
1572
|
-
},
|
|
1573
|
-
windowControlsContainer: {
|
|
1574
|
-
position: "absolute",
|
|
1575
|
-
top: 4,
|
|
1576
|
-
right: 4,
|
|
1577
|
-
zIndex: 10
|
|
1578
|
-
},
|
|
1579
|
-
floatingModeHeader: {
|
|
1580
|
-
borderTopLeftRadius: 6,
|
|
1581
|
-
borderTopRightRadius: 6
|
|
1582
|
-
},
|
|
1583
|
-
headerInner: {
|
|
1584
|
-
flex: 1,
|
|
1585
|
-
justifyContent: "center"
|
|
1586
|
-
},
|
|
1587
|
-
dragIndicatorContainer: {
|
|
1588
|
-
alignItems: "center",
|
|
1589
|
-
paddingVertical: 8,
|
|
1590
|
-
backgroundColor: "transparent"
|
|
1591
|
-
},
|
|
1592
|
-
/**
|
|
1593
|
-
* With custom header content the pill shares the top band with the window
|
|
1594
|
-
* controls, so the strip claims that band (and centres the pill in it)
|
|
1595
|
-
* rather than the header row below paying for the clearance sideways.
|
|
1596
|
-
*/
|
|
1597
|
-
dragIndicatorContainerCustom: {
|
|
1598
|
-
minHeight: WINDOW_CONTROLS_BAND,
|
|
1599
|
-
justifyContent: "center",
|
|
1600
|
-
paddingVertical: 0,
|
|
1601
|
-
backgroundColor: "transparent"
|
|
1602
|
-
},
|
|
1603
|
-
dragIndicator: {
|
|
1604
|
-
width: 40,
|
|
1605
|
-
height: 3,
|
|
1606
|
-
backgroundColor: _index.buoyColors.primary,
|
|
1607
|
-
// Buoy primary teal
|
|
1608
|
-
borderRadius: 2,
|
|
1609
|
-
shadowColor: _index.buoyColors.primary,
|
|
1610
|
-
shadowOffset: {
|
|
1611
|
-
width: 0,
|
|
1612
|
-
height: 0
|
|
1613
|
-
},
|
|
1614
|
-
shadowOpacity: 0.6,
|
|
1615
|
-
shadowRadius: 4
|
|
1616
|
-
},
|
|
1617
|
-
floatingDragIndicator: {
|
|
1618
|
-
width: 50,
|
|
1619
|
-
height: 5,
|
|
1620
|
-
backgroundColor: _index.buoyColors.textMuted
|
|
1621
|
-
},
|
|
1622
|
-
dragIndicatorActive: {
|
|
1623
|
-
backgroundColor: _index.buoyColors.primary,
|
|
1624
|
-
width: 40
|
|
1625
|
-
},
|
|
1626
|
-
resizeGripContainer: {
|
|
1627
|
-
position: "absolute",
|
|
1628
|
-
flexDirection: "row",
|
|
1629
|
-
gap: 2,
|
|
1630
|
-
marginTop: 12
|
|
1631
|
-
},
|
|
1632
|
-
resizeGripLine: {
|
|
1633
|
-
width: 12,
|
|
1634
|
-
height: 1,
|
|
1635
|
-
backgroundColor: _index.gameUIColors.success,
|
|
1636
|
-
opacity: 0.6
|
|
1637
|
-
},
|
|
1638
|
-
headerContent: {
|
|
1639
|
-
paddingHorizontal: 16,
|
|
1640
|
-
alignItems: "center"
|
|
1641
|
-
},
|
|
1642
|
-
headerControls: {
|
|
1643
|
-
position: "absolute",
|
|
1644
|
-
top: 8,
|
|
1645
|
-
right: 16,
|
|
1646
|
-
flexDirection: "row",
|
|
1647
|
-
alignItems: "center"
|
|
1648
|
-
},
|
|
1649
|
-
headerTitle: {
|
|
1650
|
-
fontSize: 16,
|
|
1651
|
-
fontWeight: "600",
|
|
1652
|
-
color: _index.gameUIColors.primary
|
|
1653
|
-
},
|
|
1654
|
-
headerSubtitle: {
|
|
1655
|
-
fontSize: 12,
|
|
1656
|
-
color: _index.gameUIColors.secondary,
|
|
1657
|
-
paddingTop: 4
|
|
1658
|
-
},
|
|
1659
|
-
headerHintText: {
|
|
1660
|
-
position: "absolute",
|
|
1661
|
-
top: 0,
|
|
1662
|
-
left: 0,
|
|
1663
|
-
right: 0,
|
|
1664
|
-
bottom: 0,
|
|
1665
|
-
justifyContent: "center",
|
|
1666
|
-
alignItems: "center"
|
|
1667
|
-
},
|
|
1668
|
-
hintText: {
|
|
1669
|
-
fontSize: 10,
|
|
1670
|
-
color: _index.gameUIColors.muted,
|
|
1671
|
-
fontStyle: "italic"
|
|
1672
|
-
},
|
|
1673
|
-
controlButton: {
|
|
1674
|
-
width: 28,
|
|
1675
|
-
height: 28,
|
|
1676
|
-
borderRadius: 6,
|
|
1677
|
-
justifyContent: "center",
|
|
1678
|
-
alignItems: "center",
|
|
1679
|
-
marginLeft: 8
|
|
1680
|
-
},
|
|
1681
|
-
toggleButton: {
|
|
1682
|
-
backgroundColor: _index.gameUIColors.info + "1A",
|
|
1683
|
-
borderWidth: 1,
|
|
1684
|
-
borderColor: _index.gameUIColors.info + "33"
|
|
1685
|
-
},
|
|
1686
|
-
closeButton: {
|
|
1687
|
-
width: 28,
|
|
1688
|
-
height: 28,
|
|
1689
|
-
borderRadius: 6,
|
|
1690
|
-
justifyContent: "center",
|
|
1691
|
-
alignItems: "center",
|
|
1692
|
-
backgroundColor: _index.gameUIColors.error + "1A",
|
|
1693
|
-
borderWidth: 1,
|
|
1694
|
-
borderColor: _index.gameUIColors.error + "33",
|
|
1695
|
-
marginLeft: 8
|
|
1696
|
-
},
|
|
1697
|
-
iconLine: {
|
|
1698
|
-
position: "absolute",
|
|
1699
|
-
top: 7.25,
|
|
1700
|
-
left: 2,
|
|
1701
|
-
width: 12,
|
|
1702
|
-
height: 1.5,
|
|
1703
|
-
backgroundColor: _index.gameUIColors.error
|
|
1704
|
-
},
|
|
1705
|
-
content: {
|
|
1706
|
-
flex: 1,
|
|
1707
|
-
backgroundColor: _index.buoyColors.base,
|
|
1708
|
-
borderBottomLeftRadius: 16,
|
|
1709
|
-
borderBottomRightRadius: 16,
|
|
1710
|
-
overflow: "hidden"
|
|
1711
|
-
},
|
|
1712
|
-
cornerHandle: {
|
|
1713
|
-
position: "absolute",
|
|
1714
|
-
zIndex: 1
|
|
1715
|
-
},
|
|
1716
|
-
cornerHandleWrapper: {
|
|
1717
|
-
position: "absolute",
|
|
1718
|
-
width: 30,
|
|
1719
|
-
height: 30,
|
|
1720
|
-
zIndex: 1000
|
|
1721
|
-
},
|
|
1722
|
-
handler: {
|
|
1723
|
-
width: 20,
|
|
1724
|
-
height: 20,
|
|
1725
|
-
backgroundColor: "transparent",
|
|
1726
|
-
borderRadius: 10,
|
|
1727
|
-
borderWidth: 0,
|
|
1728
|
-
borderColor: "transparent"
|
|
1729
|
-
},
|
|
1730
|
-
handlerActive: {
|
|
1731
|
-
backgroundColor: _index.gameUIColors.success + "1A",
|
|
1732
|
-
borderColor: _index.gameUIColors.success,
|
|
1733
|
-
borderWidth: 2,
|
|
1734
|
-
shadowColor: _index.gameUIColors.success + "99",
|
|
1735
|
-
shadowOffset: {
|
|
1736
|
-
width: 0,
|
|
1737
|
-
height: 0
|
|
1738
|
-
},
|
|
1739
|
-
shadowOpacity: 1,
|
|
1740
|
-
shadowRadius: 8
|
|
1741
|
-
}
|
|
1742
|
-
});
|
|
1743
|
-
|
|
1744
|
-
// Footer container styles (absolute within modal content area)
|
|
1745
|
-
const footerStyles = _reactNative.StyleSheet.create({
|
|
1746
|
-
footerContainer: {
|
|
1747
|
-
position: "absolute",
|
|
1748
|
-
left: 0,
|
|
1749
|
-
right: 0,
|
|
1750
|
-
bottom: 0,
|
|
1751
|
-
backgroundColor: _index.buoyColors.base,
|
|
1752
|
-
borderBottomLeftRadius: 16,
|
|
1753
|
-
borderBottomRightRadius: 16
|
|
1754
|
-
}
|
|
1755
|
-
});
|
|
1756
|
-
|
|
1757
|
-
// ============================================================================
|
|
1758
|
-
// EXPORT - Memoized modal component for optimal performance
|
|
1759
|
-
// ============================================================================
|
|
1760
|
-
const JsModal = exports.JsModal = /*#__PURE__*/(0, _react.memo)(props => {
|
|
1761
|
-
const access = (0, _licenseModule.getUseAccountAccess)()();
|
|
1762
|
-
if (access.status !== "admitted") return props.visible ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_AccountSetup.AccountSetup, {}) : null;
|
|
1763
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(JsModalComponent, {
|
|
1764
|
-
...props
|
|
1765
|
-
});
|
|
1766
|
-
});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.JsModal=void 0;var _licenseModule=require("./license/licenseModule.js");var _AccountSetup=require("./license/AccountSetup");var _react=require("react");var _reactNative=require("react-native");var _absoluteFill=require("./utils/absoluteFill.js");var _useSafeAreaInsets=require("./hooks/useSafeAreaInsets");var _index=require("./ui/gameUI/index.js");var _index2=require("./ui/components/index.js");var _ToolBackground=require("./ui/backgrounds/ToolBackground.js");var _nightTheme=require("./ui/night/nightTheme.js");var _persistentStorage=require("./utils/persistentStorage");var _modalStorage=require("./utils/modalStorage.js");var _devToolsStorageKeys=require("./storage/devToolsStorageKeys.js");var _index3=require("./context/index.js");var _jsxRuntime=require("react/jsx-runtime");const INSTANT_MODAL_ENTRANCE=true;const SCREEN=_reactNative.Dimensions.get("window");const MIN_HEIGHT=100;const DEFAULT_HEIGHT=400;const FLOATING_WIDTH=SCREEN.width;const FLOATING_HEIGHT=500;const FLOATING_MIN_WIDTH=SCREEN.width*.25;const FLOATING_MIN_HEIGHT=80;const WINDOW_CONTROLS_BAND=20;const DragIndicator=(0,_react.memo)(function s({isResizing:n,mode:x,hasCustomContent:B=false,variant:m="default"}){return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.dragIndicatorContainer,B&&styles.dragIndicatorContainerCustom],children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.dragIndicator,x==="floating"&&styles.floatingDragIndicator,n&&styles.dragIndicatorActive,m==="night"&&styles.nightDragIndicator]}),n&&x==="bottomSheet"&&(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.resizeGripContainer,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.resizeGripLine}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.resizeGripLine}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.resizeGripLine})]})]})});const CornerHandle=(0,_react.memo)(function s({position:n,isActive:x}){return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.cornerHandle],children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.handler,x&&styles.handlerActive]})})});const ModalHeader=(0,_react.memo)(function s({header:n,onClose:x,onToggleMode:B,onMinimize:m,isResizing:W,mode:Y,panHandlers:p,variant:a="default"}){const b=(0,_react.useRef)(0);const N=(0,_react.useRef)(0);const V=(0,_react.useRef)(null);const w=(0,_react.useCallback)(()=>{const D=Date.now();const J=D-b.current;if(J>500){N.current=0}N.current++;b.current=D;if(V.current){clearTimeout(V.current)}V.current=setTimeout(()=>{if(N.current===2){B()}else if(N.current>=3){if(m){m()}}N.current=0},300)},[B,m]);(0,_react.useEffect)(()=>{return()=>{if(V.current){clearTimeout(V.current)}}},[]);const T=p?p:{};const $=!!p;if(n?.customContent){const D=(0,_react.isValidElement)(n.customContent)&&typeof n.customContent.type==="function"&&n.customContent.type.name==="CyberpunkModalHeader";if(D){return(0,_react.cloneElement)(n.customContent,{onToggleMode:B,onClose:x,mode:Y,panHandlers:T,showToggleButton:n?.showToggleButton!==false,hideCloseButton:n?.hideCloseButton})}let J=n.customContent;if((0,_react.isValidElement)(n.customContent)&&m){J=(0,_react.cloneElement)(n.customContent,{onMinimize:m})}const g=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.headerInner,children:[(0,_jsxRuntime.jsx)(DragIndicator,{isResizing:W,mode:Y,hasCustomContent:true,variant:a}),J]});return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.header,a==="night"&&styles.nightHeader],...T,children:$?(0,_jsxRuntime.jsx)(_reactNative.TouchableWithoutFeedback,{onPress:w,children:g}):g})}const O=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.headerInner,children:[(0,_jsxRuntime.jsx)(DragIndicator,{isResizing:W,mode:Y,variant:a}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.headerContent,children:[n?.title&&(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.headerTitle,children:n.title}),n?.subtitle&&(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.headerSubtitle,children:n.subtitle})]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.headerHintText,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.hintText,children:"Double tap: Toggle \u2022 Triple tap: Close"})})]});return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.header,Y==="floating"&&styles.floatingModeHeader,a==="night"&&styles.nightHeader],...T,children:$?(0,_jsxRuntime.jsx)(_reactNative.TouchableWithoutFeedback,{onPress:w,children:O}):O})});const JsModalComponent=({visible:s,onClose:n,children:x,header:B,styles:m={},minHeight:W=MIN_HEIGHT,maxHeight:Y,initialHeight:p=DEFAULT_HEIGHT,animatedHeight:a,benchMotion:b,initialMode:N="bottomSheet",onModeChange:V,persistenceKey:w,enablePersistence:T=true,initialFloatingPosition:$,footer:O,footerHeight:D=0,onBack:J,onMinimize:g,minimizeRequest:ie=0,minimizeTargetPosition:fe,initialModalState:l,zIndex:ae,disableScrollWrapper:Ce=false,background:le=true,variant:C="night"})=>{const j=(0,_useSafeAreaInsets.useSafeAreaInsets)();const[ye,Re]=(0,_react.useState)(!T);const[r,ge]=(0,_react.useState)(N);const[X,I]=(0,_react.useState)(false);const[de,Q]=(0,_react.useState)(false);const[Be,me]=(0,_react.useState)(p);const[k,K]=(0,_react.useState)({width:FLOATING_WIDTH,height:FLOATING_HEIGHT,top:(SCREEN.height-FLOATING_HEIGHT)/2,left:0});const[ue]=(0,_react.useState)({width:SCREEN.width,height:SCREEN.height});const[Ee,ce]=(0,_react.useState)(false);const[Me,xe]=(0,_react.useState)(false);const _e=(0,_index3.useHintsDisabled)();const u=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const f=(0,_react.useRef)(new _reactNative.Animated.Value(SCREEN.height)).current;const Ve=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const v=(0,_react.useRef)(new _reactNative.Animated.Value(p)).current;const A=(0,_react.useRef)(p);(0,_react.useEffect)(()=>{if(!T||!w||!ye)return;const e=setTimeout(()=>{_modalStorage.ModalStorage.save(w,{mode:r,panelHeight:A.current,dimensions:k,isVisible:s})},500);return()=>clearTimeout(e)},[r,Be,k,s,w,T,ye]);const Te=(0,_react.useRef)(false);(0,_react.useEffect)(()=>{if(a&&!Te.current){Te.current=true;A.current=p;a.setValue(p)}},[a,p]);(0,_react.useEffect)(()=>{h.current=k},[k]);const d=(0,_react.useRef)(new _reactNative.Animated.ValueXY({x:$?.x??0,y:$?.y??(SCREEN.height-FLOATING_HEIGHT)/2})).current;const F=(0,_react.useRef)(new _reactNative.Animated.Value(0)).current;const P=(0,_react.useRef)(new _reactNative.Animated.Value(FLOATING_WIDTH)).current;const G=(0,_react.useRef)(new _reactNative.Animated.Value(FLOATING_HEIGHT)).current;const h=(0,_react.useRef)(k);const Se=(0,_react.useRef)(k);const We=(0,_react.useRef)(0);const Ne=(0,_react.useRef)(0);const Oe=(0,_react.useRef)(0);const Fe=(0,_react.useRef)(0);(0,_react.useEffect)(()=>{let e=true;const o=async()=>{try{const t=_devToolsStorageKeys.devToolsStorageKeys.modal.hintAcknowledged();const H=await _persistentStorage.persistentStorage.getItem(t);if(e){ce(H!=="true");xe(true)}}catch(t){if(e){ce(true);xe(true)}}};o();return()=>{e=false}},[]);const Pe=(0,_react.useCallback)(async()=>{try{const e=_devToolsStorageKeys.devToolsStorageKeys.modal.hintAcknowledged();await _persistentStorage.persistentStorage.setItem(e,"true");ce(false)}catch(e){ce(false)}},[]);const je=(0,_react.useRef)(V);je.current=V;(0,_react.useEffect)(()=>{if(!T||!w){Re(true);return}let e=true;const o=async()=>{const t=await _modalStorage.ModalStorage.load(w);if(e&&t){if(t.mode){ge(t.mode);je.current?.(t.mode)}if(t.panelHeight){me(t.panelHeight);A.current=t.panelHeight;v.setValue(t.panelHeight);a?.setValue(t.panelHeight)}if(t.dimensions){K(t.dimensions);d.setValue({x:t.dimensions.left,y:t.dimensions.top});P.setValue(t.dimensions.width);G.setValue(t.dimensions.height)}}if(e)Re(true)};o();return()=>{e=false}},[w,T,v,G,P,d]);(0,_react.useEffect)(()=>{return()=>{u.stopAnimation();f.stopAnimation();F.stopAnimation();Ve.stopAnimation();v.stopAnimation();d.stopAnimation();P.stopAnimation();G.stopAnimation();u.setValue(0);f.setValue(SCREEN.height);F.setValue(0);Ve.setValue(0);v.setValue(p);A.current=p}},[]);const Ie=u.interpolate({inputRange:[0,1],outputRange:[0,1],extrapolate:"clamp"});const pe=Y||SCREEN.height-j.top;const q=(0,_react.useCallback)(()=>{Q(false);I(false);const e=r==="bottomSheet"?"floating":"bottomSheet";ge(e);V?.(e)},[r,V]);(0,_react.useEffect)(()=>{Q(false);I(false)},[r]);const E=(0,_react.useCallback)(()=>{if(!g)return;const e={mode:r,panelHeight:A.current,floatingPosition:{x:h.current.left,y:h.current.top},floatingDimensions:{width:h.current.width,height:h.current.height}};if(T&&w)void _modalStorage.ModalStorage.saveMinimized(w,e);const o=fe?.x??SCREEN.width-50;const t=fe?.y??SCREEN.height-150;if(r==="bottomSheet"){_reactNative.Animated.parallel([_reactNative.Animated.timing(u,{toValue:0,duration:300,useNativeDriver:true}),_reactNative.Animated.timing(f,{toValue:SCREEN.height,duration:300,useNativeDriver:true})]).start(()=>{g(e)})}else{_reactNative.Animated.parallel([_reactNative.Animated.timing(F,{toValue:0,duration:300,useNativeDriver:true}),_reactNative.Animated.timing(u,{toValue:0,duration:300,useNativeDriver:true}),_reactNative.Animated.timing(d,{toValue:{x:o,y:t},duration:300,useNativeDriver:true})]).start(()=>{g(e)})}},[r,g,fe,T,w,u,f,F,d]);const ve=(0,_react.useRef)(ie);(0,_react.useEffect)(()=>{if(ve.current===ie)return;ve.current=ie;E()},[ie,E]);(0,_react.useEffect)(()=>{if(!l)return;if(l.mode){ge(l.mode);V?.(l.mode)}if(l.panelHeight){me(l.panelHeight);A.current=l.panelHeight;v.setValue(l.panelHeight)}if(l.floatingDimensions&&l.floatingPosition){const e={width:l.floatingDimensions.width,height:l.floatingDimensions.height,top:l.floatingPosition.y,left:l.floatingPosition.x};K(e);d.setValue({x:l.floatingPosition.x,y:l.floatingPosition.y});P.setValue(l.floatingDimensions.width);G.setValue(l.floatingDimensions.height)}},[l]);const Ae=e=>{if(e){if(r==="bottomSheet"){f.setValue(0)}else{F.setValue(1);d.setValue({x:h.current.left,y:h.current.top})}u.setValue(1)}else{if(r==="bottomSheet"){f.setValue(SCREEN.height)}u.setValue(0)}};const De=(0,_react.useRef)(null);if(INSTANT_MODAL_ENTRANCE&&De.current!==s){De.current=s;Ae(s)}(0,_react.useEffect)(()=>{let e=null;let o=null;if(INSTANT_MODAL_ENTRANCE){Ae(s);return}if(s){f.setValue(SCREEN.height);u.setValue(0);if(r==="bottomSheet"){e=_reactNative.Animated.parallel([_reactNative.Animated.spring(f,{toValue:0,tension:180,friction:22,useNativeDriver:true}),_reactNative.Animated.timing(u,{toValue:1,duration:200,useNativeDriver:true})]);e.start()}else{F.setValue(1);d.setValue({x:h.current.left,y:h.current.top});e=_reactNative.Animated.timing(u,{toValue:1,duration:200,useNativeDriver:true});e.start()}}else{if(r==="bottomSheet"){o=_reactNative.Animated.parallel([_reactNative.Animated.spring(f,{toValue:SCREEN.height,tension:180,friction:22,useNativeDriver:true}),_reactNative.Animated.timing(u,{toValue:0,duration:200,useNativeDriver:true})]);o.start()}else{o=_reactNative.Animated.timing(u,{toValue:0,duration:200,useNativeDriver:true});o.start()}}return()=>{if(e){e.stop()}if(o){o.stop()}}},[s,r,u,f,F,d,a]);const ke=(0,_react.useRef)(0);(0,_react.useEffect)(()=>{if(!__DEV__||!b||!s)return void 0;let e=null;let o=null;let t=true;const H=Date.now();let y=false;const M=L=>{y=L;if(b==="resize"||b==="float-resize"){I(L)}else if(b==="float-drag"){Q(L)}};if(b==="mode-cycle"){o=setInterval(()=>q(),2200)}else{const L=W;const he=pe;const ne=()=>{if(!t)return;const Z=(Date.now()-H)/1e3;const i=Z%2.5;if(i<2&&!y)M(true);else if(i>=2&&y)M(false);if(y){const R=(Math.sin(Z*2.2)+1)/2;if(b==="resize"){const c=L+R*(he-L);v.setValue(c);A.current=c;if(a){a.setValue(c)}}else if(b==="float-drag"){const c=(Math.sin(Z*1.7)+1)/2;d.setValue({x:10+R*Math.max(SCREEN.width-FLOATING_WIDTH-20,0),y:70+c*260})}else if(b==="float-resize"){const c=FLOATING_WIDTH+R*Math.max(SCREEN.width-FLOATING_WIDTH-40,0);const S=FLOATING_HEIGHT+R*240;P.setValue(c);G.setValue(S);h.current={...h.current,width:c,height:S}}}e=requestAnimationFrame(ne)};e=requestAnimationFrame(ne)}return()=>{t=false;if(e!=null)cancelAnimationFrame(e);if(o!=null)clearInterval(o);I(false);Q(false)}},[b,s]);const Ge=(0,_react.useMemo)(()=>_reactNative.PanResponder.create({onStartShouldSetPanResponder:()=>r==="bottomSheet",onMoveShouldSetPanResponder:(e,o)=>r==="bottomSheet"&&Math.abs(o.dy)>3,onPanResponderTerminationRequest:()=>false,onPanResponderGrant:e=>{I(true);ke.current=e.nativeEvent.locationY||0;v.stopAnimation(o=>{A.current=o});a?.stopAnimation();f.stopAnimation()},onPanResponderMove:e=>{const o=e.nativeEvent.pageY-ke.current;let t=SCREEN.height-o;t=Math.max(W,Math.min(t,pe));v.setValue(t);A.current=t;if(a){a.setValue(t)}},onPanResponderRelease:(e,o)=>{I(false);const t=A.current;const H=o.vy>.8&&o.dy>50||o.dy>150&&t<=W;if(H){_reactNative.Animated.parallel([_reactNative.Animated.timing(u,{toValue:0,duration:200,useNativeDriver:true}),_reactNative.Animated.spring(f,{toValue:SCREEN.height,tension:180,friction:22,useNativeDriver:true})]).start(()=>n());return}me(t);if(a)a.setValue(t)},onPanResponderTerminate:()=>{I(false)}}),[r,W,pe,v,a,f,u,n]);const ee=(0,_react.useCallback)(e=>{let o=false;return _reactNative.PanResponder.create({onStartShouldSetPanResponder:()=>r==="floating",onMoveShouldSetPanResponder:()=>r==="floating",onPanResponderGrant:()=>{o=false;const t=h.current;d.stopAnimation(({x:H,y})=>{d.setValue({x:H,y})});I(true);Se.current={...t};Oe.current=t.height;Fe.current=t.width;We.current=t.left;Ne.current=t.top},onPanResponderMove:(t,H)=>{const{dx:y,dy:M}=H;if(Math.abs(y)<.5&&Math.abs(M)<.5)return;o=true;const L=Math.max(0,j.left||0);const he=ue.width-Math.max(0,j.right||0);const ne=Math.max(0,j.top||0);const Z=ue.height-Math.max(0,j.bottom||0);const i=Se.current;const R=i.left+i.width;const c=i.top+i.height;let S=i.left;let _=i.top;let re=R;let se=c;switch(e){case"topLeft":{const U=Math.max(L,Math.min(i.left+y,R-FLOATING_MIN_WIDTH));const z=Math.max(ne,Math.min(i.top+M,c-FLOATING_MIN_HEIGHT));S=U;_=z;re=R;se=c;break}case"topRight":{const U=Math.min(he,Math.max(R+y,i.left+FLOATING_MIN_WIDTH));const z=Math.max(ne,Math.min(i.top+M,c-FLOATING_MIN_HEIGHT));S=i.left;_=z;re=U;se=c;break}case"bottomLeft":{const U=Math.max(L,Math.min(i.left+y,R-FLOATING_MIN_WIDTH));const z=Math.min(Z,Math.max(c+M,i.top+FLOATING_MIN_HEIGHT));S=U;_=i.top;re=R;se=z;break}case"bottomRight":{const U=Math.min(he,Math.max(R+y,i.left+FLOATING_MIN_WIDTH));const z=Math.min(Z,Math.max(c+M,i.top+FLOATING_MIN_HEIGHT));S=i.left;_=i.top;re=U;se=z;break}}const be=Math.max(FLOATING_MIN_WIDTH,re-S);const we=Math.max(FLOATING_MIN_HEIGHT,se-_);K({width:be,height:we,left:S,top:_});P.setValue(be);G.setValue(we);d.setValue({x:S,y:_});h.current={width:be,height:we,left:S,top:_}},onPanResponderRelease:()=>{I(false);o=false;K(h.current)},onPanResponderTerminate:()=>{I(false);o=false}})},[r,ue,j.left,j.right,j.top,j.bottom,d,P,G,n,J]);const He=(0,_react.useMemo)(()=>{return{topLeft:ee("topLeft"),topRight:ee("topRight"),bottomLeft:ee("bottomLeft"),bottomRight:ee("bottomRight")}},[ee]);const qe=(0,_react.useCallback)(()=>{Q(true)},[]);const Ue=(0,_react.useCallback)(e=>{Q(false);const o=h.current;const t={...o,left:e.x,top:e.y};K(t)},[]);const Le=(0,_react.useRef)(0);const te=(0,_react.useRef)(0);const oe=(0,_react.useRef)(null);const ze=(0,_react.useCallback)(()=>{const e=Date.now();const o=e-Le.current;if(o>500){te.current=0}te.current++;Le.current=e;if(oe.current){clearTimeout(oe.current)}oe.current=setTimeout(()=>{if(te.current===2){q()}else if(te.current>=3){if(g){E()}}te.current=0},300)},[q,g,E]);(0,_react.useEffect)(()=>{return()=>{if(oe.current){clearTimeout(oe.current)}}},[]);if(r==="floating"){return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{nativeID:"jsmodal-root",pointerEvents:s?"auto":"none",accessibilityElementsHidden:!s,importantForAccessibility:s?"auto":"no-hide-descendants",style:[styles.floatingModal,{width:k.width,height:k.height,opacity:Ie,transform:[{translateX:d.x},{translateY:d.y}],...ae!==void 0&&{zIndex:ae}},C==="night"&&styles.nightFloatingModal,(de||X)&&styles.floatingModalDragging,m.container,!s&&styles.parkedOffscreen],children:[le&&C==="night"?(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.nightBackdropFloating,pointerEvents:"none",children:(0,_jsxRuntime.jsx)(_ToolBackground.ToolBackground,{})}):null,(0,_jsxRuntime.jsx)(_index2.DraggableHeader,{position:d,onDragStart:qe,onDragEnd:Ue,onTap:ze,containerBounds:ue,elementSize:k,minPosition:{x:0,y:j.top},style:styles.floatingHeader,enabled:r==="floating"&&!X,children:(0,_jsxRuntime.jsx)(ModalHeader,{header:B,onClose:n,onToggleMode:q,onMinimize:g?E:void 0,isResizing:de||X,mode:r,variant:C})}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.windowControlsContainer,children:(0,_jsxRuntime.jsx)(_index2.WindowControls,{onClose:n,onMinimize:g?E:void 0,onToggleMode:q,mode:r,variant:C})}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.content,C==="night"&&styles.nightContent,m.content],children:[le&&C!=="night"?(0,_jsxRuntime.jsx)(_ToolBackground.ToolBackground,{}):null,Ce?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flex:1,paddingBottom:D},children:x}):(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{style:{flex:1},contentContainerStyle:{flexGrow:1,paddingBottom:D},showsVerticalScrollIndicator:true,nestedScrollEnabled:true,keyboardShouldPersistTaps:"handled",children:x}),O?(0,_jsxRuntime.jsx)(_reactNative.View,{style:footerStyles.footerContainer,children:O}):null]}),(0,_jsxRuntime.jsx)(_reactNative.View,{...He.bottomLeft.panHandlers,style:[styles.cornerHandleWrapper,{bottom:4,left:4}],hitSlop:{top:2,left:2,right:2,bottom:2},children:(0,_jsxRuntime.jsx)(CornerHandle,{position:"bottomLeft",isActive:de||X})}),(0,_jsxRuntime.jsx)(_reactNative.View,{...He.bottomRight.panHandlers,style:[styles.cornerHandleWrapper,{bottom:4,right:4}],hitSlop:{top:2,left:2,right:2,bottom:2},children:(0,_jsxRuntime.jsx)(CornerHandle,{position:"bottomRight",isActive:de||X})})]})}return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[s?styles.fullScreenContainer:styles.parkedFullScreen,s&&ae!==void 0&&{zIndex:ae}],pointerEvents:s?"box-none":"none",accessibilityElementsHidden:!s,importantForAccessibility:s?"auto":"no-hide-descendants",children:(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{nativeID:"jsmodal-root",style:[styles.bottomSheetWrapper,{opacity:Ie,transform:[{translateY:f}]}],children:(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[styles.bottomSheet,C==="night"&&styles.nightBottomSheet,m.container,{height:a||v}],children:[le&&C==="night"?(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.nightBackdropSheet,pointerEvents:"none",children:(0,_jsxRuntime.jsx)(_ToolBackground.ToolBackground,{})}):null,(0,_jsxRuntime.jsx)(ModalHeader,{header:B,onClose:n,onToggleMode:q,onMinimize:g?E:void 0,isResizing:X,mode:r,panHandlers:Ge.panHandlers,variant:C}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.windowControlsContainer,children:(0,_jsxRuntime.jsx)(_index2.WindowControls,{onClose:n,onMinimize:g?E:void 0,onToggleMode:q,mode:r,variant:C})}),Me&&Ee&&r==="bottomSheet"&&!_e&&(0,_jsxRuntime.jsx)(_index2.ModalHintBanner,{onAcknowledge:Pe}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.content,C==="night"&&styles.nightContent,m.content],children:[le&&C!=="night"?(0,_jsxRuntime.jsx)(_ToolBackground.ToolBackground,{}):null,Ce?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flex:1,paddingBottom:D},children:x}):(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{style:{flex:1},contentContainerStyle:{flexGrow:1,paddingBottom:D},showsVerticalScrollIndicator:true,nestedScrollEnabled:true,keyboardShouldPersistTaps:"handled",children:x}),O?(0,_jsxRuntime.jsx)(_reactNative.View,{style:footerStyles.footerContainer,children:O}):null]})]})})})};const styles=_reactNative.StyleSheet.create({fullScreenContainer:{..._absoluteFill.absoluteFill,zIndex:1e3},bottomSheetWrapper:{position:"absolute",bottom:0,left:0,right:0},bottomSheet:{backgroundColor:_index.buoyColors.card,borderTopLeftRadius:6,borderTopRightRadius:6,borderWidth:1,borderColor:_index.buoyColors.border,shadowColor:_index.buoyColors.primary,shadowOffset:{width:0,height:-4},shadowOpacity:.2,shadowRadius:12,elevation:20},parkedOffscreen:{left:-9999,top:-9999,opacity:0},parkedFullScreen:{position:"absolute",left:-9999,top:-9999,width:SCREEN.width,height:SCREEN.height,opacity:0},floatingModal:{position:"absolute",backgroundColor:_index.buoyColors.card,borderRadius:6,borderWidth:1,borderColor:_index.buoyColors.border,shadowColor:_index.buoyColors.primary,shadowOffset:{width:0,height:0},shadowOpacity:.3,shadowRadius:20,elevation:24,zIndex:1e3,width:FLOATING_WIDTH,height:FLOATING_HEIGHT},floatingModalDragging:{borderColor:_index.buoyColors.primary,borderWidth:2,shadowColor:_index.buoyColors.primary+"99",shadowOpacity:.8,shadowRadius:12},header:{borderTopLeftRadius:6,borderTopRightRadius:6,backgroundColor:_index.buoyColors.card,minHeight:56,borderWidth:1,borderColor:_index.buoyColors.border,borderBottomWidth:1,borderBottomColor:_index.buoyColors.border},nightBottomSheet:{backgroundColor:_nightTheme.night.color.bg,borderTopLeftRadius:_nightTheme.night.radius.sheet,borderTopRightRadius:_nightTheme.night.radius.sheet,borderWidth:_reactNative.StyleSheet.hairlineWidth,borderColor:_nightTheme.night.color.accent+"55",shadowColor:_nightTheme.night.color.accent,shadowOffset:{width:0,height:-4},shadowOpacity:.22,shadowRadius:10},nightFloatingModal:{backgroundColor:_nightTheme.night.color.bg,borderRadius:_nightTheme.night.radius.sheet,borderWidth:_reactNative.StyleSheet.hairlineWidth,borderColor:_nightTheme.night.color.accent+"55",shadowColor:_nightTheme.night.color.accent,shadowOffset:{width:0,height:0},shadowOpacity:.22,shadowRadius:14},nightHeader:{backgroundColor:"transparent",borderWidth:0,borderBottomWidth:0,borderTopLeftRadius:_nightTheme.night.radius.sheet,borderTopRightRadius:_nightTheme.night.radius.sheet},nightContent:{backgroundColor:"transparent"},nightBackdropSheet:{..._absoluteFill.absoluteFill,borderTopLeftRadius:_nightTheme.night.radius.sheet,borderTopRightRadius:_nightTheme.night.radius.sheet,overflow:"hidden"},nightBackdropFloating:{..._absoluteFill.absoluteFill,borderRadius:_nightTheme.night.radius.sheet,overflow:"hidden"},nightDragIndicator:{width:36,height:5,borderRadius:2.5,backgroundColor:_nightTheme.night.color.placeholder,shadowOpacity:0,elevation:0},floatingHeader:{borderTopLeftRadius:6,borderTopRightRadius:6},windowControlsContainer:{position:"absolute",top:4,right:4,zIndex:10},floatingModeHeader:{borderTopLeftRadius:6,borderTopRightRadius:6},headerInner:{flex:1,justifyContent:"center"},dragIndicatorContainer:{alignItems:"center",paddingVertical:8,backgroundColor:"transparent"},dragIndicatorContainerCustom:{minHeight:WINDOW_CONTROLS_BAND,justifyContent:"center",paddingVertical:0,backgroundColor:"transparent"},dragIndicator:{width:40,height:3,backgroundColor:_index.buoyColors.primary,borderRadius:2,shadowColor:_index.buoyColors.primary,shadowOffset:{width:0,height:0},shadowOpacity:.6,shadowRadius:4},floatingDragIndicator:{width:50,height:5,backgroundColor:_index.buoyColors.textMuted},dragIndicatorActive:{backgroundColor:_index.buoyColors.primary,width:40},resizeGripContainer:{position:"absolute",flexDirection:"row",gap:2,marginTop:12},resizeGripLine:{width:12,height:1,backgroundColor:_index.gameUIColors.success,opacity:.6},headerContent:{paddingHorizontal:16,alignItems:"center"},headerControls:{position:"absolute",top:8,right:16,flexDirection:"row",alignItems:"center"},headerTitle:{fontSize:16,fontWeight:"600",color:_index.gameUIColors.primary},headerSubtitle:{fontSize:12,color:_index.gameUIColors.secondary,paddingTop:4},headerHintText:{position:"absolute",top:0,left:0,right:0,bottom:0,justifyContent:"center",alignItems:"center"},hintText:{fontSize:10,color:_index.gameUIColors.muted,fontStyle:"italic"},controlButton:{width:28,height:28,borderRadius:6,justifyContent:"center",alignItems:"center",marginLeft:8},toggleButton:{backgroundColor:_index.gameUIColors.info+"1A",borderWidth:1,borderColor:_index.gameUIColors.info+"33"},closeButton:{width:28,height:28,borderRadius:6,justifyContent:"center",alignItems:"center",backgroundColor:_index.gameUIColors.error+"1A",borderWidth:1,borderColor:_index.gameUIColors.error+"33",marginLeft:8},iconLine:{position:"absolute",top:7.25,left:2,width:12,height:1.5,backgroundColor:_index.gameUIColors.error},content:{flex:1,backgroundColor:_index.buoyColors.base,borderBottomLeftRadius:16,borderBottomRightRadius:16,overflow:"hidden"},cornerHandle:{position:"absolute",zIndex:1},cornerHandleWrapper:{position:"absolute",width:30,height:30,zIndex:1e3},handler:{width:20,height:20,backgroundColor:"transparent",borderRadius:10,borderWidth:0,borderColor:"transparent"},handlerActive:{backgroundColor:_index.gameUIColors.success+"1A",borderColor:_index.gameUIColors.success,borderWidth:2,shadowColor:_index.gameUIColors.success+"99",shadowOffset:{width:0,height:0},shadowOpacity:1,shadowRadius:8}});const footerStyles=_reactNative.StyleSheet.create({footerContainer:{position:"absolute",left:0,right:0,bottom:0,backgroundColor:_index.buoyColors.base,borderBottomLeftRadius:16,borderBottomRightRadius:16}});const JsModal=exports.JsModal=(0,_react.memo)(s=>{const n=(0,_licenseModule.getUseAccountAccess)()();if(n.status!=="admitted")return s.visible?(0,_jsxRuntime.jsx)(_AccountSetup.AccountSetup,{}):null;return(0,_jsxRuntime.jsx)(JsModalComponent,{...s})});
|