@adobe-commerce/elsie 2.0.0 → 2.0.1-alpha-20260728135101
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.elsie.js +3 -3
- package/CHANGELOG.md +385 -112
- package/LICENSE.md +257 -157
- package/README.md +4 -2
- package/__mocks__/svg.js +3 -3
- package/bin/builders/build/index.js +2 -1
- package/bin/builders/changeset/index.js +1 -1
- package/bin/builders/concurrently/index.js +1 -1
- package/bin/builders/generate/api/index.js +7 -7
- package/bin/builders/generate/component/index.js +8 -8
- package/bin/builders/generate/config/index.js +5 -5
- package/bin/builders/generate/config/templates/elsie.js +1 -1
- package/bin/builders/generate/container/index.js +7 -7
- package/bin/builders/generate/index.js +36 -36
- package/bin/builders/gql/index.js +28 -28
- package/bin/builders/gql/validate.js +116 -105
- package/bin/builders/lint/index.js +1 -1
- package/bin/builders/serve/index.js +1 -1
- package/bin/builders/storybook/index.js +9 -1
- package/bin/builders/types/index.js +1 -2
- package/bin/builders/types/validate-tsconfig.js +5 -5
- package/bin/index.js +12 -6
- package/bin/lib/cli.js +9 -8
- package/bin/lib/resolve-bin.js +9 -0
- package/bin/lib/validate-typeof.js +3 -3
- package/bin/lib/write-file.js +3 -3
- package/bin/lib/write-parent-index.js +4 -4
- package/config/eslint.mjs +2 -1
- package/config/jest.mjs +7 -2
- package/config/plugins/dts-normalize-relative-replacer.cjs +1 -1
- package/config/plugins/dts.mjs +4 -3
- package/config/prettier.json +25 -3
- package/config/setEnvVars.mjs +2 -2
- package/config/storybook/addon.js +5 -5
- package/config/storybook/components/FileTree/FileTree.jsx +4 -4
- package/config/storybook/components/FileTree/index.js +4 -4
- package/config/storybook/components/Flex/Flex.jsx +3 -3
- package/config/storybook/components/Flex/index.js +3 -3
- package/config/storybook/components/OptionsTable/OptionsTable.jsx +3 -3
- package/config/storybook/components/OptionsTable/index.js +4 -4
- package/config/storybook/components/Panel/Panel.tsx +7 -7
- package/config/storybook/components/Panel/index.ts +3 -3
- package/config/storybook/components/Screenshot/Screenshot.jsx +3 -3
- package/config/storybook/components/Screenshot/index.js +4 -4
- package/config/storybook/components/Steps/Steps.jsx +3 -3
- package/config/storybook/components/Steps/index.js +4 -4
- package/config/storybook/components/StoryWrapper/StoryWrapper.jsx +3 -3
- package/config/storybook/components/StoryWrapper/index.js +3 -3
- package/config/storybook/components/Summary/Summary.jsx +3 -3
- package/config/storybook/components/Summary/index.js +3 -3
- package/config/storybook/components/Variants/Variants.jsx +11 -7
- package/config/storybook/components/Variants/index.js +3 -3
- package/config/storybook/manager.js +3 -3
- package/config/storybook/preview.jsx +3 -3
- package/config/storybook/theming/fonts.css +12 -4
- package/config/storybook/theming/preview.css +3 -1
- package/config/storybook/theming/theme.js +3 -3
- package/config/vite.mjs +53 -26
- package/package.json +36 -34
- package/src/components/Accordion/Accordion.css +1 -1
- package/src/components/Accordion/Accordion.stories.tsx +18 -18
- package/src/components/Accordion/Accordion.tsx +12 -8
- package/src/components/Accordion/index.ts +3 -3
- package/src/components/ActionButton/ActionButton.stories.tsx +8 -8
- package/src/components/ActionButton/ActionButton.tsx +7 -5
- package/src/components/ActionButton/index.ts +3 -3
- package/src/components/ActionButtonGroup/ActionButtonGroup.stories.tsx +3 -3
- package/src/components/ActionButtonGroup/ActionButtonGroup.tsx +2 -2
- package/src/components/ActionButtonGroup/index.ts +3 -3
- package/src/components/AlertBanner/AlertBanner.stories.tsx +6 -6
- package/src/components/AlertBanner/AlertBanner.tsx +12 -10
- package/src/components/AlertBanner/index.ts +3 -3
- package/src/components/Breadcrumbs/Breadcrumbs.stories.tsx +14 -14
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +3 -3
- package/src/components/Breadcrumbs/index.ts +3 -3
- package/src/components/Button/Button.mdx +24 -11
- package/src/components/Button/Button.stories.tsx +6 -6
- package/src/components/Button/Button.tsx +7 -8
- package/src/components/Button/index.ts +3 -3
- package/src/components/Card/Card.stories.tsx +6 -6
- package/src/components/Card/Card.tsx +3 -3
- package/src/components/Card/index.ts +3 -3
- package/src/components/CartItem/CartItem.stories.tsx +12 -12
- package/src/components/CartItem/CartItem.tsx +4 -2
- package/src/components/CartItem/CartItemSkeleton.tsx +3 -3
- package/src/components/CartItem/index.ts +3 -3
- package/src/components/CartList/CartList.tsx +3 -3
- package/src/components/CartList/index.ts +3 -3
- package/src/components/Checkbox/Checkbox.stories.tsx +17 -14
- package/src/components/Checkbox/Checkbox.tsx +8 -6
- package/src/components/Checkbox/index.ts +3 -3
- package/src/components/ColorSwatch/ColorSwatch.css +8 -4
- package/src/components/ColorSwatch/ColorSwatch.stories.tsx +6 -6
- package/src/components/ColorSwatch/ColorSwatch.tsx +8 -6
- package/src/components/ColorSwatch/index.ts +3 -3
- package/src/components/ContentGrid/ContentGrid.css +15 -15
- package/src/components/ContentGrid/ContentGrid.stories.tsx +4 -4
- package/src/components/ContentGrid/ContentGrid.tsx +3 -3
- package/src/components/ContentGrid/index.ts +3 -3
- package/src/components/Divider/Divider.stories.tsx +7 -4
- package/src/components/Divider/Divider.tsx +3 -3
- package/src/components/Divider/index.ts +4 -4
- package/src/components/Field/Field.stories.tsx +7 -7
- package/src/components/Field/Field.tsx +4 -2
- package/src/components/Field/index.ts +3 -3
- package/src/components/Header/Header.stories.tsx +9 -10
- package/src/components/Header/Header.tsx +11 -7
- package/src/components/Header/index.ts +3 -3
- package/src/components/Icon/Icon.stories.helpers.jsx +4 -4
- package/src/components/Icon/Icon.stories.tsx +74 -60
- package/src/components/Icon/Icon.tsx +77 -44
- package/src/components/Icon/index.ts +3 -3
- package/src/components/IllustratedMessage/IllustratedMessage.stories.tsx +8 -8
- package/src/components/IllustratedMessage/IllustratedMessage.tsx +7 -5
- package/src/components/IllustratedMessage/index.ts +3 -3
- package/src/components/Image/Image.stories.tsx +3 -3
- package/src/components/Image/Image.tsx +4 -4
- package/src/components/Image/index.ts +3 -3
- package/src/components/ImageSwatch/ImageSwatch.css +8 -4
- package/src/components/ImageSwatch/ImageSwatch.stories.tsx +10 -10
- package/src/components/ImageSwatch/ImageSwatch.tsx +25 -23
- package/src/components/ImageSwatch/index.ts +3 -3
- package/src/components/InLineAlert/InLineAlert.stories.tsx +12 -7
- package/src/components/InLineAlert/InLineAlert.tsx +4 -2
- package/src/components/InLineAlert/index.ts +3 -3
- package/src/components/Incrementer/Incrementer.stories.tsx +9 -9
- package/src/components/Incrementer/Incrementer.tsx +75 -37
- package/src/components/Incrementer/index.ts +3 -3
- package/src/components/Input/Input.css +4 -1
- package/src/components/Input/Input.stories.tsx +5 -5
- package/src/components/Input/Input.tsx +5 -3
- package/src/components/Input/index.ts +3 -3
- package/src/components/InputDate/InputDate.tsx +3 -3
- package/src/components/InputDate/index.ts +3 -3
- package/src/components/InputFile/InputFile.css +16 -16
- package/src/components/InputFile/InputFile.stories.tsx +21 -16
- package/src/components/InputFile/InputFile.tsx +8 -6
- package/src/components/InputFile/index.ts +5 -5
- package/src/components/InputPassword/InputPassword.stories.tsx +4 -4
- package/src/components/InputPassword/InputPassword.tsx +5 -4
- package/src/components/InputPassword/PasswordStatusIndicator/PasswordStatusIndicator.tsx +1 -1
- package/src/components/InputPassword/PasswordStatusIndicator/index.ts +3 -3
- package/src/components/InputPassword/index.ts +3 -3
- package/src/components/Modal/Modal.stories.tsx +27 -16
- package/src/components/Modal/Modal.tsx +10 -11
- package/src/components/Modal/index.ts +3 -3
- package/src/components/MultiSelect/MultiSelect.stories.tsx +15 -15
- package/src/components/MultiSelect/MultiSelect.tsx +15 -15
- package/src/components/Pagination/Pagination.css +1 -1
- package/src/components/Pagination/Pagination.stories.tsx +0 -1
- package/src/components/Pagination/Pagination.tsx +17 -12
- package/src/components/Pagination/PaginationButton.tsx +2 -3
- package/src/components/Pagination/index.ts +3 -3
- package/src/components/Picker/Picker.css +3 -1
- package/src/components/Picker/Picker.stories.tsx +1 -1
- package/src/components/Picker/Picker.tsx +8 -6
- package/src/components/Picker/index.ts +3 -3
- package/src/components/Portal/Portal.stories.tsx +50 -44
- package/src/components/Portal/Portal.tsx +4 -4
- package/src/components/Price/Price.stories.tsx +3 -3
- package/src/components/Price/Price.tsx +4 -2
- package/src/components/Price/index.ts +3 -3
- package/src/components/PriceRange/PriceRange.stories.tsx +3 -3
- package/src/components/PriceRange/PriceRange.tsx +8 -6
- package/src/components/PriceRange/index.ts +3 -3
- package/src/components/ProductItemCard/ProductItemCard.tsx +4 -2
- package/src/components/ProductItemCard/ProductItemCardSkeleton.tsx +16 -16
- package/src/components/ProductItemCard/index.ts +4 -4
- package/src/components/ProgressSpinner/ProgressSpinner.stories.tsx +8 -8
- package/src/components/ProgressSpinner/ProgressSpinner.tsx +7 -5
- package/src/components/ProgressSpinner/index.ts +3 -3
- package/src/components/RadioButton/RadioButton.stories.tsx +1 -1
- package/src/components/RadioButton/RadioButton.tsx +4 -2
- package/src/components/Skeleton/Skeleton.stories.tsx +4 -4
- package/src/components/Skeleton/Skeleton.tsx +11 -7
- package/src/components/Skeleton/index.ts +3 -3
- package/src/components/Table/Table.css +106 -99
- package/src/components/Table/Table.stories.tsx +404 -227
- package/src/components/Table/Table.tsx +11 -7
- package/src/components/Table/index.ts +4 -4
- package/src/components/Tag/Tag.stories.tsx +6 -6
- package/src/components/Tag/Tag.tsx +7 -5
- package/src/components/Tag/index.ts +3 -3
- package/src/components/TextArea/TextArea.css +3 -1
- package/src/components/TextArea/TextArea.stories.tsx +9 -6
- package/src/components/TextArea/TextArea.tsx +3 -3
- package/src/components/TextArea/index.ts +3 -3
- package/src/components/TextSwatch/TextSwatch.css +4 -2
- package/src/components/TextSwatch/TextSwatch.stories.tsx +8 -8
- package/src/components/TextSwatch/TextSwatch.tsx +12 -7
- package/src/components/TextSwatch/index.ts +3 -3
- package/src/components/ToggleButton/ToggleButton.css +6 -2
- package/src/components/ToggleButton/ToggleButton.stories.tsx +10 -6
- package/src/components/ToggleButton/ToggleButton.tsx +8 -3
- package/src/components/ToggleButton/index.ts +3 -3
- package/src/components/UIProvider/UIProvider.css +3 -2
- package/src/components/UIProvider/UIProvider.tsx +11 -7
- package/src/components/UIProvider/debugger.css +5 -6
- package/src/components/UIProvider/index.ts +3 -3
- package/src/docs/API/event-bus.mdx +64 -37
- package/src/docs/API/graphql.mdx +69 -36
- package/src/docs/API/initializer.mdx +58 -35
- package/src/docs/API/render.mdx +45 -32
- package/src/docs/Design/colors.mdx +10 -12
- package/src/docs/Design/grid.mdx +41 -14
- package/src/docs/Design/overview.mdx +20 -4
- package/src/docs/Design/shapes.mdx +8 -7
- package/src/docs/Design/spacing.mdx +3 -1
- package/src/docs/Design/typography.mdx +3 -2
- package/src/docs/Utilities/VComponent.mdx +27 -10
- package/src/docs/Utilities/classList.mdx +7 -5
- package/src/docs/Utilities/debounce.mdx +6 -7
- package/src/docs/Utilities/getCookie.mdx +1 -2
- package/src/docs/Utilities/getFormErrors.mdx +1 -2
- package/src/docs/Utilities/getFormValues.mdx +1 -2
- package/src/docs/Utilities/getPathValue.mdx +2 -4
- package/src/docs/Utilities/links.mdx +16 -7
- package/src/docs/cli-usage.mdx +8 -3
- package/src/docs/components/overview.mdx +14 -4
- package/src/docs/quick-start.mdx +69 -22
- package/src/docs/slots.mdx +74 -37
- package/src/docs/welcome.mdx +13 -4
- package/src/i18n/index.ts +3 -3
- package/src/lib/aem/assets.ts +9 -9
- package/src/lib/aem/configs.ts +16 -8
- package/src/lib/classes.ts +4 -4
- package/src/lib/config.ts +3 -3
- package/src/lib/debounce.ts +3 -3
- package/src/lib/deepmerge.ts +6 -13
- package/src/lib/deviceUtils.ts +3 -3
- package/src/lib/form-values.ts +3 -3
- package/src/lib/get-price-formatter.ts +8 -3
- package/src/lib/i18n.ts +3 -3
- package/src/lib/image-params-keymap.ts +4 -5
- package/src/lib/initializer.ts +11 -12
- package/src/lib/is-number.ts +3 -3
- package/src/lib/locale-config.ts +4 -4
- package/src/lib/render.tsx +14 -8
- package/src/lib/resolve-image.ts +19 -16
- package/src/lib/signals.ts +4 -4
- package/src/lib/slot.tsx +34 -27
- package/src/lib/tests.tsx +6 -8
- package/src/lib/types.ts +3 -3
- package/src/lib/vcomponent.tsx +3 -3
- package/src/shims/importmap.js +3107 -20
- package/static/assets/images/index.ts +3 -3
- package/storybook-stories.js +3 -3
- package/tests/__mocks__/browserMocks.ts +3 -3
- package/tests/__mocks__/fileMocks.ts +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,59 +1,108 @@
|
|
|
1
1
|
# @adobe-commerce/elsie
|
|
2
2
|
|
|
3
|
+
## 2.0.1-alpha-20260728135101
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7e84f40: chore: migrate build tooling from Yarn to pnpm
|
|
8
|
+
|
|
9
|
+
The monorepo now uses pnpm instead of Yarn v1. As part of this, elsie's CLI
|
|
10
|
+
(`lint`/`test`/`storybook`/`changeset`/`types`) no longer shells out to bare
|
|
11
|
+
command names — each tool is resolved and spawned directly, fixing a latent
|
|
12
|
+
path-with-spaces bug and command-injection surface.
|
|
13
|
+
|
|
14
|
+
- a920177: fix(Incrementer): prevent quantity input flicker during in-progress
|
|
15
|
+
typing, and prevent double onValue call when debounce fires before blur
|
|
16
|
+
|
|
3
17
|
## 2.0.0
|
|
4
18
|
|
|
5
19
|
### Major Changes
|
|
6
20
|
|
|
7
21
|
- ea02d5f: Upgrade Jest to 30.4.2 and Storybook to 10.4.0
|
|
8
22
|
|
|
9
|
-
Updated testing and component development tools to latest stable versions.
|
|
23
|
+
Updated testing and component development tools to latest stable versions.
|
|
24
|
+
Jest 30.4.2 provides enhanced snapshot handling and improved test performance.
|
|
25
|
+
Storybook 10.4.0 includes updated addon ecosystem, improved Preact Vite
|
|
26
|
+
integration, and enhanced accessibility features with addon-a11y and
|
|
27
|
+
addon-coverage support.
|
|
10
28
|
|
|
11
29
|
- 9cd299b: Upgrade TypeScript to 6.0 and ESLint to 9 (flat config)
|
|
12
30
|
|
|
13
31
|
## What changed
|
|
14
32
|
|
|
15
33
|
### TypeScript 4.7 → 6.0
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- `
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- `
|
|
34
|
+
- `tsconfig-base.json` updated with correct TS 6 defaults. Two new-default
|
|
35
|
+
opt-outs are deferred as tech debt: `exactOptionalPropertyTypes` and
|
|
36
|
+
`verbatimModuleSyntax`.
|
|
37
|
+
- `moduleResolution` changed from `"nodenext"` to `"bundler"` across all
|
|
38
|
+
packages — the correct pairing for `module: "esnext"` in a Vite monorepo.
|
|
39
|
+
Only `packages/elsie` keeps `"NodeNext"` (paired with `module: "NodeNext"`
|
|
40
|
+
for its dual CJS/ESM output).
|
|
41
|
+
- `baseUrl` removed from all tsconfigs (deprecated in TS 6; `paths` resolves
|
|
42
|
+
relative to the tsconfig file directly).
|
|
43
|
+
- `rootDir` added explicitly to `build-tools`, `event-bus`, `fetch-graphql`,
|
|
44
|
+
and `recaptcha` tsconfigs (implicit `rootDir` deprecated in TS 6).
|
|
45
|
+
- `types: []` set in `tsconfig-base.json` to prevent ambient test types from
|
|
46
|
+
leaking into declaration output. Each package's own `tsconfig.json` declares
|
|
47
|
+
its `types` explicitly (`jest`, `node`, `vite/client`, etc.).
|
|
48
|
+
- `babel-plugin-tsconfig-paths` removed — it was a no-op in every package that
|
|
49
|
+
listed it.
|
|
50
|
+
- `noUncheckedIndexedAccess` enabled — violations were few enough to fix in
|
|
51
|
+
source.
|
|
24
52
|
|
|
25
53
|
### ESLint 8 → 9 (flat config)
|
|
26
|
-
|
|
27
|
-
|
|
54
|
+
- `@typescript-eslint/parser` and `@typescript-eslint/eslint-plugin` (v5)
|
|
55
|
+
removed; replaced by the unified `typescript-eslint` v8 package.
|
|
28
56
|
- `eslint-config-preact` bumped to `^2.0.0` (ESLint 9 support).
|
|
29
57
|
- `eslint-config-prettier` bumped to `^10.0.0`.
|
|
30
|
-
- `eslint-plugin-mdx` bumped to `^3.8.1`. **ESLint 10 is not supported** —
|
|
58
|
+
- `eslint-plugin-mdx` bumped to `^3.8.1`. **ESLint 10 is not supported** —
|
|
59
|
+
`eslint-plugin-mdx` vendors an internal ESLint API removed in v10; ESLint 9
|
|
60
|
+
is pinned until a fix is released.
|
|
31
61
|
- `globals` added (`^15.0.0`) for `languageOptions.globals` in flat config.
|
|
32
|
-
- Shared config (`packages/elsie/config/eslint.mjs`) rewritten as a
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
|
|
62
|
+
- Shared config (`packages/elsie/config/eslint.mjs`) rewritten as a
|
|
63
|
+
flat-config array export.
|
|
64
|
+
- Per-package `.eslintrc.js` files deleted; replaced with `eslint.config.js`
|
|
65
|
+
(ESM flat config).
|
|
66
|
+
- Several `typescript-eslint` v8 rules disabled to preserve prior behavior:
|
|
67
|
+
`no-explicit-any`, `ban-ts-comment`, `no-unused-expressions`,
|
|
68
|
+
`no-unsafe-function-type`, `no-require-imports`, `no-empty-object-type`.
|
|
69
|
+
Tracked as tech debt.
|
|
70
|
+
- `reportUnusedDisableDirectives` disabled to avoid sweeping pre-existing
|
|
71
|
+
inline disable comments.
|
|
36
72
|
|
|
37
73
|
### `vite-plugin-dts` removed; replaced with custom `dtsPlugin`
|
|
38
74
|
|
|
39
|
-
`vite-plugin-dts@3.9.1` declared a `typescript <5.0` peer range and its v5
|
|
75
|
+
`vite-plugin-dts@3.9.1` declared a `typescript <5.0` peer range and its v5
|
|
76
|
+
successor was incompatible with this monorepo's layout (cross-package sources,
|
|
77
|
+
workspace symlinks, multi-`outDir`). It was removed and replaced with a thin
|
|
78
|
+
custom Vite plugin at `packages/elsie/config/plugins/dts.mjs` (`dtsPlugin`)
|
|
79
|
+
that runs `tsc` directly. The resulting `dist/` layout is identical to what
|
|
80
|
+
v3.9 produced (147 `.d.ts` files, 12 top-level entry shims).
|
|
40
81
|
|
|
41
82
|
### Module format standardization
|
|
42
83
|
|
|
43
84
|
All tooling config files now follow a consistent format:
|
|
44
85
|
|
|
45
|
-
- **ESLint / Jest / Vite configs** — ESM (`.js` in `"type":"module"` packages;
|
|
46
|
-
|
|
86
|
+
- **ESLint / Jest / Vite configs** — ESM (`.js` in `"type":"module"` packages;
|
|
87
|
+
`.mjs` in elsie).
|
|
88
|
+
- **Prettier** — JSON only (`@adobe-commerce/elsie/config/prettier.json`
|
|
89
|
+
referenced via each package's `"prettier"` key). `prettier.config.*` files
|
|
90
|
+
deleted from all packages.
|
|
47
91
|
- **elsie CLI** (`bin/**`) — intentionally stays CommonJS.
|
|
48
92
|
|
|
49
93
|
See `architecture/decisions/009-module-format.md` for the full convention.
|
|
50
94
|
|
|
51
95
|
### `.elsie.js` → `.elsie.cjs`
|
|
52
96
|
|
|
53
|
-
The consumer project config file is renamed from `.elsie.js` to `.elsie.cjs`.
|
|
97
|
+
The consumer project config file is renamed from `.elsie.js` to `.elsie.cjs`.
|
|
98
|
+
With `"type":"module"` now required in consumer packages, a plain `.js` file
|
|
99
|
+
is treated as ES module — making `module.exports` a SyntaxError and making
|
|
100
|
+
`require()` in the elsie CLI fail with `ERR_REQUIRE_ESM`. The `.cjs` extension
|
|
101
|
+
forces CommonJS regardless of the package's `"type"` field.
|
|
54
102
|
|
|
55
103
|
- `elsie generate config` now writes `.elsie.cjs`.
|
|
56
|
-
- The CLI (`bin/lib/config.js`) and `config/vite.mjs` both prefer `.elsie.cjs`
|
|
104
|
+
- The CLI (`bin/lib/config.js`) and `config/vite.mjs` both prefer `.elsie.cjs`
|
|
105
|
+
and fall back to `.elsie.js` for packages not yet migrated.
|
|
57
106
|
- `.elsie.cjs` added to `.npmignore` in all consumer packages.
|
|
58
107
|
|
|
59
108
|
## Consumer migration
|
|
@@ -61,20 +110,29 @@
|
|
|
61
110
|
See `docs/elsie-v2-migration.md` for the full step-by-step guide. Key actions:
|
|
62
111
|
|
|
63
112
|
1. Add `"type": "module"` to `package.json`.
|
|
64
|
-
2. Replace `.eslintrc.js` with `eslint.config.js` (ESM flat config importing
|
|
113
|
+
2. Replace `.eslintrc.js` with `eslint.config.js` (ESM flat config importing
|
|
114
|
+
from `@adobe-commerce/elsie/config/eslint.mjs`).
|
|
65
115
|
3. Rename `.elsie.js` → `.elsie.cjs` (keep `module.exports` content as-is).
|
|
66
|
-
4. Add `"prettier": "@adobe-commerce/elsie/config/prettier.json"` to
|
|
67
|
-
|
|
116
|
+
4. Add `"prettier": "@adobe-commerce/elsie/config/prettier.json"` to
|
|
117
|
+
`package.json`; delete `prettier.config.js`.
|
|
118
|
+
5. Update `tsconfig.json`: remove `baseUrl`, add explicit `rootDir` and
|
|
119
|
+
`types`.
|
|
68
120
|
6. Add `tsconfig.build.json` for declaration emit (required by `dtsPlugin`).
|
|
69
|
-
7. Convert `.elsie.js` imports in `.storybook/main.js` and
|
|
121
|
+
7. Convert `.elsie.js` imports in `.storybook/main.js` and
|
|
122
|
+
`storybook-stories.js` to reference `.elsie.cjs`.
|
|
70
123
|
|
|
71
124
|
### Minor Changes
|
|
72
125
|
|
|
73
126
|
- c21a378: Add optional `cypress` export to shared ESLint config
|
|
74
127
|
|
|
75
|
-
`cypress` is a new named export from `@adobe-commerce/elsie/config/eslint.mjs`
|
|
128
|
+
`cypress` is a new named export from `@adobe-commerce/elsie/config/eslint.mjs`
|
|
129
|
+
that provides a pre-configured ESLint flat config for Cypress test files
|
|
130
|
+
(`cypress/**/*.js`). It applies `eslint-plugin-cypress`'s recommended rules
|
|
131
|
+
with `jest/expect-expect` turned off.
|
|
76
132
|
|
|
77
|
-
The plugin is declared as an optional peer dependency — `cypress` resolves to
|
|
133
|
+
The plugin is declared as an optional peer dependency — `cypress` resolves to
|
|
134
|
+
an empty array when `eslint-plugin-cypress` is not installed, so projects that
|
|
135
|
+
don't use Cypress are unaffected.
|
|
78
136
|
|
|
79
137
|
## Usage
|
|
80
138
|
|
|
@@ -95,41 +153,102 @@
|
|
|
95
153
|
export default [...base, ...cypress, ...sourceImportRestrictions];
|
|
96
154
|
```
|
|
97
155
|
|
|
98
|
-
- 9d558ed: Adds `window.DROPINS.showOverlays(state)` — a developer utility that
|
|
156
|
+
- 9d558ed: Adds `window.DROPINS.showOverlays(state)` — a developer utility that
|
|
157
|
+
visually outlines all dropin containers and slots on the page with labeled
|
|
158
|
+
overlays, making it easier to understand how the storefront is composed at
|
|
159
|
+
runtime.
|
|
99
160
|
|
|
100
|
-
`DROPINS.showSlots()` is deprecated in favor of `showOverlays()` and will log
|
|
161
|
+
`DROPINS.showSlots()` is deprecated in favor of `showOverlays()` and will log
|
|
162
|
+
a console warning when called.
|
|
101
163
|
|
|
102
164
|
- c25a5d7: feat(elsie): add `changeset` builder command
|
|
103
165
|
|
|
104
|
-
Adds `elsie changeset` as a first-class CLI command, wrapping
|
|
166
|
+
Adds `elsie changeset` as a first-class CLI command, wrapping
|
|
167
|
+
`@changesets/cli`. All subcommands pass through transparently (`status`,
|
|
168
|
+
`version`, `publish`, `--snapshot`, etc.). `@changesets/cli` is now a
|
|
169
|
+
dependency of elsie, so consumers no longer need to install it separately.
|
|
105
170
|
|
|
106
|
-
- 005edc7: Adds validation to the Incrementer component when the field is
|
|
171
|
+
- 005edc7: Adds validation to the Incrementer component when the field is
|
|
172
|
+
changed to "empty".
|
|
107
173
|
|
|
108
174
|
### Patch Changes
|
|
109
175
|
|
|
110
|
-
- bf352d2: Fix InputDate showing wrong format after selecting a date from the
|
|
111
|
-
|
|
112
|
-
-
|
|
113
|
-
|
|
114
|
-
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
-
|
|
122
|
-
|
|
123
|
-
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
176
|
+
- bf352d2: Fix InputDate showing wrong format after selecting a date from the
|
|
177
|
+
calendar
|
|
178
|
+
- 4c3d82d: fix(field): associate error messages with inputs via aria-describedby
|
|
179
|
+
(WCAG 3.3.1)
|
|
180
|
+
- 36354d9: Add disableWhenSingle prop to Picker; defaults to true (preserves
|
|
181
|
+
existing behavior). Pass false to keep the picker interactive when only one
|
|
182
|
+
option is available.
|
|
183
|
+
- 09c2100: Declare `preact` as a runtime dependency. It previously sat in
|
|
184
|
+
`devDependencies` (unlike `@preact/signals` and `preact-i18n`), so standalone
|
|
185
|
+
consumers of `@adobe-commerce/elsie` had an unmet `preact` — also the unmet
|
|
186
|
+
peer of `@preact/preset-vite`, `@storybook/preact-vite` and
|
|
187
|
+
`@testing-library/preact`. It now resolves to the same `~10.22.1` bundled into
|
|
188
|
+
`@dropins/tools`. The emitted bundle is unchanged.
|
|
189
|
+
- 4641ab0: Fix `Field` and `InLineAlert` status/error messages not being
|
|
190
|
+
announced by screen readers. `Field`'s description/hint element now always
|
|
191
|
+
carries `role="status"` and `aria-live="polite"`, instead of only adding
|
|
192
|
+
`aria-live` once an error appeared, so assistive technology reliably announces
|
|
193
|
+
validation and success messages (WCAG 4.1.3). `InLineAlert` now sets
|
|
194
|
+
`role="alert"`/`aria-live="assertive"` for `type="error"` and
|
|
195
|
+
`role="status"`/`aria-live="polite"` for `success`/`warning`, since it
|
|
196
|
+
previously had no live-region semantics at all.
|
|
197
|
+
- ccada8c: Reset default margin on Header and CartItem titles to support
|
|
198
|
+
rendering them as semantic headings
|
|
199
|
+
- cb6eb81: Fix `InLineAlert` additional-action buttons announcing the same
|
|
200
|
+
accessible name across multiple alerts. Each entry in `additionalActions` may
|
|
201
|
+
now include an optional `'aria-label'` that is applied to the rendered button
|
|
202
|
+
(falling back to `label` when omitted), so consumers can give visually
|
|
203
|
+
identical "Undo"/"Dismiss" style buttons unique, descriptive names for
|
|
204
|
+
assistive technology.
|
|
205
|
+
- ab5cf32: Fix `Modal` accessibility: the dialog now exposes `role="dialog"`,
|
|
206
|
+
`aria-modal="true"`, and an `aria-labelledby` linked to its title. Focus moves
|
|
207
|
+
into the modal when it opens (falling back to the dialog body when there are
|
|
208
|
+
no focusable elements), Tab/Shift+Tab now cycles between the first and last
|
|
209
|
+
focusable elements instead of escaping the modal, and focus returns to the
|
|
210
|
+
previously focused element when the modal closes.
|
|
211
|
+
- 58da630: Fix `Picker` accessible name and label association. The `<select>`
|
|
212
|
+
now falls back to `floatingLabel` or `placeholder` for its `aria-label` when
|
|
213
|
+
no `name` is provided, and the floating `<label>` is now correctly associated
|
|
214
|
+
with the rendered `<select>` via its generated id instead of the raw `id`
|
|
215
|
+
prop.
|
|
216
|
+
- 450c408: fix(Picker): auto-select and emit the sole option when the control
|
|
217
|
+
auto-disables, so single-option narrowing on configurable PDPs no longer
|
|
218
|
+
leaves the value unselected and Add to Cart permanently disabled
|
|
219
|
+
- 33ebe8a: Add accessible labels to password validation and input status icons
|
|
220
|
+
(WCAG 1.1.1)
|
|
221
|
+
- 2ad7316: Fix `ToggleButton`'s underlying radio input announcing the shared
|
|
222
|
+
radio-group `name` (e.g. "payment-method") as its accessible name for every
|
|
223
|
+
option instead of the option's own visible label, which violates WCAG 2.4.6
|
|
224
|
+
(Headings and Labels) and 2.5.3 (Label in Name). The radio input's accessible
|
|
225
|
+
name now defaults to `aria-labelledby` pointing at the option's own visible
|
|
226
|
+
label content (e.g. "Check / Money order"), which works correctly whether
|
|
227
|
+
`label` is a string or a `VNode`. An optional `ariaLabel` prop is still
|
|
228
|
+
available for consumers who need to set an explicit accessible name via
|
|
229
|
+
`aria-label` instead.
|
|
230
|
+
- 256007e: Fix ToggleButton generating invalid HTML ids when value prop contains
|
|
231
|
+
spaces, breaking aria-labelledby label association
|
|
232
|
+
- 016a558: Fix low-contrast field label text in `Input` when a field is in an
|
|
233
|
+
error state. The floating label color now meets WCAG AA contrast requirements
|
|
234
|
+
for normal-size text against light backgrounds, matching the color already
|
|
235
|
+
used for error text elsewhere (helper text, alerts).
|
|
236
|
+
- 51fcb35: fix(a11y): darken low-contrast focus indicators to meet WCAG 1.4.11
|
|
237
|
+
(3:1 non-text contrast)
|
|
238
|
+
|
|
239
|
+
The default keyboard focus indicator across Button, IconButton, Checkbox,
|
|
240
|
+
RadioButton, ActionButton, ActionButtonGroup, ToggleButton, TextSwatch,
|
|
241
|
+
ColorSwatch, ImageSwatch, and links used `--color-neutral-400` (#d6d6d6,
|
|
242
|
+
~1.45:1 against white), below the 3:1 minimum required by WCAG 1.4.11. These
|
|
243
|
+
focus indicators now use `--color-neutral-600` (#8f8f8f, ~3.2:1), so keyboard
|
|
244
|
+
users can reliably see which control is focused.
|
|
127
245
|
|
|
128
246
|
## 2.0.0-beta.1
|
|
129
247
|
|
|
130
248
|
### Patch Changes
|
|
131
249
|
|
|
132
|
-
- 256007e: Fix ToggleButton generating invalid HTML ids when value prop contains
|
|
250
|
+
- 256007e: Fix ToggleButton generating invalid HTML ids when value prop contains
|
|
251
|
+
spaces, breaking aria-labelledby label association
|
|
133
252
|
|
|
134
253
|
## 2.0.0-beta.0
|
|
135
254
|
|
|
@@ -137,54 +256,89 @@
|
|
|
137
256
|
|
|
138
257
|
- ea02d5f: Upgrade Jest to 30.4.2 and Storybook to 10.4.0
|
|
139
258
|
|
|
140
|
-
Updated testing and component development tools to latest stable versions.
|
|
259
|
+
Updated testing and component development tools to latest stable versions.
|
|
260
|
+
Jest 30.4.2 provides enhanced snapshot handling and improved test performance.
|
|
261
|
+
Storybook 10.4.0 includes updated addon ecosystem, improved Preact Vite
|
|
262
|
+
integration, and enhanced accessibility features with addon-a11y and
|
|
263
|
+
addon-coverage support.
|
|
141
264
|
|
|
142
265
|
- 9cd299b: Upgrade TypeScript to 6.0 and ESLint to 9 (flat config)
|
|
143
266
|
|
|
144
267
|
## What changed
|
|
145
268
|
|
|
146
269
|
### TypeScript 4.7 → 6.0
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
- `
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
- `
|
|
270
|
+
- `tsconfig-base.json` updated with correct TS 6 defaults. Two new-default
|
|
271
|
+
opt-outs are deferred as tech debt: `exactOptionalPropertyTypes` and
|
|
272
|
+
`verbatimModuleSyntax`.
|
|
273
|
+
- `moduleResolution` changed from `"nodenext"` to `"bundler"` across all
|
|
274
|
+
packages — the correct pairing for `module: "esnext"` in a Vite monorepo.
|
|
275
|
+
Only `packages/elsie` keeps `"NodeNext"` (paired with `module: "NodeNext"`
|
|
276
|
+
for its dual CJS/ESM output).
|
|
277
|
+
- `baseUrl` removed from all tsconfigs (deprecated in TS 6; `paths` resolves
|
|
278
|
+
relative to the tsconfig file directly).
|
|
279
|
+
- `rootDir` added explicitly to `build-tools`, `event-bus`, `fetch-graphql`,
|
|
280
|
+
and `recaptcha` tsconfigs (implicit `rootDir` deprecated in TS 6).
|
|
281
|
+
- `types: []` set in `tsconfig-base.json` to prevent ambient test types from
|
|
282
|
+
leaking into declaration output. Each package's own `tsconfig.json` declares
|
|
283
|
+
its `types` explicitly (`jest`, `node`, `vite/client`, etc.).
|
|
284
|
+
- `babel-plugin-tsconfig-paths` removed — it was a no-op in every package that
|
|
285
|
+
listed it.
|
|
286
|
+
- `noUncheckedIndexedAccess` enabled — violations were few enough to fix in
|
|
287
|
+
source.
|
|
155
288
|
|
|
156
289
|
### ESLint 8 → 9 (flat config)
|
|
157
|
-
|
|
158
|
-
|
|
290
|
+
- `@typescript-eslint/parser` and `@typescript-eslint/eslint-plugin` (v5)
|
|
291
|
+
removed; replaced by the unified `typescript-eslint` v8 package.
|
|
159
292
|
- `eslint-config-preact` bumped to `^2.0.0` (ESLint 9 support).
|
|
160
293
|
- `eslint-config-prettier` bumped to `^10.0.0`.
|
|
161
|
-
- `eslint-plugin-mdx` bumped to `^3.8.1`. **ESLint 10 is not supported** —
|
|
294
|
+
- `eslint-plugin-mdx` bumped to `^3.8.1`. **ESLint 10 is not supported** —
|
|
295
|
+
`eslint-plugin-mdx` vendors an internal ESLint API removed in v10; ESLint 9
|
|
296
|
+
is pinned until a fix is released.
|
|
162
297
|
- `globals` added (`^15.0.0`) for `languageOptions.globals` in flat config.
|
|
163
|
-
- Shared config (`packages/elsie/config/eslint.mjs`) rewritten as a
|
|
164
|
-
|
|
165
|
-
-
|
|
166
|
-
|
|
298
|
+
- Shared config (`packages/elsie/config/eslint.mjs`) rewritten as a
|
|
299
|
+
flat-config array export.
|
|
300
|
+
- Per-package `.eslintrc.js` files deleted; replaced with `eslint.config.js`
|
|
301
|
+
(ESM flat config).
|
|
302
|
+
- Several `typescript-eslint` v8 rules disabled to preserve prior behavior:
|
|
303
|
+
`no-explicit-any`, `ban-ts-comment`, `no-unused-expressions`,
|
|
304
|
+
`no-unsafe-function-type`, `no-require-imports`, `no-empty-object-type`.
|
|
305
|
+
Tracked as tech debt.
|
|
306
|
+
- `reportUnusedDisableDirectives` disabled to avoid sweeping pre-existing
|
|
307
|
+
inline disable comments.
|
|
167
308
|
|
|
168
309
|
### `vite-plugin-dts` removed; replaced with custom `dtsPlugin`
|
|
169
310
|
|
|
170
|
-
`vite-plugin-dts@3.9.1` declared a `typescript <5.0` peer range and its v5
|
|
311
|
+
`vite-plugin-dts@3.9.1` declared a `typescript <5.0` peer range and its v5
|
|
312
|
+
successor was incompatible with this monorepo's layout (cross-package sources,
|
|
313
|
+
workspace symlinks, multi-`outDir`). It was removed and replaced with a thin
|
|
314
|
+
custom Vite plugin at `packages/elsie/config/plugins/dts.mjs` (`dtsPlugin`)
|
|
315
|
+
that runs `tsc` directly. The resulting `dist/` layout is identical to what
|
|
316
|
+
v3.9 produced (147 `.d.ts` files, 12 top-level entry shims).
|
|
171
317
|
|
|
172
318
|
### Module format standardization
|
|
173
319
|
|
|
174
320
|
All tooling config files now follow a consistent format:
|
|
175
321
|
|
|
176
|
-
- **ESLint / Jest / Vite configs** — ESM (`.js` in `"type":"module"` packages;
|
|
177
|
-
|
|
322
|
+
- **ESLint / Jest / Vite configs** — ESM (`.js` in `"type":"module"` packages;
|
|
323
|
+
`.mjs` in elsie).
|
|
324
|
+
- **Prettier** — JSON only (`@adobe-commerce/elsie/config/prettier.json`
|
|
325
|
+
referenced via each package's `"prettier"` key). `prettier.config.*` files
|
|
326
|
+
deleted from all packages.
|
|
178
327
|
- **elsie CLI** (`bin/**`) — intentionally stays CommonJS.
|
|
179
328
|
|
|
180
329
|
See `architecture/decisions/009-module-format.md` for the full convention.
|
|
181
330
|
|
|
182
331
|
### `.elsie.js` → `.elsie.cjs`
|
|
183
332
|
|
|
184
|
-
The consumer project config file is renamed from `.elsie.js` to `.elsie.cjs`.
|
|
333
|
+
The consumer project config file is renamed from `.elsie.js` to `.elsie.cjs`.
|
|
334
|
+
With `"type":"module"` now required in consumer packages, a plain `.js` file
|
|
335
|
+
is treated as ES module — making `module.exports` a SyntaxError and making
|
|
336
|
+
`require()` in the elsie CLI fail with `ERR_REQUIRE_ESM`. The `.cjs` extension
|
|
337
|
+
forces CommonJS regardless of the package's `"type"` field.
|
|
185
338
|
|
|
186
339
|
- `elsie generate config` now writes `.elsie.cjs`.
|
|
187
|
-
- The CLI (`bin/lib/config.js`) and `config/vite.mjs` both prefer `.elsie.cjs`
|
|
340
|
+
- The CLI (`bin/lib/config.js`) and `config/vite.mjs` both prefer `.elsie.cjs`
|
|
341
|
+
and fall back to `.elsie.js` for packages not yet migrated.
|
|
188
342
|
- `.elsie.cjs` added to `.npmignore` in all consumer packages.
|
|
189
343
|
|
|
190
344
|
## Consumer migration
|
|
@@ -192,20 +346,29 @@
|
|
|
192
346
|
See `docs/elsie-v2-migration.md` for the full step-by-step guide. Key actions:
|
|
193
347
|
|
|
194
348
|
1. Add `"type": "module"` to `package.json`.
|
|
195
|
-
2. Replace `.eslintrc.js` with `eslint.config.js` (ESM flat config importing
|
|
349
|
+
2. Replace `.eslintrc.js` with `eslint.config.js` (ESM flat config importing
|
|
350
|
+
from `@adobe-commerce/elsie/config/eslint.mjs`).
|
|
196
351
|
3. Rename `.elsie.js` → `.elsie.cjs` (keep `module.exports` content as-is).
|
|
197
|
-
4. Add `"prettier": "@adobe-commerce/elsie/config/prettier.json"` to
|
|
198
|
-
|
|
352
|
+
4. Add `"prettier": "@adobe-commerce/elsie/config/prettier.json"` to
|
|
353
|
+
`package.json`; delete `prettier.config.js`.
|
|
354
|
+
5. Update `tsconfig.json`: remove `baseUrl`, add explicit `rootDir` and
|
|
355
|
+
`types`.
|
|
199
356
|
6. Add `tsconfig.build.json` for declaration emit (required by `dtsPlugin`).
|
|
200
|
-
7. Convert `.elsie.js` imports in `.storybook/main.js` and
|
|
357
|
+
7. Convert `.elsie.js` imports in `.storybook/main.js` and
|
|
358
|
+
`storybook-stories.js` to reference `.elsie.cjs`.
|
|
201
359
|
|
|
202
360
|
### Minor Changes
|
|
203
361
|
|
|
204
362
|
- c21a378: Add optional `cypress` export to shared ESLint config
|
|
205
363
|
|
|
206
|
-
`cypress` is a new named export from `@adobe-commerce/elsie/config/eslint.mjs`
|
|
364
|
+
`cypress` is a new named export from `@adobe-commerce/elsie/config/eslint.mjs`
|
|
365
|
+
that provides a pre-configured ESLint flat config for Cypress test files
|
|
366
|
+
(`cypress/**/*.js`). It applies `eslint-plugin-cypress`'s recommended rules
|
|
367
|
+
with `jest/expect-expect` turned off.
|
|
207
368
|
|
|
208
|
-
The plugin is declared as an optional peer dependency — `cypress` resolves to
|
|
369
|
+
The plugin is declared as an optional peer dependency — `cypress` resolves to
|
|
370
|
+
an empty array when `eslint-plugin-cypress` is not installed, so projects that
|
|
371
|
+
don't use Cypress are unaffected.
|
|
209
372
|
|
|
210
373
|
## Usage
|
|
211
374
|
|
|
@@ -226,34 +389,93 @@
|
|
|
226
389
|
export default [...base, ...cypress, ...sourceImportRestrictions];
|
|
227
390
|
```
|
|
228
391
|
|
|
229
|
-
- 9d558ed: Adds `window.DROPINS.showOverlays(state)` — a developer utility that
|
|
392
|
+
- 9d558ed: Adds `window.DROPINS.showOverlays(state)` — a developer utility that
|
|
393
|
+
visually outlines all dropin containers and slots on the page with labeled
|
|
394
|
+
overlays, making it easier to understand how the storefront is composed at
|
|
395
|
+
runtime.
|
|
230
396
|
|
|
231
|
-
`DROPINS.showSlots()` is deprecated in favor of `showOverlays()` and will log
|
|
397
|
+
`DROPINS.showSlots()` is deprecated in favor of `showOverlays()` and will log
|
|
398
|
+
a console warning when called.
|
|
232
399
|
|
|
233
400
|
- c25a5d7: feat(elsie): add `changeset` builder command
|
|
234
401
|
|
|
235
|
-
Adds `elsie changeset` as a first-class CLI command, wrapping
|
|
402
|
+
Adds `elsie changeset` as a first-class CLI command, wrapping
|
|
403
|
+
`@changesets/cli`. All subcommands pass through transparently (`status`,
|
|
404
|
+
`version`, `publish`, `--snapshot`, etc.). `@changesets/cli` is now a
|
|
405
|
+
dependency of elsie, so consumers no longer need to install it separately.
|
|
236
406
|
|
|
237
|
-
- 005edc7: Adds validation to the Incrementer component when the field is
|
|
407
|
+
- 005edc7: Adds validation to the Incrementer component when the field is
|
|
408
|
+
changed to "empty".
|
|
238
409
|
|
|
239
410
|
### Patch Changes
|
|
240
411
|
|
|
241
|
-
- bf352d2: Fix InputDate showing wrong format after selecting a date from the
|
|
242
|
-
|
|
243
|
-
-
|
|
244
|
-
|
|
245
|
-
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
-
|
|
253
|
-
|
|
254
|
-
-
|
|
255
|
-
|
|
256
|
-
|
|
412
|
+
- bf352d2: Fix InputDate showing wrong format after selecting a date from the
|
|
413
|
+
calendar
|
|
414
|
+
- 4c3d82d: fix(field): associate error messages with inputs via aria-describedby
|
|
415
|
+
(WCAG 3.3.1)
|
|
416
|
+
- 36354d9: Add disableWhenSingle prop to Picker; defaults to true (preserves
|
|
417
|
+
existing behavior). Pass false to keep the picker interactive when only one
|
|
418
|
+
option is available.
|
|
419
|
+
- 09c2100: Declare `preact` as a runtime dependency. It previously sat in
|
|
420
|
+
`devDependencies` (unlike `@preact/signals` and `preact-i18n`), so standalone
|
|
421
|
+
consumers of `@adobe-commerce/elsie` had an unmet `preact` — also the unmet
|
|
422
|
+
peer of `@preact/preset-vite`, `@storybook/preact-vite` and
|
|
423
|
+
`@testing-library/preact`. It now resolves to the same `~10.22.1` bundled into
|
|
424
|
+
`@dropins/tools`. The emitted bundle is unchanged.
|
|
425
|
+
- 4641ab0: Fix `Field` and `InLineAlert` status/error messages not being
|
|
426
|
+
announced by screen readers. `Field`'s description/hint element now always
|
|
427
|
+
carries `role="status"` and `aria-live="polite"`, instead of only adding
|
|
428
|
+
`aria-live` once an error appeared, so assistive technology reliably announces
|
|
429
|
+
validation and success messages (WCAG 4.1.3). `InLineAlert` now sets
|
|
430
|
+
`role="alert"`/`aria-live="assertive"` for `type="error"` and
|
|
431
|
+
`role="status"`/`aria-live="polite"` for `success`/`warning`, since it
|
|
432
|
+
previously had no live-region semantics at all.
|
|
433
|
+
- ccada8c: Reset default margin on Header and CartItem titles to support
|
|
434
|
+
rendering them as semantic headings
|
|
435
|
+
- cb6eb81: Fix `InLineAlert` additional-action buttons announcing the same
|
|
436
|
+
accessible name across multiple alerts. Each entry in `additionalActions` may
|
|
437
|
+
now include an optional `'aria-label'` that is applied to the rendered button
|
|
438
|
+
(falling back to `label` when omitted), so consumers can give visually
|
|
439
|
+
identical "Undo"/"Dismiss" style buttons unique, descriptive names for
|
|
440
|
+
assistive technology.
|
|
441
|
+
- ab5cf32: Fix `Modal` accessibility: the dialog now exposes `role="dialog"`,
|
|
442
|
+
`aria-modal="true"`, and an `aria-labelledby` linked to its title. Focus moves
|
|
443
|
+
into the modal when it opens (falling back to the dialog body when there are
|
|
444
|
+
no focusable elements), Tab/Shift+Tab now cycles between the first and last
|
|
445
|
+
focusable elements instead of escaping the modal, and focus returns to the
|
|
446
|
+
previously focused element when the modal closes.
|
|
447
|
+
- 58da630: Fix `Picker` accessible name and label association. The `<select>`
|
|
448
|
+
now falls back to `floatingLabel` or `placeholder` for its `aria-label` when
|
|
449
|
+
no `name` is provided, and the floating `<label>` is now correctly associated
|
|
450
|
+
with the rendered `<select>` via its generated id instead of the raw `id`
|
|
451
|
+
prop.
|
|
452
|
+
- 450c408: fix(Picker): auto-select and emit the sole option when the control
|
|
453
|
+
auto-disables, so single-option narrowing on configurable PDPs no longer
|
|
454
|
+
leaves the value unselected and Add to Cart permanently disabled
|
|
455
|
+
- 33ebe8a: Add accessible labels to password validation and input status icons
|
|
456
|
+
(WCAG 1.1.1)
|
|
457
|
+
- 2ad7316: Fix `ToggleButton`'s underlying radio input announcing the shared
|
|
458
|
+
radio-group `name` (e.g. "payment-method") as its accessible name for every
|
|
459
|
+
option instead of the option's own visible label, which violates WCAG 2.4.6
|
|
460
|
+
(Headings and Labels) and 2.5.3 (Label in Name). The radio input's accessible
|
|
461
|
+
name now defaults to `aria-labelledby` pointing at the option's own visible
|
|
462
|
+
label content (e.g. "Check / Money order"), which works correctly whether
|
|
463
|
+
`label` is a string or a `VNode`. An optional `ariaLabel` prop is still
|
|
464
|
+
available for consumers who need to set an explicit accessible name via
|
|
465
|
+
`aria-label` instead.
|
|
466
|
+
- 016a558: Fix low-contrast field label text in `Input` when a field is in an
|
|
467
|
+
error state. The floating label color now meets WCAG AA contrast requirements
|
|
468
|
+
for normal-size text against light backgrounds, matching the color already
|
|
469
|
+
used for error text elsewhere (helper text, alerts).
|
|
470
|
+
- 51fcb35: fix(a11y): darken low-contrast focus indicators to meet WCAG 1.4.11
|
|
471
|
+
(3:1 non-text contrast)
|
|
472
|
+
|
|
473
|
+
The default keyboard focus indicator across Button, IconButton, Checkbox,
|
|
474
|
+
RadioButton, ActionButton, ActionButtonGroup, ToggleButton, TextSwatch,
|
|
475
|
+
ColorSwatch, ImageSwatch, and links used `--color-neutral-400` (#d6d6d6,
|
|
476
|
+
~1.45:1 against white), below the 3:1 minimum required by WCAG 1.4.11. These
|
|
477
|
+
focus indicators now use `--color-neutral-600` (#8f8f8f, ~3.2:1), so keyboard
|
|
478
|
+
users can reliably see which control is focused.
|
|
257
479
|
|
|
258
480
|
## 1.9.0
|
|
259
481
|
|
|
@@ -261,28 +483,59 @@
|
|
|
261
483
|
|
|
262
484
|
- af62897: Update minimum Node.js requirement to 22 LTS
|
|
263
485
|
|
|
264
|
-
Packages are now built with Node.js 22. `elsie` requires `>=22`; browser-only
|
|
486
|
+
Packages are now built with Node.js 22. `elsie` requires `>=22`; browser-only
|
|
487
|
+
packages (`fetch-graphql`, `event-bus`, `recaptcha`, `storefront-design`,
|
|
488
|
+
`build-tools`) do not declare an `engines` field as they do not run in
|
|
489
|
+
Node.js.
|
|
265
490
|
|
|
266
|
-
- 62adf1c: Reduce HTTP requests on page load through three bundling
|
|
491
|
+
- 62adf1c: Reduce HTTP requests on page load through three bundling
|
|
492
|
+
optimizations. The preact runtime is isolated in its own vendor chunk so it no
|
|
493
|
+
longer co-locates into other chunks. Dropin API and internal component modules
|
|
494
|
+
are consolidated into `chunks/api.js` and `chunks/components.js` respectively,
|
|
495
|
+
replacing the previous pattern of one chunk file per function or component.
|
|
496
|
+
All SVG icons are consolidated into a single `chunks/icons.js` chunk instead
|
|
497
|
+
of one chunk per icon.
|
|
267
498
|
|
|
268
|
-
Drop-ins must be rebuilt against this release to get the reduced request
|
|
499
|
+
Drop-ins must be rebuilt against this release to get the reduced request
|
|
500
|
+
footprint. No source changes are required.
|
|
269
501
|
|
|
270
502
|
### Patch Changes
|
|
271
503
|
|
|
272
|
-
- d2aacc7: Fix: GraphQL fragment source files are no longer incorrectly bundled
|
|
273
|
-
|
|
504
|
+
- d2aacc7: Fix: GraphQL fragment source files are no longer incorrectly bundled
|
|
505
|
+
into `chunks/api.js`. The `manualChunks` function now walks the full importer
|
|
506
|
+
graph (with cycle protection) to determine whether an api-directory module is
|
|
507
|
+
owned by the fragments barrel, so fragment files stay in the fragments output
|
|
508
|
+
chunk even when accessed through intermediate sub-barrels.
|
|
509
|
+
- 5c64620: Implement a new `fragment-import-redirect` build plugin that
|
|
510
|
+
automatically detects and redirects any dropin source file that directly
|
|
511
|
+
imports a fragment source file (bypassing the barrel). The import is silently
|
|
512
|
+
redirected to the fragments barrel at build time and a warning is emitted
|
|
513
|
+
identifying the file so it can be corrected in source. This ensures fragment
|
|
514
|
+
constants always appear as local declarations in `fragments.js` regardless of
|
|
515
|
+
how dropin source code references them.
|
|
274
516
|
|
|
275
517
|
## 1.9.0-beta.3
|
|
276
518
|
|
|
277
519
|
### Patch Changes
|
|
278
520
|
|
|
279
|
-
- 5c64620: Implement a new `fragment-import-redirect` build plugin that
|
|
521
|
+
- 5c64620: Implement a new `fragment-import-redirect` build plugin that
|
|
522
|
+
automatically detects and redirects any dropin source file that directly
|
|
523
|
+
imports a fragment source file (bypassing the barrel). The import is silently
|
|
524
|
+
redirected to the fragments barrel at build time and a warning is emitted
|
|
525
|
+
identifying the file so it can be corrected in source. This ensures fragment
|
|
526
|
+
constants always appear as local declarations in `fragments.js` regardless of
|
|
527
|
+
how dropin source code references them.
|
|
280
528
|
|
|
281
529
|
## 1.9.0-beta.2
|
|
282
530
|
|
|
283
531
|
### Patch Changes
|
|
284
532
|
|
|
285
|
-
- d2aacc7: Fix: GraphQL fragment source files are no longer incorrectly bundled
|
|
533
|
+
- d2aacc7: Fix: GraphQL fragment source files are no longer incorrectly bundled
|
|
534
|
+
into `chunks/api.js`. The `manualChunks` function now walks the full importer
|
|
535
|
+
graph (with cycle protection) to determine whether an api-directory module is
|
|
536
|
+
owned by the fragments barrel, so fragment files stay in the fragments output
|
|
537
|
+
chunk even when accessed through intermediate sub-barrels. Boilerplate GraphQL
|
|
538
|
+
overrides work correctly in all dropin barrel structures.
|
|
286
539
|
|
|
287
540
|
## 1.9.0-beta.1
|
|
288
541
|
|
|
@@ -290,35 +543,53 @@
|
|
|
290
543
|
|
|
291
544
|
- af62897: Update minimum Node.js requirement to 22 LTS
|
|
292
545
|
|
|
293
|
-
Packages are now built with Node.js 22. `elsie` requires `>=22`; browser-only
|
|
546
|
+
Packages are now built with Node.js 22. `elsie` requires `>=22`; browser-only
|
|
547
|
+
packages (`fetch-graphql`, `event-bus`, `recaptcha`, `storefront-design`,
|
|
548
|
+
`build-tools`) do not declare an `engines` field as they do not run in
|
|
549
|
+
Node.js.
|
|
294
550
|
|
|
295
551
|
## 1.9.0-beta.0
|
|
296
552
|
|
|
297
553
|
### Minor Changes
|
|
298
554
|
|
|
299
|
-
- 62adf1c: Reduce HTTP requests on page load through three bundling
|
|
555
|
+
- 62adf1c: Reduce HTTP requests on page load through three bundling
|
|
556
|
+
optimizations. The preact runtime is isolated in its own vendor chunk so it no
|
|
557
|
+
longer co-locates into other chunks. Dropin API and internal component modules
|
|
558
|
+
are consolidated into `chunks/api.js` and `chunks/components.js` respectively,
|
|
559
|
+
replacing the previous pattern of one chunk file per function or component.
|
|
560
|
+
All SVG icons are consolidated into a single `chunks/icons.js` chunk instead
|
|
561
|
+
of one chunk per icon.
|
|
300
562
|
|
|
301
|
-
Drop-ins must be rebuilt against this release to get the reduced request
|
|
563
|
+
Drop-ins must be rebuilt against this release to get the reduced request
|
|
564
|
+
footprint. No source changes are required.
|
|
302
565
|
|
|
303
566
|
## 1.8.1
|
|
304
567
|
|
|
305
568
|
### Patch Changes
|
|
306
569
|
|
|
307
|
-
- e44f618: Fixed `srcset w` descriptors to use actual image widths instead of
|
|
308
|
-
|
|
570
|
+
- e44f618: Fixed `srcset w` descriptors to use actual image widths instead of
|
|
571
|
+
viewport breakpoints, preventing blurry product images.
|
|
572
|
+
- 46d57ca: Add optional `sizes` prop to the `Image` component so dropins can
|
|
573
|
+
provide layout-aware sizing hints for more accurate srcset image source
|
|
574
|
+
selection.
|
|
309
575
|
|
|
310
576
|
## 1.8.1-beta.0
|
|
311
577
|
|
|
312
578
|
### Patch Changes
|
|
313
579
|
|
|
314
|
-
- e44f618: Fixed `srcset w` descriptors to use actual image widths instead of
|
|
315
|
-
|
|
580
|
+
- e44f618: Fixed `srcset w` descriptors to use actual image widths instead of
|
|
581
|
+
viewport breakpoints, preventing blurry product images.
|
|
582
|
+
- 46d57ca: Add optional `sizes` prop to the `Image` component so dropins can
|
|
583
|
+
provide layout-aware sizing hints for more accurate srcset image source
|
|
584
|
+
selection.
|
|
316
585
|
|
|
317
586
|
## 1.8.0
|
|
318
587
|
|
|
319
588
|
### Minor Changes
|
|
320
589
|
|
|
321
|
-
- c4da094: Enhance the Vite build process to automatically generate a
|
|
590
|
+
- c4da094: Enhance the Vite build process to automatically generate a
|
|
591
|
+
package.json file and include both the LICENSE and CHANGELOG files in the dist
|
|
592
|
+
directory.
|
|
322
593
|
|
|
323
594
|
### Patch Changes
|
|
324
595
|
|
|
@@ -334,4 +605,6 @@
|
|
|
334
605
|
|
|
335
606
|
### Minor Changes
|
|
336
607
|
|
|
337
|
-
- c4da094: Enhance the Vite build process to automatically generate a
|
|
608
|
+
- c4da094: Enhance the Vite build process to automatically generate a
|
|
609
|
+
package.json file and include both the LICENSE and CHANGELOG files in the dist
|
|
610
|
+
directory.
|