@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,232 @@
|
|
|
1
|
+
# Atomos Prime - Implementation Complete
|
|
2
|
+
|
|
3
|
+
## ✅ All Architectural Fixes Applied
|
|
4
|
+
|
|
5
|
+
### 1. **Synetics.HtmlExtends Utility** ✅
|
|
6
|
+
- Created `Synetics.HtmlExtends<T>` type utility in Synetics framework
|
|
7
|
+
- Located at: `packages/synetics.dev/src/types/html-extends.ts`
|
|
8
|
+
- Exported from main Synetics index
|
|
9
|
+
- Provides type-safe HTML element attribute extension (like React.ComponentProps)
|
|
10
|
+
|
|
11
|
+
### 2. **One Item Per File** ✅
|
|
12
|
+
All types and enums extracted to separate files:
|
|
13
|
+
|
|
14
|
+
**Design System:**
|
|
15
|
+
- `component-variant.type.ts` - ComponentVariant type
|
|
16
|
+
- `component-color.type.ts` - ComponentColor type
|
|
17
|
+
- `component-size.type.ts` - ComponentSize type
|
|
18
|
+
- `icon-size.type.ts` - IconSize type
|
|
19
|
+
- `variant-config.interface.ts` - IVariantConfig interface
|
|
20
|
+
|
|
21
|
+
**Components:**
|
|
22
|
+
- `icon-position.type.ts` - IconPosition type
|
|
23
|
+
- `button-type.type.ts` - ButtonType type
|
|
24
|
+
- `input-type.type.ts` - InputType type
|
|
25
|
+
|
|
26
|
+
### 3. **ComponentConfig Builder Pattern** ✅
|
|
27
|
+
Prototype-based builder class following strict architectural rules:
|
|
28
|
+
|
|
29
|
+
**Location:** `packages/atomos-prime.dev/src/components/interfaces/`
|
|
30
|
+
|
|
31
|
+
**Structure:**
|
|
32
|
+
```
|
|
33
|
+
interfaces/
|
|
34
|
+
├── component-config.interface.ts # IComponentConfig interface
|
|
35
|
+
├── component-config-internal.interface.ts # Internal interface
|
|
36
|
+
├── component-config.ts # Constructor
|
|
37
|
+
└── prototype/ # One method per file
|
|
38
|
+
├── variant.ts
|
|
39
|
+
├── size.ts
|
|
40
|
+
├── rounded.ts
|
|
41
|
+
├── border.ts
|
|
42
|
+
├── shadow.ts
|
|
43
|
+
├── disabled.ts
|
|
44
|
+
├── loading.ts
|
|
45
|
+
├── full-width.ts
|
|
46
|
+
├── transition.ts
|
|
47
|
+
├── transition-duration.ts
|
|
48
|
+
├── hover.ts
|
|
49
|
+
├── focus.ts
|
|
50
|
+
├── active.ts
|
|
51
|
+
├── class-name.ts
|
|
52
|
+
└── build.ts
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Usage:**
|
|
56
|
+
```typescript
|
|
57
|
+
const config = new ComponentConfig('primary')
|
|
58
|
+
.variant('solid')
|
|
59
|
+
.size('lg')
|
|
60
|
+
.rounded('md')
|
|
61
|
+
.shadow('lg')
|
|
62
|
+
.fullWidth()
|
|
63
|
+
.build()
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 4. **Declarative TSX Components** ✅
|
|
67
|
+
|
|
68
|
+
**Button Component** - `button.tsx`
|
|
69
|
+
- ✅ Uses declarative TSX with `return` statement
|
|
70
|
+
- ✅ Extends `Synetics.HtmlExtends<'button'>`
|
|
71
|
+
- ✅ Accepts `config?: IComponentConfig`
|
|
72
|
+
- ✅ Uses `{...rest}` for HTML props
|
|
73
|
+
- ✅ Conditional rendering with JSX syntax
|
|
74
|
+
|
|
75
|
+
**Input Component** - `input.tsx`
|
|
76
|
+
- ✅ Uses declarative TSX with `return` statement
|
|
77
|
+
- ✅ Extends `Synetics.HtmlExtends<'input'>`
|
|
78
|
+
- ✅ Accepts `config?: IComponentConfig`
|
|
79
|
+
- ✅ Uses `{...rest}` for HTML props
|
|
80
|
+
- ✅ Conditional rendering for error states, prefix/suffix
|
|
81
|
+
|
|
82
|
+
### 5. **Updated Component Interfaces** ✅
|
|
83
|
+
|
|
84
|
+
**IButtonProps:**
|
|
85
|
+
```typescript
|
|
86
|
+
interface IButtonProps extends Synetics.HtmlExtends<'button'> {
|
|
87
|
+
readonly config?: IComponentConfig
|
|
88
|
+
readonly label?: string
|
|
89
|
+
readonly icon?: HTMLElement | string
|
|
90
|
+
readonly iconPosition?: IconPosition
|
|
91
|
+
readonly iconOnly?: boolean
|
|
92
|
+
readonly loading?: boolean
|
|
93
|
+
readonly loadingText?: string
|
|
94
|
+
readonly ripple?: boolean
|
|
95
|
+
readonly ring?: boolean
|
|
96
|
+
readonly type?: ButtonType
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**IInputProps:**
|
|
101
|
+
```typescript
|
|
102
|
+
interface IInputProps extends Synetics.HtmlExtends<'input'> {
|
|
103
|
+
readonly config?: IComponentConfig
|
|
104
|
+
readonly type?: InputType
|
|
105
|
+
readonly value?: string | number
|
|
106
|
+
readonly defaultValue?: string | number
|
|
107
|
+
readonly error?: boolean
|
|
108
|
+
readonly errorMessage?: string
|
|
109
|
+
readonly prefix?: string | HTMLElement
|
|
110
|
+
readonly suffix?: string | HTMLElement
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 6. **Factory Functions Updated** ✅
|
|
115
|
+
All button factories use the new builder pattern:
|
|
116
|
+
- `PrimaryButton` - Primary solid variant
|
|
117
|
+
- `SecondaryButton` - Outline neutral variant
|
|
118
|
+
- `DangerButton` - Error solid variant
|
|
119
|
+
- `GhostButton` - Ghost variant
|
|
120
|
+
- `IconButton` - Icon-only with rounded full
|
|
121
|
+
|
|
122
|
+
### 7. **Documentation** ✅
|
|
123
|
+
- Updated README with builder pattern examples
|
|
124
|
+
- Created EXAMPLES.ts with comprehensive usage examples
|
|
125
|
+
- Documented all builder methods
|
|
126
|
+
- Explained Synetics.HtmlExtends pattern
|
|
127
|
+
|
|
128
|
+
## Architecture Compliance
|
|
129
|
+
|
|
130
|
+
✅ **Prototype-based classes** - ComponentConfig uses function constructor
|
|
131
|
+
✅ **One item per file** - All types, enums, interfaces separated
|
|
132
|
+
✅ **Builder pattern** - Fluent API for configuration
|
|
133
|
+
✅ **Declarative TSX** - Components return JSX, not imperative DOM
|
|
134
|
+
✅ **Type-safe props** - Synetics.HtmlExtends for HTML attributes
|
|
135
|
+
✅ **No mixed types** - All extracted to separate files
|
|
136
|
+
✅ **Kebab-case** - File naming consistent
|
|
137
|
+
✅ **No `any` types** - Full type coverage maintained
|
|
138
|
+
|
|
139
|
+
## Component Usage Examples
|
|
140
|
+
|
|
141
|
+
### Basic Button
|
|
142
|
+
```tsx
|
|
143
|
+
const config = new ComponentConfig('primary').size('md').build()
|
|
144
|
+
const btn = Button({ config, label: 'Click Me', onclick: () => {} })
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Complex Button
|
|
148
|
+
```tsx
|
|
149
|
+
const config = new ComponentConfig('success')
|
|
150
|
+
.variant('soft')
|
|
151
|
+
.size('xl')
|
|
152
|
+
.rounded('2xl')
|
|
153
|
+
.shadow('lg')
|
|
154
|
+
.fullWidth()
|
|
155
|
+
.build()
|
|
156
|
+
|
|
157
|
+
const btn = Button({
|
|
158
|
+
config,
|
|
159
|
+
label: 'Save',
|
|
160
|
+
icon: '<svg>...</svg>',
|
|
161
|
+
ripple: true
|
|
162
|
+
})
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Input with Error
|
|
166
|
+
```tsx
|
|
167
|
+
const input = Input({
|
|
168
|
+
type: 'email',
|
|
169
|
+
error: true,
|
|
170
|
+
errorMessage: 'Invalid email',
|
|
171
|
+
required: true,
|
|
172
|
+
placeholder: 'your@email.com'
|
|
173
|
+
})
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Input with Config
|
|
177
|
+
```tsx
|
|
178
|
+
const config = new ComponentConfig('primary')
|
|
179
|
+
.size('lg')
|
|
180
|
+
.fullWidth()
|
|
181
|
+
.build()
|
|
182
|
+
|
|
183
|
+
const input = Input({
|
|
184
|
+
config,
|
|
185
|
+
type: 'password',
|
|
186
|
+
placeholder: 'Enter password',
|
|
187
|
+
minLength: 8
|
|
188
|
+
})
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Files Changed/Created
|
|
192
|
+
|
|
193
|
+
### Synetics framework
|
|
194
|
+
- `src/types/html-extends.ts` (new)
|
|
195
|
+
- `index.ts` (updated - exports HtmlExtends)
|
|
196
|
+
|
|
197
|
+
### Atomos Prime - Design System
|
|
198
|
+
- Extracted 7 type files
|
|
199
|
+
- Updated all variant imports
|
|
200
|
+
|
|
201
|
+
### Atomos Prime - Components
|
|
202
|
+
- Created ComponentConfig builder (15 files)
|
|
203
|
+
- Refactored Button component to TSX
|
|
204
|
+
- Refactored Input component to TSX
|
|
205
|
+
- Updated all factory functions
|
|
206
|
+
- Created 3 enum type files
|
|
207
|
+
- Updated all interfaces to extend Synetics.HtmlExtends
|
|
208
|
+
|
|
209
|
+
### Documentation
|
|
210
|
+
- Updated README.md
|
|
211
|
+
- Created EXAMPLES.ts
|
|
212
|
+
|
|
213
|
+
## Total Files
|
|
214
|
+
|
|
215
|
+
- **Created:** 26 new files
|
|
216
|
+
- **Modified:** 15 files
|
|
217
|
+
- **Architecture:** 100% compliant with updated rules
|
|
218
|
+
|
|
219
|
+
## Next Steps
|
|
220
|
+
|
|
221
|
+
The design system is now fully implemented with:
|
|
222
|
+
1. ✅ Builder pattern for configuration
|
|
223
|
+
2. ✅ Declarative TSX components
|
|
224
|
+
3. ✅ Type-safe HTML prop extension
|
|
225
|
+
4. ✅ One item per file organization
|
|
226
|
+
5. ✅ Prototype-based architecture
|
|
227
|
+
|
|
228
|
+
Ready for:
|
|
229
|
+
- Adding more components (Checkbox, Radio, Toggle, etc.)
|
|
230
|
+
- Testing and validation
|
|
231
|
+
- Integration into applications
|
|
232
|
+
- Documentation examples
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
# Atomic Component Implementation Pattern
|
|
2
|
+
|
|
3
|
+
This document defines the **canonical pattern** for implementing atomic components in the Atomos Prime design system.
|
|
4
|
+
|
|
5
|
+
## Reference Implementation: Input Component
|
|
6
|
+
|
|
7
|
+
The Input component serves as the gold standard for all atomic component implementations.
|
|
8
|
+
|
|
9
|
+
## Core Principles
|
|
10
|
+
|
|
11
|
+
### 1. External Constants (Compiled Once)
|
|
12
|
+
All configuration and styling defaults **MUST** be defined outside the component function to ensure they are compiled once, not on every render.
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
// ✅ CORRECT - External constants
|
|
16
|
+
const inputDefaultConfig = new ComponentConfigBuilder('primary').size('md').rounded('md').build()
|
|
17
|
+
const inputDefaultStyling = new ComponentStylingBuilder()
|
|
18
|
+
.base('block border font-medium focus:outline-none')
|
|
19
|
+
.transition('transition-colors duration-200')
|
|
20
|
+
.border('border-neutral-300')
|
|
21
|
+
.focus('focus:ring-2 focus:ring-primary-500 focus:border-primary-600')
|
|
22
|
+
.background('bg-white text-neutral-900')
|
|
23
|
+
.readOnly('bg-neutral-50 cursor-default')
|
|
24
|
+
.disabled('bg-neutral-100 text-neutral-500 cursor-not-allowed')
|
|
25
|
+
.build()
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
// ❌ WRONG - Inline data in component
|
|
30
|
+
export const Input = ({ config, ...rest }: IInputProps) => {
|
|
31
|
+
const defaultConfig = { variant: 'primary', size: 'md' } // ❌ Created on every render
|
|
32
|
+
const finalConfig = config || defaultConfig
|
|
33
|
+
// ...
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 2. Ternary Operator in Return
|
|
38
|
+
Use ternary operators directly in the return statement for conditional rendering. No if-statements before return.
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
// ✅ CORRECT - Ternary in return
|
|
42
|
+
export const Input = ({
|
|
43
|
+
config = inputDefaultConfig,
|
|
44
|
+
styling = inputDefaultStyling,
|
|
45
|
+
...rest
|
|
46
|
+
}: IInputProps): HTMLElement =>
|
|
47
|
+
config.loading ?
|
|
48
|
+
<Skeleton width={config.fullWidth ? 'w-full' : 'w-64'} height="h-10" rounded={config.rounded} /> :
|
|
49
|
+
<input
|
|
50
|
+
type={type}
|
|
51
|
+
className={cn(/* ... */)}
|
|
52
|
+
{...rest}
|
|
53
|
+
/>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
// ❌ WRONG - If-statement before return
|
|
58
|
+
export const Input = ({ config, ...rest }: IInputProps) => {
|
|
59
|
+
if (config.loading) {
|
|
60
|
+
return <Skeleton />
|
|
61
|
+
}
|
|
62
|
+
return <input />
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 3. No Inline Logic in className
|
|
67
|
+
All conditional styling logic **MUST** use external constants or builder methods. No inline mapping or conditionals.
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
// ✅ CORRECT - External size classes
|
|
71
|
+
const inputSizeClasses: Record<ComponentSize, string> = {
|
|
72
|
+
xs: 'px-2 py-1 text-xs h-7',
|
|
73
|
+
md: 'px-3 py-2 text-base h-10',
|
|
74
|
+
// ...
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Usage in component
|
|
78
|
+
className={cn(
|
|
79
|
+
styling.base,
|
|
80
|
+
config.size ? inputSizeClasses[config.size] : '',
|
|
81
|
+
config.disabled ? styling.disabled : styling.background
|
|
82
|
+
)}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
// ❌ WRONG - Inline conditionals
|
|
87
|
+
className={cn(
|
|
88
|
+
'block border',
|
|
89
|
+
config.rounded === 'sm' ? 'rounded-sm' : '', // ❌ Inline mapping
|
|
90
|
+
config.rounded === 'md' ? 'rounded-md' : '', // ❌ Repeated logic
|
|
91
|
+
config.disabled ? 'bg-neutral-100 cursor-not-allowed' : 'bg-white' // ❌ Inline styles
|
|
92
|
+
)}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 4. Single Element Output (Atomic)
|
|
96
|
+
Atomic components **MUST** return exactly ONE HTML element. No wrapper divs, no complex structures.
|
|
97
|
+
|
|
98
|
+
```tsx
|
|
99
|
+
// ✅ CORRECT - Single element
|
|
100
|
+
export const Input = (props: IInputProps): HTMLElement =>
|
|
101
|
+
config.loading ?
|
|
102
|
+
<Skeleton /> : // Single element
|
|
103
|
+
<input {...props} /> // Single element
|
|
104
|
+
|
|
105
|
+
// ❌ WRONG - Multiple elements or wrappers
|
|
106
|
+
export const Input = (props: IInputProps): HTMLElement =>
|
|
107
|
+
<div> {/* ❌ Wrapper div */}
|
|
108
|
+
<label>Input</label> {/* ❌ Additional element */}
|
|
109
|
+
<input {...props} />
|
|
110
|
+
</div>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 5. ComponentConfigBuilder & ComponentStylingBuilder
|
|
114
|
+
Every component **MUST** accept both `config` and `styling` props using the builder pattern.
|
|
115
|
+
|
|
116
|
+
```tsx
|
|
117
|
+
export interface IInputProps extends Synetics.HtmlExtends<'input'> {
|
|
118
|
+
readonly config?: IComponentConfig // ✅ Configuration (size, variant, states)
|
|
119
|
+
readonly styling?: IComponentStyling // ✅ Styling (classes for states)
|
|
120
|
+
// ... other props
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 6. Synetics.HtmlExtends for Type Safety
|
|
125
|
+
All components **MUST** extend `Synetics.HtmlExtends<'element'>` to provide native HTML attributes via rest props.
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
// ✅ CORRECT
|
|
129
|
+
export interface IInputProps extends Synetics.HtmlExtends<'input'> {
|
|
130
|
+
readonly config?: IComponentConfig
|
|
131
|
+
readonly value?: string | number
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// ❌ WRONG - Missing HTML attributes
|
|
135
|
+
export interface IInputProps {
|
|
136
|
+
readonly config?: IComponentConfig
|
|
137
|
+
// ❌ No way to pass id, className, onClick, etc.
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 7. Loading State with Skeleton
|
|
142
|
+
Components with `config.loading` **MUST** use the Skeleton component, not custom loading UI.
|
|
143
|
+
|
|
144
|
+
```tsx
|
|
145
|
+
// ✅ CORRECT
|
|
146
|
+
config.loading ?
|
|
147
|
+
<Skeleton width={config.fullWidth ? 'w-full' : 'w-64'} height="h-10" rounded={config.rounded} /> :
|
|
148
|
+
<input {...props} />
|
|
149
|
+
|
|
150
|
+
// ❌ WRONG - Custom loading div
|
|
151
|
+
config.loading ?
|
|
152
|
+
<div className="animate-pulse bg-gray-200" /> : // ❌ Custom implementation
|
|
153
|
+
<input {...props} />
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Complete Example: Input Component
|
|
157
|
+
|
|
158
|
+
```tsx
|
|
159
|
+
/**
|
|
160
|
+
* Input component implementation
|
|
161
|
+
* Framework: Synetics
|
|
162
|
+
*/
|
|
163
|
+
|
|
164
|
+
import { cn, inputSizeClasses, roundedClasses } from '../../../design/utility'
|
|
165
|
+
import { ComponentConfigBuilder } from '../../utils/component-config-builder/component-config-builder'
|
|
166
|
+
import { ComponentStylingBuilder } from '../../utils/component-styling-builder/component-styling-builder'
|
|
167
|
+
import { Skeleton } from '../skeleton'
|
|
168
|
+
import { type IInputProps } from './input.type'
|
|
169
|
+
|
|
170
|
+
// External to the component so it's compiled ONCE!
|
|
171
|
+
const inputDefaultConfig = new ComponentConfigBuilder('primary').size('md').rounded('md').build()
|
|
172
|
+
|
|
173
|
+
// External to the component so it's compiled ONCE!
|
|
174
|
+
const inputDefaultStyling = new ComponentStylingBuilder()
|
|
175
|
+
.base('block border font-medium focus:outline-none')
|
|
176
|
+
.transition('transition-colors duration-200')
|
|
177
|
+
.border('border-neutral-300')
|
|
178
|
+
.focus('focus:ring-2 focus:ring-primary-500 focus:border-primary-600')
|
|
179
|
+
.background('bg-white text-neutral-900')
|
|
180
|
+
.readOnly('bg-neutral-50 cursor-default')
|
|
181
|
+
.disabled('bg-neutral-100 text-neutral-500 cursor-not-allowed')
|
|
182
|
+
.build()
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Input component
|
|
186
|
+
* Creates an accessible text input - atomic component (single element output)
|
|
187
|
+
*/
|
|
188
|
+
export const Input = ({
|
|
189
|
+
config = inputDefaultConfig,
|
|
190
|
+
styling = inputDefaultStyling,
|
|
191
|
+
type = 'text',
|
|
192
|
+
value,
|
|
193
|
+
defaultValue,
|
|
194
|
+
...rest
|
|
195
|
+
}: IInputProps): HTMLElement =>
|
|
196
|
+
config.loading ?
|
|
197
|
+
<Skeleton width={config.fullWidth ? 'w-full' : 'w-64'} height="h-10" rounded={config.rounded} /> :
|
|
198
|
+
<input
|
|
199
|
+
type={type}
|
|
200
|
+
className={cn(
|
|
201
|
+
styling.base,
|
|
202
|
+
styling.transition,
|
|
203
|
+
styling.border,
|
|
204
|
+
styling.focus,
|
|
205
|
+
config.size ? inputSizeClasses[config.size] : '',
|
|
206
|
+
config.disabled ? styling.disabled : 'readOnly' in rest && rest.readOnly ? styling.readOnly : styling.background,
|
|
207
|
+
config.rounded ? roundedClasses[config.rounded] : '',
|
|
208
|
+
config.fullWidth ? 'w-full' : '',
|
|
209
|
+
config.className,
|
|
210
|
+
styling.custom
|
|
211
|
+
)}
|
|
212
|
+
value={value}
|
|
213
|
+
defaultValue={defaultValue}
|
|
214
|
+
disabled={config.disabled}
|
|
215
|
+
ariaBusy={config.loading ? 'true' : 'false'}
|
|
216
|
+
{...rest}
|
|
217
|
+
/>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Type Definition
|
|
221
|
+
|
|
222
|
+
```typescript
|
|
223
|
+
import type { Synetics } from 'pulsar'
|
|
224
|
+
import { type InputType } from '../../enums/input-type.type'
|
|
225
|
+
import { type IComponentConfig } from '../../utils/component-config-builder/component-config.type'
|
|
226
|
+
import { type IComponentStyling } from '../../utils/component-styling-builder/component-styling.type'
|
|
227
|
+
|
|
228
|
+
export interface IInputProps extends Omit<Synetics.HtmlExtends<'input'>, 'value' | 'defaultValue'> {
|
|
229
|
+
// Component configuration
|
|
230
|
+
readonly config?: IComponentConfig
|
|
231
|
+
|
|
232
|
+
// Component styling
|
|
233
|
+
readonly styling?: IComponentStyling
|
|
234
|
+
|
|
235
|
+
// Input type
|
|
236
|
+
readonly type?: InputType
|
|
237
|
+
|
|
238
|
+
// Input value (string or number to match HTMLInputElement)
|
|
239
|
+
readonly value?: string | number
|
|
240
|
+
readonly defaultValue?: string | number
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Common Violations to Avoid
|
|
245
|
+
|
|
246
|
+
### ❌ Violation 1: Complex Props Instead of Simple Atoms
|
|
247
|
+
```tsx
|
|
248
|
+
// ❌ WRONG - prefix/suffix make it a molecule
|
|
249
|
+
export interface IInputProps {
|
|
250
|
+
readonly prefix?: HTMLElement
|
|
251
|
+
readonly suffix?: HTMLElement
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
**Solution**: Atoms are single elements. Prefix/suffix belong in molecule components.
|
|
255
|
+
|
|
256
|
+
### ❌ Violation 2: Inline Variant Mapping
|
|
257
|
+
```tsx
|
|
258
|
+
// ❌ WRONG
|
|
259
|
+
const variantMap = {
|
|
260
|
+
solid: solidVariants,
|
|
261
|
+
outline: outlineVariants
|
|
262
|
+
}
|
|
263
|
+
const variantStyles = variantMap[config.variant][config.color]
|
|
264
|
+
```
|
|
265
|
+
**Solution**: Use ComponentStylingBuilder with predefined styles.
|
|
266
|
+
|
|
267
|
+
### ❌ Violation 3: Inline Rounded/Shadow Classes
|
|
268
|
+
```tsx
|
|
269
|
+
// ❌ WRONG
|
|
270
|
+
config.rounded === 'sm' ? 'rounded-sm' : '',
|
|
271
|
+
config.rounded === 'md' ? 'rounded-md' : '',
|
|
272
|
+
config.shadow === 'sm' ? 'shadow-sm' : ''
|
|
273
|
+
```
|
|
274
|
+
**Solution**: Use external `roundedClasses` and `shadowClasses` constants.
|
|
275
|
+
|
|
276
|
+
### ❌ Violation 4: Complex Event Handlers
|
|
277
|
+
```tsx
|
|
278
|
+
// ❌ WRONG - Creating ripple effect in atomic component
|
|
279
|
+
const handleClick = (e) => {
|
|
280
|
+
createRippleEffect(e)
|
|
281
|
+
rest.onClick?.()
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
**Solution**: Ripple effects belong in molecule/organism components. Atoms are simple.
|
|
285
|
+
|
|
286
|
+
### ❌ Violation 5: Multiple Elements
|
|
287
|
+
```tsx
|
|
288
|
+
// ❌ WRONG - Wrapping in extra elements
|
|
289
|
+
return (
|
|
290
|
+
<div>
|
|
291
|
+
<label>{label}</label>
|
|
292
|
+
<input />
|
|
293
|
+
</div>
|
|
294
|
+
)
|
|
295
|
+
```
|
|
296
|
+
**Solution**: Atoms return a single element. Label+Input is a molecule.
|
|
297
|
+
|
|
298
|
+
## Checklist for New Components
|
|
299
|
+
|
|
300
|
+
- [ ] External `defaultConfig` and `defaultStyling` constants
|
|
301
|
+
- [ ] Ternary operator in return statement (loading ? Skeleton : element)
|
|
302
|
+
- [ ] Single element output (no wrappers)
|
|
303
|
+
- [ ] Props extend `Synetics.HtmlExtends<'element'>`
|
|
304
|
+
- [ ] Accept `config?: IComponentConfig` and `styling?: IComponentStyling`
|
|
305
|
+
- [ ] Use external size/rounded/shadow class mappings
|
|
306
|
+
- [ ] No inline logic in className (use external constants)
|
|
307
|
+
- [ ] Skeleton component for loading state
|
|
308
|
+
- [ ] No complex features (ripple, icons, labels) - keep it atomic
|
|
309
|
+
|
|
310
|
+
## When to Use Molecules Instead
|
|
311
|
+
|
|
312
|
+
If your component needs any of these, it's a **molecule**, not an atom:
|
|
313
|
+
- Multiple HTML elements (label + input, icon + text)
|
|
314
|
+
- Wrapper elements for layout
|
|
315
|
+
- Complex interactions (ripple effects, animations)
|
|
316
|
+
- Composition of other components
|
|
317
|
+
- Prefix/suffix/adornments
|
|
318
|
+
|
|
319
|
+
**Atoms are simple, single-element building blocks. Molecules combine atoms into more complex UI.**
|