@bookjane2/bookjane-design-library 9.0.34 → 9.0.36

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.
@@ -0,0 +1,12 @@
1
+ import { StoryFn } from '@storybook/react';
2
+ import { BKJImage } from './BKJImage.js';
3
+ import { IBKJImageProps } from './BKJImage.types.js';
4
+ declare const setup: {
5
+ title: string;
6
+ component: typeof BKJImage;
7
+ };
8
+ export declare const Decorative: import("@storybook/core/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, IBKJImageProps>;
9
+ export declare const Informative: import("@storybook/core/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, IBKJImageProps>;
10
+ export declare const Variants: StoryFn;
11
+ export default setup;
12
+ //# sourceMappingURL=BKJImage.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BKJImage.stories.d.ts","sourceRoot":"","sources":["../../../src/components/BKJImage/BKJImage.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA0BlD,QAAA,MAAM,KAAK;;;CAGV,CAAC;AAIF,eAAO,MAAM,UAAU,0GAAoB,CAAC;AAmB5C,eAAO,MAAM,WAAW,0GAAoB,CAAC;AAmB7C,eAAO,MAAM,QAAQ,EAAE,OA2BtB,CAAC;AAUF,eAAe,KAAK,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { BKJImage } from './BKJImage.js';
3
+ const SkeletonDiv = () => (_jsx("div", { style: { width: '100%', height: '100%', background: '#f0f0f0' } }));
4
+ const PlaceholderDiv = () => (_jsx("div", { style: {
5
+ width: '100%',
6
+ height: '100%',
7
+ background: '#e0e0e0',
8
+ display: 'flex',
9
+ alignItems: 'center',
10
+ justifyContent: 'center',
11
+ color: '#666',
12
+ fontSize: 12,
13
+ }, children: "No image" }));
14
+ const SAMPLE_DECORATIVE_URL = 'https://picsum.photos/seed/decorative-bkjimage/240/120';
15
+ const SAMPLE_PORTRAIT_URL = 'https://picsum.photos/seed/portrait-bkjimage/240/240';
16
+ const setup = {
17
+ title: 'Basic Elements/BKJImage',
18
+ component: BKJImage,
19
+ };
20
+ const Template = (args) => _jsx(BKJImage, { ...args });
21
+ export const Decorative = Template.bind({});
22
+ Decorative.args = {
23
+ alt: '',
24
+ src: SAMPLE_DECORATIVE_URL,
25
+ width: '240px',
26
+ height: '120px',
27
+ LoadingComponent: SkeletonDiv,
28
+ FallbackComponent: PlaceholderDiv,
29
+ variant: 'Rectangle',
30
+ };
31
+ Decorative.parameters = {
32
+ docs: {
33
+ description: {
34
+ story: '`alt=""` is the correct value for decorative images per WCAG H67 ("Using null alt text and no title attribute on `img` elements that AT should ignore"); this is intentional, not a bug. Use this when the image is purely visual or when an adjacent visible label already names the content.',
35
+ },
36
+ },
37
+ };
38
+ export const Informative = Template.bind({});
39
+ Informative.args = {
40
+ alt: 'Jane Smith — Director of Engineering',
41
+ src: SAMPLE_PORTRAIT_URL,
42
+ width: '120px',
43
+ height: '120px',
44
+ LoadingComponent: SkeletonDiv,
45
+ FallbackComponent: PlaceholderDiv,
46
+ variant: 'Round',
47
+ };
48
+ Informative.parameters = {
49
+ docs: {
50
+ description: {
51
+ story: 'Informative image: the `alt` describes who or what the image shows. AT announces the alt text + "image". This is the dominant pattern when the image carries meaning that the consumer has not duplicated as adjacent visible text.',
52
+ },
53
+ },
54
+ };
55
+ export const Variants = () => (_jsxs("div", { style: { display: 'flex', gap: '24px', alignItems: 'flex-start' }, children: [_jsxs("div", { children: [_jsx("p", { style: { marginBottom: 8, fontSize: 12 }, children: "variant=\"Round\"" }), _jsx(BKJImage, { alt: "Profile photo of Alice", src: SAMPLE_PORTRAIT_URL, width: "120px", height: "120px", LoadingComponent: SkeletonDiv, FallbackComponent: PlaceholderDiv, variant: "Round" })] }), _jsxs("div", { children: [_jsx("p", { style: { marginBottom: 8, fontSize: 12 }, children: "variant=\"Rectangle\"" }), _jsx(BKJImage, { alt: "Conference room photo", src: SAMPLE_DECORATIVE_URL, width: "240px", height: "120px", LoadingComponent: SkeletonDiv, FallbackComponent: PlaceholderDiv, variant: "Rectangle" })] })] }));
56
+ Variants.parameters = {
57
+ docs: {
58
+ description: {
59
+ story: 'Side-by-side rendering of `Round` (border-radius: 50%) and `Rectangle` (no border-radius) variants. Both use informative `alt` values. The a11y panel scans both variants together — confirms neither variant has a per-CSS-rule a11y regression.',
60
+ },
61
+ },
62
+ };
63
+ export default setup;
64
+ //# sourceMappingURL=BKJImage.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BKJImage.stories.js","sourceRoot":"","sources":["../../../src/components/BKJImage/BKJImage.stories.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,CACxB,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAI,CACzE,CAAC;AAEF,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,CAC3B,cACE,KAAK,EAAE;QACL,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,EAAE;KACb,yBAGG,CACP,CAAC;AAEF,MAAM,qBAAqB,GAAG,wDAAwD,CAAC;AACvF,MAAM,mBAAmB,GAAG,sDAAsD,CAAC;AAEnF,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,yBAAyB;IAChC,SAAS,EAAE,QAAQ;CACpB,CAAC;AAEF,MAAM,QAAQ,GAA4B,CAAC,IAAI,EAAE,EAAE,CAAC,KAAC,QAAQ,OAAK,IAAI,GAAI,CAAC;AAE3E,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5C,UAAU,CAAC,IAAI,GAAG;IAChB,GAAG,EAAE,EAAE;IACP,GAAG,EAAE,qBAAqB;IAC1B,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,gBAAgB,EAAE,WAAW;IAC7B,iBAAiB,EAAE,cAAc;IACjC,OAAO,EAAE,WAAW;CACrB,CAAC;AACF,UAAU,CAAC,UAAU,GAAG;IACtB,IAAI,EAAE;QACJ,WAAW,EAAE;YACX,KAAK,EACH,gSAAgS;SACnS;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7C,WAAW,CAAC,IAAI,GAAG;IACjB,GAAG,EAAE,sCAAsC;IAC3C,GAAG,EAAE,mBAAmB;IACxB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,gBAAgB,EAAE,WAAW;IAC7B,iBAAiB,EAAE,cAAc;IACjC,OAAO,EAAE,OAAO;CACjB,CAAC;AACF,WAAW,CAAC,UAAU,GAAG;IACvB,IAAI,EAAE;QACJ,WAAW,EAAE;YACX,KAAK,EACH,qOAAqO;SACxO;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAY,GAAG,EAAE,CAAC,CACrC,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,aACpE,0BACE,YAAG,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,kCAA+B,EAC1E,KAAC,QAAQ,IACP,GAAG,EAAC,wBAAwB,EAC5B,GAAG,EAAE,mBAAmB,EACxB,KAAK,EAAC,OAAO,EACb,MAAM,EAAC,OAAO,EACd,gBAAgB,EAAE,WAAW,EAC7B,iBAAiB,EAAE,cAAc,EACjC,OAAO,EAAC,OAAO,GACf,IACE,EACN,0BACE,YAAG,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,sCAAmC,EAC9E,KAAC,QAAQ,IACP,GAAG,EAAC,uBAAuB,EAC3B,GAAG,EAAE,qBAAqB,EAC1B,KAAK,EAAC,OAAO,EACb,MAAM,EAAC,OAAO,EACd,gBAAgB,EAAE,WAAW,EAC7B,iBAAiB,EAAE,cAAc,EACjC,OAAO,EAAC,WAAW,GACnB,IACE,IACF,CACP,CAAC;AACF,QAAQ,CAAC,UAAU,GAAG;IACpB,IAAI,EAAE;QACJ,WAAW,EAAE;YACX,KAAK,EACH,mPAAmP;SACtP;KACF;CACF,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BKJImage.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BKJImage.test.d.ts","sourceRoot":"","sources":["../../../src/components/BKJImage/BKJImage.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { fireEvent, screen } from '@testing-library/react';
3
+ import { renderAndCheckA11y, renderWithTheme } from '../../test-utils/index.js';
4
+ import { BKJImage } from './BKJImage.js';
5
+ const LoadingPlaceholder = () => _jsx("div", { "data-testid": "loading-ph" });
6
+ const FallbackPlaceholder = () => _jsx("div", { "data-testid": "fallback-ph" });
7
+ const STUB_SRC = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLz4=';
8
+ describe('BKJImage type contract (compile-time)', () => {
9
+ it('rejects missing alt prop at compile time', () => {
10
+ // FR-001. If this directive ever becomes "unused", IBKJImageProps.alt has been
11
+ // loosened (e.g., changed to alt?: string) and the compile-time safety check is gone.
12
+ const _bad = (
13
+ // @ts-expect-error — BKJImage with no `alt` must fail type-checking.
14
+ _jsx(BKJImage, { src: STUB_SRC, width: "40", height: "40", LoadingComponent: LoadingPlaceholder, FallbackComponent: FallbackPlaceholder, variant: "Round" }));
15
+ void _bad;
16
+ });
17
+ });
18
+ describe('BKJImage decorative render', () => {
19
+ it('renders alt="" byte-identically', () => {
20
+ const { container } = renderWithTheme(_jsx(BKJImage, { alt: "", src: STUB_SRC, width: "40", height: "40", LoadingComponent: LoadingPlaceholder, FallbackComponent: FallbackPlaceholder, variant: "Rectangle" }));
21
+ const img = container.querySelector('img');
22
+ expect(img).not.toBeNull();
23
+ expect(img).toHaveAttribute('alt', '');
24
+ });
25
+ it('decorative render is axe-clean (Rectangle variant)', async () => {
26
+ const { renderResult, axeResults } = await renderAndCheckA11y(_jsx(BKJImage, { alt: "", src: STUB_SRC, width: "40", height: "40", LoadingComponent: LoadingPlaceholder, FallbackComponent: FallbackPlaceholder, variant: "Rectangle" }));
27
+ const img = renderResult.container.querySelector('img');
28
+ if (img)
29
+ fireEvent.load(img);
30
+ expect(axeResults).toHaveNoViolations();
31
+ });
32
+ });
33
+ describe('BKJImage informative render', () => {
34
+ it('renders alt="Jane Smith" byte-identically', () => {
35
+ const { container } = renderWithTheme(_jsx(BKJImage, { alt: "Jane Smith", src: STUB_SRC, width: "40", height: "40", LoadingComponent: LoadingPlaceholder, FallbackComponent: FallbackPlaceholder, variant: "Round" }));
36
+ const img = container.querySelector('img');
37
+ expect(img).not.toBeNull();
38
+ expect(img).toHaveAttribute('alt', 'Jane Smith');
39
+ });
40
+ it('informative <img> is reachable via getByRole("img", { name }) after onLoad', () => {
41
+ const { container } = renderWithTheme(_jsx(BKJImage, { alt: "Jane Smith", src: STUB_SRC, width: "40", height: "40", LoadingComponent: LoadingPlaceholder, FallbackComponent: FallbackPlaceholder, variant: "Round" }));
42
+ const img = container.querySelector('img');
43
+ if (img)
44
+ fireEvent.load(img);
45
+ expect(screen.getByRole('img', { name: 'Jane Smith' })).toBeInTheDocument();
46
+ });
47
+ it('informative render is axe-clean (Round variant)', async () => {
48
+ const { renderResult, axeResults } = await renderAndCheckA11y(_jsx(BKJImage, { alt: "Jane Smith", src: STUB_SRC, width: "40", height: "40", LoadingComponent: LoadingPlaceholder, FallbackComponent: FallbackPlaceholder, variant: "Round" }));
49
+ const img = renderResult.container.querySelector('img');
50
+ if (img)
51
+ fireEvent.load(img);
52
+ expect(axeResults).toHaveNoViolations();
53
+ });
54
+ });
55
+ //# sourceMappingURL=BKJImage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BKJImage.test.js","sourceRoot":"","sources":["../../../src/components/BKJImage/BKJImage.test.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BKJMenu.d.ts","sourceRoot":"","sources":["../../../src/components/BKJMenu/BKJMenu.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAuB,MAAM,OAAO,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,aAAa,CAyBrC,CAAC"}
1
+ {"version":3,"file":"BKJMenu.d.ts","sourceRoot":"","sources":["../../../src/components/BKJMenu/BKJMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,EAAE,EAA2B,MAAM,OAAO,CAAC;AAGhE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,aAAa,CAkDrC,CAAC"}
@@ -1,20 +1,36 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import React, { forwardRef } from 'react';
3
- import { Fragment } from 'react';
2
+ import { forwardRef, Fragment } from 'react';
3
+ import { useId } from '@react-aria/utils';
4
4
  import { MenuWrapper } from './BKJMenu.styled.js';
5
- export const BKJMenu = forwardRef(({ isMenuOpen, closeMenu, children, className, ...props }, ref) => {
6
- const buildChildren = React.Children.map(children, (child) => {
7
- if (React.isValidElement(child)) {
8
- const props = {
9
- onClick: () => {
10
- child?.props?.onClick && child.props.onClick();
11
- closeMenu();
12
- },
13
- };
14
- return React.cloneElement(child, props);
5
+ const NAV_KEYS = new Set(['ArrowDown', 'ArrowUp', 'Home', 'End']);
6
+ export const BKJMenu = forwardRef(({ isMenuOpen, closeMenu, children, onKeyDown, ...rest }, ref) => {
7
+ const generatedId = useId();
8
+ const handleKeyDown = (event) => {
9
+ onKeyDown?.(event);
10
+ if (event.key === 'Enter' || event.key === ' ') {
11
+ closeMenu();
12
+ return;
15
13
  }
16
- return null;
17
- });
18
- return (_jsx(Fragment, { children: isMenuOpen && children && (_jsx(MenuWrapper, { role: "menu", "aria-label": "Menu", ref: ref, className: className, ...props, children: buildChildren })) }));
14
+ if (event.defaultPrevented || !NAV_KEYS.has(event.key))
15
+ return;
16
+ event.preventDefault();
17
+ const wrapper = event.currentTarget;
18
+ const target = event.target;
19
+ let next = null;
20
+ if (event.key === 'ArrowDown') {
21
+ next = target.nextElementSibling ?? wrapper.firstElementChild;
22
+ }
23
+ else if (event.key === 'ArrowUp') {
24
+ next = target.previousElementSibling ?? wrapper.lastElementChild;
25
+ }
26
+ else if (event.key === 'Home') {
27
+ next = wrapper.firstElementChild;
28
+ }
29
+ else if (event.key === 'End') {
30
+ next = wrapper.lastElementChild;
31
+ }
32
+ next?.focus();
33
+ };
34
+ return (_jsx(Fragment, { children: isMenuOpen && children && (_jsx(MenuWrapper, { role: "menu", "aria-label": "Menu", id: generatedId, ref: ref, onClick: closeMenu, onKeyDown: handleKeyDown, ...rest, children: children })) }));
19
35
  });
20
36
  //# sourceMappingURL=BKJMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BKJMenu.js","sourceRoot":"","sources":["../../../src/components/BKJMenu/BKJMenu.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAM,QAAQ,EAAa,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,CAAC,MAAM,OAAO,GAAsB,UAAU,CAClD,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAe,EAAE;IAC7E,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAgB,EAAE,EAAE;QACtE,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,GAAwB;gBACjC,OAAO,EAAE,GAAG,EAAE;oBACZ,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC/C,SAAS,EAAE,CAAC;gBACd,CAAC;aACF,CAAC;YACF,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,QAAQ,cACN,UAAU,IAAI,QAAQ,IAAI,CACzB,KAAC,WAAW,IAAC,IAAI,EAAC,MAAM,gBAAY,MAAM,EAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,KAAM,KAAK,YACjF,aAAa,GACF,CACf,GACQ,CACZ,CAAC;AACJ,CAAC,CACF,CAAC"}
1
+ {"version":3,"file":"BKJMenu.js","sourceRoot":"","sources":["../../../src/components/BKJMenu/BKJMenu.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAM,QAAQ,EAAiB,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,OAAO,GAAsB,UAAU,CAClD,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,EAAe,EAAE;IAC5E,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC;IAE5B,MAAM,aAAa,GAAG,CAAC,KAAoC,EAAE,EAAE;QAC7D,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;QAEnB,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC/C,SAAS,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO;QAC/D,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;QAC3C,IAAI,IAAI,GAAmB,IAAI,CAAC;QAEhC,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YAC9B,IAAI,GAAG,MAAM,CAAC,kBAAkB,IAAI,OAAO,CAAC,iBAAiB,CAAC;QAChE,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,GAAG,MAAM,CAAC,sBAAsB,IAAI,OAAO,CAAC,gBAAgB,CAAC;QACnE,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;YAChC,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACnC,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YAC/B,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;QAClC,CAAC;QAEA,IAA2B,EAAE,KAAK,EAAE,CAAC;IACxC,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,QAAQ,cACN,UAAU,IAAI,QAAQ,IAAI,CACzB,KAAC,WAAW,IACV,IAAI,EAAC,MAAM,gBACA,MAAM,EACjB,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,aAAa,KACpB,IAAI,YAEP,QAAQ,GACG,CACf,GACQ,CACZ,CAAC;AACJ,CAAC,CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BKJMenu.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BKJMenu.test.d.ts","sourceRoot":"","sources":["../../../src/components/BKJMenu/BKJMenu.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,180 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { screen } from '@testing-library/react';
3
+ import userEvent from '@testing-library/user-event';
4
+ import { renderAndCheckA11y, renderWithTheme } from '../../test-utils/index.js';
5
+ import { BKJMenu } from './BKJMenu.js';
6
+ import { BKJMenuItem } from '../BKJMenuItem/BKJMenuItem.js';
7
+ const noop = () => { };
8
+ const ThreeItems = () => (_jsxs(BKJMenu, { isMenuOpen: true, closeMenu: noop, children: [_jsx(BKJMenuItem, { children: "One" }), _jsx(BKJMenuItem, { children: "Two" }), _jsx(BKJMenuItem, { children: "Three" })] }));
9
+ describe('BKJMenu', () => {
10
+ describe('Accessibility', () => {
11
+ it('open menu with 3 menuitems is axe-clean', async () => {
12
+ const { axeResults } = await renderAndCheckA11y(_jsx(ThreeItems, {}));
13
+ expect(axeResults).toHaveNoViolations();
14
+ });
15
+ it('closed menu does not render wrapper (axe-clean)', async () => {
16
+ const { axeResults } = await renderAndCheckA11y(_jsx(BKJMenu, { isMenuOpen: false, closeMenu: noop, children: _jsx(BKJMenuItem, { children: "Hidden" }) }));
17
+ expect(axeResults).toHaveNoViolations();
18
+ expect(screen.queryByRole('menu')).toBeNull();
19
+ });
20
+ it('consumer-supplied aria-labelledby is axe-clean', async () => {
21
+ const { axeResults } = await renderAndCheckA11y(_jsxs(_Fragment, { children: [_jsx("h2", { id: "lbl", children: "Heading" }), _jsx(BKJMenu, { "aria-labelledby": "lbl", isMenuOpen: true, closeMenu: noop, children: _jsx(BKJMenuItem, { children: "One" }) })] }));
22
+ expect(axeResults).toHaveNoViolations();
23
+ });
24
+ });
25
+ describe('Container ARIA', () => {
26
+ it('default render carries role="menu" and aria-label="Menu"', () => {
27
+ renderWithTheme(_jsx(ThreeItems, {}));
28
+ const wrapper = screen.getByRole('menu');
29
+ expect(wrapper).toHaveAttribute('aria-label', 'Menu');
30
+ expect(wrapper).not.toHaveAttribute('aria-labelledby');
31
+ });
32
+ it('consumer-supplied role="menubar" overrides default', () => {
33
+ renderWithTheme(_jsx(BKJMenu, { role: "menubar", isMenuOpen: true, closeMenu: noop, children: _jsx(BKJMenuItem, { children: "One" }) }));
34
+ expect(screen.getByRole('menubar')).toBeTruthy();
35
+ });
36
+ it('consumer-supplied aria-labelledby is forwarded to the wrapper', () => {
37
+ renderWithTheme(_jsxs(_Fragment, { children: [_jsx("h2", { id: "x", children: "Heading" }), _jsx(BKJMenu, { "aria-labelledby": "x", isMenuOpen: true, closeMenu: noop, children: _jsx(BKJMenuItem, { children: "One" }) })] }));
38
+ expect(screen.getByRole('menu')).toHaveAttribute('aria-labelledby', 'x');
39
+ });
40
+ it('consumer-supplied aria-label overrides the default', () => {
41
+ renderWithTheme(_jsx(BKJMenu, { "aria-label": "Account actions", isMenuOpen: true, closeMenu: noop, children: _jsx(BKJMenuItem, { children: "One" }) }));
42
+ expect(screen.getByRole('menu', { name: 'Account actions' })).toHaveAttribute('aria-label', 'Account actions');
43
+ });
44
+ it('default render emits non-empty auto-generated id', () => {
45
+ renderWithTheme(_jsx(ThreeItems, {}));
46
+ expect(screen.getByRole('menu').id.length).toBeGreaterThan(0);
47
+ });
48
+ it('two instances produce different auto-ids', () => {
49
+ renderWithTheme(_jsxs(_Fragment, { children: [_jsx(BKJMenu, { isMenuOpen: true, closeMenu: noop, children: _jsx(BKJMenuItem, { children: "A" }) }), _jsx(BKJMenu, { isMenuOpen: true, closeMenu: noop, children: _jsx(BKJMenuItem, { children: "B" }) })] }));
50
+ const menus = screen.getAllByRole('menu');
51
+ expect(menus[0].id).not.toEqual(menus[1].id);
52
+ });
53
+ it('consumer-supplied id overrides auto-generated', () => {
54
+ renderWithTheme(_jsx(BKJMenu, { id: "custom-id", isMenuOpen: true, closeMenu: noop, children: _jsx(BKJMenuItem, { children: "One" }) }));
55
+ expect(screen.getByRole('menu').id).toBe('custom-id');
56
+ });
57
+ });
58
+ describe('Click behaviour', () => {
59
+ it('clicking a menuitem calls closeMenu', async () => {
60
+ const user = userEvent.setup();
61
+ const closeMenu = jest.fn();
62
+ renderWithTheme(_jsx(BKJMenu, { isMenuOpen: true, closeMenu: closeMenu, children: _jsx(BKJMenuItem, { children: "One" }) }));
63
+ await user.click(screen.getByRole('menuitem'));
64
+ expect(closeMenu).toHaveBeenCalledTimes(1);
65
+ });
66
+ it('clicking a menuitem also calls the consumer onClick', async () => {
67
+ const user = userEvent.setup();
68
+ const closeMenu = jest.fn();
69
+ const onClick = jest.fn();
70
+ renderWithTheme(_jsx(BKJMenu, { isMenuOpen: true, closeMenu: closeMenu, children: _jsx(BKJMenuItem, { onClick: onClick, children: "One" }) }));
71
+ await user.click(screen.getByRole('menuitem'));
72
+ expect(onClick).toHaveBeenCalledTimes(1);
73
+ expect(closeMenu).toHaveBeenCalledTimes(1);
74
+ });
75
+ it('Enter on a focused menuitem calls closeMenu', async () => {
76
+ const user = userEvent.setup();
77
+ const closeMenu = jest.fn();
78
+ renderWithTheme(_jsx(BKJMenu, { isMenuOpen: true, closeMenu: closeMenu, children: _jsx(BKJMenuItem, { children: "One" }) }));
79
+ screen.getByRole('menuitem').focus();
80
+ await user.keyboard('{Enter}');
81
+ expect(closeMenu).toHaveBeenCalledTimes(1);
82
+ });
83
+ it('Space on a focused menuitem calls closeMenu', async () => {
84
+ const user = userEvent.setup();
85
+ const closeMenu = jest.fn();
86
+ renderWithTheme(_jsx(BKJMenu, { isMenuOpen: true, closeMenu: closeMenu, children: _jsx(BKJMenuItem, { children: "One" }) }));
87
+ screen.getByRole('menuitem').focus();
88
+ await user.keyboard(' ');
89
+ expect(closeMenu).toHaveBeenCalledTimes(1);
90
+ });
91
+ });
92
+ describe('Keyboard navigation', () => {
93
+ it('ArrowDown moves focus to next item', async () => {
94
+ const user = userEvent.setup();
95
+ renderWithTheme(_jsx(ThreeItems, {}));
96
+ const items = screen.getAllByRole('menuitem');
97
+ items[0].focus();
98
+ await user.keyboard('{ArrowDown}');
99
+ expect(items[1]).toHaveFocus();
100
+ });
101
+ it('ArrowDown wraps from last to first', async () => {
102
+ const user = userEvent.setup();
103
+ renderWithTheme(_jsx(ThreeItems, {}));
104
+ const items = screen.getAllByRole('menuitem');
105
+ items[2].focus();
106
+ await user.keyboard('{ArrowDown}');
107
+ expect(items[0]).toHaveFocus();
108
+ });
109
+ it('ArrowUp wraps from first to last', async () => {
110
+ const user = userEvent.setup();
111
+ renderWithTheme(_jsx(ThreeItems, {}));
112
+ const items = screen.getAllByRole('menuitem');
113
+ items[0].focus();
114
+ await user.keyboard('{ArrowUp}');
115
+ expect(items[2]).toHaveFocus();
116
+ });
117
+ it('Home jumps to first item', async () => {
118
+ const user = userEvent.setup();
119
+ renderWithTheme(_jsx(ThreeItems, {}));
120
+ const items = screen.getAllByRole('menuitem');
121
+ items[2].focus();
122
+ await user.keyboard('{Home}');
123
+ expect(items[0]).toHaveFocus();
124
+ });
125
+ it('End jumps to last item', async () => {
126
+ const user = userEvent.setup();
127
+ renderWithTheme(_jsx(ThreeItems, {}));
128
+ const items = screen.getAllByRole('menuitem');
129
+ items[0].focus();
130
+ await user.keyboard('{End}');
131
+ expect(items[2]).toHaveFocus();
132
+ });
133
+ it('Arrow / Home / End call preventDefault', async () => {
134
+ const user = userEvent.setup();
135
+ const captured = {};
136
+ const onKeyDown = (e) => {
137
+ e.persist();
138
+ captured[e.key] = e;
139
+ };
140
+ renderWithTheme(_jsxs(BKJMenu, { isMenuOpen: true, closeMenu: noop, onKeyDown: onKeyDown, children: [_jsx(BKJMenuItem, { children: "One" }), _jsx(BKJMenuItem, { children: "Two" })] }));
141
+ const items = screen.getAllByRole('menuitem');
142
+ items[0].focus();
143
+ await user.keyboard('{ArrowDown}');
144
+ await user.keyboard('{ArrowUp}');
145
+ await user.keyboard('{Home}');
146
+ await user.keyboard('{End}');
147
+ expect(captured['ArrowDown']?.defaultPrevented).toBe(true);
148
+ expect(captured['ArrowUp']?.defaultPrevented).toBe(true);
149
+ expect(captured['Home']?.defaultPrevented).toBe(true);
150
+ expect(captured['End']?.defaultPrevented).toBe(true);
151
+ });
152
+ it('Escape and character keys do not call preventDefault at wrapper level', async () => {
153
+ const user = userEvent.setup();
154
+ const captured = {};
155
+ const onKeyDown = (e) => {
156
+ e.persist();
157
+ captured[e.key] = e;
158
+ };
159
+ renderWithTheme(_jsx(BKJMenu, { isMenuOpen: true, closeMenu: noop, onKeyDown: onKeyDown, children: _jsx(BKJMenuItem, { children: "One" }) }));
160
+ screen.getByRole('menuitem').focus();
161
+ await user.keyboard('{Escape}');
162
+ await user.keyboard('a');
163
+ expect(captured['Escape']?.defaultPrevented).toBe(false);
164
+ expect(captured['a']?.defaultPrevented).toBe(false);
165
+ });
166
+ it('consumer onKeyDown can short-circuit built-in nav', async () => {
167
+ const user = userEvent.setup();
168
+ const onKeyDown = (e) => {
169
+ if (e.key === 'ArrowDown')
170
+ e.preventDefault();
171
+ };
172
+ renderWithTheme(_jsxs(BKJMenu, { isMenuOpen: true, closeMenu: noop, onKeyDown: onKeyDown, children: [_jsx(BKJMenuItem, { children: "One" }), _jsx(BKJMenuItem, { children: "Two" })] }));
173
+ const items = screen.getAllByRole('menuitem');
174
+ items[0].focus();
175
+ await user.keyboard('{ArrowDown}');
176
+ expect(items[0]).toHaveFocus();
177
+ });
178
+ });
179
+ });
180
+ //# sourceMappingURL=BKJMenu.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BKJMenu.test.js","sourceRoot":"","sources":["../../../src/components/BKJMenu/BKJMenu.test.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bookjane2/bookjane-design-library",
3
- "version": "9.0.34",
3
+ "version": "9.0.36",
4
4
  "main": "./lib/index.js",
5
5
  "typings": "./lib/index.d.ts",
6
6
  "engines": {