From d97fb00b9ff4fea7e9253394529fcf2f1ebd6431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Zl=C3=A1mal?= Date: Tue, 14 Jan 2025 10:29:52 +0100 Subject: [PATCH] SX: remove --- .github/workflows/playwright.yml | 5 - scripts/publishedPackages.json | 8 +- .../react/no-unused-vars.js | 13 - .../__snapshots__/index.test.js.snap | 5 - .../__snapshots__/presets.test.js.snap | 5 - src/eslint-config-adeira/package.json | 1 - src/eslint-config-adeira/src/presets/base.js | 7 - src/eslint-plugin-sx/.npmignore | 2 - src/eslint-plugin-sx/LICENSE | 21 - src/eslint-plugin-sx/README.md | 48 - .../docs/rules/no-concatenated-classes.md | 50 - .../docs/rules/no-unused-stylesheet.md | 56 - .../docs/rules/use-logical-properties.md | 33 - .../docs/rules/valid-usage.md | 54 - src/eslint-plugin-sx/package.json | 35 - .../src/__tests__/fixtures/directory/ruleX.js | 1 - .../src/__tests__/fixtures/ruleA.js | 1 - .../src/__tests__/fixtures/ruleA.js.flow | 0 .../src/__tests__/fixtures/ruleB.js | 1 - .../src/__tests__/fixtures/ruleB.js.flow | 0 .../src/__tests__/fixtures/ruleC.txt | 0 .../src/__tests__/getRules.test.js | 26 - src/eslint-plugin-sx/src/getRules.js | 25 - src/eslint-plugin-sx/src/index.js | 7 - .../no-unused-stylesheet.test.js.snap | 49 - .../normalizeIndent.test.js.snap | 12 - .../no-concatenated-classes/.eslintrc.js | 14 - .../no-concatenated-classes/invalid/basic.js | 23 - .../invalid/complex-classname.js | 16 - .../invalid/custom-sx-names.js | 23 - .../no-concatenated-classes/valid/basic.js | 12 - .../valid/simple-template-literal.js | 12 - .../valid/sx-multiple-arguments.js | 20 - .../no-unused-stylesheet/.eslintrc.js | 15 - .../invalid/composability.js | 19 - .../invalid/fake-call-expression.js | 19 - .../invalid/issue-1323.js | 21 - .../invalid/sx-conditional-call-2.js | 20 - .../sx-conditional-call-alternative.js | 27 - .../invalid/sx-conditional-call.js | 26 - .../invalid/sx-multiple-definitions.js | 27 - .../invalid/unknown-stylesheet.js | 19 - .../invalid/unrelated-call-expression.js | 19 - .../invalid/unused-stylesheet.js | 18 - .../invalid/unused-sx-multiple.js | 28 - .../no-unused-stylesheet/invalid/unused-sx.js | 17 - .../composability-identifier-property.js | 14 - .../valid/composability-literal-property.js | 15 - .../valid/react-clone-element-invalid.js | 34 - .../valid/react-clone-element.js | 27 - .../valid/react-component-unused-sx.js | 19 - .../valid/react-component-without-sx.js | 7 - .../valid/sx-complex-className.js | 14 - .../valid/sx-conditional-call-2.js | 15 - .../valid/sx-conditional-call-alternative.js | 23 - .../valid/sx-conditional-call.js | 20 - .../valid/sx-create-import-aliased.js | 12 - .../valid/sx-create-import.js | 12 - .../no-unused-stylesheet/valid/sx-dynamic.js | 13 - .../valid/sx-multiple-definitions.js | 21 - .../valid/sx-multiple-stylesheets.js | 13 - .../valid/sx-multiple-usages.js | 18 - .../valid/sx-namespace-import.js | 12 - .../valid/sx-not-className.js | 18 - .../valid/sx-template-string.js | 20 - .../valid/sx-with-quoted-properties.js | 15 - .../use-logical-properties/.eslintrc.js | 14 - .../invalid/autofixed/border.js | 55 - .../invalid/autofixed/margin.js | 24 - .../invalid/autofixed/padding.js | 24 - .../invalid/autofixed/text-align.js | 22 - .../use-logical-properties/invalid/border.js | 55 - .../use-logical-properties/invalid/margin.js | 24 - .../use-logical-properties/invalid/padding.js | 24 - .../invalid/text-align.js | 22 - .../use-logical-properties/valid/border.js | 37 - .../use-logical-properties/valid/margin.js | 18 - .../use-logical-properties/valid/padding.js | 18 - .../valid/text-align.js | 33 - .../fixtures/valid-usage/.eslintrc.js | 14 - .../valid-usage/invalid/sx-empty-argument.js | 15 - .../invalid/sx-invalid-argument.js | 15 - .../invalid/sx-invalid-stylesheet-type.js | 16 - .../invalid/sx-keyframes-empty-argument.js | 20 - .../invalid/sx-keyframes-invalid-argument.js | 20 - .../sx-keyframes-invalid-stylesheet-type.js | 22 - .../sx-keyframes-too-many-arguments.js | 26 - .../invalid/sx-too-many-arguments.js | 21 - .../sxCreate-invalid-stylesheet-type.js | 16 - .../invalid/sxCreate-too-many-arguments.js | 21 - .../invalid/sxKeyframes-too-many-arguments.js | 26 - .../valid-usage/valid/basic-conditional.js | 12 - .../fixtures/valid-usage/valid/basic.js | 12 - .../valid-usage/valid/identifier-property.js | 16 - .../valid-usage/valid/sx-keyframes.js | 35 - .../__tests__/no-concatenated-classes.test.js | 14 - .../__tests__/no-unused-stylesheet.test.js | 100 - .../src/rules/__tests__/normalizeIndent.js | 7 - .../rules/__tests__/normalizeIndent.test.js | 14 - .../__tests__/use-logical-properties.test.js | 14 - .../src/rules/__tests__/valid-usage.test.js | 14 - .../src/rules/no-concatenated-classes.js | 92 - .../src/rules/no-unused-stylesheet.js | 235 -- .../src/rules/use-logical-properties.js | 169 -- .../src/rules/utils/getObjectPropertyName.js | 18 - .../src/rules/utils/getSXImportSpecifiers.js | 55 - .../utils/getVariableDeclaratorCalleeName.js | 21 - .../utils/isSXKeyframesVariableDeclarator.js | 23 - .../src/rules/utils/isSXVariableDeclarator.js | 23 - src/eslint-plugin-sx/src/rules/valid-usage.js | 104 - src/forms/.babelrc.js | 5 - src/forms/.eslintrc.js | 13 - src/forms/.npmignore | 2 - src/forms/LICENSE | 21 - src/forms/README.md | 79 - src/forms/jest-setup.js | 4 - src/forms/jest.config.js | 8 - src/forms/package.json | 39 - src/forms/src/FormEmail.js | 31 - src/forms/src/FormErrorMessages.js | 29 - src/forms/src/FormMultiSelect.js | 32 - src/forms/src/FormMultiUpload.js | 32 - src/forms/src/FormNumber.js | 37 - src/forms/src/FormPassword.js | 27 - src/forms/src/FormRoot.js | 113 - src/forms/src/FormRootContext.js | 41 - src/forms/src/FormSelect.js | 37 - src/forms/src/FormSelectOption.js | 19 - src/forms/src/FormSubmit.js | 85 - src/forms/src/FormText.js | 30 - src/forms/src/FormTextArea.js | 30 - src/forms/src/__tests__/FormEmail.test.js | 77 - .../src/__tests__/FormMultiSelect.test.js | 57 - .../src/__tests__/FormMultiUpload.test.js | 44 - src/forms/src/__tests__/FormNumber.test.js | 81 - src/forms/src/__tests__/FormPassword.test.js | 72 - src/forms/src/__tests__/FormSelect.test.js | 60 - src/forms/src/__tests__/FormText.test.js | 77 - src/forms/src/__tests__/FormTextArea.test.js | 72 - src/forms/src/index.js | 14 - src/forms/src/private/BaseInput.js | 130 -- src/forms/src/private/BaseInputWrapper.js | 78 - src/forms/src/private/BaseSelect.js | 98 - src/forms/src/private/BaseTextArea.js | 72 - .../src/private/getValidityStateMessage.js | 93 - src/forms/src/private/testUtils.js | 39 - src/forms/src/private/useFormFieldState.js | 59 - src/forms/translations/enum_manifest.json | 1 - src/forms/translations/in/es_MX.json | 615 ------ src/forms/translations/out/en_US.json | 3 - src/forms/translations/out/es_MX.json | 14 - src/forms/translations/source_strings.json | 215 -- src/forms/translations/src_manifest.json | 1 - .../config/__tests__/eslint-plugin-sx.test.js | 15 - .../config/eslint-plugin-sx.js | 14 - src/sx-design-headless/.npmignore | 7 - src/sx-design-headless/LICENSE | 21 - src/sx-design-headless/README.md | 1 - src/sx-design-headless/index.js | 4 - src/sx-design-headless/package.json | 24 - src/sx-design-headless/src/Button/Button.js | 73 - src/sx-design-headless/src/Link/Link.js | 37 - src/sx-design/.babelrc.js | 6 - src/sx-design/.eslintrc.js | 52 - src/sx-design/.npmignore | 7 - src/sx-design/.storybook/global.css | 13 - src/sx-design/.storybook/main.js | 36 - src/sx-design/.storybook/preview.js | 46 - src/sx-design/LICENSE | 21 - src/sx-design/README.md | 226 -- src/sx-design/__flowtests__/Badge.js | 47 - src/sx-design/__flowtests__/Button.js | 116 - src/sx-design/__flowtests__/Entity.js | 51 - src/sx-design/__flowtests__/FilterChips.js | 49 - src/sx-design/__flowtests__/Kbd.js | 19 - src/sx-design/__flowtests__/LinkButton.js | 63 - src/sx-design/__flowtests__/Menu.js | 79 - src/sx-design/__flowtests__/Tabs.js | 57 - src/sx-design/__flowtests__/Text.js | 72 - src/sx-design/__flowtests__/Tooltip.js | 22 - src/sx-design/__mocks__/tabbable.js | 31 - src/sx-design/docs/storybook-top-panel.png | Bin 100745 -> 0 bytes src/sx-design/index.js | 52 - src/sx-design/jest-setup.js | 4 - src/sx-design/jest.config.js | 8 - src/sx-design/package.json | 68 - src/sx-design/playwright.config.js | 28 - src/sx-design/playwright/.eslintrc.js | 16 - src/sx-design/playwright/README.md | 3 - src/sx-design/playwright/ui/homepage.play.js | 8 - src/sx-design/src/Badge/Badge.js | 56 - src/sx-design/src/Badge/Badge.stories.js | 25 - .../src/Badge/__tests__/Badge.test.js | 80 - src/sx-design/src/Breadcrumb/Breadcrumb.js | 75 - .../src/Breadcrumb/Breadcrumb.stories.js | 25 - .../src/Breadcrumb/BreadcrumbItem.js | 45 - .../Breadcrumb/__tests__/Breadcrumb.test.js | 52 - src/sx-design/src/Button/Button.js | 43 - src/sx-design/src/Button/Button.stories.js | 116 - src/sx-design/src/Button/ButtonLink.js | 65 - .../src/Button/ButtonLink.stories.js | 53 - .../src/Button/__tests__/Button.test.js | 113 - .../src/Button/__tests__/ButtonLink.test.js | 35 - src/sx-design/src/Button/styles.js | 93 - src/sx-design/src/Chips/Chip.js | 97 - src/sx-design/src/Chips/FilterChip.js | 34 - src/sx-design/src/Chips/FilterChips.js | 49 - .../src/Chips/FilterChips.stories.js | 50 - .../src/Chips/__tests__/FilterChips.test.js | 54 - src/sx-design/src/DateTime/DateTime.js | 54 - .../src/DateTime/DateTime.stories.js | 31 - .../src/DateTime/__tests__/DateTime.test.js | 104 - src/sx-design/src/Entity/Entity.js | 32 - src/sx-design/src/Entity/Entity.stories.js | 23 - src/sx-design/src/Entity/EntityField.js | 45 - .../src/Entity/__tests__/Entity.test.js | 34 - .../src/Entity/__tests__/EntityField.test.js | 35 - .../src/ErrorBoundary/ErrorBoundary.js | 123 -- .../ErrorBoundary/ErrorBoundary.stories.js | 77 - .../__tests__/ErrorBoundary.test.js | 98 - .../src/ErrorBoundary/windowLocationReload.js | 5 - .../src/FlashMessage/FlashMessage.js | 119 - .../src/FlashMessage/FlashMessage.stories.js | 92 - .../src/FlashMessage/FlashMessagesRenderer.js | 14 - .../src/FlashMessage/useFlashMessages.js | 53 - src/sx-design/src/Image/Image.js | 105 - src/sx-design/src/Image/Image.stories.js | 26 - .../src/Image/__tests__/Image.test.js | 49 - src/sx-design/src/Kbd/Kbd.js | 45 - src/sx-design/src/Kbd/Kbd.stories.js | 29 - src/sx-design/src/Kbd/__tests__/Kbd.test.js | 36 - src/sx-design/src/Layout/LayoutBlock.js | 42 - .../src/Layout/LayoutBlock.stories.js | 59 - src/sx-design/src/Layout/LayoutGrid.js | 45 - .../src/Layout/LayoutGrid.stories.js | 63 - src/sx-design/src/Layout/LayoutInline.js | 61 - .../src/Layout/LayoutInline.stories.js | 59 - .../src/Layout/__tests__/LayoutBlock.test.js | 32 - .../src/Layout/__tests__/LayoutGrid.test.js | 32 - .../src/Layout/__tests__/LayoutInline.test.js | 32 - src/sx-design/src/Link/Link.js | 109 - src/sx-design/src/Link/Link.stories.js | 50 - src/sx-design/src/Link/LinkButton.js | 82 - src/sx-design/src/Link/LinkButton.stories.js | 90 - src/sx-design/src/Link/__tests__/Link.test.js | 73 - .../src/Link/__tests__/LinkButton.test.js | 58 - src/sx-design/src/Loader/Loader.js | 75 - src/sx-design/src/Loader/Loader.stories.js | 13 - .../src/Loader/__tests__/Loader.test.js | 20 - src/sx-design/src/MediaQueries.js | 34 - src/sx-design/src/Menu/Menu.js | 63 - src/sx-design/src/Menu/Menu.stories.js | 29 - src/sx-design/src/Menu/MenuItem.js | 39 - src/sx-design/src/Menu/MenuItemDivider.js | 19 - src/sx-design/src/Menu/__tests__/Menu.test.js | 64 - src/sx-design/src/Meter/Meter.js | 49 - src/sx-design/src/Meter/Meter.stories.js | 24 - .../src/Meter/__tests__/Meter.test.js | 44 - src/sx-design/src/MissingData/MissingData.js | 37 - .../src/MissingData/MissingData.stories.js | 13 - .../MissingData/__tests__/MissingData.test.js | 28 - src/sx-design/src/Modal/Modal.js | 97 - src/sx-design/src/Modal/Modal.stories.js | 117 - src/sx-design/src/Modal/ModalBackdrop.js | 63 - src/sx-design/src/Modal/ModalDialog.js | 73 - src/sx-design/src/Modal/ModalDrawer.js | 73 - .../src/Modal/__tests__/Modal.test.js | 176 -- src/sx-design/src/Money/Money.js | 67 - src/sx-design/src/Money/Money.stories.js | 27 - .../src/Money/__tests__/Money.test.js | 102 - src/sx-design/src/Note/Note.js | 74 - src/sx-design/src/Note/Note.stories.js | 58 - src/sx-design/src/Note/__tests__/Note.test.js | 82 - src/sx-design/src/Placeholder/Placeholder.js | 50 - .../src/Placeholder/Placeholder.stories.js | 41 - .../Placeholder/__tests__/Placeholder.test.js | 35 - src/sx-design/src/ProductCard/ProductCard.js | 171 -- .../src/ProductCard/ProductCard.stories.js | 83 - .../ProductCard/__tests__/ProductCard.test.js | 35 - src/sx-design/src/Skeleton/Skeleton.js | 99 - .../src/Skeleton/Skeleton.stories.js | 49 - .../src/Skeleton/__tests__/Skeleton.test.js | 34 - src/sx-design/src/SkipLink/SkipLink.js | 34 - .../src/SkipLink/SkipLink.stories.js | 40 - src/sx-design/src/SxDesignContext.js | 29 - src/sx-design/src/SxDesignPortal.js | 33 - src/sx-design/src/SxDesignProvider.js | 147 -- .../src/SxDesignProviderCSSVariables.js | 78 - src/sx-design/src/Table/Table.js | 117 - src/sx-design/src/Table/Table.stories.js | 54 - .../src/Table/__tests__/Table.test.js | 82 - src/sx-design/src/Tabs/Tabs.js | 148 -- src/sx-design/src/Tabs/Tabs.stories.js | 77 - src/sx-design/src/Tabs/__tests__/Tabs.test.js | 198 -- src/sx-design/src/Text/Text.js | 132 -- src/sx-design/src/Text/Text.stories.js | 95 - src/sx-design/src/Text/__tests__/Text.test.js | 103 - src/sx-design/src/Tooltip/Tooltip.js | 128 -- src/sx-design/src/Tooltip/Tooltip.stories.js | 85 - .../src/Tooltip/__tests__/Tooltip.test.js | 147 -- .../__tests__/findBestTooltipPosition.test.js | 94 - .../src/Tooltip/findBestTooltipPosition.js | 71 - src/sx-design/src/constants.js | 54 - src/sx-design/src/getFbtTranslations.js | 34 - src/sx-design/src/stories/ColorShowcase.js | 36 - src/sx-design/src/stories/Colors.stories.mdx | 67 - .../src/stories/useAccessibleColor.js | 53 - src/sx-design/src/test-utils.js | 59 - src/sx-design/src/useSxDesignContext.js | 18 - src/sx-design/translations/enum_manifest.json | 1 - src/sx-design/translations/in/ar_AR.json | 65 - src/sx-design/translations/in/cs_CZ.json | 135 -- src/sx-design/translations/in/es_MX.json | 135 -- src/sx-design/translations/in/no_NO.json | 135 -- src/sx-design/translations/in/ru_RU.json | 65 - src/sx-design/translations/in/uk_UA.json | 65 - src/sx-design/translations/out/ar_AR.json | 14 - src/sx-design/translations/out/cs_CZ.json | 14 - src/sx-design/translations/out/en_US.json | 3 - src/sx-design/translations/out/es_MX.json | 14 - src/sx-design/translations/out/no_NO.json | 14 - src/sx-design/translations/out/ru_RU.json | 14 - src/sx-design/translations/out/uk_UA.json | 14 - .../translations/source_strings.json | 215 -- src/sx-design/translations/src_manifest.json | 1 - src/sx-jest-snapshot-serializer/.npmignore | 2 - src/sx-jest-snapshot-serializer/LICENSE | 21 - src/sx-jest-snapshot-serializer/README.md | 52 - .../__snapshots__/serializer.test.js.snap | 19 - .../__tests__/serializer.test.js | 25 - src/sx-jest-snapshot-serializer/index.js | 38 - src/sx-jest-snapshot-serializer/package.json | 26 - src/sx/.npmignore | 2 - src/sx/LICENSE | 21 - src/sx/README.md | 496 ----- src/sx/__flowtests__/css-properties.js | 100 - src/sx/__flowtests__/sx-composability.js | 24 - src/sx/__flowtests__/sx-usage.js | 100 - src/sx/index.js | 63 - src/sx/jest.config.js | 8 - src/sx/package.json | 39 - src/sx/scripts/setupTests.js | 4 - src/sx/src/StyleCollector.js | 141 -- src/sx/src/StyleCollectorAtNode.js | 57 - src/sx/src/StyleCollectorNode.js | 61 - src/sx/src/StyleCollectorNodeInterface.js | 11 - src/sx/src/StyleCollectorPseudoNode.js | 51 - src/sx/src/__tests__/StyleCollector.test.js | 171 -- .../__tests__/StyleCollectorAtNode.test.js | 27 - .../src/__tests__/StyleCollectorNode.test.js | 48 - .../StyleCollectorPseudoNode.test.js | 31 - src/sx/src/__tests__/SxDomTests.test.js | 201 -- .../__snapshots__/fixtures.test.js.snap | 846 -------- src/sx/src/__tests__/composability.test.js | 155 -- src/sx/src/__tests__/create.test.js | 147 -- .../expandShorthandProperties.test.js | 17 - src/sx/src/__tests__/fixtures.test.js | 73 - .../__tests__/fixtures/@supports-nested.js | 17 - src/sx/src/__tests__/fixtures/@supports.js | 23 - src/sx/src/__tests__/fixtures/@unknown.js | 11 - src/sx/src/__tests__/fixtures/autoprefix.js | 9 - .../__tests__/fixtures/keyframes-from-to.js | 19 - .../fixtures/keyframes-percentage.js | 22 - .../fixtures/media-queries-multiple.js | 22 - .../fixtures/media-queries-nested-deep.js | 32 - .../fixtures/media-queries-nested-pseudo.js | 15 - .../fixtures/media-queries-nested.js | 14 - .../fixtures/media-queries-same-style.js | 15 - .../src/__tests__/fixtures/media-queries.js | 15 - .../fixtures/pseudo-classes-multiple.js | 21 - .../fixtures/pseudo-classes-nested-1.js | 18 - .../fixtures/pseudo-classes-nested-2.js | 11 - .../src/__tests__/fixtures/pseudo-classes.js | 12 - .../__tests__/fixtures/pseudo-elements-2.js | 15 - .../src/__tests__/fixtures/pseudo-elements.js | 18 - .../src/__tests__/fixtures/readme-example.js | 12 - .../__tests__/fixtures/simple-transforms.js | 32 - .../fixtures/simple-with-duplicates.js | 18 - src/sx/src/__tests__/fixtures/simple.js | 15 - src/sx/src/__tests__/fixtures/variables.js | 18 - src/sx/src/__tests__/hashStyle.test.js | 11 - .../src/__tests__/injectRuntimeStyles.test.js | 70 - src/sx/src/__tests__/keyframes.test.js | 94 - src/sx/src/__tests__/renderPageWithSX.test.js | 53 - .../src/__tests__/transformStyleName.test.js | 15 - src/sx/src/__tests__/transformValue.test.js | 54 - src/sx/src/create.js | 124 -- src/sx/src/css-properties/README.md | 16 - .../__generated__/AllCSSPropertyTypes.js | 811 ------- .../__generated__/AllCSSPseudoTypes.js | 89 - .../isUnitlessNumber.test.js.snap | 90 - .../__tests__/freshness.test.js | 24 - .../__tests__/isUnitlessNumber.test.js | 7 - .../src/css-properties/generateFlowTypes.js | 15 - .../css-properties/generatePropertyTypes.js | 74 - .../src/css-properties/generatePseudoTypes.js | 44 - .../generator/__tests__/collectTypes.test.js | 41 - .../css-properties/generator/collectTypes.js | 86 - .../src/css-properties/generator/flowTypes.js | 4 - src/sx/src/css-properties/isUnitlessNumber.js | 68 - src/sx/src/css-properties/paths.js | 8 - src/sx/src/css-properties/prettify.js | 14 - src/sx/src/expandShorthandProperties.js | 80 - src/sx/src/getStyleTag.js | 25 - src/sx/src/hashStyle.js | 8 - src/sx/src/injectRuntimeStyles.js | 104 - src/sx/src/keyframes.js | 55 - .../__tests__/expandBackground.test.js | 56 - .../__tests__/expandBorder.test.js | 84 - .../__tests__/expandFlex.test.js | 112 - .../__tests__/expandMarginPadding.test.js | 333 --- .../__tests__/expandOverflow.test.js | 48 - .../__tests__/printNodes.js | 7 - .../shorthand-properties/expandBackground.js | 44 - .../src/shorthand-properties/expandBorder.js | 59 - src/sx/src/shorthand-properties/expandFlex.js | 75 - .../expandMarginPadding.js | 84 - .../shorthand-properties/expandOverflow.js | 32 - src/sx/src/transformStyleName.js | 19 - src/sx/src/transformValue.js | 48 - yarn.lock | 1905 +---------------- 421 files changed, 71 insertions(+), 23814 deletions(-) delete mode 100644 src/eslint-config-adeira/__tests__/__fixtures__/valid-eslint-examples/react/no-unused-vars.js delete mode 100644 src/eslint-plugin-sx/.npmignore delete mode 100644 src/eslint-plugin-sx/LICENSE delete mode 100644 src/eslint-plugin-sx/README.md delete mode 100644 src/eslint-plugin-sx/docs/rules/no-concatenated-classes.md delete mode 100644 src/eslint-plugin-sx/docs/rules/no-unused-stylesheet.md delete mode 100644 src/eslint-plugin-sx/docs/rules/use-logical-properties.md delete mode 100644 src/eslint-plugin-sx/docs/rules/valid-usage.md delete mode 100644 src/eslint-plugin-sx/package.json delete mode 100644 src/eslint-plugin-sx/src/__tests__/fixtures/directory/ruleX.js delete mode 100644 src/eslint-plugin-sx/src/__tests__/fixtures/ruleA.js delete mode 100644 src/eslint-plugin-sx/src/__tests__/fixtures/ruleA.js.flow delete mode 100644 src/eslint-plugin-sx/src/__tests__/fixtures/ruleB.js delete mode 100644 src/eslint-plugin-sx/src/__tests__/fixtures/ruleB.js.flow delete mode 100644 src/eslint-plugin-sx/src/__tests__/fixtures/ruleC.txt delete mode 100644 src/eslint-plugin-sx/src/__tests__/getRules.test.js delete mode 100644 src/eslint-plugin-sx/src/getRules.js delete mode 100644 src/eslint-plugin-sx/src/index.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/__snapshots__/no-unused-stylesheet.test.js.snap delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/__snapshots__/normalizeIndent.test.js.snap delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/.eslintrc.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/invalid/basic.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/invalid/complex-classname.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/invalid/custom-sx-names.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/valid/basic.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/valid/simple-template-literal.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/valid/sx-multiple-arguments.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/.eslintrc.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/composability.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/fake-call-expression.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/issue-1323.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-conditional-call-2.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-conditional-call-alternative.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-conditional-call.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-multiple-definitions.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unknown-stylesheet.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unrelated-call-expression.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unused-stylesheet.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unused-sx-multiple.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unused-sx.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/composability-identifier-property.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/composability-literal-property.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-clone-element-invalid.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-clone-element.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-component-unused-sx.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-component-without-sx.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-complex-className.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-conditional-call-2.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-conditional-call-alternative.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-conditional-call.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-create-import-aliased.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-create-import.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-dynamic.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-multiple-definitions.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-multiple-stylesheets.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-multiple-usages.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-namespace-import.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-not-className.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-template-string.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-with-quoted-properties.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/.eslintrc.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/border.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/margin.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/padding.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/text-align.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/border.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/margin.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/padding.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/text-align.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/border.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/margin.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/padding.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/text-align.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/.eslintrc.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-empty-argument.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-invalid-argument.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-invalid-stylesheet-type.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-empty-argument.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-invalid-argument.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-invalid-stylesheet-type.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-too-many-arguments.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-too-many-arguments.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sxCreate-invalid-stylesheet-type.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sxCreate-too-many-arguments.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sxKeyframes-too-many-arguments.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/basic-conditional.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/basic.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/identifier-property.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/sx-keyframes.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/no-concatenated-classes.test.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/no-unused-stylesheet.test.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/normalizeIndent.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/normalizeIndent.test.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/use-logical-properties.test.js delete mode 100644 src/eslint-plugin-sx/src/rules/__tests__/valid-usage.test.js delete mode 100644 src/eslint-plugin-sx/src/rules/no-concatenated-classes.js delete mode 100644 src/eslint-plugin-sx/src/rules/no-unused-stylesheet.js delete mode 100644 src/eslint-plugin-sx/src/rules/use-logical-properties.js delete mode 100644 src/eslint-plugin-sx/src/rules/utils/getObjectPropertyName.js delete mode 100644 src/eslint-plugin-sx/src/rules/utils/getSXImportSpecifiers.js delete mode 100644 src/eslint-plugin-sx/src/rules/utils/getVariableDeclaratorCalleeName.js delete mode 100644 src/eslint-plugin-sx/src/rules/utils/isSXKeyframesVariableDeclarator.js delete mode 100644 src/eslint-plugin-sx/src/rules/utils/isSXVariableDeclarator.js delete mode 100644 src/eslint-plugin-sx/src/rules/valid-usage.js delete mode 100644 src/forms/.babelrc.js delete mode 100644 src/forms/.eslintrc.js delete mode 100644 src/forms/.npmignore delete mode 100644 src/forms/LICENSE delete mode 100644 src/forms/README.md delete mode 100644 src/forms/jest-setup.js delete mode 100644 src/forms/jest.config.js delete mode 100644 src/forms/package.json delete mode 100644 src/forms/src/FormEmail.js delete mode 100644 src/forms/src/FormErrorMessages.js delete mode 100644 src/forms/src/FormMultiSelect.js delete mode 100644 src/forms/src/FormMultiUpload.js delete mode 100644 src/forms/src/FormNumber.js delete mode 100644 src/forms/src/FormPassword.js delete mode 100644 src/forms/src/FormRoot.js delete mode 100644 src/forms/src/FormRootContext.js delete mode 100644 src/forms/src/FormSelect.js delete mode 100644 src/forms/src/FormSelectOption.js delete mode 100644 src/forms/src/FormSubmit.js delete mode 100644 src/forms/src/FormText.js delete mode 100644 src/forms/src/FormTextArea.js delete mode 100644 src/forms/src/__tests__/FormEmail.test.js delete mode 100644 src/forms/src/__tests__/FormMultiSelect.test.js delete mode 100644 src/forms/src/__tests__/FormMultiUpload.test.js delete mode 100644 src/forms/src/__tests__/FormNumber.test.js delete mode 100644 src/forms/src/__tests__/FormPassword.test.js delete mode 100644 src/forms/src/__tests__/FormSelect.test.js delete mode 100644 src/forms/src/__tests__/FormText.test.js delete mode 100644 src/forms/src/__tests__/FormTextArea.test.js delete mode 100644 src/forms/src/index.js delete mode 100644 src/forms/src/private/BaseInput.js delete mode 100644 src/forms/src/private/BaseInputWrapper.js delete mode 100644 src/forms/src/private/BaseSelect.js delete mode 100644 src/forms/src/private/BaseTextArea.js delete mode 100644 src/forms/src/private/getValidityStateMessage.js delete mode 100644 src/forms/src/private/testUtils.js delete mode 100644 src/forms/src/private/useFormFieldState.js delete mode 100644 src/forms/translations/enum_manifest.json delete mode 100644 src/forms/translations/in/es_MX.json delete mode 100644 src/forms/translations/out/en_US.json delete mode 100644 src/forms/translations/out/es_MX.json delete mode 100644 src/forms/translations/source_strings.json delete mode 100644 src/forms/translations/src_manifest.json delete mode 100644 src/monorepo-shipit/config/__tests__/eslint-plugin-sx.test.js delete mode 100644 src/monorepo-shipit/config/eslint-plugin-sx.js delete mode 100644 src/sx-design-headless/.npmignore delete mode 100644 src/sx-design-headless/LICENSE delete mode 100644 src/sx-design-headless/README.md delete mode 100644 src/sx-design-headless/index.js delete mode 100644 src/sx-design-headless/package.json delete mode 100644 src/sx-design-headless/src/Button/Button.js delete mode 100644 src/sx-design-headless/src/Link/Link.js delete mode 100644 src/sx-design/.babelrc.js delete mode 100644 src/sx-design/.eslintrc.js delete mode 100644 src/sx-design/.npmignore delete mode 100644 src/sx-design/.storybook/global.css delete mode 100644 src/sx-design/.storybook/main.js delete mode 100644 src/sx-design/.storybook/preview.js delete mode 100644 src/sx-design/LICENSE delete mode 100644 src/sx-design/README.md delete mode 100644 src/sx-design/__flowtests__/Badge.js delete mode 100644 src/sx-design/__flowtests__/Button.js delete mode 100644 src/sx-design/__flowtests__/Entity.js delete mode 100644 src/sx-design/__flowtests__/FilterChips.js delete mode 100644 src/sx-design/__flowtests__/Kbd.js delete mode 100644 src/sx-design/__flowtests__/LinkButton.js delete mode 100644 src/sx-design/__flowtests__/Menu.js delete mode 100644 src/sx-design/__flowtests__/Tabs.js delete mode 100644 src/sx-design/__flowtests__/Text.js delete mode 100644 src/sx-design/__flowtests__/Tooltip.js delete mode 100644 src/sx-design/__mocks__/tabbable.js delete mode 100644 src/sx-design/docs/storybook-top-panel.png delete mode 100644 src/sx-design/index.js delete mode 100644 src/sx-design/jest-setup.js delete mode 100644 src/sx-design/jest.config.js delete mode 100644 src/sx-design/package.json delete mode 100644 src/sx-design/playwright.config.js delete mode 100644 src/sx-design/playwright/.eslintrc.js delete mode 100644 src/sx-design/playwright/README.md delete mode 100644 src/sx-design/playwright/ui/homepage.play.js delete mode 100644 src/sx-design/src/Badge/Badge.js delete mode 100644 src/sx-design/src/Badge/Badge.stories.js delete mode 100644 src/sx-design/src/Badge/__tests__/Badge.test.js delete mode 100644 src/sx-design/src/Breadcrumb/Breadcrumb.js delete mode 100644 src/sx-design/src/Breadcrumb/Breadcrumb.stories.js delete mode 100644 src/sx-design/src/Breadcrumb/BreadcrumbItem.js delete mode 100644 src/sx-design/src/Breadcrumb/__tests__/Breadcrumb.test.js delete mode 100644 src/sx-design/src/Button/Button.js delete mode 100644 src/sx-design/src/Button/Button.stories.js delete mode 100644 src/sx-design/src/Button/ButtonLink.js delete mode 100644 src/sx-design/src/Button/ButtonLink.stories.js delete mode 100644 src/sx-design/src/Button/__tests__/Button.test.js delete mode 100644 src/sx-design/src/Button/__tests__/ButtonLink.test.js delete mode 100644 src/sx-design/src/Button/styles.js delete mode 100644 src/sx-design/src/Chips/Chip.js delete mode 100644 src/sx-design/src/Chips/FilterChip.js delete mode 100644 src/sx-design/src/Chips/FilterChips.js delete mode 100644 src/sx-design/src/Chips/FilterChips.stories.js delete mode 100644 src/sx-design/src/Chips/__tests__/FilterChips.test.js delete mode 100644 src/sx-design/src/DateTime/DateTime.js delete mode 100644 src/sx-design/src/DateTime/DateTime.stories.js delete mode 100644 src/sx-design/src/DateTime/__tests__/DateTime.test.js delete mode 100644 src/sx-design/src/Entity/Entity.js delete mode 100644 src/sx-design/src/Entity/Entity.stories.js delete mode 100644 src/sx-design/src/Entity/EntityField.js delete mode 100644 src/sx-design/src/Entity/__tests__/Entity.test.js delete mode 100644 src/sx-design/src/Entity/__tests__/EntityField.test.js delete mode 100644 src/sx-design/src/ErrorBoundary/ErrorBoundary.js delete mode 100644 src/sx-design/src/ErrorBoundary/ErrorBoundary.stories.js delete mode 100644 src/sx-design/src/ErrorBoundary/__tests__/ErrorBoundary.test.js delete mode 100644 src/sx-design/src/ErrorBoundary/windowLocationReload.js delete mode 100644 src/sx-design/src/FlashMessage/FlashMessage.js delete mode 100644 src/sx-design/src/FlashMessage/FlashMessage.stories.js delete mode 100644 src/sx-design/src/FlashMessage/FlashMessagesRenderer.js delete mode 100644 src/sx-design/src/FlashMessage/useFlashMessages.js delete mode 100644 src/sx-design/src/Image/Image.js delete mode 100644 src/sx-design/src/Image/Image.stories.js delete mode 100644 src/sx-design/src/Image/__tests__/Image.test.js delete mode 100644 src/sx-design/src/Kbd/Kbd.js delete mode 100644 src/sx-design/src/Kbd/Kbd.stories.js delete mode 100644 src/sx-design/src/Kbd/__tests__/Kbd.test.js delete mode 100644 src/sx-design/src/Layout/LayoutBlock.js delete mode 100644 src/sx-design/src/Layout/LayoutBlock.stories.js delete mode 100644 src/sx-design/src/Layout/LayoutGrid.js delete mode 100644 src/sx-design/src/Layout/LayoutGrid.stories.js delete mode 100644 src/sx-design/src/Layout/LayoutInline.js delete mode 100644 src/sx-design/src/Layout/LayoutInline.stories.js delete mode 100644 src/sx-design/src/Layout/__tests__/LayoutBlock.test.js delete mode 100644 src/sx-design/src/Layout/__tests__/LayoutGrid.test.js delete mode 100644 src/sx-design/src/Layout/__tests__/LayoutInline.test.js delete mode 100644 src/sx-design/src/Link/Link.js delete mode 100644 src/sx-design/src/Link/Link.stories.js delete mode 100644 src/sx-design/src/Link/LinkButton.js delete mode 100644 src/sx-design/src/Link/LinkButton.stories.js delete mode 100644 src/sx-design/src/Link/__tests__/Link.test.js delete mode 100644 src/sx-design/src/Link/__tests__/LinkButton.test.js delete mode 100644 src/sx-design/src/Loader/Loader.js delete mode 100644 src/sx-design/src/Loader/Loader.stories.js delete mode 100644 src/sx-design/src/Loader/__tests__/Loader.test.js delete mode 100644 src/sx-design/src/MediaQueries.js delete mode 100644 src/sx-design/src/Menu/Menu.js delete mode 100644 src/sx-design/src/Menu/Menu.stories.js delete mode 100644 src/sx-design/src/Menu/MenuItem.js delete mode 100644 src/sx-design/src/Menu/MenuItemDivider.js delete mode 100644 src/sx-design/src/Menu/__tests__/Menu.test.js delete mode 100644 src/sx-design/src/Meter/Meter.js delete mode 100644 src/sx-design/src/Meter/Meter.stories.js delete mode 100644 src/sx-design/src/Meter/__tests__/Meter.test.js delete mode 100644 src/sx-design/src/MissingData/MissingData.js delete mode 100644 src/sx-design/src/MissingData/MissingData.stories.js delete mode 100644 src/sx-design/src/MissingData/__tests__/MissingData.test.js delete mode 100644 src/sx-design/src/Modal/Modal.js delete mode 100644 src/sx-design/src/Modal/Modal.stories.js delete mode 100644 src/sx-design/src/Modal/ModalBackdrop.js delete mode 100644 src/sx-design/src/Modal/ModalDialog.js delete mode 100644 src/sx-design/src/Modal/ModalDrawer.js delete mode 100644 src/sx-design/src/Modal/__tests__/Modal.test.js delete mode 100644 src/sx-design/src/Money/Money.js delete mode 100644 src/sx-design/src/Money/Money.stories.js delete mode 100644 src/sx-design/src/Money/__tests__/Money.test.js delete mode 100644 src/sx-design/src/Note/Note.js delete mode 100644 src/sx-design/src/Note/Note.stories.js delete mode 100644 src/sx-design/src/Note/__tests__/Note.test.js delete mode 100644 src/sx-design/src/Placeholder/Placeholder.js delete mode 100644 src/sx-design/src/Placeholder/Placeholder.stories.js delete mode 100644 src/sx-design/src/Placeholder/__tests__/Placeholder.test.js delete mode 100644 src/sx-design/src/ProductCard/ProductCard.js delete mode 100644 src/sx-design/src/ProductCard/ProductCard.stories.js delete mode 100644 src/sx-design/src/ProductCard/__tests__/ProductCard.test.js delete mode 100644 src/sx-design/src/Skeleton/Skeleton.js delete mode 100644 src/sx-design/src/Skeleton/Skeleton.stories.js delete mode 100644 src/sx-design/src/Skeleton/__tests__/Skeleton.test.js delete mode 100644 src/sx-design/src/SkipLink/SkipLink.js delete mode 100644 src/sx-design/src/SkipLink/SkipLink.stories.js delete mode 100644 src/sx-design/src/SxDesignContext.js delete mode 100644 src/sx-design/src/SxDesignPortal.js delete mode 100644 src/sx-design/src/SxDesignProvider.js delete mode 100644 src/sx-design/src/SxDesignProviderCSSVariables.js delete mode 100644 src/sx-design/src/Table/Table.js delete mode 100644 src/sx-design/src/Table/Table.stories.js delete mode 100644 src/sx-design/src/Table/__tests__/Table.test.js delete mode 100644 src/sx-design/src/Tabs/Tabs.js delete mode 100644 src/sx-design/src/Tabs/Tabs.stories.js delete mode 100644 src/sx-design/src/Tabs/__tests__/Tabs.test.js delete mode 100644 src/sx-design/src/Text/Text.js delete mode 100644 src/sx-design/src/Text/Text.stories.js delete mode 100644 src/sx-design/src/Text/__tests__/Text.test.js delete mode 100644 src/sx-design/src/Tooltip/Tooltip.js delete mode 100644 src/sx-design/src/Tooltip/Tooltip.stories.js delete mode 100644 src/sx-design/src/Tooltip/__tests__/Tooltip.test.js delete mode 100644 src/sx-design/src/Tooltip/__tests__/findBestTooltipPosition.test.js delete mode 100644 src/sx-design/src/Tooltip/findBestTooltipPosition.js delete mode 100644 src/sx-design/src/constants.js delete mode 100644 src/sx-design/src/getFbtTranslations.js delete mode 100644 src/sx-design/src/stories/ColorShowcase.js delete mode 100644 src/sx-design/src/stories/Colors.stories.mdx delete mode 100644 src/sx-design/src/stories/useAccessibleColor.js delete mode 100644 src/sx-design/src/test-utils.js delete mode 100644 src/sx-design/src/useSxDesignContext.js delete mode 100644 src/sx-design/translations/enum_manifest.json delete mode 100644 src/sx-design/translations/in/ar_AR.json delete mode 100644 src/sx-design/translations/in/cs_CZ.json delete mode 100644 src/sx-design/translations/in/es_MX.json delete mode 100644 src/sx-design/translations/in/no_NO.json delete mode 100644 src/sx-design/translations/in/ru_RU.json delete mode 100644 src/sx-design/translations/in/uk_UA.json delete mode 100644 src/sx-design/translations/out/ar_AR.json delete mode 100644 src/sx-design/translations/out/cs_CZ.json delete mode 100644 src/sx-design/translations/out/en_US.json delete mode 100644 src/sx-design/translations/out/es_MX.json delete mode 100644 src/sx-design/translations/out/no_NO.json delete mode 100644 src/sx-design/translations/out/ru_RU.json delete mode 100644 src/sx-design/translations/out/uk_UA.json delete mode 100644 src/sx-design/translations/source_strings.json delete mode 100644 src/sx-design/translations/src_manifest.json delete mode 100644 src/sx-jest-snapshot-serializer/.npmignore delete mode 100644 src/sx-jest-snapshot-serializer/LICENSE delete mode 100644 src/sx-jest-snapshot-serializer/README.md delete mode 100644 src/sx-jest-snapshot-serializer/__tests__/__snapshots__/serializer.test.js.snap delete mode 100644 src/sx-jest-snapshot-serializer/__tests__/serializer.test.js delete mode 100644 src/sx-jest-snapshot-serializer/index.js delete mode 100644 src/sx-jest-snapshot-serializer/package.json delete mode 100644 src/sx/.npmignore delete mode 100644 src/sx/LICENSE delete mode 100644 src/sx/README.md delete mode 100644 src/sx/__flowtests__/css-properties.js delete mode 100644 src/sx/__flowtests__/sx-composability.js delete mode 100644 src/sx/__flowtests__/sx-usage.js delete mode 100644 src/sx/index.js delete mode 100644 src/sx/jest.config.js delete mode 100644 src/sx/package.json delete mode 100644 src/sx/scripts/setupTests.js delete mode 100644 src/sx/src/StyleCollector.js delete mode 100644 src/sx/src/StyleCollectorAtNode.js delete mode 100644 src/sx/src/StyleCollectorNode.js delete mode 100644 src/sx/src/StyleCollectorNodeInterface.js delete mode 100644 src/sx/src/StyleCollectorPseudoNode.js delete mode 100644 src/sx/src/__tests__/StyleCollector.test.js delete mode 100644 src/sx/src/__tests__/StyleCollectorAtNode.test.js delete mode 100644 src/sx/src/__tests__/StyleCollectorNode.test.js delete mode 100644 src/sx/src/__tests__/StyleCollectorPseudoNode.test.js delete mode 100644 src/sx/src/__tests__/SxDomTests.test.js delete mode 100644 src/sx/src/__tests__/__snapshots__/fixtures.test.js.snap delete mode 100644 src/sx/src/__tests__/composability.test.js delete mode 100644 src/sx/src/__tests__/create.test.js delete mode 100644 src/sx/src/__tests__/expandShorthandProperties.test.js delete mode 100644 src/sx/src/__tests__/fixtures.test.js delete mode 100644 src/sx/src/__tests__/fixtures/@supports-nested.js delete mode 100644 src/sx/src/__tests__/fixtures/@supports.js delete mode 100644 src/sx/src/__tests__/fixtures/@unknown.js delete mode 100644 src/sx/src/__tests__/fixtures/autoprefix.js delete mode 100644 src/sx/src/__tests__/fixtures/keyframes-from-to.js delete mode 100644 src/sx/src/__tests__/fixtures/keyframes-percentage.js delete mode 100644 src/sx/src/__tests__/fixtures/media-queries-multiple.js delete mode 100644 src/sx/src/__tests__/fixtures/media-queries-nested-deep.js delete mode 100644 src/sx/src/__tests__/fixtures/media-queries-nested-pseudo.js delete mode 100644 src/sx/src/__tests__/fixtures/media-queries-nested.js delete mode 100644 src/sx/src/__tests__/fixtures/media-queries-same-style.js delete mode 100644 src/sx/src/__tests__/fixtures/media-queries.js delete mode 100644 src/sx/src/__tests__/fixtures/pseudo-classes-multiple.js delete mode 100644 src/sx/src/__tests__/fixtures/pseudo-classes-nested-1.js delete mode 100644 src/sx/src/__tests__/fixtures/pseudo-classes-nested-2.js delete mode 100644 src/sx/src/__tests__/fixtures/pseudo-classes.js delete mode 100644 src/sx/src/__tests__/fixtures/pseudo-elements-2.js delete mode 100644 src/sx/src/__tests__/fixtures/pseudo-elements.js delete mode 100644 src/sx/src/__tests__/fixtures/readme-example.js delete mode 100644 src/sx/src/__tests__/fixtures/simple-transforms.js delete mode 100644 src/sx/src/__tests__/fixtures/simple-with-duplicates.js delete mode 100644 src/sx/src/__tests__/fixtures/simple.js delete mode 100644 src/sx/src/__tests__/fixtures/variables.js delete mode 100644 src/sx/src/__tests__/hashStyle.test.js delete mode 100644 src/sx/src/__tests__/injectRuntimeStyles.test.js delete mode 100644 src/sx/src/__tests__/keyframes.test.js delete mode 100644 src/sx/src/__tests__/renderPageWithSX.test.js delete mode 100644 src/sx/src/__tests__/transformStyleName.test.js delete mode 100644 src/sx/src/__tests__/transformValue.test.js delete mode 100644 src/sx/src/create.js delete mode 100644 src/sx/src/css-properties/README.md delete mode 100644 src/sx/src/css-properties/__generated__/AllCSSPropertyTypes.js delete mode 100644 src/sx/src/css-properties/__generated__/AllCSSPseudoTypes.js delete mode 100644 src/sx/src/css-properties/__tests__/__snapshots__/isUnitlessNumber.test.js.snap delete mode 100644 src/sx/src/css-properties/__tests__/freshness.test.js delete mode 100644 src/sx/src/css-properties/__tests__/isUnitlessNumber.test.js delete mode 100644 src/sx/src/css-properties/generateFlowTypes.js delete mode 100644 src/sx/src/css-properties/generatePropertyTypes.js delete mode 100644 src/sx/src/css-properties/generatePseudoTypes.js delete mode 100644 src/sx/src/css-properties/generator/__tests__/collectTypes.test.js delete mode 100644 src/sx/src/css-properties/generator/collectTypes.js delete mode 100644 src/sx/src/css-properties/generator/flowTypes.js delete mode 100644 src/sx/src/css-properties/isUnitlessNumber.js delete mode 100644 src/sx/src/css-properties/paths.js delete mode 100644 src/sx/src/css-properties/prettify.js delete mode 100644 src/sx/src/expandShorthandProperties.js delete mode 100644 src/sx/src/getStyleTag.js delete mode 100644 src/sx/src/hashStyle.js delete mode 100644 src/sx/src/injectRuntimeStyles.js delete mode 100644 src/sx/src/keyframes.js delete mode 100644 src/sx/src/shorthand-properties/__tests__/expandBackground.test.js delete mode 100644 src/sx/src/shorthand-properties/__tests__/expandBorder.test.js delete mode 100644 src/sx/src/shorthand-properties/__tests__/expandFlex.test.js delete mode 100644 src/sx/src/shorthand-properties/__tests__/expandMarginPadding.test.js delete mode 100644 src/sx/src/shorthand-properties/__tests__/expandOverflow.test.js delete mode 100644 src/sx/src/shorthand-properties/__tests__/printNodes.js delete mode 100644 src/sx/src/shorthand-properties/expandBackground.js delete mode 100644 src/sx/src/shorthand-properties/expandBorder.js delete mode 100644 src/sx/src/shorthand-properties/expandFlex.js delete mode 100644 src/sx/src/shorthand-properties/expandMarginPadding.js delete mode 100644 src/sx/src/shorthand-properties/expandOverflow.js delete mode 100644 src/sx/src/transformStyleName.js delete mode 100644 src/sx/src/transformValue.js diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index ce38ad7422..dc08256dc1 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -19,13 +19,8 @@ jobs: fail-fast: false matrix: repository: - - '@adeira/sx-design' - 'mrtnzlml-meta' include: - - repository: '@adeira/sx-design' - source: 'src/sx-design/**' - playwrightReportName: 'playwright-report-sx-design' - playwrightReportPath: 'src/sx-design/playwright/test-results/' - repository: 'mrtnzlml-meta' source: 'src/mrtnzlml-meta/**' playwrightReportName: 'playwright-report-mrtnzlml-meta' diff --git a/scripts/publishedPackages.json b/scripts/publishedPackages.json index 3b256ed893..1066d2d8a5 100644 --- a/scripts/publishedPackages.json +++ b/scripts/publishedPackages.json @@ -4,7 +4,6 @@ "@adeira/eslint-config", "@adeira/eslint-fixtures-tester", "@adeira/fixtures-tester", - "@adeira/forms", "@adeira/hooks", "@adeira/icons", "@adeira/js", @@ -14,10 +13,5 @@ "@adeira/murmur-hash", "@adeira/relay", "@adeira/shell-command", - "@adeira/sx", - "@adeira/sx-design", - "@adeira/sx-design-headless", - "@adeira/sx-jest-snapshot-serializer", - "eslint-plugin-adeira", - "eslint-plugin-sx" + "eslint-plugin-adeira" ] diff --git a/src/eslint-config-adeira/__tests__/__fixtures__/valid-eslint-examples/react/no-unused-vars.js b/src/eslint-config-adeira/__tests__/__fixtures__/valid-eslint-examples/react/no-unused-vars.js deleted file mode 100644 index 09ee5c0976..0000000000 --- a/src/eslint-config-adeira/__tests__/__fixtures__/valid-eslint-examples/react/no-unused-vars.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * This code should NOT report `no-unused-vars` error on FBT import, see: - * https://github.com/yannickcr/eslint-plugin-react/issues/3080 - * - * @flow - */ - -import fbt from 'fbt'; // eslint-disable-line import/no-extraneous-dependencies -import type { Node } from 'react'; - -export default function MyComponent(): Node { - return test; -} diff --git a/src/eslint-config-adeira/__tests__/__snapshots__/index.test.js.snap b/src/eslint-config-adeira/__tests__/__snapshots__/index.test.js.snap index e0dbf16709..679d5c6e80 100644 --- a/src/eslint-config-adeira/__tests__/__snapshots__/index.test.js.snap +++ b/src/eslint-config-adeira/__tests__/__snapshots__/index.test.js.snap @@ -84,7 +84,6 @@ exports[`rules snapshot: all stable rules 1`] = ` "eslint-plugin-eslint-comments", "eslint-plugin-promise", "eslint-plugin-adeira", - "eslint-plugin-sx", "eslint-plugin-ft-flow", "eslint-plugin-fb-flow", "eslint-plugin-jest", @@ -1121,10 +1120,6 @@ exports[`rules snapshot: all stable rules 1`] = ` "standard/object-curly-even-spacing": "off", "strict": 1, "switch-colon-spacing": "off", - "sx/no-concatenated-classes": 2, - "sx/no-unused-stylesheet": 2, - "sx/use-logical-properties": 2, - "sx/valid-usage": 2, "symbol-description": 2, "template-curly-spacing": "off", "template-tag-spacing": "off", diff --git a/src/eslint-config-adeira/__tests__/__snapshots__/presets.test.js.snap b/src/eslint-config-adeira/__tests__/__snapshots__/presets.test.js.snap index a8bdbf000a..f6a60f03ec 100644 --- a/src/eslint-config-adeira/__tests__/__snapshots__/presets.test.js.snap +++ b/src/eslint-config-adeira/__tests__/__snapshots__/presets.test.js.snap @@ -25,7 +25,6 @@ exports[`Base preset: Base preset 1`] = ` "eslint-plugin-eslint-comments", "eslint-plugin-promise", "eslint-plugin-adeira", - "eslint-plugin-sx", "eslint-plugin-prettier", ], "rules": { @@ -522,10 +521,6 @@ exports[`Base preset: Base preset 1`] = ` }, ], "strict": 1, - "sx/no-concatenated-classes": 2, - "sx/no-unused-stylesheet": 2, - "sx/use-logical-properties": 2, - "sx/valid-usage": 2, "symbol-description": 2, "use-isnan": [ 2, diff --git a/src/eslint-config-adeira/package.json b/src/eslint-config-adeira/package.json index 12f2943d93..e7ddc47bb4 100644 --- a/src/eslint-config-adeira/package.json +++ b/src/eslint-config-adeira/package.json @@ -34,7 +34,6 @@ "eslint-plugin-react-hooks": "^5.0.0", "eslint-plugin-react-native": "^4.1.0", "eslint-plugin-relay": "^1.8.3", - "eslint-plugin-sx": "^0.14.0", "eslint-plugin-testing-library": "^6.5.0", "prettier": "^2.8.8" }, diff --git a/src/eslint-config-adeira/src/presets/base.js b/src/eslint-config-adeira/src/presets/base.js index 5b3642eb88..b19a831577 100644 --- a/src/eslint-config-adeira/src/presets/base.js +++ b/src/eslint-config-adeira/src/presets/base.js @@ -16,7 +16,6 @@ module.exports = ({ 'eslint-plugin-eslint-comments', 'eslint-plugin-promise', 'eslint-plugin-adeira', - 'eslint-plugin-sx', ], rules: { // Possible Errors (http://eslint.org/docs/rules/#possible-errors) @@ -445,12 +444,6 @@ module.exports = ({ 'adeira/no-invalid-flow-annotations': ERROR, 'adeira/only-nullable-fields': ERROR, 'adeira/valid-test-folder': ERROR, - - // Adeira SX custom rules - 'sx/no-concatenated-classes': ERROR, - 'sx/no-unused-stylesheet': ERROR, - 'sx/use-logical-properties': ERROR, - 'sx/valid-usage': ERROR, }, settings: { 'import/resolver': { diff --git a/src/eslint-plugin-sx/.npmignore b/src/eslint-plugin-sx/.npmignore deleted file mode 100644 index 143b59ce05..0000000000 --- a/src/eslint-plugin-sx/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -__flowtests__ -__tests__ diff --git a/src/eslint-plugin-sx/LICENSE b/src/eslint-plugin-sx/LICENSE deleted file mode 100644 index 3b9565ef58..0000000000 --- a/src/eslint-plugin-sx/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019-present, Adeira - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/eslint-plugin-sx/README.md b/src/eslint-plugin-sx/README.md deleted file mode 100644 index 7ee4432079..0000000000 --- a/src/eslint-plugin-sx/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# eslint-plugin-sx - -Eslint rules for [@adeira/sx](https://www.npmjs.com/package/@adeira/sx) - -## Installation - -You'll first need to install [ESLint](http://eslint.org): - -``` -yarn add --dev eslint -``` - -Next, install `eslint-plugin-sx`: - -``` -yarn add --dev eslint-plugin-sx -``` - -## Usage - -Add `sx` to the plugins section of your `.eslintrc` configuration file. You can omit the `eslint-plugin-` prefix: - -```json -{ - "plugins": ["sx"] -} -``` - -Then configure the rules you want to use under the rules section. - -```json -{ - "rules": { - "sx/no-concatenated-classes": 2, - "sx/no-unused-stylesheet": 2, - "sx/use-logical-properties": 2, - "sx/valid-usage": 2 - } -} -``` - -## Supported Rules - -- [no-concatenated-classes](docs/rules/no-concatenated-classes.md) -- [no-unused-stylesheet](docs/rules/no-unused-stylesheet.md) -- [use-logical-properties](docs/rules/use-logical-properties.md) -- [valid-usage](docs/rules/valid-usage.md) -- ... diff --git a/src/eslint-plugin-sx/docs/rules/no-concatenated-classes.md b/src/eslint-plugin-sx/docs/rules/no-concatenated-classes.md deleted file mode 100644 index 3c130c3f06..0000000000 --- a/src/eslint-plugin-sx/docs/rules/no-concatenated-classes.md +++ /dev/null @@ -1,50 +0,0 @@ -# no-concatenated-classes - -## Rule Details - -This rule aims to find incorrect usage of template strings inside `className`. - -Examples of **incorrect** code for this rule: - -```jsx -import { create } from '@adeira/sx'; - -export default function MyComponent() { - // Should be: - // - // className={styles('aaa', 'bbb')} - // - // - or - - // - // className={styles('bbb', 'aaa')} - return
; -} - -const styles = create({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, -}); -``` - -Examples of **correct** code for this rule: - -```jsx -import { create } from '@adeira/sx'; - -export default function MyComponent() { - return
; -} - -const styles = create({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, -}); -``` - -### Options - -_none_ - -## When Not To Use It - -TKTK diff --git a/src/eslint-plugin-sx/docs/rules/no-unused-stylesheet.md b/src/eslint-plugin-sx/docs/rules/no-unused-stylesheet.md deleted file mode 100644 index 3142c6914e..0000000000 --- a/src/eslint-plugin-sx/docs/rules/no-unused-stylesheet.md +++ /dev/null @@ -1,56 +0,0 @@ -# no-unused-stylesheet - -## Rule Details - -This rule aims to find unused SX stylesheet definitions. - -Examples of **incorrect** code for this rule: - -```jsx -import sx from '@adeira/sx'; - -export default function MyComponent() { - return null; -} - -// Unused ⚠️ -const styles = sx.create({ - aaa: { color: 'red' }, -}); -``` - -```jsx -import sx from '@adeira/sx'; - -export default function MyComponent() { - return
; -} - -const styles = sx.create({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, // Unused ⚠️ - ccc: { color: 'green' }, // Unused ⚠️ -}); -``` - -Examples of **correct** code for this rule: - -```jsx -import sx from '@adeira/sx'; - -export default function MyComponent() { - return
; -} - -const styles = sx.create({ - aaa: { color: 'red' }, -}); -``` - -### Options - -_none_ - -## When Not To Use It - -There should be no valid reason to turn this rule off. It helps with a dead code elimination. diff --git a/src/eslint-plugin-sx/docs/rules/use-logical-properties.md b/src/eslint-plugin-sx/docs/rules/use-logical-properties.md deleted file mode 100644 index d09d4f97d3..0000000000 --- a/src/eslint-plugin-sx/docs/rules/use-logical-properties.md +++ /dev/null @@ -1,33 +0,0 @@ -# use-logical-properties - -## Rule Details - -This rule aims to suggest logical CSS properties instead of physical CSS properties to improve support of other layouts (LTR/RTL, …). - -Examples of **incorrect** code for this rule: - -```jsx -const styles = sx.create({ - incorrectBorder: { - borderBottom: 'solid', - }, -}); -``` - -Examples of **correct** code for this rule: - -```jsx -const styles = sx.create({ - correctBorder: { - borderBlockEnd: 'solid', - }, -}); -``` - -### Options - -_none_ - -## When Not To Use It - -Do not use this rule if you don't want to support RTL (and other) layouts or when you are concerned about supporting older browsers. diff --git a/src/eslint-plugin-sx/docs/rules/valid-usage.md b/src/eslint-plugin-sx/docs/rules/valid-usage.md deleted file mode 100644 index aa2f8b2df3..0000000000 --- a/src/eslint-plugin-sx/docs/rules/valid-usage.md +++ /dev/null @@ -1,54 +0,0 @@ -# valid-usage - -## Rule Details - -This rule tries to catch obviously invalid SX usages. - -Examples of **incorrect** code for this rule: - -```jsx -const styles = sx.create(); // should not be empty ⚠️ -const animation = sx.keyframes(); // should not be empty ⚠️ -``` - -```jsx -const styles = sx.create( - 'should be an object, not a string', // ⚠️ -); -``` - -```jsx -const styles = sx.create({ - aaa: 'this should be an object', // ⚠️ -}); -``` - -```jsx -const styles = sx.create( - { aaa: { color: 'red' } }, - 'unknown argument', // ⚠️ -); -``` - -Examples of **correct** code for this rule: - -```jsx -import { create } from '@adeira/sx'; - -export default function MyComponent() { - return
; -} - -const styles = create({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, -}); -``` - -### Options - -_none_ - -## When Not To Use It - -There should be no valid reason to turn this rule off. diff --git a/src/eslint-plugin-sx/package.json b/src/eslint-plugin-sx/package.json deleted file mode 100644 index fa417dc12c..0000000000 --- a/src/eslint-plugin-sx/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "eslint-plugin-sx", - "description": "Eslint plugin for @adeira/sx", - "homepage": "https://github.com/adeira/eslint-plugin-sx", - "bugs": "https://github.com/adeira/universe/issues", - "repository": { - "type": "git", - "url": "git@github.com:adeira/universe.git", - "directory": "src/eslint-plugin-sx" - }, - "version": "0.14.0", - "license": "MIT", - "keywords": [ - "eslint", - "eslintplugin", - "eslint-plugin" - ], - "main": "./src/index.js", - "type": "commonjs", - "dependencies": { - "@babel/runtime": "^7.26.0" - }, - "devDependencies": { - "@adeira/eslint-fixtures-tester": "0.1.0", - "@adeira/flow-types-eslint": "0.0.0", - "@adeira/sx": "^0.30.0", - "@babel/code-frame": "^7.26.2", - "eslint": "^8.57.1", - "hermes-eslint": "^0.25.1", - "react": "^18.3.1" - }, - "peerDependencies": { - "eslint": "^8.57.1" - } -} diff --git a/src/eslint-plugin-sx/src/__tests__/fixtures/directory/ruleX.js b/src/eslint-plugin-sx/src/__tests__/fixtures/directory/ruleX.js deleted file mode 100644 index 039852ac13..0000000000 --- a/src/eslint-plugin-sx/src/__tests__/fixtures/directory/ruleX.js +++ /dev/null @@ -1 +0,0 @@ -// @flow strict diff --git a/src/eslint-plugin-sx/src/__tests__/fixtures/ruleA.js b/src/eslint-plugin-sx/src/__tests__/fixtures/ruleA.js deleted file mode 100644 index 039852ac13..0000000000 --- a/src/eslint-plugin-sx/src/__tests__/fixtures/ruleA.js +++ /dev/null @@ -1 +0,0 @@ -// @flow strict diff --git a/src/eslint-plugin-sx/src/__tests__/fixtures/ruleA.js.flow b/src/eslint-plugin-sx/src/__tests__/fixtures/ruleA.js.flow deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/eslint-plugin-sx/src/__tests__/fixtures/ruleB.js b/src/eslint-plugin-sx/src/__tests__/fixtures/ruleB.js deleted file mode 100644 index 039852ac13..0000000000 --- a/src/eslint-plugin-sx/src/__tests__/fixtures/ruleB.js +++ /dev/null @@ -1 +0,0 @@ -// @flow strict diff --git a/src/eslint-plugin-sx/src/__tests__/fixtures/ruleB.js.flow b/src/eslint-plugin-sx/src/__tests__/fixtures/ruleB.js.flow deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/eslint-plugin-sx/src/__tests__/fixtures/ruleC.txt b/src/eslint-plugin-sx/src/__tests__/fixtures/ruleC.txt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/eslint-plugin-sx/src/__tests__/getRules.test.js b/src/eslint-plugin-sx/src/__tests__/getRules.test.js deleted file mode 100644 index a4f1f7648e..0000000000 --- a/src/eslint-plugin-sx/src/__tests__/getRules.test.js +++ /dev/null @@ -1,26 +0,0 @@ -// @flow strict - -import path from 'path'; - -const getRules = require('../getRules'); - -it('returns all the rules', () => { - expect(Object.keys(getRules())).toMatchInlineSnapshot(` - [ - "no-concatenated-classes", - "no-unused-stylesheet", - "use-logical-properties", - "valid-usage", - ] - `); -}); - -it('includes only JS files', () => { - // rest of the files and directories should be skipped - expect(Object.keys(getRules(path.join(__dirname, 'fixtures')))).toMatchInlineSnapshot(` - [ - "ruleA", - "ruleB", - ] - `); -}); diff --git a/src/eslint-plugin-sx/src/getRules.js b/src/eslint-plugin-sx/src/getRules.js deleted file mode 100644 index 1b1f4b3c64..0000000000 --- a/src/eslint-plugin-sx/src/getRules.js +++ /dev/null @@ -1,25 +0,0 @@ -// @flow strict - -const fs = require('fs'); -const path = require('path'); - -const DEFAULT_RULES_PATH = path.join(__dirname, 'rules'); - -module.exports = function getRules( - rulesPath /*: string */ = DEFAULT_RULES_PATH, -) /*: { +[ruleName: string]: string } */ { - const rules /*: { [string]: $FlowFixMe } */ = {}; - for (const dirent of fs.readdirSync(rulesPath, { - encoding: 'utf8', - withFileTypes: true, - })) { - /* $FlowFixMe[incompatible-type] This comment suppresses an error when - * upgrading Flow. To see the error delete this comment and run Flow. */ - const ruleFile /*: string */ = dirent.name; - if (dirent.isFile() && /\.js$/.test(ruleFile)) { - const ruleName = ruleFile.replace(/\.js$/, ''); - rules[ruleName] = require(path.join(rulesPath, ruleFile)); - } - } - return rules; -}; diff --git a/src/eslint-plugin-sx/src/index.js b/src/eslint-plugin-sx/src/index.js deleted file mode 100644 index 2607640e8c..0000000000 --- a/src/eslint-plugin-sx/src/index.js +++ /dev/null @@ -1,7 +0,0 @@ -// @flow strict - -const getRules = require('./getRules'); - -module.exports = ({ - rules: getRules(), -} /*: { +rules: { +[ruleName: string]: string } } */); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/__snapshots__/no-unused-stylesheet.test.js.snap b/src/eslint-plugin-sx/src/rules/__tests__/__snapshots__/no-unused-stylesheet.test.js.snap deleted file mode 100644 index 0f073456ab..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/__snapshots__/no-unused-stylesheet.test.js.snap +++ /dev/null @@ -1,49 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`reports correct lines and columns: SX function "styles" was not used anywhere in the code. cd1c7998551695468f5a28bc16e77ce4 1`] = ` -" 1 | - 2 | import sx from '@adeira/sx'; -> 3 | const styles = sx.create({ - | ^^^^^^^^^^^^^^^^^^^^ -> 4 | aaa: { - | ^^^^^^^^ -> 5 | color: blue, - | ^^^^^^^^ -> 6 | } - | ^^^^^^^^ -> 7 | }); - | ^^^ - 8 |" -`; - -exports[`reports correct lines and columns: Unknown stylesheet used: bbb (not defined anywhere) c1333fff2a93d48fb0265f41ce127150 1`] = ` -" 2 | import sx from '@adeira/sx'; - 3 | export default function TestComponent() { -> 4 | return
- | ^^^^^ - 5 | } - 6 | const styles = sx.create({ - 7 | aaa: { color: blue }" -`; - -exports[`reports correct lines and columns: Unused stylesheet: aaa (defined via "styles" variable) c1333fff2a93d48fb0265f41ce127150 1`] = ` -" 5 | } - 6 | const styles = sx.create({ -> 7 | aaa: { color: blue } - | ^^^^^^^^^^^^^^^^^^^^ - 8 | }); - 9 |" -`; - -exports[`reports correct lines and columns: Unused stylesheet: aaa (defined via "styles" variable) cd1c7998551695468f5a28bc16e77ce4 1`] = ` -" 2 | import sx from '@adeira/sx'; - 3 | const styles = sx.create({ -> 4 | aaa: { - | ^^^^^^ -> 5 | color: blue, - | ^^^^^^^^^^^^^^^^ -> 6 | } - | ^^^^ - 7 | }); - 8 |" -`; diff --git a/src/eslint-plugin-sx/src/rules/__tests__/__snapshots__/normalizeIndent.test.js.snap b/src/eslint-plugin-sx/src/rules/__tests__/__snapshots__/normalizeIndent.test.js.snap deleted file mode 100644 index 8135090827..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/__snapshots__/normalizeIndent.test.js.snap +++ /dev/null @@ -1,12 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`normalizes indent correctly 1`] = ` -" -import sx from '@adeira/sx'; -const styles = sx.create({ - aaa: { - color: blue, - } -}); -" -`; diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/.eslintrc.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/.eslintrc.js deleted file mode 100644 index fd57dcac60..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/.eslintrc.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow strict - -/* eslint-disable no-unused-vars */ -const OFF = 0; -const WARN = 1; -const ERROR = 2; -/* eslint-enable no-unused-vars */ - -module.exports = { - rules: { - // we are having here fixtures with invalid SX definitions on purpose - 'sx/no-concatenated-classes': OFF, - }, -}; diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/invalid/basic.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/invalid/basic.js deleted file mode 100644 index cc63db929d..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/invalid/basic.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX functions should not be concatenated in a template literal otherwise styles precedence might not work as expected. - */ - -import type { Node } from 'react'; -import { create } from '@adeira/sx'; - -export default function MyComponent(): Node { - // Should be: - // - // className={styles('aaa', 'bbb')} - // - // - or - - // - // className={styles('bbb', 'aaa')} - return
; -} - -const styles = create({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/invalid/complex-classname.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/invalid/complex-classname.js deleted file mode 100644 index 292ba078b3..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/invalid/complex-classname.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX functions should not be concatenated in a template literal otherwise styles precedence might not work as expected. - */ - -import type { Node } from 'react'; -import { create } from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = create({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/invalid/custom-sx-names.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/invalid/custom-sx-names.js deleted file mode 100644 index 0c99ea3bf0..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/invalid/custom-sx-names.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX functions should not be concatenated in a template literal otherwise styles precedence might not work as expected. - */ - -import type { Node } from 'react'; -import tada from '@adeira/sx'; - -export default function MyComponent(): Node { - // Should be: - // - // className={yadada('aaa', 'bbb')} - // - // - or - - // - // className={yadada('bbb', 'aaa')} - return
; -} - -const yadada = tada.create({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/valid/basic.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/valid/basic.js deleted file mode 100644 index 555c70bdf0..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/valid/basic.js +++ /dev/null @@ -1,12 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create } from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = create({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/valid/simple-template-literal.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/valid/simple-template-literal.js deleted file mode 100644 index f66407da3d..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/valid/simple-template-literal.js +++ /dev/null @@ -1,12 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create } from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = create({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/valid/sx-multiple-arguments.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/valid/sx-multiple-arguments.js deleted file mode 100644 index 4cb12c3b0d..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-concatenated-classes/valid/sx-multiple-arguments.js +++ /dev/null @@ -1,20 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create } from '@adeira/sx'; - -export default function MyComponent(): Node { - return ( - <> -
-
-
- - ); -} - -const styles = create({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, - ccc: { color: 'green' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/.eslintrc.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/.eslintrc.js deleted file mode 100644 index 374832a257..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/.eslintrc.js +++ /dev/null @@ -1,15 +0,0 @@ -// @flow strict - -/* eslint-disable no-unused-vars */ -const OFF = 0; -const WARN = 1; -const ERROR = 2; -/* eslint-enable no-unused-vars */ - -module.exports = { - rules: { - // We are having here fixtures with invalid SX definitions (and other Eslint rules) on purpose: - 'sx/no-unused-stylesheet': OFF, - 'react/no-unknown-property': OFF, - }, -}; diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/composability.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/composability.js deleted file mode 100644 index 63e52f8290..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/composability.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @flow - * @eslintExpectedError Unknown stylesheet used: yadada (not defined anywhere) - * @eslintExpectedError Unused stylesheet: spacing (defined via "styles" variable) - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyCustomComponent(): Node { - // $FlowExpectedError[incompatible-use] yadada - return
; -} - -const styles = sx.create({ - spacing: { - marginBlockStart: 4, - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/fake-call-expression.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/fake-call-expression.js deleted file mode 100644 index 46001fba76..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/fake-call-expression.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX function "styles" was not used anywhere in the code. - * @eslintExpectedError Unused stylesheet: aaa (defined via "styles" variable) - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -const fakeCallExpression = (fake: string) => fake; - -export default function MyComponent(): Node { - return
; -} - -// eslint-disable-next-line no-unused-vars -const styles = sx.create({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/issue-1323.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/issue-1323.js deleted file mode 100644 index bfe916b511..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/issue-1323.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @flow - * @eslintExpectedError (17:7;21:3) SX function "styles" was not used anywhere in the code. - * @eslintExpectedError (18:3;20:4) Unused stylesheet: notUsing (defined via "styles" variable) - * - * @see https://github.com/adeira/universe/pull/1323 - */ - -import sx from '@adeira/sx'; -import type { Node } from 'react'; // keep the import order exactly like this (first SX, second React) - -export default function Navbar(): Node { - return
; -} - -// eslint-disable-next-line no-unused-vars -const styles = sx.create({ - notUsing: { - opacity: 0, - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-conditional-call-2.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-conditional-call-2.js deleted file mode 100644 index 73c46cb443..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-conditional-call-2.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @eslintExpectedError (13:40;13:61) Unknown stylesheet used: ccc (not defined anywhere) - * @eslintExpectedError (19:3;19:29) Unused stylesheet: xxx (defined via "styles" variable) - * @flow - */ - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - const isBBB = true; - // $FlowExpectedError[incompatible-call]: "ccc" doesn't exist - return
; -} - -const styles = sxCreate({ - aaa: { color: 'red' }, - bbb: { color: 'green' }, - xxx: { color: 'UNUSED ❌' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-conditional-call-alternative.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-conditional-call-alternative.js deleted file mode 100644 index 0a467000db..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-conditional-call-alternative.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @eslintExpectedError (26:3;26:31) Unused stylesheet: xxx (defined via "styles" variable) - * @flow - */ - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - const isTrue = true; - return ( -
- ); -} - -const styles = sxCreate({ - aaa: { content: '_' }, - bbb: { content: 'used ✅' }, - ccc: { content: 'used ✅' }, - xxx: { content: 'UNUSED ❌' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-conditional-call.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-conditional-call.js deleted file mode 100644 index d0117f2c1c..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-conditional-call.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @eslintExpectedError (25:3;25:29) Unused stylesheet: xxx (defined via "styles" variable) - * @flow - */ - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - const isTrue = true; - return ( - <> -
-
-
- - ); -} - -const styles = sxCreate({ - aaa: { content: '_' }, - bbb: { content: 'LogicalExpression' }, - ccc: { content: 'ConditionalExpression (consequent)' }, - ddd: { content: 'ConditionalExpression (alternate)' }, - xxx: { content: 'UNUSED' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-multiple-definitions.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-multiple-definitions.js deleted file mode 100644 index 8f644bba90..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/sx-multiple-definitions.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @flow - * @eslintExpectedError Unused stylesheet: aaa (defined via "bar" variable) - * @eslintExpectedError Unused stylesheet: bbb (defined via "foo" variable) - */ - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - return ( - <> -
-
- - ); -} - -const foo = sxCreate({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, // unused -}); - -const bar = sxCreate({ - aaa: { color: 'red' }, // unused - bbb: { color: 'blue' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unknown-stylesheet.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unknown-stylesheet.js deleted file mode 100644 index 5e657c5d8d..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unknown-stylesheet.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @flow - * @eslintExpectedError (12:33;12:41) Unknown stylesheet used: yadada (not defined anywhere) - * @eslintExpectedError (16:3;18:4) Unused stylesheet: aaa (defined via "styles" variable) - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - // $FlowExpectedError[incompatible-call] - yadada is not defined in the stylesheet below - return
; -} - -const styles = sx.create({ - aaa: { - color: 'red', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unrelated-call-expression.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unrelated-call-expression.js deleted file mode 100644 index a79bd19646..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unrelated-call-expression.js +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX function "styles" was not used anywhere in the code. - * @eslintExpectedError Unused stylesheet: aaa (defined via "styles" variable) - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -const unrelatedCallExpression = (fake: string) => fake; - -export default function MyComponent(): Node { - return
; -} - -// eslint-disable-next-line no-unused-vars -const styles = sx.create({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unused-stylesheet.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unused-stylesheet.js deleted file mode 100644 index f7e7890155..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unused-stylesheet.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @flow - * @eslintExpectedError (16:3;16:25) Unused stylesheet: bbb (defined via "styles" variable) - * @eslintExpectedError (17:3;17:26) Unused stylesheet: ccc (defined via "styles" variable) - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, // unused - ccc: { color: 'green' }, // unused -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unused-sx-multiple.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unused-sx-multiple.js deleted file mode 100644 index c839bc6dcf..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unused-sx-multiple.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * @flow - * @eslintExpectedError (17:7;19:3) SX function "styles1" was not used anywhere in the code. - * @eslintExpectedError (18:3;18:24) Unused stylesheet: aaa (defined via "styles1" variable) - * @eslintExpectedError (26:7;28:3) SX function "styles3" was not used anywhere in the code. - * @eslintExpectedError (27:3;27:24) Unused stylesheet: ccc (defined via "styles3" variable) - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -// eslint-disable-next-line no-unused-vars -const styles1 = sx.create({ - aaa: { color: 'red' }, -}); - -const styles2 = sx.create({ - bbb: { color: 'red' }, -}); - -// eslint-disable-next-line no-unused-vars -const styles3 = sx.create({ - ccc: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unused-sx.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unused-sx.js deleted file mode 100644 index 8134afd9a7..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/invalid/unused-sx.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @flow - * @eslintExpectedError (15:7;17:3) SX function "styles" was not used anywhere in the code. - * @eslintExpectedError (16:3;16:24) Unused stylesheet: aaa (defined via "styles" variable) - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return null; -} - -// eslint-disable-next-line no-unused-vars -const styles = sx.create({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/composability-identifier-property.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/composability-identifier-property.js deleted file mode 100644 index 4e742a6fda..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/composability-identifier-property.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyCustomComponent(): Node { - return
; -} - -const styles = sx.create({ - spacing: { - marginBlockStart: 4, - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/composability-literal-property.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/composability-literal-property.js deleted file mode 100644 index c2326820f5..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/composability-literal-property.js +++ /dev/null @@ -1,15 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyCustomComponent(): Node { - // eslint-disable-next-line dot-notation - return
; -} - -const styles = sx.create({ - spacing: { - marginBlockStart: 4, - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-clone-element-invalid.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-clone-element-invalid.js deleted file mode 100644 index 7ff661df76..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-clone-element-invalid.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * This is an example of an edge-case which we are currently unable to catch. It's because - * the code is quite complex in terms of the static analysis and we are bailing out early - * since we are not sure. Could be improved though. - * - * @flow - */ - -import * as React from 'react'; -import sx from '@adeira/sx'; - -type Props = { - +children: React.Element<'strong'>, -}; - -export default function IconButton({ children, ...props }: Props): React.Node { - return ( - // $FlowExpectedError[incompatible-call]: the style doesn't exist - - ); -} - -const styles = sx.create({ - // ⚠️ - unused: { - backgroundColor: 'blue', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-clone-element.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-clone-element.js deleted file mode 100644 index 54ed58741d..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-clone-element.js +++ /dev/null @@ -1,27 +0,0 @@ -// @flow - -import * as React from 'react'; -import sx from '@adeira/sx'; - -type Props = { - +children: React.Element<'strong'>, -}; - -export default function IconButton({ children, ...props }: Props): React.Node { - return ( - - ); -} - -const styles = sx.create({ - button: { - backgroundColor: 'blue', - }, - icon: { - color: 'white', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-component-unused-sx.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-component-unused-sx.js deleted file mode 100644 index 7ccb92629d..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-component-unused-sx.js +++ /dev/null @@ -1,19 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import tada from '@adeira/sx'; // eslint-disable-line no-unused-vars - -export default function MyComponent(): Node { - return styles('ok'); -} - -const sx = { - create(obj: any) { - return obj; - }, -}; - -// this is something else, not "@adeira/sx" -const styles = sx.create({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-component-without-sx.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-component-without-sx.js deleted file mode 100644 index 6041bc785e..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/react-component-without-sx.js +++ /dev/null @@ -1,7 +0,0 @@ -// @flow strict - -import type { Node } from 'react'; - -export default function MyComponent(): Node { - return null; -} diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-complex-className.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-complex-className.js deleted file mode 100644 index cf75ccd667..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-complex-className.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - // Please note: technically, this should not be allowed in SX, however, - // this rule doesn't care about it and should behave gracefully. - return
; -} - -const styles = sxCreate({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-conditional-call-2.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-conditional-call-2.js deleted file mode 100644 index af5c464428..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-conditional-call-2.js +++ /dev/null @@ -1,15 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - const isBBB = true; - return
; -} - -const styles = sxCreate({ - aaa: { color: 'red' }, - bbb: { color: 'green' }, - ccc: { color: 'blue' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-conditional-call-alternative.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-conditional-call-alternative.js deleted file mode 100644 index c23cce01d5..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-conditional-call-alternative.js +++ /dev/null @@ -1,23 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - const isTrue = true; - return ( -
- ); -} - -const styles = sxCreate({ - aaa: { content: 'aaa' }, - bbb: { content: 'bbb' }, - ccc: { content: 'ccc' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-conditional-call.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-conditional-call.js deleted file mode 100644 index 56e1d57a5d..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-conditional-call.js +++ /dev/null @@ -1,20 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - const isBBB = true; - return ( - <> -
-
-
- - ); -} - -const styles = sxCreate({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-create-import-aliased.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-create-import-aliased.js deleted file mode 100644 index 9966c7e28c..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-create-import-aliased.js +++ /dev/null @@ -1,12 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sxCreate({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-create-import.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-create-import.js deleted file mode 100644 index 555c70bdf0..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-create-import.js +++ /dev/null @@ -1,12 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create } from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = create({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-dynamic.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-dynamic.js deleted file mode 100644 index e6f80d5b9e..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-dynamic.js +++ /dev/null @@ -1,13 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - const styleSheetDynamicName = 'aaa'; - return
; -} - -const styles = sxCreate({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-multiple-definitions.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-multiple-definitions.js deleted file mode 100644 index 51b0fc9549..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-multiple-definitions.js +++ /dev/null @@ -1,21 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - return ( - <> -
-
- - ); -} - -const yada = sxCreate({ - aaa: { color: 'red' }, -}); - -const dada = sxCreate({ - bbb: { color: 'blue' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-multiple-stylesheets.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-multiple-stylesheets.js deleted file mode 100644 index a176e3b879..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-multiple-stylesheets.js +++ /dev/null @@ -1,13 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sxCreate({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-multiple-usages.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-multiple-usages.js deleted file mode 100644 index 5926f098b6..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-multiple-usages.js +++ /dev/null @@ -1,18 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - return ( - <> -
-
- - ); -} - -const styles = sxCreate({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-namespace-import.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-namespace-import.js deleted file mode 100644 index 7d2420e926..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-namespace-import.js +++ /dev/null @@ -1,12 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import tada from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = tada.create({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-not-className.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-not-className.js deleted file mode 100644 index b34e474bba..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-not-className.js +++ /dev/null @@ -1,18 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function Navbar(): Node { - // CallExpression "styles" is essentially unused here since it's not used - // in "className" but we allow it (to support more complex cases). - // TODO: improve the analysis to find such mistake - return
; - // ^^^^^^^^^^^^^^^^^^^^^ -} - -const styles = sx.create({ - aaa: { - color: 'red', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-template-string.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-template-string.js deleted file mode 100644 index d167634d6a..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-template-string.js +++ /dev/null @@ -1,20 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - return ( -
- ); -} - -const styles = sxCreate({ - aaa: { color: 'red' }, - bbb: { color: 'blue' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-with-quoted-properties.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-with-quoted-properties.js deleted file mode 100644 index 655f401570..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/no-unused-stylesheet/valid/sx-with-quoted-properties.js +++ /dev/null @@ -1,15 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import { create } from '@adeira/sx'; - -export default function Example(): Node { - return
Red text
; -} - -const styles = create({ - // Keep the quoted property here! - 'text-red': { - color: 'red', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/.eslintrc.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/.eslintrc.js deleted file mode 100644 index df8ec11f49..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/.eslintrc.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow strict - -/* eslint-disable no-unused-vars */ -const OFF = 0; -const WARN = 1; -const ERROR = 2; -/* eslint-enable no-unused-vars */ - -module.exports = { - rules: { - // we are having here fixtures with invalid SX definitions on purpose - 'sx/use-logical-properties': OFF, - }, -}; diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/border.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/border.js deleted file mode 100644 index c67d94d70d..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/border.js +++ /dev/null @@ -1,55 +0,0 @@ -/** - * @flow - * @eslintExpectedError (32:5;32:17) Use logical CSS property "borderBlockEnd" instead of physical CSS property "borderBottom". - * @eslintExpectedError (33:5;33:22) Use logical CSS property "borderBlockEndColor" instead of physical CSS property "borderBottomColor". - * @eslintExpectedError Use logical CSS property "borderBlockEndStyle" instead of physical CSS property "borderBottomStyle". - * @eslintExpectedError Use logical CSS property "borderBlockEndWidth" instead of physical CSS property "borderBottomWidth". - * @eslintExpectedError Use logical CSS property "borderBlockStart" instead of physical CSS property "borderTop". - * @eslintExpectedError Use logical CSS property "borderBlockStartColor" instead of physical CSS property "borderTopColor". - * @eslintExpectedError Use logical CSS property "borderBlockStartStyle" instead of physical CSS property "borderTopStyle". - * @eslintExpectedError Use logical CSS property "borderBlockStartWidth" instead of physical CSS property "borderTopWidth". - * @eslintExpectedError Use logical CSS property "borderInlineEnd" instead of physical CSS property "borderRight". - * @eslintExpectedError Use logical CSS property "borderInlineEndColor" instead of physical CSS property "borderRightColor". - * @eslintExpectedError Use logical CSS property "borderInlineEndStyle" instead of physical CSS property "borderRightStyle". - * @eslintExpectedError Use logical CSS property "borderInlineEndWidth" instead of physical CSS property "borderRightWidth". - * @eslintExpectedError Use logical CSS property "borderInlineStart" instead of physical CSS property "borderLeft". - * @eslintExpectedError Use logical CSS property "borderInlineStartColor" instead of physical CSS property "borderLeftColor". - * @eslintExpectedError Use logical CSS property "borderInlineStartStyle" instead of physical CSS property "borderLeftStyle". - * @eslintExpectedError Use logical CSS property "borderInlineStartWidth" instead of physical CSS property "borderLeftWidth". - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - // NOTE: visit also `valid/border.js` - incorrectBorders: { - // Border bottom: - borderBlockEnd: 'solid', - borderBlockEndColor: 'red', - borderBlockEndStyle: 'solid', - borderBlockEndWidth: 'thick', - - // Border top: - borderBlockStart: 'solid', - borderBlockStartColor: 'red', - borderBlockStartStyle: 'solid', - borderBlockStartWidth: 'thick', - - // Border right: - borderInlineEnd: 'solid', - borderInlineEndColor: 'red', - borderInlineEndStyle: 'solid', - borderInlineEndWidth: 'thick', - - // Border left: - borderInlineStart: 'solid', - borderInlineStartColor: 'red', - borderInlineStartStyle: 'solid', - borderInlineStartWidth: 'thick', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/margin.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/margin.js deleted file mode 100644 index 1793b957d9..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/margin.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @flow - * @eslintExpectedError (19:5;19:17) Use logical CSS property "marginBlockEnd" instead of physical CSS property "marginBottom". - * @eslintExpectedError (20:5;20:14) Use logical CSS property "marginBlockStart" instead of physical CSS property "marginTop". - * @eslintExpectedError (21:5;21:16) Use logical CSS property "marginInlineEnd" instead of physical CSS property "marginRight". - * @eslintExpectedError (22:5;22:15) Use logical CSS property "marginInlineStart" instead of physical CSS property "marginLeft". - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - // NOTE: visit also `valid/margin.js` - incorrectMargins: { - marginBlockEnd: 'solid', - marginBlockStart: 'solid', - marginInlineEnd: 'solid', - marginInlineStart: 'solid', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/padding.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/padding.js deleted file mode 100644 index a1a8e9814d..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/padding.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @flow - * @eslintExpectedError (19:5;19:18) Use logical CSS property "paddingBlockEnd" instead of physical CSS property "paddingBottom". - * @eslintExpectedError (20:5;20:15) Use logical CSS property "paddingBlockStart" instead of physical CSS property "paddingTop". - * @eslintExpectedError (21:5;21:17) Use logical CSS property "paddingInlineEnd" instead of physical CSS property "paddingRight". - * @eslintExpectedError (22:5;22:16) Use logical CSS property "paddingInlineStart" instead of physical CSS property "paddingLeft". - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - // NOTE: visit also `valid/padding.js` - incorrectPaddings: { - paddingBlockEnd: 'solid', - paddingBlockStart: 'solid', - paddingInlineEnd: 'solid', - paddingInlineStart: 'solid', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/text-align.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/text-align.js deleted file mode 100644 index b247d0af96..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/autofixed/text-align.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @flow - * @eslintExpectedError (17:16;17:22) Use logical CSS value "start" instead of physical CSS value "left". - * @eslintExpectedError (20:16;20:23) Use logical CSS value "end" instead of physical CSS value "right". - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - // NOTE: visit also `valid/text-align.js` - incorrectTextAlignLeft: { - textAlign: 'start', - }, - incorrectTextAlignRight: { - textAlign: 'end', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/border.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/border.js deleted file mode 100644 index f39fa4a398..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/border.js +++ /dev/null @@ -1,55 +0,0 @@ -/** - * @flow - * @eslintExpectedError (32:5;32:17) Use logical CSS property "borderBlockEnd" instead of physical CSS property "borderBottom". - * @eslintExpectedError (33:5;33:22) Use logical CSS property "borderBlockEndColor" instead of physical CSS property "borderBottomColor". - * @eslintExpectedError Use logical CSS property "borderBlockEndStyle" instead of physical CSS property "borderBottomStyle". - * @eslintExpectedError Use logical CSS property "borderBlockEndWidth" instead of physical CSS property "borderBottomWidth". - * @eslintExpectedError Use logical CSS property "borderBlockStart" instead of physical CSS property "borderTop". - * @eslintExpectedError Use logical CSS property "borderBlockStartColor" instead of physical CSS property "borderTopColor". - * @eslintExpectedError Use logical CSS property "borderBlockStartStyle" instead of physical CSS property "borderTopStyle". - * @eslintExpectedError Use logical CSS property "borderBlockStartWidth" instead of physical CSS property "borderTopWidth". - * @eslintExpectedError Use logical CSS property "borderInlineEnd" instead of physical CSS property "borderRight". - * @eslintExpectedError Use logical CSS property "borderInlineEndColor" instead of physical CSS property "borderRightColor". - * @eslintExpectedError Use logical CSS property "borderInlineEndStyle" instead of physical CSS property "borderRightStyle". - * @eslintExpectedError Use logical CSS property "borderInlineEndWidth" instead of physical CSS property "borderRightWidth". - * @eslintExpectedError Use logical CSS property "borderInlineStart" instead of physical CSS property "borderLeft". - * @eslintExpectedError Use logical CSS property "borderInlineStartColor" instead of physical CSS property "borderLeftColor". - * @eslintExpectedError Use logical CSS property "borderInlineStartStyle" instead of physical CSS property "borderLeftStyle". - * @eslintExpectedError Use logical CSS property "borderInlineStartWidth" instead of physical CSS property "borderLeftWidth". - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - // NOTE: visit also `valid/border.js` - incorrectBorders: { - // Border bottom: - borderBottom: 'solid', - borderBottomColor: 'red', - borderBottomStyle: 'solid', - borderBottomWidth: 'thick', - - // Border top: - borderTop: 'solid', - borderTopColor: 'red', - borderTopStyle: 'solid', - borderTopWidth: 'thick', - - // Border right: - borderRight: 'solid', - borderRightColor: 'red', - borderRightStyle: 'solid', - borderRightWidth: 'thick', - - // Border left: - borderLeft: 'solid', - borderLeftColor: 'red', - borderLeftStyle: 'solid', - borderLeftWidth: 'thick', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/margin.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/margin.js deleted file mode 100644 index b27c76bffa..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/margin.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @flow - * @eslintExpectedError (19:5;19:17) Use logical CSS property "marginBlockEnd" instead of physical CSS property "marginBottom". - * @eslintExpectedError (20:5;20:14) Use logical CSS property "marginBlockStart" instead of physical CSS property "marginTop". - * @eslintExpectedError (21:5;21:16) Use logical CSS property "marginInlineEnd" instead of physical CSS property "marginRight". - * @eslintExpectedError (22:5;22:15) Use logical CSS property "marginInlineStart" instead of physical CSS property "marginLeft". - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - // NOTE: visit also `valid/margin.js` - incorrectMargins: { - marginBottom: 'solid', - marginTop: 'solid', - marginRight: 'solid', - marginLeft: 'solid', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/padding.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/padding.js deleted file mode 100644 index 2d212e3634..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/padding.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @flow - * @eslintExpectedError (19:5;19:18) Use logical CSS property "paddingBlockEnd" instead of physical CSS property "paddingBottom". - * @eslintExpectedError (20:5;20:15) Use logical CSS property "paddingBlockStart" instead of physical CSS property "paddingTop". - * @eslintExpectedError (21:5;21:17) Use logical CSS property "paddingInlineEnd" instead of physical CSS property "paddingRight". - * @eslintExpectedError (22:5;22:16) Use logical CSS property "paddingInlineStart" instead of physical CSS property "paddingLeft". - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - // NOTE: visit also `valid/padding.js` - incorrectPaddings: { - paddingBottom: 'solid', - paddingTop: 'solid', - paddingRight: 'solid', - paddingLeft: 'solid', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/text-align.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/text-align.js deleted file mode 100644 index 888a37b88d..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/invalid/text-align.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @flow - * @eslintExpectedError (17:16;17:22) Use logical CSS value "start" instead of physical CSS value "left". - * @eslintExpectedError (20:16;20:23) Use logical CSS value "end" instead of physical CSS value "right". - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - // NOTE: visit also `valid/text-align.js` - incorrectTextAlignLeft: { - textAlign: 'left', - }, - incorrectTextAlignRight: { - textAlign: 'right', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/border.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/border.js deleted file mode 100644 index 3da51d42f5..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/border.js +++ /dev/null @@ -1,37 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - // NOTE: visit also `invalid/border.js` - correctBorders: { - // Border bottom: - borderBlockEnd: 'solid', - borderBlockEndColor: 'red', - borderBlockEndStyle: 'solid', - borderBlockEndWidth: 'thick', - - // Border top: - borderBlockStart: 'solid', - borderBlockStartColor: 'red', - borderBlockStartStyle: 'solid', - borderBlockStartWidth: 'thick', - - // Border right: - borderInlineEnd: 'solid', - borderInlineEndColor: 'red', - borderInlineEndStyle: 'solid', - borderInlineEndWidth: 'thick', - - // Border left: - borderInlineStart: 'solid', - borderInlineStartColor: 'red', - borderInlineStartStyle: 'solid', - borderInlineStartWidth: 'thick', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/margin.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/margin.js deleted file mode 100644 index 6d428f3667..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/margin.js +++ /dev/null @@ -1,18 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - // NOTE: visit also `invalid/margin.js` - correctMargins: { - marginBlockEnd: 'solid', - marginBlockStart: 'solid', - marginInlineEnd: 'solid', - marginInlineStart: 'solid', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/padding.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/padding.js deleted file mode 100644 index 6bfbd4bdf2..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/padding.js +++ /dev/null @@ -1,18 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - // NOTE: visit also `invalid/padding.js` - correctPaddings: { - paddingBlockEnd: 'solid', - paddingBlockStart: 'solid', - paddingInlineEnd: 'solid', - paddingInlineStart: 'solid', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/text-align.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/text-align.js deleted file mode 100644 index 25f64a3836..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/use-logical-properties/valid/text-align.js +++ /dev/null @@ -1,33 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return ( -
- ); -} - -const styles = sx.create({ - // NOTE: visit also `invalid/text-align.js` - correctTextAlignStart: { - textAlign: 'start', - }, - correctTextAlignEnd: { - textAlign: 'end', - }, - correctTextAlignCenter: { - textAlign: 'center', - }, - correctTextAlignJustify: { - textAlign: 'justify', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/.eslintrc.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/.eslintrc.js deleted file mode 100644 index b395382faf..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/.eslintrc.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow strict - -/* eslint-disable no-unused-vars */ -const OFF = 0; -const WARN = 1; -const ERROR = 2; -/* eslint-enable no-unused-vars */ - -module.exports = { - rules: { - // we are having here fixtures with invalid SX definitions on purpose - 'sx/valid-usage': OFF, - }, -}; diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-empty-argument.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-empty-argument.js deleted file mode 100644 index 3fbe2f770a..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-empty-argument.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX function "create" must be called with object in a first argument. - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - // $FlowExpectedError[incompatible-call] wrong on purpose (see below) - return
; -} - -// $FlowExpectedError[incompatible-call] empty on purpose (see above) -const styles = sx.create(); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-invalid-argument.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-invalid-argument.js deleted file mode 100644 index 12751bd6d4..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-invalid-argument.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX function "create" must be called with object in a first argument. - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - // $FlowExpectedError[incompatible-call] for testing purposes - return
; -} - -// $FlowExpectedError[incompatible-call] for testing purposes -const styles = sx.create('should be an object, not a string'); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-invalid-stylesheet-type.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-invalid-stylesheet-type.js deleted file mode 100644 index 90a7b29e8e..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-invalid-stylesheet-type.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @flow - * @eslintExpectedError (15:3;15:34) Each SX "create" property must be an object but "aaa" is not. - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - // $FlowExpectedError[incompatible-call] for testing purposes - aaa: 'this should be an object', -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-empty-argument.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-empty-argument.js deleted file mode 100644 index 0bada0abb8..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-empty-argument.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX function "keyframes" must be called with object in a first argument. - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -// $FlowExpectedError[incompatible-call] empty on purpose (see above) -const animation = sx.keyframes(); - -const styles = sx.create({ - aaa: { - animationName: animation, - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-invalid-argument.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-invalid-argument.js deleted file mode 100644 index cbb412609e..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-invalid-argument.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX function "keyframes" must be called with object in a first argument. - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -// $FlowExpectedError[incompatible-call] for testing purposes -const animation = sx.keyframes(); - -const styles = sx.create({ - aaa: { - animationName: animation, - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-invalid-stylesheet-type.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-invalid-stylesheet-type.js deleted file mode 100644 index e2d78c7033..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-invalid-stylesheet-type.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @flow - * @eslintExpectedError (15:3;15:34) Each SX "keyframes" property must be an object but "aaa" is not. - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const animation = sx.keyframes({ - // $FlowExpectedError[incompatible-call] for testing purposes - aaa: 'this should be an object', -}); - -const styles = sx.create({ - aaa: { - animationName: animation, - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-too-many-arguments.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-too-many-arguments.js deleted file mode 100644 index 5dc427514d..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-keyframes-too-many-arguments.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX function "keyframes" was called with too many arguments. Only one is allowed. - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const animation = sx.keyframes( - { - from: { opacity: 0 }, - to: { opacity: 1 }, - }, - // $FlowExpectedError[extra-arg] - for testing purposes - 'unknown argument', -); - -const styles = sx.create({ - aaa: { - animationName: animation, - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-too-many-arguments.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-too-many-arguments.js deleted file mode 100644 index fed1a5068a..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sx-too-many-arguments.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX function "create" was called with too many arguments. Only one is allowed. - */ - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create( - { - aaa: { - color: 'red', - }, - }, - // $FlowExpectedError[extra-arg] - for testing purposes - 'unknown argument', -); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sxCreate-invalid-stylesheet-type.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sxCreate-invalid-stylesheet-type.js deleted file mode 100644 index baad2a587a..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sxCreate-invalid-stylesheet-type.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @flow - * @eslintExpectedError (15:3;15:34) Each SX "sxCreate" property must be an object but "aaa" is not. - */ - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sxCreate({ - // $FlowExpectedError[incompatible-call] for testing purposes - aaa: 'this should be an object', -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sxCreate-too-many-arguments.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sxCreate-too-many-arguments.js deleted file mode 100644 index adb1d7b68a..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sxCreate-too-many-arguments.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX function "sxCreate" was called with too many arguments. Only one is allowed. - */ - -import type { Node } from 'react'; -import { create as sxCreate } from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sxCreate( - { - aaa: { - color: 'red', - }, - }, - // $FlowExpectedError[extra-arg] - for testing purposes - 'unknown argument', -); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sxKeyframes-too-many-arguments.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sxKeyframes-too-many-arguments.js deleted file mode 100644 index fc93770b98..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/invalid/sxKeyframes-too-many-arguments.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @flow - * @eslintExpectedError SX function "sxKeyframes" was called with too many arguments. Only one is allowed. - */ - -import type { Node } from 'react'; -import { create, keyframes as sxKeyframes } from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const animation = sxKeyframes( - { - from: { opacity: 0 }, - to: { opacity: 1 }, - }, - // $FlowExpectedError[extra-arg] - for testing purposes - 'unknown argument', -); - -const styles = create({ - aaa: { - animationName: animation, - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/basic-conditional.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/basic-conditional.js deleted file mode 100644 index 81cefb8e89..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/basic-conditional.js +++ /dev/null @@ -1,12 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/basic.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/basic.js deleted file mode 100644 index 4e9ef057c8..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/basic.js +++ /dev/null @@ -1,12 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const styles = sx.create({ - aaa: { color: 'red' }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/identifier-property.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/identifier-property.js deleted file mode 100644 index 4d53ae8819..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/identifier-property.js +++ /dev/null @@ -1,16 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export default function MyComponent(): Node { - return
; -} - -const common = { - color: 'red', -}; - -const styles = sx.create({ - aaa: common, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/sx-keyframes.js b/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/sx-keyframes.js deleted file mode 100644 index 82244f30f4..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/fixtures/valid-usage/valid/sx-keyframes.js +++ /dev/null @@ -1,35 +0,0 @@ -// @flow - -import type { Node } from 'react'; -import sx from '@adeira/sx'; - -export function AnimatedComponent(): Node { - return ( - <> -
fade-in text
-
simple text
- - ); -} - -const fadeIn = sx.keyframes({ - '0%': { opacity: 0 }, - '50%, 55%': { opacity: 0.3 }, - '100%': { opacity: 1 }, -}); - -const simple = sx.keyframes({ - from: { opacity: 0 }, - to: { opacity: 1 }, -}); - -const styles = sx.create({ - fadeIn: { - animationName: fadeIn, - animationDuration: '2s', - }, - simple: { - animationName: simple, - animationDuration: '1s', - }, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/no-concatenated-classes.test.js b/src/eslint-plugin-sx/src/rules/__tests__/no-concatenated-classes.test.js deleted file mode 100644 index 170fbd640d..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/no-concatenated-classes.test.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -import path from 'path'; -import testFixtures from '@adeira/eslint-fixtures-tester'; - -const fixturesPath = path.join(__dirname, 'fixtures', 'no-concatenated-classes'); -const validFixturesPath = path.join(fixturesPath, 'valid'); -const invalidFixturesPath = path.join(fixturesPath, 'invalid'); - -testFixtures({ - rule: require('../no-concatenated-classes'), - validFixturesPath, - invalidFixturesPath, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/no-unused-stylesheet.test.js b/src/eslint-plugin-sx/src/rules/__tests__/no-unused-stylesheet.test.js deleted file mode 100644 index dd74d29eda..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/no-unused-stylesheet.test.js +++ /dev/null @@ -1,100 +0,0 @@ -// @flow - -import path from 'path'; -import crypto from 'crypto'; -import { RuleTester } from 'eslint'; -import { codeFrameColumns } from '@babel/code-frame'; -import testFixtures from '@adeira/eslint-fixtures-tester'; - -import normalizeIndent from './normalizeIndent'; - -const fixturesPath = path.join(__dirname, 'fixtures', 'no-unused-stylesheet'); -const validFixturesPath = path.join(fixturesPath, 'valid'); -const invalidFixturesPath = path.join(fixturesPath, 'invalid'); - -const rule = require('../no-unused-stylesheet'); - -testFixtures({ - rule, - validFixturesPath, - invalidFixturesPath, -}); - -const ruleTester = new RuleTester({ - parser: require.resolve('hermes-eslint'), -}); - -// This test makes sure we are reporting correct lines and columns: -const invalidTests = [ - { - code: normalizeIndent` - import sx from '@adeira/sx'; - const styles = sx.create({ - aaa: { - color: blue, - } - }); - `, - errors: [ - { - message: 'SX function "styles" was not used anywhere in the code.', - line: 3, - column: 7, - endLine: 7, - endColumn: 3, - }, - { - message: 'Unused stylesheet: aaa (defined via "styles" variable)', - line: 4, - column: 3, - endLine: 6, - endColumn: 4, - }, - ], - }, - { - code: normalizeIndent` - import sx from '@adeira/sx'; - export default function TestComponent() { - return
- } - const styles = sx.create({ - aaa: { color: blue } - }); - `, - errors: [ - { - message: 'Unknown stylesheet used: bbb (not defined anywhere)', - line: 4, - column: 33, - endLine: 4, - endColumn: 38, - }, - { - message: 'Unused stylesheet: aaa (defined via "styles" variable)', - line: 7, - column: 3, - endLine: 7, - endColumn: 23, - }, - ], - }, -]; - -ruleTester.run('no-unused-stylesheet', rule, { - valid: [], - invalid: invalidTests, -}); - -test.each(invalidTests)('reports correct lines and columns', (test) => { - for (const error of test.errors) { - expect( - codeFrameColumns(test.code, { - start: { line: error.line, column: error.column }, - end: { line: error.endLine, column: error.endColumn }, - }), - ).toMatchSnapshot( - `${error.message} ${crypto.createHash('md5').update(test.code).digest('hex')}`, - ); - } -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/normalizeIndent.js b/src/eslint-plugin-sx/src/rules/__tests__/normalizeIndent.js deleted file mode 100644 index 7517b2929f..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/normalizeIndent.js +++ /dev/null @@ -1,7 +0,0 @@ -// @flow strict - -export default function normalizeIndent(strings: $ReadOnlyArray): string { - const codeLines = strings[0].split('\n'); - const leftPadding = codeLines[1].match(/\s+/)?.[0] ?? ''; - return codeLines.map((line) => line.substr(leftPadding.length)).join('\n'); -} diff --git a/src/eslint-plugin-sx/src/rules/__tests__/normalizeIndent.test.js b/src/eslint-plugin-sx/src/rules/__tests__/normalizeIndent.test.js deleted file mode 100644 index a05959f0be..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/normalizeIndent.test.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow strict - -import normalizeIndent from './normalizeIndent'; - -it('normalizes indent correctly', () => { - expect(normalizeIndent` - import sx from '@adeira/sx'; - const styles = sx.create({ - aaa: { - color: blue, - } - }); - `).toMatchSnapshot(); -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/use-logical-properties.test.js b/src/eslint-plugin-sx/src/rules/__tests__/use-logical-properties.test.js deleted file mode 100644 index 82f40912c1..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/use-logical-properties.test.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -import path from 'path'; -import testFixtures from '@adeira/eslint-fixtures-tester'; - -const fixturesPath = path.join(__dirname, 'fixtures', 'use-logical-properties'); -const validFixturesPath = path.join(fixturesPath, 'valid'); -const invalidFixturesPath = path.join(fixturesPath, 'invalid'); - -testFixtures({ - rule: require('../use-logical-properties'), - validFixturesPath, - invalidFixturesPath, -}); diff --git a/src/eslint-plugin-sx/src/rules/__tests__/valid-usage.test.js b/src/eslint-plugin-sx/src/rules/__tests__/valid-usage.test.js deleted file mode 100644 index 3b4908525a..0000000000 --- a/src/eslint-plugin-sx/src/rules/__tests__/valid-usage.test.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -import path from 'path'; -import testFixtures from '@adeira/eslint-fixtures-tester'; - -const fixturesPath = path.join(__dirname, 'fixtures', 'valid-usage'); -const validFixturesPath = path.join(fixturesPath, 'valid'); -const invalidFixturesPath = path.join(fixturesPath, 'invalid'); - -testFixtures({ - rule: require('../valid-usage'), - validFixturesPath, - invalidFixturesPath, -}); diff --git a/src/eslint-plugin-sx/src/rules/no-concatenated-classes.js b/src/eslint-plugin-sx/src/rules/no-concatenated-classes.js deleted file mode 100644 index ed822e48da..0000000000 --- a/src/eslint-plugin-sx/src/rules/no-concatenated-classes.js +++ /dev/null @@ -1,92 +0,0 @@ -// @flow - -/*:: -import type { EslintRule } from '@adeira/flow-types-eslint'; -*/ - -const getSXImportSpecifiers = require('./utils/getSXImportSpecifiers'); -const isSXVariableDeclarator = require('./utils/isSXVariableDeclarator'); - -/** - * This rule tries to find incorrect SX concatenations. For example: - * - * ``` - *
- * ``` - * - * Should be: - * - * ``` - *
- * ``` - * - * It's because the first call doesn't handle rules specificity correctly whereas the later one does. - * Don't get confused: SX doesn't handle the specificity in a same way like CSS. - */ -module.exports = ({ - create: function (context) { - // import sx from '@adeira/sx' - // ^^ - let importDefaultSpecifier = null; - - // import { create as sxCreate } from '@adeira/sx'; - // ^^^^^^^^ - let importSpecifierCreate = null; - - // "styles" in "let styles = sx.create({}) - let sxFunctionName = null; - - const relevantTemplateLiterals = []; - - return { - // TODO: add support for `require("@adeira/sx")` - 'ImportDeclaration'(node) { - const importSpecifiers = getSXImportSpecifiers(node); - if (importSpecifiers !== null) { - importDefaultSpecifier = importSpecifiers.importDefaultSpecifier; - importSpecifierCreate = importSpecifiers.importSpecifierCreate; - } - }, - 'VariableDeclarator'(node) { - if (isSXVariableDeclarator(node, importDefaultSpecifier, importSpecifierCreate)) { - sxFunctionName = node.id.name; - } - }, - 'JSXExpressionContainer'(node) { - if (importDefaultSpecifier == null && importSpecifierCreate == null) { - // not in an @adeira/sx scope, early exit - return; - } - - if (node.expression.type === 'TemplateLiteral') { - relevantTemplateLiterals.push(node); - } - }, - 'Program:exit'() { - for (const relevantTemplateLiteralNode of relevantTemplateLiterals) { - let sxTemplateCallExpressions = 0; - - if (relevantTemplateLiteralNode.expression.type === 'TemplateLiteral') { - for (const expression of relevantTemplateLiteralNode.expression.expressions) { - if (expression.type === 'CallExpression') { - if (expression.callee.name === sxFunctionName) { - sxTemplateCallExpressions += 1; - } - } - } - } - - if (sxTemplateCallExpressions >= 2) { - // This rule will be satisfied if we find at least 2 SX expressions in the string. - context.report({ - node: relevantTemplateLiteralNode, - message: - 'SX functions should not be concatenated in a template literal otherwise styles ' + - 'precedence might not work as expected.', - }); - } - } - }, - }; - }, -} /*: EslintRule */); diff --git a/src/eslint-plugin-sx/src/rules/no-unused-stylesheet.js b/src/eslint-plugin-sx/src/rules/no-unused-stylesheet.js deleted file mode 100644 index 00f99ca8e8..0000000000 --- a/src/eslint-plugin-sx/src/rules/no-unused-stylesheet.js +++ /dev/null @@ -1,235 +0,0 @@ -// @flow - -/*:: -import type { EslintRule } from '@adeira/flow-types-eslint'; -*/ - -const getObjectPropertyName = require('./utils/getObjectPropertyName'); -const getSXImportSpecifiers = require('./utils/getSXImportSpecifiers'); -const isSXVariableDeclarator = require('./utils/isSXVariableDeclarator'); - -/** - * This rule makes sure that all defined stylesheets are used AND all used stylesheets are defined. - */ -module.exports = ({ - create: function (context) { - // import sx from '@adeira/sx' - // ^^ - let importDefaultSpecifier = null; - - // import { create as sxCreate } from '@adeira/sx'; - // ^^^^^^^^ - let importSpecifierCreate = null; - - // stylesheet names which were defined via `sx.create` - // const xxx = sx.create({yyy, zzz}) => Map([["xxx", ["yyy", "zzz"]]]) - const definedStylesheetNames /*: Map */ = new Map(); - const definedStylesheetNodes /*: Map */ = new Map(); - const definedStylesheetNameNodes /*: Map */ = new Map(); - - // xxx('aaa', 'bbb') => Map([["xxx", [aaaNode, bbbNode]]]) - const usedStylesheetNames /*: Map */ = new Map(); - const usedStylesheetNodes /*: Map */ = new Map(); - - let unableToAnalyzeUsedStylesheets = false; - - return { - // TODO: add support for `require("@adeira/sx")` - 'ImportDeclaration'(node) { - const importSpecifiers = getSXImportSpecifiers(node); - if (importSpecifiers !== null) { - importDefaultSpecifier = importSpecifiers.importDefaultSpecifier; - importSpecifierCreate = importSpecifiers.importSpecifierCreate; - } - }, - - // const styles = sx.create({}) - // ^^^^^^^^^^^^^^^^^^^^^^ - // { id } { init } - 'VariableDeclarator'(node) { - if (isSXVariableDeclarator(node, importDefaultSpecifier, importSpecifierCreate)) { - const initArguments = node.init?.arguments || []; - const firstArgument = initArguments[0]; - // $FlowIssue[unnecessary-optional-chain]: https://github.com/facebook/flow/issues/5972 - if (firstArgument?.type === 'ObjectExpression') { - const firstArgumentProperties = firstArgument.properties ?? []; - for (const property of firstArgumentProperties) { - if (property.type === 'Property') { - const alreadyCaptured = definedStylesheetNames.get(node.id.name) ?? []; - let propertyName = null; - if (property.key.type === 'Literal') { - propertyName = property.key.value; - } else if (property.key.type === 'Identifier') { - propertyName = property.key.name; - } - definedStylesheetNames.set(node.id.name, [...alreadyCaptured, propertyName]); - definedStylesheetNameNodes.set(propertyName, property); - } - } - definedStylesheetNodes.set(node.id.name, node); - } - } - }, - - // styles('aaa') - // ^^^^^^^^^^^^^ - 'CallExpression'(node) { - const expressionArguments = node.arguments ?? []; - for (const argument of expressionArguments) { - if (['CallExpression'].includes(argument.type)) { - // these are argument which we simply want to acknowledge and skip (but continue analyzing) - return; - } else if (argument.type === 'ObjectExpression') { - // special case for conditional objects - for (const property of argument.properties) { - if (property.type === 'Property' && property.value.type === 'ObjectExpression') { - // we assume this is a SX.create definition so we skip it - return; - } - } - } else if ( - ![ - // Supported argument types: - 'ConditionalExpression', - 'Literal', - 'LogicalExpression', - 'TemplateLiteral', - ].includes(argument.type) - ) { - // backout early if we cannot recognize (or do not support) the 'CallExpression' pattern - unableToAnalyzeUsedStylesheets = true; - return; - } - } - - const usedNames /*: Set */ = new Set(); - for (const argument of expressionArguments) { - // TODO: more cases (deeper analysis) - let value = null; - if (argument.type === 'ObjectExpression') { - for (const property of argument.properties) { - if (property.type === 'Property') { - const propertyName = getObjectPropertyName(property); - usedNames.add(propertyName); - usedStylesheetNodes.set(propertyName, argument); - } - } - continue; - } else if (argument.type === 'Literal') { - // styles('aaa') - value = argument.value; - } else if (argument.type === 'TemplateLiteral') { - // styles(`aaa`) - value = argument.quasis[0].value.raw; - } else if (argument.type === 'LogicalExpression') { - if (argument.right.type === 'Literal') { - // styles(isAAA && 'aaa') - value = argument.right.value; - } - } else if (argument.type === 'ConditionalExpression') { - if ( - argument.consequent.type === 'Literal' && - typeof argument.consequent.value === 'string' // can be also `null`, `false`, … - ) { - // styles(isAAA ? 'aaa' : null) - const consequentValue = argument.consequent.value; - usedNames.add(consequentValue); - usedStylesheetNodes.set(consequentValue, argument); - } - if ( - argument.alternate.type === 'Literal' && - typeof argument.alternate.value === 'string' // can be also `null`, `false`, … - ) { - // styles(isBBB ? null : 'aaa') - const alternateValue = argument.alternate.value; - usedNames.add(alternateValue); - usedStylesheetNodes.set(alternateValue, argument); - } - continue; - } - usedNames.add(value); - usedStylesheetNodes.set(value, argument); - } - - const maybeCaptured = usedStylesheetNames.get(node.callee.name); - const alreadyCaptured = maybeCaptured ?? []; - usedStylesheetNames.set(node.callee.name, [...alreadyCaptured, ...usedNames]); - }, - - // xstyle={styles.spacing} xstyle={styles['spacing']} - // ^^^^^^^^^^^^^^ or ^^^^^^^^^^^^^^^^^ - 'JSXExpressionContainer'(node) { - // used when composing styles via `sx(…)` - // we limit it for JSX on purpose (to simplify things) - const expression = node.expression; - if (expression.type !== 'MemberExpression') { - return; - } - - let stylesheetName = null; - if (expression.property.name != null) { - stylesheetName = expression.property.name; - } else if (expression.property.value != null) { - stylesheetName = expression.property.value; - } - const maybeCaptured = usedStylesheetNames.get(expression.object.name); - const alreadyCaptured = maybeCaptured ?? []; - usedStylesheetNames.set(expression.object.name, [...alreadyCaptured, stylesheetName]); - }, - - 'Program:exit'(node) { - if (unableToAnalyzeUsedStylesheets === true) { - // backout early in cases we are not 100% sure about it - return; - } - - definedStylesheetNames.forEach((definedNames, callee) => { - const usedNames = usedStylesheetNames.get(callee); - if (usedNames == null) { - const definedNode = definedStylesheetNodes.get(callee); - context.report({ - node, - loc: definedNode ? definedNode.loc : undefined, - message: 'SX function "{{functionName}}" was not used anywhere in the code.', - data: { functionName: callee }, - }); - } - - const definedButNotUsed = - definedNames.filter((name) => { - return !usedNames?.includes(name); - }) ?? []; - for (const name of definedButNotUsed) { - const definedNameNode = definedStylesheetNameNodes.get(name); - context.report({ - node, - loc: definedNameNode ? definedNameNode.loc : undefined, - message: - 'Unused stylesheet: {{stylesheetName}} (defined via "{{definedBy}}" variable)', - data: { - stylesheetName: name, - definedBy: callee, - }, - }); - } - - const usedButNotDefined = - usedNames?.filter((name) => { - return !definedNames.includes(name); - }) ?? []; - for (const name of usedButNotDefined) { - const usedNode = usedStylesheetNodes.get(name); - context.report({ - node, - loc: usedNode ? usedNode.loc : undefined, - message: 'Unknown stylesheet used: {{stylesheetName}} (not defined anywhere)', - data: { - stylesheetName: name, - }, - }); - } - }); - }, - }; - }, -} /*: EslintRule */); diff --git a/src/eslint-plugin-sx/src/rules/use-logical-properties.js b/src/eslint-plugin-sx/src/rules/use-logical-properties.js deleted file mode 100644 index e1319a2df4..0000000000 --- a/src/eslint-plugin-sx/src/rules/use-logical-properties.js +++ /dev/null @@ -1,169 +0,0 @@ -// @flow - -/*:: -import type { EslintRule } from '@adeira/flow-types-eslint'; -*/ - -const getObjectPropertyName = require('./utils/getObjectPropertyName'); -const getSXImportSpecifiers = require('./utils/getSXImportSpecifiers'); -const isSXKeyframesVariableDeclarator = require('./utils/isSXKeyframesVariableDeclarator'); -const isSXVariableDeclarator = require('./utils/isSXVariableDeclarator'); - -// Map(physical prop => logical prop) -// -// See: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties -const propertyNameSuggestions /*: Map */ = new Map([ - // Border bottom: - ['borderBottom', 'borderBlockEnd'], - ['borderBottomColor', 'borderBlockEndColor'], - ['borderBottomStyle', 'borderBlockEndStyle'], - ['borderBottomWidth', 'borderBlockEndWidth'], - - // Border top: - ['borderTop', 'borderBlockStart'], - ['borderTopColor', 'borderBlockStartColor'], - ['borderTopStyle', 'borderBlockStartStyle'], - ['borderTopWidth', 'borderBlockStartWidth'], - - // Border right: - ['borderRight', 'borderInlineEnd'], - ['borderRightColor', 'borderInlineEndColor'], - ['borderRightStyle', 'borderInlineEndStyle'], - ['borderRightWidth', 'borderInlineEndWidth'], - - // Border left: - ['borderLeft', 'borderInlineStart'], - ['borderLeftColor', 'borderInlineStartColor'], - ['borderLeftStyle', 'borderInlineStartStyle'], - ['borderLeftWidth', 'borderInlineStartWidth'], - - // Margin: - ['marginBottom', 'marginBlockEnd'], - ['marginTop', 'marginBlockStart'], - ['marginRight', 'marginInlineEnd'], - ['marginLeft', 'marginInlineStart'], - - // Padding: - ['paddingBottom', 'paddingBlockEnd'], - ['paddingTop', 'paddingBlockStart'], - ['paddingRight', 'paddingInlineEnd'], - ['paddingLeft', 'paddingInlineStart'], -]); - -const propertyValueSuggestions /*: Map> */ = new Map([ - // Map(property name => Map(old value => new value)) - [ - 'textAlign', - new Map([ - ['left', 'start'], - ['right', 'end'], - ]), - ], -]); - -/** - * This rule aims to suggest logical CSS properties instead of physical CSS properties to improve - * support of other layouts (LTR/RTL, …). - * - * See: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties - * See: https://caniuse.com/css-logical-props - */ -module.exports = ({ - meta: { - fixable: 'code', - }, - create: function (context) { - // import sx from '@adeira/sx' - // ^^ - let importDefaultSpecifier = null; - - // import { create as sxCreate } from '@adeira/sx'; - // ^^^^^^^^ - let importSpecifierCreate = null; - - // import { keyframes as sxKeyframes } from '@adeira/sx'; - // ^^^^^^^^ - let importSpecifierKeyframes = null; - - return { - ImportDeclaration(node) { - const importSpecifiers = getSXImportSpecifiers(node); - if (importSpecifiers !== null) { - importDefaultSpecifier = importSpecifiers.importDefaultSpecifier; - importSpecifierCreate = importSpecifiers.importSpecifierCreate; - importSpecifierKeyframes = importSpecifiers.importSpecifierKeyframes; - } - }, - - // const styles = sx.create({}) - // ^^^^^^^^^^^^^^^^^^^^^^ - // | id | - VariableDeclarator(node) { - if ( - // "sx.create" and "sx.keyframes" are essentially the same from the validation point of view - isSXVariableDeclarator(node, importDefaultSpecifier, importSpecifierCreate) || - isSXKeyframesVariableDeclarator(node, importDefaultSpecifier, importSpecifierKeyframes) - ) { - const initArguments = node.init?.arguments || []; - const firstArgument = initArguments[0]; - - // $FlowExpectedError[unnecessary-optional-chain]: https://github.com/facebook/flow/issues/5972 - if (firstArgument?.type === 'ObjectExpression') { - // $FlowExpectedError[unnecessary-optional-chain]: https://github.com/facebook/flow/issues/5972 - const firstArgumentProperties = firstArgument?.properties ?? []; - for (const property of firstArgumentProperties) { - if (property.type === 'Property' && property.value.type === 'ObjectExpression') { - for (const styleNameProperty of property.value.properties) { - if (styleNameProperty.type === 'Property') { - const propertyName = getObjectPropertyName(styleNameProperty); - if (propertyName != null && propertyNameSuggestions.has(propertyName)) { - context.report({ - node: styleNameProperty.key, - message: - 'Use logical CSS property "{{newProperty}}" instead of physical CSS property "{{oldProperty}}".', - data: { - oldProperty: propertyName, - newProperty: propertyNameSuggestions.get(propertyName), - }, - fix: function (fixer /*: any */) { - return fixer.replaceText( - styleNameProperty.key, - propertyNameSuggestions.get(propertyName), - ); - }, - }); - } else if (propertyName != null && propertyValueSuggestions.has(propertyName)) { - const valueNode = styleNameProperty.value; - if (valueNode.type === 'Literal') { - const oldValue = valueNode.value; - const valueSuggestionMap = - propertyValueSuggestions.get(propertyName) ?? new Map(); - if (valueSuggestionMap.has(oldValue)) { - context.report({ - node: valueNode, - message: - 'Use logical CSS value "{{newValue}}" instead of physical CSS value "{{oldValue}}".', - data: { - oldValue, - newValue: valueSuggestionMap.get(oldValue), - }, - fix: function (fixer /*: any */) { - return fixer.replaceText( - valueNode, - `'${valueSuggestionMap.get(oldValue) ?? '…'}'`, - ); - }, - }); - } - } - } - } - } - } - } - } - } - }, - }; - }, -} /*: EslintRule */); diff --git a/src/eslint-plugin-sx/src/rules/utils/getObjectPropertyName.js b/src/eslint-plugin-sx/src/rules/utils/getObjectPropertyName.js deleted file mode 100644 index ce43fc0e8a..0000000000 --- a/src/eslint-plugin-sx/src/rules/utils/getObjectPropertyName.js +++ /dev/null @@ -1,18 +0,0 @@ -// @flow - -/*:: -import type { Property } from '@adeira/flow-types-eslint'; -*/ - -module.exports = function getObjectPropertyName(property /*: Property */) /*: string | null */ { - let propertyName = null; - if (property.key.type === 'Identifier') { - propertyName = property.key.name; - } else if (property.key.type === 'Literal') { - propertyName = property.key.value; - } else if (property.key.type === 'TemplateLiteral') { - // simple cases only: - propertyName = property.key.quasis[0].value.raw; - } - return propertyName; -}; diff --git a/src/eslint-plugin-sx/src/rules/utils/getSXImportSpecifiers.js b/src/eslint-plugin-sx/src/rules/utils/getSXImportSpecifiers.js deleted file mode 100644 index 4c32b2bda5..0000000000 --- a/src/eslint-plugin-sx/src/rules/utils/getSXImportSpecifiers.js +++ /dev/null @@ -1,55 +0,0 @@ -// @flow - -/*:: - -import type { ImportDeclaration } from '@adeira/flow-types-eslint'; - -type ReturnType = { - +importDefaultSpecifier: null | string, - +importSpecifierCreate: null | string, - +importSpecifierKeyframes: null | string, -}; - -*/ - -module.exports = function getSXImportSpecifiers( - node /*: ImportDeclaration */, -) /*: ReturnType | null */ { - // import sx from '@adeira/sx' - // ^^ - let importDefaultSpecifier = null; - - // import { create as sxCreate } from '@adeira/sx'; - // ^^^^^^^^ - let importSpecifierCreate = null; - - // import { keyframes as sxKeyframes } from '@adeira/sx'; - // ^^^^^^^^ - let importSpecifierKeyframes = null; - - if (node.source.value !== '@adeira/sx') { - return null; - } - - for (const specifier of node.specifiers) { - if (specifier.type === 'ImportDefaultSpecifier') { - // import sx from '@adeira/sx' - // import tada from '@adeira/sx' - importDefaultSpecifier = specifier.local.name; // "sx" or "tada" - } else if (specifier.type === 'ImportSpecifier' && specifier.imported.name === 'create') { - // import { create } from '@adeira/sx'; - // import { create as sxCreate } from '@adeira/sx'; - importSpecifierCreate = specifier.local.name; // "create" or "sxCreate" - } else if (specifier.type === 'ImportSpecifier' && specifier.imported.name === 'keyframes') { - // import { keyframes } from '@adeira/sx'; - // import { keyframes as sxKeyframes } from '@adeira/sx'; - importSpecifierKeyframes = specifier.local.name; // "create" or "sxCreate" - } - } - - return { - importDefaultSpecifier, - importSpecifierCreate, - importSpecifierKeyframes, - }; -}; diff --git a/src/eslint-plugin-sx/src/rules/utils/getVariableDeclaratorCalleeName.js b/src/eslint-plugin-sx/src/rules/utils/getVariableDeclaratorCalleeName.js deleted file mode 100644 index b5a49c843b..0000000000 --- a/src/eslint-plugin-sx/src/rules/utils/getVariableDeclaratorCalleeName.js +++ /dev/null @@ -1,21 +0,0 @@ -// @flow - -/*:: -import type { VariableDeclarator } from '@adeira/flow-types-eslint'; -*/ - -module.exports = function getVariableDeclaratorCalleeName( - node /*: VariableDeclarator */, - importDefaultSpecifier /*: string | null */, -) /*: string | null */ { - if (node.init != null && node.init.type === 'CallExpression' && node.init.callee) { - if ( - node.init.callee.object && - node.init.callee.object.name === importDefaultSpecifier // "sx" in sx.create({}) - ) { - return node.init.callee.property.name; // "create" in sx.create({}) - } - return node.init.callee.name; // "sxCreate" in sxCreate({}) - } - return null; -}; diff --git a/src/eslint-plugin-sx/src/rules/utils/isSXKeyframesVariableDeclarator.js b/src/eslint-plugin-sx/src/rules/utils/isSXKeyframesVariableDeclarator.js deleted file mode 100644 index 20bc415687..0000000000 --- a/src/eslint-plugin-sx/src/rules/utils/isSXKeyframesVariableDeclarator.js +++ /dev/null @@ -1,23 +0,0 @@ -// @flow - -/*:: -import type { VariableDeclarator } from '@adeira/flow-types-eslint'; -*/ - -module.exports = function isSXKeyframesVariableDeclarator( - node /*: VariableDeclarator */, - importDefaultSpecifier /*: string | null */, - importSpecifier /*: string | null */, -) /*: boolean */ { - return ( - node.init != null && - node.init.type === 'CallExpression' && - node.init.callee && - node.init.arguments && - ((node.init.callee.object && - node.init.callee.object.name === importDefaultSpecifier && // "sx" in sx.keyframes({}) - node.init.callee.property && - node.init.callee.property.name === 'keyframes') || // "keyframes" in sx.keyframes({}) - node.init.callee.name === importSpecifier) // "sxKeyframes" in sxKeyframes({}) - ); -}; diff --git a/src/eslint-plugin-sx/src/rules/utils/isSXVariableDeclarator.js b/src/eslint-plugin-sx/src/rules/utils/isSXVariableDeclarator.js deleted file mode 100644 index ba71629e74..0000000000 --- a/src/eslint-plugin-sx/src/rules/utils/isSXVariableDeclarator.js +++ /dev/null @@ -1,23 +0,0 @@ -// @flow - -/*:: -import type { VariableDeclarator } from '@adeira/flow-types-eslint'; -*/ - -module.exports = function isSXVariableDeclarator( - node /*: VariableDeclarator */, - importDefaultSpecifier /*: string | null */, - importSpecifier /*: string | null */, -) /*: boolean */ { - return ( - node.init != null && - node.init.type === 'CallExpression' && - node.init.callee && - node.init.arguments && - ((node.init.callee.object && - node.init.callee.object.name === importDefaultSpecifier && // "sx" in sx.create({}) - node.init.callee.property && - node.init.callee.property.name === 'create') || // "create" in sx.create({}) - node.init.callee.name === importSpecifier) // "sxCreate" in sxCreate({}) - ); -}; diff --git a/src/eslint-plugin-sx/src/rules/valid-usage.js b/src/eslint-plugin-sx/src/rules/valid-usage.js deleted file mode 100644 index b7f2ac30cc..0000000000 --- a/src/eslint-plugin-sx/src/rules/valid-usage.js +++ /dev/null @@ -1,104 +0,0 @@ -// @flow - -/*:: -import type { EslintRule } from '@adeira/flow-types-eslint'; -*/ - -const getSXImportSpecifiers = require('./utils/getSXImportSpecifiers'); -const isSXVariableDeclarator = require('./utils/isSXVariableDeclarator'); -const isSXKeyframesVariableDeclarator = require('./utils/isSXKeyframesVariableDeclarator'); -const getVariableDeclaratorCalleeName = require('./utils/getVariableDeclaratorCalleeName'); - -/** - * This rule tries to catch obviously invalid SX usages. - */ -module.exports = ({ - create: function (context) { - // import sx from '@adeira/sx' - // ^^ - let importDefaultSpecifier = null; - - // import { create as sxCreate } from '@adeira/sx'; - // ^^^^^^^^ - let importSpecifierCreate = null; - - // import { keyframes as sxKeyframes } from '@adeira/sx'; - // ^^^^^^^^ - let importSpecifierKeyframes = null; - - return { - // TODO: add support for `require("@adeira/sx")` - ImportDeclaration(node) { - const importSpecifiers = getSXImportSpecifiers(node); - if (importSpecifiers !== null) { - importDefaultSpecifier = importSpecifiers.importDefaultSpecifier; - importSpecifierCreate = importSpecifiers.importSpecifierCreate; - importSpecifierKeyframes = importSpecifiers.importSpecifierKeyframes; - } - }, - - // const styles = sx.create({}) - // ^^^^^^^^^^^^^^^^^^^^^^ - // | id | - VariableDeclarator(node) { - if ( - // "sx.create" and "sx.keyframes" are essentially the same from the validation point of view - isSXVariableDeclarator(node, importDefaultSpecifier, importSpecifierCreate) || - isSXKeyframesVariableDeclarator(node, importDefaultSpecifier, importSpecifierKeyframes) - ) { - const initArguments = node.init?.arguments || []; - const calleeName = getVariableDeclaratorCalleeName(node, importDefaultSpecifier); - - if (initArguments.length > 1) { - context.report({ - node, - message: - 'SX function "{{calleeName}}" was called with too many arguments. Only one is allowed.', - data: { calleeName }, - }); - } - - const firstArgument = initArguments[0]; - // $FlowIssue[unnecessary-optional-chain]: https://github.com/facebook/flow/issues/5972 - if (firstArgument?.type !== 'ObjectExpression') { - context.report({ - node, - message: - 'SX function "{{calleeName}}" must be called with object in a first argument.', - data: { calleeName }, - }); - return; - } - - // $FlowIssue[unnecessary-optional-chain]: https://github.com/facebook/flow/issues/5972 - const firstArgumentProperties = firstArgument?.properties ?? []; - for (const property of firstArgumentProperties) { - if ( - property.type === 'Property' && - property.value.type !== 'ObjectExpression' && - /* $FlowFixMe[incompatible-type] This comment suppresses an error when upgrading - * Flow to version 0.234.0. To see the error, delete this comment and run Flow. */ - property.value.type !== 'Identifier' - ) { - let propertyName = '???'; - if (property.key.type === 'Literal') { - propertyName = property.key.value; - } else if (property.key.type === 'Identifier') { - propertyName = property.key.name; - } - context.report({ - node: property, - message: - 'Each SX "{{calleeName}}" property must be an object but "{{propertyName}}" is not.', - data: { - calleeName, - propertyName, - }, - }); - } - } - } - }, - }; - }, -} /*: EslintRule */); diff --git a/src/forms/.babelrc.js b/src/forms/.babelrc.js deleted file mode 100644 index 820ac565ca..0000000000 --- a/src/forms/.babelrc.js +++ /dev/null @@ -1,5 +0,0 @@ -// @flow strict - -module.exports = { - plugins: ['babel-plugin-fbt', 'babel-plugin-fbt-runtime'], -}; diff --git a/src/forms/.eslintrc.js b/src/forms/.eslintrc.js deleted file mode 100644 index d13ae933b7..0000000000 --- a/src/forms/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -// @flow strict - -/* eslint-disable no-unused-vars */ -const OFF = 0; -const WARN = 1; -const ERROR = 2; -/* eslint-enable no-unused-vars */ - -module.exports = { - env: { - browser: true, - }, -}; diff --git a/src/forms/.npmignore b/src/forms/.npmignore deleted file mode 100644 index 143b59ce05..0000000000 --- a/src/forms/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -__flowtests__ -__tests__ diff --git a/src/forms/LICENSE b/src/forms/LICENSE deleted file mode 100644 index 3b9565ef58..0000000000 --- a/src/forms/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019-present, Adeira - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/forms/README.md b/src/forms/README.md deleted file mode 100644 index 9bd831b547..0000000000 --- a/src/forms/README.md +++ /dev/null @@ -1,79 +0,0 @@ -**Designed to speedup development of backoffice forms and their maintenance.** The idea is simple: specify what fields do you want to render, fill them however you want (probably from GraphQL via [`useFragment`](https://relay.dev/docs/api-reference/use-fragment/)), let the form collect user inputs and finally map them back to the GraphQL mutation inputs however you want. This gives us flexibility (query and mutations doesn't have to be related or have any special requirements) and clean interface (you only specify what goes in and what goes out). - -**Simple by design.** Do not expect any super advanced things. Simplicity is one of the main distinction from the competitive solutions. You can do advanced things in your code giving you immense flexibility in what's possible. Instead, we focus on a solid base interface that just works. - -**Closely integrated with Relay queries/mutations/fragments.** TKTK - -**Closely integrated with FBT for translations.** TKTK - -**Embracing HTML5 forms.** We are not trying to reinvent a wheel here. The design of these form elements is very similar to how HTML works including commonly known validation attributes. You should be able to prototype the form very quickly if you familiar with HTML forms. Solid Flow types are a big help in case you forget. - -**No magic.** It won't try to create a form based on the GraphQL mutation inputs. It won't automatically fill the default values from your GraphQL query. You are in charge. - ---- - -Example: - -```js -export default function ExampleForm(props) { - const product = useFragment( - graphql` - fragment ExampleFormData on Product { - id, revision, name, price - } - `, - props.product, - ); - - return ( - - Product pictures} - /> - - Product name} - /> - - Product price} - /> - - {/* … */} - - ({ - // map collected form values to GraphQL mutation - productData: { - id: product.id, // values from GraphQL query - revision: product.revision, - name: formValues.name, // values from the form - price: formValues.price, - } - })} - onCompleted={() => { - // See: https://relay.dev/docs/api-reference/use-mutation - }} - > - Save changes - - - ); -} -``` diff --git a/src/forms/jest-setup.js b/src/forms/jest-setup.js deleted file mode 100644 index 5f07b03062..0000000000 --- a/src/forms/jest-setup.js +++ /dev/null @@ -1,4 +0,0 @@ -// @flow - -// eslint-disable-next-line import/no-extraneous-dependencies -import '@testing-library/jest-dom'; diff --git a/src/forms/jest.config.js b/src/forms/jest.config.js deleted file mode 100644 index 5086f1a063..0000000000 --- a/src/forms/jest.config.js +++ /dev/null @@ -1,8 +0,0 @@ -// @flow strict - -const path = require('path'); - -module.exports = { - rootDir: __dirname, - setupFilesAfterEnv: [(path.join(__dirname, 'jest-setup.js') /*: string */)], -}; diff --git a/src/forms/package.json b/src/forms/package.json deleted file mode 100644 index dcc59de6f9..0000000000 --- a/src/forms/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "@adeira/forms", - "description": "TKTK", - "homepage": "https://github.com/adeira/universe", - "bugs": "https://github.com/adeira/universe/issues", - "repository": { - "type": "git", - "url": "git@github.com:adeira/universe.git", - "directory": "src/forms" - }, - "license": "MIT", - "version": "0.4.1", - "main": "./src/index.js", - "type": "commonjs", - "sideEffects": false, - "dependencies": { - "@adeira/js": "^2.1.1", - "@babel/runtime": "^7.26.0", - "fbt": "^1.0.2" - }, - "devDependencies": { - "@fbtjs/default-collection-transform": "^1.0.0", - "@testing-library/jest-dom": "^6.6.3", - "babel-plugin-fbt": "^1.0.0", - "babel-plugin-fbt-runtime": "^1.0.0" - }, - "peerDependencies": { - "@adeira/relay": "^9.0.0", - "@adeira/sx": "^0.30.0", - "@adeira/sx-design": "^0.33.0", - "react": "^18.3.1" - }, - "scripts": { - "fbt:manifest": "fbt-manifest --src=src --src=pages --enum-manifest=translations/enum_manifest.json --src-manifest=translations/src_manifest.json", - "fbt:collect": "fbt-collect --options=__self --pretty --manifest < translations/src_manifest.json > translations/source_strings.json", - "fbt:translate": "fbt-translate --source-strings=translations/source_strings.json --pretty --translations translations/in/*.json --output-dir=translations/out --jenkins", - "fbt": "yarn run fbt:manifest && yarn run fbt:collect && yarn run fbt:translate" - } -} diff --git a/src/forms/src/FormEmail.js b/src/forms/src/FormEmail.js deleted file mode 100644 index 176d55617d..0000000000 --- a/src/forms/src/FormEmail.js +++ /dev/null @@ -1,31 +0,0 @@ -// @flow - -import { type Node } from 'react'; - -import BaseInput from './private/BaseInput'; - -type Props = { - +'label': FbtWithoutString, - +'name': string, - +'value'?: ?string, - +'data-testid'?: string, - +'required'?: boolean, -}; - -/** - * A single-line email field. - * - * See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email - */ -export default function FormEmail(props: Props): Node { - return ( - - ); -} diff --git a/src/forms/src/FormErrorMessages.js b/src/forms/src/FormErrorMessages.js deleted file mode 100644 index 712704c464..0000000000 --- a/src/forms/src/FormErrorMessages.js +++ /dev/null @@ -1,29 +0,0 @@ -// @flow - -import sx from '@adeira/sx'; -import type { Node } from 'react'; - -type Props = { - +errorMessages: $ReadOnlyArray, -}; - -/** - * Use this component to display some generic error messages related to the form as a whole. - */ -export default function FormErrorMessages(props: Props): Node { - return ( -
-
    - {props.errorMessages.map((errorMessage, index) => { - return
  • {errorMessage}
  • ; - })} -
-
- ); -} - -const styles = sx.create({ - wrapper: { - color: 'rgba(var(--sx-error))', - }, -}); diff --git a/src/forms/src/FormMultiSelect.js b/src/forms/src/FormMultiSelect.js deleted file mode 100644 index c09c39a0bc..0000000000 --- a/src/forms/src/FormMultiSelect.js +++ /dev/null @@ -1,32 +0,0 @@ -// @flow - -import { type ChildrenArray, type Element, type Node } from 'react'; - -import FormSelectOption from './FormSelectOption'; -import BaseSelect from './private/BaseSelect'; - -type Props = { - +'label': FbtWithoutString, - +'name': string, - +'size': number, - +'value': $ReadOnlyArray, - +'children': ChildrenArray>, - +'data-testid'?: string, - +'required'?: boolean, -}; - -export default function FormMultiSelect(props: Props): Node { - return ( - - {props.children} - - ); -} diff --git a/src/forms/src/FormMultiUpload.js b/src/forms/src/FormMultiUpload.js deleted file mode 100644 index bb51c90689..0000000000 --- a/src/forms/src/FormMultiUpload.js +++ /dev/null @@ -1,32 +0,0 @@ -// @flow - -import { type Node } from 'react'; - -import BaseInput from './private/BaseInput'; - -type Props = { - +'label': FbtWithoutString, - +'name': string, - +'accept': string, - +'data-testid'?: string, - +'required'?: boolean, -}; - -/** - * A control that lets the user select multiple files. Use the accept attribute to define the types - * of files that the control can select. - * See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file - */ -export default function FormMultiUpload(props: Props): Node { - return ( - - ); -} diff --git a/src/forms/src/FormNumber.js b/src/forms/src/FormNumber.js deleted file mode 100644 index 577c75452f..0000000000 --- a/src/forms/src/FormNumber.js +++ /dev/null @@ -1,37 +0,0 @@ -// @flow - -import { type Node } from 'react'; - -import BaseInput from './private/BaseInput'; - -type Props = { - +'value': number, - +'label': FbtWithoutString, - +'name': string, - +'data-testid'?: string, - +'required'?: boolean, - +'min'?: number, - +'max'?: number, - +'step'?: number | 'any', -}; - -/** - * A control for entering a number. Displays a spinner and adds default validation when supported. - * Displays a numeric keypad in some devices with dynamic keypads. - * See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number - */ -export default function FormNumber(props: Props): Node { - return ( - - ); -} diff --git a/src/forms/src/FormPassword.js b/src/forms/src/FormPassword.js deleted file mode 100644 index ce0c91f332..0000000000 --- a/src/forms/src/FormPassword.js +++ /dev/null @@ -1,27 +0,0 @@ -// @flow - -import { type Node } from 'react'; - -import BaseInput from './private/BaseInput'; - -type Props = { - +'label': FbtWithoutString, - +'name': string, - +'data-testid'?: string, - +'required'?: boolean, -}; - -/** - * See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password - */ -export default function FormPassword(props: Props): Node { - return ( - - ); -} diff --git a/src/forms/src/FormRoot.js b/src/forms/src/FormRoot.js deleted file mode 100644 index f2f803b8a3..0000000000 --- a/src/forms/src/FormRoot.js +++ /dev/null @@ -1,113 +0,0 @@ -// @flow - -import * as React from 'react'; - -import FormEmail from './FormEmail'; -import FormErrorMessages from './FormErrorMessages'; -import FormMultiSelect from './FormMultiSelect'; -import FormMultiUpload from './FormMultiUpload'; -import FormNumber from './FormNumber'; -import FormPassword from './FormPassword'; -import FormRootContext from './FormRootContext'; -import FormSelect from './FormSelect'; -import FormSubmit from './FormSubmit'; -import FormText from './FormText'; -import FormTextArea from './FormTextArea'; - -type Props = { - +children: React.ChildrenArray< - | React.Element<'div'> // allows additional styles inside `FormRoot` - | React.Element - | React.Element - | React.Element - | React.Element - | React.Element - | React.Element - | React.Element - | React.Element - | React.Element - | React.Element, - >, -}; - -export default function FormRoot(props: Props): React.Element<'form'> { - const [contextState, setContextState] = React.useState({ - formFields: {}, - uploadables: {}, - }); - - return ( -
- { - setContextState((prevState) => ({ - ...prevState, - formFields: { - ...prevState.formFields, - [inputName]: { - inputName, - inputValue, - inputRef, - validationError, - validationErrorHidden, - }, - }, - })); - }, - updateFormField: (inputName, inputValue, validationError, validationErrorHidden) => { - setContextState((prevState) => ({ - ...prevState, - formFields: { - ...prevState.formFields, - [inputName]: { - // $FlowFixMe[invalid-computed-prop] since v0.235.1 - ...prevState.formFields[inputName], - inputValue, - validationError, - validationErrorHidden, - }, - }, - })); - }, - unmaskFormFieldErrors: () => { - setContextState((prevState) => { - const formFields: { [empty]: any } = {}; - Object.keys(prevState.formFields).forEach((inputName) => { - formFields[inputName] = { - ...prevState.formFields[inputName], - validationErrorHidden: false, - }; - }); - return { - ...prevState, - formFields, - }; - }); - }, - setUploadables: (uploadables) => { - setContextState((prevState) => { - return { - ...prevState, - uploadables, - }; - }); - }, - }} - > - {props.children} - -
- ); -} diff --git a/src/forms/src/FormRootContext.js b/src/forms/src/FormRootContext.js deleted file mode 100644 index 33ac84b9ae..0000000000 --- a/src/forms/src/FormRootContext.js +++ /dev/null @@ -1,41 +0,0 @@ -// @flow - -import { createContext, type Context } from 'react'; -import type { UploadableMap } from '@adeira/relay'; - -export type FormRootContextType = { - +formFields: { ... }, - +uploadables: UploadableMap, - - // adds new form field to the context - +registerFormField: ( - inputName: string, - inputValue: string, - inputRef: $FlowFixMe, - validationError: FbtWithoutString | null, - validationErrorHidden: boolean, - ) => void, - - // update the registered form field with a new value - +updateFormField: ( - inputName: string, - inputValue: string, - validationError: FbtWithoutString | null, - validationErrorHidden: boolean, - ) => void, - - // unmasks hidden form field errors (they are hidden by default) - +unmaskFormFieldErrors: () => void, - - // set Relay uploadables to be later used in mutations - +setUploadables: ($FlowFixMe) => void, -}; - -export default (createContext({ - formFields: {}, - uploadables: {}, - registerFormField: () => {}, - updateFormField: () => {}, - unmaskFormFieldErrors: () => {}, - setUploadables: () => {}, -}): Context); diff --git a/src/forms/src/FormSelect.js b/src/forms/src/FormSelect.js deleted file mode 100644 index 4be82a368b..0000000000 --- a/src/forms/src/FormSelect.js +++ /dev/null @@ -1,37 +0,0 @@ -// @flow - -import { fbt } from 'fbt'; -import React, { type ChildrenArray, type Element, type Node } from 'react'; - -import FormSelectOption from './FormSelectOption'; -import BaseSelect from './private/BaseSelect'; - -type Props = { - +'label': FbtWithoutString, - +'name': string, - +'value': - | null // for empty select (" -- ") - | string, - +'children': ChildrenArray>, - +'required'?: boolean, - +'data-testid'?: string, -}; - -export default function FormSelect(props: Props): Node { - return ( - - - - -- - - - {props.children} - - ); -} diff --git a/src/forms/src/FormSelectOption.js b/src/forms/src/FormSelectOption.js deleted file mode 100644 index 8c39ebfb30..0000000000 --- a/src/forms/src/FormSelectOption.js +++ /dev/null @@ -1,19 +0,0 @@ -// @flow - -import { type Node } from 'react'; - -type Props = { - +'value': - | null // empty - | string, - +'children': FbtWithoutString, - +'data-testid'?: string, -}; - -export default function FormSelectOption(props: Props): Node { - return ( - - ); -} diff --git a/src/forms/src/FormSubmit.js b/src/forms/src/FormSubmit.js deleted file mode 100644 index e6e4e5d25e..0000000000 --- a/src/forms/src/FormSubmit.js +++ /dev/null @@ -1,85 +0,0 @@ -// @flow - -import { useMutation, type Variables } from '@adeira/relay'; -import { fbs } from 'fbt'; -import { type Node, useContext } from 'react'; -import { Button, useFlashMessages, FlashMessageTint } from '@adeira/sx-design'; - -import FormRootContext from './FormRootContext'; - -type Props = { - +children: FbtWithoutString, - +mutation: $FlowFixMe, - +variables: ($FlowFixMe) => Variables, - +onCompleted: (response: $FlowFixMe) => void, -}; - -/** - * This is where all the form submit logic happens. The following steps are being performed: - * - * 1. we display all error messages if any (might be still hidden) and block the submission - * 2. we collect all the values and convert them to mutation variables if everything is OK - * 3. call the mutation - */ -export default function FormSubmit(props: Props): Node { - const formRootContext = useContext(FormRootContext); - const [displayFleshMessage] = useFlashMessages(); - - const [runMutation, isMutationInProgress] = useMutation(props.mutation); - - const handleButtonClick = (event: SyntheticEvent) => { - event.preventDefault(); - - formRootContext.unmaskFormFieldErrors(); - - let hasErrors = false; - const formValues = {}; - Object.keys(formRootContext.formFields).forEach((formFieldInputName) => { - const { inputName, inputValue, validationError } = - formRootContext.formFields[formFieldInputName]; - formValues[inputName] = inputValue; - if (validationError != null) { - hasErrors = true; - } - }); - - if (hasErrors === true) { - return; - } - - // Convert form values to GraphQL mutation variables: - const variables = props.variables(formValues); - - // Run the mutation: - const mutationConfig = { - uploadables: undefined, - variables, - onCompleted: props.onCompleted, - onError: () => { - displayFleshMessage( - fbs( - 'Something unexpected happened and server could not process the request!', - 'generic failure message after submitting a form', - ), - { tint: FlashMessageTint.Error }, - ); - }, - }; - - const uploadables = formRootContext.uploadables; - if (uploadables != null) { - /* $FlowFixMe[incompatible-type] This comment suppresses an error when - * upgrading Flow to version 0.197.0 and enabling LTI. To see the error - * delete this comment and run Flow. */ - mutationConfig.uploadables = uploadables; - } - - runMutation(mutationConfig); - }; - - return ( - - ); -} diff --git a/src/forms/src/FormText.js b/src/forms/src/FormText.js deleted file mode 100644 index 64647f8055..0000000000 --- a/src/forms/src/FormText.js +++ /dev/null @@ -1,30 +0,0 @@ -// @flow - -import { type Node } from 'react'; - -import BaseInput from './private/BaseInput'; - -type Props = { - +'label': FbtWithoutString, - +'name': string, - +'value'?: ?string, - +'data-testid'?: string, - +'required'?: boolean, -}; - -/** - * A single-line text field. Line-breaks are automatically removed from the input value. - * See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/text - */ -export default function FormText(props: Props): Node { - return ( - - ); -} diff --git a/src/forms/src/FormTextArea.js b/src/forms/src/FormTextArea.js deleted file mode 100644 index 26859f962f..0000000000 --- a/src/forms/src/FormTextArea.js +++ /dev/null @@ -1,30 +0,0 @@ -// @flow - -import { type Node } from 'react'; - -import BaseTextArea from './private/BaseTextArea'; - -type Props = { - +'value': ?string, - +'label': FbtWithoutString, - +'name': string, - +'data-testid'?: string, - +'required'?: boolean, -}; - -/** - * A multi-line plain-text editing control, useful when you want to allow users to enter a sizeable - * amount of free-form text, for example a comment on a review or feedback form. - * See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea - */ -export default function FormTextArea(props: Props): Node { - return ( - - ); -} diff --git a/src/forms/src/__tests__/FormEmail.test.js b/src/forms/src/__tests__/FormEmail.test.js deleted file mode 100644 index eef4c35178..0000000000 --- a/src/forms/src/__tests__/FormEmail.test.js +++ /dev/null @@ -1,77 +0,0 @@ -/** - * @flow - * @jest-environment jsdom - */ - -import * as React from 'react'; -import fbt from 'fbt'; - -import FormEmail from '../FormEmail'; -import { customRender, getAllAttributes, initFbt } from '../private/testUtils'; - -beforeEach(() => { - initFbt(); -}); - -it('renders basic "FormEmail" input as expected', () => { - // This test should be using only the necessary fields. - - const { getByTestId } = customRender( - - email label - - } - />, - ); - - expect(getByTestId('email-input').nodeName.toLowerCase()).toBe('input'); - expect(getAllAttributes(getByTestId('email-input'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "class": Any, - "data-testid": "email-input", - "name": "email-input-name", - "type": "email", - "value": "", - } - `, - ); -}); - -it('renders complex "FormEmail" input as expected', () => { - // This test should be using as many fields as possible. - - const { getByTestId } = customRender( - - email label - - } - />, - ); - - expect(getByTestId('email-input').nodeName.toLowerCase()).toBe('input'); - expect(getAllAttributes(getByTestId('email-input'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "class": Any, - "data-testid": "email-input", - "name": "email-input-name", - "required": "", - "type": "email", - "value": "email value", - } - `, - ); -}); diff --git a/src/forms/src/__tests__/FormMultiSelect.test.js b/src/forms/src/__tests__/FormMultiSelect.test.js deleted file mode 100644 index 18637728f8..0000000000 --- a/src/forms/src/__tests__/FormMultiSelect.test.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @flow - * @jest-environment jsdom - */ - -import * as React from 'react'; -import fbt from 'fbt'; - -import FormMultiSelect from '../FormMultiSelect'; -import FormSelectOption from '../FormSelectOption'; -import { customRender, getAllAttributes, initFbt } from '../private/testUtils'; - -beforeEach(() => { - initFbt(); -}); - -it('renders basic "FormMultiSelect" input as expected', () => { - const { getByTestId } = customRender( - - multi upload label - - } - > - - - Point of sales - - - - - Terminal punto de venta - - - , - ); - - expect(getByTestId('multi-select').nodeName.toLowerCase()).toBe('select'); - expect(getAllAttributes(getByTestId('multi-select'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "class": Any, - "data-testid": "multi-select", - "multiple": "", - "size": "3", - } - `, - ); - expect(getByTestId('multi-select-option-pov')).toBeInTheDocument(); - expect(getByTestId('multi-select-option-tpv')).toBeInTheDocument(); -}); diff --git a/src/forms/src/__tests__/FormMultiUpload.test.js b/src/forms/src/__tests__/FormMultiUpload.test.js deleted file mode 100644 index b04dc922bd..0000000000 --- a/src/forms/src/__tests__/FormMultiUpload.test.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @flow - * @jest-environment jsdom - */ - -import * as React from 'react'; -import fbt from 'fbt'; - -import FormMultiUpload from '../FormMultiUpload'; -import { customRender, getAllAttributes, initFbt } from '../private/testUtils'; - -beforeEach(() => { - initFbt(); -}); - -it('renders basic "FormMultiUpload" input as expected', () => { - const { getByTestId } = customRender( - - file label - - } - />, - ); - - expect(getByTestId('file-input').nodeName.toLowerCase()).toBe('input'); - expect(getAllAttributes(getByTestId('file-input'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "accept": "image/jpeg,image/png", - "class": Any, - "data-testid": "file-input", - "multiple": "", - "name": "file-input-name", - "type": "file", - } - `, - ); -}); diff --git a/src/forms/src/__tests__/FormNumber.test.js b/src/forms/src/__tests__/FormNumber.test.js deleted file mode 100644 index 93fc124d6a..0000000000 --- a/src/forms/src/__tests__/FormNumber.test.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * @flow - * @jest-environment jsdom - */ - -import * as React from 'react'; -import fbt from 'fbt'; - -import FormNumber from '../FormNumber'; -import { customRender, getAllAttributes, initFbt } from '../private/testUtils'; - -beforeEach(() => { - initFbt(); -}); - -it('renders basic "FormNumber" input as expected', () => { - const { getByTestId } = customRender( - - number label - - } - />, - ); - - expect(getByTestId('number-input').nodeName.toLowerCase()).toBe('input'); - expect(getAllAttributes(getByTestId('number-input'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "class": Any, - "data-testid": "number-input", - "name": "number-input-name", - "step": "any", - "type": "number", - "value": "-1", - } - `, - ); -}); - -it('renders complex "FormNumber" input as expected', () => { - const { getByTestId } = customRender( - - number label - - } - />, - ); - - expect(getByTestId('number-input').nodeName.toLowerCase()).toBe('input'); - expect(getAllAttributes(getByTestId('number-input'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "class": Any, - "data-testid": "number-input", - "max": "10", - "min": "-10", - "name": "number-input-name", - "required": "", - "step": "5", - "type": "number", - "value": "-1", - } - `, - ); -}); diff --git a/src/forms/src/__tests__/FormPassword.test.js b/src/forms/src/__tests__/FormPassword.test.js deleted file mode 100644 index 576aff5527..0000000000 --- a/src/forms/src/__tests__/FormPassword.test.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @flow - * @jest-environment jsdom - */ - -import * as React from 'react'; -import fbt from 'fbt'; - -import FormPassword from '../FormPassword'; -import { customRender, getAllAttributes, initFbt } from '../private/testUtils'; - -beforeEach(() => { - initFbt(); -}); - -it('renders basic "FormPassword" input as expected', () => { - const { getByTestId } = customRender( - - password label - - } - />, - ); - - expect(getByTestId('password-input').nodeName.toLowerCase()).toBe('input'); - expect(getAllAttributes(getByTestId('password-input'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "class": Any, - "data-testid": "password-input", - "name": "password-input-name", - "type": "password", - "value": "", - } - `, - ); -}); - -it('renders complex "FormPassword" input as expected', () => { - const { getByTestId } = customRender( - - password label - - } - />, - ); - - expect(getByTestId('password-input').nodeName.toLowerCase()).toBe('input'); - expect(getAllAttributes(getByTestId('password-input'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "class": Any, - "data-testid": "password-input", - "name": "password-input-name", - "required": "", - "type": "password", - "value": "", - } - `, - ); -}); diff --git a/src/forms/src/__tests__/FormSelect.test.js b/src/forms/src/__tests__/FormSelect.test.js deleted file mode 100644 index fb7c1fc3f8..0000000000 --- a/src/forms/src/__tests__/FormSelect.test.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @flow - * @jest-environment jsdom - */ - -import * as React from 'react'; -import fbt from 'fbt'; - -import FormSelect from '../FormSelect'; -import FormSelectOption from '../FormSelectOption'; -import { customRender, getAllAttributes, initFbt } from '../private/testUtils'; - -beforeEach(() => { - initFbt(); -}); - -it('renders basic "FormSelect" input as expected', () => { - const { getByTestId, getByText } = customRender( - - normal upload label - - } - > - - - Point of sales - - - - - Terminal punto de venta - - - , - ); - - expect(getByTestId('normal-select').nodeName.toLowerCase()).toBe('select'); - expect(getAllAttributes(getByTestId('normal-select'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "class": Any, - "data-testid": "normal-select", - } - `, - ); - - expect(getByText('Point of sales')).toBeInTheDocument(); - expect(getByText('Terminal punto de venta')).toBeInTheDocument(); - - expect(getByText('--')).toBeInTheDocument(); // empty option - expect(getAllAttributes(getByText('--'))).toStrictEqual({ - value: '', - }); -}); diff --git a/src/forms/src/__tests__/FormText.test.js b/src/forms/src/__tests__/FormText.test.js deleted file mode 100644 index 1eee96b134..0000000000 --- a/src/forms/src/__tests__/FormText.test.js +++ /dev/null @@ -1,77 +0,0 @@ -/** - * @flow - * @jest-environment jsdom - */ - -import * as React from 'react'; -import fbt from 'fbt'; - -import FormText from '../FormText'; -import { customRender, getAllAttributes, initFbt } from '../private/testUtils'; - -beforeEach(() => { - initFbt(); -}); - -it('renders basic "FormText" input as expected', () => { - // This test should be using only the necessary fields. - - const { getByTestId } = customRender( - - text label - - } - />, - ); - - expect(getByTestId('text-input').nodeName.toLowerCase()).toBe('input'); - expect(getAllAttributes(getByTestId('text-input'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "class": Any, - "data-testid": "text-input", - "name": "text-input-name", - "type": "text", - "value": "", - } - `, - ); -}); - -it('renders complex "FormText" input as expected', () => { - // This test should be using as many fields as possible. - - const { getByTestId } = customRender( - - text label - - } - />, - ); - - expect(getByTestId('text-input').nodeName.toLowerCase()).toBe('input'); - expect(getAllAttributes(getByTestId('text-input'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "class": Any, - "data-testid": "text-input", - "name": "text-input-name", - "required": "", - "type": "text", - "value": "text value", - } - `, - ); -}); diff --git a/src/forms/src/__tests__/FormTextArea.test.js b/src/forms/src/__tests__/FormTextArea.test.js deleted file mode 100644 index ebacab07b5..0000000000 --- a/src/forms/src/__tests__/FormTextArea.test.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @flow - * @jest-environment jsdom - */ - -import * as React from 'react'; -import fbt from 'fbt'; - -import FormTextArea from '../FormTextArea'; -import { customRender, getAllAttributes, initFbt } from '../private/testUtils'; - -beforeEach(() => { - initFbt(); -}); - -it('renders basic "FormTextArea" input as expected', () => { - const { getByTestId } = customRender( - - text area label - - } - />, - ); - - expect(getByTestId('text-area-input').nodeName.toLowerCase()).toBe('textarea'); - expect(getAllAttributes(getByTestId('text-area-input'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "class": Any, - "data-testid": "text-area-input", - "name": "text-area-input-name", - "rows": "5", - } - `, - ); -}); - -it('renders complex "FormTextArea" input as expected', () => { - const { getByTestId } = customRender( - - text area label - - } - />, - ); - - expect(getByTestId('text-area-input').nodeName.toLowerCase()).toBe('textarea'); - expect(getAllAttributes(getByTestId('text-area-input'))).toMatchInlineSnapshot( - { class: expect.any(String) }, - ` - { - "class": Any, - "data-testid": "text-area-input", - "name": "text-area-input-name", - "required": "", - "rows": "5", - } - `, - ); -}); diff --git a/src/forms/src/index.js b/src/forms/src/index.js deleted file mode 100644 index c8a91832d9..0000000000 --- a/src/forms/src/index.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -export { default as FormEmail } from './FormEmail'; -export { default as FormErrorMessages } from './FormErrorMessages'; -export { default as FormMultiSelect } from './FormMultiSelect'; -export { default as FormSelectOption } from './FormSelectOption'; -export { default as FormMultiUpload } from './FormMultiUpload'; -export { default as FormNumber } from './FormNumber'; -export { default as FormPassword } from './FormPassword'; -export { default as FormRoot } from './FormRoot'; -export { default as FormSelect } from './FormSelect'; -export { default as FormSubmit } from './FormSubmit'; -export { default as FormText } from './FormText'; -export { default as FormTextArea } from './FormTextArea'; diff --git a/src/forms/src/private/BaseInput.js b/src/forms/src/private/BaseInput.js deleted file mode 100644 index a231f60472..0000000000 --- a/src/forms/src/private/BaseInput.js +++ /dev/null @@ -1,130 +0,0 @@ -// @flow - -import sx from '@adeira/sx'; -import { useRef, type Node, useContext } from 'react'; - -import BaseInputWrapper from './BaseInputWrapper'; -import FormRootContext from '../FormRootContext'; -import useFormFieldState from './useFormFieldState'; - -type PropsBase = { - +'label': FbtWithoutString, - +'name': string, - +'data-testid'?: string, - +'required'?: boolean, -}; - -// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/text -type PropsText = $ReadOnly<{ - ...PropsBase, - +type: 'text', - +value: string, -}>; - -// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email -type PropsEmail = $ReadOnly<{ - ...PropsBase, - +type: 'email', - +value: string, -}>; - -// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password -type PropsPassword = $ReadOnly<{ - ...PropsBase, - +type: 'password', -}>; - -// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number -type PropsNumber = $ReadOnly<{ - ...PropsBase, - +type: 'number', - +value: number, - +min?: number, - +max?: number, - +step?: number | 'any', -}>; - -// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file -type PropsFile = $ReadOnly<{ - ...PropsBase, - +type: 'file', - +multiple: boolean, - +accept: string, -}>; - -type Props = PropsText | PropsEmail | PropsPassword | PropsNumber | PropsFile; - -/** - * This is a generic input component with very wide API (similar to https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input). - * It's not recommended to use this component directly. Instead, use `FormText`, `FormNumber`, … - */ -export default function BaseInput(props: $ReadOnly): Node { - const inputRef = useRef<$FlowFixMe>(null); - const formRootContext = useContext(FormRootContext); - const [inputValue, updateInputValue, inputErrors] = useFormFieldState( - inputRef, - props.name, - props.type === 'file' ? [] : props.value, - props.label, - ); - - const handleOnChange = (event: SyntheticEvent) => { - if (props.type === 'file') { - formRootContext.setUploadables(event.currentTarget.files); - } - - updateInputValue( - inputRef, - props.type === 'file' - ? Array.from(event.currentTarget.files ?? []).map((file) => file.name) - : event.currentTarget.value, - ); - }; - - const hasError = - inputErrors.validationError != null && inputErrors.validationErrorHidden === false; - - // eslint-disable-next-line prefer-object-spread - const extraConditionalProps = Object.assign( - ({}: $FlowFixMe), - props.type === 'number' ? { min: props.min, max: props.max, step: props.step } : {}, - props.type === 'file' - ? { accept: props.accept, multiple: props.multiple } - : { value: inputValue }, - ); - - return ( - - - - ); -} - -const styles = sx.create({ - input: { - width: '100%', - border: '2px solid rgba(var(--sx-accent-2))', - borderRadius: 5, - padding: '8px 12px', - }, - inputError: { - border: '2px solid rgba(var(--sx-error))', - }, -}); diff --git a/src/forms/src/private/BaseInputWrapper.js b/src/forms/src/private/BaseInputWrapper.js deleted file mode 100644 index a1cc616e2e..0000000000 --- a/src/forms/src/private/BaseInputWrapper.js +++ /dev/null @@ -1,78 +0,0 @@ -// @flow - -import { type Node } from 'react'; -import sx from '@adeira/sx'; -import { fbt } from 'fbt'; - -type Props = { - +label: FbtWithoutString, - +hasValidationError: boolean, - +validationError: FbtWithoutString | null, - +children: Node, - +required?: boolean, - - // Removes semantic `