@tachui/core 0.7.0-alpha1 → 0.8.0-alpha
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 +195 -0
- package/dist/bundles/common.d.ts +1 -1
- package/dist/bundles/common.d.ts.map +1 -1
- package/dist/bundles/minimal.d.ts +17 -5
- package/dist/bundles/minimal.d.ts.map +1 -1
- package/dist/bundles/production-minimal.d.ts +2 -16
- package/dist/bundles/production-minimal.d.ts.map +1 -1
- package/dist/common.js +402 -955
- package/dist/compiler/advanced-parser.d.ts.map +1 -1
- package/dist/compiler/index.js +1392 -10
- package/dist/component-XAzF1xqs.js +487 -0
- package/dist/component-base-x2XmHFjy.js +255 -0
- package/dist/components/index.d.ts +4 -38
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +7 -102
- package/dist/components/wrapper.d.ts +5 -152
- package/dist/components/wrapper.d.ts.map +1 -1
- package/dist/concatenated-component-ByPl3_FF.js +2933 -0
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/layout.d.ts +47 -4
- package/dist/constants/layout.d.ts.map +1 -1
- package/dist/constants/layout.js +52 -14
- package/dist/css-classes/index.js +176 -0
- package/dist/dom-bridge-CAa1N2zX.js +406 -0
- package/dist/effect-B9Knft0b.js +66 -0
- package/dist/essential.js +394 -953
- package/dist/index-DCPJFUm9.js +1407 -0
- package/dist/index-DIvMCJQO.js +268 -0
- package/dist/index-vdsiw6gQ.js +777 -0
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +394 -953
- package/dist/minimal-prod.js +107 -190
- package/dist/minimal.js +115 -955
- package/dist/modifiers/background.d.ts +41 -11
- package/dist/modifiers/background.d.ts.map +1 -1
- package/dist/modifiers/base.d.ts +6 -33
- package/dist/modifiers/base.d.ts.map +1 -1
- package/dist/modifiers/base.js +275 -533
- package/dist/modifiers/builder.d.ts +103 -195
- package/dist/modifiers/builder.d.ts.map +1 -1
- package/dist/modifiers/builder.js +7 -928
- package/dist/modifiers/core.d.ts +9 -401
- package/dist/modifiers/core.d.ts.map +1 -1
- package/dist/modifiers/{utils.d.ts → factories.d.ts} +18 -5
- package/dist/modifiers/factories.d.ts.map +1 -0
- package/dist/modifiers/index.d.ts +8 -52
- package/dist/modifiers/index.d.ts.map +1 -1
- package/dist/modifiers/index.js +38 -0
- package/dist/modifiers/presets.d.ts +368 -0
- package/dist/modifiers/presets.d.ts.map +1 -0
- package/dist/modifiers/registry.js +8 -161
- package/dist/modifiers/types.d.ts +39 -211
- package/dist/modifiers/types.d.ts.map +1 -1
- package/dist/modifiers/types.js +0 -1
- package/dist/performance-optimizer-stub-CtfXUwl4.js +38 -0
- package/dist/plugins/index.d.ts +5 -6
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +393 -32
- package/dist/plugins/simplified-index.d.ts +5 -6
- package/dist/plugins/simplified-index.d.ts.map +1 -1
- package/dist/production-minimal-BY_gMc-l.js +2532 -0
- package/dist/reactive/index.js +489 -91
- package/dist/reactive/types.js +0 -1
- package/dist/runtime/dom-bridge.js +12 -239
- package/dist/runtime/element-override.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +0 -7
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/renderer.d.ts.map +1 -1
- package/dist/runtime/renderer.js +7 -388
- package/dist/runtime/semantic-role-manager.d.ts.map +1 -1
- package/dist/runtime/types.js +1 -0
- package/dist/scheduler-BKeqwrYE.js +814 -0
- package/dist/validation/build-time-stub.d.ts +33 -0
- package/dist/validation/build-time-stub.d.ts.map +1 -0
- package/dist/validation/debug-tools-stub.d.ts +67 -0
- package/dist/validation/debug-tools-stub.d.ts.map +1 -0
- package/dist/validation/index.d.ts +23 -78
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +788 -233
- package/dist/validation/lifecycle-validation.d.ts.map +1 -1
- package/dist/validation/performance-optimizer-stub.d.ts +50 -0
- package/dist/validation/performance-optimizer-stub.d.ts.map +1 -0
- package/dist/validation/plugin-registration.d.ts +5 -1
- package/dist/validation/plugin-registration.d.ts.map +1 -1
- package/dist/validation/production-bypass-core.d.ts +69 -0
- package/dist/validation/production-bypass-core.d.ts.map +1 -0
- package/package.json +43 -8
- package/dist/assets/Asset.cjs +0 -2
- package/dist/assets/Asset.cjs.map +0 -1
- package/dist/assets/Asset.js +0 -9
- package/dist/assets/Asset.js.map +0 -1
- package/dist/assets/AssetCollection.cjs +0 -2
- package/dist/assets/AssetCollection.cjs.map +0 -1
- package/dist/assets/AssetCollection.js +0 -44
- package/dist/assets/AssetCollection.js.map +0 -1
- package/dist/assets/ColorAsset.cjs +0 -2
- package/dist/assets/ColorAsset.cjs.map +0 -1
- package/dist/assets/ColorAsset.js +0 -114
- package/dist/assets/ColorAsset.js.map +0 -1
- package/dist/assets/FontAsset.cjs +0 -9
- package/dist/assets/FontAsset.cjs.map +0 -1
- package/dist/assets/FontAsset.js +0 -173
- package/dist/assets/FontAsset.js.map +0 -1
- package/dist/assets/ImageAsset.cjs +0 -2
- package/dist/assets/ImageAsset.cjs.map +0 -1
- package/dist/assets/ImageAsset.js +0 -39
- package/dist/assets/ImageAsset.js.map +0 -1
- package/dist/assets/index.cjs +0 -2
- package/dist/assets/index.cjs.map +0 -1
- package/dist/assets/index.js +0 -119
- package/dist/assets/index.js.map +0 -1
- package/dist/common.cjs +0 -2
- package/dist/common.cjs.map +0 -1
- package/dist/common.js.map +0 -1
- package/dist/compiler/advanced-parser.cjs +0 -5
- package/dist/compiler/advanced-parser.cjs.map +0 -1
- package/dist/compiler/advanced-parser.js +0 -440
- package/dist/compiler/advanced-parser.js.map +0 -1
- package/dist/compiler/codegen.cjs +0 -6
- package/dist/compiler/codegen.cjs.map +0 -1
- package/dist/compiler/codegen.js +0 -241
- package/dist/compiler/codegen.js.map +0 -1
- package/dist/compiler/enhanced-codegen.cjs +0 -6
- package/dist/compiler/enhanced-codegen.cjs.map +0 -1
- package/dist/compiler/enhanced-codegen.js +0 -347
- package/dist/compiler/enhanced-codegen.js.map +0 -1
- package/dist/compiler/index.cjs +0 -2
- package/dist/compiler/index.cjs.map +0 -1
- package/dist/compiler/index.js.map +0 -1
- package/dist/compiler/parser.cjs +0 -5
- package/dist/compiler/parser.cjs.map +0 -1
- package/dist/compiler/parser.js +0 -275
- package/dist/compiler/parser.js.map +0 -1
- package/dist/compiler/plugin.cjs +0 -33
- package/dist/compiler/plugin.cjs.map +0 -1
- package/dist/compiler/plugin.js +0 -103
- package/dist/compiler/plugin.js.map +0 -1
- package/dist/components/BasicInput.cjs +0 -2
- package/dist/components/BasicInput.cjs.map +0 -1
- package/dist/components/BasicInput.d.ts +0 -116
- package/dist/components/BasicInput.d.ts.map +0 -1
- package/dist/components/BasicInput.js +0 -182
- package/dist/components/BasicInput.js.map +0 -1
- package/dist/components/Button.cjs +0 -7
- package/dist/components/Button.cjs.map +0 -1
- package/dist/components/Button.d.ts +0 -252
- package/dist/components/Button.d.ts.map +0 -1
- package/dist/components/Button.js +0 -408
- package/dist/components/Button.js.map +0 -1
- package/dist/components/Divider.cjs +0 -2
- package/dist/components/Divider.cjs.map +0 -1
- package/dist/components/Divider.d.ts +0 -141
- package/dist/components/Divider.d.ts.map +0 -1
- package/dist/components/Divider.js +0 -187
- package/dist/components/Divider.js.map +0 -1
- package/dist/components/EnhancedLink.cjs +0 -2
- package/dist/components/EnhancedLink.cjs.map +0 -1
- package/dist/components/EnhancedLink.d.ts +0 -365
- package/dist/components/EnhancedLink.d.ts.map +0 -1
- package/dist/components/EnhancedLink.js +0 -345
- package/dist/components/EnhancedLink.js.map +0 -1
- package/dist/components/Form.cjs +0 -2
- package/dist/components/Form.cjs.map +0 -1
- package/dist/components/Form.d.ts +0 -141
- package/dist/components/Form.d.ts.map +0 -1
- package/dist/components/Form.js +0 -244
- package/dist/components/Form.js.map +0 -1
- package/dist/components/Grid.cjs +0 -2
- package/dist/components/Grid.cjs.map +0 -1
- package/dist/components/Grid.d.ts +0 -698
- package/dist/components/Grid.d.ts.map +0 -1
- package/dist/components/Grid.js +0 -1045
- package/dist/components/Grid.js.map +0 -1
- package/dist/components/GridResponsive.cjs +0 -2
- package/dist/components/GridResponsive.cjs.map +0 -1
- package/dist/components/GridResponsive.d.ts +0 -214
- package/dist/components/GridResponsive.d.ts.map +0 -1
- package/dist/components/GridResponsive.js +0 -382
- package/dist/components/GridResponsive.js.map +0 -1
- package/dist/components/Image.cjs +0 -2
- package/dist/components/Image.cjs.map +0 -1
- package/dist/components/Image.d.ts +0 -162
- package/dist/components/Image.d.ts.map +0 -1
- package/dist/components/Image.js +0 -212
- package/dist/components/Image.js.map +0 -1
- package/dist/components/List.cjs +0 -2
- package/dist/components/List.cjs.map +0 -1
- package/dist/components/List.d.ts +0 -287
- package/dist/components/List.d.ts.map +0 -1
- package/dist/components/List.js +0 -561
- package/dist/components/List.js.map +0 -1
- package/dist/components/Menu.cjs +0 -2
- package/dist/components/Menu.cjs.map +0 -1
- package/dist/components/Menu.d.ts +0 -159
- package/dist/components/Menu.d.ts.map +0 -1
- package/dist/components/Menu.js +0 -443
- package/dist/components/Menu.js.map +0 -1
- package/dist/components/Picker.cjs +0 -2
- package/dist/components/Picker.cjs.map +0 -1
- package/dist/components/Picker.d.ts +0 -153
- package/dist/components/Picker.d.ts.map +0 -1
- package/dist/components/Picker.js +0 -478
- package/dist/components/Picker.js.map +0 -1
- package/dist/components/ScrollView.cjs +0 -6
- package/dist/components/ScrollView.cjs.map +0 -1
- package/dist/components/ScrollView.d.ts +0 -222
- package/dist/components/ScrollView.d.ts.map +0 -1
- package/dist/components/ScrollView.js +0 -363
- package/dist/components/ScrollView.js.map +0 -1
- package/dist/components/Section.cjs +0 -2
- package/dist/components/Section.cjs.map +0 -1
- package/dist/components/Section.d.ts +0 -153
- package/dist/components/Section.d.ts.map +0 -1
- package/dist/components/Section.js +0 -323
- package/dist/components/Section.js.map +0 -1
- package/dist/components/Show.cjs +0 -2
- package/dist/components/Show.cjs.map +0 -1
- package/dist/components/Show.d.ts +0 -64
- package/dist/components/Show.d.ts.map +0 -1
- package/dist/components/Show.js +0 -112
- package/dist/components/Show.js.map +0 -1
- package/dist/components/Spacer.cjs +0 -2
- package/dist/components/Spacer.cjs.map +0 -1
- package/dist/components/Spacer.d.ts +0 -35
- package/dist/components/Spacer.d.ts.map +0 -1
- package/dist/components/Spacer.js +0 -53
- package/dist/components/Spacer.js.map +0 -1
- package/dist/components/Text.cjs +0 -2
- package/dist/components/Text.cjs.map +0 -1
- package/dist/components/Text.d.ts +0 -242
- package/dist/components/Text.d.ts.map +0 -1
- package/dist/components/Text.js +0 -193
- package/dist/components/Text.js.map +0 -1
- package/dist/components/Toggle.cjs +0 -2
- package/dist/components/Toggle.cjs.map +0 -1
- package/dist/components/Toggle.d.ts +0 -207
- package/dist/components/Toggle.d.ts.map +0 -1
- package/dist/components/Toggle.js +0 -477
- package/dist/components/Toggle.js.map +0 -1
- package/dist/components/index.cjs +0 -2
- package/dist/components/index.cjs.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/wrapper.cjs +0 -2
- package/dist/components/wrapper.cjs.map +0 -1
- package/dist/components/wrapper.js +0 -484
- package/dist/components/wrapper.js.map +0 -1
- package/dist/concatenation/concatenatable.cjs +0 -2
- package/dist/concatenation/concatenatable.cjs.map +0 -1
- package/dist/concatenation/concatenatable.js +0 -118
- package/dist/concatenation/concatenatable.js.map +0 -1
- package/dist/concatenation/concatenated-component.cjs +0 -2
- package/dist/concatenation/concatenated-component.cjs.map +0 -1
- package/dist/concatenation/concatenated-component.js +0 -276
- package/dist/concatenation/concatenated-component.js.map +0 -1
- package/dist/concatenation/text-optimizer.cjs +0 -2
- package/dist/concatenation/text-optimizer.cjs.map +0 -1
- package/dist/concatenation/text-optimizer.js +0 -236
- package/dist/concatenation/text-optimizer.js.map +0 -1
- package/dist/concatenation/types.cjs +0 -2
- package/dist/concatenation/types.cjs.map +0 -1
- package/dist/concatenation/types.js +0 -13
- package/dist/concatenation/types.js.map +0 -1
- package/dist/constants/frame-utils.cjs +0 -2
- package/dist/constants/frame-utils.cjs.map +0 -1
- package/dist/constants/frame-utils.js +0 -116
- package/dist/constants/frame-utils.js.map +0 -1
- package/dist/constants/layout.cjs +0 -2
- package/dist/constants/layout.cjs.map +0 -1
- package/dist/constants/layout.js.map +0 -1
- package/dist/css-classes/component-base.cjs +0 -2
- package/dist/css-classes/component-base.cjs.map +0 -1
- package/dist/css-classes/component-base.js +0 -62
- package/dist/css-classes/component-base.js.map +0 -1
- package/dist/css-classes/css-class-manager.cjs +0 -2
- package/dist/css-classes/css-class-manager.cjs.map +0 -1
- package/dist/css-classes/css-class-manager.js +0 -209
- package/dist/css-classes/css-class-manager.js.map +0 -1
- package/dist/css-classes/dom-integration.cjs +0 -2
- package/dist/css-classes/dom-integration.cjs.map +0 -1
- package/dist/css-classes/dom-integration.js +0 -67
- package/dist/css-classes/dom-integration.js.map +0 -1
- package/dist/css-classes/enhanced-renderer.cjs +0 -2
- package/dist/css-classes/enhanced-renderer.cjs.map +0 -1
- package/dist/css-classes/enhanced-renderer.js +0 -73
- package/dist/css-classes/enhanced-renderer.js.map +0 -1
- package/dist/css-classes/utilities.cjs +0 -2
- package/dist/css-classes/utilities.cjs.map +0 -1
- package/dist/css-classes/utilities.js +0 -41
- package/dist/css-classes/utilities.js.map +0 -1
- package/dist/debug/index.d.ts +0 -61
- package/dist/debug/index.d.ts.map +0 -1
- package/dist/debug.cjs +0 -52
- package/dist/debug.cjs.map +0 -1
- package/dist/debug.js +0 -179
- package/dist/debug.js.map +0 -1
- package/dist/developer-experience/enhanced-errors.d.ts +0 -128
- package/dist/developer-experience/enhanced-errors.d.ts.map +0 -1
- package/dist/developer-experience/enhanced-types.d.ts +0 -281
- package/dist/developer-experience/enhanced-types.d.ts.map +0 -1
- package/dist/developer-experience/index.d.ts +0 -44
- package/dist/developer-experience/index.d.ts.map +0 -1
- package/dist/essential.cjs +0 -2
- package/dist/essential.cjs.map +0 -1
- package/dist/essential.js.map +0 -1
- package/dist/gradients/css-generator.cjs +0 -2
- package/dist/gradients/css-generator.cjs.map +0 -1
- package/dist/gradients/css-generator.js +0 -100
- package/dist/gradients/css-generator.js.map +0 -1
- package/dist/gradients/examples.cjs +0 -2
- package/dist/gradients/examples.cjs.map +0 -1
- package/dist/gradients/examples.js +0 -555
- package/dist/gradients/examples.js.map +0 -1
- package/dist/gradients/gradient-asset.cjs +0 -2
- package/dist/gradients/gradient-asset.cjs.map +0 -1
- package/dist/gradients/gradient-asset.js +0 -22
- package/dist/gradients/gradient-asset.js.map +0 -1
- package/dist/gradients/index.cjs +0 -2
- package/dist/gradients/index.cjs.map +0 -1
- package/dist/gradients/index.js +0 -78
- package/dist/gradients/index.js.map +0 -1
- package/dist/gradients/performance.cjs +0 -2
- package/dist/gradients/performance.cjs.map +0 -1
- package/dist/gradients/performance.js +0 -237
- package/dist/gradients/performance.js.map +0 -1
- package/dist/gradients/presets.cjs +0 -2
- package/dist/gradients/presets.cjs.map +0 -1
- package/dist/gradients/presets.js +0 -254
- package/dist/gradients/presets.js.map +0 -1
- package/dist/gradients/reactive.cjs +0 -2
- package/dist/gradients/reactive.cjs.map +0 -1
- package/dist/gradients/reactive.js +0 -239
- package/dist/gradients/reactive.js.map +0 -1
- package/dist/gradients/state-gradient-asset.cjs +0 -2
- package/dist/gradients/state-gradient-asset.cjs.map +0 -1
- package/dist/gradients/state-gradient-asset.js +0 -111
- package/dist/gradients/state-gradient-asset.js.map +0 -1
- package/dist/gradients/utils.cjs +0 -2
- package/dist/gradients/utils.cjs.map +0 -1
- package/dist/gradients/utils.js +0 -385
- package/dist/gradients/utils.js.map +0 -1
- package/dist/gradients/validation.cjs +0 -2
- package/dist/gradients/validation.cjs.map +0 -1
- package/dist/gradients/validation.js +0 -209
- package/dist/gradients/validation.js.map +0 -1
- package/dist/index.cjs +0 -2
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index2.cjs +0 -2
- package/dist/index2.cjs.map +0 -1
- package/dist/index2.js +0 -293
- package/dist/index2.js.map +0 -1
- package/dist/lifecycle/hooks.cjs +0 -2
- package/dist/lifecycle/hooks.cjs.map +0 -1
- package/dist/lifecycle/hooks.js +0 -159
- package/dist/lifecycle/hooks.js.map +0 -1
- package/dist/minimal-prod.cjs +0 -2
- package/dist/minimal-prod.cjs.map +0 -1
- package/dist/minimal-prod.js.map +0 -1
- package/dist/minimal.cjs +0 -2
- package/dist/minimal.cjs.map +0 -1
- package/dist/minimal.js.map +0 -1
- package/dist/modifiers/as-html-validator.cjs +0 -2
- package/dist/modifiers/as-html-validator.cjs.map +0 -1
- package/dist/modifiers/as-html-validator.js +0 -47
- package/dist/modifiers/as-html-validator.js.map +0 -1
- package/dist/modifiers/as-html.cjs +0 -2
- package/dist/modifiers/as-html.cjs.map +0 -1
- package/dist/modifiers/as-html.js +0 -71
- package/dist/modifiers/as-html.js.map +0 -1
- package/dist/modifiers/attributes.cjs +0 -2
- package/dist/modifiers/attributes.cjs.map +0 -1
- package/dist/modifiers/attributes.d.ts +0 -203
- package/dist/modifiers/attributes.d.ts.map +0 -1
- package/dist/modifiers/attributes.js +0 -272
- package/dist/modifiers/attributes.js.map +0 -1
- package/dist/modifiers/backdrop.cjs +0 -2
- package/dist/modifiers/backdrop.cjs.map +0 -1
- package/dist/modifiers/backdrop.d.ts +0 -59
- package/dist/modifiers/backdrop.d.ts.map +0 -1
- package/dist/modifiers/backdrop.js +0 -109
- package/dist/modifiers/backdrop.js.map +0 -1
- package/dist/modifiers/background.cjs +0 -2
- package/dist/modifiers/background.cjs.map +0 -1
- package/dist/modifiers/background.js +0 -67
- package/dist/modifiers/background.js.map +0 -1
- package/dist/modifiers/base.cjs +0 -25
- package/dist/modifiers/base.cjs.map +0 -1
- package/dist/modifiers/base.js.map +0 -1
- package/dist/modifiers/basic-sanitizer.cjs +0 -2
- package/dist/modifiers/basic-sanitizer.cjs.map +0 -1
- package/dist/modifiers/basic-sanitizer.js +0 -162
- package/dist/modifiers/basic-sanitizer.js.map +0 -1
- package/dist/modifiers/border.cjs +0 -2
- package/dist/modifiers/border.cjs.map +0 -1
- package/dist/modifiers/border.d.ts +0 -217
- package/dist/modifiers/border.d.ts.map +0 -1
- package/dist/modifiers/border.js +0 -160
- package/dist/modifiers/border.js.map +0 -1
- package/dist/modifiers/builder.cjs +0 -2
- package/dist/modifiers/builder.cjs.map +0 -1
- package/dist/modifiers/builder.js.map +0 -1
- package/dist/modifiers/core.cjs +0 -2
- package/dist/modifiers/core.cjs.map +0 -1
- package/dist/modifiers/core.js +0 -398
- package/dist/modifiers/core.js.map +0 -1
- package/dist/modifiers/css.cjs +0 -2
- package/dist/modifiers/css.cjs.map +0 -1
- package/dist/modifiers/css.js +0 -50
- package/dist/modifiers/css.js.map +0 -1
- package/dist/modifiers/effects.cjs +0 -2
- package/dist/modifiers/effects.cjs.map +0 -1
- package/dist/modifiers/effects.d.ts +0 -159
- package/dist/modifiers/effects.d.ts.map +0 -1
- package/dist/modifiers/effects.js +0 -178
- package/dist/modifiers/effects.js.map +0 -1
- package/dist/modifiers/elements.cjs +0 -2
- package/dist/modifiers/elements.cjs.map +0 -1
- package/dist/modifiers/elements.d.ts +0 -240
- package/dist/modifiers/elements.d.ts.map +0 -1
- package/dist/modifiers/elements.js +0 -216
- package/dist/modifiers/elements.js.map +0 -1
- package/dist/modifiers/filters.cjs +0 -2
- package/dist/modifiers/filters.cjs.map +0 -1
- package/dist/modifiers/filters.d.ts +0 -275
- package/dist/modifiers/filters.d.ts.map +0 -1
- package/dist/modifiers/filters.js +0 -223
- package/dist/modifiers/filters.js.map +0 -1
- package/dist/modifiers/flexbox.cjs +0 -2
- package/dist/modifiers/flexbox.cjs.map +0 -1
- package/dist/modifiers/flexbox.d.ts +0 -82
- package/dist/modifiers/flexbox.d.ts.map +0 -1
- package/dist/modifiers/flexbox.js +0 -56
- package/dist/modifiers/flexbox.js.map +0 -1
- package/dist/modifiers/font.cjs +0 -2
- package/dist/modifiers/font.cjs.map +0 -1
- package/dist/modifiers/font.d.ts +0 -71
- package/dist/modifiers/font.d.ts.map +0 -1
- package/dist/modifiers/font.js +0 -60
- package/dist/modifiers/font.js.map +0 -1
- package/dist/modifiers/grid.cjs +0 -2
- package/dist/modifiers/grid.cjs.map +0 -1
- package/dist/modifiers/grid.d.ts +0 -92
- package/dist/modifiers/grid.d.ts.map +0 -1
- package/dist/modifiers/grid.js +0 -92
- package/dist/modifiers/grid.js.map +0 -1
- package/dist/modifiers/margin.cjs +0 -2
- package/dist/modifiers/margin.cjs.map +0 -1
- package/dist/modifiers/margin.d.ts +0 -128
- package/dist/modifiers/margin.d.ts.map +0 -1
- package/dist/modifiers/margin.js +0 -65
- package/dist/modifiers/margin.js.map +0 -1
- package/dist/modifiers/padding.cjs +0 -2
- package/dist/modifiers/padding.cjs.map +0 -1
- package/dist/modifiers/padding.d.ts +0 -204
- package/dist/modifiers/padding.d.ts.map +0 -1
- package/dist/modifiers/padding.js +0 -109
- package/dist/modifiers/padding.js.map +0 -1
- package/dist/modifiers/registry.cjs +0 -2
- package/dist/modifiers/registry.cjs.map +0 -1
- package/dist/modifiers/registry.js.map +0 -1
- package/dist/modifiers/responsive/advanced-utilities.cjs +0 -2
- package/dist/modifiers/responsive/advanced-utilities.cjs.map +0 -1
- package/dist/modifiers/responsive/advanced-utilities.d.ts +0 -118
- package/dist/modifiers/responsive/advanced-utilities.d.ts.map +0 -1
- package/dist/modifiers/responsive/advanced-utilities.js +0 -291
- package/dist/modifiers/responsive/advanced-utilities.js.map +0 -1
- package/dist/modifiers/responsive/breakpoints.cjs +0 -2
- package/dist/modifiers/responsive/breakpoints.cjs.map +0 -1
- package/dist/modifiers/responsive/breakpoints.d.ts +0 -81
- package/dist/modifiers/responsive/breakpoints.d.ts.map +0 -1
- package/dist/modifiers/responsive/breakpoints.js +0 -168
- package/dist/modifiers/responsive/breakpoints.js.map +0 -1
- package/dist/modifiers/responsive/css-generator.cjs +0 -5
- package/dist/modifiers/responsive/css-generator.cjs.map +0 -1
- package/dist/modifiers/responsive/css-generator.d.ts +0 -100
- package/dist/modifiers/responsive/css-generator.d.ts.map +0 -1
- package/dist/modifiers/responsive/css-generator.js +0 -261
- package/dist/modifiers/responsive/css-generator.js.map +0 -1
- package/dist/modifiers/responsive/dev-tools.cjs +0 -77
- package/dist/modifiers/responsive/dev-tools.cjs.map +0 -1
- package/dist/modifiers/responsive/dev-tools.d.ts +0 -107
- package/dist/modifiers/responsive/dev-tools.d.ts.map +0 -1
- package/dist/modifiers/responsive/dev-tools.js +0 -380
- package/dist/modifiers/responsive/dev-tools.js.map +0 -1
- package/dist/modifiers/responsive/index.d.ts +0 -28
- package/dist/modifiers/responsive/index.d.ts.map +0 -1
- package/dist/modifiers/responsive/layout-patterns.cjs +0 -2
- package/dist/modifiers/responsive/layout-patterns.cjs.map +0 -1
- package/dist/modifiers/responsive/layout-patterns.d.ts +0 -230
- package/dist/modifiers/responsive/layout-patterns.d.ts.map +0 -1
- package/dist/modifiers/responsive/layout-patterns.js +0 -254
- package/dist/modifiers/responsive/layout-patterns.js.map +0 -1
- package/dist/modifiers/responsive/performance.cjs +0 -3
- package/dist/modifiers/responsive/performance.cjs.map +0 -1
- package/dist/modifiers/responsive/performance.d.ts +0 -130
- package/dist/modifiers/responsive/performance.d.ts.map +0 -1
- package/dist/modifiers/responsive/performance.js +0 -212
- package/dist/modifiers/responsive/performance.js.map +0 -1
- package/dist/modifiers/responsive/responsive-builder.cjs +0 -2
- package/dist/modifiers/responsive/responsive-builder.cjs.map +0 -1
- package/dist/modifiers/responsive/responsive-builder.d.ts +0 -133
- package/dist/modifiers/responsive/responsive-builder.d.ts.map +0 -1
- package/dist/modifiers/responsive/responsive-builder.js +0 -272
- package/dist/modifiers/responsive/responsive-builder.js.map +0 -1
- package/dist/modifiers/responsive/responsive-modifier.cjs +0 -3
- package/dist/modifiers/responsive/responsive-modifier.cjs.map +0 -1
- package/dist/modifiers/responsive/responsive-modifier.d.ts +0 -123
- package/dist/modifiers/responsive/responsive-modifier.d.ts.map +0 -1
- package/dist/modifiers/responsive/responsive-modifier.js +0 -204
- package/dist/modifiers/responsive/responsive-modifier.js.map +0 -1
- package/dist/modifiers/responsive/types.cjs +0 -2
- package/dist/modifiers/responsive/types.cjs.map +0 -1
- package/dist/modifiers/responsive/types.d.ts +0 -183
- package/dist/modifiers/responsive/types.d.ts.map +0 -1
- package/dist/modifiers/responsive/types.js +0 -26
- package/dist/modifiers/responsive/types.js.map +0 -1
- package/dist/modifiers/responsive/utilities.cjs +0 -16
- package/dist/modifiers/responsive/utilities.cjs.map +0 -1
- package/dist/modifiers/responsive/utilities.d.ts +0 -149
- package/dist/modifiers/responsive/utilities.d.ts.map +0 -1
- package/dist/modifiers/responsive/utilities.js +0 -273
- package/dist/modifiers/responsive/utilities.js.map +0 -1
- package/dist/modifiers/scroll.cjs +0 -2
- package/dist/modifiers/scroll.cjs.map +0 -1
- package/dist/modifiers/scroll.d.ts +0 -143
- package/dist/modifiers/scroll.d.ts.map +0 -1
- package/dist/modifiers/scroll.js +0 -82
- package/dist/modifiers/scroll.js.map +0 -1
- package/dist/modifiers/shadows.cjs +0 -2
- package/dist/modifiers/shadows.cjs.map +0 -1
- package/dist/modifiers/shadows.d.ts +0 -114
- package/dist/modifiers/shadows.d.ts.map +0 -1
- package/dist/modifiers/shadows.js +0 -147
- package/dist/modifiers/shadows.js.map +0 -1
- package/dist/modifiers/size.cjs +0 -2
- package/dist/modifiers/size.cjs.map +0 -1
- package/dist/modifiers/size.d.ts +0 -113
- package/dist/modifiers/size.d.ts.map +0 -1
- package/dist/modifiers/size.js +0 -74
- package/dist/modifiers/size.js.map +0 -1
- package/dist/modifiers/text.cjs +0 -2
- package/dist/modifiers/text.cjs.map +0 -1
- package/dist/modifiers/text.d.ts +0 -147
- package/dist/modifiers/text.d.ts.map +0 -1
- package/dist/modifiers/text.js +0 -166
- package/dist/modifiers/text.js.map +0 -1
- package/dist/modifiers/transformations.cjs +0 -2
- package/dist/modifiers/transformations.cjs.map +0 -1
- package/dist/modifiers/transformations.d.ts +0 -329
- package/dist/modifiers/transformations.d.ts.map +0 -1
- package/dist/modifiers/transformations.js +0 -216
- package/dist/modifiers/transformations.js.map +0 -1
- package/dist/modifiers/transitions.cjs +0 -2
- package/dist/modifiers/transitions.cjs.map +0 -1
- package/dist/modifiers/transitions.d.ts +0 -98
- package/dist/modifiers/transitions.d.ts.map +0 -1
- package/dist/modifiers/transitions.js +0 -102
- package/dist/modifiers/transitions.js.map +0 -1
- package/dist/modifiers/types.cjs +0 -2
- package/dist/modifiers/types.cjs.map +0 -1
- package/dist/modifiers/types.js.map +0 -1
- package/dist/modifiers/typography.cjs +0 -2
- package/dist/modifiers/typography.cjs.map +0 -1
- package/dist/modifiers/typography.d.ts +0 -192
- package/dist/modifiers/typography.d.ts.map +0 -1
- package/dist/modifiers/typography.js +0 -76
- package/dist/modifiers/typography.js.map +0 -1
- package/dist/modifiers/utility.cjs +0 -2
- package/dist/modifiers/utility.cjs.map +0 -1
- package/dist/modifiers/utility.d.ts +0 -69
- package/dist/modifiers/utility.d.ts.map +0 -1
- package/dist/modifiers/utility.js +0 -71
- package/dist/modifiers/utility.js.map +0 -1
- package/dist/modifiers/utils.cjs +0 -2
- package/dist/modifiers/utils.cjs.map +0 -1
- package/dist/modifiers/utils.d.ts.map +0 -1
- package/dist/modifiers/utils.js +0 -250
- package/dist/modifiers/utils.js.map +0 -1
- package/dist/plugins/index.cjs +0 -2
- package/dist/plugins/index.cjs.map +0 -1
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/legacy-adapter.cjs +0 -2
- package/dist/plugins/legacy-adapter.cjs.map +0 -1
- package/dist/plugins/legacy-adapter.js +0 -30
- package/dist/plugins/legacy-adapter.js.map +0 -1
- package/dist/plugins/simplified-component-registry.cjs +0 -2
- package/dist/plugins/simplified-component-registry.cjs.map +0 -1
- package/dist/plugins/simplified-component-registry.js +0 -71
- package/dist/plugins/simplified-component-registry.js.map +0 -1
- package/dist/plugins/simplified-error-handler.cjs +0 -2
- package/dist/plugins/simplified-error-handler.cjs.map +0 -1
- package/dist/plugins/simplified-error-handler.d.ts +0 -83
- package/dist/plugins/simplified-error-handler.d.ts.map +0 -1
- package/dist/plugins/simplified-error-handler.js +0 -154
- package/dist/plugins/simplified-error-handler.js.map +0 -1
- package/dist/plugins/simplified-lazy-loader.cjs +0 -2
- package/dist/plugins/simplified-lazy-loader.cjs.map +0 -1
- package/dist/plugins/simplified-lazy-loader.js +0 -129
- package/dist/plugins/simplified-lazy-loader.js.map +0 -1
- package/dist/plugins/simplified-plugin-manager.cjs +0 -2
- package/dist/plugins/simplified-plugin-manager.cjs.map +0 -1
- package/dist/plugins/simplified-plugin-manager.js +0 -51
- package/dist/plugins/simplified-plugin-manager.js.map +0 -1
- package/dist/plugins/simplified-tachui-instance.cjs +0 -2
- package/dist/plugins/simplified-tachui-instance.cjs.map +0 -1
- package/dist/plugins/simplified-tachui-instance.js +0 -88
- package/dist/plugins/simplified-tachui-instance.js.map +0 -1
- package/dist/plugins/simplified-types.cjs +0 -2
- package/dist/plugins/simplified-types.cjs.map +0 -1
- package/dist/plugins/simplified-types.js +0 -9
- package/dist/plugins/simplified-types.js.map +0 -1
- package/dist/plugins/simplified-utils.cjs +0 -2
- package/dist/plugins/simplified-utils.cjs.map +0 -1
- package/dist/plugins/simplified-utils.js +0 -40
- package/dist/plugins/simplified-utils.js.map +0 -1
- package/dist/reactive/cleanup.cjs +0 -2
- package/dist/reactive/cleanup.cjs.map +0 -1
- package/dist/reactive/cleanup.js +0 -62
- package/dist/reactive/cleanup.js.map +0 -1
- package/dist/reactive/computed.cjs +0 -2
- package/dist/reactive/computed.cjs.map +0 -1
- package/dist/reactive/computed.js +0 -121
- package/dist/reactive/computed.js.map +0 -1
- package/dist/reactive/context.cjs +0 -2
- package/dist/reactive/context.cjs.map +0 -1
- package/dist/reactive/context.js +0 -143
- package/dist/reactive/context.js.map +0 -1
- package/dist/reactive/effect.cjs +0 -2
- package/dist/reactive/effect.cjs.map +0 -1
- package/dist/reactive/effect.js +0 -67
- package/dist/reactive/effect.js.map +0 -1
- package/dist/reactive/enhanced-effect.cjs +0 -2
- package/dist/reactive/enhanced-effect.cjs.map +0 -1
- package/dist/reactive/enhanced-effect.js +0 -153
- package/dist/reactive/enhanced-effect.js.map +0 -1
- package/dist/reactive/enhanced-signal.cjs +0 -2
- package/dist/reactive/enhanced-signal.cjs.map +0 -1
- package/dist/reactive/enhanced-signal.js +0 -117
- package/dist/reactive/enhanced-signal.js.map +0 -1
- package/dist/reactive/equality.cjs +0 -2
- package/dist/reactive/equality.cjs.map +0 -1
- package/dist/reactive/equality.js +0 -66
- package/dist/reactive/equality.js.map +0 -1
- package/dist/reactive/index.cjs +0 -2
- package/dist/reactive/index.cjs.map +0 -1
- package/dist/reactive/index.js.map +0 -1
- package/dist/reactive/migration.cjs +0 -18
- package/dist/reactive/migration.cjs.map +0 -1
- package/dist/reactive/migration.js +0 -164
- package/dist/reactive/migration.js.map +0 -1
- package/dist/reactive/ownership.cjs +0 -2
- package/dist/reactive/ownership.cjs.map +0 -1
- package/dist/reactive/ownership.js +0 -34
- package/dist/reactive/ownership.js.map +0 -1
- package/dist/reactive/scheduler.cjs +0 -2
- package/dist/reactive/scheduler.cjs.map +0 -1
- package/dist/reactive/scheduler.js +0 -111
- package/dist/reactive/scheduler.js.map +0 -1
- package/dist/reactive/signal.cjs +0 -2
- package/dist/reactive/signal.cjs.map +0 -1
- package/dist/reactive/signal.js +0 -96
- package/dist/reactive/signal.js.map +0 -1
- package/dist/reactive/theme.cjs +0 -2
- package/dist/reactive/theme.cjs.map +0 -1
- package/dist/reactive/theme.js +0 -27
- package/dist/reactive/theme.js.map +0 -1
- package/dist/reactive/types.cjs +0 -2
- package/dist/reactive/types.cjs.map +0 -1
- package/dist/reactive/types.js.map +0 -1
- package/dist/reactive/unified-scheduler.cjs +0 -2
- package/dist/reactive/unified-scheduler.cjs.map +0 -1
- package/dist/reactive/unified-scheduler.js +0 -219
- package/dist/reactive/unified-scheduler.js.map +0 -1
- package/dist/runtime/component-context.cjs +0 -2
- package/dist/runtime/component-context.cjs.map +0 -1
- package/dist/runtime/component-context.js +0 -177
- package/dist/runtime/component-context.js.map +0 -1
- package/dist/runtime/component.cjs +0 -2
- package/dist/runtime/component.cjs.map +0 -1
- package/dist/runtime/component.js +0 -238
- package/dist/runtime/component.js.map +0 -1
- package/dist/runtime/context.cjs +0 -2
- package/dist/runtime/context.cjs.map +0 -1
- package/dist/runtime/context.js +0 -289
- package/dist/runtime/context.js.map +0 -1
- package/dist/runtime/dev-tools.cjs +0 -2
- package/dist/runtime/dev-tools.cjs.map +0 -1
- package/dist/runtime/dev-tools.d.ts +0 -240
- package/dist/runtime/dev-tools.d.ts.map +0 -1
- package/dist/runtime/dev-tools.js +0 -391
- package/dist/runtime/dev-tools.js.map +0 -1
- package/dist/runtime/development-warnings.cjs +0 -2
- package/dist/runtime/development-warnings.cjs.map +0 -1
- package/dist/runtime/development-warnings.d.ts +0 -42
- package/dist/runtime/development-warnings.d.ts.map +0 -1
- package/dist/runtime/development-warnings.js +0 -69
- package/dist/runtime/development-warnings.js.map +0 -1
- package/dist/runtime/dom-bridge.cjs +0 -2
- package/dist/runtime/dom-bridge.cjs.map +0 -1
- package/dist/runtime/dom-bridge.js.map +0 -1
- package/dist/runtime/element-override.cjs +0 -2
- package/dist/runtime/element-override.cjs.map +0 -1
- package/dist/runtime/element-override.js +0 -214
- package/dist/runtime/element-override.js.map +0 -1
- package/dist/runtime/error-boundary.cjs +0 -2
- package/dist/runtime/error-boundary.cjs.map +0 -1
- package/dist/runtime/error-boundary.d.ts +0 -302
- package/dist/runtime/error-boundary.d.ts.map +0 -1
- package/dist/runtime/error-boundary.js +0 -559
- package/dist/runtime/error-boundary.js.map +0 -1
- package/dist/runtime/error-recovery.cjs +0 -2
- package/dist/runtime/error-recovery.cjs.map +0 -1
- package/dist/runtime/error-recovery.d.ts +0 -267
- package/dist/runtime/error-recovery.d.ts.map +0 -1
- package/dist/runtime/error-recovery.js +0 -385
- package/dist/runtime/error-recovery.js.map +0 -1
- package/dist/runtime/error-reporting.cjs +0 -3
- package/dist/runtime/error-reporting.cjs.map +0 -1
- package/dist/runtime/error-reporting.d.ts +0 -287
- package/dist/runtime/error-reporting.d.ts.map +0 -1
- package/dist/runtime/error-reporting.js +0 -479
- package/dist/runtime/error-reporting.js.map +0 -1
- package/dist/runtime/error-utils.cjs +0 -3
- package/dist/runtime/error-utils.cjs.map +0 -1
- package/dist/runtime/error-utils.d.ts +0 -204
- package/dist/runtime/error-utils.d.ts.map +0 -1
- package/dist/runtime/error-utils.js +0 -352
- package/dist/runtime/error-utils.js.map +0 -1
- package/dist/runtime/lazy-component.cjs +0 -2
- package/dist/runtime/lazy-component.cjs.map +0 -1
- package/dist/runtime/lazy-component.js +0 -129
- package/dist/runtime/lazy-component.js.map +0 -1
- package/dist/runtime/lifecycle.cjs +0 -2
- package/dist/runtime/lifecycle.cjs.map +0 -1
- package/dist/runtime/lifecycle.js +0 -7
- package/dist/runtime/lifecycle.js.map +0 -1
- package/dist/runtime/mounting.cjs +0 -2
- package/dist/runtime/mounting.cjs.map +0 -1
- package/dist/runtime/mounting.js +0 -12
- package/dist/runtime/mounting.js.map +0 -1
- package/dist/runtime/optimization.cjs +0 -2
- package/dist/runtime/optimization.cjs.map +0 -1
- package/dist/runtime/optimization.js +0 -6
- package/dist/runtime/optimization.js.map +0 -1
- package/dist/runtime/performance.cjs +0 -2
- package/dist/runtime/performance.cjs.map +0 -1
- package/dist/runtime/performance.d.ts +0 -217
- package/dist/runtime/performance.d.ts.map +0 -1
- package/dist/runtime/performance.js +0 -399
- package/dist/runtime/performance.js.map +0 -1
- package/dist/runtime/props.cjs +0 -2
- package/dist/runtime/props.cjs.map +0 -1
- package/dist/runtime/props.js +0 -265
- package/dist/runtime/props.js.map +0 -1
- package/dist/runtime/renderer.cjs +0 -2
- package/dist/runtime/renderer.cjs.map +0 -1
- package/dist/runtime/renderer.js.map +0 -1
- package/dist/runtime/semantic-role-manager.cjs +0 -2
- package/dist/runtime/semantic-role-manager.cjs.map +0 -1
- package/dist/runtime/semantic-role-manager.js +0 -82
- package/dist/runtime/semantic-role-manager.js.map +0 -1
- package/dist/state/binding.cjs +0 -2
- package/dist/state/binding.cjs.map +0 -1
- package/dist/state/binding.js +0 -155
- package/dist/state/binding.js.map +0 -1
- package/dist/state/environment.cjs +0 -2
- package/dist/state/environment.cjs.map +0 -1
- package/dist/state/environment.js +0 -115
- package/dist/state/environment.js.map +0 -1
- package/dist/state/index.cjs +0 -2
- package/dist/state/index.cjs.map +0 -1
- package/dist/state/index.js +0 -63
- package/dist/state/index.js.map +0 -1
- package/dist/state/observed-object.cjs +0 -2
- package/dist/state/observed-object.cjs.map +0 -1
- package/dist/state/observed-object.js +0 -163
- package/dist/state/observed-object.js.map +0 -1
- package/dist/state/state-manager.cjs +0 -2
- package/dist/state/state-manager.cjs.map +0 -1
- package/dist/state/state-manager.js +0 -233
- package/dist/state/state-manager.js.map +0 -1
- package/dist/state/state.cjs +0 -2
- package/dist/state/state.cjs.map +0 -1
- package/dist/state/state.js +0 -159
- package/dist/state/state.js.map +0 -1
- package/dist/sui-compat.cjs +0 -2
- package/dist/sui-compat.cjs.map +0 -1
- package/dist/sui-compat.d.ts +0 -110
- package/dist/sui-compat.d.ts.map +0 -1
- package/dist/sui-compat.js +0 -88
- package/dist/sui-compat.js.map +0 -1
- package/dist/validation/advanced-debugging.cjs +0 -44
- package/dist/validation/advanced-debugging.cjs.map +0 -1
- package/dist/validation/advanced-debugging.d.ts +0 -319
- package/dist/validation/advanced-debugging.d.ts.map +0 -1
- package/dist/validation/advanced-debugging.js +0 -455
- package/dist/validation/advanced-debugging.js.map +0 -1
- package/dist/validation/build-time/detection.cjs +0 -2
- package/dist/validation/build-time/detection.cjs.map +0 -1
- package/dist/validation/build-time/detection.d.ts +0 -32
- package/dist/validation/build-time/detection.d.ts.map +0 -1
- package/dist/validation/build-time/detection.js +0 -199
- package/dist/validation/build-time/detection.js.map +0 -1
- package/dist/validation/build-time/index.cjs +0 -2
- package/dist/validation/build-time/index.cjs.map +0 -1
- package/dist/validation/build-time/index.d.ts +0 -84
- package/dist/validation/build-time/index.d.ts.map +0 -1
- package/dist/validation/build-time/index.js +0 -122
- package/dist/validation/build-time/index.js.map +0 -1
- package/dist/validation/build-time/plugins.cjs +0 -3
- package/dist/validation/build-time/plugins.cjs.map +0 -1
- package/dist/validation/build-time/plugins.d.ts +0 -75
- package/dist/validation/build-time/plugins.d.ts.map +0 -1
- package/dist/validation/build-time/plugins.js +0 -282
- package/dist/validation/build-time/plugins.js.map +0 -1
- package/dist/validation/build-time/rules.cjs +0 -2
- package/dist/validation/build-time/rules.cjs.map +0 -1
- package/dist/validation/build-time/rules.d.ts +0 -73
- package/dist/validation/build-time/rules.d.ts.map +0 -1
- package/dist/validation/build-time/rules.js +0 -576
- package/dist/validation/build-time/rules.js.map +0 -1
- package/dist/validation/build-time/transformer.cjs +0 -3
- package/dist/validation/build-time/transformer.cjs.map +0 -1
- package/dist/validation/build-time/transformer.d.ts +0 -23
- package/dist/validation/build-time/transformer.d.ts.map +0 -1
- package/dist/validation/build-time/transformer.js +0 -177
- package/dist/validation/build-time/transformer.js.map +0 -1
- package/dist/validation/build-time/types.d.ts +0 -212
- package/dist/validation/build-time/types.d.ts.map +0 -1
- package/dist/validation/comprehensive.cjs +0 -9
- package/dist/validation/comprehensive.cjs.map +0 -1
- package/dist/validation/comprehensive.d.ts +0 -160
- package/dist/validation/comprehensive.d.ts.map +0 -1
- package/dist/validation/comprehensive.js +0 -916
- package/dist/validation/comprehensive.js.map +0 -1
- package/dist/validation/debug-tools.cjs +0 -16
- package/dist/validation/debug-tools.cjs.map +0 -1
- package/dist/validation/debug-tools.d.ts +0 -251
- package/dist/validation/debug-tools.d.ts.map +0 -1
- package/dist/validation/debug-tools.js +0 -405
- package/dist/validation/debug-tools.js.map +0 -1
- package/dist/validation/developer-experience.cjs +0 -17
- package/dist/validation/developer-experience.cjs.map +0 -1
- package/dist/validation/developer-experience.d.ts +0 -243
- package/dist/validation/developer-experience.d.ts.map +0 -1
- package/dist/validation/developer-experience.js +0 -433
- package/dist/validation/developer-experience.js.map +0 -1
- package/dist/validation/documentation-integration.cjs +0 -7
- package/dist/validation/documentation-integration.cjs.map +0 -1
- package/dist/validation/documentation-integration.d.ts +0 -269
- package/dist/validation/documentation-integration.d.ts.map +0 -1
- package/dist/validation/documentation-integration.js +0 -440
- package/dist/validation/documentation-integration.js.map +0 -1
- package/dist/validation/enhanced-runtime.cjs +0 -6
- package/dist/validation/enhanced-runtime.cjs.map +0 -1
- package/dist/validation/enhanced-runtime.d.ts +0 -279
- package/dist/validation/enhanced-runtime.d.ts.map +0 -1
- package/dist/validation/enhanced-runtime.js +0 -465
- package/dist/validation/enhanced-runtime.js.map +0 -1
- package/dist/validation/error-reporting.cjs +0 -32
- package/dist/validation/error-reporting.cjs.map +0 -1
- package/dist/validation/error-reporting.d.ts +0 -186
- package/dist/validation/error-reporting.d.ts.map +0 -1
- package/dist/validation/error-reporting.js +0 -370
- package/dist/validation/error-reporting.js.map +0 -1
- package/dist/validation/ide-integration.cjs +0 -85
- package/dist/validation/ide-integration.cjs.map +0 -1
- package/dist/validation/ide-integration.d.ts +0 -328
- package/dist/validation/ide-integration.d.ts.map +0 -1
- package/dist/validation/ide-integration.js +0 -557
- package/dist/validation/ide-integration.js.map +0 -1
- package/dist/validation/index.cjs +0 -6
- package/dist/validation/index.cjs.map +0 -1
- package/dist/validation/index.js.map +0 -1
- package/dist/validation/lifecycle-validation.cjs +0 -2
- package/dist/validation/lifecycle-validation.cjs.map +0 -1
- package/dist/validation/lifecycle-validation.js +0 -314
- package/dist/validation/lifecycle-validation.js.map +0 -1
- package/dist/validation/performance-optimizer.cjs +0 -2
- package/dist/validation/performance-optimizer.cjs.map +0 -1
- package/dist/validation/performance-optimizer.d.ts +0 -218
- package/dist/validation/performance-optimizer.d.ts.map +0 -1
- package/dist/validation/performance-optimizer.js +0 -338
- package/dist/validation/performance-optimizer.js.map +0 -1
- package/dist/validation/plugin-registration.cjs +0 -2
- package/dist/validation/plugin-registration.cjs.map +0 -1
- package/dist/validation/plugin-registration.js +0 -126
- package/dist/validation/plugin-registration.js.map +0 -1
- package/dist/validation/production-bypass.cjs +0 -2
- package/dist/validation/production-bypass.cjs.map +0 -1
- package/dist/validation/production-bypass.d.ts +0 -175
- package/dist/validation/production-bypass.d.ts.map +0 -1
- package/dist/validation/production-bypass.js +0 -218
- package/dist/validation/production-bypass.js.map +0 -1
- package/dist/validation/simple.cjs +0 -9
- package/dist/validation/simple.cjs.map +0 -1
- package/dist/validation/simple.d.ts +0 -111
- package/dist/validation/simple.d.ts.map +0 -1
- package/dist/validation/simple.js +0 -146
- package/dist/validation/simple.js.map +0 -1
- package/dist/viewport/adapters/web-adapter.cjs +0 -70
- package/dist/viewport/adapters/web-adapter.cjs.map +0 -1
- package/dist/viewport/adapters/web-adapter.d.ts +0 -227
- package/dist/viewport/adapters/web-adapter.d.ts.map +0 -1
- package/dist/viewport/adapters/web-adapter.js +0 -823
- package/dist/viewport/adapters/web-adapter.js.map +0 -1
- package/dist/viewport/components.cjs +0 -2
- package/dist/viewport/components.cjs.map +0 -1
- package/dist/viewport/components.d.ts +0 -131
- package/dist/viewport/components.d.ts.map +0 -1
- package/dist/viewport/components.js +0 -298
- package/dist/viewport/components.js.map +0 -1
- package/dist/viewport/environment.cjs +0 -2
- package/dist/viewport/environment.cjs.map +0 -1
- package/dist/viewport/environment.d.ts +0 -75
- package/dist/viewport/environment.d.ts.map +0 -1
- package/dist/viewport/environment.js +0 -86
- package/dist/viewport/environment.js.map +0 -1
- package/dist/viewport/index.cjs +0 -2
- package/dist/viewport/index.cjs.map +0 -1
- package/dist/viewport/index.d.ts +0 -138
- package/dist/viewport/index.d.ts.map +0 -1
- package/dist/viewport/index.js +0 -166
- package/dist/viewport/index.js.map +0 -1
- package/dist/viewport/platform-detection.cjs +0 -2
- package/dist/viewport/platform-detection.cjs.map +0 -1
- package/dist/viewport/platform-detection.d.ts +0 -59
- package/dist/viewport/platform-detection.d.ts.map +0 -1
- package/dist/viewport/platform-detection.js +0 -205
- package/dist/viewport/platform-detection.js.map +0 -1
- package/dist/viewport/types.cjs +0 -2
- package/dist/viewport/types.cjs.map +0 -1
- package/dist/viewport/types.d.ts +0 -301
- package/dist/viewport/types.d.ts.map +0 -1
- package/dist/viewport/types.js +0 -13
- package/dist/viewport/types.js.map +0 -1
- package/dist/viewport/viewport-manager.cjs +0 -2
- package/dist/viewport/viewport-manager.cjs.map +0 -1
- package/dist/viewport/viewport-manager.d.ts +0 -118
- package/dist/viewport/viewport-manager.d.ts.map +0 -1
- package/dist/viewport/viewport-manager.js +0 -524
- package/dist/viewport/viewport-manager.js.map +0 -1
- package/src/assets/Asset.ts +0 -11
- package/src/assets/AssetCollection.ts +0 -99
- package/src/assets/ColorAsset.ts +0 -210
- package/src/assets/FontAsset.ts +0 -380
- package/src/assets/ImageAsset.ts +0 -91
- package/src/assets/README.md +0 -190
- package/src/assets/index.ts +0 -175
- package/src/assets/test-assets.ts +0 -69
- package/src/assets/test-integration.ts +0 -46
- package/src/assets/test-simple.ts +0 -28
- package/src/assets/types.ts +0 -79
- package/src/bundles/common.ts +0 -30
- package/src/bundles/complete.ts +0 -29
- package/src/bundles/essential.ts +0 -26
- package/src/bundles/minimal.ts +0 -26
- package/src/bundles/production-minimal.ts +0 -67
- package/src/compiler/advanced-parser.ts +0 -871
- package/src/compiler/codegen.ts +0 -450
- package/src/compiler/enhanced-codegen.ts +0 -729
- package/src/compiler/index.ts +0 -25
- package/src/compiler/parser.ts +0 -461
- package/src/compiler/plugin.ts +0 -181
- package/src/compiler/types.ts +0 -177
- package/src/components/BasicInput.ts +0 -352
- package/src/components/Button.ts +0 -963
- package/src/components/Divider.ts +0 -341
- package/src/components/EnhancedLink.ts +0 -676
- package/src/components/Form.ts +0 -414
- package/src/components/Grid.ts +0 -2507
- package/src/components/GridResponsive.ts +0 -637
- package/src/components/Image.ts +0 -426
- package/src/components/List.ts +0 -1084
- package/src/components/Menu.ts +0 -807
- package/src/components/Picker.ts +0 -678
- package/src/components/ScrollView.ts +0 -725
- package/src/components/Section.ts +0 -472
- package/src/components/Show.ts +0 -205
- package/src/components/Spacer.ts +0 -93
- package/src/components/Text.ts +0 -447
- package/src/components/Toggle.ts +0 -700
- package/src/components/index.ts +0 -231
- package/src/components/wrapper.ts +0 -828
- package/src/concatenation/concatenatable.ts +0 -211
- package/src/concatenation/concatenated-component.ts +0 -471
- package/src/concatenation/index.ts +0 -41
- package/src/concatenation/styles.css +0 -120
- package/src/concatenation/text-optimizer.ts +0 -440
- package/src/concatenation/types.ts +0 -116
- package/src/constants/README.md +0 -339
- package/src/constants/__tests__/frame-utils.test.ts +0 -276
- package/src/constants/__tests__/layout.test.ts +0 -215
- package/src/constants/frame-utils.ts +0 -174
- package/src/constants/index.ts +0 -8
- package/src/constants/layout.ts +0 -120
- package/src/css-classes/component-base.ts +0 -117
- package/src/css-classes/css-class-manager.ts +0 -372
- package/src/css-classes/dom-integration.ts +0 -162
- package/src/css-classes/enhanced-renderer.ts +0 -166
- package/src/css-classes/index.ts +0 -45
- package/src/css-classes/types.ts +0 -73
- package/src/css-classes/utilities.ts +0 -175
- package/src/debug/index.ts +0 -267
- package/src/developer-experience/enhanced-errors.ts +0 -556
- package/src/developer-experience/enhanced-types.ts +0 -427
- package/src/developer-experience/index.ts +0 -220
- package/src/globals.d.ts +0 -43
- package/src/gradients/__tests__/angular-gradient.test.ts +0 -111
- package/src/gradients/__tests__/background-modifier.test.ts +0 -81
- package/src/gradients/__tests__/comprehensive-gradients.test.ts +0 -296
- package/src/gradients/__tests__/gradient-asset.test.ts +0 -144
- package/src/gradients/__tests__/linear-gradient.test.ts +0 -92
- package/src/gradients/__tests__/phase4-features.test.ts +0 -386
- package/src/gradients/__tests__/radial-gradient.test.ts +0 -110
- package/src/gradients/__tests__/repeating-gradients.test.ts +0 -125
- package/src/gradients/__tests__/state-background-modifier.test.ts +0 -340
- package/src/gradients/__tests__/state-gradient-asset.test.ts +0 -262
- package/src/gradients/__tests__/state-gradient-integration.test.ts +0 -277
- package/src/gradients/css-generator.ts +0 -158
- package/src/gradients/examples.ts +0 -632
- package/src/gradients/gradient-asset.ts +0 -30
- package/src/gradients/index.ts +0 -85
- package/src/gradients/performance.ts +0 -521
- package/src/gradients/presets.ts +0 -422
- package/src/gradients/reactive.ts +0 -470
- package/src/gradients/state-gradient-asset.ts +0 -179
- package/src/gradients/types.ts +0 -148
- package/src/gradients/utils.ts +0 -579
- package/src/gradients/validation.ts +0 -489
- package/src/index.ts +0 -168
- package/src/lifecycle/hooks.ts +0 -332
- package/src/modifiers/__tests__/as-html-integration.test.ts +0 -204
- package/src/modifiers/__tests__/as-html.test.ts +0 -437
- package/src/modifiers/__tests__/basic-sanitizer-security.test.ts +0 -294
- package/src/modifiers/__tests__/border.test.ts +0 -371
- package/src/modifiers/__tests__/margin-string-support.test.ts +0 -41
- package/src/modifiers/__tests__/padding-string-support.test.ts +0 -41
- package/src/modifiers/as-html-validator.ts +0 -68
- package/src/modifiers/as-html.ts +0 -216
- package/src/modifiers/attributes.ts +0 -574
- package/src/modifiers/backdrop.ts +0 -290
- package/src/modifiers/background.ts +0 -165
- package/src/modifiers/base.ts +0 -1815
- package/src/modifiers/basic-sanitizer.ts +0 -227
- package/src/modifiers/border.ts +0 -574
- package/src/modifiers/builder.ts +0 -1747
- package/src/modifiers/core.ts +0 -521
- package/src/modifiers/css.ts +0 -148
- package/src/modifiers/effects.ts +0 -412
- package/src/modifiers/elements.ts +0 -541
- package/src/modifiers/filters.ts +0 -501
- package/src/modifiers/flexbox.ts +0 -180
- package/src/modifiers/font.ts +0 -149
- package/src/modifiers/grid.ts +0 -238
- package/src/modifiers/index.ts +0 -481
- package/src/modifiers/margin.ts +0 -218
- package/src/modifiers/padding.ts +0 -318
- package/src/modifiers/registry.ts +0 -444
- package/src/modifiers/responsive/__tests__/advanced-media-queries.test.ts +0 -392
- package/src/modifiers/responsive/__tests__/advanced-utilities.test.ts +0 -368
- package/src/modifiers/responsive/__tests__/comprehensive-browser-tests.test.ts +0 -556
- package/src/modifiers/responsive/__tests__/layout-patterns.test.ts +0 -558
- package/src/modifiers/responsive/advanced-utilities.ts +0 -562
- package/src/modifiers/responsive/breakpoints.ts +0 -330
- package/src/modifiers/responsive/css-generator.ts +0 -432
- package/src/modifiers/responsive/dev-tools.ts +0 -650
- package/src/modifiers/responsive/index.ts +0 -119
- package/src/modifiers/responsive/layout-patterns.ts +0 -592
- package/src/modifiers/responsive/performance.ts +0 -385
- package/src/modifiers/responsive/responsive-builder.ts +0 -620
- package/src/modifiers/responsive/responsive-modifier.ts +0 -410
- package/src/modifiers/responsive/types.ts +0 -226
- package/src/modifiers/responsive/utilities.ts +0 -478
- package/src/modifiers/scroll.ts +0 -297
- package/src/modifiers/shadows.ts +0 -321
- package/src/modifiers/size.ts +0 -208
- package/src/modifiers/text.ts +0 -416
- package/src/modifiers/transformations.ts +0 -640
- package/src/modifiers/transitions.ts +0 -218
- package/src/modifiers/types.ts +0 -889
- package/src/modifiers/typography.ts +0 -341
- package/src/modifiers/utility.ts +0 -209
- package/src/modifiers/utils.ts +0 -413
- package/src/plugins/__tests__/simplified-plugin-system.test.ts +0 -190
- package/src/plugins/component-loader-registry.ts +0 -371
- package/src/plugins/index.ts +0 -61
- package/src/plugins/legacy-adapter.ts +0 -84
- package/src/plugins/simplified-component-registry.ts +0 -130
- package/src/plugins/simplified-error-handler.ts +0 -372
- package/src/plugins/simplified-index.ts +0 -61
- package/src/plugins/simplified-lazy-loader.ts +0 -242
- package/src/plugins/simplified-plugin-manager.ts +0 -93
- package/src/plugins/simplified-tachui-instance.ts +0 -142
- package/src/plugins/simplified-types.ts +0 -79
- package/src/plugins/simplified-utils.ts +0 -118
- package/src/reactive/cleanup.ts +0 -241
- package/src/reactive/computed.ts +0 -281
- package/src/reactive/context.ts +0 -287
- package/src/reactive/effect.ts +0 -194
- package/src/reactive/enhanced-effect.ts +0 -318
- package/src/reactive/enhanced-signal.ts +0 -227
- package/src/reactive/equality.ts +0 -188
- package/src/reactive/globals.d.ts +0 -5
- package/src/reactive/index.ts +0 -150
- package/src/reactive/migration.ts +0 -335
- package/src/reactive/ownership.ts +0 -182
- package/src/reactive/scheduler.ts +0 -300
- package/src/reactive/signal.ts +0 -201
- package/src/reactive/theme.ts +0 -49
- package/src/reactive/types.ts +0 -103
- package/src/reactive/unified-scheduler.ts +0 -357
- package/src/runtime/component-context.ts +0 -343
- package/src/runtime/component.ts +0 -499
- package/src/runtime/context.ts +0 -527
- package/src/runtime/dev-tools.ts +0 -752
- package/src/runtime/development-warnings.ts +0 -114
- package/src/runtime/dom-bridge.ts +0 -570
- package/src/runtime/element-override.ts +0 -282
- package/src/runtime/error-boundary.ts +0 -955
- package/src/runtime/error-recovery.ts +0 -638
- package/src/runtime/error-reporting.ts +0 -808
- package/src/runtime/error-utils.ts +0 -698
- package/src/runtime/index.ts +0 -202
- package/src/runtime/lazy-component.ts +0 -268
- package/src/runtime/lifecycle.ts +0 -10
- package/src/runtime/mounting.ts +0 -17
- package/src/runtime/optimization.ts +0 -13
- package/src/runtime/performance.ts +0 -693
- package/src/runtime/props.ts +0 -434
- package/src/runtime/refs.ts +0 -13
- package/src/runtime/renderer.ts +0 -674
- package/src/runtime/semantic-role-manager.ts +0 -140
- package/src/runtime/types.ts +0 -282
- package/src/state/binding.ts +0 -381
- package/src/state/environment-object.ts +0 -444
- package/src/state/environment.ts +0 -351
- package/src/state/index.ts +0 -179
- package/src/state/observed-object.ts +0 -405
- package/src/state/state-manager.ts +0 -366
- package/src/state/state.ts +0 -339
- package/src/state/types.ts +0 -192
- package/src/sui-compat.ts +0 -163
- package/src/validation/__tests__/phase-1d-integration.test.ts +0 -558
- package/src/validation/advanced-debugging.ts +0 -860
- package/src/validation/build-time/detection.ts +0 -373
- package/src/validation/build-time/index.ts +0 -222
- package/src/validation/build-time/plugins.ts +0 -515
- package/src/validation/build-time/rules.ts +0 -624
- package/src/validation/build-time/transformer.ts +0 -372
- package/src/validation/build-time/types.ts +0 -232
- package/src/validation/comprehensive.ts +0 -1272
- package/src/validation/debug-tools.ts +0 -724
- package/src/validation/developer-experience.ts +0 -712
- package/src/validation/documentation-integration.ts +0 -835
- package/src/validation/enhanced-runtime.ts +0 -765
- package/src/validation/error-reporting.ts +0 -587
- package/src/validation/ide-integration.ts +0 -845
- package/src/validation/index.ts +0 -353
- package/src/validation/lifecycle-validation.ts +0 -636
- package/src/validation/performance-optimizer.ts +0 -599
- package/src/validation/plugin-registration.ts +0 -249
- package/src/validation/production-bypass.ts +0 -466
- package/src/validation/simple.ts +0 -465
- package/src/viewport/adapters/web-adapter.ts +0 -1385
- package/src/viewport/components.ts +0 -505
- package/src/viewport/environment.ts +0 -173
- package/src/viewport/index.ts +0 -290
- package/src/viewport/platform-detection.ts +0 -431
- package/src/viewport/types.ts +0 -371
- package/src/viewport/viewport-manager.ts +0 -979
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom-bridge.cjs","sources":["../../src/runtime/dom-bridge.ts"],"sourcesContent":["/**\n * DOM Rendering Bridge Layer\n *\n * Critical missing piece that connects TachUI components to actual DOM rendering.\n * This bridges the gap between component instances and browser DOM elements.\n */\n\nimport type { ModifiableComponent } from '../modifiers/types'\nimport { createRoot as createReactiveRoot, getOwner } from '../reactive'\nimport { ComponentContextSymbol, createComponentContext, setCurrentComponentContext } from './component-context'\nimport { DOMRenderer } from './renderer'\nimport type { ComponentInstance, DOMNode } from './types'\n\n/**\n * Global DOM renderer instance\n */\nconst globalRenderer = new DOMRenderer()\n\n/**\n * Component mounting registry to track mounted components\n */\nconst mountedComponents = new Map<Element, ComponentInstance>()\nconst componentElements = new Map<ComponentInstance, Element[]>()\n\n/**\n * Track component instances with lifecycle hooks for processing\n */\nconst componentsWithLifecycleHooks = new Set<ComponentInstance>()\n\n/**\n * Register a component that has lifecycle hooks for later processing\n */\nexport function registerComponentWithLifecycleHooks(component: ComponentInstance): void {\n \n if ((component as any)._enhancedLifecycle) {\n componentsWithLifecycleHooks.add(component)\n }\n}\n\n/**\n * Process pending lifecycle hooks for components that were rendered but not mounted\n */\nfunction processPendingLifecycleHooks(): void {\n for (const component of componentsWithLifecycleHooks) {\n const enhancedLifecycle = (component as any)._enhancedLifecycle\n if (enhancedLifecycle && !component.domReady) {\n // Find DOM elements associated with this component by searching the DOM\n const elements = findDOMElementsForComponent(component)\n if (elements.length > 0) {\n // Set up DOM tracking\n component.domElements = new Map()\n elements.forEach((element, index) => {\n const key = element.id || `element-${index}`\n component.domElements!.set(key, element)\n if (!component.primaryElement) {\n component.primaryElement = element\n }\n })\n \n component.domReady = true\n \n // Process lifecycle hooks\n if (enhancedLifecycle.onDOMReady) {\n console.log('🚀 Processing delayed onDOMReady for component:', component.id)\n const cleanup = enhancedLifecycle.onDOMReady(\n component.domElements,\n component.primaryElement\n )\n if (typeof cleanup === 'function') {\n component.cleanup = component.cleanup || []\n component.cleanup.push(cleanup)\n }\n }\n \n if (enhancedLifecycle.onMount) {\n const cleanup = enhancedLifecycle.onMount()\n if (typeof cleanup === 'function') {\n component.cleanup = component.cleanup || []\n component.cleanup.push(cleanup)\n }\n }\n }\n }\n }\n \n // Clear the set of processed components\n componentsWithLifecycleHooks.clear()\n}\n\n/**\n * Find DOM elements associated with a component by searching the DOM\n * This is a fallback method for components that were rendered but not mounted\n */\nfunction findDOMElementsForComponent(component: ComponentInstance): Element[] {\n // For Image components, look for img elements that match the component's expected structure\n if (component.id.startsWith('image-')) {\n const allImages = document.querySelectorAll('img.tachui-image')\n return Array.from(allImages)\n }\n \n // For other components, this could be expanded with more specific search logic\n return []\n}\n\n/**\n * Create a reactive root that can mount component trees to DOM.\n * \n * This is the application-level mounting function for TachUI apps.\n * It creates a reactive context and mounts your component tree to the DOM.\n * \n * @param rootFunction - Function that returns the root component of your app\n * \n * @example\n * ```typescript\n * import { mountRoot } from '@tachui/core'\n * import { MyApp } from './MyApp'\n * \n * mountRoot(() => MyApp())\n * ```\n * \n * Note: This requires a DOM element with id=\"app\" to exist.\n */\nexport function mountRoot(rootFunction: () => ComponentInstance): void {\n createReactiveRoot((dispose) => {\n // Create root component context for State() to work throughout the entire app\n const rootContext = createComponentContext('root-app')\n setCurrentComponentContext(rootContext)\n \n // Also store context in reactive owner so State() can find it\n const owner = getOwner()\n if (owner) {\n owner.context.set(ComponentContextSymbol, rootContext)\n }\n \n let component: ComponentInstance\n \n try {\n component = rootFunction()\n\n // Find app container\n const container = document.getElementById('app')\n if (!container) {\n throw new Error('App container element with id=\"app\" not found')\n }\n\n // Mount the component tree to the container\n mountComponentTree(component, container)\n } catch (error) {\n // Reset context on error\n setCurrentComponentContext(null)\n if (owner) {\n owner.context.delete(ComponentContextSymbol)\n }\n throw error\n }\n\n // Set up cleanup that resets context when the root is disposed\n const originalDispose = dispose\n return () => {\n setCurrentComponentContext(null)\n if (owner) {\n owner.context.delete(ComponentContextSymbol)\n }\n return originalDispose()\n }\n })\n}\n\n/**\n * Mount a component tree to a DOM container\n */\nexport function mountComponentTree(component: ComponentInstance, container: Element, clearContainer: boolean = true): () => void {\n \n try {\n // Clear container only if requested (typically only for root components)\n if (clearContainer) {\n container.innerHTML = ''\n }\n\n // Render component to DOM nodes\n const domNodes = component.render()\n const nodeArray = Array.isArray(domNodes) ? domNodes : [domNodes]\n\n // Convert DOM nodes to actual DOM elements\n const elements: Element[] = []\n for (const node of nodeArray) {\n const element = globalRenderer.render(node, container)\n\n if (element instanceof DocumentFragment) {\n // Handle fragments by adding all child nodes\n const children = Array.from(element.childNodes)\n for (const child of children) {\n if (child instanceof Element) {\n elements.push(child)\n container.appendChild(child)\n }\n }\n } else if (element instanceof Element) {\n elements.push(element)\n container.appendChild(element)\n }\n }\n\n // ENHANCED: Set up DOM element tracking for lifecycle hooks\n if (elements.length > 0) {\n component.domElements = new Map()\n \n elements.forEach((element, index) => {\n const key = element.id || `element-${index}`\n component.domElements!.set(key, element)\n \n // Set primary element (first element with ID or index 0)\n if (!component.primaryElement) {\n component.primaryElement = element\n }\n })\n \n // Mark DOM as ready\n component.domReady = true\n \n // ENHANCED: Trigger onDOMReady with guaranteed DOM elements\n const enhancedLifecycle = (component as any)._enhancedLifecycle\n \n if (enhancedLifecycle?.onDOMReady) {\n const cleanup = enhancedLifecycle.onDOMReady(\n component.domElements, \n component.primaryElement\n )\n if (typeof cleanup === 'function') {\n component.cleanup = component.cleanup || []\n component.cleanup.push(cleanup)\n }\n }\n \n // Trigger legacy onMount for backwards compatibility\n if (enhancedLifecycle?.onMount) {\n const cleanup = enhancedLifecycle.onMount()\n if (typeof cleanup === 'function') {\n component.cleanup = component.cleanup || []\n component.cleanup.push(cleanup)\n }\n }\n }\n\n // Apply modifiers if this is a modifiable component\n if (isModifiableComponent(component)) {\n for (const element of elements) {\n applyModifiersToElement(element, component)\n }\n }\n\n // Bind event handlers\n for (const element of elements) {\n bindEventHandlers(element, component)\n }\n\n // REMOVED: Recursive child mounting - children are rendered as part of parent's render() method\n // This was causing duplicate mounting where child components were being mounted individually\n // instead of being rendered as part of their parent's DOM structure\n const childCleanupFunctions: (() => void)[] = []\n\n // Register component\n mountedComponents.set(container, component)\n componentElements.set(component, elements)\n component.mounted = true\n\n // Process any pending lifecycle hooks for components that were rendered but not mounted\n // Use setTimeout to ensure all DOM rendering is complete\n setTimeout(() => {\n processPendingLifecycleHooks()\n }, 0)\n\n // Return cleanup function\n return () => {\n // Clean up child components first\n childCleanupFunctions.forEach((cleanup) => cleanup())\n // Then clean up this component\n unmountComponentEnhanced(component, container)\n }\n } catch (error) {\n // ENHANCED: Better error handling with DOM context\n const domError = Object.assign(new Error(), error, {\n code: 'MOUNT_FAILED',\n context: 'mountComponentTree',\n }) as any\n \n const enhancedLifecycle = (component as any)._enhancedLifecycle\n if (enhancedLifecycle?.onDOMError) {\n enhancedLifecycle.onDOMError(domError, 'mount')\n } else if (enhancedLifecycle?.onError) {\n enhancedLifecycle.onError(domError)\n } else {\n console.error('Failed to mount component tree:', error)\n }\n throw error\n }\n}\n\n/**\n * Unmount a component from DOM\n */\nexport function unmountComponent(component: ComponentInstance, container: Element): void {\n const elements = componentElements.get(component)\n if (elements) {\n elements.forEach((element) => {\n if (element.parentNode) {\n element.parentNode.removeChild(element)\n }\n })\n componentElements.delete(component)\n }\n\n mountedComponents.delete(container)\n component.mounted = false\n\n // Run cleanup functions\n if (component.cleanup) {\n component.cleanup.forEach((cleanup) => cleanup())\n component.cleanup = []\n }\n}\n\n/**\n * Enhanced unmount component with lifecycle hooks\n */\nexport function unmountComponentEnhanced(component: ComponentInstance, container: Element): void {\n try {\n // Trigger onUnmount lifecycle\n const enhancedLifecycle = (component as any)._enhancedLifecycle\n if (enhancedLifecycle?.onUnmount) {\n enhancedLifecycle.onUnmount()\n }\n \n // Run cleanup functions\n if (component.cleanup) {\n component.cleanup.forEach((cleanup) => {\n try {\n cleanup()\n } catch (error) {\n console.error(`Cleanup error for component ${component.id}:`, error)\n }\n })\n component.cleanup = []\n }\n \n // Remove DOM elements\n const elements = componentElements.get(component)\n if (elements) {\n elements.forEach((element) => {\n if (element.parentNode) {\n element.parentNode.removeChild(element)\n }\n })\n componentElements.delete(component)\n }\n \n // Clear enhanced DOM tracking\n if (component.domElements) {\n component.domElements.clear()\n }\n \n // Clear references\n component.primaryElement = undefined\n component.domReady = false\n component.mounted = false\n \n mountedComponents.delete(container)\n } catch (error) {\n const domError = Object.assign(new Error(), error, {\n code: 'UNMOUNT_FAILED',\n context: 'unmountComponentEnhanced',\n }) as any\n \n const enhancedLifecycle = (component as any)._enhancedLifecycle\n if (enhancedLifecycle?.onDOMError) {\n enhancedLifecycle.onDOMError(domError, 'unmount')\n } else {\n console.error('Component unmounting failed:', error)\n }\n }\n}\n\n/**\n * Apply modifier chains to DOM elements\n */\nfunction applyModifiersToElement(element: Element, component: ModifiableComponent<any>): void {\n \n if (!('modifiers' in component) || !component.modifiers) {\n return\n }\n\n const htmlElement = element as HTMLElement\n const modifiers = component.modifiers\n\n // Create a DOMNode wrapper for the HTMLElement to match the modifier interface\n const domNode: DOMNode = {\n type: 'element',\n tag: htmlElement.tagName.toLowerCase(),\n props: {},\n element: htmlElement,\n }\n\n // Apply each modifier to the DOM element\n for (const modifier of modifiers) {\n try {\n // Each modifier should apply its styles/properties to the element\n if (modifier && typeof modifier.apply === 'function') {\n modifier.apply(domNode, {\n componentId: component.id,\n componentInstance: component,\n element: htmlElement,\n phase: 'creation',\n })\n }\n } catch (error) {\n console.warn('Failed to apply modifier:', modifier, error)\n }\n }\n}\n\n/**\n * Bind component event handlers to DOM events\n */\nfunction bindEventHandlers(element: Element, component: ComponentInstance): void {\n const htmlElement = element as HTMLElement\n\n // Handle component-level events from props\n if (component.props) {\n const props = component.props\n\n // Bind common event handlers\n if (props.onClick && typeof props.onClick === 'function') {\n htmlElement.addEventListener('click', props.onClick)\n }\n\n if (props.onMouseEnter && typeof props.onMouseEnter === 'function') {\n htmlElement.addEventListener('mouseenter', props.onMouseEnter)\n }\n\n if (props.onMouseLeave && typeof props.onMouseLeave === 'function') {\n htmlElement.addEventListener('mouseleave', props.onMouseLeave)\n }\n\n if (props.onFocus && typeof props.onFocus === 'function') {\n htmlElement.addEventListener('focus', props.onFocus)\n }\n\n if (props.onBlur && typeof props.onBlur === 'function') {\n htmlElement.addEventListener('blur', props.onBlur)\n }\n }\n\n // Handle modifier-based events if this is a modifiable component\n if (isModifiableComponent(component) && component.modifiers) {\n for (const modifier of component.modifiers) {\n if (modifier && 'eventHandlers' in modifier && modifier.eventHandlers) {\n for (const [eventType, handler] of Object.entries(modifier.eventHandlers)) {\n if (typeof handler === 'function') {\n htmlElement.addEventListener(\n eventType as keyof HTMLElementEventMap,\n handler as EventListener\n )\n }\n }\n }\n }\n }\n}\n\n/**\n * Type guard to check if component is modifiable\n */\nfunction isModifiableComponent(component: any): component is ModifiableComponent<any> {\n return (\n component &&\n typeof component === 'object' &&\n ('modifiers' in component || 'modifier' in component)\n )\n}\n\n/**\n * Recursively mount component children\n */\nexport function mountComponentChildren(\n children: ComponentInstance[],\n container: Element\n): (() => void)[] {\n const cleanupFunctions: (() => void)[] = []\n\n for (const child of children) {\n const childCleanup = mountComponentTree(child, container)\n cleanupFunctions.push(childCleanup)\n }\n\n return cleanupFunctions\n}\n\n/**\n * Update a mounted component with new props\n */\nexport function updateComponent(component: ComponentInstance, newProps: any): void {\n const elements = componentElements.get(component)\n if (!elements) {\n console.warn('Attempted to update unmounted component')\n return\n }\n\n // Update props\n component.prevProps = component.props\n component.props = { ...component.props, ...newProps }\n\n // Re-render if needed\n const container = elements[0]?.parentElement\n if (container) {\n unmountComponent(component, container)\n mountComponentTree(component, container)\n }\n}\n\n/**\n * Get mounted component from DOM element\n */\nexport function getComponentFromElement(element: Element): ComponentInstance | undefined {\n let current: Element | null = element\n while (current) {\n const component = mountedComponents.get(current)\n if (component) {\n return component\n }\n current = current.parentElement\n }\n return undefined\n}\n\n\n/**\n * Debug utilities for DOM bridge\n */\nexport const DOMBridgeDebug = {\n getMountedComponents: () => Array.from(mountedComponents.entries()),\n getComponentElements: (component: ComponentInstance) => componentElements.get(component),\n isComponentMounted: (component: ComponentInstance) => component.mounted || false,\n\n /**\n * Validate that all components are properly mounted\n */\n validateMounting(): { valid: boolean; issues: string[] } {\n const issues: string[] = []\n\n for (const [container, component] of mountedComponents.entries()) {\n if (!document.contains(container)) {\n issues.push(`Container for component ${component.id} is not in DOM`)\n }\n\n if (!component.mounted) {\n issues.push(`Component ${component.id} marked as unmounted but still registered`)\n }\n\n const elements = componentElements.get(component)\n if (!elements || elements.length === 0) {\n issues.push(`Component ${component.id} has no associated DOM elements`)\n }\n }\n\n return {\n valid: issues.length === 0,\n issues,\n }\n },\n}\n"],"names":["globalRenderer","DOMRenderer","mountedComponents","componentElements","componentsWithLifecycleHooks","registerComponentWithLifecycleHooks","component","processPendingLifecycleHooks","enhancedLifecycle","elements","findDOMElementsForComponent","element","index","key","cleanup","allImages","mountRoot","rootFunction","createReactiveRoot","dispose","rootContext","createComponentContext","setCurrentComponentContext","owner","getOwner","ComponentContextSymbol","container","mountComponentTree","error","originalDispose","clearContainer","domNodes","nodeArray","node","children","child","isModifiableComponent","applyModifiersToElement","bindEventHandlers","childCleanupFunctions","unmountComponentEnhanced","domError","unmountComponent","htmlElement","modifiers","domNode","modifier","props","eventType","handler","mountComponentChildren","cleanupFunctions","childCleanup","updateComponent","newProps","getComponentFromElement","current","DOMBridgeDebug","issues"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom-bridge.js","sources":["../../src/runtime/dom-bridge.ts"],"sourcesContent":["/**\n * DOM Rendering Bridge Layer\n *\n * Critical missing piece that connects TachUI components to actual DOM rendering.\n * This bridges the gap between component instances and browser DOM elements.\n */\n\nimport type { ModifiableComponent } from '../modifiers/types'\nimport { createRoot as createReactiveRoot, getOwner } from '../reactive'\nimport { ComponentContextSymbol, createComponentContext, setCurrentComponentContext } from './component-context'\nimport { DOMRenderer } from './renderer'\nimport type { ComponentInstance, DOMNode } from './types'\n\n/**\n * Global DOM renderer instance\n */\nconst globalRenderer = new DOMRenderer()\n\n/**\n * Component mounting registry to track mounted components\n */\nconst mountedComponents = new Map<Element, ComponentInstance>()\nconst componentElements = new Map<ComponentInstance, Element[]>()\n\n/**\n * Track component instances with lifecycle hooks for processing\n */\nconst componentsWithLifecycleHooks = new Set<ComponentInstance>()\n\n/**\n * Register a component that has lifecycle hooks for later processing\n */\nexport function registerComponentWithLifecycleHooks(component: ComponentInstance): void {\n \n if ((component as any)._enhancedLifecycle) {\n componentsWithLifecycleHooks.add(component)\n }\n}\n\n/**\n * Process pending lifecycle hooks for components that were rendered but not mounted\n */\nfunction processPendingLifecycleHooks(): void {\n for (const component of componentsWithLifecycleHooks) {\n const enhancedLifecycle = (component as any)._enhancedLifecycle\n if (enhancedLifecycle && !component.domReady) {\n // Find DOM elements associated with this component by searching the DOM\n const elements = findDOMElementsForComponent(component)\n if (elements.length > 0) {\n // Set up DOM tracking\n component.domElements = new Map()\n elements.forEach((element, index) => {\n const key = element.id || `element-${index}`\n component.domElements!.set(key, element)\n if (!component.primaryElement) {\n component.primaryElement = element\n }\n })\n \n component.domReady = true\n \n // Process lifecycle hooks\n if (enhancedLifecycle.onDOMReady) {\n console.log('🚀 Processing delayed onDOMReady for component:', component.id)\n const cleanup = enhancedLifecycle.onDOMReady(\n component.domElements,\n component.primaryElement\n )\n if (typeof cleanup === 'function') {\n component.cleanup = component.cleanup || []\n component.cleanup.push(cleanup)\n }\n }\n \n if (enhancedLifecycle.onMount) {\n const cleanup = enhancedLifecycle.onMount()\n if (typeof cleanup === 'function') {\n component.cleanup = component.cleanup || []\n component.cleanup.push(cleanup)\n }\n }\n }\n }\n }\n \n // Clear the set of processed components\n componentsWithLifecycleHooks.clear()\n}\n\n/**\n * Find DOM elements associated with a component by searching the DOM\n * This is a fallback method for components that were rendered but not mounted\n */\nfunction findDOMElementsForComponent(component: ComponentInstance): Element[] {\n // For Image components, look for img elements that match the component's expected structure\n if (component.id.startsWith('image-')) {\n const allImages = document.querySelectorAll('img.tachui-image')\n return Array.from(allImages)\n }\n \n // For other components, this could be expanded with more specific search logic\n return []\n}\n\n/**\n * Create a reactive root that can mount component trees to DOM.\n * \n * This is the application-level mounting function for TachUI apps.\n * It creates a reactive context and mounts your component tree to the DOM.\n * \n * @param rootFunction - Function that returns the root component of your app\n * \n * @example\n * ```typescript\n * import { mountRoot } from '@tachui/core'\n * import { MyApp } from './MyApp'\n * \n * mountRoot(() => MyApp())\n * ```\n * \n * Note: This requires a DOM element with id=\"app\" to exist.\n */\nexport function mountRoot(rootFunction: () => ComponentInstance): void {\n createReactiveRoot((dispose) => {\n // Create root component context for State() to work throughout the entire app\n const rootContext = createComponentContext('root-app')\n setCurrentComponentContext(rootContext)\n \n // Also store context in reactive owner so State() can find it\n const owner = getOwner()\n if (owner) {\n owner.context.set(ComponentContextSymbol, rootContext)\n }\n \n let component: ComponentInstance\n \n try {\n component = rootFunction()\n\n // Find app container\n const container = document.getElementById('app')\n if (!container) {\n throw new Error('App container element with id=\"app\" not found')\n }\n\n // Mount the component tree to the container\n mountComponentTree(component, container)\n } catch (error) {\n // Reset context on error\n setCurrentComponentContext(null)\n if (owner) {\n owner.context.delete(ComponentContextSymbol)\n }\n throw error\n }\n\n // Set up cleanup that resets context when the root is disposed\n const originalDispose = dispose\n return () => {\n setCurrentComponentContext(null)\n if (owner) {\n owner.context.delete(ComponentContextSymbol)\n }\n return originalDispose()\n }\n })\n}\n\n/**\n * Mount a component tree to a DOM container\n */\nexport function mountComponentTree(component: ComponentInstance, container: Element, clearContainer: boolean = true): () => void {\n \n try {\n // Clear container only if requested (typically only for root components)\n if (clearContainer) {\n container.innerHTML = ''\n }\n\n // Render component to DOM nodes\n const domNodes = component.render()\n const nodeArray = Array.isArray(domNodes) ? domNodes : [domNodes]\n\n // Convert DOM nodes to actual DOM elements\n const elements: Element[] = []\n for (const node of nodeArray) {\n const element = globalRenderer.render(node, container)\n\n if (element instanceof DocumentFragment) {\n // Handle fragments by adding all child nodes\n const children = Array.from(element.childNodes)\n for (const child of children) {\n if (child instanceof Element) {\n elements.push(child)\n container.appendChild(child)\n }\n }\n } else if (element instanceof Element) {\n elements.push(element)\n container.appendChild(element)\n }\n }\n\n // ENHANCED: Set up DOM element tracking for lifecycle hooks\n if (elements.length > 0) {\n component.domElements = new Map()\n \n elements.forEach((element, index) => {\n const key = element.id || `element-${index}`\n component.domElements!.set(key, element)\n \n // Set primary element (first element with ID or index 0)\n if (!component.primaryElement) {\n component.primaryElement = element\n }\n })\n \n // Mark DOM as ready\n component.domReady = true\n \n // ENHANCED: Trigger onDOMReady with guaranteed DOM elements\n const enhancedLifecycle = (component as any)._enhancedLifecycle\n \n if (enhancedLifecycle?.onDOMReady) {\n const cleanup = enhancedLifecycle.onDOMReady(\n component.domElements, \n component.primaryElement\n )\n if (typeof cleanup === 'function') {\n component.cleanup = component.cleanup || []\n component.cleanup.push(cleanup)\n }\n }\n \n // Trigger legacy onMount for backwards compatibility\n if (enhancedLifecycle?.onMount) {\n const cleanup = enhancedLifecycle.onMount()\n if (typeof cleanup === 'function') {\n component.cleanup = component.cleanup || []\n component.cleanup.push(cleanup)\n }\n }\n }\n\n // Apply modifiers if this is a modifiable component\n if (isModifiableComponent(component)) {\n for (const element of elements) {\n applyModifiersToElement(element, component)\n }\n }\n\n // Bind event handlers\n for (const element of elements) {\n bindEventHandlers(element, component)\n }\n\n // REMOVED: Recursive child mounting - children are rendered as part of parent's render() method\n // This was causing duplicate mounting where child components were being mounted individually\n // instead of being rendered as part of their parent's DOM structure\n const childCleanupFunctions: (() => void)[] = []\n\n // Register component\n mountedComponents.set(container, component)\n componentElements.set(component, elements)\n component.mounted = true\n\n // Process any pending lifecycle hooks for components that were rendered but not mounted\n // Use setTimeout to ensure all DOM rendering is complete\n setTimeout(() => {\n processPendingLifecycleHooks()\n }, 0)\n\n // Return cleanup function\n return () => {\n // Clean up child components first\n childCleanupFunctions.forEach((cleanup) => cleanup())\n // Then clean up this component\n unmountComponentEnhanced(component, container)\n }\n } catch (error) {\n // ENHANCED: Better error handling with DOM context\n const domError = Object.assign(new Error(), error, {\n code: 'MOUNT_FAILED',\n context: 'mountComponentTree',\n }) as any\n \n const enhancedLifecycle = (component as any)._enhancedLifecycle\n if (enhancedLifecycle?.onDOMError) {\n enhancedLifecycle.onDOMError(domError, 'mount')\n } else if (enhancedLifecycle?.onError) {\n enhancedLifecycle.onError(domError)\n } else {\n console.error('Failed to mount component tree:', error)\n }\n throw error\n }\n}\n\n/**\n * Unmount a component from DOM\n */\nexport function unmountComponent(component: ComponentInstance, container: Element): void {\n const elements = componentElements.get(component)\n if (elements) {\n elements.forEach((element) => {\n if (element.parentNode) {\n element.parentNode.removeChild(element)\n }\n })\n componentElements.delete(component)\n }\n\n mountedComponents.delete(container)\n component.mounted = false\n\n // Run cleanup functions\n if (component.cleanup) {\n component.cleanup.forEach((cleanup) => cleanup())\n component.cleanup = []\n }\n}\n\n/**\n * Enhanced unmount component with lifecycle hooks\n */\nexport function unmountComponentEnhanced(component: ComponentInstance, container: Element): void {\n try {\n // Trigger onUnmount lifecycle\n const enhancedLifecycle = (component as any)._enhancedLifecycle\n if (enhancedLifecycle?.onUnmount) {\n enhancedLifecycle.onUnmount()\n }\n \n // Run cleanup functions\n if (component.cleanup) {\n component.cleanup.forEach((cleanup) => {\n try {\n cleanup()\n } catch (error) {\n console.error(`Cleanup error for component ${component.id}:`, error)\n }\n })\n component.cleanup = []\n }\n \n // Remove DOM elements\n const elements = componentElements.get(component)\n if (elements) {\n elements.forEach((element) => {\n if (element.parentNode) {\n element.parentNode.removeChild(element)\n }\n })\n componentElements.delete(component)\n }\n \n // Clear enhanced DOM tracking\n if (component.domElements) {\n component.domElements.clear()\n }\n \n // Clear references\n component.primaryElement = undefined\n component.domReady = false\n component.mounted = false\n \n mountedComponents.delete(container)\n } catch (error) {\n const domError = Object.assign(new Error(), error, {\n code: 'UNMOUNT_FAILED',\n context: 'unmountComponentEnhanced',\n }) as any\n \n const enhancedLifecycle = (component as any)._enhancedLifecycle\n if (enhancedLifecycle?.onDOMError) {\n enhancedLifecycle.onDOMError(domError, 'unmount')\n } else {\n console.error('Component unmounting failed:', error)\n }\n }\n}\n\n/**\n * Apply modifier chains to DOM elements\n */\nfunction applyModifiersToElement(element: Element, component: ModifiableComponent<any>): void {\n \n if (!('modifiers' in component) || !component.modifiers) {\n return\n }\n\n const htmlElement = element as HTMLElement\n const modifiers = component.modifiers\n\n // Create a DOMNode wrapper for the HTMLElement to match the modifier interface\n const domNode: DOMNode = {\n type: 'element',\n tag: htmlElement.tagName.toLowerCase(),\n props: {},\n element: htmlElement,\n }\n\n // Apply each modifier to the DOM element\n for (const modifier of modifiers) {\n try {\n // Each modifier should apply its styles/properties to the element\n if (modifier && typeof modifier.apply === 'function') {\n modifier.apply(domNode, {\n componentId: component.id,\n componentInstance: component,\n element: htmlElement,\n phase: 'creation',\n })\n }\n } catch (error) {\n console.warn('Failed to apply modifier:', modifier, error)\n }\n }\n}\n\n/**\n * Bind component event handlers to DOM events\n */\nfunction bindEventHandlers(element: Element, component: ComponentInstance): void {\n const htmlElement = element as HTMLElement\n\n // Handle component-level events from props\n if (component.props) {\n const props = component.props\n\n // Bind common event handlers\n if (props.onClick && typeof props.onClick === 'function') {\n htmlElement.addEventListener('click', props.onClick)\n }\n\n if (props.onMouseEnter && typeof props.onMouseEnter === 'function') {\n htmlElement.addEventListener('mouseenter', props.onMouseEnter)\n }\n\n if (props.onMouseLeave && typeof props.onMouseLeave === 'function') {\n htmlElement.addEventListener('mouseleave', props.onMouseLeave)\n }\n\n if (props.onFocus && typeof props.onFocus === 'function') {\n htmlElement.addEventListener('focus', props.onFocus)\n }\n\n if (props.onBlur && typeof props.onBlur === 'function') {\n htmlElement.addEventListener('blur', props.onBlur)\n }\n }\n\n // Handle modifier-based events if this is a modifiable component\n if (isModifiableComponent(component) && component.modifiers) {\n for (const modifier of component.modifiers) {\n if (modifier && 'eventHandlers' in modifier && modifier.eventHandlers) {\n for (const [eventType, handler] of Object.entries(modifier.eventHandlers)) {\n if (typeof handler === 'function') {\n htmlElement.addEventListener(\n eventType as keyof HTMLElementEventMap,\n handler as EventListener\n )\n }\n }\n }\n }\n }\n}\n\n/**\n * Type guard to check if component is modifiable\n */\nfunction isModifiableComponent(component: any): component is ModifiableComponent<any> {\n return (\n component &&\n typeof component === 'object' &&\n ('modifiers' in component || 'modifier' in component)\n )\n}\n\n/**\n * Recursively mount component children\n */\nexport function mountComponentChildren(\n children: ComponentInstance[],\n container: Element\n): (() => void)[] {\n const cleanupFunctions: (() => void)[] = []\n\n for (const child of children) {\n const childCleanup = mountComponentTree(child, container)\n cleanupFunctions.push(childCleanup)\n }\n\n return cleanupFunctions\n}\n\n/**\n * Update a mounted component with new props\n */\nexport function updateComponent(component: ComponentInstance, newProps: any): void {\n const elements = componentElements.get(component)\n if (!elements) {\n console.warn('Attempted to update unmounted component')\n return\n }\n\n // Update props\n component.prevProps = component.props\n component.props = { ...component.props, ...newProps }\n\n // Re-render if needed\n const container = elements[0]?.parentElement\n if (container) {\n unmountComponent(component, container)\n mountComponentTree(component, container)\n }\n}\n\n/**\n * Get mounted component from DOM element\n */\nexport function getComponentFromElement(element: Element): ComponentInstance | undefined {\n let current: Element | null = element\n while (current) {\n const component = mountedComponents.get(current)\n if (component) {\n return component\n }\n current = current.parentElement\n }\n return undefined\n}\n\n\n/**\n * Debug utilities for DOM bridge\n */\nexport const DOMBridgeDebug = {\n getMountedComponents: () => Array.from(mountedComponents.entries()),\n getComponentElements: (component: ComponentInstance) => componentElements.get(component),\n isComponentMounted: (component: ComponentInstance) => component.mounted || false,\n\n /**\n * Validate that all components are properly mounted\n */\n validateMounting(): { valid: boolean; issues: string[] } {\n const issues: string[] = []\n\n for (const [container, component] of mountedComponents.entries()) {\n if (!document.contains(container)) {\n issues.push(`Container for component ${component.id} is not in DOM`)\n }\n\n if (!component.mounted) {\n issues.push(`Component ${component.id} marked as unmounted but still registered`)\n }\n\n const elements = componentElements.get(component)\n if (!elements || elements.length === 0) {\n issues.push(`Component ${component.id} has no associated DOM elements`)\n }\n }\n\n return {\n valid: issues.length === 0,\n issues,\n }\n },\n}\n"],"names":["globalRenderer","DOMRenderer","mountedComponents","componentElements","componentsWithLifecycleHooks","registerComponentWithLifecycleHooks","component","processPendingLifecycleHooks","enhancedLifecycle","elements","findDOMElementsForComponent","element","index","key","cleanup","allImages","mountRoot","rootFunction","createReactiveRoot","dispose","rootContext","createComponentContext","setCurrentComponentContext","owner","getOwner","ComponentContextSymbol","container","mountComponentTree","error","originalDispose","clearContainer","domNodes","nodeArray","node","children","child","isModifiableComponent","applyModifiersToElement","bindEventHandlers","childCleanupFunctions","unmountComponentEnhanced","domError","unmountComponent","htmlElement","modifiers","domNode","modifier","props","eventType","handler","mountComponentChildren","cleanupFunctions","childCleanup","updateComponent","newProps","getComponentFromElement","current","DOMBridgeDebug","issues"],"mappings":";;;;;;;;AAgBA,MAAMA,IAAiB,IAAIC,EAAA,GAKrBC,wBAAwB,IAAA,GACxBC,wBAAwB,IAAA,GAKxBC,wBAAmC,IAAA;AAKlC,SAASC,EAAoCC,GAAoC;AAEtF,EAAKA,EAAkB,sBACrBF,EAA6B,IAAIE,CAAS;AAE9C;AAKA,SAASC,IAAqC;AAC5C,aAAWD,KAAaF,GAA8B;AACpD,UAAMI,IAAqBF,EAAkB;AAC7C,QAAIE,KAAqB,CAACF,EAAU,UAAU;AAE5C,YAAMG,IAAWC,EAA4BJ,CAAS;AACtD,UAAIG,EAAS,SAAS,GAAG;AAcvB,YAZAH,EAAU,kCAAkB,IAAA,GAC5BG,EAAS,QAAQ,CAACE,GAASC,MAAU;AACnC,gBAAMC,IAAMF,EAAQ,MAAM,WAAWC,CAAK;AAC1C,UAAAN,EAAU,YAAa,IAAIO,GAAKF,CAAO,GAClCL,EAAU,mBACbA,EAAU,iBAAiBK;AAAA,QAE/B,CAAC,GAEDL,EAAU,WAAW,IAGjBE,EAAkB,YAAY;AAChC,kBAAQ,IAAI,mDAAmDF,EAAU,EAAE;AAC3E,gBAAMQ,IAAUN,EAAkB;AAAA,YAChCF,EAAU;AAAA,YACVA,EAAU;AAAA,UAAA;AAEZ,UAAI,OAAOQ,KAAY,eACrBR,EAAU,UAAUA,EAAU,WAAW,CAAA,GACzCA,EAAU,QAAQ,KAAKQ,CAAO;AAAA,QAElC;AAEA,YAAIN,EAAkB,SAAS;AAC7B,gBAAMM,IAAUN,EAAkB,QAAA;AAClC,UAAI,OAAOM,KAAY,eACrBR,EAAU,UAAUA,EAAU,WAAW,CAAA,GACzCA,EAAU,QAAQ,KAAKQ,CAAO;AAAA,QAElC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAAV,EAA6B,MAAA;AAC/B;AAMA,SAASM,EAA4BJ,GAAyC;AAE5E,MAAIA,EAAU,GAAG,WAAW,QAAQ,GAAG;AACrC,UAAMS,IAAY,SAAS,iBAAiB,kBAAkB;AAC9D,WAAO,MAAM,KAAKA,CAAS;AAAA,EAC7B;AAGA,SAAO,CAAA;AACT;AAoBO,SAASC,EAAUC,GAA6C;AACrEC,EAAAA,EAAmB,CAACC,MAAY;AAE9B,UAAMC,IAAcC,EAAuB,UAAU;AACrD,IAAAC,EAA2BF,CAAW;AAGtC,UAAMG,IAAQC,EAAA;AACd,IAAID,KACFA,EAAM,QAAQ,IAAIE,GAAwBL,CAAW;AAGvD,QAAId;AAEJ,QAAI;AACF,MAAAA,IAAYW,EAAA;AAGZ,YAAMS,IAAY,SAAS,eAAe,KAAK;AAC/C,UAAI,CAACA;AACH,cAAM,IAAI,MAAM,+CAA+C;AAIjE,MAAAC,EAAmBrB,GAAWoB,CAAS;AAAA,IACzC,SAASE,GAAO;AAEd,YAAAN,EAA2B,IAAI,GAC3BC,KACFA,EAAM,QAAQ,OAAOE,CAAsB,GAEvCG;AAAA,IACR;AAGA,UAAMC,IAAkBV;AACxB,WAAO,OACLG,EAA2B,IAAI,GAC3BC,KACFA,EAAM,QAAQ,OAAOE,CAAsB,GAEtCI,EAAA;AAAA,EAEX,CAAC;AACH;AAKO,SAASF,EAAmBrB,GAA8BoB,GAAoBI,IAA0B,IAAkB;AAE/H,MAAI;AAEF,IAAIA,MACFJ,EAAU,YAAY;AAIxB,UAAMK,IAAWzB,EAAU,OAAA,GACrB0B,IAAY,MAAM,QAAQD,CAAQ,IAAIA,IAAW,CAACA,CAAQ,GAG1DtB,IAAsB,CAAA;AAC5B,eAAWwB,KAAQD,GAAW;AAC5B,YAAMrB,IAAUX,EAAe,OAAOiC,GAAMP,CAAS;AAErD,UAAIf,aAAmB,kBAAkB;AAEvC,cAAMuB,IAAW,MAAM,KAAKvB,EAAQ,UAAU;AAC9C,mBAAWwB,KAASD;AAClB,UAAIC,aAAiB,YACnB1B,EAAS,KAAK0B,CAAK,GACnBT,EAAU,YAAYS,CAAK;AAAA,MAGjC,MAAA,CAAWxB,aAAmB,YAC5BF,EAAS,KAAKE,CAAO,GACrBe,EAAU,YAAYf,CAAO;AAAA,IAEjC;AAGA,QAAIF,EAAS,SAAS,GAAG;AACvB,MAAAH,EAAU,kCAAkB,IAAA,GAE5BG,EAAS,QAAQ,CAACE,GAASC,MAAU;AACnC,cAAMC,IAAMF,EAAQ,MAAM,WAAWC,CAAK;AAC1C,QAAAN,EAAU,YAAa,IAAIO,GAAKF,CAAO,GAGlCL,EAAU,mBACbA,EAAU,iBAAiBK;AAAA,MAE/B,CAAC,GAGDL,EAAU,WAAW;AAGrB,YAAME,IAAqBF,EAAkB;AAE7C,UAAIE,GAAmB,YAAY;AACjC,cAAMM,IAAUN,EAAkB;AAAA,UAChCF,EAAU;AAAA,UACVA,EAAU;AAAA,QAAA;AAEZ,QAAI,OAAOQ,KAAY,eACrBR,EAAU,UAAUA,EAAU,WAAW,CAAA,GACzCA,EAAU,QAAQ,KAAKQ,CAAO;AAAA,MAElC;AAGA,UAAIN,GAAmB,SAAS;AAC9B,cAAMM,IAAUN,EAAkB,QAAA;AAClC,QAAI,OAAOM,KAAY,eACrBR,EAAU,UAAUA,EAAU,WAAW,CAAA,GACzCA,EAAU,QAAQ,KAAKQ,CAAO;AAAA,MAElC;AAAA,IACF;AAGA,QAAIsB,EAAsB9B,CAAS;AACjC,iBAAWK,KAAWF;AACpB,QAAA4B,EAAwB1B,GAASL,CAAS;AAK9C,eAAWK,KAAWF;AACpB,MAAA6B,EAAkB3B,GAASL,CAAS;AAMtC,UAAMiC,IAAwC,CAAA;AAG9C,WAAArC,EAAkB,IAAIwB,GAAWpB,CAAS,GAC1CH,EAAkB,IAAIG,GAAWG,CAAQ,GACzCH,EAAU,UAAU,IAIpB,WAAW,MAAM;AACf,MAAAC,EAAA;AAAA,IACF,GAAG,CAAC,GAGG,MAAM;AAEX,MAAAgC,EAAsB,QAAQ,CAACzB,MAAYA,EAAA,CAAS,GAEpD0B,EAAyBlC,GAAWoB,CAAS;AAAA,IAC/C;AAAA,EACF,SAASE,GAAO;AAEd,UAAMa,IAAW,OAAO,OAAO,IAAI,MAAA,GAASb,GAAO;AAAA,MACjD,MAAM;AAAA,MACN,SAAS;AAAA,IAAA,CACV,GAEKpB,IAAqBF,EAAkB;AAC7C,UAAIE,GAAmB,aACrBA,EAAkB,WAAWiC,GAAU,OAAO,IACrCjC,GAAmB,UAC5BA,EAAkB,QAAQiC,CAAQ,IAElC,QAAQ,MAAM,mCAAmCb,CAAK,GAElDA;AAAA,EACR;AACF;AAKO,SAASc,EAAiBpC,GAA8BoB,GAA0B;AACvF,QAAMjB,IAAWN,EAAkB,IAAIG,CAAS;AAChD,EAAIG,MACFA,EAAS,QAAQ,CAACE,MAAY;AAC5B,IAAIA,EAAQ,cACVA,EAAQ,WAAW,YAAYA,CAAO;AAAA,EAE1C,CAAC,GACDR,EAAkB,OAAOG,CAAS,IAGpCJ,EAAkB,OAAOwB,CAAS,GAClCpB,EAAU,UAAU,IAGhBA,EAAU,YACZA,EAAU,QAAQ,QAAQ,CAACQ,MAAYA,GAAS,GAChDR,EAAU,UAAU,CAAA;AAExB;AAKO,SAASkC,EAAyBlC,GAA8BoB,GAA0B;AAC/F,MAAI;AAEF,UAAMlB,IAAqBF,EAAkB;AAC7C,IAAIE,GAAmB,aACrBA,EAAkB,UAAA,GAIhBF,EAAU,YACZA,EAAU,QAAQ,QAAQ,CAACQ,MAAY;AACrC,UAAI;AACF,QAAAA,EAAA;AAAA,MACF,SAASc,GAAO;AACd,gBAAQ,MAAM,+BAA+BtB,EAAU,EAAE,KAAKsB,CAAK;AAAA,MACrE;AAAA,IACF,CAAC,GACDtB,EAAU,UAAU,CAAA;AAItB,UAAMG,IAAWN,EAAkB,IAAIG,CAAS;AAChD,IAAIG,MACFA,EAAS,QAAQ,CAACE,MAAY;AAC5B,MAAIA,EAAQ,cACVA,EAAQ,WAAW,YAAYA,CAAO;AAAA,IAE1C,CAAC,GACDR,EAAkB,OAAOG,CAAS,IAIhCA,EAAU,eACZA,EAAU,YAAY,MAAA,GAIxBA,EAAU,iBAAiB,QAC3BA,EAAU,WAAW,IACrBA,EAAU,UAAU,IAEpBJ,EAAkB,OAAOwB,CAAS;AAAA,EACpC,SAASE,GAAO;AACd,UAAMa,IAAW,OAAO,OAAO,IAAI,MAAA,GAASb,GAAO;AAAA,MACjD,MAAM;AAAA,MACN,SAAS;AAAA,IAAA,CACV,GAEKpB,IAAqBF,EAAkB;AAC7C,IAAIE,GAAmB,aACrBA,EAAkB,WAAWiC,GAAU,SAAS,IAEhD,QAAQ,MAAM,gCAAgCb,CAAK;AAAA,EAEvD;AACF;AAKA,SAASS,EAAwB1B,GAAkBL,GAA2C;AAE5F,MAAI,EAAE,eAAeA,MAAc,CAACA,EAAU;AAC5C;AAGF,QAAMqC,IAAchC,GACdiC,IAAYtC,EAAU,WAGtBuC,IAAmB;AAAA,IACvB,MAAM;AAAA,IACN,KAAKF,EAAY,QAAQ,YAAA;AAAA,IACzB,OAAO,CAAA;AAAA,IACP,SAASA;AAAA,EAAA;AAIX,aAAWG,KAAYF;AACrB,QAAI;AAEF,MAAIE,KAAY,OAAOA,EAAS,SAAU,cACxCA,EAAS,MAAMD,GAAS;AAAA,QACtB,aAAavC,EAAU;AAAA,QACvB,mBAAmBA;AAAA,QACnB,SAASqC;AAAA,QACT,OAAO;AAAA,MAAA,CACR;AAAA,IAEL,SAASf,GAAO;AACd,cAAQ,KAAK,6BAA6BkB,GAAUlB,CAAK;AAAA,IAC3D;AAEJ;AAKA,SAASU,EAAkB3B,GAAkBL,GAAoC;AAC/E,QAAMqC,IAAchC;AAGpB,MAAIL,EAAU,OAAO;AACnB,UAAMyC,IAAQzC,EAAU;AAGxB,IAAIyC,EAAM,WAAW,OAAOA,EAAM,WAAY,cAC5CJ,EAAY,iBAAiB,SAASI,EAAM,OAAO,GAGjDA,EAAM,gBAAgB,OAAOA,EAAM,gBAAiB,cACtDJ,EAAY,iBAAiB,cAAcI,EAAM,YAAY,GAG3DA,EAAM,gBAAgB,OAAOA,EAAM,gBAAiB,cACtDJ,EAAY,iBAAiB,cAAcI,EAAM,YAAY,GAG3DA,EAAM,WAAW,OAAOA,EAAM,WAAY,cAC5CJ,EAAY,iBAAiB,SAASI,EAAM,OAAO,GAGjDA,EAAM,UAAU,OAAOA,EAAM,UAAW,cAC1CJ,EAAY,iBAAiB,QAAQI,EAAM,MAAM;AAAA,EAErD;AAGA,MAAIX,EAAsB9B,CAAS,KAAKA,EAAU;AAChD,eAAWwC,KAAYxC,EAAU;AAC/B,UAAIwC,KAAY,mBAAmBA,KAAYA,EAAS;AACtD,mBAAW,CAACE,GAAWC,CAAO,KAAK,OAAO,QAAQH,EAAS,aAAa;AACtE,UAAI,OAAOG,KAAY,cACrBN,EAAY;AAAA,YACVK;AAAA,YACAC;AAAA,UAAA;AAAA;AAOd;AAKA,SAASb,EAAsB9B,GAAuD;AACpF,SACEA,KACA,OAAOA,KAAc,aACpB,eAAeA,KAAa,cAAcA;AAE/C;AAKO,SAAS4C,EACdhB,GACAR,GACgB;AAChB,QAAMyB,IAAmC,CAAA;AAEzC,aAAWhB,KAASD,GAAU;AAC5B,UAAMkB,IAAezB,EAAmBQ,GAAOT,CAAS;AACxD,IAAAyB,EAAiB,KAAKC,CAAY;AAAA,EACpC;AAEA,SAAOD;AACT;AAKO,SAASE,EAAgB/C,GAA8BgD,GAAqB;AACjF,QAAM7C,IAAWN,EAAkB,IAAIG,CAAS;AAChD,MAAI,CAACG,GAAU;AACb,YAAQ,KAAK,yCAAyC;AACtD;AAAA,EACF;AAGA,EAAAH,EAAU,YAAYA,EAAU,OAChCA,EAAU,QAAQ,EAAE,GAAGA,EAAU,OAAO,GAAGgD,EAAA;AAG3C,QAAM5B,IAAYjB,EAAS,CAAC,GAAG;AAC/B,EAAIiB,MACFgB,EAAiBpC,GAAWoB,CAAS,GACrCC,EAAmBrB,GAAWoB,CAAS;AAE3C;AAKO,SAAS6B,EAAwB5C,GAAiD;AACvF,MAAI6C,IAA0B7C;AAC9B,SAAO6C,KAAS;AACd,UAAMlD,IAAYJ,EAAkB,IAAIsD,CAAO;AAC/C,QAAIlD;AACF,aAAOA;AAET,IAAAkD,IAAUA,EAAQ;AAAA,EACpB;AAEF;AAMO,MAAMC,IAAiB;AAAA,EAC5B,sBAAsB,MAAM,MAAM,KAAKvD,EAAkB,SAAS;AAAA,EAClE,sBAAsB,CAACI,MAAiCH,EAAkB,IAAIG,CAAS;AAAA,EACvF,oBAAoB,CAACA,MAAiCA,EAAU,WAAW;AAAA;AAAA;AAAA;AAAA,EAK3E,mBAAyD;AACvD,UAAMoD,IAAmB,CAAA;AAEzB,eAAW,CAAChC,GAAWpB,CAAS,KAAKJ,EAAkB,WAAW;AAChE,MAAK,SAAS,SAASwB,CAAS,KAC9BgC,EAAO,KAAK,2BAA2BpD,EAAU,EAAE,gBAAgB,GAGhEA,EAAU,WACboD,EAAO,KAAK,aAAapD,EAAU,EAAE,2CAA2C;AAGlF,YAAMG,IAAWN,EAAkB,IAAIG,CAAS;AAChD,OAAI,CAACG,KAAYA,EAAS,WAAW,MACnCiD,EAAO,KAAK,aAAapD,EAAU,EAAE,iCAAiC;AAAA,IAE1E;AAEA,WAAO;AAAA,MACL,OAAOoD,EAAO,WAAW;AAAA,MACzB,QAAAA;AAAA,IAAA;AAAA,EAEJ;AACF;"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./development-warnings.cjs"),o=new Set(["div","section","article","aside","nav","main","header","footer","h1","h2","h3","h4","h5","h6","p","span","strong","em","code","pre","blockquote","address","ul","ol","li","dl","dt","dd","button","a","input","textarea","select","form","label","img","video","audio","canvas","svg","picture","source","table","thead","tbody","tfoot","tr","th","td","caption","colgroup","col","fieldset","legend","optgroup","option","datalist","output","progress","meter","details","summary","dialog","abbr","cite","dfn","kbd","mark","q","s","samp","small","sub","sup","time","u","var","body","head","title","base","link","meta","style","script","noscript","embed","iframe","object","param","track","map","area","menu","menuitem"]),c=new Map([["nav",{role:"navigation",applyARIA:!0}],["main",{role:"main",applyARIA:!0}],["article",{role:"article",applyARIA:!0}],["section",{role:"region",applyARIA:!0}],["aside",{role:"complementary",applyARIA:!0}],["header",{role:"banner",applyARIA:!1}],["footer",{role:"contentinfo",applyARIA:!1}],["form",{role:"form",applyARIA:!0}],["search",{role:"search",applyARIA:!0}],["dialog",{role:"dialog",applyARIA:!0}],["button",{role:"button",applyARIA:!1}],["a",{role:"link",applyARIA:!1}]]),u=new Map([["HStack",{warningLevel:"none",idealTags:["nav","header","footer","section","article","aside","main","div"]}],["VStack",{warningLevel:"none",idealTags:["main","section","article","aside","header","footer","div"]}],["ZStack",{warningLevel:"none",idealTags:["article","aside","section","div"]}],["Text",{warningLevel:"none",idealTags:["h1","h2","h3","h4","h5","h6","p","span","strong","em"]}],["Image",{warningLevel:"warning",problematicTags:["figure","picture"]}],["Spacer",{warningLevel:"none"}],["Button",{warningLevel:"warning",problematicTags:["div","span","a"]}],["Link",{warningLevel:"warning",problematicTags:["div","span","button"]}]]);function d(n,i){const e=u.get(n);return e?e.warningLevel==="none"?!1:e.warningLevel==="warning"&&e.problematicTags?e.problematicTags.includes(i):!(e.idealTags&&e.idealTags.includes(i)):!0}class g{static validate(i,e){return o.has(i)?{valid:!0,warnings:this.checkSemanticWarnings(i,e),semanticRole:c.get(i)}:(t.DevelopmentWarnings.errorInvalidTag(i,e),{valid:!1,warning:`Invalid HTML tag '${i}' specified for ${e}. Tag will be used as-is.`,severity:"error"})}static checkSemanticWarnings(i,e){const r=[];if(["button","a","input","select","textarea"].includes(i)&&["HStack","VStack","ZStack"].includes(e)){const a=`Using interactive tag '${i}' on layout component ${e} may cause accessibility issues.`;r.push({message:a,severity:"warning"}),t.DevelopmentWarnings.warnAccessibility(e,i,"Interactive tag on layout component may cause unexpected behavior")}if(i==="li"&&!["VStack","HStack"].includes(e)&&(r.push({message:"<li> tags should typically be used within list structures.",severity:"info"}),t.DevelopmentWarnings.warnProblematicCombination(e,i,"Consider using within <ul> or <ol> structure","info")),["h1","h2","h3","h4","h5","h6"].includes(i)&&["HStack","VStack","ZStack"].includes(e)){const a=`Using heading tag '${i}' on layout component ${e}. Consider using Text component instead.`;r.push({message:a,severity:"info"}),t.DevelopmentWarnings.warnProblematicCombination(e,i,"Heading tags are better suited for Text components","info")}if(["form","fieldset","legend"].includes(i)&&!["VStack","HStack","Form"].includes(e)){const a=`Form tag '${i}' used on ${e}. Ensure proper form semantics.`;r.push({message:a,severity:"info"}),t.DevelopmentWarnings.warnProblematicCombination(e,i,"Form tags require proper semantic context","info")}return r}}let l={autoApplySemanticRoles:!0,warnOnOverrides:process.env.NODE_ENV!=="production",warnOnSemanticIssues:process.env.NODE_ENV!=="production",validateTags:!0,allowInvalidTags:!0};function f(n){l={...l,...n}}function m(){return{...l}}function v(n,i,e){const r=e||i,a=m();let s={valid:!0};return e&&(a.warnOnOverrides&&d(n,e)&&t.DevelopmentWarnings.warnElementOverride(n,i,e),a.validateTags&&(s=g.validate(e,n),!s.valid&&!a.allowInvalidTags))?(t.DevelopmentWarnings.warnProblematicCombination(n,e,`Invalid tag rejected, using default '${i}' instead`,"warning"),{tag:i,validation:s}):{tag:r,validation:s}}function p(n,i){return e=>v(n,i,e)}exports.COMPONENT_ELIGIBILITY=u;exports.ElementTagValidator=g;exports.SEMANTIC_TAG_ROLES=c;exports.VALID_HTML_TAGS=o;exports.configureElementOverrides=f;exports.createElementOverrideValidator=p;exports.getElementOverrideConfig=m;exports.processElementOverride=v;exports.shouldWarnOnOverride=d;
|
|
2
|
-
//# sourceMappingURL=element-override.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element-override.cjs","sources":["../../src/runtime/element-override.ts"],"sourcesContent":["/**\n * Element Override System - Tag Specification Enhancement\n * \n * Enables components to override their default HTML tags for semantic markup,\n * improving SEO and accessibility while preserving all styling and functionality.\n */\n\nimport { DevelopmentWarnings } from './development-warnings'\n\nexport interface ElementOverrideProps {\n element?: string\n}\n\nexport interface ValidationResult {\n valid: boolean\n warnings?: Warning[]\n severity?: 'error' | 'warning' | 'info'\n warning?: string\n semanticRole?: SemanticRoleInfo\n}\n\nexport interface Warning {\n message: string\n severity: 'error' | 'warning' | 'info'\n}\n\nexport interface SemanticRoleInfo {\n role: string\n applyARIA: boolean\n}\n\nexport interface ElementOverrideConfig {\n // Accessibility\n autoApplySemanticRoles: boolean\n \n // Development warnings\n warnOnOverrides: boolean\n warnOnSemanticIssues: boolean\n \n // Validation\n validateTags: boolean\n allowInvalidTags: boolean\n}\n\n// Valid HTML tag validation\nexport const VALID_HTML_TAGS = new Set([\n // Container tags\n 'div', 'section', 'article', 'aside', 'nav', 'main', 'header', 'footer',\n // Heading tags \n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n // Content tags\n 'p', 'span', 'strong', 'em', 'code', 'pre', 'blockquote', 'address',\n // List tags\n 'ul', 'ol', 'li', 'dl', 'dt', 'dd',\n // Interactive tags (with warnings)\n 'button', 'a', 'input', 'textarea', 'select', 'form', 'label',\n // Media tags\n 'img', 'video', 'audio', 'canvas', 'svg', 'picture', 'source',\n // Table tags\n 'table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'caption', 'colgroup', 'col',\n // Form tags\n 'fieldset', 'legend', 'optgroup', 'option', 'datalist', 'output', 'progress', 'meter',\n // Interactive content\n 'details', 'summary', 'dialog',\n // Text semantics\n 'abbr', 'cite', 'dfn', 'kbd', 'mark', 'q', 's', 'samp', 'small', 'sub', 'sup', 'time', 'u', 'var',\n // Document sections\n 'body', 'head', 'title', 'base', 'link', 'meta', 'style', 'script', 'noscript',\n // Embedded content\n 'embed', 'iframe', 'object', 'param', 'track', 'map', 'area',\n // Interactive elements\n 'menu', 'menuitem'\n])\n\nexport const SEMANTIC_TAG_ROLES = new Map<string, SemanticRoleInfo>([\n ['nav', { role: 'navigation', applyARIA: true }],\n ['main', { role: 'main', applyARIA: true }],\n ['article', { role: 'article', applyARIA: true }],\n ['section', { role: 'region', applyARIA: true }],\n ['aside', { role: 'complementary', applyARIA: true }],\n ['header', { role: 'banner', applyARIA: false }], // Context dependent - may not always be page banner\n ['footer', { role: 'contentinfo', applyARIA: false }], // Context dependent - may not always be page footer\n ['form', { role: 'form', applyARIA: true }],\n ['search', { role: 'search', applyARIA: true }],\n ['dialog', { role: 'dialog', applyARIA: true }],\n ['button', { role: 'button', applyARIA: false }], // Usually implicit\n ['a', { role: 'link', applyARIA: false }], // Usually implicit\n])\n\n/**\n * Component Eligibility Matrix - Warning Levels\n * Based on design/Enh-TagSpecification.md Component Eligibility Matrix\n */\nexport const COMPONENT_ELIGIBILITY = new Map<string, { warningLevel: 'none' | 'info' | 'warning', idealTags?: string[], problematicTags?: string[] }>([\n // Layout Components - Ideal for semantic containers (Warning Level: None)\n ['HStack', { warningLevel: 'none', idealTags: ['nav', 'header', 'footer', 'section', 'article', 'aside', 'main', 'div'] }],\n ['VStack', { warningLevel: 'none', idealTags: ['main', 'section', 'article', 'aside', 'header', 'footer', 'div'] }],\n ['ZStack', { warningLevel: 'none', idealTags: ['article', 'aside', 'section', 'div'] }],\n \n // Content Components - Common for specific overrides (Warning Level: None for appropriate tags)\n ['Text', { warningLevel: 'none', idealTags: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'span', 'strong', 'em'] }],\n ['Image', { warningLevel: 'warning', problematicTags: ['figure', 'picture'] }], // May break functionality\n ['Spacer', { warningLevel: 'none' }],\n \n // Interactive Components - Use with warnings\n ['Button', { warningLevel: 'warning', problematicTags: ['div', 'span', 'a'] }], // May break accessibility\n ['Link', { warningLevel: 'warning', problematicTags: ['div', 'span', 'button'] }], // May break navigation\n])\n\n/**\n * Check if an element override should show a warning based on component eligibility matrix\n */\nexport function shouldWarnOnOverride(componentType: string, tag: string): boolean {\n const eligibility = COMPONENT_ELIGIBILITY.get(componentType)\n \n if (!eligibility) {\n // Unknown component - always warn for safety\n return true\n }\n\n // If component has no warning for any overrides\n if (eligibility.warningLevel === 'none') {\n return false\n }\n\n // If component warns for specific problematic tags\n if (eligibility.warningLevel === 'warning' && eligibility.problematicTags) {\n return eligibility.problematicTags.includes(tag)\n }\n\n // If component has ideal tags defined, only warn for non-ideal ones\n if (eligibility.idealTags && eligibility.idealTags.includes(tag)) {\n return false\n }\n\n // Default to warning for unknown combinations\n return true\n}\n\n/**\n * The applyARIA flag controls whether the framework automatically adds \n * the corresponding ARIA role attribute to elements with semantic tags.\n * \n * applyARIA: true - Always add the ARIA role (e.g., <nav> gets role=\"navigation\")\n * applyARIA: false - Don't automatically add ARIA role due to context sensitivity\n * \n * Examples:\n * - <nav> always represents navigation → applyARIA: true\n * - <header> could be page banner OR section header → applyARIA: false \n * - <footer> could be page footer OR article footer → applyARIA: false\n * \n * When applyARIA is false, developers should manually specify appropriate \n * ARIA roles using the .aria() modifier when semantic meaning is ambiguous.\n */\n\nexport class ElementTagValidator {\n static validate(tag: string, componentType: string): ValidationResult {\n if (!VALID_HTML_TAGS.has(tag)) {\n // Show development warning for invalid tags\n DevelopmentWarnings.errorInvalidTag(tag, componentType)\n \n return {\n valid: false,\n warning: `Invalid HTML tag '${tag}' specified for ${componentType}. Tag will be used as-is.`,\n severity: 'error'\n }\n }\n\n // Check for potentially problematic combinations\n const warnings = this.checkSemanticWarnings(tag, componentType)\n \n return {\n valid: true,\n warnings,\n semanticRole: SEMANTIC_TAG_ROLES.get(tag)\n }\n }\n\n private static checkSemanticWarnings(tag: string, componentType: string): Warning[] {\n const warnings: Warning[] = []\n\n // Warn about interactive tags on layout components\n if (['button', 'a', 'input', 'select', 'textarea'].includes(tag)) {\n if (['HStack', 'VStack', 'ZStack'].includes(componentType)) {\n const message = `Using interactive tag '${tag}' on layout component ${componentType} may cause accessibility issues.`\n warnings.push({ message, severity: 'warning' })\n DevelopmentWarnings.warnAccessibility(componentType, tag, 'Interactive tag on layout component may cause unexpected behavior')\n }\n }\n\n // Warn about structural violations\n if (tag === 'li' && !['VStack', 'HStack'].includes(componentType)) {\n const message = `<li> tags should typically be used within list structures.`\n warnings.push({ message, severity: 'info' })\n DevelopmentWarnings.warnProblematicCombination(componentType, tag, 'Consider using within <ul> or <ol> structure', 'info')\n }\n\n // Warn about heading tags on layout components\n if (['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag)) {\n if (['HStack', 'VStack', 'ZStack'].includes(componentType)) {\n const message = `Using heading tag '${tag}' on layout component ${componentType}. Consider using Text component instead.`\n warnings.push({ message, severity: 'info' })\n DevelopmentWarnings.warnProblematicCombination(componentType, tag, 'Heading tags are better suited for Text components', 'info')\n }\n }\n\n // Warn about form tags on non-form components\n if (['form', 'fieldset', 'legend'].includes(tag)) {\n if (!['VStack', 'HStack', 'Form'].includes(componentType)) {\n const message = `Form tag '${tag}' used on ${componentType}. Ensure proper form semantics.`\n warnings.push({ message, severity: 'info' })\n DevelopmentWarnings.warnProblematicCombination(componentType, tag, 'Form tags require proper semantic context', 'info')\n }\n }\n\n return warnings\n }\n}\n\n// Global configuration\nlet globalConfig: ElementOverrideConfig = {\n autoApplySemanticRoles: true,\n warnOnOverrides: process.env.NODE_ENV !== 'production',\n warnOnSemanticIssues: process.env.NODE_ENV !== 'production',\n validateTags: true,\n allowInvalidTags: true\n}\n\nexport function configureElementOverrides(config: Partial<ElementOverrideConfig>): void {\n globalConfig = { ...globalConfig, ...config }\n}\n\nexport function getElementOverrideConfig(): ElementOverrideConfig {\n return { ...globalConfig }\n}\n\n/**\n * Process element override for a component with validation and warnings\n */\nexport function processElementOverride(\n componentType: string,\n defaultTag: string,\n overrideTag?: string\n): { tag: string; validation: ValidationResult } {\n const effectiveTag = overrideTag || defaultTag\n const config = getElementOverrideConfig()\n\n // Always validate in development, even when validation is disabled\n let validation: ValidationResult = { valid: true }\n \n if (overrideTag) {\n // Show override warning if enabled and appropriate per component eligibility matrix\n if (config.warnOnOverrides && shouldWarnOnOverride(componentType, overrideTag)) {\n DevelopmentWarnings.warnElementOverride(componentType, defaultTag, overrideTag)\n }\n\n // Validate tag if enabled\n if (config.validateTags) {\n validation = ElementTagValidator.validate(overrideTag, componentType)\n \n // If validation fails and we don't allow invalid tags, use default\n if (!validation.valid && !config.allowInvalidTags) {\n DevelopmentWarnings.warnProblematicCombination(\n componentType, \n overrideTag, \n `Invalid tag rejected, using default '${defaultTag}' instead`, \n 'warning'\n )\n return { tag: defaultTag, validation }\n }\n }\n }\n\n return { tag: effectiveTag, validation }\n}\n\n/**\n * Create element override validation helper for components\n */\nexport function createElementOverrideValidator(componentType: string, defaultTag: string) {\n return (overrideTag?: string) => processElementOverride(componentType, defaultTag, overrideTag)\n}"],"names":["VALID_HTML_TAGS","SEMANTIC_TAG_ROLES","COMPONENT_ELIGIBILITY","shouldWarnOnOverride","componentType","tag","eligibility","ElementTagValidator","DevelopmentWarnings","warnings","message","globalConfig","configureElementOverrides","config","getElementOverrideConfig","processElementOverride","defaultTag","overrideTag","effectiveTag","validation","createElementOverrideValidator"],"mappings":"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"}
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
import { DevelopmentWarnings as r } from "./development-warnings.js";
|
|
2
|
-
const o = /* @__PURE__ */ new Set([
|
|
3
|
-
// Container tags
|
|
4
|
-
"div",
|
|
5
|
-
"section",
|
|
6
|
-
"article",
|
|
7
|
-
"aside",
|
|
8
|
-
"nav",
|
|
9
|
-
"main",
|
|
10
|
-
"header",
|
|
11
|
-
"footer",
|
|
12
|
-
// Heading tags
|
|
13
|
-
"h1",
|
|
14
|
-
"h2",
|
|
15
|
-
"h3",
|
|
16
|
-
"h4",
|
|
17
|
-
"h5",
|
|
18
|
-
"h6",
|
|
19
|
-
// Content tags
|
|
20
|
-
"p",
|
|
21
|
-
"span",
|
|
22
|
-
"strong",
|
|
23
|
-
"em",
|
|
24
|
-
"code",
|
|
25
|
-
"pre",
|
|
26
|
-
"blockquote",
|
|
27
|
-
"address",
|
|
28
|
-
// List tags
|
|
29
|
-
"ul",
|
|
30
|
-
"ol",
|
|
31
|
-
"li",
|
|
32
|
-
"dl",
|
|
33
|
-
"dt",
|
|
34
|
-
"dd",
|
|
35
|
-
// Interactive tags (with warnings)
|
|
36
|
-
"button",
|
|
37
|
-
"a",
|
|
38
|
-
"input",
|
|
39
|
-
"textarea",
|
|
40
|
-
"select",
|
|
41
|
-
"form",
|
|
42
|
-
"label",
|
|
43
|
-
// Media tags
|
|
44
|
-
"img",
|
|
45
|
-
"video",
|
|
46
|
-
"audio",
|
|
47
|
-
"canvas",
|
|
48
|
-
"svg",
|
|
49
|
-
"picture",
|
|
50
|
-
"source",
|
|
51
|
-
// Table tags
|
|
52
|
-
"table",
|
|
53
|
-
"thead",
|
|
54
|
-
"tbody",
|
|
55
|
-
"tfoot",
|
|
56
|
-
"tr",
|
|
57
|
-
"th",
|
|
58
|
-
"td",
|
|
59
|
-
"caption",
|
|
60
|
-
"colgroup",
|
|
61
|
-
"col",
|
|
62
|
-
// Form tags
|
|
63
|
-
"fieldset",
|
|
64
|
-
"legend",
|
|
65
|
-
"optgroup",
|
|
66
|
-
"option",
|
|
67
|
-
"datalist",
|
|
68
|
-
"output",
|
|
69
|
-
"progress",
|
|
70
|
-
"meter",
|
|
71
|
-
// Interactive content
|
|
72
|
-
"details",
|
|
73
|
-
"summary",
|
|
74
|
-
"dialog",
|
|
75
|
-
// Text semantics
|
|
76
|
-
"abbr",
|
|
77
|
-
"cite",
|
|
78
|
-
"dfn",
|
|
79
|
-
"kbd",
|
|
80
|
-
"mark",
|
|
81
|
-
"q",
|
|
82
|
-
"s",
|
|
83
|
-
"samp",
|
|
84
|
-
"small",
|
|
85
|
-
"sub",
|
|
86
|
-
"sup",
|
|
87
|
-
"time",
|
|
88
|
-
"u",
|
|
89
|
-
"var",
|
|
90
|
-
// Document sections
|
|
91
|
-
"body",
|
|
92
|
-
"head",
|
|
93
|
-
"title",
|
|
94
|
-
"base",
|
|
95
|
-
"link",
|
|
96
|
-
"meta",
|
|
97
|
-
"style",
|
|
98
|
-
"script",
|
|
99
|
-
"noscript",
|
|
100
|
-
// Embedded content
|
|
101
|
-
"embed",
|
|
102
|
-
"iframe",
|
|
103
|
-
"object",
|
|
104
|
-
"param",
|
|
105
|
-
"track",
|
|
106
|
-
"map",
|
|
107
|
-
"area",
|
|
108
|
-
// Interactive elements
|
|
109
|
-
"menu",
|
|
110
|
-
"menuitem"
|
|
111
|
-
]), c = /* @__PURE__ */ new Map([
|
|
112
|
-
["nav", { role: "navigation", applyARIA: !0 }],
|
|
113
|
-
["main", { role: "main", applyARIA: !0 }],
|
|
114
|
-
["article", { role: "article", applyARIA: !0 }],
|
|
115
|
-
["section", { role: "region", applyARIA: !0 }],
|
|
116
|
-
["aside", { role: "complementary", applyARIA: !0 }],
|
|
117
|
-
["header", { role: "banner", applyARIA: !1 }],
|
|
118
|
-
// Context dependent - may not always be page banner
|
|
119
|
-
["footer", { role: "contentinfo", applyARIA: !1 }],
|
|
120
|
-
// Context dependent - may not always be page footer
|
|
121
|
-
["form", { role: "form", applyARIA: !0 }],
|
|
122
|
-
["search", { role: "search", applyARIA: !0 }],
|
|
123
|
-
["dialog", { role: "dialog", applyARIA: !0 }],
|
|
124
|
-
["button", { role: "button", applyARIA: !1 }],
|
|
125
|
-
// Usually implicit
|
|
126
|
-
["a", { role: "link", applyARIA: !1 }]
|
|
127
|
-
// Usually implicit
|
|
128
|
-
]), u = /* @__PURE__ */ new Map([
|
|
129
|
-
// Layout Components - Ideal for semantic containers (Warning Level: None)
|
|
130
|
-
["HStack", { warningLevel: "none", idealTags: ["nav", "header", "footer", "section", "article", "aside", "main", "div"] }],
|
|
131
|
-
["VStack", { warningLevel: "none", idealTags: ["main", "section", "article", "aside", "header", "footer", "div"] }],
|
|
132
|
-
["ZStack", { warningLevel: "none", idealTags: ["article", "aside", "section", "div"] }],
|
|
133
|
-
// Content Components - Common for specific overrides (Warning Level: None for appropriate tags)
|
|
134
|
-
["Text", { warningLevel: "none", idealTags: ["h1", "h2", "h3", "h4", "h5", "h6", "p", "span", "strong", "em"] }],
|
|
135
|
-
["Image", { warningLevel: "warning", problematicTags: ["figure", "picture"] }],
|
|
136
|
-
// May break functionality
|
|
137
|
-
["Spacer", { warningLevel: "none" }],
|
|
138
|
-
// Interactive Components - Use with warnings
|
|
139
|
-
["Button", { warningLevel: "warning", problematicTags: ["div", "span", "a"] }],
|
|
140
|
-
// May break accessibility
|
|
141
|
-
["Link", { warningLevel: "warning", problematicTags: ["div", "span", "button"] }]
|
|
142
|
-
// May break navigation
|
|
143
|
-
]);
|
|
144
|
-
function d(i, a) {
|
|
145
|
-
const e = u.get(i);
|
|
146
|
-
return e ? e.warningLevel === "none" ? !1 : e.warningLevel === "warning" && e.problematicTags ? e.problematicTags.includes(a) : !(e.idealTags && e.idealTags.includes(a)) : !0;
|
|
147
|
-
}
|
|
148
|
-
class g {
|
|
149
|
-
static validate(a, e) {
|
|
150
|
-
return o.has(a) ? {
|
|
151
|
-
valid: !0,
|
|
152
|
-
warnings: this.checkSemanticWarnings(a, e),
|
|
153
|
-
semanticRole: c.get(a)
|
|
154
|
-
} : (r.errorInvalidTag(a, e), {
|
|
155
|
-
valid: !1,
|
|
156
|
-
warning: `Invalid HTML tag '${a}' specified for ${e}. Tag will be used as-is.`,
|
|
157
|
-
severity: "error"
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
static checkSemanticWarnings(a, e) {
|
|
161
|
-
const t = [];
|
|
162
|
-
if (["button", "a", "input", "select", "textarea"].includes(a) && ["HStack", "VStack", "ZStack"].includes(e)) {
|
|
163
|
-
const n = `Using interactive tag '${a}' on layout component ${e} may cause accessibility issues.`;
|
|
164
|
-
t.push({ message: n, severity: "warning" }), r.warnAccessibility(e, a, "Interactive tag on layout component may cause unexpected behavior");
|
|
165
|
-
}
|
|
166
|
-
if (a === "li" && !["VStack", "HStack"].includes(e) && (t.push({ message: "<li> tags should typically be used within list structures.", severity: "info" }), r.warnProblematicCombination(e, a, "Consider using within <ul> or <ol> structure", "info")), ["h1", "h2", "h3", "h4", "h5", "h6"].includes(a) && ["HStack", "VStack", "ZStack"].includes(e)) {
|
|
167
|
-
const n = `Using heading tag '${a}' on layout component ${e}. Consider using Text component instead.`;
|
|
168
|
-
t.push({ message: n, severity: "info" }), r.warnProblematicCombination(e, a, "Heading tags are better suited for Text components", "info");
|
|
169
|
-
}
|
|
170
|
-
if (["form", "fieldset", "legend"].includes(a) && !["VStack", "HStack", "Form"].includes(e)) {
|
|
171
|
-
const n = `Form tag '${a}' used on ${e}. Ensure proper form semantics.`;
|
|
172
|
-
t.push({ message: n, severity: "info" }), r.warnProblematicCombination(e, a, "Form tags require proper semantic context", "info");
|
|
173
|
-
}
|
|
174
|
-
return t;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
let l = {
|
|
178
|
-
autoApplySemanticRoles: !0,
|
|
179
|
-
warnOnOverrides: process.env.NODE_ENV !== "production",
|
|
180
|
-
warnOnSemanticIssues: process.env.NODE_ENV !== "production",
|
|
181
|
-
validateTags: !0,
|
|
182
|
-
allowInvalidTags: !0
|
|
183
|
-
};
|
|
184
|
-
function v(i) {
|
|
185
|
-
l = { ...l, ...i };
|
|
186
|
-
}
|
|
187
|
-
function m() {
|
|
188
|
-
return { ...l };
|
|
189
|
-
}
|
|
190
|
-
function f(i, a, e) {
|
|
191
|
-
const t = e || a, n = m();
|
|
192
|
-
let s = { valid: !0 };
|
|
193
|
-
return e && (n.warnOnOverrides && d(i, e) && r.warnElementOverride(i, a, e), n.validateTags && (s = g.validate(e, i), !s.valid && !n.allowInvalidTags)) ? (r.warnProblematicCombination(
|
|
194
|
-
i,
|
|
195
|
-
e,
|
|
196
|
-
`Invalid tag rejected, using default '${a}' instead`,
|
|
197
|
-
"warning"
|
|
198
|
-
), { tag: a, validation: s }) : { tag: t, validation: s };
|
|
199
|
-
}
|
|
200
|
-
function h(i, a) {
|
|
201
|
-
return (e) => f(i, a, e);
|
|
202
|
-
}
|
|
203
|
-
export {
|
|
204
|
-
u as COMPONENT_ELIGIBILITY,
|
|
205
|
-
g as ElementTagValidator,
|
|
206
|
-
c as SEMANTIC_TAG_ROLES,
|
|
207
|
-
o as VALID_HTML_TAGS,
|
|
208
|
-
v as configureElementOverrides,
|
|
209
|
-
h as createElementOverrideValidator,
|
|
210
|
-
m as getElementOverrideConfig,
|
|
211
|
-
f as processElementOverride,
|
|
212
|
-
d as shouldWarnOnOverride
|
|
213
|
-
};
|
|
214
|
-
//# sourceMappingURL=element-override.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element-override.js","sources":["../../src/runtime/element-override.ts"],"sourcesContent":["/**\n * Element Override System - Tag Specification Enhancement\n * \n * Enables components to override their default HTML tags for semantic markup,\n * improving SEO and accessibility while preserving all styling and functionality.\n */\n\nimport { DevelopmentWarnings } from './development-warnings'\n\nexport interface ElementOverrideProps {\n element?: string\n}\n\nexport interface ValidationResult {\n valid: boolean\n warnings?: Warning[]\n severity?: 'error' | 'warning' | 'info'\n warning?: string\n semanticRole?: SemanticRoleInfo\n}\n\nexport interface Warning {\n message: string\n severity: 'error' | 'warning' | 'info'\n}\n\nexport interface SemanticRoleInfo {\n role: string\n applyARIA: boolean\n}\n\nexport interface ElementOverrideConfig {\n // Accessibility\n autoApplySemanticRoles: boolean\n \n // Development warnings\n warnOnOverrides: boolean\n warnOnSemanticIssues: boolean\n \n // Validation\n validateTags: boolean\n allowInvalidTags: boolean\n}\n\n// Valid HTML tag validation\nexport const VALID_HTML_TAGS = new Set([\n // Container tags\n 'div', 'section', 'article', 'aside', 'nav', 'main', 'header', 'footer',\n // Heading tags \n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n // Content tags\n 'p', 'span', 'strong', 'em', 'code', 'pre', 'blockquote', 'address',\n // List tags\n 'ul', 'ol', 'li', 'dl', 'dt', 'dd',\n // Interactive tags (with warnings)\n 'button', 'a', 'input', 'textarea', 'select', 'form', 'label',\n // Media tags\n 'img', 'video', 'audio', 'canvas', 'svg', 'picture', 'source',\n // Table tags\n 'table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td', 'caption', 'colgroup', 'col',\n // Form tags\n 'fieldset', 'legend', 'optgroup', 'option', 'datalist', 'output', 'progress', 'meter',\n // Interactive content\n 'details', 'summary', 'dialog',\n // Text semantics\n 'abbr', 'cite', 'dfn', 'kbd', 'mark', 'q', 's', 'samp', 'small', 'sub', 'sup', 'time', 'u', 'var',\n // Document sections\n 'body', 'head', 'title', 'base', 'link', 'meta', 'style', 'script', 'noscript',\n // Embedded content\n 'embed', 'iframe', 'object', 'param', 'track', 'map', 'area',\n // Interactive elements\n 'menu', 'menuitem'\n])\n\nexport const SEMANTIC_TAG_ROLES = new Map<string, SemanticRoleInfo>([\n ['nav', { role: 'navigation', applyARIA: true }],\n ['main', { role: 'main', applyARIA: true }],\n ['article', { role: 'article', applyARIA: true }],\n ['section', { role: 'region', applyARIA: true }],\n ['aside', { role: 'complementary', applyARIA: true }],\n ['header', { role: 'banner', applyARIA: false }], // Context dependent - may not always be page banner\n ['footer', { role: 'contentinfo', applyARIA: false }], // Context dependent - may not always be page footer\n ['form', { role: 'form', applyARIA: true }],\n ['search', { role: 'search', applyARIA: true }],\n ['dialog', { role: 'dialog', applyARIA: true }],\n ['button', { role: 'button', applyARIA: false }], // Usually implicit\n ['a', { role: 'link', applyARIA: false }], // Usually implicit\n])\n\n/**\n * Component Eligibility Matrix - Warning Levels\n * Based on design/Enh-TagSpecification.md Component Eligibility Matrix\n */\nexport const COMPONENT_ELIGIBILITY = new Map<string, { warningLevel: 'none' | 'info' | 'warning', idealTags?: string[], problematicTags?: string[] }>([\n // Layout Components - Ideal for semantic containers (Warning Level: None)\n ['HStack', { warningLevel: 'none', idealTags: ['nav', 'header', 'footer', 'section', 'article', 'aside', 'main', 'div'] }],\n ['VStack', { warningLevel: 'none', idealTags: ['main', 'section', 'article', 'aside', 'header', 'footer', 'div'] }],\n ['ZStack', { warningLevel: 'none', idealTags: ['article', 'aside', 'section', 'div'] }],\n \n // Content Components - Common for specific overrides (Warning Level: None for appropriate tags)\n ['Text', { warningLevel: 'none', idealTags: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'span', 'strong', 'em'] }],\n ['Image', { warningLevel: 'warning', problematicTags: ['figure', 'picture'] }], // May break functionality\n ['Spacer', { warningLevel: 'none' }],\n \n // Interactive Components - Use with warnings\n ['Button', { warningLevel: 'warning', problematicTags: ['div', 'span', 'a'] }], // May break accessibility\n ['Link', { warningLevel: 'warning', problematicTags: ['div', 'span', 'button'] }], // May break navigation\n])\n\n/**\n * Check if an element override should show a warning based on component eligibility matrix\n */\nexport function shouldWarnOnOverride(componentType: string, tag: string): boolean {\n const eligibility = COMPONENT_ELIGIBILITY.get(componentType)\n \n if (!eligibility) {\n // Unknown component - always warn for safety\n return true\n }\n\n // If component has no warning for any overrides\n if (eligibility.warningLevel === 'none') {\n return false\n }\n\n // If component warns for specific problematic tags\n if (eligibility.warningLevel === 'warning' && eligibility.problematicTags) {\n return eligibility.problematicTags.includes(tag)\n }\n\n // If component has ideal tags defined, only warn for non-ideal ones\n if (eligibility.idealTags && eligibility.idealTags.includes(tag)) {\n return false\n }\n\n // Default to warning for unknown combinations\n return true\n}\n\n/**\n * The applyARIA flag controls whether the framework automatically adds \n * the corresponding ARIA role attribute to elements with semantic tags.\n * \n * applyARIA: true - Always add the ARIA role (e.g., <nav> gets role=\"navigation\")\n * applyARIA: false - Don't automatically add ARIA role due to context sensitivity\n * \n * Examples:\n * - <nav> always represents navigation → applyARIA: true\n * - <header> could be page banner OR section header → applyARIA: false \n * - <footer> could be page footer OR article footer → applyARIA: false\n * \n * When applyARIA is false, developers should manually specify appropriate \n * ARIA roles using the .aria() modifier when semantic meaning is ambiguous.\n */\n\nexport class ElementTagValidator {\n static validate(tag: string, componentType: string): ValidationResult {\n if (!VALID_HTML_TAGS.has(tag)) {\n // Show development warning for invalid tags\n DevelopmentWarnings.errorInvalidTag(tag, componentType)\n \n return {\n valid: false,\n warning: `Invalid HTML tag '${tag}' specified for ${componentType}. Tag will be used as-is.`,\n severity: 'error'\n }\n }\n\n // Check for potentially problematic combinations\n const warnings = this.checkSemanticWarnings(tag, componentType)\n \n return {\n valid: true,\n warnings,\n semanticRole: SEMANTIC_TAG_ROLES.get(tag)\n }\n }\n\n private static checkSemanticWarnings(tag: string, componentType: string): Warning[] {\n const warnings: Warning[] = []\n\n // Warn about interactive tags on layout components\n if (['button', 'a', 'input', 'select', 'textarea'].includes(tag)) {\n if (['HStack', 'VStack', 'ZStack'].includes(componentType)) {\n const message = `Using interactive tag '${tag}' on layout component ${componentType} may cause accessibility issues.`\n warnings.push({ message, severity: 'warning' })\n DevelopmentWarnings.warnAccessibility(componentType, tag, 'Interactive tag on layout component may cause unexpected behavior')\n }\n }\n\n // Warn about structural violations\n if (tag === 'li' && !['VStack', 'HStack'].includes(componentType)) {\n const message = `<li> tags should typically be used within list structures.`\n warnings.push({ message, severity: 'info' })\n DevelopmentWarnings.warnProblematicCombination(componentType, tag, 'Consider using within <ul> or <ol> structure', 'info')\n }\n\n // Warn about heading tags on layout components\n if (['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tag)) {\n if (['HStack', 'VStack', 'ZStack'].includes(componentType)) {\n const message = `Using heading tag '${tag}' on layout component ${componentType}. Consider using Text component instead.`\n warnings.push({ message, severity: 'info' })\n DevelopmentWarnings.warnProblematicCombination(componentType, tag, 'Heading tags are better suited for Text components', 'info')\n }\n }\n\n // Warn about form tags on non-form components\n if (['form', 'fieldset', 'legend'].includes(tag)) {\n if (!['VStack', 'HStack', 'Form'].includes(componentType)) {\n const message = `Form tag '${tag}' used on ${componentType}. Ensure proper form semantics.`\n warnings.push({ message, severity: 'info' })\n DevelopmentWarnings.warnProblematicCombination(componentType, tag, 'Form tags require proper semantic context', 'info')\n }\n }\n\n return warnings\n }\n}\n\n// Global configuration\nlet globalConfig: ElementOverrideConfig = {\n autoApplySemanticRoles: true,\n warnOnOverrides: process.env.NODE_ENV !== 'production',\n warnOnSemanticIssues: process.env.NODE_ENV !== 'production',\n validateTags: true,\n allowInvalidTags: true\n}\n\nexport function configureElementOverrides(config: Partial<ElementOverrideConfig>): void {\n globalConfig = { ...globalConfig, ...config }\n}\n\nexport function getElementOverrideConfig(): ElementOverrideConfig {\n return { ...globalConfig }\n}\n\n/**\n * Process element override for a component with validation and warnings\n */\nexport function processElementOverride(\n componentType: string,\n defaultTag: string,\n overrideTag?: string\n): { tag: string; validation: ValidationResult } {\n const effectiveTag = overrideTag || defaultTag\n const config = getElementOverrideConfig()\n\n // Always validate in development, even when validation is disabled\n let validation: ValidationResult = { valid: true }\n \n if (overrideTag) {\n // Show override warning if enabled and appropriate per component eligibility matrix\n if (config.warnOnOverrides && shouldWarnOnOverride(componentType, overrideTag)) {\n DevelopmentWarnings.warnElementOverride(componentType, defaultTag, overrideTag)\n }\n\n // Validate tag if enabled\n if (config.validateTags) {\n validation = ElementTagValidator.validate(overrideTag, componentType)\n \n // If validation fails and we don't allow invalid tags, use default\n if (!validation.valid && !config.allowInvalidTags) {\n DevelopmentWarnings.warnProblematicCombination(\n componentType, \n overrideTag, \n `Invalid tag rejected, using default '${defaultTag}' instead`, \n 'warning'\n )\n return { tag: defaultTag, validation }\n }\n }\n }\n\n return { tag: effectiveTag, validation }\n}\n\n/**\n * Create element override validation helper for components\n */\nexport function createElementOverrideValidator(componentType: string, defaultTag: string) {\n return (overrideTag?: string) => processElementOverride(componentType, defaultTag, overrideTag)\n}"],"names":["VALID_HTML_TAGS","SEMANTIC_TAG_ROLES","COMPONENT_ELIGIBILITY","shouldWarnOnOverride","componentType","tag","eligibility","ElementTagValidator","DevelopmentWarnings","warnings","message","globalConfig","configureElementOverrides","config","getElementOverrideConfig","processElementOverride","defaultTag","overrideTag","effectiveTag","validation","createElementOverrideValidator"],"mappings":";AA6CO,MAAMA,wBAAsB,IAAI;AAAA;AAAA,EAErC;AAAA,EAAO;AAAA,EAAW;AAAA,EAAW;AAAA,EAAS;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAU;AAAA;AAAA,EAE/D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA;AAAA,EAE9B;AAAA,EAAK;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAM;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAc;AAAA;AAAA,EAE1D;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA;AAAA,EAE9B;AAAA,EAAU;AAAA,EAAK;AAAA,EAAS;AAAA,EAAY;AAAA,EAAU;AAAA,EAAQ;AAAA;AAAA,EAEtD;AAAA,EAAO;AAAA,EAAS;AAAA,EAAS;AAAA,EAAU;AAAA,EAAO;AAAA,EAAW;AAAA;AAAA,EAErD;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAW;AAAA,EAAY;AAAA;AAAA,EAE7E;AAAA,EAAY;AAAA,EAAU;AAAA,EAAY;AAAA,EAAU;AAAA,EAAY;AAAA,EAAU;AAAA,EAAY;AAAA;AAAA,EAE9E;AAAA,EAAW;AAAA,EAAW;AAAA;AAAA,EAEtB;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAO;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAK;AAAA;AAAA,EAE5F;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAU;AAAA;AAAA,EAEpE;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EAAS;AAAA,EAAS;AAAA,EAAO;AAAA;AAAA,EAEtD;AAAA,EAAQ;AACV,CAAC,GAEYC,wBAAyB,IAA8B;AAAA,EAClE,CAAC,OAAO,EAAE,MAAM,cAAc,WAAW,IAAM;AAAA,EAC/C,CAAC,QAAQ,EAAE,MAAM,QAAQ,WAAW,IAAM;AAAA,EAC1C,CAAC,WAAW,EAAE,MAAM,WAAW,WAAW,IAAM;AAAA,EAChD,CAAC,WAAW,EAAE,MAAM,UAAU,WAAW,IAAM;AAAA,EAC/C,CAAC,SAAS,EAAE,MAAM,iBAAiB,WAAW,IAAM;AAAA,EACpD,CAAC,UAAU,EAAE,MAAM,UAAU,WAAW,IAAO;AAAA;AAAA,EAC/C,CAAC,UAAU,EAAE,MAAM,eAAe,WAAW,IAAO;AAAA;AAAA,EACpD,CAAC,QAAQ,EAAE,MAAM,QAAQ,WAAW,IAAM;AAAA,EAC1C,CAAC,UAAU,EAAE,MAAM,UAAU,WAAW,IAAM;AAAA,EAC9C,CAAC,UAAU,EAAE,MAAM,UAAU,WAAW,IAAM;AAAA,EAC9C,CAAC,UAAU,EAAE,MAAM,UAAU,WAAW,IAAO;AAAA;AAAA,EAC/C,CAAC,KAAK,EAAE,MAAM,QAAQ,WAAW,IAAO;AAAA;AAC1C,CAAC,GAMYC,wBAA4B,IAA6G;AAAA;AAAA,EAEpJ,CAAC,UAAU,EAAE,cAAc,QAAQ,WAAW,CAAC,OAAO,UAAU,UAAU,WAAW,WAAW,SAAS,QAAQ,KAAK,GAAG;AAAA,EACzH,CAAC,UAAU,EAAE,cAAc,QAAQ,WAAW,CAAC,QAAQ,WAAW,WAAW,SAAS,UAAU,UAAU,KAAK,GAAG;AAAA,EAClH,CAAC,UAAU,EAAE,cAAc,QAAQ,WAAW,CAAC,WAAW,SAAS,WAAW,KAAK,GAAG;AAAA;AAAA,EAGtF,CAAC,QAAQ,EAAE,cAAc,QAAQ,WAAW,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,QAAQ,UAAU,IAAI,GAAG;AAAA,EAC/G,CAAC,SAAS,EAAE,cAAc,WAAW,iBAAiB,CAAC,UAAU,SAAS,GAAG;AAAA;AAAA,EAC7E,CAAC,UAAU,EAAE,cAAc,QAAQ;AAAA;AAAA,EAGnC,CAAC,UAAU,EAAE,cAAc,WAAW,iBAAiB,CAAC,OAAO,QAAQ,GAAG,GAAG;AAAA;AAAA,EAC7E,CAAC,QAAQ,EAAE,cAAc,WAAW,iBAAiB,CAAC,OAAO,QAAQ,QAAQ,EAAA,CAAG;AAAA;AAClF,CAAC;AAKM,SAASC,EAAqBC,GAAuBC,GAAsB;AAChF,QAAMC,IAAcJ,EAAsB,IAAIE,CAAa;AAE3D,SAAKE,IAMDA,EAAY,iBAAiB,SACxB,KAILA,EAAY,iBAAiB,aAAaA,EAAY,kBACjDA,EAAY,gBAAgB,SAASD,CAAG,IAI7C,EAAAC,EAAY,aAAaA,EAAY,UAAU,SAASD,CAAG,KAdtD;AAoBX;AAkBO,MAAME,EAAoB;AAAA,EAC/B,OAAO,SAASF,GAAaD,GAAyC;AACpE,WAAKJ,EAAgB,IAAIK,CAAG,IAcrB;AAAA,MACL,OAAO;AAAA,MACP,UAJe,KAAK,sBAAsBA,GAAKD,CAAa;AAAA,MAK5D,cAAcH,EAAmB,IAAII,CAAG;AAAA,IAAA,KAfxCG,EAAoB,gBAAgBH,GAAKD,CAAa,GAE/C;AAAA,MACL,OAAO;AAAA,MACP,SAAS,qBAAqBC,CAAG,mBAAmBD,CAAa;AAAA,MACjE,UAAU;AAAA,IAAA;AAAA,EAYhB;AAAA,EAEA,OAAe,sBAAsBC,GAAaD,GAAkC;AAClF,UAAMK,IAAsB,CAAA;AAG5B,QAAI,CAAC,UAAU,KAAK,SAAS,UAAU,UAAU,EAAE,SAASJ,CAAG,KACzD,CAAC,UAAU,UAAU,QAAQ,EAAE,SAASD,CAAa,GAAG;AAC1D,YAAMM,IAAU,0BAA0BL,CAAG,yBAAyBD,CAAa;AACnF,MAAAK,EAAS,KAAK,EAAE,SAAAC,GAAS,UAAU,WAAW,GAC9CF,EAAoB,kBAAkBJ,GAAeC,GAAK,mEAAmE;AAAA,IAC/H;AAWF,QAPIA,MAAQ,QAAQ,CAAC,CAAC,UAAU,QAAQ,EAAE,SAASD,CAAa,MAE9DK,EAAS,KAAK,EAAE,SADA,8DACS,UAAU,QAAQ,GAC3CD,EAAoB,2BAA2BJ,GAAeC,GAAK,gDAAgD,MAAM,IAIvH,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,EAAE,SAASA,CAAG,KAC/C,CAAC,UAAU,UAAU,QAAQ,EAAE,SAASD,CAAa,GAAG;AAC1D,YAAMM,IAAU,sBAAsBL,CAAG,yBAAyBD,CAAa;AAC/E,MAAAK,EAAS,KAAK,EAAE,SAAAC,GAAS,UAAU,QAAQ,GAC3CF,EAAoB,2BAA2BJ,GAAeC,GAAK,sDAAsD,MAAM;AAAA,IACjI;AAIF,QAAI,CAAC,QAAQ,YAAY,QAAQ,EAAE,SAASA,CAAG,KACzC,CAAC,CAAC,UAAU,UAAU,MAAM,EAAE,SAASD,CAAa,GAAG;AACzD,YAAMM,IAAU,aAAaL,CAAG,aAAaD,CAAa;AAC1D,MAAAK,EAAS,KAAK,EAAE,SAAAC,GAAS,UAAU,QAAQ,GAC3CF,EAAoB,2BAA2BJ,GAAeC,GAAK,6CAA6C,MAAM;AAAA,IACxH;AAGF,WAAOI;AAAA,EACT;AACF;AAGA,IAAIE,IAAsC;AAAA,EACxC,wBAAwB;AAAA,EACxB,iBAAiB,QAAQ,IAAI,aAAa;AAAA,EAC1C,sBAAsB,QAAQ,IAAI,aAAa;AAAA,EAC/C,cAAc;AAAA,EACd,kBAAkB;AACpB;AAEO,SAASC,EAA0BC,GAA8C;AACtF,EAAAF,IAAe,EAAE,GAAGA,GAAc,GAAGE,EAAA;AACvC;AAEO,SAASC,IAAkD;AAChE,SAAO,EAAE,GAAGH,EAAA;AACd;AAKO,SAASI,EACdX,GACAY,GACAC,GAC+C;AAC/C,QAAMC,IAAeD,KAAeD,GAC9BH,IAASC,EAAA;AAGf,MAAIK,IAA+B,EAAE,OAAO,GAAA;AAE5C,SAAIF,MAEEJ,EAAO,mBAAmBV,EAAqBC,GAAea,CAAW,KAC3ET,EAAoB,oBAAoBJ,GAAeY,GAAYC,CAAW,GAI5EJ,EAAO,iBACTM,IAAaZ,EAAoB,SAASU,GAAab,CAAa,GAGhE,CAACe,EAAW,SAAS,CAACN,EAAO,sBAC/BL,EAAoB;AAAA,IAClBJ;AAAA,IACAa;AAAA,IACA,wCAAwCD,CAAU;AAAA,IAClD;AAAA,EAAA,GAEK,EAAE,KAAKA,GAAY,YAAAG,EAAA,KAKzB,EAAE,KAAKD,GAAc,YAAAC,EAAA;AAC9B;AAKO,SAASC,EAA+BhB,GAAuBY,GAAoB;AACxF,SAAO,CAACC,MAAyBF,EAAuBX,GAAeY,GAAYC,CAAW;AAChG;"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../reactive/cleanup.cjs");require("../reactive/unified-scheduler.cjs");const m=require("../reactive/effect.cjs"),d=require("../reactive/signal.cjs");require("../reactive/scheduler.cjs");require("../reactive/theme.cjs");const h=require("./dev-tools.cjs"),p=require("./performance.cjs");var E=Object.defineProperty,b=(o,r,e)=>r in o?E(o,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[r]=e,a=(o,r,e)=>b(o,typeof r!="symbol"?r+"":r,e);class u{constructor(r,e,t){a(this,"state",{hasError:!1,error:null,errorInfo:{retryAttempts:0}}),a(this,"props"),a(this,"children"),a(this,"errorManager"),a(this,"stateSignal"),a(this,"setState"),this.props=r,this.children=e,this.errorManager=t;const[s,n]=d.createSignal(this.state);this.stateSignal=s,this.setState=n,(r.resetOnPropsChange||r.resetKeys)&&this.setupPropsWatcher()}componentDidCatch(r,e){const t=this.errorManager.createTachUIError(r,{category:"component_error",severity:"high",componentId:this.props.id,componentName:"ErrorBoundary",phase:"render",context:e});this.handleError(t,e)}handleError(r,e){const t={hasError:!0,error:r,errorInfo:{componentStack:e?.componentStack,errorBoundary:this.props.id||"ErrorBoundary",retryAttempts:this.state.errorInfo.retryAttempts}};if(this.state=t,this.setState(t),this.props.onError&&this.props.onError(r,t.errorInfo),this.errorManager.reportError(r),this.attemptRecovery(r),h.globalDevTools.isEnabled()){const s=new Error(r.message);s.stack=r.stack,h.globalDevTools.addError(r.componentId||"unknown",s)}}attemptRecovery(r){if(this.props.recovery){for(const e of this.props.recovery)if(!(e.condition&&!e.condition(r))){switch(e.strategy){case"retry":this.retryWithConfig(e);break;case"fallback":break;case"reload":this.reloadComponent();break;case"ignore":this.resetErrorBoundary();break;case"escalate":if(!this.props.isolate)throw r.cause||new Error(r.message);break}e.onRecovery&&e.onRecovery(r);break}}}retryWithConfig(r){const e=r.maxRetries||3,t=r.retryDelay||1e3;if(this.state.errorInfo.retryAttempts>=e){console.warn(`Max retry attempts (${e}) reached for error boundary`);return}setTimeout(()=>{this.retry()},t)}retry(){this.state.errorInfo.retryAttempts++,this.resetErrorBoundary()}resetErrorBoundary(){this.state={hasError:!1,error:null,errorInfo:{retryAttempts:this.state.errorInfo.retryAttempts}},this.setState(this.state)}reloadComponent(){this.resetErrorBoundary()}setupPropsWatcher(){this.props.resetKeys&&m.createEffect(()=>{const r=this.props;this.state.hasError&&this.shouldResetOnProps(r)&&this.resetErrorBoundary()})}shouldResetOnProps(r){return this.props.resetKeys?this.props.resetKeys.some(e=>e in r&&r[e]!==void 0):!1}render(){if(this.state.hasError&&this.state.error){if(this.props.fallback)if(typeof this.props.fallback=="function"){const r=this.props.fallback(this.state.error,()=>this.retry()),e=r.render?r.render():[];return Array.isArray(e)?e:[e]}else{const r=this.props.fallback.render?this.props.fallback.render():[];return Array.isArray(r)?r:[r]}return this.renderDefaultErrorUI()}try{return this.children.flatMap(r=>{const e=r.render();return Array.isArray(e)?e:[e]})}catch(r){return this.componentDidCatch(r,{componentStack:"children rendering"}),this.renderDefaultErrorUI()}}renderDefaultErrorUI(){const r=this.state.error;return[{type:"element",tag:"div",props:{className:"tachui-error-boundary",style:{padding:"20px",border:"2px solid #ff6b6b",borderRadius:"8px",backgroundColor:"#fff5f5",color:"#c92a2a",fontFamily:"monospace"}},children:[{type:"element",tag:"h3",props:{style:{margin:"0 0 10px 0"}},children:[{type:"text",text:"🚨 Something went wrong"}]},{type:"element",tag:"p",props:{style:{margin:"0 0 15px 0"}},children:[{type:"text",text:r.message}]},{type:"element",tag:"button",props:{onClick:()=>this.retry(),style:{padding:"8px 16px",backgroundColor:"#4c6ef5",color:"white",border:"none",borderRadius:"4px",cursor:"pointer"}},children:[{type:"text",text:`Retry (${this.state.errorInfo.retryAttempts} attempts)`}]}]}]}getState(){return this.state}getStateSignal(){return this.stateSignal}}const f=class c{constructor(){a(this,"config",{enabled:!0,captureConsoleErrors:!0,captureUnhandledPromises:!0,captureReactiveErrors:!0,captureComponentErrors:!0,maxErrorsPerSession:100,maxErrorAge:1800*1e3,reportingThrottle:1e3,enableStackTrace:!0,enableSourceMap:!1,development:!1}),a(this,"errors",[]),a(this,"reporters",[]),a(this,"handlers",[]),a(this,"throttleMap",new Map),a(this,"errorsSignal"),a(this,"setErrors");const[r,e]=d.createSignal([]);this.errorsSignal=r,this.setErrors=e,this.setupGlobalErrorHandlers()}static getInstance(){return c.instance||(c.instance=new c),c.instance}configure(r){this.config={...this.config,...r},r.development!==void 0&&h.globalDevTools.configure({enableErrors:r.development})}setupGlobalErrorHandlers(){typeof window>"u"||(window.addEventListener("error",r=>{if(!this.config.captureConsoleErrors)return;const e=this.createTachUIError(r.error||new Error(r.message),{category:"unknown_error",severity:"medium",context:{filename:r.filename,lineno:r.lineno,colno:r.colno}});this.reportError(e)}),window.addEventListener("unhandledrejection",r=>{if(!this.config.captureUnhandledPromises)return;const e=this.createTachUIError(r.reason instanceof Error?r.reason:new Error(String(r.reason)),{category:"network_error",severity:"medium",context:{type:"unhandled_promise_rejection"}});this.reportError(e)}))}createTachUIError(r,e={}){return{id:`error_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,message:r.message,stack:this.config.enableStackTrace?r.stack:void 0,cause:r,timestamp:Date.now(),category:e.category||"unknown_error",severity:e.severity||"medium",componentId:e.componentId,componentName:e.componentName,phase:e.phase,context:e.context,userAgent:typeof window<"u"?window.navigator.userAgent:void 0,url:typeof window<"u"?window.location.href:void 0,retryCount:0,recovered:!1}}reportError(r){if(!this.config.enabled)return;const e=`${r.category}_${r.message}`,t=this.throttleMap.get(e)||0,s=Date.now();s-t<this.config.reportingThrottle||(this.throttleMap.set(e,s),this.errors.push(r),this.errors.length>this.config.maxErrorsPerSession&&this.errors.shift(),this.cleanOldErrors(),this.setErrors([...this.errors]),p.globalPerformanceMonitor.isEnabled()&&p.globalPerformanceMonitor.recordMetric({name:"error_reported",value:1,unit:"count",timestamp:r.timestamp,category:"component",componentId:r.componentId}),this.reporters.forEach(n=>{try{n.report(r)}catch(l){console.error("Error reporter failed:",l)}}),this.handlers.forEach(n=>{try{n(r)}catch(l){console.error("Error handler failed:",l)}}),this.config.development&&(console.group(`🚨 TachUI Error [${r.category}]`),console.error(r.message),r.stack&&console.error(r.stack),r.context&&console.log("Context:",r.context),console.groupEnd()))}cleanOldErrors(){const r=Date.now()-this.config.maxErrorAge;this.errors=this.errors.filter(e=>e.timestamp>r)}addReporter(r){return this.reporters.push(r),()=>{const e=this.reporters.indexOf(r);e!==-1&&this.reporters.splice(e,1)}}addHandler(r){return this.handlers.push(r),()=>{const e=this.handlers.indexOf(r);e!==-1&&this.handlers.splice(e,1)}}getErrors(){return[...this.errors]}getErrorsSignal(){return this.errorsSignal}getErrorsByCategory(r){return this.errors.filter(e=>e.category===r)}getErrorsBySeverity(r){return this.errors.filter(e=>e.severity===r)}getErrorsByComponent(r){return this.errors.filter(e=>e.componentId===r)}markErrorRecovered(r){const e=this.errors.find(t=>t.id===r);e&&(e.recovered=!0,this.setErrors([...this.errors]))}clear(){this.errors.length=0,this.throttleMap.clear(),this.setErrors([])}getStatistics(){const r={},e={};for(const n of this.errors)r[n.category]=(r[n.category]||0)+1,e[n.severity]=(e[n.severity]||0)+1;const t=this.errors.filter(n=>n.recovered).length,s=this.errors.filter(n=>Date.now()-n.timestamp<300*1e3).length;return{totalErrors:this.errors.length,errorsByCategory:r,errorsBySeverity:e,recoveredErrors:t,recentErrors:s}}};a(f,"instance");let g=f;const i=g.getInstance();function y(o,r){return new u(o,r,i)}const w={console:{report(o){console.error(`[${o.category}] ${o.message}`,o)}},localStorage:{report(o){try{const r=JSON.parse(localStorage.getItem("tachui_errors")||"[]");r.push(o),r.length>50&&r.splice(0,r.length-50),localStorage.setItem("tachui_errors",JSON.stringify(r))}catch(r){console.error("Failed to store error in localStorage:",r)}}},createRemoteReporter(o,r){return{async report(e){try{const t={"Content-Type":"application/json"};r&&(t.Authorization=`Bearer ${r}`),await fetch(o,{method:"POST",headers:t,body:JSON.stringify(e)})}catch(t){console.error("Failed to report error to remote endpoint:",t)}}}}},S={withErrorHandling(o,r={}){return((...e)=>{try{return o(...e)}catch(t){const s=i.createTachUIError(t,{category:r.category||"unknown_error"});if(i.reportError(s),r.onError&&r.onError(s),r.fallback!==void 0)return r.fallback;throw t}})},withAsyncErrorHandling(o,r={}){return(async(...e)=>{try{return await o(...e)}catch(t){const s=i.createTachUIError(t,{category:r.category||"network_error"});if(i.reportError(s),r.onError&&r.onError(s),r.fallback!==void 0)return r.fallback;throw t}})},createSimpleErrorBoundary(o="Something went wrong"){return r=>y({fallback:(e,t)=>({type:"component",id:"error-fallback",props:{},render:()=>[{type:"element",tag:"div",props:{className:"simple-error-boundary"},children:[{type:"text",text:o}]}]}),recovery:[{strategy:"retry",maxRetries:3,retryDelay:1e3}]},r)}};exports.ErrorBoundary=u;exports.ErrorManager=g;exports.createErrorBoundary=y;exports.errorReporters=w;exports.errorUtils=S;exports.globalErrorManager=i;
|
|
2
|
-
//# sourceMappingURL=error-boundary.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error-boundary.cjs","sources":["../../src/runtime/error-boundary.ts"],"sourcesContent":["/**\n * Error Boundary and Error Handling System (Phase 3.2.3)\n *\n * Comprehensive error handling system for TachUI applications.\n * Provides error boundaries, recovery mechanisms, and error reporting.\n */\n\nimport { createEffect, createSignal } from '../reactive'\nimport { globalDevTools } from './dev-tools'\nimport { globalPerformanceMonitor } from './performance'\nimport type { ComponentInstance, ComponentProps, DOMNode } from './types'\n\n/**\n * Error severity levels\n */\nexport type ErrorSeverity = 'low' | 'medium' | 'high' | 'critical'\n\n/**\n * Error categories for classification\n */\nexport type ErrorCategory =\n | 'component_error' // Component rendering/lifecycle errors\n | 'reactive_error' // Signal/computed/effect errors\n | 'render_error' // DOM rendering errors\n | 'lifecycle_error' // Component lifecycle errors\n | 'network_error' // Network/async operation errors\n | 'validation_error' // Props/data validation errors\n | 'unknown_error' // Uncategorized errors\n\n/**\n * Comprehensive error information\n */\nexport interface TachUIError {\n id: string\n message: string\n stack?: string\n cause?: Error\n timestamp: number\n category: ErrorCategory\n severity: ErrorSeverity\n componentId?: string\n componentName?: string\n phase?: string\n context?: Record<string, any>\n userAgent?: string\n url?: string\n retryCount: number\n recovered: boolean\n}\n\n/**\n * Error boundary state\n */\nexport interface ErrorBoundaryState {\n hasError: boolean\n error: TachUIError | null\n errorInfo: {\n componentStack?: string\n errorBoundary?: string\n retryAttempts: number\n }\n}\n\n/**\n * Error recovery strategies\n */\nexport type ErrorRecoveryStrategy =\n | 'retry' // Retry the failed operation\n | 'fallback' // Show fallback content\n | 'reload' // Reload the component\n | 'redirect' // Navigate away\n | 'ignore' // Ignore the error\n | 'escalate' // Pass error to parent boundary\n\n/**\n * Error recovery configuration\n */\nexport interface ErrorRecoveryConfig {\n strategy: ErrorRecoveryStrategy\n maxRetries?: number\n retryDelay?: number\n fallbackComponent?: ComponentInstance\n onRecovery?: (error: TachUIError) => void\n condition?: (error: TachUIError) => boolean\n}\n\n/**\n * Error boundary props\n */\nexport interface ErrorBoundaryProps extends ComponentProps {\n fallback?: ComponentInstance | ((error: TachUIError, retry: () => void) => ComponentInstance)\n onError?: (error: TachUIError, errorInfo: ErrorBoundaryState['errorInfo']) => void\n recovery?: ErrorRecoveryConfig[]\n isolate?: boolean // Prevent error propagation to parent boundaries\n resetOnPropsChange?: boolean\n resetKeys?: string[] // Props that trigger error boundary reset\n}\n\n/**\n * Error reporter interface\n */\nexport interface ErrorReporter {\n report(error: TachUIError): void | Promise<void>\n}\n\n/**\n * Error handler function type\n */\nexport type ErrorHandler = (error: TachUIError) => void | Promise<void>\n\n/**\n * Global error handling configuration\n */\nexport interface ErrorHandlingConfig {\n enabled: boolean\n captureConsoleErrors: boolean\n captureUnhandledPromises: boolean\n captureReactiveErrors: boolean\n captureComponentErrors: boolean\n maxErrorsPerSession: number\n maxErrorAge: number // milliseconds\n reportingThrottle: number // milliseconds\n enableStackTrace: boolean\n enableSourceMap: boolean\n development: boolean\n}\n\n/**\n * Error boundary component implementation\n */\nexport class ErrorBoundary {\n private state: ErrorBoundaryState = {\n hasError: false,\n error: null,\n errorInfo: {\n retryAttempts: 0,\n },\n }\n\n private props: ErrorBoundaryProps\n private children: ComponentInstance[]\n private errorManager: ErrorManager\n\n // Reactive state\n private stateSignal: () => ErrorBoundaryState\n private setState: (value: ErrorBoundaryState) => void\n\n constructor(\n props: ErrorBoundaryProps,\n children: ComponentInstance[],\n errorManager: ErrorManager\n ) {\n this.props = props\n this.children = children\n this.errorManager = errorManager\n\n // Initialize reactive state\n const [stateSignal, setState] = createSignal<ErrorBoundaryState>(this.state)\n this.stateSignal = stateSignal\n this.setState = setState\n\n // Reset error boundary when specific props change\n if (props.resetOnPropsChange || props.resetKeys) {\n this.setupPropsWatcher()\n }\n }\n\n /**\n * Catch and handle errors in child components\n */\n componentDidCatch(error: Error, errorInfo: any): void {\n const tachUIError = this.errorManager.createTachUIError(error, {\n category: 'component_error',\n severity: 'high',\n componentId: this.props.id,\n componentName: 'ErrorBoundary',\n phase: 'render',\n context: errorInfo,\n })\n\n this.handleError(tachUIError, errorInfo)\n }\n\n /**\n * Handle error and determine recovery strategy\n */\n private handleError(error: TachUIError, errorInfo: any): void {\n const newState: ErrorBoundaryState = {\n hasError: true,\n error,\n errorInfo: {\n componentStack: errorInfo?.componentStack,\n errorBoundary: this.props.id || 'ErrorBoundary',\n retryAttempts: this.state.errorInfo.retryAttempts,\n },\n }\n\n this.state = newState\n this.setState(newState)\n\n // Report error\n if (this.props.onError) {\n this.props.onError(error, newState.errorInfo)\n }\n\n // Register with error manager\n this.errorManager.reportError(error)\n\n // Attempt recovery\n this.attemptRecovery(error)\n\n // Add to dev tools if enabled\n if (globalDevTools.isEnabled()) {\n const errorObj = new Error(error.message)\n errorObj.stack = error.stack\n globalDevTools.addError(error.componentId || 'unknown', errorObj)\n }\n }\n\n /**\n * Attempt error recovery based on configured strategies\n */\n private attemptRecovery(error: TachUIError): void {\n if (!this.props.recovery) return\n\n for (const config of this.props.recovery) {\n if (config.condition && !config.condition(error)) continue\n\n switch (config.strategy) {\n case 'retry':\n this.retryWithConfig(config)\n break\n case 'fallback':\n // Fallback is handled in render method\n break\n case 'reload':\n this.reloadComponent()\n break\n case 'ignore':\n this.resetErrorBoundary()\n break\n case 'escalate':\n if (!this.props.isolate) {\n throw error.cause || new Error(error.message)\n }\n break\n }\n\n if (config.onRecovery) {\n config.onRecovery(error)\n }\n\n break // Use first matching strategy\n }\n }\n\n /**\n * Retry failed operation with configuration\n */\n private retryWithConfig(config: ErrorRecoveryConfig): void {\n const maxRetries = config.maxRetries || 3\n const retryDelay = config.retryDelay || 1000\n\n if (this.state.errorInfo.retryAttempts >= maxRetries) {\n console.warn(`Max retry attempts (${maxRetries}) reached for error boundary`)\n return\n }\n\n setTimeout(() => {\n this.retry()\n }, retryDelay)\n }\n\n /**\n * Retry the failed operation\n */\n retry(): void {\n this.state.errorInfo.retryAttempts++\n this.resetErrorBoundary()\n }\n\n /**\n * Reset error boundary to normal state\n */\n resetErrorBoundary(): void {\n this.state = {\n hasError: false,\n error: null,\n errorInfo: {\n retryAttempts: this.state.errorInfo.retryAttempts,\n },\n }\n this.setState(this.state)\n }\n\n /**\n * Reload the component\n */\n private reloadComponent(): void {\n this.resetErrorBoundary()\n // Force re-render of children\n // This would need integration with the component system\n }\n\n /**\n * Setup props watcher for error boundary reset\n */\n private setupPropsWatcher(): void {\n if (this.props.resetKeys) {\n // Watch specific prop keys\n createEffect(() => {\n const currentProps = this.props\n if (this.state.hasError && this.shouldResetOnProps(currentProps)) {\n this.resetErrorBoundary()\n }\n })\n }\n }\n\n /**\n * Check if error boundary should reset based on props\n */\n private shouldResetOnProps(props: ErrorBoundaryProps): boolean {\n if (!this.props.resetKeys) return false\n\n // This is simplified - in real implementation would track previous props\n return this.props.resetKeys.some(\n (key) => key in props && props[key as keyof ErrorBoundaryProps] !== undefined\n )\n }\n\n /**\n * Render error boundary content\n */\n render(): DOMNode[] {\n if (this.state.hasError && this.state.error) {\n // Render fallback UI\n if (this.props.fallback) {\n if (typeof this.props.fallback === 'function') {\n const fallbackInstance = this.props.fallback(this.state.error, () => this.retry())\n const result = fallbackInstance.render ? fallbackInstance.render() : []\n return Array.isArray(result) ? result : [result]\n } else {\n const result = this.props.fallback.render ? this.props.fallback.render() : []\n return Array.isArray(result) ? result : [result]\n }\n }\n\n // Default error UI\n return this.renderDefaultErrorUI()\n }\n\n // Render children normally\n try {\n return this.children.flatMap((child) => {\n const result = child.render()\n return Array.isArray(result) ? result : [result]\n })\n } catch (error) {\n this.componentDidCatch(error as Error, { componentStack: 'children rendering' })\n return this.renderDefaultErrorUI()\n }\n }\n\n /**\n * Render default error UI\n */\n private renderDefaultErrorUI(): DOMNode[] {\n const error = this.state.error!\n\n return [\n {\n type: 'element',\n tag: 'div',\n props: {\n className: 'tachui-error-boundary',\n style: {\n padding: '20px',\n border: '2px solid #ff6b6b',\n borderRadius: '8px',\n backgroundColor: '#fff5f5',\n color: '#c92a2a',\n fontFamily: 'monospace',\n },\n },\n children: [\n {\n type: 'element',\n tag: 'h3',\n props: { style: { margin: '0 0 10px 0' } },\n children: [\n {\n type: 'text',\n text: '🚨 Something went wrong',\n },\n ],\n },\n {\n type: 'element',\n tag: 'p',\n props: { style: { margin: '0 0 15px 0' } },\n children: [\n {\n type: 'text',\n text: error.message,\n },\n ],\n },\n {\n type: 'element',\n tag: 'button',\n props: {\n onClick: () => this.retry(),\n style: {\n padding: '8px 16px',\n backgroundColor: '#4c6ef5',\n color: 'white',\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n },\n },\n children: [\n {\n type: 'text',\n text: `Retry (${this.state.errorInfo.retryAttempts} attempts)`,\n },\n ],\n },\n ],\n },\n ]\n }\n\n /**\n * Get current error boundary state\n */\n getState(): ErrorBoundaryState {\n return this.state\n }\n\n /**\n * Get reactive state signal\n */\n getStateSignal(): () => ErrorBoundaryState {\n return this.stateSignal\n }\n}\n\n/**\n * Global error manager\n */\nexport class ErrorManager {\n private static instance: ErrorManager\n\n private config: ErrorHandlingConfig = {\n enabled: true,\n captureConsoleErrors: true,\n captureUnhandledPromises: true,\n captureReactiveErrors: true,\n captureComponentErrors: true,\n maxErrorsPerSession: 100,\n maxErrorAge: 30 * 60 * 1000, // 30 minutes\n reportingThrottle: 1000, // 1 second\n enableStackTrace: true,\n enableSourceMap: false,\n development: false,\n }\n\n private errors: TachUIError[] = []\n private reporters: ErrorReporter[] = []\n private handlers: ErrorHandler[] = []\n private throttleMap = new Map<string, number>()\n\n // Reactive state\n private errorsSignal: () => TachUIError[]\n private setErrors: (value: TachUIError[]) => void\n\n constructor() {\n // Initialize reactive state\n const [errorsSignal, setErrors] = createSignal<TachUIError[]>([])\n this.errorsSignal = errorsSignal\n this.setErrors = setErrors\n\n this.setupGlobalErrorHandlers()\n }\n\n static getInstance(): ErrorManager {\n if (!ErrorManager.instance) {\n ErrorManager.instance = new ErrorManager()\n }\n return ErrorManager.instance\n }\n\n /**\n * Configure error handling\n */\n configure(config: Partial<ErrorHandlingConfig>): void {\n this.config = { ...this.config, ...config }\n\n if (config.development !== undefined) {\n globalDevTools.configure({ enableErrors: config.development })\n }\n }\n\n /**\n * Setup global error handlers\n */\n private setupGlobalErrorHandlers(): void {\n if (typeof window === 'undefined') return\n\n // Capture unhandled errors\n window.addEventListener('error', (event) => {\n if (!this.config.captureConsoleErrors) return\n\n const error = this.createTachUIError(event.error || new Error(event.message), {\n category: 'unknown_error',\n severity: 'medium',\n context: {\n filename: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n },\n })\n\n this.reportError(error)\n })\n\n // Capture unhandled promise rejections\n window.addEventListener('unhandledrejection', (event) => {\n if (!this.config.captureUnhandledPromises) return\n\n const error = this.createTachUIError(\n event.reason instanceof Error ? event.reason : new Error(String(event.reason)),\n {\n category: 'network_error',\n severity: 'medium',\n context: { type: 'unhandled_promise_rejection' },\n }\n )\n\n this.reportError(error)\n })\n }\n\n /**\n * Create standardized TachUI error\n */\n createTachUIError(\n error: Error,\n options: {\n category?: ErrorCategory\n severity?: ErrorSeverity\n componentId?: string\n componentName?: string\n phase?: string\n context?: Record<string, any>\n } = {}\n ): TachUIError {\n return {\n id: `error_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n message: error.message,\n stack: this.config.enableStackTrace ? error.stack : undefined,\n cause: error,\n timestamp: Date.now(),\n category: options.category || 'unknown_error',\n severity: options.severity || 'medium',\n componentId: options.componentId,\n componentName: options.componentName,\n phase: options.phase,\n context: options.context,\n userAgent: typeof window !== 'undefined' ? window.navigator.userAgent : undefined,\n url: typeof window !== 'undefined' ? window.location.href : undefined,\n retryCount: 0,\n recovered: false,\n }\n }\n\n /**\n * Report error to all registered reporters\n */\n reportError(error: TachUIError): void {\n if (!this.config.enabled) return\n\n // Throttle reporting to prevent spam\n const throttleKey = `${error.category}_${error.message}`\n const lastReport = this.throttleMap.get(throttleKey) || 0\n const now = Date.now()\n\n if (now - lastReport < this.config.reportingThrottle) {\n return\n }\n\n this.throttleMap.set(throttleKey, now)\n\n // Add to errors array\n this.errors.push(error)\n\n // Limit errors array size\n if (this.errors.length > this.config.maxErrorsPerSession) {\n this.errors.shift()\n }\n\n // Clean old errors\n this.cleanOldErrors()\n\n // Update reactive signal\n this.setErrors([...this.errors])\n\n // Track with performance monitor\n if (globalPerformanceMonitor.isEnabled()) {\n globalPerformanceMonitor.recordMetric({\n name: 'error_reported',\n value: 1,\n unit: 'count',\n timestamp: error.timestamp,\n category: 'component',\n componentId: error.componentId,\n })\n }\n\n // Call reporters\n this.reporters.forEach((reporter) => {\n try {\n reporter.report(error)\n } catch (reporterError) {\n console.error('Error reporter failed:', reporterError)\n }\n })\n\n // Call handlers\n this.handlers.forEach((handler) => {\n try {\n handler(error)\n } catch (handlerError) {\n console.error('Error handler failed:', handlerError)\n }\n })\n\n // Log to console in development\n if (this.config.development) {\n console.group(`🚨 TachUI Error [${error.category}]`)\n console.error(error.message)\n if (error.stack) console.error(error.stack)\n if (error.context) console.log('Context:', error.context)\n console.groupEnd()\n }\n }\n\n /**\n * Clean old errors based on max age\n */\n private cleanOldErrors(): void {\n const cutoff = Date.now() - this.config.maxErrorAge\n this.errors = this.errors.filter((error) => error.timestamp > cutoff)\n }\n\n /**\n * Add error reporter\n */\n addReporter(reporter: ErrorReporter): () => void {\n this.reporters.push(reporter)\n\n return () => {\n const index = this.reporters.indexOf(reporter)\n if (index !== -1) {\n this.reporters.splice(index, 1)\n }\n }\n }\n\n /**\n * Add error handler\n */\n addHandler(handler: ErrorHandler): () => void {\n this.handlers.push(handler)\n\n return () => {\n const index = this.handlers.indexOf(handler)\n if (index !== -1) {\n this.handlers.splice(index, 1)\n }\n }\n }\n\n /**\n * Get all errors\n */\n getErrors(): TachUIError[] {\n return [...this.errors]\n }\n\n /**\n * Get errors signal\n */\n getErrorsSignal(): () => TachUIError[] {\n return this.errorsSignal\n }\n\n /**\n * Get errors by category\n */\n getErrorsByCategory(category: ErrorCategory): TachUIError[] {\n return this.errors.filter((error) => error.category === category)\n }\n\n /**\n * Get errors by severity\n */\n getErrorsBySeverity(severity: ErrorSeverity): TachUIError[] {\n return this.errors.filter((error) => error.severity === severity)\n }\n\n /**\n * Get errors by component\n */\n getErrorsByComponent(componentId: string): TachUIError[] {\n return this.errors.filter((error) => error.componentId === componentId)\n }\n\n /**\n * Mark error as recovered\n */\n markErrorRecovered(errorId: string): void {\n const error = this.errors.find((e) => e.id === errorId)\n if (error) {\n error.recovered = true\n this.setErrors([...this.errors])\n }\n }\n\n /**\n * Clear all errors\n */\n clear(): void {\n this.errors.length = 0\n this.throttleMap.clear()\n this.setErrors([])\n }\n\n /**\n * Get error statistics\n */\n getStatistics(): {\n totalErrors: number\n errorsByCategory: Record<ErrorCategory, number>\n errorsBySeverity: Record<ErrorSeverity, number>\n recoveredErrors: number\n recentErrors: number\n } {\n const errorsByCategory = {} as Record<ErrorCategory, number>\n const errorsBySeverity = {} as Record<ErrorSeverity, number>\n\n for (const error of this.errors) {\n errorsByCategory[error.category] = (errorsByCategory[error.category] || 0) + 1\n errorsBySeverity[error.severity] = (errorsBySeverity[error.severity] || 0) + 1\n }\n\n const recoveredErrors = this.errors.filter((e) => e.recovered).length\n const recentErrors = this.errors.filter(\n (e) => Date.now() - e.timestamp < 5 * 60 * 1000 // Last 5 minutes\n ).length\n\n return {\n totalErrors: this.errors.length,\n errorsByCategory,\n errorsBySeverity,\n recoveredErrors,\n recentErrors,\n }\n }\n}\n\n/**\n * Global error manager instance\n */\nexport const globalErrorManager = ErrorManager.getInstance()\n\n/**\n * Create error boundary component\n */\nexport function createErrorBoundary(\n props: ErrorBoundaryProps,\n children: ComponentInstance[]\n): ErrorBoundary {\n return new ErrorBoundary(props, children, globalErrorManager)\n}\n\n/**\n * Built-in error reporters\n */\nexport const errorReporters = {\n /**\n * Console reporter\n */\n console: {\n report(error: TachUIError): void {\n console.error(`[${error.category}] ${error.message}`, error)\n },\n } as ErrorReporter,\n\n /**\n * Local storage reporter\n */\n localStorage: {\n report(error: TachUIError): void {\n try {\n const stored = JSON.parse(localStorage.getItem('tachui_errors') || '[]')\n stored.push(error)\n\n // Keep only last 50 errors\n if (stored.length > 50) {\n stored.splice(0, stored.length - 50)\n }\n\n localStorage.setItem('tachui_errors', JSON.stringify(stored))\n } catch (e) {\n console.error('Failed to store error in localStorage:', e)\n }\n },\n } as ErrorReporter,\n\n /**\n * Remote API reporter\n */\n createRemoteReporter(endpoint: string, apiKey?: string): ErrorReporter {\n return {\n async report(error: TachUIError): Promise<void> {\n try {\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n }\n\n if (apiKey) {\n headers.Authorization = `Bearer ${apiKey}`\n }\n\n await fetch(endpoint, {\n method: 'POST',\n headers,\n body: JSON.stringify(error),\n })\n } catch (e) {\n console.error('Failed to report error to remote endpoint:', e)\n }\n },\n }\n },\n}\n\n/**\n * Error handling utilities\n */\nexport const errorUtils = {\n /**\n * Wrap function with error handling\n */\n withErrorHandling<T extends (...args: any[]) => any>(\n fn: T,\n options: {\n category?: ErrorCategory\n onError?: (error: TachUIError) => void\n fallback?: ReturnType<T>\n } = {}\n ): T {\n return ((...args: Parameters<T>): ReturnType<T> => {\n try {\n return fn(...args)\n } catch (error) {\n const tachUIError = globalErrorManager.createTachUIError(error as Error, {\n category: options.category || 'unknown_error',\n })\n\n globalErrorManager.reportError(tachUIError)\n\n if (options.onError) {\n options.onError(tachUIError)\n }\n\n if (options.fallback !== undefined) {\n return options.fallback\n }\n\n throw error\n }\n }) as T\n },\n\n /**\n * Wrap async function with error handling\n */\n withAsyncErrorHandling<T extends (...args: any[]) => Promise<any>>(\n fn: T,\n options: {\n category?: ErrorCategory\n onError?: (error: TachUIError) => void\n fallback?: Awaited<ReturnType<T>>\n } = {}\n ): T {\n return (async (...args: Parameters<T>): Promise<Awaited<ReturnType<T>>> => {\n try {\n return await fn(...args)\n } catch (error) {\n const tachUIError = globalErrorManager.createTachUIError(error as Error, {\n category: options.category || 'network_error',\n })\n\n globalErrorManager.reportError(tachUIError)\n\n if (options.onError) {\n options.onError(tachUIError)\n }\n\n if (options.fallback !== undefined) {\n return options.fallback\n }\n\n throw error\n }\n }) as T\n },\n\n /**\n * Create error boundary with common configurations\n */\n createSimpleErrorBoundary(\n fallbackMessage: string = 'Something went wrong'\n ): (children: ComponentInstance[]) => ErrorBoundary {\n return (children: ComponentInstance[]) =>\n createErrorBoundary(\n {\n fallback: (_error, _retry) => ({\n type: 'component',\n id: 'error-fallback',\n props: {},\n render: () => [\n {\n type: 'element',\n tag: 'div',\n props: { className: 'simple-error-boundary' },\n children: [\n {\n type: 'text',\n text: fallbackMessage,\n },\n ],\n },\n ],\n }),\n recovery: [{ strategy: 'retry', maxRetries: 3, retryDelay: 1000 }],\n },\n children\n )\n },\n}\n"],"names":["ErrorBoundary","props","children","errorManager","__publicField","stateSignal","setState","createSignal","error","errorInfo","tachUIError","newState","globalDevTools","errorObj","config","maxRetries","retryDelay","createEffect","currentProps","key","fallbackInstance","result","child","_ErrorManager","errorsSignal","setErrors","event","options","throttleKey","lastReport","now","globalPerformanceMonitor","reporter","reporterError","handler","handlerError","cutoff","index","category","severity","componentId","errorId","e","errorsByCategory","errorsBySeverity","recoveredErrors","recentErrors","ErrorManager","globalErrorManager","createErrorBoundary","errorReporters","stored","endpoint","apiKey","headers","errorUtils","fn","args","fallbackMessage","_error","_retry"],"mappings":"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"}
|