@synetics/ui 0.7.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/.env +3 -0
- package/.eslintrc.cjs +83 -0
- package/.eslintrc.json +53 -0
- package/.github/workflows/deploy.yml +7 -0
- package/.turbo/turbo-build.log +3 -0
- package/CONTRIBUTING.md +47 -0
- package/FIXES-IMPLEMENTATION-LOG.md +180 -0
- package/LICENSE +21 -0
- package/README.md +414 -0
- package/ROADMAP.md +112 -0
- package/TEST-DOCUMENTATION.md +67 -0
- package/TEST-FAILURE-ANALYSIS.md +326 -0
- package/console-mirror.html +79 -0
- package/control-flow-transformed.js +10129 -0
- package/daily-push.log +9 -0
- package/debug-router.html +54 -0
- package/debug-screenshot.png +0 -0
- package/dev-error.log +84 -0
- package/dev-output.log +10689 -0
- package/docs/README.md +527 -0
- package/e2e-results.txt +0 -0
- package/error-boundary-output.js +353 -0
- package/final-test.txt +2816 -0
- package/index.html +41 -0
- package/latest-test.txt +2900 -0
- package/package.json +68 -0
- package/parse-debug.txt +10 -0
- package/ping.txt +1 -0
- package/playwright.config.ts +25 -0
- package/postcss.config.js +6 -0
- package/pre-validation-code.js +25 -0
- package/reactivity-output.txt +0 -0
- package/reactivity-page.html +0 -0
- package/return-parse-test.txt +139 -0
- package/run-psr-test.ps1 +65 -0
- package/src/README.md +138 -0
- package/src/components/app-footer.syn +17 -0
- package/src/components/app-header.syn +43 -0
- package/src/components/atoms/avatar/avatar-simple.syn +25 -0
- package/src/components/atoms/avatar/avatar.syn +86 -0
- package/src/components/atoms/avatar/avatar.type.ts +39 -0
- package/src/components/atoms/avatar/index.ts +7 -0
- package/src/components/atoms/checkbox/checkbox.syn +72 -0
- package/src/components/atoms/checkbox/checkbox.type.ts +25 -0
- package/src/components/atoms/checkbox/index.ts +6 -0
- package/src/components/atoms/container/container.syn +53 -0
- package/src/components/atoms/container/container.type.ts +32 -0
- package/src/components/atoms/container/index.ts +7 -0
- package/src/components/atoms/divider/divider.syn +45 -0
- package/src/components/atoms/divider/divider.type.ts +24 -0
- package/src/components/atoms/divider/index.ts +7 -0
- package/src/components/atoms/grid/grid.syn +56 -0
- package/src/components/atoms/grid/grid.type.ts +44 -0
- package/src/components/atoms/grid/index.ts +7 -0
- package/src/components/atoms/icon/icon.syn +0 -0
- package/src/components/atoms/icon/icon.type.ts +5 -0
- package/src/components/atoms/input/index.ts +6 -0
- package/src/components/atoms/input/input.syn +75 -0
- package/src/components/atoms/input/input.type.ts +29 -0
- package/src/components/atoms/progress/index.ts +7 -0
- package/src/components/atoms/progress/progress.syn +68 -0
- package/src/components/atoms/progress/progress.type.ts +48 -0
- package/src/components/atoms/radio/index.ts +6 -0
- package/src/components/atoms/radio/radio.syn +72 -0
- package/src/components/atoms/radio/radio.type.ts +31 -0
- package/src/components/atoms/rating/index.ts +6 -0
- package/src/components/atoms/rating/rating.syn +119 -0
- package/src/components/atoms/rating/rating.type.ts +53 -0
- package/src/components/atoms/skeleton/index.ts +6 -0
- package/src/components/atoms/skeleton/skeleton.syn +31 -0
- package/src/components/atoms/skeleton/skeleton.type.ts +12 -0
- package/src/components/atoms/slider/index.ts +6 -0
- package/src/components/atoms/slider/slider.syn +101 -0
- package/src/components/atoms/slider/slider.type.ts +54 -0
- package/src/components/atoms/spinner/index.ts +6 -0
- package/src/components/atoms/spinner/spinner.syn +39 -0
- package/src/components/atoms/spinner/spinner.type.ts +40 -0
- package/src/components/atoms/stack/index.ts +7 -0
- package/src/components/atoms/stack/stack.syn +79 -0
- package/src/components/atoms/stack/stack.type.ts +42 -0
- package/src/components/atoms/textarea/index.ts +6 -0
- package/src/components/atoms/textarea/textarea.syn +78 -0
- package/src/components/atoms/textarea/textarea.type.ts +28 -0
- package/src/components/atoms/toggle/index.ts +6 -0
- package/src/components/atoms/toggle/toggle.syn +69 -0
- package/src/components/atoms/toggle/toggle.type.ts +27 -0
- package/src/components/atoms/tooltip/index.ts +5 -0
- package/src/components/atoms/tooltip/tooltip.syn +83 -0
- package/src/components/atoms/tooltip/tooltip.type.ts +36 -0
- package/src/components/atoms/typography/index.ts +6 -0
- package/src/components/atoms/typography/typography.syn +113 -0
- package/src/components/atoms/typography/typography.type.ts +36 -0
- package/src/components/enums/alert-variant.type.ts +5 -0
- package/src/components/enums/avatar-size.type.ts +5 -0
- package/src/components/enums/button-type.type.ts +5 -0
- package/src/components/enums/container-max-width.type.ts +5 -0
- package/src/components/enums/container-padding.type.ts +5 -0
- package/src/components/enums/divider-orientation.type.ts +5 -0
- package/src/components/enums/drawer-placement.type.ts +5 -0
- package/src/components/enums/drawer-size.type.ts +5 -0
- package/src/components/enums/icon-position.type.ts +5 -0
- package/src/components/enums/index.ts +27 -0
- package/src/components/enums/input-type.type.ts +5 -0
- package/src/components/enums/modal-size.type.ts +5 -0
- package/src/components/enums/popover-placement.type.ts +5 -0
- package/src/components/enums/popover-trigger.type.ts +5 -0
- package/src/components/enums/progress-size.type.ts +5 -0
- package/src/components/enums/progress-variant.type.ts +5 -0
- package/src/components/enums/readme.md +1 -0
- package/src/components/enums/spacing.type.ts +5 -0
- package/src/components/enums/stack-align.type.ts +5 -0
- package/src/components/enums/stack-justify.type.ts +11 -0
- package/src/components/enums/toast-position.type.ts +11 -0
- package/src/components/enums/toast-variant.type.ts +5 -0
- package/src/components/enums/tooltip-placement.type.ts +5 -0
- package/src/components/enums/typography-tag.type.ts +5 -0
- package/src/components/enums/typography-variant.type.ts +5 -0
- package/src/components/formular/components/debug/form-data-display.syn +155 -0
- package/src/components/formular/components/examples/advanced-text-field.syn +211 -0
- package/src/components/formular/components/form-context/form-context.ts +15 -0
- package/src/components/formular/components/form-context/index.ts +6 -0
- package/src/components/formular/components/form-context/use-form-context.ts +31 -0
- package/src/components/formular/components/form-provider/form-provider.syn +182 -0
- package/src/components/formular/components/form-provider/index.ts +5 -0
- package/src/components/formular/components/index.ts +20 -0
- package/src/components/formular/components/integrated/checkbox-field.syn +50 -0
- package/src/components/formular/components/integrated/checkbox.syn +53 -0
- package/src/components/formular/components/integrated/index.ts +21 -0
- package/src/components/formular/components/integrated/input-field.syn +51 -0
- package/src/components/formular/components/integrated/radio-group-field.syn +68 -0
- package/src/components/formular/components/integrated/radio-group.syn +63 -0
- package/src/components/formular/components/integrated/select-field.syn +51 -0
- package/src/components/formular/components/integrated/select-input.syn +73 -0
- package/src/components/formular/components/integrated/text-field.syn +49 -0
- package/src/components/formular/components/integrated/textarea-field.syn +51 -0
- package/src/components/formular/components/integrated/textarea-input.syn +73 -0
- package/src/components/formular/components/integrated/toggle-field.syn +50 -0
- package/src/components/formular/components/integrated/toggle.syn +53 -0
- package/src/components/formular/components/modal/error-message.syn +21 -0
- package/src/components/formular/components/modal/form-modale.syn +44 -0
- package/src/components/formular/components/modal/form-validation-results.syn +46 -0
- package/src/components/formular/components/modal/guide-message.syn +21 -0
- package/src/components/formular/components/modal/index.ts +10 -0
- package/src/components/formular/components/modal/use-modale.ts +82 -0
- package/src/components/formular/components/modal/validation-results.syn +63 -0
- package/src/components/formular/components/primitives/f-checkbox-field.syn +50 -0
- package/src/components/formular/components/primitives/f-input-field.syn +77 -0
- package/src/components/formular/components/primitives/f-radio-button.syn +64 -0
- package/src/components/formular/components/primitives/f-select-field.syn +61 -0
- package/src/components/formular/components/primitives/f-textarea-field.syn +53 -0
- package/src/components/formular/components/primitives/f-toggle-field.syn +50 -0
- package/src/components/formular/components/primitives/field-label.syn +49 -0
- package/src/components/formular/components/primitives/helper-text.syn +32 -0
- package/src/components/formular/components/primitives/index.ts +32 -0
- package/src/components/formular/components/primitives/validation-results.syn +76 -0
- package/src/components/formular/hooks/bindings/field-bindings.type.ts +58 -0
- package/src/components/formular/hooks/bindings/index.ts +16 -0
- package/src/components/formular/hooks/bindings/use-checkbox-bind.ts +31 -0
- package/src/components/formular/hooks/bindings/use-input-bind.ts +31 -0
- package/src/components/formular/hooks/bindings/use-radio-bind.ts +39 -0
- package/src/components/formular/hooks/bindings/use-select-bind.ts +32 -0
- package/src/components/formular/hooks/bindings/use-textarea-bind.ts +31 -0
- package/src/components/formular/hooks/bindings/use-toggle-bind.ts +31 -0
- package/src/components/formular/hooks/index.ts +28 -0
- package/src/components/formular/hooks/use-field-validation.ts +42 -0
- package/src/components/formular/hooks/use-field.ts +282 -0
- package/src/components/formular/hooks/use-formular-signal.ts +29 -0
- package/src/components/formular/index.ts +3 -0
- package/src/components/formular/types/field-component.type.ts +78 -0
- package/src/components/formular/types/field-descriptor-config.type.ts +79 -0
- package/src/components/formular/types/form-context.type.ts +67 -0
- package/src/components/formular/types/form-provider.type.ts +67 -0
- package/src/components/formular/types/formular.types.ts +49 -0
- package/src/components/formular/types/index.ts +78 -0
- package/src/components/formular/types/portal.type.ts +36 -0
- package/src/components/formular/utils/dev-logger.ts +44 -0
- package/src/components/formular/utils/index.ts +23 -0
- package/src/components/formular/utils/use-field-descriptors.ts +75 -0
- package/src/components/formular/utils/use-formular-manager.ts +37 -0
- package/src/components/hooks/use-drawer-position.ts +91 -0
- package/src/components/interfaces/component-config-internal.interface.ts +10 -0
- package/src/components/interfaces/component-config.interface.ts +57 -0
- package/src/components/interfaces/component-config.ts +151 -0
- package/src/components/interfaces/index.ts +7 -0
- package/src/components/interfaces/prototype/active.ts +13 -0
- package/src/components/interfaces/prototype/border.ts +13 -0
- package/src/components/interfaces/prototype/build.ts +31 -0
- package/src/components/interfaces/prototype/class-name.ts +13 -0
- package/src/components/interfaces/prototype/disabled.ts +13 -0
- package/src/components/interfaces/prototype/focus.ts +13 -0
- package/src/components/interfaces/prototype/full-width.ts +13 -0
- package/src/components/interfaces/prototype/hover.ts +13 -0
- package/src/components/interfaces/prototype/loading.ts +13 -0
- package/src/components/interfaces/prototype/rounded.ts +13 -0
- package/src/components/interfaces/prototype/shadow.ts +13 -0
- package/src/components/interfaces/prototype/size.ts +14 -0
- package/src/components/interfaces/prototype/transition-duration.ts +13 -0
- package/src/components/interfaces/prototype/transition.ts +13 -0
- package/src/components/interfaces/prototype/variant.ts +14 -0
- package/src/components/interfaces/readme.md +1 -0
- package/src/components/molecules/accordion/accordion-item.syn +80 -0
- package/src/components/molecules/accordion/accordion-item.type.ts +28 -0
- package/src/components/molecules/accordion/accordion.syn +92 -0
- package/src/components/molecules/accordion/accordion.type.ts +29 -0
- package/src/components/molecules/accordion/index.ts +8 -0
- package/src/components/molecules/alert/alert-description.syn +23 -0
- package/src/components/molecules/alert/alert-description.type.ts +9 -0
- package/src/components/molecules/alert/alert-icon.syn +19 -0
- package/src/components/molecules/alert/alert-icon.type.ts +9 -0
- package/src/components/molecules/alert/alert-title.syn +19 -0
- package/src/components/molecules/alert/alert-title.type.ts +9 -0
- package/src/components/molecules/alert/alert.syn +76 -0
- package/src/components/molecules/alert/alert.type.ts +17 -0
- package/src/components/molecules/alert/index.ts +12 -0
- package/src/components/molecules/badge/badge.syn +66 -0
- package/src/components/molecules/badge/badge.type.ts +25 -0
- package/src/components/molecules/badge/index.ts +6 -0
- package/src/components/molecules/breadcrumbs/breadcrumb-item.type.ts +23 -0
- package/src/components/molecules/breadcrumbs/breadcrumbs.syn +60 -0
- package/src/components/molecules/breadcrumbs/breadcrumbs.type.ts +18 -0
- package/src/components/molecules/breadcrumbs/index.ts +8 -0
- package/src/components/molecules/button/button.syn +124 -0
- package/src/components/molecules/button/button.type.ts +24 -0
- package/src/components/molecules/button/index.ts +9 -0
- package/src/components/molecules/dropdown/dropdown-item.syn +30 -0
- package/src/components/molecules/dropdown/dropdown-item.type.ts +11 -0
- package/src/components/molecules/dropdown/dropdown.syn +135 -0
- package/src/components/molecules/dropdown/dropdown.type.ts +12 -0
- package/src/components/molecules/dropdown/index.ts +8 -0
- package/src/components/molecules/label/index.ts +6 -0
- package/src/components/molecules/label/label.syn +72 -0
- package/src/components/molecules/label/label.type.ts +28 -0
- package/src/components/molecules/list/index.ts +8 -0
- package/src/components/molecules/list/list-item.syn +33 -0
- package/src/components/molecules/list/list-item.type.ts +10 -0
- package/src/components/molecules/list/list.syn +54 -0
- package/src/components/molecules/list/list.type.ts +17 -0
- package/src/components/molecules/menu/index.ts +10 -0
- package/src/components/molecules/menu/menu-divider.syn +21 -0
- package/src/components/molecules/menu/menu-divider.type.ts +8 -0
- package/src/components/molecules/menu/menu-item.syn +56 -0
- package/src/components/molecules/menu/menu-item.type.ts +12 -0
- package/src/components/molecules/menu/menu.syn +78 -0
- package/src/components/molecules/menu/menu.type.ts +14 -0
- package/src/components/molecules/option/index.ts +6 -0
- package/src/components/molecules/option/option.syn +41 -0
- package/src/components/molecules/option/option.type.ts +23 -0
- package/src/components/molecules/pagination/index.ts +7 -0
- package/src/components/molecules/pagination/pagination.syn +123 -0
- package/src/components/molecules/pagination/pagination.type.ts +34 -0
- package/src/components/molecules/popover/index.ts +6 -0
- package/src/components/molecules/popover/popover.syn +88 -0
- package/src/components/molecules/popover/popover.type.ts +20 -0
- package/src/components/molecules/radio-group/index.ts +7 -0
- package/src/components/molecules/radio-group/radio-group.syn +79 -0
- package/src/components/molecules/radio-group/radio-group.type.ts +29 -0
- package/src/components/molecules/radio-group/radio-option.type.ts +9 -0
- package/src/components/molecules/tabs/index.ts +14 -0
- package/src/components/molecules/tabs/tab-list.syn +70 -0
- package/src/components/molecules/tabs/tab-list.type.ts +9 -0
- package/src/components/molecules/tabs/tab-panel.syn +34 -0
- package/src/components/molecules/tabs/tab-panel.type.ts +11 -0
- package/src/components/molecules/tabs/tab-panels.syn +40 -0
- package/src/components/molecules/tabs/tab-panels.type.ts +9 -0
- package/src/components/molecules/tabs/tab.syn +52 -0
- package/src/components/molecules/tabs/tab.type.ts +13 -0
- package/src/components/molecules/tabs/tabs.syn +74 -0
- package/src/components/molecules/tabs/tabs.type.ts +17 -0
- package/src/components/organisms/card/card.syn +64 -0
- package/src/components/organisms/card/card.type.ts +25 -0
- package/src/components/organisms/card/index.ts +6 -0
- package/src/components/organisms/commands/commands.syn +0 -0
- package/src/components/organisms/commands/commands.type.ts +1 -0
- package/src/components/organisms/date-picker/components/date-picker.body.days.syn +98 -0
- package/src/components/organisms/date-picker/components/date-picker.body.months.syn +77 -0
- package/src/components/organisms/date-picker/components/date-picker.body.years.syn +86 -0
- package/src/components/organisms/date-picker/components/date-picker.cell.syn +104 -0
- package/src/components/organisms/date-picker/components/date-picker.context.ts +36 -0
- package/src/components/organisms/date-picker/components/date-picker.drawer.content.ui.syn +93 -0
- package/src/components/organisms/date-picker/components/date-picker.header.syn +130 -0
- package/src/components/organisms/date-picker/components/date-picker.switch.syn +27 -0
- package/src/components/organisms/date-picker/core/computed/compute-days-grid.ts +46 -0
- package/src/components/organisms/date-picker/core/computed/compute-months-grid.ts +43 -0
- package/src/components/organisms/date-picker/core/computed/compute-range.ts +36 -0
- package/src/components/organisms/date-picker/core/computed/compute-years-grid.ts +56 -0
- package/src/components/organisms/date-picker/core/constructors/create-cell.ts +37 -0
- package/src/components/organisms/date-picker/core/date-picker.types.ts +41 -0
- package/src/components/organisms/date-picker/core/getters/get-current-month-days.ts +35 -0
- package/src/components/organisms/date-picker/core/getters/get-next-date.ts +32 -0
- package/src/components/organisms/date-picker/core/getters/get-next-month-days.ts +23 -0
- package/src/components/organisms/date-picker/core/getters/get-previous-date.ts +32 -0
- package/src/components/organisms/date-picker/core/getters/get-previous-month-days.ts +32 -0
- package/src/components/organisms/date-picker/core/models/date-picker.models.constructors.ts +36 -0
- package/src/components/organisms/date-picker/core/models/date-picker.models.ts +46 -0
- package/src/components/organisms/date-picker/core/system/get-local-system-separator.ts +5 -0
- package/src/components/organisms/date-picker/date-picker.css +426 -0
- package/src/components/organisms/date-picker/date-picker.drawer.content.syn +238 -0
- package/src/components/organisms/date-picker/date-picker.stories.syn +275 -0
- package/src/components/organisms/date-picker/date-picker.syn +298 -0
- package/src/components/organisms/date-picker/examples.syn +197 -0
- package/src/components/organisms/date-picker/hooks/use-object-ref.ts +18 -0
- package/src/components/organisms/date-picker/index.ts +23 -0
- package/src/components/organisms/date-picker/internal-components/button.syn +36 -0
- package/src/components/organisms/date-picker/internal-components/icons.syn +76 -0
- package/src/components/organisms/date-picker/internal-components/portal.syn +62 -0
- package/src/components/organisms/date-picker/toggleable/toggleable.context.hook.ts +14 -0
- package/src/components/organisms/date-picker/toggleable/toggleable.context.ts +6 -0
- package/src/components/organisms/date-picker/toggleable/toggleable.syn +37 -0
- package/src/components/organisms/date-picker/utils/class-utils.ts +25 -0
- package/src/components/organisms/date-picker/utils/date-object.ts +42 -0
- package/src/components/organisms/date-picker/utils/date-utils.ts +112 -0
- package/src/components/organisms/drawer/drawer.syn +112 -0
- package/src/components/organisms/drawer/drawer.type.ts +53 -0
- package/src/components/organisms/drawer/index.ts +6 -0
- package/src/components/organisms/footer/footer.syn +53 -0
- package/src/components/organisms/footer/footer.type.ts +20 -0
- package/src/components/organisms/footer/index.ts +6 -0
- package/src/components/organisms/header/header.syn +52 -0
- package/src/components/organisms/header/header.type.ts +24 -0
- package/src/components/organisms/header/index.ts +6 -0
- package/src/components/organisms/modal/index.ts +12 -0
- package/src/components/organisms/modal/modal-body.syn +19 -0
- package/src/components/organisms/modal/modal-body.type.ts +9 -0
- package/src/components/organisms/modal/modal-footer.syn +25 -0
- package/src/components/organisms/modal/modal-footer.type.ts +9 -0
- package/src/components/organisms/modal/modal-header.syn +25 -0
- package/src/components/organisms/modal/modal-header.type.ts +9 -0
- package/src/components/organisms/modal/modal-parts.syn +21 -0
- package/src/components/organisms/modal/modal.syn +104 -0
- package/src/components/organisms/modal/modal.type.ts +15 -0
- package/src/components/organisms/retractable-panel/retractable-panel.syn +141 -0
- package/src/components/organisms/retractable-panel/retractable-panel.type.ts +52 -0
- package/src/components/organisms/select/index.ts +7 -0
- package/src/components/organisms/select/select-option.type.ts +9 -0
- package/src/components/organisms/select/select.syn +92 -0
- package/src/components/organisms/select/select.type.ts +31 -0
- package/src/components/organisms/stepper/INTEGRATION_GUIDE.md +230 -0
- package/src/components/organisms/stepper/PACKAGE_STATUS.md +180 -0
- package/src/components/organisms/stepper/README.md +293 -0
- package/src/components/organisms/stepper/Step.syn +61 -0
- package/src/components/organisms/stepper/Stepper.syn +605 -0
- package/src/components/organisms/stepper/StepperSummary.syn +36 -0
- package/src/components/organisms/stepper/adapters/atomosFormAdapter.ts +163 -0
- package/src/components/organisms/stepper/adapters/index.ts +7 -0
- package/src/components/organisms/stepper/adapters/rhfAdapter.ts +54 -0
- package/src/components/organisms/stepper/components/StepperDebug.syn +454 -0
- package/src/components/organisms/stepper/components/StepperFooter.syn +144 -0
- package/src/components/organisms/stepper/components/StepperHeader.syn +66 -0
- package/src/components/organisms/stepper/components/StepperTab.syn +118 -0
- package/src/components/organisms/stepper/components/stepperDebug.css +72 -0
- package/src/components/organisms/stepper/components/stepperFooter.css +28 -0
- package/src/components/organisms/stepper/components/stepperHeader.css +49 -0
- package/src/components/organisms/stepper/components/stepperTab.css +97 -0
- package/src/components/organisms/stepper/copy-to-atomos.ps1 +78 -0
- package/src/components/organisms/stepper/core/actions.ts +25 -0
- package/src/components/organisms/stepper/core/formAdapter.ts +66 -0
- package/src/components/organisms/stepper/core/helpers.ts +216 -0
- package/src/components/organisms/stepper/core/models.ts +220 -0
- package/src/components/organisms/stepper/core/reducer/addCustomValidators.ts +14 -0
- package/src/components/organisms/stepper/core/reducer/addError.ts +10 -0
- package/src/components/organisms/stepper/core/reducer/addStep.ts +7 -0
- package/src/components/organisms/stepper/core/reducer/computeSiblingStatus.ts +45 -0
- package/src/components/organisms/stepper/core/reducer/computeValidation.ts +61 -0
- package/src/components/organisms/stepper/core/reducer/goToStep.ts +143 -0
- package/src/components/organisms/stepper/core/reducer/init.ts +7 -0
- package/src/components/organisms/stepper/core/reducer/navigationRequest.ts +16 -0
- package/src/components/organisms/stepper/core/reducer/removeAllErrors.ts +26 -0
- package/src/components/organisms/stepper/core/reducer/removeError.ts +12 -0
- package/src/components/organisms/stepper/core/reducer/reset.ts +44 -0
- package/src/components/organisms/stepper/core/reducer/setData.ts +12 -0
- package/src/components/organisms/stepper/core/reducer/setFieldDefaultValue.ts +39 -0
- package/src/components/organisms/stepper/core/reducer/setFields.ts +41 -0
- package/src/components/organisms/stepper/core/reducer/setStepperDefaultValue.ts +33 -0
- package/src/components/organisms/stepper/core/reducer/setSubmittedTimes.ts +9 -0
- package/src/components/organisms/stepper/core/reducer/setVisible.ts +26 -0
- package/src/components/organisms/stepper/core/reducer/submitRequest.ts +19 -0
- package/src/components/organisms/stepper/core/reducer/updateFormCommon.ts +82 -0
- package/src/components/organisms/stepper/core/state.ts +106 -0
- package/src/components/organisms/stepper/index.ts +34 -0
- package/src/components/organisms/stepper/step.css +66 -0
- package/src/components/organisms/stepper/stepper.css +32 -0
- package/src/components/organisms/stepper/stepper.stories.tsx.disabled +329 -0
- package/src/components/organisms/table/index.ts +14 -0
- package/src/components/organisms/table/table-body.syn +43 -0
- package/src/components/organisms/table/table-body.type.ts +9 -0
- package/src/components/organisms/table/table-cell.syn +35 -0
- package/src/components/organisms/table/table-cell.type.ts +10 -0
- package/src/components/organisms/table/table-header.syn +23 -0
- package/src/components/organisms/table/table-header.type.ts +9 -0
- package/src/components/organisms/table/table-row.syn +35 -0
- package/src/components/organisms/table/table-row.type.ts +9 -0
- package/src/components/organisms/table/table.syn +71 -0
- package/src/components/organisms/table/table.type.ts +17 -0
- package/src/components/organisms/toast/index.ts +10 -0
- package/src/components/organisms/toast/toast-container.syn +108 -0
- package/src/components/organisms/toast/toast-container.type.ts +11 -0
- package/src/components/organisms/toast/toast-options.type.ts +11 -0
- package/src/components/organisms/toast/toast.syn +82 -0
- package/src/components/organisms/toast/toast.type.ts +14 -0
- package/src/components/organisms/toast/use-toast.ts +62 -0
- package/src/components/sidebar-nav.syn +107 -0
- package/src/components/utils/component-config-builder/component-config-builder.ts +49 -0
- package/src/components/utils/component-config-builder/component-config-builder.type.ts +27 -0
- package/src/components/utils/component-config-builder/component-config.type.ts +36 -0
- package/src/components/utils/component-config-builder/index.ts +7 -0
- package/src/components/utils/component-config-builder/prototype/active.ts +10 -0
- package/src/components/utils/component-config-builder/prototype/border.ts +10 -0
- package/src/components/utils/component-config-builder/prototype/build.ts +10 -0
- package/src/components/utils/component-config-builder/prototype/class-name.ts +10 -0
- package/src/components/utils/component-config-builder/prototype/color.ts +11 -0
- package/src/components/utils/component-config-builder/prototype/disabled.ts +10 -0
- package/src/components/utils/component-config-builder/prototype/focus.ts +10 -0
- package/src/components/utils/component-config-builder/prototype/full-width.ts +10 -0
- package/src/components/utils/component-config-builder/prototype/hover.ts +10 -0
- package/src/components/utils/component-config-builder/prototype/loading.ts +10 -0
- package/src/components/utils/component-config-builder/prototype/rounded.ts +11 -0
- package/src/components/utils/component-config-builder/prototype/shadow.ts +11 -0
- package/src/components/utils/component-config-builder/prototype/size.ts +11 -0
- package/src/components/utils/component-config-builder/prototype/transition-duration.ts +11 -0
- package/src/components/utils/component-config-builder/prototype/transition.ts +10 -0
- package/src/components/utils/component-config-builder/prototype/variant.ts +11 -0
- package/src/components/utils/component-styling-builder/component-styling-builder.ts +45 -0
- package/src/components/utils/component-styling-builder/component-styling-builder.type.ts +26 -0
- package/src/components/utils/component-styling-builder/component-styling.type.ts +21 -0
- package/src/components/utils/component-styling-builder/index.ts +7 -0
- package/src/components/utils/component-styling-builder/prototype/active.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/background.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/base.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/border.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/build.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/custom.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/disabled.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/focus.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/hover.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/loading.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/read-only.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/rounded.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/shadow.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/size.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/transition.ts +10 -0
- package/src/components/utils/component-styling-builder/prototype/variant.ts +10 -0
- package/src/components/utils/index.ts +6 -0
- package/src/components/utils/readme.md +1 -0
- package/src/css.d.ts +14 -0
- package/src/debug-tokens.syn +11 -0
- package/src/design/sizes/index.ts +6 -0
- package/src/design/utility/class-names.ts +6 -0
- package/src/design/utility/index.ts +6 -0
- package/src/design/utility/rounded-classes.ts +6 -0
- package/src/docs/EXAMPLES.md +319 -0
- package/src/docs/EXAMPLES.ts.md +188 -0
- package/src/docs/IMPLEMENTATION_COMPLETE.md +232 -0
- package/src/docs/IMPLEMENTATION_PATTERN.md +319 -0
- package/src/docs/copilot-implementation-rules.md +328 -0
- package/src/index.ts +23 -0
- package/src/jsx.d.ts +8 -0
- package/src/lab/counter.syn +76 -0
- package/src/lab/transformer/README.md +115 -0
- package/src/lab/transformer/async-lazy-loading/2026-02-11-14-20-async-lazy-loading.syn +242 -0
- package/src/lab/transformer/batch-updates/2026-02-11-14-20-batch-updates.syn +228 -0
- package/src/lab/transformer/catcher-error-handlers/2026-02-11-14-20-catcher-error-handlers.syn +211 -0
- package/src/lab/transformer/complex-jsx-expressions/2026-02-11-14-20-complex-jsx-expressions.syn +49 -0
- package/src/lab/transformer/complex-jsx-expressions/2026-02-11-15-01-complex-jsx-expressions.syn +227 -0
- package/src/lab/transformer/concurrent-rendering/2026-02-11-14-20-concurrent-rendering.syn +291 -0
- package/src/lab/transformer/create-context-providers/2026-02-11-14-20-create-context-providers.syn +240 -0
- package/src/lab/transformer/create-effect-side-effects/2026-02-11-14-20-create-effect-side-effects.syn +339 -0
- package/src/lab/transformer/create-resource/2026-02-11-14-20-create-resource.syn +80 -0
- package/src/lab/transformer/dynamic-components/2026-02-11-14-20-dynamic-components.syn +78 -0
- package/src/lab/transformer/dynamic-components/2026-02-11-15-09-dynamic-components.syn +468 -0
- package/src/lab/transformer/for-iteration/2026-02-11-14-20-for-iteration.syn +62 -0
- package/src/lab/transformer/for-iteration-components/2026-02-11-15-07-for-iteration-components.syn +489 -0
- package/src/lab/transformer/generic-type-arguments/2026-02-11-14-20-generic-type-arguments.syn +53 -0
- package/src/lab/transformer/generic-type-arguments/2026-02-11-15-02-generic-type-arguments.syn +140 -0
- package/src/lab/transformer/memo-optimization/2026-02-11-14-20-memo-optimization.syn +275 -0
- package/src/lab/transformer/on-cleanup-patterns/2026-02-11-14-20-on-cleanup-patterns.syn +375 -0
- package/src/lab/transformer/on-mount-lifecycle/2026-02-11-14-20-on-mount-lifecycle.syn +347 -0
- package/src/lab/transformer/portal-transformation/2026-02-11-14-20-portal-transformation.syn +141 -0
- package/src/lab/transformer/render-effect-timing/2026-02-11-14-20-render-effect-timing.syn +334 -0
- package/src/lab/transformer/resource-dependency-tracking/2026-02-11-14-20-resource-dependency-tracking.syn +153 -0
- package/src/lab/transformer/resource-loading-states/2026-02-11-14-20-resource-loading-states.syn +382 -0
- package/src/lab/transformer/resource-mutations/2026-02-11-14-20-resource-mutations.syn +399 -0
- package/src/lab/transformer/resource-parallel-fetching/2026-02-11-14-20-resource-parallel-fetching.syn +446 -0
- package/src/lab/transformer/resource-pre-resolution/2026-02-11-14-20-resource-pre-resolution.syn +405 -0
- package/src/lab/transformer/resource-refetch-patterns/2026-02-11-14-20-resource-refetch-patterns.syn +120 -0
- package/src/lab/transformer/resource-state-handling/2026-02-11-14-20-resource-state-handling.syn +104 -0
- package/src/lab/transformer/server-side-rendering/2026-02-11-14-20-server-side-rendering.syn +234 -0
- package/src/lab/transformer/show-components/2026-02-11-14-20-show-components.syn +57 -0
- package/src/lab/transformer/show-when-components/2026-02-11-15-03-show-when-components.syn +202 -0
- package/src/lab/transformer/template-literals/2026-02-11-14-20-template-literals.syn +34 -0
- package/src/lab/transformer/template-literals/2026-02-11-15-00-template-literals.syn +146 -0
- package/src/lab/transformer/tryer-error-boundaries/2026-02-11-14-20-tryer-error-boundaries.syn +111 -0
- package/src/lab/transformer/type-inference-system/2026-02-11-14-20-type-inference-system.syn +50 -0
- package/src/lab/transformer/type-inference-system/2026-02-11-15-05-type-inference-system.syn +353 -0
- package/src/lab/transformer/untrack-isolation/2026-02-11-14-20-untrack-isolation.syn +326 -0
- package/src/lab/transformer/waiting-suspense/2026-02-11-14-20-waiting-suspense.syn +78 -0
- package/src/main-simple.syn +23 -0
- package/src/main.syn +101 -0
- package/src/main.ts +57 -0
- package/src/showcase/__tests__/e2e/context-structure.spec.ts +46 -0
- package/src/showcase/__tests__/e2e/context-ui.spec.ts +137 -0
- package/src/showcase/__tests__/e2e/control-flow-ui.spec.ts +149 -0
- package/src/showcase/__tests__/e2e/debug-compiled.spec.ts +13 -0
- package/src/showcase/__tests__/e2e/debug-screenshot.png +0 -0
- package/src/showcase/__tests__/e2e/debug.spec.ts +20 -0
- package/src/showcase/__tests__/e2e/deep-debug.spec.ts +130 -0
- package/src/showcase/__tests__/e2e/error-boundary-ui.spec.ts +113 -0
- package/src/showcase/__tests__/e2e/main-transformed.js +0 -0
- package/src/showcase/__tests__/e2e/portal-ui.spec.ts +135 -0
- package/src/showcase/__tests__/e2e/reactivity-ui.spec.ts +81 -0
- package/src/showcase/__tests__/e2e/resource-debug.spec.ts +37 -0
- package/src/showcase/__tests__/e2e/visual-debug.spec.ts +147 -0
- package/src/showcase/__tests__/integration/context-provider-consumer.test.ts +114 -0
- package/src/showcase/__tests__/integration/context-ui.test.ts +150 -0
- package/src/showcase/__tests__/integration/error-boundary-reactivity.test.ts +164 -0
- package/src/showcase/__tests__/integration/reactivity-control-flow.test.ts +226 -0
- package/src/showcase/__tests__/integration/reactivity-cross-component.test.ts +103 -0
- package/src/showcase/__tests__/integration/showcase-navigation.test.ts +159 -0
- package/src/showcase/__tests__/setup.ts +37 -0
- package/src/showcase/__tests__/unit/context.test.ts +122 -0
- package/src/showcase/__tests__/unit/control-flow.test.ts +167 -0
- package/src/showcase/__tests__/unit/error-boundary.test.ts +116 -0
- package/src/showcase/__tests__/unit/portal.test.ts +122 -0
- package/src/showcase/__tests__/unit/reactivity.test.ts +152 -0
- package/src/showcase/about/about.syn +59 -0
- package/src/showcase/about/components/details-section.syn +29 -0
- package/src/showcase/about/components/feature-list.syn +23 -0
- package/src/showcase/about/components/index.ts +7 -0
- package/src/showcase/about/components/route-info.syn +29 -0
- package/src/showcase/bootstrap/bootstrap-test.syn +152 -0
- package/src/showcase/bootstrap/components/config-service-error-view.syn +41 -0
- package/src/showcase/bootstrap/components/config-service-resolved-view.syn +69 -0
- package/src/showcase/bootstrap/demos/basic-demo.syn +26 -0
- package/src/showcase/bootstrap/demos/di-demo-interactive.syn +94 -0
- package/src/showcase/bootstrap/demos/di-demo.syn +64 -0
- package/src/showcase/bootstrap/demos/lifecycle-demo.syn +74 -0
- package/src/showcase/bootstrap/demos/return-value-demo.syn +95 -0
- package/src/showcase/bootstrap/types/config-service.types.ts +9 -0
- package/src/showcase/common/components/code-block.syn +24 -0
- package/src/showcase/common/components/console-log-viewer.syn +133 -0
- package/src/showcase/common/components/demo-button.syn +42 -0
- package/src/showcase/common/components/demo-section.syn +29 -0
- package/src/showcase/common/components/index.ts +13 -0
- package/src/showcase/common/components/isolated-demo.syn +95 -0
- package/src/showcase/common/components/modal.syn +58 -0
- package/src/showcase/common/components/page-header.syn +29 -0
- package/src/showcase/common/components/status-indicator.syn +34 -0
- package/src/showcase/common/examples/logging-example.syn +67 -0
- package/src/showcase/common/hooks/use-logger.ts +60 -0
- package/src/showcase/context/components/index.ts +12 -0
- package/src/showcase/context/components/multi-context-dashboard.syn +135 -0
- package/src/showcase/context/components/settings-provider.syn +35 -0
- package/src/showcase/context/components/theme-controls.syn +51 -0
- package/src/showcase/context/components/theme-provider.syn +25 -0
- package/src/showcase/context/components/themed-box.syn +20 -0
- package/src/showcase/context/components/user-controls.syn +38 -0
- package/src/showcase/context/components/user-profile.syn +26 -0
- package/src/showcase/context/components/user-provider.syn +34 -0
- package/src/showcase/context/context-test.syn +66 -0
- package/src/showcase/control-flow/components/for-demo.syn +67 -0
- package/src/showcase/control-flow/components/index-demo.syn +41 -0
- package/src/showcase/control-flow/components/index.ts +8 -0
- package/src/showcase/control-flow/components/show-demo.syn +53 -0
- package/src/showcase/control-flow/control-flow-test.syn +104 -0
- package/src/showcase/di/components/circular-dependency-demo.syn +113 -0
- package/src/showcase/di/components/hierarchical-di-demo.syn +81 -0
- package/src/showcase/di/components/index.ts +6 -0
- package/src/showcase/di/components/lifetime-card.syn +30 -0
- package/src/showcase/di/components/registered-services-list.syn +29 -0
- package/src/showcase/di/components/resolution-result.syn +34 -0
- package/src/showcase/di/components/service-button.syn +26 -0
- package/src/showcase/di/components/service-lifetime-demo.syn +135 -0
- package/src/showcase/di/components/service-registration-demo.syn +85 -0
- package/src/showcase/di/components/service-resolution-demo.syn +145 -0
- package/src/showcase/di/di-test.syn +121 -0
- package/src/showcase/di/services/demo-services.ts +128 -0
- package/src/showcase/drag-drop/components/drag-drop-zone-demo.syn +75 -0
- package/src/showcase/drag-drop/components/index.ts +7 -0
- package/src/showcase/drag-drop/components/kanban-board-demo.syn +76 -0
- package/src/showcase/drag-drop/components/sortable-list-demo.syn +71 -0
- package/src/showcase/drag-drop/drag-drop-test.syn +44 -0
- package/src/showcase/error-boundary/components/basic-boundary-demo.syn +54 -0
- package/src/showcase/error-boundary/components/boundary-section.syn +47 -0
- package/src/showcase/error-boundary/components/cleanup-demo.syn +88 -0
- package/src/showcase/error-boundary/components/control-button-group.syn +48 -0
- package/src/showcase/error-boundary/components/error-boundary-control-panel.syn +76 -0
- package/src/showcase/error-boundary/components/error-boundary-status-summary.syn +46 -0
- package/src/showcase/error-boundary/components/error-component.syn +15 -0
- package/src/showcase/error-boundary/components/error-display.syn +27 -0
- package/src/showcase/error-boundary/components/index.ts +14 -0
- package/src/showcase/error-boundary/components/reset-flow-demo.syn +107 -0
- package/src/showcase/error-boundary/components/retry-counter-demo.syn +97 -0
- package/src/showcase/error-boundary/components/safe-component.syn +12 -0
- package/src/showcase/error-boundary/components/visual-boundary-wrapper.syn +78 -0
- package/src/showcase/error-boundary/error-boundary-mega.syn +180 -0
- package/src/showcase/error-boundary/error-boundary-simple.syn +88 -0
- package/src/showcase/error-boundary/error-boundary-test.syn +77 -0
- package/src/showcase/forms/components/async-validation-demo.syn +101 -0
- package/src/showcase/forms/components/basic-form-demo.syn +42 -0
- package/src/showcase/forms/components/field-state-demo.syn +70 -0
- package/src/showcase/forms/components/index.ts +9 -0
- package/src/showcase/forms/components/submission-demo.syn +78 -0
- package/src/showcase/forms/components/validation-demo.syn +59 -0
- package/src/showcase/forms/forms-test.syn +179 -0
- package/src/showcase/forms/pages/cross-validation-page.syn +181 -0
- package/src/showcase/forms/pages/dependent-fields-page.syn +122 -0
- package/src/showcase/forms/pages/dynamic-fields-page.syn +245 -0
- package/src/showcase/forms/pages/edit-form-page.syn +163 -0
- package/src/showcase/forms/pages/index.ts +10 -0
- package/src/showcase/forms/pages/select-controls-page.syn +112 -0
- package/src/showcase/forms/pages/wizard-page.syn +253 -0
- package/src/showcase/home/home.syn +22 -0
- package/src/showcase/http/components/abort-demo.syn +87 -0
- package/src/showcase/http/components/basic-requests-demo.syn +88 -0
- package/src/showcase/http/components/index.ts +8 -0
- package/src/showcase/http/components/interceptors-demo.syn +90 -0
- package/src/showcase/http/components/retry-demo.syn +84 -0
- package/src/showcase/http/http-test.syn +88 -0
- package/src/showcase/index.ts +46 -0
- package/src/showcase/jsx/components/event-handlers-demo.syn +78 -0
- package/src/showcase/jsx/components/index.ts +7 -0
- package/src/showcase/jsx/components/reactive-attributes-demo.syn +69 -0
- package/src/showcase/jsx/components/style-objects-demo.syn +40 -0
- package/src/showcase/jsx/jsx-test.syn +81 -0
- package/src/showcase/pages/__tests__/about.test.ts +120 -0
- package/src/showcase/pages/__tests__/assignment-test.test.ts +68 -0
- package/src/showcase/pages/__tests__/context-test.test.ts +218 -0
- package/src/showcase/pages/__tests__/control-flow-test.test.ts +184 -0
- package/src/showcase/pages/__tests__/error-boundary-test.test.ts +220 -0
- package/src/showcase/pages/__tests__/home.test.ts +54 -0
- package/src/showcase/pages/__tests__/jsx-test.test.ts +182 -0
- package/src/showcase/pages/__tests__/reactivity-test.test.ts +177 -0
- package/src/showcase/pages/__tests__/resource-test.test.ts +215 -0
- package/src/showcase/pages/error-boundary-mega-demo.syn +0 -0
- package/src/showcase/portal/components/basic-portal-demo.syn +41 -0
- package/src/showcase/portal/components/index.ts +7 -0
- package/src/showcase/portal/components/modal-portal-demo.syn +84 -0
- package/src/showcase/portal/components/tooltip-portal-demo.syn +56 -0
- package/src/showcase/portal/portal-test.syn +44 -0
- package/src/showcase/reactivity/components/batch-demo.syn +43 -0
- package/src/showcase/reactivity/components/effect-demo.syn +19 -0
- package/src/showcase/reactivity/components/index.ts +11 -0
- package/src/showcase/reactivity/components/memo-demo.syn +29 -0
- package/src/showcase/reactivity/components/render-effect-demo.syn +78 -0
- package/src/showcase/reactivity/components/signal-demo.syn +45 -0
- package/src/showcase/reactivity/components/untrack-demo.syn +67 -0
- package/src/showcase/reactivity/components/use-sync-demo.syn +96 -0
- package/src/showcase/reactivity/reactivity-test.syn +170 -0
- package/src/showcase/resource/components/cache-demo.syn +141 -0
- package/src/showcase/resource/components/coordination-demo.syn +136 -0
- package/src/showcase/resource/components/deduplication-demo.syn +33 -0
- package/src/showcase/resource/components/error-resource-demo.syn +93 -0
- package/src/showcase/resource/components/image-card.syn +53 -0
- package/src/showcase/resource/components/image-gallery-demo.syn +56 -0
- package/src/showcase/resource/components/index.ts +15 -0
- package/src/showcase/resource/components/mock-api.ts +67 -0
- package/src/showcase/resource/components/refetch-clear-demo.syn +99 -0
- package/src/showcase/resource/components/suspend-control-demo.syn +62 -0
- package/src/showcase/resource/components/suspense-skeleton.syn +24 -0
- package/src/showcase/resource/components/user-card.syn +57 -0
- package/src/showcase/resource/components/waiting-demo.syn +118 -0
- package/src/showcase/resource/resource-test.syn +193 -0
- package/src/showcase/routing/components/guard-demo.syn +75 -0
- package/src/showcase/routing/components/index.ts +9 -0
- package/src/showcase/routing/components/navigation-demo.syn +47 -0
- package/src/showcase/routing/components/nested-outlet-demo.syn +73 -0
- package/src/showcase/routing/components/params-demo.syn +54 -0
- package/src/showcase/routing/components/query-demo.syn +63 -0
- package/src/showcase/routing/routing-test.syn +102 -0
- package/src/showcase/ssr/components/escape-demo.syn +80 -0
- package/src/showcase/ssr/components/hydrate-demo.syn +142 -0
- package/src/showcase/ssr/components/hydration-script-demo.syn +104 -0
- package/src/showcase/ssr/components/index.ts +8 -0
- package/src/showcase/ssr/components/render-to-string-demo.syn +71 -0
- package/src/showcase/ssr/ssr-test.syn +88 -0
- package/src/showcase/svg-canvas/board/components/canvas-badge-list.syn +59 -0
- package/src/showcase/svg-canvas/board/components/canvas-draw-preview.syn +75 -0
- package/src/showcase/svg-canvas/board/components/canvas-toolbar.syn +59 -0
- package/src/showcase/svg-canvas/board/components/line-canvas.syn +673 -0
- package/src/showcase/svg-canvas/board/components/side-toolbox.syn +51 -0
- package/src/showcase/svg-canvas/board/components/svg/canvas-dot-grid.syn +18 -0
- package/src/showcase/svg-canvas/board/model/i-board.ts +20 -0
- package/src/showcase/svg-canvas/board/store/canvas-board.slice.ts +51 -0
- package/src/showcase/svg-canvas/index.ts +2 -0
- package/src/showcase/svg-canvas/line/components/canvas-line-item.syn +85 -0
- package/src/showcase/svg-canvas/line/components/svg/svg-endpoint-handle.syn +29 -0
- package/src/showcase/svg-canvas/line/components/svg/svg-line-label.syn +33 -0
- package/src/showcase/svg-canvas/line/entity/canvas-line.ts +42 -0
- package/src/showcase/svg-canvas/line/entity/create-canvas-line.ts +24 -0
- package/src/showcase/svg-canvas/line/model/i-canvas-line.ts +42 -0
- package/src/showcase/svg-canvas/line/store/canvas-line.slice.ts +38 -0
- package/src/showcase/svg-canvas/modal/components/canvas-settings-modal.syn +118 -0
- package/src/showcase/svg-canvas/modal/model/i-canvas-modal.ts +10 -0
- package/src/showcase/svg-canvas/modal/store/canvas-modal.slice.ts +36 -0
- package/src/showcase/svg-canvas/shape/components/canvas-anchor-group.syn +33 -0
- package/src/showcase/svg-canvas/shape/components/canvas-diamond-body.syn +48 -0
- package/src/showcase/svg-canvas/shape/components/canvas-entity-card.syn +89 -0
- package/src/showcase/svg-canvas/shape/components/canvas-rect-body.syn +37 -0
- package/src/showcase/svg-canvas/shape/components/canvas-shape-item.syn +110 -0
- package/src/showcase/svg-canvas/shape/components/card-header.syn +45 -0
- package/src/showcase/svg-canvas/shape/components/property-row.syn +29 -0
- package/src/showcase/svg-canvas/shape/components/svg/svg-anchor-circle.syn +44 -0
- package/src/showcase/svg-canvas/shape/entity/canvas-diamond.ts +102 -0
- package/src/showcase/svg-canvas/shape/entity/canvas-entity.ts +19 -0
- package/src/showcase/svg-canvas/shape/entity/canvas-rectangle.ts +53 -0
- package/src/showcase/svg-canvas/shape/entity/canvas-square.ts +72 -0
- package/src/showcase/svg-canvas/shape/entity/create-shape.ts +69 -0
- package/src/showcase/svg-canvas/shape/model/i-shape.ts +37 -0
- package/src/showcase/svg-canvas/shape/store/canvas-shape.slice.ts +38 -0
- package/src/showcase/svg-canvas/shared/atoms/canvas-badge.syn +34 -0
- package/src/showcase/svg-canvas/shared/atoms/canvas-icon-btn.syn +32 -0
- package/src/showcase/svg-canvas/shared/atoms/canvas-text-input.syn +27 -0
- package/src/showcase/svg-canvas/shared/helpers/canvas-dom-ops.ts +187 -0
- package/src/showcase/svg-canvas/shared/helpers/canvas-helpers.ts +112 -0
- package/src/showcase/svg-canvas/shared/helpers/route-orthogonal.ts +176 -0
- package/src/showcase/svg-canvas/shared/model/i-drag.ts +84 -0
- package/src/showcase/svg-canvas/shared/model/i-entity.ts +71 -0
- package/src/showcase/svg-canvas/store/canvas-store.ts +60 -0
- package/src/showcase/svg-canvas/svg-canvas-page.syn +28 -0
- package/src/showcase/tests/assignment-test.syn +37 -0
- package/src/showcase/tests/minimal-export-test.syn +7 -0
- package/src/showcase/tests/object-literal-test.syn +26 -0
- package/src/showcase/tests/simple-codegen-test.syn +12 -0
- package/src/showcase/tests/simple-test.syn +51 -0
- package/src/showcase/tests/template-literal-demo.syn +138 -0
- package/src/showcase-styles.css +96 -0
- package/src/styles/design-system.css +275 -0
- package/src/styles/motion.css +121 -0
- package/src/styles/showcase-base.css +522 -0
- package/src/styles/showcase.css +653 -0
- package/src/styles/state-layers.css +55 -0
- package/src/styles/touch-targets.css +41 -0
- package/src/styles/transitions.css +617 -0
- package/src/styles/utilities.css +115 -0
- package/src/styles.css +23 -0
- package/src/test-keywords.syn +15 -0
- package/src/test-loop.syn +29 -0
- package/src/test-minimal.syn +9 -0
- package/src/test-object-literal.syn +19 -0
- package/src/test-simple.syn +12 -0
- package/src/types/psr-modules.d.ts +6 -0
- package/src/types.ts +37 -0
- package/tailwind.config.js +354 -0
- package/test-results/.last-run.json +4 -0
- package/test-signal-debug.syn +9 -0
- package/test-transformation.ts +35 -0
- package/tsconfig.build.json +31 -0
- package/tsconfig.json +44 -0
- package/tsconfig.stories.json +10 -0
- package/vite.config.ts +47 -0
- package/vitest.config.ts +41 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { expect, test } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test.describe('Context UI Demo', () => {
|
|
4
|
+
test.beforeEach(async ({ page }) => {
|
|
5
|
+
await page.goto('http://localhost:3004/context');
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
test('should display page header', async ({ page }) => {
|
|
9
|
+
// Check for route-specific header instead of layout header
|
|
10
|
+
await expect(page.locator('text=Context API & Dependency Injection')).toBeVisible();
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
test('Theme context - should show initial theme', async ({ page }) => {
|
|
14
|
+
const themeSection = page.locator('text=1️⃣ Theme Context').locator('..').locator('..');
|
|
15
|
+
await expect(themeSection).toBeVisible();
|
|
16
|
+
|
|
17
|
+
// Check theme display
|
|
18
|
+
await expect(themeSection).toContainText('Theme Mode:');
|
|
19
|
+
await expect(themeSection).toContainText('Light');
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test('Theme context - light/dark buttons are visible', async ({ page }) => {
|
|
23
|
+
const themeSection = page.locator('text=1️⃣ Theme Context').locator('..').locator('..');
|
|
24
|
+
|
|
25
|
+
// Check theme buttons exist
|
|
26
|
+
const lightBtn = themeSection.getByRole('button', { name: /light/i });
|
|
27
|
+
const darkBtn = themeSection.getByRole('button', { name: /dark/i });
|
|
28
|
+
|
|
29
|
+
await expect(lightBtn).toBeVisible();
|
|
30
|
+
await expect(darkBtn).toBeVisible();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('Theme context - clicking dark button changes theme', async ({ page }) => {
|
|
34
|
+
const themeSection = page.locator('text=1️⃣ Theme Context').locator('..').locator('..');
|
|
35
|
+
|
|
36
|
+
const darkBtn = themeSection.getByRole('button', { name: /dark/i });
|
|
37
|
+
await darkBtn.click();
|
|
38
|
+
|
|
39
|
+
// Check theme updated in DOM
|
|
40
|
+
await expect(themeSection).toContainText('dark');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test('Theme context - color buttons are visible', async ({ page }) => {
|
|
44
|
+
const themeSection = page.locator('text=1️⃣ Theme Context').locator('..').locator('..');
|
|
45
|
+
|
|
46
|
+
// Check color buttons
|
|
47
|
+
await expect(themeSection.getByRole('button', { name: /blue/i })).toBeVisible();
|
|
48
|
+
await expect(themeSection.getByRole('button', { name: /green/i })).toBeVisible();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test('Theme context - themed box displays theme info', async ({ page }) => {
|
|
52
|
+
const themeSection = page.locator('text=1️⃣ Theme Context').locator('..').locator('..');
|
|
53
|
+
|
|
54
|
+
// Look for themed component
|
|
55
|
+
await expect(themeSection).toContainText('Theme:');
|
|
56
|
+
await expect(themeSection).toContainText('Color:');
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test('User context - should show initial state', async ({ page }) => {
|
|
60
|
+
const userSection = page.locator('text=2️⃣ User Context').locator('..').locator('..');
|
|
61
|
+
await expect(userSection).toBeVisible();
|
|
62
|
+
|
|
63
|
+
// Check initial state (not logged in)
|
|
64
|
+
await expect(userSection).toContainText('Not logged in');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test('User context - login buttons are visible', async ({ page }) => {
|
|
68
|
+
const userSection = page.locator('text=2️⃣ User Context').locator('..').locator('..');
|
|
69
|
+
|
|
70
|
+
// Should have login options
|
|
71
|
+
const buttons = userSection.getByRole('button');
|
|
72
|
+
const count = await buttons.count();
|
|
73
|
+
expect(count).toBeGreaterThan(0);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test('User context - clicking login button logs in user', async ({ page }) => {
|
|
77
|
+
const userSection = page.locator('text=2️⃣ User Context').locator('..').locator('..');
|
|
78
|
+
|
|
79
|
+
// Click first login button
|
|
80
|
+
const loginBtn = userSection.getByRole('button').first();
|
|
81
|
+
await loginBtn.click();
|
|
82
|
+
|
|
83
|
+
// Should show user name (not "Not logged in")
|
|
84
|
+
const content = await userSection.textContent();
|
|
85
|
+
expect(content).not.toContain('Not logged in');
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
test('Multiple contexts - deeply nested component visible', async ({ page }) => {
|
|
89
|
+
const multiSection = page.locator('text=3️⃣ Multiple Contexts').locator('..').locator('..');
|
|
90
|
+
|
|
91
|
+
if (await multiSection.isVisible()) {
|
|
92
|
+
await expect(multiSection).toContainText('Deeply Nested Component');
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
test('Multiple contexts - nested component shows context values', async ({ page }) => {
|
|
97
|
+
const nestedComponent = page
|
|
98
|
+
.locator('text=Deeply Nested Component')
|
|
99
|
+
.locator('..')
|
|
100
|
+
.locator('..');
|
|
101
|
+
|
|
102
|
+
if (await nestedComponent.isVisible()) {
|
|
103
|
+
const content = await nestedComponent.textContent();
|
|
104
|
+
|
|
105
|
+
// Should show context values
|
|
106
|
+
expect(content).toBeTruthy();
|
|
107
|
+
expect(content?.length).toBeGreaterThan(50); // Has substantial content
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
test('Context propagation - child components receive context', async ({ page }) => {
|
|
112
|
+
// Both UserProfile and UserControls should be able to access UserContext
|
|
113
|
+
const userProfile = page.locator('text=User:').locator('..');
|
|
114
|
+
const userControls = page.locator('text=Login').locator('..');
|
|
115
|
+
|
|
116
|
+
// At least one should be visible
|
|
117
|
+
const profileVisible = await userProfile.isVisible();
|
|
118
|
+
const controlsVisible = await userControls.isVisible();
|
|
119
|
+
|
|
120
|
+
expect(profileVisible || controlsVisible).toBeTruthy();
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
test('Settings context - font size control', async ({ page }) => {
|
|
124
|
+
// Look for settings/font size controls
|
|
125
|
+
const settingsControl = page.locator('input[type="range"]');
|
|
126
|
+
|
|
127
|
+
if (await settingsControl.isVisible()) {
|
|
128
|
+
const initial = await settingsControl.inputValue();
|
|
129
|
+
expect(initial).toBeTruthy();
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test('All context demos visible', async ({ page }) => {
|
|
134
|
+
await expect(page.locator('text=1️⃣ Theme Context')).toBeVisible();
|
|
135
|
+
await expect(page.locator('text=2️⃣ User Context')).toBeVisible();
|
|
136
|
+
});
|
|
137
|
+
});
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { expect, test } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test.describe('Control Flow UI Demo', () => {
|
|
4
|
+
test.beforeEach(async ({ page }) => {
|
|
5
|
+
await page.goto('http://localhost:3004/control-flow');
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
test('should display page header', async ({ page }) => {
|
|
9
|
+
// Check for route-specific content instead of layout header
|
|
10
|
+
await expect(page.locator('text=Control Flow Primitives')).toBeVisible();
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
test('Show component - should toggle visibility', async ({ page }) => {
|
|
14
|
+
const showSection = page
|
|
15
|
+
.locator('text=👁️ Conditional Rendering (Show)')
|
|
16
|
+
.locator('..')
|
|
17
|
+
.locator('..');
|
|
18
|
+
await expect(showSection).toBeVisible();
|
|
19
|
+
|
|
20
|
+
// Check initial state - should show content
|
|
21
|
+
const toggleBtn = showSection.getByRole('button', { name: /toggle/i });
|
|
22
|
+
|
|
23
|
+
// Content should be visible initially
|
|
24
|
+
await expect(showSection).toContainText('This content is visible!');
|
|
25
|
+
|
|
26
|
+
// Toggle off
|
|
27
|
+
await toggleBtn.click();
|
|
28
|
+
|
|
29
|
+
// Content should be hidden
|
|
30
|
+
await expect(showSection.locator('text=This content is visible!')).not.toBeVisible();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('Show component - toggle multiple times', async ({ page }) => {
|
|
34
|
+
const showSection = page
|
|
35
|
+
.locator('text=👁️ Conditional Rendering (Show)')
|
|
36
|
+
.locator('..')
|
|
37
|
+
.locator('..');
|
|
38
|
+
const toggleBtn = showSection.getByRole('button', { name: /toggle/i });
|
|
39
|
+
|
|
40
|
+
// Toggle off
|
|
41
|
+
await toggleBtn.click();
|
|
42
|
+
await expect(showSection.locator('text=This content is visible!')).not.toBeVisible();
|
|
43
|
+
|
|
44
|
+
// Toggle on
|
|
45
|
+
await toggleBtn.click();
|
|
46
|
+
await expect(showSection).toContainText('This content is visible!');
|
|
47
|
+
|
|
48
|
+
// Toggle off again
|
|
49
|
+
await toggleBtn.click();
|
|
50
|
+
await expect(showSection.locator('text=This content is visible!')).not.toBeVisible();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test('For component - should render list items', async ({ page }) => {
|
|
54
|
+
const forSection = page.locator('text=🔁 List Rendering (For)').locator('..').locator('..');
|
|
55
|
+
await expect(forSection).toBeVisible();
|
|
56
|
+
|
|
57
|
+
// Check initial list items are visible
|
|
58
|
+
await expect(forSection).toContainText('Apple');
|
|
59
|
+
await expect(forSection).toContainText('Banana');
|
|
60
|
+
await expect(forSection).toContainText('Cherry');
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('For component - add item button works', async ({ page }) => {
|
|
64
|
+
const forSection = page.locator('text=🔁 List Rendering (For)').locator('..').locator('..');
|
|
65
|
+
|
|
66
|
+
// Find add button
|
|
67
|
+
const addBtn = forSection.getByRole('button', { name: /add/i });
|
|
68
|
+
await addBtn.click();
|
|
69
|
+
|
|
70
|
+
// Check new item appears in DOM
|
|
71
|
+
const items = forSection.locator('[class*="item"]');
|
|
72
|
+
const count = await items.count();
|
|
73
|
+
expect(count).toBeGreaterThan(3); // More than initial 3 items
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test('For component - remove item button works', async ({ page }) => {
|
|
77
|
+
const forSection = page.locator('text=🔁 List Rendering (For)').locator('..').locator('..');
|
|
78
|
+
|
|
79
|
+
// Find first remove button
|
|
80
|
+
const removeBtn = forSection.getByRole('button', { name: /remove/i }).first();
|
|
81
|
+
await removeBtn.click();
|
|
82
|
+
|
|
83
|
+
// Apple should be gone
|
|
84
|
+
await expect(forSection.locator('text=Apple')).not.toBeVisible();
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test('Index component - should render with indices', async ({ page }) => {
|
|
88
|
+
const indexSection = page.locator('text=🔢 Indexed List').locator('..').locator('..');
|
|
89
|
+
await expect(indexSection).toBeVisible();
|
|
90
|
+
|
|
91
|
+
// Check items show with index
|
|
92
|
+
await expect(indexSection).toContainText('0:');
|
|
93
|
+
await expect(indexSection).toContainText('1:');
|
|
94
|
+
await expect(indexSection).toContainText('2:');
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test('Switch/Match - should show correct option', async ({ page }) => {
|
|
98
|
+
const switchSection = page
|
|
99
|
+
.locator('text=🔀 Multiple Conditions (Switch/Match)')
|
|
100
|
+
.locator('..')
|
|
101
|
+
.locator('..');
|
|
102
|
+
await expect(switchSection).toBeVisible();
|
|
103
|
+
|
|
104
|
+
// Should show one of the status options
|
|
105
|
+
const hasLoading = await switchSection.locator('text=Loading...').isVisible();
|
|
106
|
+
const hasSuccess = await switchSection.locator('text=Success').isVisible();
|
|
107
|
+
const hasError = await switchSection.locator('text=Error').isVisible();
|
|
108
|
+
|
|
109
|
+
expect(hasLoading || hasSuccess || hasError).toBeTruthy();
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test('Switch/Match - switches between states', async ({ page }) => {
|
|
113
|
+
const switchSection = page
|
|
114
|
+
.locator('text=🔀 Multiple Conditions (Switch/Match)')
|
|
115
|
+
.locator('..')
|
|
116
|
+
.locator('..');
|
|
117
|
+
|
|
118
|
+
// Find button to change state
|
|
119
|
+
const buttons = switchSection.getByRole('button');
|
|
120
|
+
const count = await buttons.count();
|
|
121
|
+
|
|
122
|
+
if (count > 0) {
|
|
123
|
+
await buttons.first().click();
|
|
124
|
+
|
|
125
|
+
// Something should be displayed
|
|
126
|
+
const content = await switchSection.textContent();
|
|
127
|
+
expect(content).toBeTruthy();
|
|
128
|
+
expect(content?.length).toBeGreaterThan(0);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
test('Nested control flow - Show + For combination', async ({ page }) => {
|
|
133
|
+
// Look for section with both Show and For
|
|
134
|
+
const nestedSection = page.locator('text=Nested').locator('..').locator('..');
|
|
135
|
+
|
|
136
|
+
if (await nestedSection.isVisible()) {
|
|
137
|
+
// Should have toggle and list
|
|
138
|
+
const hasToggle = await nestedSection.getByRole('button', { name: /toggle/i }).isVisible();
|
|
139
|
+
const hasItems = await nestedSection.textContent();
|
|
140
|
+
|
|
141
|
+
expect(hasToggle || (hasItems && hasItems.length > 0)).toBeTruthy();
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
test('All control flow demos visible', async ({ page }) => {
|
|
146
|
+
await expect(page.locator('text=👁️ Conditional Rendering (Show)')).toBeVisible();
|
|
147
|
+
await expect(page.locator('text=🔁 List Rendering (For)')).toBeVisible();
|
|
148
|
+
});
|
|
149
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { test } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test('Debug compiled JS', async ({ page }) => {
|
|
4
|
+
// Intercept the JS request for context-test
|
|
5
|
+
const jsResponse = await page.waitForResponse(
|
|
6
|
+
(response) => response.url().includes('context-test') && response.url().includes('.js')
|
|
7
|
+
);
|
|
8
|
+
|
|
9
|
+
const jsContent = await jsResponse.text();
|
|
10
|
+
console.log('[COMPILED JS]:', jsContent.substring(0, 2000), '...');
|
|
11
|
+
|
|
12
|
+
await page.goto('http://localhost:3004/');
|
|
13
|
+
});
|
|
Binary file
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { expect, test } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test('Debug - Check page state', async ({ page }) => {
|
|
4
|
+
await page.goto('http://localhost:3004/reactivity');
|
|
5
|
+
await page.waitForLoadState('domcontentloaded');
|
|
6
|
+
await page.waitForTimeout(3000); // Wait for debug div
|
|
7
|
+
|
|
8
|
+
// Take screenshot
|
|
9
|
+
await page.screenshot({ path: 'debug-screenshot.png', fullPage: true });
|
|
10
|
+
console.log('Screenshot saved to: debug-screenshot.png');
|
|
11
|
+
|
|
12
|
+
// Get visible text
|
|
13
|
+
const bodyText = await page.textContent('body');
|
|
14
|
+
console.log('Body text length:', bodyText?.length);
|
|
15
|
+
console.log('Body contains "ROUTER DEBUG":', bodyText?.includes('ROUTER DEBUG'));
|
|
16
|
+
console.log('Body contains "Core Reactivity":', bodyText?.includes('Core Reactivity'));
|
|
17
|
+
console.log('Body contains "Synetics framework":', bodyText?.includes('Synetics framework'));
|
|
18
|
+
|
|
19
|
+
expect(true).toBe(true);
|
|
20
|
+
});
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { test } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test('Deep debug - Context theme toggle', async ({ page }) => {
|
|
4
|
+
// Capture ALL console messages
|
|
5
|
+
page.on('console', (msg) => {
|
|
6
|
+
console.log(`[BROWSER ${msg.type()}]:`, msg.text());
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
// Capture page errors
|
|
10
|
+
page.on('pageerror', (error) => {
|
|
11
|
+
console.log('[PAGE ERROR]:', error.message);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
await page.goto('http://localhost:5173/');
|
|
15
|
+
await page.waitForTimeout(1000);
|
|
16
|
+
|
|
17
|
+
// Navigate to Context page
|
|
18
|
+
await page.getByText('Context API', { exact: true }).click();
|
|
19
|
+
await page.waitForTimeout(1000);
|
|
20
|
+
|
|
21
|
+
// Verify we are on the context page
|
|
22
|
+
if (!(await page.getByText('Context API & Dependency Injection').isVisible())) {
|
|
23
|
+
console.log('[TEST] Navigation failed, forcing URL');
|
|
24
|
+
await page.goto('http://localhost:5173/context');
|
|
25
|
+
}
|
|
26
|
+
await page.waitForTimeout(2000);
|
|
27
|
+
|
|
28
|
+
// Evaluate in browser - check context state
|
|
29
|
+
const initialCheck = await page.evaluate(() => {
|
|
30
|
+
return {
|
|
31
|
+
bodyText: document.body.textContent?.slice(0, 500),
|
|
32
|
+
hasThemeSection: document.body.textContent?.includes('Theme Mode'),
|
|
33
|
+
hasDarkButton: document.body.textContent?.includes('Dark'),
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
console.log('[INITIAL STATE]:', initialCheck);
|
|
37
|
+
|
|
38
|
+
// Find and click dark button
|
|
39
|
+
const darkBtn = page.locator('button').filter({ hasText: 'Dark' }).first();
|
|
40
|
+
const exists = await darkBtn.count();
|
|
41
|
+
console.log('[DARK BUTTON EXISTS]:', exists > 0);
|
|
42
|
+
|
|
43
|
+
if (exists > 0) {
|
|
44
|
+
// Check if button is actually clickable
|
|
45
|
+
const isVisible = await darkBtn.isVisible();
|
|
46
|
+
const isEnabled = await darkBtn.isEnabled();
|
|
47
|
+
console.log('[BUTTON VISIBLE]:', isVisible);
|
|
48
|
+
console.log('[BUTTON ENABLED]:', isEnabled);
|
|
49
|
+
|
|
50
|
+
// Click it
|
|
51
|
+
await darkBtn.click();
|
|
52
|
+
console.log('[CLICKED DARK BUTTON]');
|
|
53
|
+
|
|
54
|
+
// Wait a bit
|
|
55
|
+
await page.waitForTimeout(1000);
|
|
56
|
+
|
|
57
|
+
// Check state after click
|
|
58
|
+
const afterClick = await page.evaluate(() => {
|
|
59
|
+
return {
|
|
60
|
+
bodyText: document.body.textContent?.slice(0, 500),
|
|
61
|
+
themeText: document.body.innerHTML.includes('dark') ? 'has dark' : 'no dark',
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
console.log('[AFTER CLICK]:', afterClick);
|
|
65
|
+
|
|
66
|
+
// Try to find the themed component that should show theme value
|
|
67
|
+
const themedComponent = await page.textContent('body');
|
|
68
|
+
console.log(
|
|
69
|
+
'[THEMED COMPONENT INCLUDES "Theme: dark"]:',
|
|
70
|
+
themedComponent.includes('Theme: dark')
|
|
71
|
+
);
|
|
72
|
+
console.log(
|
|
73
|
+
'[THEMED COMPONENT INCLUDES "Theme: light"]:',
|
|
74
|
+
themedComponent.includes('Theme: light')
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
test('Deep debug - Image gallery', async ({ page }) => {
|
|
80
|
+
page.on('console', (msg) => {
|
|
81
|
+
console.log(`[BROWSER ${msg.type()}]:`, msg.text());
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
page.on('pageerror', (error) => {
|
|
85
|
+
console.log('[PAGE ERROR]:', error.message);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
await page.goto('http://localhost:5173/');
|
|
89
|
+
await page.waitForTimeout(1000);
|
|
90
|
+
|
|
91
|
+
// Navigate to Resources page
|
|
92
|
+
await page.getByText('Resources', { exact: true }).click();
|
|
93
|
+
await page.waitForTimeout(1000);
|
|
94
|
+
|
|
95
|
+
// If navigation failed, force URL
|
|
96
|
+
if (!(await page.getByText('Resources').first().isVisible())) {
|
|
97
|
+
console.log('[TEST] Navigation failed, forcing URL');
|
|
98
|
+
await page.goto('http://localhost:5173/resources');
|
|
99
|
+
}
|
|
100
|
+
await page.waitForTimeout(2000);
|
|
101
|
+
|
|
102
|
+
console.log('[PAGE LOADED]');
|
|
103
|
+
|
|
104
|
+
// Click load gallery button
|
|
105
|
+
const galleryBtn = page
|
|
106
|
+
.locator('button')
|
|
107
|
+
.filter({ hasText: /Load Gallery|Run Demo/ })
|
|
108
|
+
.first();
|
|
109
|
+
if ((await galleryBtn.count()) > 0) {
|
|
110
|
+
console.log('[FOUND GALLERY BUTTON]');
|
|
111
|
+
await galleryBtn.click();
|
|
112
|
+
console.log('[CLICKED GALLERY BUTTON]');
|
|
113
|
+
|
|
114
|
+
await page.waitForTimeout(5000); // Increased wait time
|
|
115
|
+
|
|
116
|
+
// Check for images
|
|
117
|
+
const imgCount = await page.locator('img').count();
|
|
118
|
+
console.log('[IMAGE COUNT]:', imgCount);
|
|
119
|
+
|
|
120
|
+
// Check for loading states
|
|
121
|
+
const bodyText = await page.textContent('body');
|
|
122
|
+
console.log('[HAS "Loading"]:', bodyText.includes('Loading'));
|
|
123
|
+
console.log('[HAS "Error"]:', bodyText.includes('Error'));
|
|
124
|
+
console.log('[HAS "Success"]:', bodyText.includes('Success'));
|
|
125
|
+
|
|
126
|
+
// Check progress counter
|
|
127
|
+
const progressMatch = bodyText.match(/Progress:.*?(\d+)\s*\/\s*6/);
|
|
128
|
+
console.log('[PROGRESS]:', progressMatch ? progressMatch[1] : 'not found');
|
|
129
|
+
}
|
|
130
|
+
});
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { expect, test } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
test.describe('Error Boundary UI Demo', () => {
|
|
4
|
+
test.beforeEach(async ({ page }) => {
|
|
5
|
+
await page.goto('http://localhost:3004/error-boundary');
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
test('should display page header', async ({ page }) => {
|
|
9
|
+
// Check for route-specific content instead of layout header
|
|
10
|
+
await expect(page.locator('text=Error Boundary')).toBeVisible();
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
test('Error boundary - working component displays correctly', async ({ page }) => {
|
|
14
|
+
// Look for working component section
|
|
15
|
+
const workingSection = page.locator('text=Working Component').locator('..').locator('..');
|
|
16
|
+
|
|
17
|
+
if (await workingSection.isVisible()) {
|
|
18
|
+
const content = await workingSection.textContent();
|
|
19
|
+
expect(content).toBeTruthy();
|
|
20
|
+
expect(content?.length).toBeGreaterThan(0);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test('Error boundary - error trigger button exists', async ({ page }) => {
|
|
25
|
+
// Look for button that triggers error
|
|
26
|
+
const errorBtn = page.getByRole('button', { name: /throw|error|break/i });
|
|
27
|
+
|
|
28
|
+
if (await errorBtn.isVisible()) {
|
|
29
|
+
await expect(errorBtn).toBeVisible();
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('Error boundary - shows fallback UI on error', async ({ page }) => {
|
|
34
|
+
// Look for error trigger
|
|
35
|
+
const errorBtn = page.getByRole('button', { name: /throw|error|break/i });
|
|
36
|
+
|
|
37
|
+
if (await errorBtn.isVisible()) {
|
|
38
|
+
await errorBtn.click();
|
|
39
|
+
|
|
40
|
+
// Should show error fallback
|
|
41
|
+
await expect(page.locator('text=Error')).toBeVisible();
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test('Error boundary - reset button appears after error', async ({ page }) => {
|
|
46
|
+
const errorBtn = page.getByRole('button', { name: /throw|error|break/i });
|
|
47
|
+
|
|
48
|
+
if (await errorBtn.isVisible()) {
|
|
49
|
+
await errorBtn.click();
|
|
50
|
+
|
|
51
|
+
// Look for reset/retry button
|
|
52
|
+
const resetBtn = page.getByRole('button', { name: /reset|retry|recover/i });
|
|
53
|
+
await expect(resetBtn).toBeVisible();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test('Error boundary - reset restores working state', async ({ page }) => {
|
|
58
|
+
const errorBtn = page.getByRole('button', { name: /throw|error|break/i });
|
|
59
|
+
|
|
60
|
+
if (await errorBtn.isVisible()) {
|
|
61
|
+
await errorBtn.click();
|
|
62
|
+
|
|
63
|
+
const resetBtn = page.getByRole('button', { name: /reset|retry|recover/i });
|
|
64
|
+
if (await resetBtn.isVisible()) {
|
|
65
|
+
await resetBtn.click();
|
|
66
|
+
|
|
67
|
+
// Should be back to working state
|
|
68
|
+
await expect(page.locator('text=Working Component')).toBeVisible();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test('Nested error boundaries - isolates errors', async ({ page }) => {
|
|
74
|
+
// Look for nested boundaries section
|
|
75
|
+
const nestedSection = page.locator('text=Nested').locator('..').locator('..');
|
|
76
|
+
|
|
77
|
+
if (await nestedSection.isVisible()) {
|
|
78
|
+
const content = await nestedSection.textContent();
|
|
79
|
+
expect(content).toBeTruthy();
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test('Error boundary - page still functional after error', async ({ page }) => {
|
|
84
|
+
const errorBtn = page.getByRole('button', { name: /throw|error|break/i });
|
|
85
|
+
|
|
86
|
+
if (await errorBtn.isVisible()) {
|
|
87
|
+
await errorBtn.click();
|
|
88
|
+
|
|
89
|
+
// Other parts of page should still work
|
|
90
|
+
const header = page.locator('h1');
|
|
91
|
+
await expect(header).toBeVisible();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
test('Error message contains useful information', async ({ page }) => {
|
|
96
|
+
const errorBtn = page.getByRole('button', { name: /throw|error|break/i });
|
|
97
|
+
|
|
98
|
+
if (await errorBtn.isVisible()) {
|
|
99
|
+
await errorBtn.click();
|
|
100
|
+
|
|
101
|
+
// Error message should be detailed
|
|
102
|
+
const errorText = await page.locator('text=Error').textContent();
|
|
103
|
+
expect(errorText).toBeTruthy();
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
test('Demo page structure intact', async ({ page }) => {
|
|
108
|
+
// Check basic page structure exists
|
|
109
|
+
const content = await page.textContent('body');
|
|
110
|
+
expect(content).toBeTruthy();
|
|
111
|
+
expect(content?.length).toBeGreaterThan(100);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
Binary file
|