@rezi-ui/core 0.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/abi.d.ts +72 -0
- package/dist/abi.d.ts.map +1 -0
- package/dist/abi.js +86 -0
- package/dist/abi.js.map +1 -0
- package/dist/app/__tests__/dirtyFlagPlan.test.d.ts +2 -0
- package/dist/app/__tests__/dirtyFlagPlan.test.d.ts.map +1 -0
- package/dist/app/__tests__/dirtyFlagPlan.test.js +207 -0
- package/dist/app/__tests__/dirtyFlagPlan.test.js.map +1 -0
- package/dist/app/__tests__/eventPump.test.d.ts +2 -0
- package/dist/app/__tests__/eventPump.test.d.ts.map +1 -0
- package/dist/app/__tests__/eventPump.test.js +48 -0
- package/dist/app/__tests__/eventPump.test.js.map +1 -0
- package/dist/app/__tests__/fatal.test.d.ts +2 -0
- package/dist/app/__tests__/fatal.test.d.ts.map +1 -0
- package/dist/app/__tests__/fatal.test.js +27 -0
- package/dist/app/__tests__/fatal.test.js.map +1 -0
- package/dist/app/__tests__/frameCoalescing.test.d.ts +2 -0
- package/dist/app/__tests__/frameCoalescing.test.d.ts.map +1 -0
- package/dist/app/__tests__/frameCoalescing.test.js +33 -0
- package/dist/app/__tests__/frameCoalescing.test.js.map +1 -0
- package/dist/app/__tests__/helpers.d.ts +39 -0
- package/dist/app/__tests__/helpers.d.ts.map +1 -0
- package/dist/app/__tests__/helpers.js +99 -0
- package/dist/app/__tests__/helpers.js.map +1 -0
- package/dist/app/__tests__/interactivePriority.test.d.ts +2 -0
- package/dist/app/__tests__/interactivePriority.test.d.ts.map +1 -0
- package/dist/app/__tests__/interactivePriority.test.js +61 -0
- package/dist/app/__tests__/interactivePriority.test.js.map +1 -0
- package/dist/app/__tests__/modes.test.d.ts +2 -0
- package/dist/app/__tests__/modes.test.d.ts.map +1 -0
- package/dist/app/__tests__/modes.test.js +48 -0
- package/dist/app/__tests__/modes.test.js.map +1 -0
- package/dist/app/__tests__/onEventHandlers.test.d.ts +2 -0
- package/dist/app/__tests__/onEventHandlers.test.d.ts.map +1 -0
- package/dist/app/__tests__/onEventHandlers.test.js +41 -0
- package/dist/app/__tests__/onEventHandlers.test.js.map +1 -0
- package/dist/app/__tests__/rawRender.test.d.ts +2 -0
- package/dist/app/__tests__/rawRender.test.d.ts.map +1 -0
- package/dist/app/__tests__/rawRender.test.js +102 -0
- package/dist/app/__tests__/rawRender.test.js.map +1 -0
- package/dist/app/__tests__/stateMachine.test.d.ts +2 -0
- package/dist/app/__tests__/stateMachine.test.d.ts.map +1 -0
- package/dist/app/__tests__/stateMachine.test.js +22 -0
- package/dist/app/__tests__/stateMachine.test.js.map +1 -0
- package/dist/app/__tests__/stop_during_frame_rejection.test.d.ts +2 -0
- package/dist/app/__tests__/stop_during_frame_rejection.test.d.ts.map +1 -0
- package/dist/app/__tests__/stop_during_frame_rejection.test.js +54 -0
- package/dist/app/__tests__/stop_during_frame_rejection.test.js.map +1 -0
- package/dist/app/__tests__/stubBackend.d.ts +23 -0
- package/dist/app/__tests__/stubBackend.d.ts.map +1 -0
- package/dist/app/__tests__/stubBackend.js +76 -0
- package/dist/app/__tests__/stubBackend.js.map +1 -0
- package/dist/app/__tests__/syncFrameAckFastPath.test.d.ts +2 -0
- package/dist/app/__tests__/syncFrameAckFastPath.test.d.ts.map +1 -0
- package/dist/app/__tests__/syncFrameAckFastPath.test.js +47 -0
- package/dist/app/__tests__/syncFrameAckFastPath.test.js.map +1 -0
- package/dist/app/__tests__/turnScheduler.test.d.ts +2 -0
- package/dist/app/__tests__/turnScheduler.test.d.ts.map +1 -0
- package/dist/app/__tests__/turnScheduler.test.js +20 -0
- package/dist/app/__tests__/turnScheduler.test.js.map +1 -0
- package/dist/app/__tests__/updates.test.d.ts +2 -0
- package/dist/app/__tests__/updates.test.d.ts.map +1 -0
- package/dist/app/__tests__/updates.test.js +81 -0
- package/dist/app/__tests__/updates.test.js.map +1 -0
- package/dist/app/__tests__/widgetRenderer.integration.test.d.ts +2 -0
- package/dist/app/__tests__/widgetRenderer.integration.test.d.ts.map +1 -0
- package/dist/app/__tests__/widgetRenderer.integration.test.js +305 -0
- package/dist/app/__tests__/widgetRenderer.integration.test.js.map +1 -0
- package/dist/app/createApp.d.ts +68 -0
- package/dist/app/createApp.d.ts.map +1 -0
- package/dist/app/createApp.js +908 -0
- package/dist/app/createApp.js.map +1 -0
- package/dist/app/rawRenderer.d.ts +58 -0
- package/dist/app/rawRenderer.d.ts.map +1 -0
- package/dist/app/rawRenderer.js +89 -0
- package/dist/app/rawRenderer.js.map +1 -0
- package/dist/app/stateMachine.d.ts +44 -0
- package/dist/app/stateMachine.d.ts.map +1 -0
- package/dist/app/stateMachine.js +76 -0
- package/dist/app/stateMachine.js.map +1 -0
- package/dist/app/turnScheduler.d.ts +43 -0
- package/dist/app/turnScheduler.d.ts.map +1 -0
- package/dist/app/turnScheduler.js +72 -0
- package/dist/app/turnScheduler.js.map +1 -0
- package/dist/app/updateQueue.d.ts +32 -0
- package/dist/app/updateQueue.d.ts.map +1 -0
- package/dist/app/updateQueue.js +37 -0
- package/dist/app/updateQueue.js.map +1 -0
- package/dist/app/widgetRenderer/codeEditorRouting.d.ts +8 -0
- package/dist/app/widgetRenderer/codeEditorRouting.d.ts.map +1 -0
- package/dist/app/widgetRenderer/codeEditorRouting.js +184 -0
- package/dist/app/widgetRenderer/codeEditorRouting.js.map +1 -0
- package/dist/app/widgetRenderer/commandPaletteRouting.d.ts +5 -0
- package/dist/app/widgetRenderer/commandPaletteRouting.d.ts.map +1 -0
- package/dist/app/widgetRenderer/commandPaletteRouting.js +143 -0
- package/dist/app/widgetRenderer/commandPaletteRouting.js.map +1 -0
- package/dist/app/widgetRenderer/fileNodeCache.d.ts +9 -0
- package/dist/app/widgetRenderer/fileNodeCache.d.ts.map +1 -0
- package/dist/app/widgetRenderer/fileNodeCache.js +34 -0
- package/dist/app/widgetRenderer/fileNodeCache.js.map +1 -0
- package/dist/app/widgetRenderer/filePickerRouting.d.ts +6 -0
- package/dist/app/widgetRenderer/filePickerRouting.d.ts.map +1 -0
- package/dist/app/widgetRenderer/filePickerRouting.js +145 -0
- package/dist/app/widgetRenderer/filePickerRouting.js.map +1 -0
- package/dist/app/widgetRenderer/renderCaches.d.ts +55 -0
- package/dist/app/widgetRenderer/renderCaches.d.ts.map +1 -0
- package/dist/app/widgetRenderer/renderCaches.js +202 -0
- package/dist/app/widgetRenderer/renderCaches.js.map +1 -0
- package/dist/app/widgetRenderer/submitFramePipeline.d.ts +18 -0
- package/dist/app/widgetRenderer/submitFramePipeline.d.ts.map +1 -0
- package/dist/app/widgetRenderer/submitFramePipeline.js +253 -0
- package/dist/app/widgetRenderer/submitFramePipeline.js.map +1 -0
- package/dist/app/widgetRenderer/toolApprovalRouting.d.ts +5 -0
- package/dist/app/widgetRenderer/toolApprovalRouting.d.ts.map +1 -0
- package/dist/app/widgetRenderer/toolApprovalRouting.js +56 -0
- package/dist/app/widgetRenderer/toolApprovalRouting.js.map +1 -0
- package/dist/app/widgetRenderer.d.ts +238 -0
- package/dist/app/widgetRenderer.d.ts.map +1 -0
- package/dist/app/widgetRenderer.js +1891 -0
- package/dist/app/widgetRenderer.js.map +1 -0
- package/dist/backend.d.ts +95 -0
- package/dist/backend.d.ts.map +1 -0
- package/dist/backend.js +10 -0
- package/dist/backend.js.map +1 -0
- package/dist/binary/__tests__/reader.test.d.ts +2 -0
- package/dist/binary/__tests__/reader.test.d.ts.map +1 -0
- package/dist/binary/__tests__/reader.test.js +35 -0
- package/dist/binary/__tests__/reader.test.js.map +1 -0
- package/dist/binary/__tests__/writer.test.d.ts +2 -0
- package/dist/binary/__tests__/writer.test.d.ts.map +1 -0
- package/dist/binary/__tests__/writer.test.js +36 -0
- package/dist/binary/__tests__/writer.test.js.map +1 -0
- package/dist/binary/parseError.d.ts +37 -0
- package/dist/binary/parseError.d.ts.map +1 -0
- package/dist/binary/parseError.js +33 -0
- package/dist/binary/parseError.js.map +1 -0
- package/dist/binary/reader.d.ts +52 -0
- package/dist/binary/reader.d.ts.map +1 -0
- package/dist/binary/reader.js +107 -0
- package/dist/binary/reader.js.map +1 -0
- package/dist/binary/writer.d.ts +59 -0
- package/dist/binary/writer.d.ts.map +1 -0
- package/dist/binary/writer.js +114 -0
- package/dist/binary/writer.js.map +1 -0
- package/dist/cursor/cursorState.d.ts +89 -0
- package/dist/cursor/cursorState.d.ts.map +1 -0
- package/dist/cursor/cursorState.js +82 -0
- package/dist/cursor/cursorState.js.map +1 -0
- package/dist/cursor/index.d.ts +9 -0
- package/dist/cursor/index.d.ts.map +1 -0
- package/dist/cursor/index.js +9 -0
- package/dist/cursor/index.js.map +1 -0
- package/dist/debug/__tests__/eventTrace.test.d.ts +7 -0
- package/dist/debug/__tests__/eventTrace.test.d.ts.map +1 -0
- package/dist/debug/__tests__/eventTrace.test.js +59 -0
- package/dist/debug/__tests__/eventTrace.test.js.map +1 -0
- package/dist/debug/__tests__/frameInspector.test.d.ts +8 -0
- package/dist/debug/__tests__/frameInspector.test.d.ts.map +1 -0
- package/dist/debug/__tests__/frameInspector.test.js +121 -0
- package/dist/debug/__tests__/frameInspector.test.js.map +1 -0
- package/dist/debug/__tests__/parsers.test.d.ts +8 -0
- package/dist/debug/__tests__/parsers.test.d.ts.map +1 -0
- package/dist/debug/__tests__/parsers.test.js +265 -0
- package/dist/debug/__tests__/parsers.test.js.map +1 -0
- package/dist/debug/__tests__/stateTimeline.test.d.ts +7 -0
- package/dist/debug/__tests__/stateTimeline.test.d.ts.map +1 -0
- package/dist/debug/__tests__/stateTimeline.test.js +55 -0
- package/dist/debug/__tests__/stateTimeline.test.js.map +1 -0
- package/dist/debug/__tests__/uiDebug.test.d.ts +2 -0
- package/dist/debug/__tests__/uiDebug.test.d.ts.map +1 -0
- package/dist/debug/__tests__/uiDebug.test.js +18 -0
- package/dist/debug/__tests__/uiDebug.test.js.map +1 -0
- package/dist/debug/constants.d.ts +84 -0
- package/dist/debug/constants.d.ts.map +1 -0
- package/dist/debug/constants.js +165 -0
- package/dist/debug/constants.js.map +1 -0
- package/dist/debug/debug.d.ts +14 -0
- package/dist/debug/debug.d.ts.map +1 -0
- package/dist/debug/debug.js +54 -0
- package/dist/debug/debug.js.map +1 -0
- package/dist/debug/debugController.d.ts +151 -0
- package/dist/debug/debugController.d.ts.map +1 -0
- package/dist/debug/debugController.js +232 -0
- package/dist/debug/debugController.js.map +1 -0
- package/dist/debug/errorAggregator.d.ts +89 -0
- package/dist/debug/errorAggregator.d.ts.map +1 -0
- package/dist/debug/errorAggregator.js +150 -0
- package/dist/debug/errorAggregator.js.map +1 -0
- package/dist/debug/eventTrace.d.ts +90 -0
- package/dist/debug/eventTrace.d.ts.map +1 -0
- package/dist/debug/eventTrace.js +153 -0
- package/dist/debug/eventTrace.js.map +1 -0
- package/dist/debug/frameInspector.d.ts +88 -0
- package/dist/debug/frameInspector.d.ts.map +1 -0
- package/dist/debug/frameInspector.js +140 -0
- package/dist/debug/frameInspector.js.map +1 -0
- package/dist/debug/index.d.ts +25 -0
- package/dist/debug/index.d.ts.map +1 -0
- package/dist/debug/index.js +58 -0
- package/dist/debug/index.js.map +1 -0
- package/dist/debug/parsers.d.ts +138 -0
- package/dist/debug/parsers.d.ts.map +1 -0
- package/dist/debug/parsers.js +397 -0
- package/dist/debug/parsers.js.map +1 -0
- package/dist/debug/stateTimeline.d.ts +73 -0
- package/dist/debug/stateTimeline.d.ts.map +1 -0
- package/dist/debug/stateTimeline.js +109 -0
- package/dist/debug/stateTimeline.js.map +1 -0
- package/dist/debug/types.d.ts +261 -0
- package/dist/debug/types.d.ts.map +1 -0
- package/dist/debug/types.js +13 -0
- package/dist/debug/types.js.map +1 -0
- package/dist/drawApi.d.ts +74 -0
- package/dist/drawApi.d.ts.map +1 -0
- package/dist/drawApi.js +6 -0
- package/dist/drawApi.js.map +1 -0
- package/dist/drawlist/__tests__/builder_v1_golden.test.d.ts +2 -0
- package/dist/drawlist/__tests__/builder_v1_golden.test.d.ts.map +1 -0
- package/dist/drawlist/__tests__/builder_v1_golden.test.js +132 -0
- package/dist/drawlist/__tests__/builder_v1_golden.test.js.map +1 -0
- package/dist/drawlist/__tests__/builder_v1_text_run.test.d.ts +2 -0
- package/dist/drawlist/__tests__/builder_v1_text_run.test.d.ts.map +1 -0
- package/dist/drawlist/__tests__/builder_v1_text_run.test.js +93 -0
- package/dist/drawlist/__tests__/builder_v1_text_run.test.js.map +1 -0
- package/dist/drawlist/__tests__/builder_v1_validate_caps.test.d.ts +2 -0
- package/dist/drawlist/__tests__/builder_v1_validate_caps.test.d.ts.map +1 -0
- package/dist/drawlist/__tests__/builder_v1_validate_caps.test.js +116 -0
- package/dist/drawlist/__tests__/builder_v1_validate_caps.test.js.map +1 -0
- package/dist/drawlist/__tests__/builder_v2_cursor.test.d.ts +12 -0
- package/dist/drawlist/__tests__/builder_v2_cursor.test.d.ts.map +1 -0
- package/dist/drawlist/__tests__/builder_v2_cursor.test.js +201 -0
- package/dist/drawlist/__tests__/builder_v2_cursor.test.js.map +1 -0
- package/dist/drawlist/builder_v1.d.ts +69 -0
- package/dist/drawlist/builder_v1.d.ts.map +1 -0
- package/dist/drawlist/builder_v1.js +984 -0
- package/dist/drawlist/builder_v1.js.map +1 -0
- package/dist/drawlist/builder_v2.d.ts +57 -0
- package/dist/drawlist/builder_v2.d.ts.map +1 -0
- package/dist/drawlist/builder_v2.js +953 -0
- package/dist/drawlist/builder_v2.js.map +1 -0
- package/dist/drawlist/index.d.ts +13 -0
- package/dist/drawlist/index.d.ts.map +1 -0
- package/dist/drawlist/index.js +12 -0
- package/dist/drawlist/index.js.map +1 -0
- package/dist/drawlist/types.d.ts +138 -0
- package/dist/drawlist/types.d.ts.map +1 -0
- package/dist/drawlist/types.js +14 -0
- package/dist/drawlist/types.js.map +1 -0
- package/dist/events.d.ts +70 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +7 -0
- package/dist/events.js.map +1 -0
- package/dist/focus/styles.d.ts +213 -0
- package/dist/focus/styles.d.ts.map +1 -0
- package/dist/focus/styles.js +267 -0
- package/dist/focus/styles.js.map +1 -0
- package/dist/forms/__tests__/useForm.test.d.ts +7 -0
- package/dist/forms/__tests__/useForm.test.d.ts.map +1 -0
- package/dist/forms/__tests__/useForm.test.js +371 -0
- package/dist/forms/__tests__/useForm.test.js.map +1 -0
- package/dist/forms/bind.d.ts +15 -0
- package/dist/forms/bind.d.ts.map +1 -0
- package/dist/forms/bind.js +40 -0
- package/dist/forms/bind.js.map +1 -0
- package/dist/forms/index.d.ts +10 -0
- package/dist/forms/index.d.ts.map +1 -0
- package/dist/forms/index.js +9 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/forms/types.d.ts +101 -0
- package/dist/forms/types.d.ts.map +1 -0
- package/dist/forms/types.js +10 -0
- package/dist/forms/types.js.map +1 -0
- package/dist/forms/useForm.d.ts +54 -0
- package/dist/forms/useForm.d.ts.map +1 -0
- package/dist/forms/useForm.js +316 -0
- package/dist/forms/useForm.js.map +1 -0
- package/dist/forms/validation.d.ts +67 -0
- package/dist/forms/validation.d.ts.map +1 -0
- package/dist/forms/validation.js +135 -0
- package/dist/forms/validation.js.map +1 -0
- package/dist/icons/index.d.ts +5 -0
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +9 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/icons/registry.d.ts +1452 -0
- package/dist/icons/registry.d.ts.map +1 -0
- package/dist/icons/registry.js +192 -0
- package/dist/icons/registry.js.map +1 -0
- package/dist/index.d.ts +197 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +221 -0
- package/dist/index.js.map +1 -0
- package/dist/keybindings/__tests__/chordMatcher.test.d.ts +2 -0
- package/dist/keybindings/__tests__/chordMatcher.test.d.ts.map +1 -0
- package/dist/keybindings/__tests__/chordMatcher.test.js +238 -0
- package/dist/keybindings/__tests__/chordMatcher.test.js.map +1 -0
- package/dist/keybindings/__tests__/manager.test.d.ts +2 -0
- package/dist/keybindings/__tests__/manager.test.d.ts.map +1 -0
- package/dist/keybindings/__tests__/manager.test.js +377 -0
- package/dist/keybindings/__tests__/manager.test.js.map +1 -0
- package/dist/keybindings/__tests__/parser.test.d.ts +2 -0
- package/dist/keybindings/__tests__/parser.test.d.ts.map +1 -0
- package/dist/keybindings/__tests__/parser.test.js +386 -0
- package/dist/keybindings/__tests__/parser.test.js.map +1 -0
- package/dist/keybindings/chordMatcher.d.ts +75 -0
- package/dist/keybindings/chordMatcher.d.ts.map +1 -0
- package/dist/keybindings/chordMatcher.js +224 -0
- package/dist/keybindings/chordMatcher.js.map +1 -0
- package/dist/keybindings/index.d.ts +16 -0
- package/dist/keybindings/index.d.ts.map +1 -0
- package/dist/keybindings/index.js +31 -0
- package/dist/keybindings/index.js.map +1 -0
- package/dist/keybindings/keyCodes.d.ts +84 -0
- package/dist/keybindings/keyCodes.d.ts.map +1 -0
- package/dist/keybindings/keyCodes.js +182 -0
- package/dist/keybindings/keyCodes.js.map +1 -0
- package/dist/keybindings/manager.d.ts +168 -0
- package/dist/keybindings/manager.d.ts.map +1 -0
- package/dist/keybindings/manager.js +290 -0
- package/dist/keybindings/manager.js.map +1 -0
- package/dist/keybindings/parser.d.ts +71 -0
- package/dist/keybindings/parser.d.ts.map +1 -0
- package/dist/keybindings/parser.js +252 -0
- package/dist/keybindings/parser.js.map +1 -0
- package/dist/keybindings/types.d.ts +131 -0
- package/dist/keybindings/types.d.ts.map +1 -0
- package/dist/keybindings/types.js +11 -0
- package/dist/keybindings/types.js.map +1 -0
- package/dist/layout/__tests__/constraints.golden.test.d.ts +2 -0
- package/dist/layout/__tests__/constraints.golden.test.d.ts.map +1 -0
- package/dist/layout/__tests__/constraints.golden.test.js +86 -0
- package/dist/layout/__tests__/constraints.golden.test.js.map +1 -0
- package/dist/layout/__tests__/hitTest.golden.test.d.ts +2 -0
- package/dist/layout/__tests__/hitTest.golden.test.d.ts.map +1 -0
- package/dist/layout/__tests__/hitTest.golden.test.js +74 -0
- package/dist/layout/__tests__/hitTest.golden.test.js.map +1 -0
- package/dist/layout/__tests__/layout.edgecases.test.d.ts +2 -0
- package/dist/layout/__tests__/layout.edgecases.test.d.ts.map +1 -0
- package/dist/layout/__tests__/layout.edgecases.test.js +152 -0
- package/dist/layout/__tests__/layout.edgecases.test.js.map +1 -0
- package/dist/layout/__tests__/layout.golden.test.d.ts +2 -0
- package/dist/layout/__tests__/layout.golden.test.d.ts.map +1 -0
- package/dist/layout/__tests__/layout.golden.test.js +69 -0
- package/dist/layout/__tests__/layout.golden.test.js.map +1 -0
- package/dist/layout/__tests__/layout.perf.test.d.ts +8 -0
- package/dist/layout/__tests__/layout.perf.test.d.ts.map +1 -0
- package/dist/layout/__tests__/layout.perf.test.js +179 -0
- package/dist/layout/__tests__/layout.perf.test.js.map +1 -0
- package/dist/layout/__tests__/measure.validation.test.d.ts +2 -0
- package/dist/layout/__tests__/measure.validation.test.d.ts.map +1 -0
- package/dist/layout/__tests__/measure.validation.test.js +16 -0
- package/dist/layout/__tests__/measure.validation.test.js.map +1 -0
- package/dist/layout/__tests__/spacing.test.d.ts +2 -0
- package/dist/layout/__tests__/spacing.test.d.ts.map +1 -0
- package/dist/layout/__tests__/spacing.test.js +9 -0
- package/dist/layout/__tests__/spacing.test.js.map +1 -0
- package/dist/layout/__tests__/sweep.robustness.test.d.ts +11 -0
- package/dist/layout/__tests__/sweep.robustness.test.d.ts.map +1 -0
- package/dist/layout/__tests__/sweep.robustness.test.js +491 -0
- package/dist/layout/__tests__/sweep.robustness.test.js.map +1 -0
- package/dist/layout/__tests__/textMeasure.golden.test.d.ts +2 -0
- package/dist/layout/__tests__/textMeasure.golden.test.d.ts.map +1 -0
- package/dist/layout/__tests__/textMeasure.golden.test.js +32 -0
- package/dist/layout/__tests__/textMeasure.golden.test.js.map +1 -0
- package/dist/layout/constraints.d.ts +27 -0
- package/dist/layout/constraints.d.ts.map +1 -0
- package/dist/layout/constraints.js +57 -0
- package/dist/layout/constraints.js.map +1 -0
- package/dist/layout/engine/bounds.d.ts +7 -0
- package/dist/layout/engine/bounds.d.ts.map +1 -0
- package/dist/layout/engine/bounds.js +25 -0
- package/dist/layout/engine/bounds.js.map +1 -0
- package/dist/layout/engine/flex.d.ts +11 -0
- package/dist/layout/engine/flex.d.ts.map +1 -0
- package/dist/layout/engine/flex.js +162 -0
- package/dist/layout/engine/flex.js.map +1 -0
- package/dist/layout/engine/guards.d.ts +14 -0
- package/dist/layout/engine/guards.d.ts.map +1 -0
- package/dist/layout/engine/guards.js +36 -0
- package/dist/layout/engine/guards.js.map +1 -0
- package/dist/layout/engine/layoutEngine.d.ts +41 -0
- package/dist/layout/engine/layoutEngine.d.ts.map +1 -0
- package/dist/layout/engine/layoutEngine.js +344 -0
- package/dist/layout/engine/layoutEngine.js.map +1 -0
- package/dist/layout/engine/layoutTree.d.ts +6 -0
- package/dist/layout/engine/layoutTree.d.ts.map +1 -0
- package/dist/layout/engine/layoutTree.js +16 -0
- package/dist/layout/engine/layoutTree.js.map +1 -0
- package/dist/layout/engine/pool.d.ts +10 -0
- package/dist/layout/engine/pool.d.ts.map +1 -0
- package/dist/layout/engine/pool.js +33 -0
- package/dist/layout/engine/pool.js.map +1 -0
- package/dist/layout/engine/result.d.ts +3 -0
- package/dist/layout/engine/result.d.ts.map +1 -0
- package/dist/layout/engine/result.js +4 -0
- package/dist/layout/engine/result.js.map +1 -0
- package/dist/layout/engine/types.d.ts +12 -0
- package/dist/layout/engine/types.d.ts.map +1 -0
- package/dist/layout/engine/types.js +2 -0
- package/dist/layout/engine/types.js.map +1 -0
- package/dist/layout/hitTest.d.ts +25 -0
- package/dist/layout/hitTest.d.ts.map +1 -0
- package/dist/layout/hitTest.js +111 -0
- package/dist/layout/hitTest.js.map +1 -0
- package/dist/layout/kinds/box.d.ts +10 -0
- package/dist/layout/kinds/box.d.ts.map +1 -0
- package/dist/layout/kinds/box.js +140 -0
- package/dist/layout/kinds/box.js.map +1 -0
- package/dist/layout/kinds/collections.d.ts +7 -0
- package/dist/layout/kinds/collections.d.ts.map +1 -0
- package/dist/layout/kinds/collections.js +87 -0
- package/dist/layout/kinds/collections.js.map +1 -0
- package/dist/layout/kinds/leaf.d.ts +7 -0
- package/dist/layout/kinds/leaf.d.ts.map +1 -0
- package/dist/layout/kinds/leaf.js +390 -0
- package/dist/layout/kinds/leaf.js.map +1 -0
- package/dist/layout/kinds/overlays.d.ts +10 -0
- package/dist/layout/kinds/overlays.d.ts.map +1 -0
- package/dist/layout/kinds/overlays.js +302 -0
- package/dist/layout/kinds/overlays.js.map +1 -0
- package/dist/layout/kinds/splitPane.d.ts +9 -0
- package/dist/layout/kinds/splitPane.d.ts.map +1 -0
- package/dist/layout/kinds/splitPane.js +118 -0
- package/dist/layout/kinds/splitPane.js.map +1 -0
- package/dist/layout/kinds/stack.d.ts +10 -0
- package/dist/layout/kinds/stack.d.ts.map +1 -0
- package/dist/layout/kinds/stack.js +803 -0
- package/dist/layout/kinds/stack.js.map +1 -0
- package/dist/layout/layout.d.ts +11 -0
- package/dist/layout/layout.d.ts.map +1 -0
- package/dist/layout/layout.js +10 -0
- package/dist/layout/layout.js.map +1 -0
- package/dist/layout/positioning.d.ts +124 -0
- package/dist/layout/positioning.d.ts.map +1 -0
- package/dist/layout/positioning.js +234 -0
- package/dist/layout/positioning.js.map +1 -0
- package/dist/layout/spacing-scale.d.ts +59 -0
- package/dist/layout/spacing-scale.d.ts.map +1 -0
- package/dist/layout/spacing-scale.js +79 -0
- package/dist/layout/spacing-scale.js.map +1 -0
- package/dist/layout/spacing.d.ts +46 -0
- package/dist/layout/spacing.d.ts.map +1 -0
- package/dist/layout/spacing.js +57 -0
- package/dist/layout/spacing.js.map +1 -0
- package/dist/layout/textMeasure.d.ts +72 -0
- package/dist/layout/textMeasure.d.ts.map +1 -0
- package/dist/layout/textMeasure.js +363 -0
- package/dist/layout/textMeasure.js.map +1 -0
- package/dist/layout/types.d.ts +43 -0
- package/dist/layout/types.d.ts.map +1 -0
- package/dist/layout/types.js +10 -0
- package/dist/layout/types.js.map +1 -0
- package/dist/layout/unicode/props.d.ts +23 -0
- package/dist/layout/unicode/props.d.ts.map +1 -0
- package/dist/layout/unicode/props.js +80 -0
- package/dist/layout/unicode/props.js.map +1 -0
- package/dist/layout/unicode/tables_15_1_0.d.ts +11 -0
- package/dist/layout/unicode/tables_15_1_0.d.ts.map +1 -0
- package/dist/layout/unicode/tables_15_1_0.js +416 -0
- package/dist/layout/unicode/tables_15_1_0.js.map +1 -0
- package/dist/layout/validateProps.d.ts +101 -0
- package/dist/layout/validateProps.d.ts.map +1 -0
- package/dist/layout/validateProps.js +328 -0
- package/dist/layout/validateProps.js.map +1 -0
- package/dist/perf/index.d.ts +5 -0
- package/dist/perf/index.d.ts.map +1 -0
- package/dist/perf/index.js +5 -0
- package/dist/perf/index.js.map +1 -0
- package/dist/perf/perf.d.ts +71 -0
- package/dist/perf/perf.d.ts.map +1 -0
- package/dist/perf/perf.js +239 -0
- package/dist/perf/perf.js.map +1 -0
- package/dist/protocol/__tests__/zrev_v1_fuzz_lite.test.d.ts +2 -0
- package/dist/protocol/__tests__/zrev_v1_fuzz_lite.test.d.ts.map +1 -0
- package/dist/protocol/__tests__/zrev_v1_fuzz_lite.test.js +35 -0
- package/dist/protocol/__tests__/zrev_v1_fuzz_lite.test.js.map +1 -0
- package/dist/protocol/__tests__/zrev_v1_invalid.test.d.ts +2 -0
- package/dist/protocol/__tests__/zrev_v1_invalid.test.d.ts.map +1 -0
- package/dist/protocol/__tests__/zrev_v1_invalid.test.js +128 -0
- package/dist/protocol/__tests__/zrev_v1_invalid.test.js.map +1 -0
- package/dist/protocol/__tests__/zrev_v1_valid.test.d.ts +2 -0
- package/dist/protocol/__tests__/zrev_v1_valid.test.d.ts.map +1 -0
- package/dist/protocol/__tests__/zrev_v1_valid.test.js +126 -0
- package/dist/protocol/__tests__/zrev_v1_valid.test.js.map +1 -0
- package/dist/protocol/types.d.ts +119 -0
- package/dist/protocol/types.d.ts.map +1 -0
- package/dist/protocol/types.js +14 -0
- package/dist/protocol/types.js.map +1 -0
- package/dist/protocol/zrev_v1.d.ts +52 -0
- package/dist/protocol/zrev_v1.d.ts.map +1 -0
- package/dist/protocol/zrev_v1.js +288 -0
- package/dist/protocol/zrev_v1.js.map +1 -0
- package/dist/renderer/__tests__/overlay.edge.test.d.ts +2 -0
- package/dist/renderer/__tests__/overlay.edge.test.d.ts.map +1 -0
- package/dist/renderer/__tests__/overlay.edge.test.js +101 -0
- package/dist/renderer/__tests__/overlay.edge.test.js.map +1 -0
- package/dist/renderer/__tests__/render.golden.test.d.ts +2 -0
- package/dist/renderer/__tests__/render.golden.test.d.ts.map +1 -0
- package/dist/renderer/__tests__/render.golden.test.js +220 -0
- package/dist/renderer/__tests__/render.golden.test.js.map +1 -0
- package/dist/renderer/boxGlyphs.d.ts +87 -0
- package/dist/renderer/boxGlyphs.d.ts.map +1 -0
- package/dist/renderer/boxGlyphs.js +143 -0
- package/dist/renderer/boxGlyphs.js.map +1 -0
- package/dist/renderer/renderToDrawlist/boxBorder.d.ts +42 -0
- package/dist/renderer/renderToDrawlist/boxBorder.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/boxBorder.js +138 -0
- package/dist/renderer/renderToDrawlist/boxBorder.js.map +1 -0
- package/dist/renderer/renderToDrawlist/indices.d.ts +11 -0
- package/dist/renderer/renderToDrawlist/indices.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/indices.js +50 -0
- package/dist/renderer/renderToDrawlist/indices.js.map +1 -0
- package/dist/renderer/renderToDrawlist/renderTree.d.ts +21 -0
- package/dist/renderer/renderToDrawlist/renderTree.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/renderTree.js +117 -0
- package/dist/renderer/renderToDrawlist/renderTree.js.map +1 -0
- package/dist/renderer/renderToDrawlist/simpleVNode.d.ts +9 -0
- package/dist/renderer/renderToDrawlist/simpleVNode.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/simpleVNode.js +634 -0
- package/dist/renderer/renderToDrawlist/simpleVNode.js.map +1 -0
- package/dist/renderer/renderToDrawlist/spacing.d.ts +34 -0
- package/dist/renderer/renderToDrawlist/spacing.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/spacing.js +53 -0
- package/dist/renderer/renderToDrawlist/spacing.js.map +1 -0
- package/dist/renderer/renderToDrawlist/textStyle.d.ts +9 -0
- package/dist/renderer/renderToDrawlist/textStyle.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/textStyle.js +58 -0
- package/dist/renderer/renderToDrawlist/textStyle.js.map +1 -0
- package/dist/renderer/renderToDrawlist/types.d.ts +96 -0
- package/dist/renderer/renderToDrawlist/types.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/types.js +2 -0
- package/dist/renderer/renderToDrawlist/types.js.map +1 -0
- package/dist/renderer/renderToDrawlist/widgets/basic.d.ts +17 -0
- package/dist/renderer/renderToDrawlist/widgets/basic.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/widgets/basic.js +1149 -0
- package/dist/renderer/renderToDrawlist/widgets/basic.js.map +1 -0
- package/dist/renderer/renderToDrawlist/widgets/collections.d.ts +10 -0
- package/dist/renderer/renderToDrawlist/widgets/collections.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/widgets/collections.js +304 -0
- package/dist/renderer/renderToDrawlist/widgets/collections.js.map +1 -0
- package/dist/renderer/renderToDrawlist/widgets/containers.d.ts +10 -0
- package/dist/renderer/renderToDrawlist/widgets/containers.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/widgets/containers.js +242 -0
- package/dist/renderer/renderToDrawlist/widgets/containers.js.map +1 -0
- package/dist/renderer/renderToDrawlist/widgets/editors.d.ts +17 -0
- package/dist/renderer/renderToDrawlist/widgets/editors.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/widgets/editors.js +497 -0
- package/dist/renderer/renderToDrawlist/widgets/editors.js.map +1 -0
- package/dist/renderer/renderToDrawlist/widgets/files.d.ts +13 -0
- package/dist/renderer/renderToDrawlist/widgets/files.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/widgets/files.js +288 -0
- package/dist/renderer/renderToDrawlist/widgets/files.js.map +1 -0
- package/dist/renderer/renderToDrawlist/widgets/overlays.d.ts +21 -0
- package/dist/renderer/renderToDrawlist/widgets/overlays.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist/widgets/overlays.js +358 -0
- package/dist/renderer/renderToDrawlist/widgets/overlays.js.map +1 -0
- package/dist/renderer/renderToDrawlist.d.ts +21 -0
- package/dist/renderer/renderToDrawlist.d.ts.map +1 -0
- package/dist/renderer/renderToDrawlist.js +53 -0
- package/dist/renderer/renderToDrawlist.js.map +1 -0
- package/dist/renderer/scrollbar.d.ts +129 -0
- package/dist/renderer/scrollbar.d.ts.map +1 -0
- package/dist/renderer/scrollbar.js +219 -0
- package/dist/renderer/scrollbar.js.map +1 -0
- package/dist/renderer/shadow.d.ts +74 -0
- package/dist/renderer/shadow.d.ts.map +1 -0
- package/dist/renderer/shadow.js +118 -0
- package/dist/renderer/shadow.js.map +1 -0
- package/dist/renderer/styles.d.ts +28 -0
- package/dist/renderer/styles.d.ts.map +1 -0
- package/dist/renderer/styles.js +42 -0
- package/dist/renderer/styles.js.map +1 -0
- package/dist/runtime/__tests__/duplicateIdFatal.test.d.ts +2 -0
- package/dist/runtime/__tests__/duplicateIdFatal.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/duplicateIdFatal.test.js +45 -0
- package/dist/runtime/__tests__/duplicateIdFatal.test.js.map +1 -0
- package/dist/runtime/__tests__/duplicateKeyFatal.test.d.ts +2 -0
- package/dist/runtime/__tests__/duplicateKeyFatal.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/duplicateKeyFatal.test.js +20 -0
- package/dist/runtime/__tests__/duplicateKeyFatal.test.js.map +1 -0
- package/dist/runtime/__tests__/focusList.golden.test.d.ts +2 -0
- package/dist/runtime/__tests__/focusList.golden.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/focusList.golden.test.js +98 -0
- package/dist/runtime/__tests__/focusList.golden.test.js.map +1 -0
- package/dist/runtime/__tests__/focusZones.golden.test.d.ts +16 -0
- package/dist/runtime/__tests__/focusZones.golden.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/focusZones.golden.test.js +594 -0
- package/dist/runtime/__tests__/focusZones.golden.test.js.map +1 -0
- package/dist/runtime/__tests__/inputRouting.golden.test.d.ts +2 -0
- package/dist/runtime/__tests__/inputRouting.golden.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/inputRouting.golden.test.js +56 -0
- package/dist/runtime/__tests__/inputRouting.golden.test.js.map +1 -0
- package/dist/runtime/__tests__/keyRouting.golden.test.d.ts +2 -0
- package/dist/runtime/__tests__/keyRouting.golden.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/keyRouting.golden.test.js +43 -0
- package/dist/runtime/__tests__/keyRouting.golden.test.js.map +1 -0
- package/dist/runtime/__tests__/localStateStore.test.d.ts +2 -0
- package/dist/runtime/__tests__/localStateStore.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/localStateStore.test.js +25 -0
- package/dist/runtime/__tests__/localStateStore.test.js.map +1 -0
- package/dist/runtime/__tests__/mouseRouting.golden.test.d.ts +2 -0
- package/dist/runtime/__tests__/mouseRouting.golden.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/mouseRouting.golden.test.js +47 -0
- package/dist/runtime/__tests__/mouseRouting.golden.test.js.map +1 -0
- package/dist/runtime/__tests__/reconcile.test.d.ts +2 -0
- package/dist/runtime/__tests__/reconcile.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/reconcile.test.js +46 -0
- package/dist/runtime/__tests__/reconcile.test.js.map +1 -0
- package/dist/runtime/__tests__/widgetMeta.test.d.ts +2 -0
- package/dist/runtime/__tests__/widgetMeta.test.d.ts.map +1 -0
- package/dist/runtime/__tests__/widgetMeta.test.js +196 -0
- package/dist/runtime/__tests__/widgetMeta.test.js.map +1 -0
- package/dist/runtime/commit.d.ts +76 -0
- package/dist/runtime/commit.d.ts.map +1 -0
- package/dist/runtime/commit.js +366 -0
- package/dist/runtime/commit.js.map +1 -0
- package/dist/runtime/focus.d.ts +162 -0
- package/dist/runtime/focus.d.ts.map +1 -0
- package/dist/runtime/focus.js +488 -0
- package/dist/runtime/focus.js.map +1 -0
- package/dist/runtime/inputEditor.d.ts +49 -0
- package/dist/runtime/inputEditor.d.ts.map +1 -0
- package/dist/runtime/inputEditor.js +312 -0
- package/dist/runtime/inputEditor.js.map +1 -0
- package/dist/runtime/instance.d.ts +21 -0
- package/dist/runtime/instance.d.ts.map +1 -0
- package/dist/runtime/instance.js +27 -0
- package/dist/runtime/instance.js.map +1 -0
- package/dist/runtime/instances.d.ts +105 -0
- package/dist/runtime/instances.d.ts.map +1 -0
- package/dist/runtime/instances.js +248 -0
- package/dist/runtime/instances.js.map +1 -0
- package/dist/runtime/layers.d.ts +144 -0
- package/dist/runtime/layers.d.ts.map +1 -0
- package/dist/runtime/layers.js +264 -0
- package/dist/runtime/layers.js.map +1 -0
- package/dist/runtime/localState.d.ts +172 -0
- package/dist/runtime/localState.d.ts.map +1 -0
- package/dist/runtime/localState.js +182 -0
- package/dist/runtime/localState.js.map +1 -0
- package/dist/runtime/reconcile.d.ts +64 -0
- package/dist/runtime/reconcile.d.ts.map +1 -0
- package/dist/runtime/reconcile.js +223 -0
- package/dist/runtime/reconcile.js.map +1 -0
- package/dist/runtime/router/dropdown.d.ts +16 -0
- package/dist/runtime/router/dropdown.d.ts.map +1 -0
- package/dist/runtime/router/dropdown.js +108 -0
- package/dist/runtime/router/dropdown.js.map +1 -0
- package/dist/runtime/router/key.d.ts +10 -0
- package/dist/runtime/router/key.d.ts.map +1 -0
- package/dist/runtime/router/key.js +39 -0
- package/dist/runtime/router/key.js.map +1 -0
- package/dist/runtime/router/layer.d.ts +11 -0
- package/dist/runtime/router/layer.d.ts.map +1 -0
- package/dist/runtime/router/layer.js +45 -0
- package/dist/runtime/router/layer.js.map +1 -0
- package/dist/runtime/router/mouse.d.ts +9 -0
- package/dist/runtime/router/mouse.d.ts.map +1 -0
- package/dist/runtime/router/mouse.js +38 -0
- package/dist/runtime/router/mouse.js.map +1 -0
- package/dist/runtime/router/table.d.ts +15 -0
- package/dist/runtime/router/table.d.ts.map +1 -0
- package/dist/runtime/router/table.js +182 -0
- package/dist/runtime/router/table.js.map +1 -0
- package/dist/runtime/router/tree.d.ts +16 -0
- package/dist/runtime/router/tree.d.ts.map +1 -0
- package/dist/runtime/router/tree.js +211 -0
- package/dist/runtime/router/tree.js.map +1 -0
- package/dist/runtime/router/types.d.ts +194 -0
- package/dist/runtime/router/types.d.ts.map +1 -0
- package/dist/runtime/router/types.js +2 -0
- package/dist/runtime/router/types.js.map +1 -0
- package/dist/runtime/router/virtualList.d.ts +21 -0
- package/dist/runtime/router/virtualList.d.ts.map +1 -0
- package/dist/runtime/router/virtualList.js +167 -0
- package/dist/runtime/router/virtualList.js.map +1 -0
- package/dist/runtime/router/zones.d.ts +16 -0
- package/dist/runtime/router/zones.d.ts.map +1 -0
- package/dist/runtime/router/zones.js +118 -0
- package/dist/runtime/router/zones.js.map +1 -0
- package/dist/runtime/router.d.ts +18 -0
- package/dist/runtime/router.d.ts.map +1 -0
- package/dist/runtime/router.js +17 -0
- package/dist/runtime/router.js.map +1 -0
- package/dist/runtime/widgetMeta.d.ts +157 -0
- package/dist/runtime/widgetMeta.d.ts.map +1 -0
- package/dist/runtime/widgetMeta.js +618 -0
- package/dist/runtime/widgetMeta.js.map +1 -0
- package/dist/terminalCaps.d.ts +74 -0
- package/dist/terminalCaps.d.ts.map +1 -0
- package/dist/terminalCaps.js +61 -0
- package/dist/terminalCaps.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +28 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/defaultTheme.d.ts +9 -0
- package/dist/theme/defaultTheme.d.ts.map +1 -0
- package/dist/theme/defaultTheme.js +22 -0
- package/dist/theme/defaultTheme.js.map +1 -0
- package/dist/theme/index.d.ts +12 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +16 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/interop.d.ts +13 -0
- package/dist/theme/interop.d.ts.map +1 -0
- package/dist/theme/interop.js +66 -0
- package/dist/theme/interop.js.map +1 -0
- package/dist/theme/presets.d.ts +81 -0
- package/dist/theme/presets.d.ts.map +1 -0
- package/dist/theme/presets.js +293 -0
- package/dist/theme/presets.js.map +1 -0
- package/dist/theme/resolve.d.ts +69 -0
- package/dist/theme/resolve.d.ts.map +1 -0
- package/dist/theme/resolve.js +159 -0
- package/dist/theme/resolve.js.map +1 -0
- package/dist/theme/theme.d.ts +33 -0
- package/dist/theme/theme.d.ts.map +1 -0
- package/dist/theme/theme.js +28 -0
- package/dist/theme/theme.js.map +1 -0
- package/dist/theme/tokens.d.ts +130 -0
- package/dist/theme/tokens.d.ts.map +1 -0
- package/dist/theme/tokens.js +50 -0
- package/dist/theme/tokens.js.map +1 -0
- package/dist/widgets/__tests__/basicWidgets.render.test.d.ts +2 -0
- package/dist/widgets/__tests__/basicWidgets.render.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/basicWidgets.render.test.js +182 -0
- package/dist/widgets/__tests__/basicWidgets.render.test.js.map +1 -0
- package/dist/widgets/__tests__/basicWidgets.test.d.ts +2 -0
- package/dist/widgets/__tests__/basicWidgets.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/basicWidgets.test.js +336 -0
- package/dist/widgets/__tests__/basicWidgets.test.js.map +1 -0
- package/dist/widgets/__tests__/collections.test.d.ts +2 -0
- package/dist/widgets/__tests__/collections.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/collections.test.js +91 -0
- package/dist/widgets/__tests__/collections.test.js.map +1 -0
- package/dist/widgets/__tests__/commandPalette.test.d.ts +2 -0
- package/dist/widgets/__tests__/commandPalette.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/commandPalette.test.js +13 -0
- package/dist/widgets/__tests__/commandPalette.test.js.map +1 -0
- package/dist/widgets/__tests__/composition.test.d.ts +14 -0
- package/dist/widgets/__tests__/composition.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/composition.test.js +458 -0
- package/dist/widgets/__tests__/composition.test.js.map +1 -0
- package/dist/widgets/__tests__/conditionals.test.d.ts +2 -0
- package/dist/widgets/__tests__/conditionals.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/conditionals.test.js +49 -0
- package/dist/widgets/__tests__/conditionals.test.js.map +1 -0
- package/dist/widgets/__tests__/containers.test.d.ts +2 -0
- package/dist/widgets/__tests__/containers.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/containers.test.js +98 -0
- package/dist/widgets/__tests__/containers.test.js.map +1 -0
- package/dist/widgets/__tests__/dataVizWidgets.test.d.ts +2 -0
- package/dist/widgets/__tests__/dataVizWidgets.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/dataVizWidgets.test.js +57 -0
- package/dist/widgets/__tests__/dataVizWidgets.test.js.map +1 -0
- package/dist/widgets/__tests__/dialogs.test.d.ts +2 -0
- package/dist/widgets/__tests__/dialogs.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/dialogs.test.js +29 -0
- package/dist/widgets/__tests__/dialogs.test.js.map +1 -0
- package/dist/widgets/__tests__/editors.test.d.ts +2 -0
- package/dist/widgets/__tests__/editors.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/editors.test.js +116 -0
- package/dist/widgets/__tests__/editors.test.js.map +1 -0
- package/dist/widgets/__tests__/filesWidgets.test.d.ts +2 -0
- package/dist/widgets/__tests__/filesWidgets.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/filesWidgets.test.js +52 -0
- package/dist/widgets/__tests__/filesWidgets.test.js.map +1 -0
- package/dist/widgets/__tests__/formWidgets.test.d.ts +7 -0
- package/dist/widgets/__tests__/formWidgets.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/formWidgets.test.js +241 -0
- package/dist/widgets/__tests__/formWidgets.test.js.map +1 -0
- package/dist/widgets/__tests__/infoWidgets.test.d.ts +2 -0
- package/dist/widgets/__tests__/infoWidgets.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/infoWidgets.test.js +43 -0
- package/dist/widgets/__tests__/infoWidgets.test.js.map +1 -0
- package/dist/widgets/__tests__/layers.golden.test.d.ts +14 -0
- package/dist/widgets/__tests__/layers.golden.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/layers.golden.test.js +728 -0
- package/dist/widgets/__tests__/layers.golden.test.js.map +1 -0
- package/dist/widgets/__tests__/overlays.test.d.ts +2 -0
- package/dist/widgets/__tests__/overlays.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/overlays.test.js +99 -0
- package/dist/widgets/__tests__/overlays.test.js.map +1 -0
- package/dist/widgets/__tests__/renderer.regressions.test.d.ts +2 -0
- package/dist/widgets/__tests__/renderer.regressions.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/renderer.regressions.test.js +132 -0
- package/dist/widgets/__tests__/renderer.regressions.test.js.map +1 -0
- package/dist/widgets/__tests__/styleUtils.test.d.ts +2 -0
- package/dist/widgets/__tests__/styleUtils.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/styleUtils.test.js +22 -0
- package/dist/widgets/__tests__/styleUtils.test.js.map +1 -0
- package/dist/widgets/__tests__/styled.test.d.ts +2 -0
- package/dist/widgets/__tests__/styled.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/styled.test.js +23 -0
- package/dist/widgets/__tests__/styled.test.js.map +1 -0
- package/dist/widgets/__tests__/table.golden.test.d.ts +10 -0
- package/dist/widgets/__tests__/table.golden.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/table.golden.test.js +367 -0
- package/dist/widgets/__tests__/table.golden.test.js.map +1 -0
- package/dist/widgets/__tests__/tree.golden.test.d.ts +10 -0
- package/dist/widgets/__tests__/tree.golden.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/tree.golden.test.js +501 -0
- package/dist/widgets/__tests__/tree.golden.test.js.map +1 -0
- package/dist/widgets/__tests__/virtualList.golden.test.d.ts +10 -0
- package/dist/widgets/__tests__/virtualList.golden.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/virtualList.golden.test.js +349 -0
- package/dist/widgets/__tests__/virtualList.golden.test.js.map +1 -0
- package/dist/widgets/__tests__/widgetRenderSmoke.test.d.ts +2 -0
- package/dist/widgets/__tests__/widgetRenderSmoke.test.d.ts.map +1 -0
- package/dist/widgets/__tests__/widgetRenderSmoke.test.js +311 -0
- package/dist/widgets/__tests__/widgetRenderSmoke.test.js.map +1 -0
- package/dist/widgets/checkbox.d.ts +49 -0
- package/dist/widgets/checkbox.d.ts.map +1 -0
- package/dist/widgets/checkbox.js +66 -0
- package/dist/widgets/checkbox.js.map +1 -0
- package/dist/widgets/codeEditor.d.ts +150 -0
- package/dist/widgets/codeEditor.d.ts.map +1 -0
- package/dist/widgets/codeEditor.js +434 -0
- package/dist/widgets/codeEditor.js.map +1 -0
- package/dist/widgets/collections.d.ts +10 -0
- package/dist/widgets/collections.d.ts.map +1 -0
- package/dist/widgets/collections.js +49 -0
- package/dist/widgets/collections.js.map +1 -0
- package/dist/widgets/commandPalette.d.ts +117 -0
- package/dist/widgets/commandPalette.d.ts.map +1 -0
- package/dist/widgets/commandPalette.js +230 -0
- package/dist/widgets/commandPalette.js.map +1 -0
- package/dist/widgets/composition.d.ts +202 -0
- package/dist/widgets/composition.d.ts.map +1 -0
- package/dist/widgets/composition.js +135 -0
- package/dist/widgets/composition.js.map +1 -0
- package/dist/widgets/conditionals.d.ts +9 -0
- package/dist/widgets/conditionals.d.ts.map +1 -0
- package/dist/widgets/conditionals.js +27 -0
- package/dist/widgets/conditionals.js.map +1 -0
- package/dist/widgets/debugPanel.d.ts +96 -0
- package/dist/widgets/debugPanel.d.ts.map +1 -0
- package/dist/widgets/debugPanel.js +172 -0
- package/dist/widgets/debugPanel.js.map +1 -0
- package/dist/widgets/dialogs/alert.d.ts +7 -0
- package/dist/widgets/dialogs/alert.d.ts.map +1 -0
- package/dist/widgets/dialogs/alert.js +21 -0
- package/dist/widgets/dialogs/alert.js.map +1 -0
- package/dist/widgets/dialogs/confirm.d.ts +7 -0
- package/dist/widgets/dialogs/confirm.d.ts.map +1 -0
- package/dist/widgets/dialogs/confirm.js +27 -0
- package/dist/widgets/dialogs/confirm.js.map +1 -0
- package/dist/widgets/dialogs/index.d.ts +8 -0
- package/dist/widgets/dialogs/index.d.ts.map +1 -0
- package/dist/widgets/dialogs/index.js +7 -0
- package/dist/widgets/dialogs/index.js.map +1 -0
- package/dist/widgets/dialogs/prompt.d.ts +9 -0
- package/dist/widgets/dialogs/prompt.d.ts.map +1 -0
- package/dist/widgets/dialogs/prompt.js +40 -0
- package/dist/widgets/dialogs/prompt.js.map +1 -0
- package/dist/widgets/dialogs/types.d.ts +29 -0
- package/dist/widgets/dialogs/types.d.ts.map +1 -0
- package/dist/widgets/dialogs/types.js +5 -0
- package/dist/widgets/dialogs/types.js.map +1 -0
- package/dist/widgets/diffViewer.d.ts +101 -0
- package/dist/widgets/diffViewer.d.ts.map +1 -0
- package/dist/widgets/diffViewer.js +194 -0
- package/dist/widgets/diffViewer.js.map +1 -0
- package/dist/widgets/field.d.ts +52 -0
- package/dist/widgets/field.d.ts.map +1 -0
- package/dist/widgets/field.js +62 -0
- package/dist/widgets/field.js.map +1 -0
- package/dist/widgets/logsConsole.d.ts +101 -0
- package/dist/widgets/logsConsole.d.ts.map +1 -0
- package/dist/widgets/logsConsole.js +189 -0
- package/dist/widgets/logsConsole.js.map +1 -0
- package/dist/widgets/radioGroup.d.ts +79 -0
- package/dist/widgets/radioGroup.d.ts.map +1 -0
- package/dist/widgets/radioGroup.js +145 -0
- package/dist/widgets/radioGroup.js.map +1 -0
- package/dist/widgets/select.d.ts +61 -0
- package/dist/widgets/select.d.ts.map +1 -0
- package/dist/widgets/select.js +119 -0
- package/dist/widgets/select.js.map +1 -0
- package/dist/widgets/splitPane.d.ts +92 -0
- package/dist/widgets/splitPane.d.ts.map +1 -0
- package/dist/widgets/splitPane.js +265 -0
- package/dist/widgets/splitPane.js.map +1 -0
- package/dist/widgets/style.d.ts +34 -0
- package/dist/widgets/style.d.ts.map +1 -0
- package/dist/widgets/style.js +16 -0
- package/dist/widgets/style.js.map +1 -0
- package/dist/widgets/styleUtils.d.ts +39 -0
- package/dist/widgets/styleUtils.d.ts.map +1 -0
- package/dist/widgets/styleUtils.js +42 -0
- package/dist/widgets/styleUtils.js.map +1 -0
- package/dist/widgets/styled.d.ts +21 -0
- package/dist/widgets/styled.d.ts.map +1 -0
- package/dist/widgets/styled.js +30 -0
- package/dist/widgets/styled.js.map +1 -0
- package/dist/widgets/table.d.ts +157 -0
- package/dist/widgets/table.d.ts.map +1 -0
- package/dist/widgets/table.js +338 -0
- package/dist/widgets/table.js.map +1 -0
- package/dist/widgets/toast.d.ts +89 -0
- package/dist/widgets/toast.d.ts.map +1 -0
- package/dist/widgets/toast.js +145 -0
- package/dist/widgets/toast.js.map +1 -0
- package/dist/widgets/tree.d.ts +207 -0
- package/dist/widgets/tree.d.ts.map +1 -0
- package/dist/widgets/tree.js +393 -0
- package/dist/widgets/tree.js.map +1 -0
- package/dist/widgets/types.d.ts +1400 -0
- package/dist/widgets/types.d.ts.map +1 -0
- package/dist/widgets/types.js +20 -0
- package/dist/widgets/types.js.map +1 -0
- package/dist/widgets/ui.d.ts +734 -0
- package/dist/widgets/ui.d.ts.map +1 -0
- package/dist/widgets/ui.js +851 -0
- package/dist/widgets/ui.js.map +1 -0
- package/dist/widgets/virtualList.d.ts +93 -0
- package/dist/widgets/virtualList.d.ts.map +1 -0
- package/dist/widgets/virtualList.js +258 -0
- package/dist/widgets/virtualList.js.map +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/core/src/widgets/commandPalette.ts — CommandPalette core algorithms.
|
|
3
|
+
*
|
|
4
|
+
* Why: Implements filtering, fuzzy matching, and keyboard navigation for the
|
|
5
|
+
* command palette widget. The palette provides quick-access command execution,
|
|
6
|
+
* model switching, file opening, and symbol navigation.
|
|
7
|
+
*
|
|
8
|
+
* @see docs/widgets/command-palette.md
|
|
9
|
+
*/
|
|
10
|
+
/** Default maximum visible items in the palette. */
|
|
11
|
+
export const DEFAULT_MAX_VISIBLE = 10;
|
|
12
|
+
/** Default palette width in cells. */
|
|
13
|
+
export const PALETTE_WIDTH = 60;
|
|
14
|
+
/**
|
|
15
|
+
* Compute the visible window for the results list so the selected item stays visible.
|
|
16
|
+
*
|
|
17
|
+
* @param selectedIndex - Current selection index
|
|
18
|
+
* @param itemCount - Total number of items
|
|
19
|
+
* @param visibleCount - Number of rows available for items
|
|
20
|
+
*/
|
|
21
|
+
export function computeCommandPaletteWindow(selectedIndex, itemCount, visibleCount) {
|
|
22
|
+
const count = Math.max(0, Math.min(itemCount, visibleCount));
|
|
23
|
+
if (count === 0)
|
|
24
|
+
return Object.freeze({ start: 0, count: 0 });
|
|
25
|
+
if (itemCount <= count)
|
|
26
|
+
return Object.freeze({ start: 0, count });
|
|
27
|
+
const sel = Math.max(0, Math.min(itemCount - 1, selectedIndex));
|
|
28
|
+
const maxStart = itemCount - count;
|
|
29
|
+
let start = sel - Math.floor(count / 2);
|
|
30
|
+
if (start < 0)
|
|
31
|
+
start = 0;
|
|
32
|
+
if (start > maxStart)
|
|
33
|
+
start = maxStart;
|
|
34
|
+
return Object.freeze({ start, count });
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Filter items from a source based on query string.
|
|
38
|
+
* Uses case-insensitive substring matching.
|
|
39
|
+
*
|
|
40
|
+
* @param items - Items to filter
|
|
41
|
+
* @param query - Search query
|
|
42
|
+
* @returns Filtered items
|
|
43
|
+
*/
|
|
44
|
+
export function filterItems(items, query) {
|
|
45
|
+
if (!query)
|
|
46
|
+
return items;
|
|
47
|
+
const lowerQuery = query.toLowerCase();
|
|
48
|
+
return Object.freeze(items.filter((item) => {
|
|
49
|
+
// Match against label
|
|
50
|
+
if (item.label.toLowerCase().includes(lowerQuery))
|
|
51
|
+
return true;
|
|
52
|
+
// Match against description
|
|
53
|
+
if (item.description?.toLowerCase().includes(lowerQuery))
|
|
54
|
+
return true;
|
|
55
|
+
// Match against shortcut
|
|
56
|
+
if (item.shortcut?.toLowerCase().includes(lowerQuery))
|
|
57
|
+
return true;
|
|
58
|
+
return false;
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Compute fuzzy match score for an item against a query.
|
|
63
|
+
* Higher score = better match.
|
|
64
|
+
*
|
|
65
|
+
* @param item - Item to score
|
|
66
|
+
* @param query - Search query
|
|
67
|
+
* @returns Match score (0 = no match)
|
|
68
|
+
*/
|
|
69
|
+
export function fuzzyScore(item, query) {
|
|
70
|
+
if (!query)
|
|
71
|
+
return 1; // All items match empty query equally
|
|
72
|
+
const lowerQuery = query.toLowerCase();
|
|
73
|
+
const lowerLabel = item.label.toLowerCase();
|
|
74
|
+
// Exact prefix match: highest score
|
|
75
|
+
if (lowerLabel.startsWith(lowerQuery)) {
|
|
76
|
+
return 100 + 1 / item.label.length;
|
|
77
|
+
}
|
|
78
|
+
// Word boundary match: high score
|
|
79
|
+
const words = lowerLabel.split(/\s+/);
|
|
80
|
+
for (const word of words) {
|
|
81
|
+
if (word.startsWith(lowerQuery)) {
|
|
82
|
+
return 80 + 1 / item.label.length;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Substring match: medium score
|
|
86
|
+
if (lowerLabel.includes(lowerQuery)) {
|
|
87
|
+
return 50 + 1 / item.label.length;
|
|
88
|
+
}
|
|
89
|
+
// Fuzzy character sequence match
|
|
90
|
+
let queryIdx = 0;
|
|
91
|
+
let consecutiveBonus = 0;
|
|
92
|
+
let lastMatchIdx = -2;
|
|
93
|
+
for (let i = 0; i < lowerLabel.length && queryIdx < lowerQuery.length; i++) {
|
|
94
|
+
if (lowerLabel[i] === lowerQuery[queryIdx]) {
|
|
95
|
+
if (i === lastMatchIdx + 1) {
|
|
96
|
+
consecutiveBonus += 5;
|
|
97
|
+
}
|
|
98
|
+
lastMatchIdx = i;
|
|
99
|
+
queryIdx++;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (queryIdx === lowerQuery.length) {
|
|
103
|
+
return 20 + consecutiveBonus + 1 / item.label.length;
|
|
104
|
+
}
|
|
105
|
+
return 0; // No match
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Sort items by fuzzy match score (descending).
|
|
109
|
+
*
|
|
110
|
+
* @param items - Items to sort
|
|
111
|
+
* @param query - Search query
|
|
112
|
+
* @returns Sorted items
|
|
113
|
+
*/
|
|
114
|
+
export function sortByScore(items, query) {
|
|
115
|
+
if (!query)
|
|
116
|
+
return items;
|
|
117
|
+
const scored = items.map((item) => ({ item, score: fuzzyScore(item, query) }));
|
|
118
|
+
scored.sort((a, b) => b.score - a.score);
|
|
119
|
+
return Object.freeze(scored.filter((s) => s.score > 0).map((s) => s.item));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get items from sources, filtered and sorted by query.
|
|
123
|
+
* Handles source prefix triggers (e.g., ">" for commands).
|
|
124
|
+
*
|
|
125
|
+
* @param sources - Command sources
|
|
126
|
+
* @param query - Search query
|
|
127
|
+
* @returns Promise of filtered items
|
|
128
|
+
*/
|
|
129
|
+
export async function getFilteredItems(sources, query) {
|
|
130
|
+
// Check for prefix trigger
|
|
131
|
+
let activeSourceId = null;
|
|
132
|
+
let effectiveQuery = query;
|
|
133
|
+
for (const source of sources) {
|
|
134
|
+
if (source.prefix && query.startsWith(source.prefix)) {
|
|
135
|
+
activeSourceId = source.id;
|
|
136
|
+
effectiveQuery = query.slice(source.prefix.length).trim();
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Get items from relevant sources
|
|
141
|
+
const itemPromises = [];
|
|
142
|
+
for (const source of sources) {
|
|
143
|
+
if (activeSourceId !== null && source.id !== activeSourceId) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const result = source.getItems(effectiveQuery);
|
|
147
|
+
if (result instanceof Promise) {
|
|
148
|
+
itemPromises.push(result);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
itemPromises.push(Promise.resolve(result));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const results = await Promise.all(itemPromises);
|
|
155
|
+
const allItems = results.flat();
|
|
156
|
+
// Filter and sort
|
|
157
|
+
const filtered = filterItems(allItems, effectiveQuery);
|
|
158
|
+
const sorted = sortByScore(filtered, effectiveQuery);
|
|
159
|
+
return sorted;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Compute next selected index for keyboard navigation.
|
|
163
|
+
*
|
|
164
|
+
* @param currentIndex - Current selection index
|
|
165
|
+
* @param direction - Navigation direction
|
|
166
|
+
* @param itemCount - Total number of items
|
|
167
|
+
* @param wrapAround - Whether to wrap at boundaries
|
|
168
|
+
* @returns New selection index
|
|
169
|
+
*/
|
|
170
|
+
export function computeNextIndex(currentIndex, direction, itemCount, wrapAround = true) {
|
|
171
|
+
if (itemCount === 0)
|
|
172
|
+
return 0;
|
|
173
|
+
let nextIndex;
|
|
174
|
+
if (direction === "up") {
|
|
175
|
+
nextIndex = currentIndex - 1;
|
|
176
|
+
if (nextIndex < 0) {
|
|
177
|
+
nextIndex = wrapAround ? itemCount - 1 : 0;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
nextIndex = currentIndex + 1;
|
|
182
|
+
if (nextIndex >= itemCount) {
|
|
183
|
+
nextIndex = wrapAround ? 0 : itemCount - 1;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return nextIndex;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Clamp selection index to valid range.
|
|
190
|
+
*
|
|
191
|
+
* @param index - Current index
|
|
192
|
+
* @param itemCount - Total number of items
|
|
193
|
+
* @returns Clamped index
|
|
194
|
+
*/
|
|
195
|
+
export function clampIndex(index, itemCount) {
|
|
196
|
+
if (itemCount === 0)
|
|
197
|
+
return 0;
|
|
198
|
+
return Math.max(0, Math.min(index, itemCount - 1));
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Compute highlight ranges for displaying matched text.
|
|
202
|
+
*
|
|
203
|
+
* @param text - Text to highlight
|
|
204
|
+
* @param query - Search query
|
|
205
|
+
* @returns Array of [start, end] ranges to highlight
|
|
206
|
+
*/
|
|
207
|
+
export function computeHighlights(text, query) {
|
|
208
|
+
if (!query)
|
|
209
|
+
return Object.freeze([]);
|
|
210
|
+
const highlights = [];
|
|
211
|
+
const lowerText = text.toLowerCase();
|
|
212
|
+
const lowerQuery = query.toLowerCase();
|
|
213
|
+
let searchStart = 0;
|
|
214
|
+
let matchIdx = lowerText.indexOf(lowerQuery, searchStart);
|
|
215
|
+
while (matchIdx !== -1) {
|
|
216
|
+
highlights.push([matchIdx, matchIdx + query.length]);
|
|
217
|
+
searchStart = matchIdx + 1;
|
|
218
|
+
matchIdx = lowerText.indexOf(lowerQuery, searchStart);
|
|
219
|
+
}
|
|
220
|
+
return Object.freeze(highlights);
|
|
221
|
+
}
|
|
222
|
+
/** Palette color constants. */
|
|
223
|
+
export const PALETTE_COLORS = {
|
|
224
|
+
background: { r: 30, g: 30, b: 30 },
|
|
225
|
+
border: { r: 60, g: 60, b: 60 },
|
|
226
|
+
selectedBg: { r: 0, g: 120, b: 215 },
|
|
227
|
+
highlight: { r: 255, g: 210, b: 0 },
|
|
228
|
+
placeholder: { r: 128, g: 128, b: 128 },
|
|
229
|
+
};
|
|
230
|
+
//# sourceMappingURL=commandPalette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandPalette.js","sourceRoot":"","sources":["../../src/widgets/commandPalette.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/core/src/widgets/composition.ts — Widget composition API.
|
|
3
|
+
*
|
|
4
|
+
* Why: Provides defineWidget for creating reusable components with local state
|
|
5
|
+
* and lifecycle. Enables building complex UIs from composable, stateful widgets
|
|
6
|
+
* while maintaining the declarative nature of the VNode tree.
|
|
7
|
+
*
|
|
8
|
+
* Key concepts:
|
|
9
|
+
* - defineWidget: Creates a widget factory with per-instance state
|
|
10
|
+
* - WidgetContext: Provides hooks for state, refs, effects, and app state
|
|
11
|
+
* - Scoped IDs: Each instance gets unique ID prefixes
|
|
12
|
+
* - Hook rules: Hooks must be called in consistent order each render
|
|
13
|
+
*
|
|
14
|
+
* @see docs/guide/composition.md (GitHub issue #116)
|
|
15
|
+
*/
|
|
16
|
+
import type { VNode } from "./types.js";
|
|
17
|
+
/**
|
|
18
|
+
* Context provided to widget render functions.
|
|
19
|
+
* Contains hooks for managing local state and side effects.
|
|
20
|
+
*/
|
|
21
|
+
export type WidgetContext<State = void> = Readonly<{
|
|
22
|
+
/**
|
|
23
|
+
* Generate a scoped ID unique to this widget instance.
|
|
24
|
+
* Use for interactive widget IDs to prevent collisions.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ctx.id("button") // Returns "MyWidget_0_button" for instance 0
|
|
28
|
+
*/
|
|
29
|
+
id: (suffix: string) => string;
|
|
30
|
+
/**
|
|
31
|
+
* Create local state that persists across renders.
|
|
32
|
+
* Similar to React's useState hook.
|
|
33
|
+
*
|
|
34
|
+
* @param initial - Initial value or lazy initializer function
|
|
35
|
+
* @returns Tuple of [currentValue, setValue]
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* const [count, setCount] = ctx.useState(0);
|
|
39
|
+
* const [items, setItems] = ctx.useState(() => loadItems());
|
|
40
|
+
*/
|
|
41
|
+
useState: <T>(initial: T | (() => T)) => [T, (v: T | ((prev: T) => T)) => void];
|
|
42
|
+
/**
|
|
43
|
+
* Create a mutable ref that persists across renders without triggering re-renders.
|
|
44
|
+
* Similar to React's useRef hook.
|
|
45
|
+
*
|
|
46
|
+
* @param initial - Initial value for the ref
|
|
47
|
+
* @returns Object with mutable `current` property
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* const inputRef = ctx.useRef<string>("");
|
|
51
|
+
*/
|
|
52
|
+
useRef: <T>(initial: T) => {
|
|
53
|
+
current: T;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Register a side effect to run after commit.
|
|
57
|
+
* Similar to React's useEffect hook.
|
|
58
|
+
*
|
|
59
|
+
* @param effect - Effect callback, may return cleanup function
|
|
60
|
+
* @param deps - Dependency array; effect re-runs when deps change
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ctx.useEffect(() => {
|
|
64
|
+
* const timer = setInterval(tick, 1000);
|
|
65
|
+
* return () => clearInterval(timer); // Cleanup
|
|
66
|
+
* }, []);
|
|
67
|
+
*/
|
|
68
|
+
useEffect: {
|
|
69
|
+
(effect: () => void, deps?: readonly unknown[]): void;
|
|
70
|
+
(effect: () => () => void, deps?: readonly unknown[]): void;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Select a slice of app state with automatic re-render on change.
|
|
74
|
+
* Only available when widget has access to app state.
|
|
75
|
+
*
|
|
76
|
+
* @param selector - Function to extract desired state slice
|
|
77
|
+
* @returns Selected state value
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* const userName = ctx.useAppState(s => s.user.name);
|
|
81
|
+
*/
|
|
82
|
+
useAppState: <T>(selector: (s: State) => T) => T;
|
|
83
|
+
/**
|
|
84
|
+
* Request a re-render of this widget instance.
|
|
85
|
+
* Typically called in response to external state changes.
|
|
86
|
+
*/
|
|
87
|
+
invalidate: () => void;
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* A composite widget is a VNode with special metadata for runtime handling.
|
|
91
|
+
* The runtime detects these and manages their instance state.
|
|
92
|
+
*/
|
|
93
|
+
export type CompositeVNode = VNode & {
|
|
94
|
+
readonly __composite: CompositeWidgetMeta;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Metadata attached to composite widget VNodes.
|
|
98
|
+
*/
|
|
99
|
+
export type CompositeWidgetMeta = Readonly<{
|
|
100
|
+
/** Unique key for this widget definition (for identity checking). */
|
|
101
|
+
widgetKey: string;
|
|
102
|
+
/** The render function to call. */
|
|
103
|
+
render: (ctx: WidgetContext<unknown>) => VNode;
|
|
104
|
+
/** Props passed to the widget. */
|
|
105
|
+
props: unknown;
|
|
106
|
+
/** Optional key prop for reconciliation. */
|
|
107
|
+
key: string | undefined;
|
|
108
|
+
}>;
|
|
109
|
+
/**
|
|
110
|
+
* Check if a VNode is a composite widget.
|
|
111
|
+
*/
|
|
112
|
+
export declare function isCompositeVNode(vnode: VNode): vnode is CompositeVNode;
|
|
113
|
+
/**
|
|
114
|
+
* Get composite metadata from a VNode, or null if not composite.
|
|
115
|
+
*/
|
|
116
|
+
export declare function getCompositeMeta(vnode: VNode): CompositeWidgetMeta | null;
|
|
117
|
+
/**
|
|
118
|
+
* Props constraint: must have optional key property.
|
|
119
|
+
*/
|
|
120
|
+
export type WidgetPropsBase = Readonly<{
|
|
121
|
+
key?: string;
|
|
122
|
+
}>;
|
|
123
|
+
/**
|
|
124
|
+
* Widget factory function returned by defineWidget.
|
|
125
|
+
*/
|
|
126
|
+
export type WidgetFactory<Props extends WidgetPropsBase> = (props: Props) => VNode;
|
|
127
|
+
/**
|
|
128
|
+
* Options for defineWidget.
|
|
129
|
+
*/
|
|
130
|
+
export type DefineWidgetOptions = Readonly<{
|
|
131
|
+
/** Display name for debugging (optional). */
|
|
132
|
+
name?: string;
|
|
133
|
+
}>;
|
|
134
|
+
/**
|
|
135
|
+
* Define a reusable widget with local state and lifecycle.
|
|
136
|
+
*
|
|
137
|
+
* The render function receives props and a WidgetContext for managing
|
|
138
|
+
* per-instance state. Each instance of the widget maintains its own
|
|
139
|
+
* state that persists across renders.
|
|
140
|
+
*
|
|
141
|
+
* @param render - Function that renders props and context to a VNode
|
|
142
|
+
* @param options - Optional configuration
|
|
143
|
+
* @returns Factory function that creates widget VNodes
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```ts
|
|
147
|
+
* const Counter = defineWidget<{ initial: number; key?: string }>((props, ctx) => {
|
|
148
|
+
* const [count, setCount] = ctx.useState(props.initial);
|
|
149
|
+
*
|
|
150
|
+
* return ui.row([
|
|
151
|
+
* ui.text(`Count: ${count}`),
|
|
152
|
+
* ui.button({
|
|
153
|
+
* id: ctx.id("inc"),
|
|
154
|
+
* label: "+",
|
|
155
|
+
* onPress: () => setCount(c => c + 1)
|
|
156
|
+
* }),
|
|
157
|
+
* ]);
|
|
158
|
+
* });
|
|
159
|
+
*
|
|
160
|
+
* // Usage:
|
|
161
|
+
* ui.column([
|
|
162
|
+
* Counter({ initial: 0 }),
|
|
163
|
+
* Counter({ initial: 10, key: "counter-2" }),
|
|
164
|
+
* ]);
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
export declare function defineWidget<Props extends WidgetPropsBase, State = void>(render: (props: Props, ctx: WidgetContext<State>) => VNode, options?: DefineWidgetOptions): WidgetFactory<Props>;
|
|
168
|
+
/**
|
|
169
|
+
* Generate a scoped ID for a widget instance.
|
|
170
|
+
*
|
|
171
|
+
* @param widgetKey - The widget definition key
|
|
172
|
+
* @param instanceIndex - Instance index within parent
|
|
173
|
+
* @param suffix - User-provided suffix
|
|
174
|
+
* @returns Scoped ID string like "Counter_0_inc"
|
|
175
|
+
*/
|
|
176
|
+
export declare function scopedId(widgetKey: string, instanceIndex: number, suffix: string): string;
|
|
177
|
+
/**
|
|
178
|
+
* Create a WidgetContext for rendering a composite widget.
|
|
179
|
+
* This is called by the runtime during the commit phase.
|
|
180
|
+
*
|
|
181
|
+
* @param widgetKey - Widget definition key for ID scoping
|
|
182
|
+
* @param instanceIndex - Instance index for ID scoping
|
|
183
|
+
* @param hookContext - Hook implementations from instance registry
|
|
184
|
+
* @param appState - Current app state for useAppState
|
|
185
|
+
* @param onInvalidate - Callback when widget needs re-render
|
|
186
|
+
* @returns Complete WidgetContext for the render pass
|
|
187
|
+
*/
|
|
188
|
+
export declare function createWidgetContext<State>(widgetKey: string, instanceIndex: number, hookContext: Pick<WidgetContext<State>, "useState" | "useRef" | "useEffect">, appState: State, onInvalidate: () => void): WidgetContext<State>;
|
|
189
|
+
/**
|
|
190
|
+
* Result of rendering a composite widget.
|
|
191
|
+
*/
|
|
192
|
+
export type CompositeRenderResult = Readonly<{
|
|
193
|
+
/** The rendered VNode tree. */
|
|
194
|
+
vnode: VNode;
|
|
195
|
+
/** Pending effects to run after commit. */
|
|
196
|
+
pendingEffects: readonly {
|
|
197
|
+
deps: readonly unknown[] | undefined;
|
|
198
|
+
cleanup: (() => void) | undefined;
|
|
199
|
+
effect: () => undefined | (() => void);
|
|
200
|
+
}[];
|
|
201
|
+
}>;
|
|
202
|
+
//# sourceMappingURL=composition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/widgets/composition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIxC;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,KAAK,GAAG,IAAI,IAAI,QAAQ,CAAC;IACjD;;;;;;OAMG;IACH,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAE/B;;;;;;;;;;OAUG;IACH,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAEhF;;;;;;;;;OASG;IACH,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC,CAAA;KAAE,CAAC;IAE1C;;;;;;;;;;;;OAYG;IACH,SAAS,EAAE;QACT,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CAAC;QACtD,CAAC,MAAM,EAAE,MAAM,MAAM,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CAAC;KAC7D,CAAC;IAEF;;;;;;;;;OASG;IACH,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;IAEjD;;;OAGG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC,CAAC;AAIH;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG;IACnC,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;CAC3C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,MAAM,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC;IAC/C,kCAAkC;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB,CAAC,CAAC;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,IAAI,cAAc,CAEtE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,mBAAmB,GAAG,IAAI,CAKzE;AAgBD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,KAAK,SAAS,eAAe,IAAI,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC;AAEnF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,YAAY,CAAC,KAAK,SAAS,eAAe,EAAE,KAAK,GAAG,IAAI,EACtE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,KAAK,EAC1D,OAAO,CAAC,EAAE,mBAAmB,GAC5B,aAAa,CAAC,KAAK,CAAC,CA6BtB;AAID;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEzF;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EACvC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC,EAC5E,QAAQ,EAAE,KAAK,EACf,YAAY,EAAE,MAAM,IAAI,GACvB,aAAa,CAAC,KAAK,CAAC,CAStB;AAID;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,+BAA+B;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,2CAA2C;IAC3C,cAAc,EAAE,SAAS;QACvB,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;QACrC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;QAClC,MAAM,EAAE,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;KACxC,EAAE,CAAC;CACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/core/src/widgets/composition.ts — Widget composition API.
|
|
3
|
+
*
|
|
4
|
+
* Why: Provides defineWidget for creating reusable components with local state
|
|
5
|
+
* and lifecycle. Enables building complex UIs from composable, stateful widgets
|
|
6
|
+
* while maintaining the declarative nature of the VNode tree.
|
|
7
|
+
*
|
|
8
|
+
* Key concepts:
|
|
9
|
+
* - defineWidget: Creates a widget factory with per-instance state
|
|
10
|
+
* - WidgetContext: Provides hooks for state, refs, effects, and app state
|
|
11
|
+
* - Scoped IDs: Each instance gets unique ID prefixes
|
|
12
|
+
* - Hook rules: Hooks must be called in consistent order each render
|
|
13
|
+
*
|
|
14
|
+
* @see docs/guide/composition.md (GitHub issue #116)
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Check if a VNode is a composite widget.
|
|
18
|
+
*/
|
|
19
|
+
export function isCompositeVNode(vnode) {
|
|
20
|
+
return "__composite" in vnode && vnode.__composite !== undefined;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get composite metadata from a VNode, or null if not composite.
|
|
24
|
+
*/
|
|
25
|
+
export function getCompositeMeta(vnode) {
|
|
26
|
+
if (isCompositeVNode(vnode)) {
|
|
27
|
+
return vnode.__composite;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
/* ========== Widget Definition ========== */
|
|
32
|
+
/** Counter for generating unique widget keys. */
|
|
33
|
+
let widgetKeyCounter = 0;
|
|
34
|
+
/**
|
|
35
|
+
* Generate a unique widget key for a definition.
|
|
36
|
+
* This ensures each call to defineWidget creates a distinct widget type.
|
|
37
|
+
*/
|
|
38
|
+
function generateWidgetKey(name) {
|
|
39
|
+
const id = widgetKeyCounter++;
|
|
40
|
+
return name ? `${name}_${id}` : `Widget_${id}`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Define a reusable widget with local state and lifecycle.
|
|
44
|
+
*
|
|
45
|
+
* The render function receives props and a WidgetContext for managing
|
|
46
|
+
* per-instance state. Each instance of the widget maintains its own
|
|
47
|
+
* state that persists across renders.
|
|
48
|
+
*
|
|
49
|
+
* @param render - Function that renders props and context to a VNode
|
|
50
|
+
* @param options - Optional configuration
|
|
51
|
+
* @returns Factory function that creates widget VNodes
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* const Counter = defineWidget<{ initial: number; key?: string }>((props, ctx) => {
|
|
56
|
+
* const [count, setCount] = ctx.useState(props.initial);
|
|
57
|
+
*
|
|
58
|
+
* return ui.row([
|
|
59
|
+
* ui.text(`Count: ${count}`),
|
|
60
|
+
* ui.button({
|
|
61
|
+
* id: ctx.id("inc"),
|
|
62
|
+
* label: "+",
|
|
63
|
+
* onPress: () => setCount(c => c + 1)
|
|
64
|
+
* }),
|
|
65
|
+
* ]);
|
|
66
|
+
* });
|
|
67
|
+
*
|
|
68
|
+
* // Usage:
|
|
69
|
+
* ui.column([
|
|
70
|
+
* Counter({ initial: 0 }),
|
|
71
|
+
* Counter({ initial: 10, key: "counter-2" }),
|
|
72
|
+
* ]);
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export function defineWidget(render, options) {
|
|
76
|
+
const widgetKey = generateWidgetKey(options?.name);
|
|
77
|
+
return function widgetFactory(props) {
|
|
78
|
+
// Store render function and props for later execution
|
|
79
|
+
const renderFn = (ctx) => {
|
|
80
|
+
return render(props, ctx);
|
|
81
|
+
};
|
|
82
|
+
// Create a composite VNode that the runtime will detect and handle
|
|
83
|
+
// Use column as the base kind with proper key handling
|
|
84
|
+
const baseVNode = {
|
|
85
|
+
kind: "column",
|
|
86
|
+
props: props.key !== undefined ? { key: props.key } : {},
|
|
87
|
+
children: [],
|
|
88
|
+
};
|
|
89
|
+
const compositeVNode = {
|
|
90
|
+
...baseVNode,
|
|
91
|
+
__composite: Object.freeze({
|
|
92
|
+
widgetKey,
|
|
93
|
+
render: renderFn,
|
|
94
|
+
props,
|
|
95
|
+
key: props.key,
|
|
96
|
+
}),
|
|
97
|
+
};
|
|
98
|
+
return compositeVNode;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/* ========== Instance ID Scoping ========== */
|
|
102
|
+
/**
|
|
103
|
+
* Generate a scoped ID for a widget instance.
|
|
104
|
+
*
|
|
105
|
+
* @param widgetKey - The widget definition key
|
|
106
|
+
* @param instanceIndex - Instance index within parent
|
|
107
|
+
* @param suffix - User-provided suffix
|
|
108
|
+
* @returns Scoped ID string like "Counter_0_inc"
|
|
109
|
+
*/
|
|
110
|
+
export function scopedId(widgetKey, instanceIndex, suffix) {
|
|
111
|
+
return `${widgetKey}_${instanceIndex}_${suffix}`;
|
|
112
|
+
}
|
|
113
|
+
/* ========== Context Creation ========== */
|
|
114
|
+
/**
|
|
115
|
+
* Create a WidgetContext for rendering a composite widget.
|
|
116
|
+
* This is called by the runtime during the commit phase.
|
|
117
|
+
*
|
|
118
|
+
* @param widgetKey - Widget definition key for ID scoping
|
|
119
|
+
* @param instanceIndex - Instance index for ID scoping
|
|
120
|
+
* @param hookContext - Hook implementations from instance registry
|
|
121
|
+
* @param appState - Current app state for useAppState
|
|
122
|
+
* @param onInvalidate - Callback when widget needs re-render
|
|
123
|
+
* @returns Complete WidgetContext for the render pass
|
|
124
|
+
*/
|
|
125
|
+
export function createWidgetContext(widgetKey, instanceIndex, hookContext, appState, onInvalidate) {
|
|
126
|
+
return Object.freeze({
|
|
127
|
+
id: (suffix) => scopedId(widgetKey, instanceIndex, suffix),
|
|
128
|
+
useState: hookContext.useState,
|
|
129
|
+
useRef: hookContext.useRef,
|
|
130
|
+
useEffect: hookContext.useEffect,
|
|
131
|
+
useAppState: (selector) => selector(appState),
|
|
132
|
+
invalidate: onInvalidate,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=composition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../src/widgets/composition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0GH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,OAAO,aAAa,IAAI,KAAK,IAAK,KAAwB,CAAC,WAAW,KAAK,SAAS,CAAC;AACvF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,WAAW,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6CAA6C;AAE7C,iDAAiD;AACjD,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB;;;GAGG;AACH,SAAS,iBAAiB,CAAC,IAAa;IACtC,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC9B,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC;AACjD,CAAC;AAoBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,YAAY,CAC1B,MAA0D,EAC1D,OAA6B;IAE7B,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEnD,OAAO,SAAS,aAAa,CAAC,KAAY;QACxC,sDAAsD;QACtD,MAAM,QAAQ,GAAG,CAAC,GAA2B,EAAE,EAAE;YAC/C,OAAO,MAAM,CAAC,KAAK,EAAE,GAA2B,CAAC,CAAC;QACpD,CAAC,CAAC;QAEF,mEAAmE;QACnE,uDAAuD;QACvD,MAAM,SAAS,GAAU;YACvB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE;YACxD,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,MAAM,cAAc,GAAmB;YACrC,GAAG,SAAS;YACZ,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;gBACzB,SAAS;gBACT,MAAM,EAAE,QAAQ;gBAChB,KAAK;gBACL,GAAG,EAAE,KAAK,CAAC,GAAG;aACf,CAAC;SACH,CAAC;QAEF,OAAO,cAAc,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC;AAED,+CAA+C;AAE/C;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,SAAiB,EAAE,aAAqB,EAAE,MAAc;IAC/E,OAAO,GAAG,SAAS,IAAI,aAAa,IAAI,MAAM,EAAE,CAAC;AACnD,CAAC;AAED,4CAA4C;AAE5C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,aAAqB,EACrB,WAA4E,EAC5E,QAAe,EACf,YAAwB;IAExB,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC;QAClE,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,WAAW,EAAE,CAAI,QAAyB,EAAK,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACpE,UAAU,EAAE,YAAY;KACzB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/core/src/widgets/conditionals.ts — Conditional rendering helpers.
|
|
3
|
+
*/
|
|
4
|
+
import type { VNode } from "./types.js";
|
|
5
|
+
export declare function show(condition: boolean, node: VNode, fallback?: VNode): VNode | null;
|
|
6
|
+
export declare function when(condition: boolean, trueBranch: () => VNode, falseBranch?: () => VNode): VNode | null;
|
|
7
|
+
export declare function match<T extends string | number>(value: T, cases: Partial<Record<T, (() => VNode) | VNode>> & Record<"_", (() => VNode) | VNode>): VNode | null;
|
|
8
|
+
export declare function maybe<T>(value: T | null | undefined, render: (value: T) => VNode): VNode | null;
|
|
9
|
+
//# sourceMappingURL=conditionals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditionals.d.ts","sourceRoot":"","sources":["../../src/widgets/conditionals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,wBAAgB,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,CAGpF;AAED,wBAAgB,IAAI,CAClB,SAAS,EAAE,OAAO,EAClB,UAAU,EAAE,MAAM,KAAK,EACvB,WAAW,CAAC,EAAE,MAAM,KAAK,GACxB,KAAK,GAAG,IAAI,CAGd;AAED,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC7C,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,CAAC,GACpF,KAAK,GAAG,IAAI,CAKd;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,GAAG,KAAK,GAAG,IAAI,CAG/F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/core/src/widgets/conditionals.ts — Conditional rendering helpers.
|
|
3
|
+
*/
|
|
4
|
+
export function show(condition, node, fallback) {
|
|
5
|
+
if (condition)
|
|
6
|
+
return node;
|
|
7
|
+
return fallback ?? null;
|
|
8
|
+
}
|
|
9
|
+
export function when(condition, trueBranch, falseBranch) {
|
|
10
|
+
if (condition)
|
|
11
|
+
return trueBranch();
|
|
12
|
+
return falseBranch?.() ?? null;
|
|
13
|
+
}
|
|
14
|
+
export function match(value, cases) {
|
|
15
|
+
const handler = cases[value] ?? cases._;
|
|
16
|
+
if (handler === undefined)
|
|
17
|
+
return null;
|
|
18
|
+
if (typeof handler === "function")
|
|
19
|
+
return handler();
|
|
20
|
+
return handler;
|
|
21
|
+
}
|
|
22
|
+
export function maybe(value, render) {
|
|
23
|
+
if (value === null || value === undefined)
|
|
24
|
+
return null;
|
|
25
|
+
return render(value);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=conditionals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditionals.js","sourceRoot":"","sources":["../../src/widgets/conditionals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,UAAU,IAAI,CAAC,SAAkB,EAAE,IAAW,EAAE,QAAgB;IACpE,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,QAAQ,IAAI,IAAI,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,SAAkB,EAClB,UAAuB,EACvB,WAAyB;IAEzB,IAAI,SAAS;QAAE,OAAO,UAAU,EAAE,CAAC;IACnC,OAAO,WAAW,EAAE,EAAE,IAAI,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,KAAK,CACnB,KAAQ,EACR,KAAqF;IAErF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;IACxC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,OAAO,OAAO,KAAK,UAAU;QAAE,OAAO,OAAO,EAAE,CAAC;IACpD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,KAAK,CAAI,KAA2B,EAAE,MAA2B;IAC/E,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
|