@clicoh/orion-library 1.2.0-beta.7 → 1.2.0-beta.8
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/dist/components/01-atoms/IconButton/IconButton.d.ts +28 -0
- package/dist/components/01-atoms/IconButton/IconButton.d.ts.map +1 -0
- package/dist/components/01-atoms/IconButton/IconButton.jsx +32 -0
- package/dist/components/01-atoms/IconButton/IconButton.jsx.map +1 -0
- package/dist/components/01-atoms/IconButton/index.d.ts +2 -0
- package/dist/components/01-atoms/IconButton/index.d.ts.map +1 -0
- package/dist/components/01-atoms/IconButton/index.js +2 -0
- package/dist/components/01-atoms/IconButton/index.js.map +1 -0
- package/dist/components/01-atoms/ProgressBar/ProgressBar.d.ts +12 -1
- package/dist/components/01-atoms/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/components/01-atoms/ProgressBar/ProgressBar.jsx +18 -2
- package/dist/components/01-atoms/ProgressBar/ProgressBar.jsx.map +1 -1
- package/dist/components/01-atoms/index.d.ts +1 -0
- package/dist/components/01-atoms/index.d.ts.map +1 -1
- package/dist/components/01-atoms/index.js +1 -0
- package/dist/components/01-atoms/index.js.map +1 -1
- package/dist/components/02-molecules/Accordion/Accordion.d.ts +15 -4
- package/dist/components/02-molecules/Accordion/Accordion.d.ts.map +1 -1
- package/dist/components/02-molecules/Accordion/Accordion.jsx +20 -6
- package/dist/components/02-molecules/Accordion/Accordion.jsx.map +1 -1
- package/dist/components/02-molecules/Accordion/AccordionContext.d.ts +5 -1
- package/dist/components/02-molecules/Accordion/AccordionContext.d.ts.map +1 -1
- package/dist/components/02-molecules/Accordion/AccordionContext.jsx +4 -3
- package/dist/components/02-molecules/Accordion/AccordionContext.jsx.map +1 -1
- package/dist/components/02-molecules/Accordion/AccordionSection.d.ts +2 -1
- package/dist/components/02-molecules/Accordion/AccordionSection.d.ts.map +1 -1
- package/dist/components/02-molecules/Accordion/AccordionSection.jsx +35 -8
- package/dist/components/02-molecules/Accordion/AccordionSection.jsx.map +1 -1
- package/dist/components/02-molecules/Accordion/index.d.ts +1 -0
- package/dist/components/02-molecules/Accordion/index.d.ts.map +1 -1
- package/dist/components/02-molecules/Accordion/index.js.map +1 -1
- package/dist/components/02-molecules/Filter/Filter.d.ts.map +1 -1
- package/dist/components/02-molecules/Filter/Filter.jsx +45 -1
- package/dist/components/02-molecules/Filter/Filter.jsx.map +1 -1
- package/dist/components/02-molecules/ImageViewer/ImageViewer.d.ts +35 -5
- package/dist/components/02-molecules/ImageViewer/ImageViewer.d.ts.map +1 -1
- package/dist/components/02-molecules/ImageViewer/ImageViewer.jsx +54 -13
- package/dist/components/02-molecules/ImageViewer/ImageViewer.jsx.map +1 -1
- package/dist/components/02-molecules/ImageViewer/ImageViewerImage.d.ts +40 -0
- package/dist/components/02-molecules/ImageViewer/ImageViewerImage.d.ts.map +1 -0
- package/dist/components/02-molecules/ImageViewer/ImageViewerImage.jsx +108 -0
- package/dist/components/02-molecules/ImageViewer/ImageViewerImage.jsx.map +1 -0
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.d.ts.map +1 -1
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.jsx +4 -1
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.jsx.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ButtonHTMLAttributes, ComponentProps, ReactNode } from 'react';
|
|
2
|
+
import { Tooltip } from '../Tooltip';
|
|
3
|
+
export type IconButtonProps = {
|
|
4
|
+
icon: ReactNode;
|
|
5
|
+
label: string;
|
|
6
|
+
tooltipPlacement?: ComponentProps<typeof Tooltip>['placement'];
|
|
7
|
+
} & Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'aria-label'>;
|
|
8
|
+
/**
|
|
9
|
+
* Button that shows only an icon, for secondary actions in dense rows (lists,
|
|
10
|
+
* timelines, cards). The `label` is required because the icon alone says
|
|
11
|
+
* nothing to a screen reader or to someone who does not recognise it: it
|
|
12
|
+
* becomes the accessible name and the tooltip shown on hover and focus.
|
|
13
|
+
*
|
|
14
|
+
* @component
|
|
15
|
+
* @example
|
|
16
|
+
* // Example usage of IconButton component
|
|
17
|
+
* <IconButton icon={<FiInfo />} label="See details" onClick={openDetails} />
|
|
18
|
+
*
|
|
19
|
+
* @param {Object} props - The properties of the IconButton component.
|
|
20
|
+
* @param {ReactNode} props.icon - The icon to render. Sized by the button's font size (16px).
|
|
21
|
+
* @param {string} props.label - Accessible name of the button and text of its tooltip.
|
|
22
|
+
* @param {UseFloatingOptions['placement']} [props.tooltipPlacement='top'] - Placement of the tooltip relative to the button.
|
|
23
|
+
* @param {ButtonHTMLAttributes<HTMLButtonElement>} restProps - Additional properties for the button element. `type` defaults to `button`.
|
|
24
|
+
*
|
|
25
|
+
* @returns {ReactNode} The rendered IconButton component.
|
|
26
|
+
*/
|
|
27
|
+
export declare function IconButton({ icon, label, tooltipPlacement, type, ...restProps }: IconButtonProps): ReactNode;
|
|
28
|
+
//# sourceMappingURL=IconButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../../src/components/01-atoms/IconButton/IconButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,cAAc,CAAC,OAAO,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC;CAChE,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC,CAAC;AAE7E;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,gBAAwB,EACxB,IAAe,EACf,GAAG,SAAS,EACb,EAAE,eAAe,GAAG,SAAS,CAuB7B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import clsx from 'clsx';
|
|
2
|
+
import { Tooltip } from '../Tooltip';
|
|
3
|
+
/**
|
|
4
|
+
* Button that shows only an icon, for secondary actions in dense rows (lists,
|
|
5
|
+
* timelines, cards). The `label` is required because the icon alone says
|
|
6
|
+
* nothing to a screen reader or to someone who does not recognise it: it
|
|
7
|
+
* becomes the accessible name and the tooltip shown on hover and focus.
|
|
8
|
+
*
|
|
9
|
+
* @component
|
|
10
|
+
* @example
|
|
11
|
+
* // Example usage of IconButton component
|
|
12
|
+
* <IconButton icon={<FiInfo />} label="See details" onClick={openDetails} />
|
|
13
|
+
*
|
|
14
|
+
* @param {Object} props - The properties of the IconButton component.
|
|
15
|
+
* @param {ReactNode} props.icon - The icon to render. Sized by the button's font size (16px).
|
|
16
|
+
* @param {string} props.label - Accessible name of the button and text of its tooltip.
|
|
17
|
+
* @param {UseFloatingOptions['placement']} [props.tooltipPlacement='top'] - Placement of the tooltip relative to the button.
|
|
18
|
+
* @param {ButtonHTMLAttributes<HTMLButtonElement>} restProps - Additional properties for the button element. `type` defaults to `button`.
|
|
19
|
+
*
|
|
20
|
+
* @returns {ReactNode} The rendered IconButton component.
|
|
21
|
+
*/
|
|
22
|
+
export function IconButton({ icon, label, tooltipPlacement = 'top', type = 'button', ...restProps }) {
|
|
23
|
+
const className = clsx('flex items-center justify-center rounded-sm p-2 text-base transition-colors', 'text-gray-1 disabled:text-gray-3 not-disabled:hover:bg-black not-disabled:hover:text-white disabled:cursor-not-allowed', 'dark:text-gray-5 dark:disabled:text-gray-2 dark:not-disabled:hover:bg-white dark:not-disabled:hover:text-black', 'focus-visible:ring-lavender dark:focus-visible:ring-lavender-dark focus-visible:ring-2 focus-visible:outline-none', restProps.className);
|
|
24
|
+
return (<Tooltip message={label} placement={tooltipPlacement}>
|
|
25
|
+
<button {...restProps} type={type} aria-label={label} className={className}>
|
|
26
|
+
<span aria-hidden="true" className="flex">
|
|
27
|
+
{icon}
|
|
28
|
+
</span>
|
|
29
|
+
</button>
|
|
30
|
+
</Tooltip>);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=IconButton.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IconButton.jsx","sourceRoot":"","sources":["../../../../src/components/01-atoms/IconButton/IconButton.tsx"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAQrC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,EACL,gBAAgB,GAAG,KAAK,EACxB,IAAI,GAAG,QAAQ,EACf,GAAG,SAAS,EACI;IAChB,MAAM,SAAS,GAAG,IAAI,CACpB,6EAA6E,EAC7E,wHAAwH,EACxH,gHAAgH,EAChH,mHAAmH,EACnH,SAAS,CAAC,SAAS,CACpB,CAAC;IAEF,OAAO,CACL,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,CACnD;MAAA,CAAC,MAAM,CACL,IAAI,SAAS,CAAC,CACd,IAAI,CAAC,CAAC,IAAI,CAAC,CACX,UAAU,CAAC,CAAC,KAAK,CAAC,CAClB,SAAS,CAAC,CAAC,SAAS,CAAC,CAErB;QAAA,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CACvC;UAAA,CAAC,IAAI,CACP;QAAA,EAAE,IAAI,CACR;MAAA,EAAE,MAAM,CACV;IAAA,EAAE,OAAO,CAAC,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/01-atoms/IconButton/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/01-atoms/IconButton/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
export type ProgressBarModifier = 'default' | 'success' | 'warning' | 'error';
|
|
2
3
|
export type ProgressBarProps = {
|
|
3
4
|
/** Progress between 0 and 100. Omit it for an indeterminate bar. */
|
|
4
5
|
value?: number;
|
|
5
6
|
/** Accessible name of the operation being tracked. */
|
|
6
7
|
ariaLabel: string;
|
|
8
|
+
/** Color of the fill. Defaults to the brand accent. */
|
|
9
|
+
modifier?: ProgressBarModifier;
|
|
7
10
|
} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'role'>;
|
|
8
11
|
/**
|
|
9
12
|
* Thin linear progress bar. With `value` it fills from the left up to that
|
|
@@ -12,6 +15,9 @@ export type ProgressBarProps = {
|
|
|
12
15
|
* where a line reads better than a ring, and of `Spinner` for waits that
|
|
13
16
|
* deserve a headline and copy under them.
|
|
14
17
|
*
|
|
18
|
+
* `modifier` colors the fill to grade the value (a score, a quota). Color is
|
|
19
|
+
* never the only signal: pair it with the value or a label in text.
|
|
20
|
+
*
|
|
15
21
|
* @component
|
|
16
22
|
* @example
|
|
17
23
|
* // Indeterminate
|
|
@@ -21,11 +27,16 @@ export type ProgressBarProps = {
|
|
|
21
27
|
* // Determinate
|
|
22
28
|
* <ProgressBar value={64} ariaLabel="Upload" />
|
|
23
29
|
*
|
|
30
|
+
* @example
|
|
31
|
+
* // Graded value
|
|
32
|
+
* <ProgressBar value={72} modifier="warning" ariaLabel="Match score" />
|
|
33
|
+
*
|
|
24
34
|
* @param {Object} props - The properties of the ProgressBar component.
|
|
25
35
|
* @param {number} [props.value] - Progress between 0 and 100. Omit for indeterminate.
|
|
26
36
|
* @param {string} props.ariaLabel - Accessible name for the progress bar.
|
|
37
|
+
* @param {'default' | 'success' | 'warning' | 'error'} [props.modifier='default'] - Color of the fill.
|
|
27
38
|
*
|
|
28
39
|
* @returns {ReactNode} The rendered ProgressBar component.
|
|
29
40
|
*/
|
|
30
|
-
export declare function ProgressBar({ value, ariaLabel, ...restProps }: ProgressBarProps): ReactNode;
|
|
41
|
+
export declare function ProgressBar({ value, ariaLabel, modifier, ...restProps }: ProgressBarProps): ReactNode;
|
|
31
42
|
//# sourceMappingURL=ProgressBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../../../src/components/01-atoms/ProgressBar/ProgressBar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../../../src/components/01-atoms/ProgressBar/ProgressBar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC;AAe9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,SAAS,EACT,QAAoB,EACpB,GAAG,SAAS,EACb,EAAE,gBAAgB,GAAG,SAAS,CA6B9B"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import clsx from 'clsx';
|
|
2
|
+
// `warning` uses the amber family: the yellow `warning` token sits near 1.4:1
|
|
3
|
+
// against the track, below the 3:1 a graphic needs to be told apart.
|
|
4
|
+
const styleMap = {
|
|
5
|
+
default: 'bg-lavender dark:bg-lavender-dark',
|
|
6
|
+
success: 'bg-success dark:bg-success-dark',
|
|
7
|
+
warning: 'bg-amber dark:bg-amber-dark',
|
|
8
|
+
error: 'bg-error dark:bg-error-dark',
|
|
9
|
+
};
|
|
2
10
|
function clamp(value) {
|
|
3
11
|
return Math.min(100, Math.max(0, value));
|
|
4
12
|
}
|
|
@@ -9,6 +17,9 @@ function clamp(value) {
|
|
|
9
17
|
* where a line reads better than a ring, and of `Spinner` for waits that
|
|
10
18
|
* deserve a headline and copy under them.
|
|
11
19
|
*
|
|
20
|
+
* `modifier` colors the fill to grade the value (a score, a quota). Color is
|
|
21
|
+
* never the only signal: pair it with the value or a label in text.
|
|
22
|
+
*
|
|
12
23
|
* @component
|
|
13
24
|
* @example
|
|
14
25
|
* // Indeterminate
|
|
@@ -18,17 +29,22 @@ function clamp(value) {
|
|
|
18
29
|
* // Determinate
|
|
19
30
|
* <ProgressBar value={64} ariaLabel="Upload" />
|
|
20
31
|
*
|
|
32
|
+
* @example
|
|
33
|
+
* // Graded value
|
|
34
|
+
* <ProgressBar value={72} modifier="warning" ariaLabel="Match score" />
|
|
35
|
+
*
|
|
21
36
|
* @param {Object} props - The properties of the ProgressBar component.
|
|
22
37
|
* @param {number} [props.value] - Progress between 0 and 100. Omit for indeterminate.
|
|
23
38
|
* @param {string} props.ariaLabel - Accessible name for the progress bar.
|
|
39
|
+
* @param {'default' | 'success' | 'warning' | 'error'} [props.modifier='default'] - Color of the fill.
|
|
24
40
|
*
|
|
25
41
|
* @returns {ReactNode} The rendered ProgressBar component.
|
|
26
42
|
*/
|
|
27
|
-
export function ProgressBar({ value, ariaLabel, ...restProps }) {
|
|
43
|
+
export function ProgressBar({ value, ariaLabel, modifier = 'default', ...restProps }) {
|
|
28
44
|
const isDeterminate = typeof value === 'number';
|
|
29
45
|
const percent = isDeterminate ? clamp(value) : undefined;
|
|
30
46
|
return (<div {...restProps} role="progressbar" aria-label={ariaLabel} aria-valuemin={0} aria-valuemax={100} aria-valuenow={percent} className={clsx('bg-gray-6 dark:bg-gray-dark-1 h-1 overflow-hidden rounded-full', restProps.className)}>
|
|
31
|
-
<div className={clsx('
|
|
47
|
+
<div className={clsx('h-full rounded-full', styleMap[modifier], isDeterminate
|
|
32
48
|
? 'transition-[width] duration-300 ease-out'
|
|
33
49
|
: 'animate-progress-indeterminate w-2/5 motion-reduce:w-full motion-reduce:animate-none motion-reduce:opacity-60')} style={isDeterminate ? { width: `${percent}%` } : undefined}/>
|
|
34
50
|
</div>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressBar.jsx","sourceRoot":"","sources":["../../../../src/components/01-atoms/ProgressBar/ProgressBar.tsx"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ProgressBar.jsx","sourceRoot":"","sources":["../../../../src/components/01-atoms/ProgressBar/ProgressBar.tsx"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAcxB,8EAA8E;AAC9E,qEAAqE;AACrE,MAAM,QAAQ,GAAwC;IACpD,OAAO,EAAE,mCAAmC;IAC5C,OAAO,EAAE,iCAAiC;IAC1C,OAAO,EAAE,6BAA6B;IACtC,KAAK,EAAE,6BAA6B;CACrC,CAAC;AAEF,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,SAAS,EACT,QAAQ,GAAG,SAAS,EACpB,GAAG,SAAS,EACK;IACjB,MAAM,aAAa,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC;IAChD,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzD,OAAO,CACL,CAAC,GAAG,CACF,IAAI,SAAS,CAAC,CACd,IAAI,CAAC,aAAa,CAClB,UAAU,CAAC,CAAC,SAAS,CAAC,CACtB,aAAa,CAAC,CAAC,CAAC,CAAC,CACjB,aAAa,CAAC,CAAC,GAAG,CAAC,CACnB,aAAa,CAAC,CAAC,OAAO,CAAC,CACvB,SAAS,CAAC,CAAC,IAAI,CACb,gEAAgE,EAChE,SAAS,CAAC,SAAS,CACpB,CAAC,CAEF;MAAA,CAAC,GAAG,CACF,SAAS,CAAC,CAAC,IAAI,CACb,qBAAqB,EACrB,QAAQ,CAAC,QAAQ,CAAC,EAClB,aAAa;YACX,CAAC,CAAC,0CAA0C;YAC5C,CAAC,CAAC,+GAA+G,CACpH,CAAC,CACF,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAEhE;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/01-atoms/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/01-atoms/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/01-atoms/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/01-atoms/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { ReactElement, ReactNode } from 'react';
|
|
2
2
|
import { AccordionSectionProps } from './AccordionSection';
|
|
3
|
+
import { type AccordionModifier } from './AccordionContext';
|
|
4
|
+
export type { AccordionModifier };
|
|
3
5
|
type AccordionProps = {
|
|
4
6
|
children: ReactElement<AccordionSectionProps> | ReactElement<AccordionSectionProps>[];
|
|
5
7
|
className?: string;
|
|
8
|
+
modifier?: AccordionModifier;
|
|
9
|
+
defaultActivated?: string[];
|
|
6
10
|
};
|
|
7
11
|
/**
|
|
8
12
|
* Accordion component for displaying a list of collapsible sections.
|
|
@@ -11,16 +15,23 @@ type AccordionProps = {
|
|
|
11
15
|
* @example
|
|
12
16
|
* // Example usage of Accordion component
|
|
13
17
|
* <Accordion className="custom-class">
|
|
14
|
-
* <AccordionSection title="Section 1">Content 1</AccordionSection>
|
|
15
|
-
* <AccordionSection title="Section 2">Content 2</AccordionSection>
|
|
18
|
+
* <AccordionSection title="Section 1" id="1">Content 1</AccordionSection>
|
|
19
|
+
* <AccordionSection title="Section 2" id="2">Content 2</AccordionSection>
|
|
20
|
+
* </Accordion>
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Flat headers, with the first section open on mount
|
|
24
|
+
* <Accordion modifier="plain" defaultActivated={['1']}>
|
|
25
|
+
* <AccordionSection title="Section 1" id="1">Content 1</AccordionSection>
|
|
16
26
|
* </Accordion>
|
|
17
27
|
*
|
|
18
28
|
* @param {Object} props - The properties of the Accordion component.
|
|
19
29
|
* @param {ReactElement<AccordionSectionProps> | ReactElement<AccordionSectionProps>[]} props.children - The AccordionSection components to be displayed within the Accordion.
|
|
20
30
|
* @param {string} [props.className] - Optional additional class names for the Accordion container.
|
|
31
|
+
* @param {AccordionModifier} [props.modifier='pill'] - `pill` draws each header as a pill with a bottom border; `plain` draws a flat header and separates the sections with a rule.
|
|
32
|
+
* @param {string[]} [props.defaultActivated=[]] - Ids of the sections that start open. Read on mount only; afterwards the user toggles them.
|
|
21
33
|
*
|
|
22
34
|
* @returns {ReactNode} The rendered Accordion component.
|
|
23
35
|
*/
|
|
24
|
-
export declare function Accordion({ children, className }: AccordionProps): ReactNode;
|
|
25
|
-
export {};
|
|
36
|
+
export declare function Accordion({ children, className, modifier, defaultActivated, }: AccordionProps): ReactNode;
|
|
26
37
|
//# sourceMappingURL=Accordion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/Accordion.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/Accordion.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,KAAK,cAAc,GAAG;IACpB,QAAQ,EACJ,YAAY,CAAC,qBAAqB,CAAC,GACnC,YAAY,CAAC,qBAAqB,CAAC,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAOF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,QAAiB,EACjB,gBAAgB,GACjB,EAAE,cAAc,GAAG,SAAS,CAW5B"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { AccordionContextProvider } from './AccordionContext';
|
|
3
|
+
import { AccordionContextProvider, } from './AccordionContext';
|
|
4
4
|
import clsx from 'clsx';
|
|
5
|
+
const styleMap = {
|
|
6
|
+
pill: 'gap-3',
|
|
7
|
+
plain: 'divide-gray-5 dark:divide-gray-1 divide-y',
|
|
8
|
+
};
|
|
5
9
|
/**
|
|
6
10
|
* Accordion component for displaying a list of collapsible sections.
|
|
7
11
|
*
|
|
@@ -9,19 +13,29 @@ import clsx from 'clsx';
|
|
|
9
13
|
* @example
|
|
10
14
|
* // Example usage of Accordion component
|
|
11
15
|
* <Accordion className="custom-class">
|
|
12
|
-
* <AccordionSection title="Section 1">Content 1</AccordionSection>
|
|
13
|
-
* <AccordionSection title="Section 2">Content 2</AccordionSection>
|
|
16
|
+
* <AccordionSection title="Section 1" id="1">Content 1</AccordionSection>
|
|
17
|
+
* <AccordionSection title="Section 2" id="2">Content 2</AccordionSection>
|
|
18
|
+
* </Accordion>
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // Flat headers, with the first section open on mount
|
|
22
|
+
* <Accordion modifier="plain" defaultActivated={['1']}>
|
|
23
|
+
* <AccordionSection title="Section 1" id="1">Content 1</AccordionSection>
|
|
14
24
|
* </Accordion>
|
|
15
25
|
*
|
|
16
26
|
* @param {Object} props - The properties of the Accordion component.
|
|
17
27
|
* @param {ReactElement<AccordionSectionProps> | ReactElement<AccordionSectionProps>[]} props.children - The AccordionSection components to be displayed within the Accordion.
|
|
18
28
|
* @param {string} [props.className] - Optional additional class names for the Accordion container.
|
|
29
|
+
* @param {AccordionModifier} [props.modifier='pill'] - `pill` draws each header as a pill with a bottom border; `plain` draws a flat header and separates the sections with a rule.
|
|
30
|
+
* @param {string[]} [props.defaultActivated=[]] - Ids of the sections that start open. Read on mount only; afterwards the user toggles them.
|
|
19
31
|
*
|
|
20
32
|
* @returns {ReactNode} The rendered Accordion component.
|
|
21
33
|
*/
|
|
22
|
-
export function Accordion({ children, className }) {
|
|
23
|
-
return (<div className={clsx('grid
|
|
24
|
-
<AccordionContextProvider
|
|
34
|
+
export function Accordion({ children, className, modifier = 'pill', defaultActivated, }) {
|
|
35
|
+
return (<div className={clsx('grid', styleMap[modifier], className)}>
|
|
36
|
+
<AccordionContextProvider defaultActivated={defaultActivated} modifier={modifier}>
|
|
37
|
+
{children}
|
|
38
|
+
</AccordionContextProvider>
|
|
25
39
|
</div>);
|
|
26
40
|
}
|
|
27
41
|
//# sourceMappingURL=Accordion.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/Accordion.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAkC,MAAM,OAAO,CAAC;AAEvD,OAAO,
|
|
1
|
+
{"version":3,"file":"Accordion.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/Accordion.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAkC,MAAM,OAAO,CAAC;AAEvD,OAAO,EAEL,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AAaxB,MAAM,QAAQ,GAAsC;IAClD,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,2CAA2C;CACnD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,QAAQ,GAAG,MAAM,EACjB,gBAAgB,GACD;IACf,OAAO,CACL,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC,CAC1D;MAAA,CAAC,wBAAwB,CACvB,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CACnC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAEnB;QAAA,CAAC,QAAQ,CACX;MAAA,EAAE,wBAAwB,CAC5B;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
export type AccordionModifier = 'pill' | 'plain';
|
|
1
2
|
export interface AccordionContextProps {
|
|
2
3
|
activated: string[];
|
|
3
4
|
toggleId: (id: string) => void;
|
|
5
|
+
modifier: AccordionModifier;
|
|
4
6
|
}
|
|
5
|
-
export declare function AccordionContextProvider({ children, }: {
|
|
7
|
+
export declare function AccordionContextProvider({ children, defaultActivated, modifier, }: {
|
|
6
8
|
readonly children: React.ReactNode;
|
|
9
|
+
readonly defaultActivated?: string[];
|
|
10
|
+
readonly modifier?: AccordionModifier;
|
|
7
11
|
}): import("react").JSX.Element;
|
|
8
12
|
export declare function useAccordionContext(): AccordionContextProps;
|
|
9
13
|
//# sourceMappingURL=AccordionContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionContext.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/AccordionContext.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"AccordionContext.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/AccordionContext.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAMD,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,gBAAqB,EACrB,QAAiB,GAClB,EAAE;IACD,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CACvC,+BAyBA;AAED,wBAAgB,mBAAmB,0BAUlC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { createContext, useContext, useMemo, useState } from 'react';
|
|
3
3
|
const AccordionContext = createContext(undefined);
|
|
4
|
-
export function AccordionContextProvider({ children, }) {
|
|
5
|
-
const [activated, setActivated] = useState(
|
|
4
|
+
export function AccordionContextProvider({ children, defaultActivated = [], modifier = 'pill', }) {
|
|
5
|
+
const [activated, setActivated] = useState(defaultActivated);
|
|
6
6
|
const stableActivated = useMemo(() => [...activated], [activated]);
|
|
7
7
|
const toggleId = (id) => {
|
|
8
8
|
if (activated.includes(id)) {
|
|
@@ -15,7 +15,8 @@ export function AccordionContextProvider({ children, }) {
|
|
|
15
15
|
const value = useMemo(() => ({
|
|
16
16
|
activated: stableActivated,
|
|
17
17
|
toggleId,
|
|
18
|
-
|
|
18
|
+
modifier,
|
|
19
|
+
}), [stableActivated, modifier]);
|
|
19
20
|
return (<AccordionContext.Provider value={value}>
|
|
20
21
|
{children}
|
|
21
22
|
</AccordionContext.Provider>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionContext.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/AccordionContext.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AccordionContext.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/AccordionContext.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAUrE,MAAM,gBAAgB,GAAG,aAAa,CACpC,SAAS,CACV,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,EACvC,QAAQ,EACR,gBAAgB,GAAG,EAAE,EACrB,QAAQ,GAAG,MAAM,GAKlB;IACC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAW,gBAAgB,CAAC,CAAC;IACvE,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAE,EAAE;QAC9B,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,CAAC,GAAG,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC;QACL,SAAS,EAAE,eAAe;QAC1B,QAAQ;QACR,QAAQ;KACT,CAAC,EACF,CAAC,eAAe,EAAE,QAAQ,CAAC,CAC5B,CAAC;IAEF,OAAO,CACL,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CACtC;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -6,6 +6,7 @@ export type AccordionSectionProps = {
|
|
|
6
6
|
};
|
|
7
7
|
/**
|
|
8
8
|
* AccordionSection component for displaying a collapsible section within an Accordion.
|
|
9
|
+
* The header takes the `modifier` of the parent Accordion.
|
|
9
10
|
*
|
|
10
11
|
* @component
|
|
11
12
|
* @example
|
|
@@ -17,7 +18,7 @@ export type AccordionSectionProps = {
|
|
|
17
18
|
* @param {Object} props - The properties of the AccordionSection component.
|
|
18
19
|
* @param {string} props.title - The title of the section.
|
|
19
20
|
* @param {ReactNode} props.children - The content to be displayed within the section.
|
|
20
|
-
* @param {string} props.id - The unique identifier for the section.
|
|
21
|
+
* @param {string} props.id - The unique identifier for the section, also used by the Accordion `defaultActivated` prop.
|
|
21
22
|
*
|
|
22
23
|
* @returns {ReactNode} The rendered AccordionSection component.
|
|
23
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionSection.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/AccordionSection.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EAMV,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AccordionSection.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/AccordionSection.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EAMV,MAAM,OAAO,CAAC;AAOf,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AA0BF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,EAAE,GACH,EAAE,qBAAqB,GAAG,SAAS,CA8EnC"}
|
|
@@ -2,9 +2,28 @@
|
|
|
2
2
|
import clsx from 'clsx';
|
|
3
3
|
import { useCallback, useEffect, useId, useRef, useState, } from 'react';
|
|
4
4
|
import { FaChevronDown } from 'react-icons/fa';
|
|
5
|
-
import { useAccordionContext } from './AccordionContext';
|
|
5
|
+
import { useAccordionContext, } from './AccordionContext';
|
|
6
|
+
const triggerStyleMap = {
|
|
7
|
+
pill: 'mb-2 rounded-full border-b-[3px] px-4 py-2',
|
|
8
|
+
plain: 'rounded-sm py-3',
|
|
9
|
+
};
|
|
10
|
+
const triggerStateStyleMap = {
|
|
11
|
+
pill: {
|
|
12
|
+
active: 'border-lavender dark:border-lavender-dark',
|
|
13
|
+
inactive: 'border-gray-2 dark:border-gray-1',
|
|
14
|
+
},
|
|
15
|
+
plain: {
|
|
16
|
+
active: '',
|
|
17
|
+
inactive: '',
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
const chevronStyleMap = {
|
|
21
|
+
pill: '',
|
|
22
|
+
plain: 'size-3 text-gray-1 dark:text-gray-2',
|
|
23
|
+
};
|
|
6
24
|
/**
|
|
7
25
|
* AccordionSection component for displaying a collapsible section within an Accordion.
|
|
26
|
+
* The header takes the `modifier` of the parent Accordion.
|
|
8
27
|
*
|
|
9
28
|
* @component
|
|
10
29
|
* @example
|
|
@@ -16,7 +35,7 @@ import { useAccordionContext } from './AccordionContext';
|
|
|
16
35
|
* @param {Object} props - The properties of the AccordionSection component.
|
|
17
36
|
* @param {string} props.title - The title of the section.
|
|
18
37
|
* @param {ReactNode} props.children - The content to be displayed within the section.
|
|
19
|
-
* @param {string} props.id - The unique identifier for the section.
|
|
38
|
+
* @param {string} props.id - The unique identifier for the section, also used by the Accordion `defaultActivated` prop.
|
|
20
39
|
*
|
|
21
40
|
* @returns {ReactNode} The rendered AccordionSection component.
|
|
22
41
|
*/
|
|
@@ -24,7 +43,8 @@ export function AccordionSection({ title, children, id, }) {
|
|
|
24
43
|
const context = useAccordionContext();
|
|
25
44
|
const isActivated = context.activated.includes(id);
|
|
26
45
|
const contentRef = useRef(null);
|
|
27
|
-
|
|
46
|
+
// A section that starts open renders at full height instead of animating in.
|
|
47
|
+
const [maxHeight, setMaxHeight] = useState(isActivated ? 'none' : '0px');
|
|
28
48
|
const generatedId = useId();
|
|
29
49
|
const triggerId = `${generatedId}-trigger`;
|
|
30
50
|
const panelId = `${generatedId}-panel`;
|
|
@@ -41,15 +61,22 @@ export function AccordionSection({ title, children, id, }) {
|
|
|
41
61
|
window.addEventListener('resize', updateHeight);
|
|
42
62
|
return () => window.removeEventListener('resize', updateHeight);
|
|
43
63
|
}, [updateHeight]);
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
const content = contentRef.current?.firstElementChild;
|
|
66
|
+
if (!content || typeof ResizeObserver === 'undefined') {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const observer = new ResizeObserver(updateHeight);
|
|
70
|
+
observer.observe(content);
|
|
71
|
+
return () => observer.disconnect();
|
|
72
|
+
}, [updateHeight]);
|
|
44
73
|
return (<section className="text-black dark:text-white">
|
|
45
|
-
<button type="button" id={triggerId} aria-expanded={isActivated} aria-controls={panelId} className={clsx('focus-visible:ring-lavender
|
|
46
|
-
? 'border-lavender dark:border-lavender-dark'
|
|
47
|
-
: 'border-gray-2 dark:border-gray-1')} onClick={() => context.toggleId(id)}>
|
|
74
|
+
<button type="button" id={triggerId} aria-expanded={isActivated} aria-controls={panelId} className={clsx('focus-visible:ring-lavender flex w-full cursor-pointer items-center justify-between text-left text-sm font-semibold transition-colors duration-300 ease-in-out focus-visible:ring-2 focus-visible:outline-none', triggerStyleMap[context.modifier], triggerStateStyleMap[context.modifier][isActivated ? 'active' : 'inactive'])} onClick={() => context.toggleId(id)}>
|
|
48
75
|
<span>{title}</span>
|
|
49
|
-
<FaChevronDown aria-hidden className={clsx('transition-transform duration-300 ease-in-out', isActivated && 'rotate-180 transform')}/>
|
|
76
|
+
<FaChevronDown aria-hidden className={clsx('transition-transform duration-300 ease-in-out', chevronStyleMap[context.modifier], isActivated && 'rotate-180 transform')}/>
|
|
50
77
|
</button>
|
|
51
78
|
<div ref={contentRef} id={panelId} role="region" aria-labelledby={triggerId} hidden={!isActivated} style={{ maxHeight }} className="overflow-hidden text-black transition-all duration-300 ease-in-out dark:text-white">
|
|
52
|
-
{children}
|
|
79
|
+
<div>{children}</div>
|
|
53
80
|
</div>
|
|
54
81
|
</section>);
|
|
55
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionSection.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/AccordionSection.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAEL,WAAW,EACX,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"AccordionSection.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/AccordionSection.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/02-molecules/Accordion/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filter.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Filter/Filter.tsx"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"Filter.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Filter/Filter.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAef,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE5D,KAAK,YAAY,GAAG;IAClB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,IAAI,CAAC;IAChE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IACpD,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,IAAI,CAAC;KACtB,CAAC;IACF,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,IAAI,CAAC;KACzD,CAAC;IACF,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,MAAM,CAAC,EACrB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,MAAM,EACN,eAAe,EACf,iBAAiB,EACjB,kBAAyB,GAC1B,EAAE,YAAY,GAAG,SAAS,CAod1B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import clsx from 'clsx';
|
|
3
|
-
import { useEffect, useState } from 'react';
|
|
3
|
+
import { useEffect, useMemo, useState, } from 'react';
|
|
4
4
|
import { Each, Show } from '../../00-base';
|
|
5
5
|
import { Button, Checkbox, Input, MultiSelect, Paragraph, Radio, Select, Switch, } from '../../01-atoms';
|
|
6
6
|
import { Autocomplete } from '../Autocomplete';
|
|
@@ -87,6 +87,50 @@ export function Filter({ filtersEnabledText, submitButton, resetButton, inputs,
|
|
|
87
87
|
return previousValue;
|
|
88
88
|
}, {}));
|
|
89
89
|
const [autocompleteOptions, setAutocompleteOptions] = useState({});
|
|
90
|
+
const optionsFingerprint = useMemo(() => JSON.stringify(inputArr.map(([name, { config }]) => [
|
|
91
|
+
name,
|
|
92
|
+
config.map(({ type, options }) => ({ type, options })),
|
|
93
|
+
])), [inputs]);
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
setFilters((prev) => {
|
|
96
|
+
let changed = false;
|
|
97
|
+
const next = { ...prev };
|
|
98
|
+
for (const [name, { config }] of inputArr) {
|
|
99
|
+
config.forEach((inputConfig, index) => {
|
|
100
|
+
const filterKey = config.length > 1 ? `${name}__${index}` : name;
|
|
101
|
+
const value = next[filterKey];
|
|
102
|
+
if (value === undefined || value === null || value === '')
|
|
103
|
+
return;
|
|
104
|
+
const { type, options } = inputConfig;
|
|
105
|
+
if ((type === 'multiselect' || type === 'autocomplete') &&
|
|
106
|
+
Array.isArray(options) &&
|
|
107
|
+
Array.isArray(value)) {
|
|
108
|
+
const allowed = new Set(options.map((option) => String(option.value)));
|
|
109
|
+
const pruned = value.filter((option) => allowed.has(String(option.value)));
|
|
110
|
+
if (pruned.length !== value.length) {
|
|
111
|
+
changed = true;
|
|
112
|
+
if (pruned.length)
|
|
113
|
+
next[filterKey] = pruned;
|
|
114
|
+
else
|
|
115
|
+
delete next[filterKey];
|
|
116
|
+
}
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if ((type === 'select' || type === 'radio') &&
|
|
120
|
+
options &&
|
|
121
|
+
typeof options === 'object' &&
|
|
122
|
+
!Array.isArray(options) &&
|
|
123
|
+
typeof value === 'string') {
|
|
124
|
+
if (!(value in options)) {
|
|
125
|
+
changed = true;
|
|
126
|
+
delete next[filterKey];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
return changed ? next : prev;
|
|
132
|
+
});
|
|
133
|
+
}, [optionsFingerprint]);
|
|
90
134
|
const handlerChange = (name, value) => {
|
|
91
135
|
setFilters((prevValues) => {
|
|
92
136
|
if (!value || (Array.isArray(value) && !value.length)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filter.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Filter/Filter.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Filter.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Filter/Filter.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
import { type TImageCrop } from './ImageViewerImage';
|
|
3
|
+
export type { TImageCrop } from './ImageViewerImage';
|
|
2
4
|
export type TImageView = {
|
|
3
5
|
id: string;
|
|
4
6
|
label: string;
|
|
5
7
|
src: string;
|
|
6
8
|
alt: string;
|
|
7
9
|
indicator?: ReactNode;
|
|
10
|
+
crop?: TImageCrop;
|
|
8
11
|
};
|
|
12
|
+
export type TImageViewerLayout = 'tabs' | 'split';
|
|
9
13
|
export type TImageViewerLabels = {
|
|
10
14
|
zoomIn: string;
|
|
11
15
|
zoomOut: string;
|
|
@@ -16,6 +20,7 @@ export type TImageViewerLabels = {
|
|
|
16
20
|
type ImageViewerProps = {
|
|
17
21
|
views: TImageView[];
|
|
18
22
|
labels: TImageViewerLabels;
|
|
23
|
+
layout?: TImageViewerLayout;
|
|
19
24
|
title?: ReactNode;
|
|
20
25
|
emptyState?: ReactNode;
|
|
21
26
|
activeId?: string;
|
|
@@ -36,6 +41,14 @@ type ImageViewerProps = {
|
|
|
36
41
|
* Renders `emptyState` while `views` is empty, and disables the toolbar with it,
|
|
37
42
|
* so the frame keeps its size instead of collapsing.
|
|
38
43
|
*
|
|
44
|
+
* `layout="split"` is for comparing different subjects instead: every view
|
|
45
|
+
* gets its own pane with its label, side by side from `sm` and stacked below
|
|
46
|
+
* it. The toolbar acts on all panes at once, so both stay at the same scale,
|
|
47
|
+
* and there is no active view.
|
|
48
|
+
*
|
|
49
|
+
* A view's `crop` draws only that region of its image, fitted to the frame
|
|
50
|
+
* like the whole image would be — a face inside a document, for instance.
|
|
51
|
+
*
|
|
39
52
|
* @component
|
|
40
53
|
* @example
|
|
41
54
|
* const [viewId, setViewId] = useState('front');
|
|
@@ -64,17 +77,34 @@ type ImageViewerProps = {
|
|
|
64
77
|
* emptyState={<p>Nothing uploaded yet</p>}
|
|
65
78
|
* />
|
|
66
79
|
*
|
|
80
|
+
* @example
|
|
81
|
+
* <ImageViewer
|
|
82
|
+
* layout="split"
|
|
83
|
+
* title="Compared images"
|
|
84
|
+
* views={[
|
|
85
|
+
* { id: 'photo', label: 'Photo', src: '/photo.jpg', alt: 'Photo taken today' },
|
|
86
|
+
* {
|
|
87
|
+
* id: 'card',
|
|
88
|
+
* label: 'ID card',
|
|
89
|
+
* src: '/card.jpg',
|
|
90
|
+
* alt: 'Face on the ID card',
|
|
91
|
+
* crop: { left: 0.08, top: 0.2, width: 0.3, height: 0.5 },
|
|
92
|
+
* },
|
|
93
|
+
* ]}
|
|
94
|
+
* labels={labels}
|
|
95
|
+
* />
|
|
96
|
+
*
|
|
67
97
|
* @param {Object} props - The properties of the ImageViewer component.
|
|
68
|
-
* @param {TImageView[]} props.views - Images to display.
|
|
98
|
+
* @param {TImageView[]} props.views - Images to display. In `tabs`, more than one renders a tab per view; in `split`, a pane per view. A view's optional `indicator` sits after its label and becomes part of the tab's accessible name, so give it its own (for an icon, `role="img"` and `aria-label`). In `tabs` with a single view there are no tabs, so no indicator is shown. A view's optional `crop` (`left`, `top`, `width`, `height` as fractions from 0 to 1 of the image) shows only that region; a crop outside the image is clamped to it, and one with no area left falls back to the whole image.
|
|
69
99
|
* @param {TImageViewerLabels} props.labels - Accessible names of the toolbar actions.
|
|
100
|
+
* @param {TImageViewerLayout} [props.layout='tabs'] - `tabs` shows one view at a time; `split` shows every view at once, one pane each.
|
|
70
101
|
* @param {ReactNode} [props.title] - Optional heading rendered on the left of the toolbar.
|
|
71
102
|
* @param {ReactNode} [props.emptyState] - Content rendered when there is no image.
|
|
72
|
-
* @param {string} [props.activeId] - Id of the view to show. Makes the viewer controlled; an id that matches no view falls back to the first one.
|
|
73
|
-
* @param {(id: string) => void} [props.onViewChange] - Called with the id of the tab the user picks, only when it differs from the active one.
|
|
103
|
+
* @param {string} [props.activeId] - Id of the view to show. Makes the viewer controlled; an id that matches no view falls back to the first one. Ignored in `split`.
|
|
104
|
+
* @param {(id: string) => void} [props.onViewChange] - Called with the id of the tab the user picks, only when it differs from the active one. Never called in `split`.
|
|
74
105
|
* @param {HTMLAttributes<HTMLElement>} [props.restProps] - Additional attributes for the root element.
|
|
75
106
|
*
|
|
76
107
|
* @returns {ReactNode} The rendered ImageViewer component.
|
|
77
108
|
*/
|
|
78
|
-
export declare function ImageViewer({ views, labels, title, emptyState, activeId, onViewChange, ...restProps }: ImageViewerProps): ReactNode;
|
|
79
|
-
export {};
|
|
109
|
+
export declare function ImageViewer({ views, labels, layout, title, emptyState, activeId, onViewChange, ...restProps }: ImageViewerProps): ReactNode;
|
|
80
110
|
//# sourceMappingURL=ImageViewer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageViewer.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/ImageViewer/ImageViewer.tsx"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ImageViewer.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/ImageViewer/ImageViewer.tsx"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAYf,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEvE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,CAAC;AAElD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;AAiB5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,MAAM,EACN,MAAe,EACf,KAAK,EACL,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,GAAG,SAAS,EACb,EAAE,gBAAgB,GAAG,SAAS,CAqP9B"}
|
|
@@ -6,6 +6,7 @@ import { MdFullscreen, MdFullscreenExit, MdRotateRight, MdZoomIn, MdZoomOut, } f
|
|
|
6
6
|
import { Each, Show } from '../../00-base';
|
|
7
7
|
import { List, Paragraph } from '../../01-atoms';
|
|
8
8
|
import { TabItem } from '../Tab/TabItem';
|
|
9
|
+
import { ImageViewerImage } from './ImageViewerImage';
|
|
9
10
|
const MIN_ZOOM = 1;
|
|
10
11
|
const MAX_ZOOM = 3;
|
|
11
12
|
const ZOOM_STEP = 0.5;
|
|
@@ -28,6 +29,14 @@ const TOOL_CLASSNAME = 'hover:bg-gray-5 focus-visible:ring-lavender disabled:tex
|
|
|
28
29
|
* Renders `emptyState` while `views` is empty, and disables the toolbar with it,
|
|
29
30
|
* so the frame keeps its size instead of collapsing.
|
|
30
31
|
*
|
|
32
|
+
* `layout="split"` is for comparing different subjects instead: every view
|
|
33
|
+
* gets its own pane with its label, side by side from `sm` and stacked below
|
|
34
|
+
* it. The toolbar acts on all panes at once, so both stay at the same scale,
|
|
35
|
+
* and there is no active view.
|
|
36
|
+
*
|
|
37
|
+
* A view's `crop` draws only that region of its image, fitted to the frame
|
|
38
|
+
* like the whole image would be — a face inside a document, for instance.
|
|
39
|
+
*
|
|
31
40
|
* @component
|
|
32
41
|
* @example
|
|
33
42
|
* const [viewId, setViewId] = useState('front');
|
|
@@ -56,18 +65,36 @@ const TOOL_CLASSNAME = 'hover:bg-gray-5 focus-visible:ring-lavender disabled:tex
|
|
|
56
65
|
* emptyState={<p>Nothing uploaded yet</p>}
|
|
57
66
|
* />
|
|
58
67
|
*
|
|
68
|
+
* @example
|
|
69
|
+
* <ImageViewer
|
|
70
|
+
* layout="split"
|
|
71
|
+
* title="Compared images"
|
|
72
|
+
* views={[
|
|
73
|
+
* { id: 'photo', label: 'Photo', src: '/photo.jpg', alt: 'Photo taken today' },
|
|
74
|
+
* {
|
|
75
|
+
* id: 'card',
|
|
76
|
+
* label: 'ID card',
|
|
77
|
+
* src: '/card.jpg',
|
|
78
|
+
* alt: 'Face on the ID card',
|
|
79
|
+
* crop: { left: 0.08, top: 0.2, width: 0.3, height: 0.5 },
|
|
80
|
+
* },
|
|
81
|
+
* ]}
|
|
82
|
+
* labels={labels}
|
|
83
|
+
* />
|
|
84
|
+
*
|
|
59
85
|
* @param {Object} props - The properties of the ImageViewer component.
|
|
60
|
-
* @param {TImageView[]} props.views - Images to display.
|
|
86
|
+
* @param {TImageView[]} props.views - Images to display. In `tabs`, more than one renders a tab per view; in `split`, a pane per view. A view's optional `indicator` sits after its label and becomes part of the tab's accessible name, so give it its own (for an icon, `role="img"` and `aria-label`). In `tabs` with a single view there are no tabs, so no indicator is shown. A view's optional `crop` (`left`, `top`, `width`, `height` as fractions from 0 to 1 of the image) shows only that region; a crop outside the image is clamped to it, and one with no area left falls back to the whole image.
|
|
61
87
|
* @param {TImageViewerLabels} props.labels - Accessible names of the toolbar actions.
|
|
88
|
+
* @param {TImageViewerLayout} [props.layout='tabs'] - `tabs` shows one view at a time; `split` shows every view at once, one pane each.
|
|
62
89
|
* @param {ReactNode} [props.title] - Optional heading rendered on the left of the toolbar.
|
|
63
90
|
* @param {ReactNode} [props.emptyState] - Content rendered when there is no image.
|
|
64
|
-
* @param {string} [props.activeId] - Id of the view to show. Makes the viewer controlled; an id that matches no view falls back to the first one.
|
|
65
|
-
* @param {(id: string) => void} [props.onViewChange] - Called with the id of the tab the user picks, only when it differs from the active one.
|
|
91
|
+
* @param {string} [props.activeId] - Id of the view to show. Makes the viewer controlled; an id that matches no view falls back to the first one. Ignored in `split`.
|
|
92
|
+
* @param {(id: string) => void} [props.onViewChange] - Called with the id of the tab the user picks, only when it differs from the active one. Never called in `split`.
|
|
66
93
|
* @param {HTMLAttributes<HTMLElement>} [props.restProps] - Additional attributes for the root element.
|
|
67
94
|
*
|
|
68
95
|
* @returns {ReactNode} The rendered ImageViewer component.
|
|
69
96
|
*/
|
|
70
|
-
export function ImageViewer({ views, labels, title, emptyState, activeId, onViewChange, ...restProps }) {
|
|
97
|
+
export function ImageViewer({ views, labels, layout = 'tabs', title, emptyState, activeId, onViewChange, ...restProps }) {
|
|
71
98
|
const [internalIndex, setInternalIndex] = useState(0);
|
|
72
99
|
const [transform, setTransform] = useState(INITIAL_TRANSFORM);
|
|
73
100
|
const [isFullscreen, setIsFullscreen] = useState(false);
|
|
@@ -98,7 +125,10 @@ export function ImageViewer({ views, labels, title, emptyState, activeId, onView
|
|
|
98
125
|
: internalIndex;
|
|
99
126
|
const activeView = views[activeIndex] ?? views[0];
|
|
100
127
|
const hasImage = Boolean(activeView);
|
|
128
|
+
const isSplit = layout === 'split';
|
|
129
|
+
const hasTabs = !isSplit && views.length > 1;
|
|
101
130
|
const { zoom, rotation } = transform;
|
|
131
|
+
const imageStyle = { transform: `rotate(${rotation}deg) scale(${zoom})` };
|
|
102
132
|
/**
|
|
103
133
|
* En modo controlado la vista puede cambiar sin pasar por `selectView`, asi
|
|
104
134
|
* que el reinicio se ata a la vista activa y no al clic. Guardar el zoom por
|
|
@@ -154,7 +184,7 @@ export function ImageViewer({ views, labels, title, emptyState, activeId, onView
|
|
|
154
184
|
</div>
|
|
155
185
|
|
|
156
186
|
<Show>
|
|
157
|
-
<Show.When isTrue={
|
|
187
|
+
<Show.When isTrue={hasTabs}>
|
|
158
188
|
<List role="tablist" aria-orientation="horizontal" orientation="horizontal" className="border-gray-5 dark:border-gray-1 flex-none items-end gap-6 border-b px-4">
|
|
159
189
|
<Each of={views} render={({ id, label, indicator }, index) => (<li key={id} role="presentation">
|
|
160
190
|
<TabItem id={`${generatedId}-tab-${index}`} aria-controls={`${generatedId}-panel`} aria-selected={index === activeIndex} tabIndex={index === activeIndex ? 0 : -1} isActive={index === activeIndex} onClick={() => selectView(index)} className="pb-2">
|
|
@@ -170,16 +200,27 @@ export function ImageViewer({ views, labels, title, emptyState, activeId, onView
|
|
|
170
200
|
</Show.When>
|
|
171
201
|
</Show>
|
|
172
202
|
|
|
173
|
-
<div id={`${generatedId}-panel`} role={
|
|
203
|
+
<div id={`${generatedId}-panel`} role={hasTabs ? 'tabpanel' : undefined} aria-labelledby={hasTabs ? `${generatedId}-tab-${activeIndex}` : undefined} className="bg-gray-7 dark:bg-black-2 flex min-h-0 flex-1 items-center justify-center overflow-hidden p-5">
|
|
174
204
|
<Show>
|
|
205
|
+
<Show.When isTrue={hasImage && isSplit}>
|
|
206
|
+
<div className="grid h-full w-full auto-rows-fr grid-cols-1 gap-5 sm:auto-cols-fr sm:grid-flow-col sm:grid-cols-none sm:grid-rows-1">
|
|
207
|
+
<Each of={views} render={({ id, label, indicator, src, alt, crop }) => (<figure key={id} className="flex min-h-0 min-w-0 flex-col gap-2">
|
|
208
|
+
<figcaption className="flex flex-none items-center gap-1.5">
|
|
209
|
+
<Paragraph size="subtitle-2" className="dark:text-white">
|
|
210
|
+
{label}
|
|
211
|
+
</Paragraph>
|
|
212
|
+
{!!indicator && (<span className="flex flex-none items-center">
|
|
213
|
+
{indicator}
|
|
214
|
+
</span>)}
|
|
215
|
+
</figcaption>
|
|
216
|
+
<div className="flex min-h-0 flex-1 items-center justify-center overflow-hidden">
|
|
217
|
+
<ImageViewerImage src={src} alt={alt} crop={crop} style={imageStyle}/>
|
|
218
|
+
</div>
|
|
219
|
+
</figure>)}/>
|
|
220
|
+
</div>
|
|
221
|
+
</Show.When>
|
|
175
222
|
<Show.When isTrue={hasImage}>
|
|
176
|
-
{
|
|
177
|
-
* `next/image` exigiria que cada consumidor declare el dominio de
|
|
178
|
-
* sus imagenes en `remotePatterns`. Estas son cargas de usuario en
|
|
179
|
-
* almacenamiento externo, asi que la lista no se puede conocer.
|
|
180
|
-
*/}
|
|
181
|
-
{/* eslint-disable-next-line @next/next/no-img-element */}
|
|
182
|
-
<img src={activeView?.src} alt={activeView?.alt} style={{ transform: `rotate(${rotation}deg) scale(${zoom})` }} className="max-h-full max-w-full object-contain transition-transform duration-200 ease-out"/>
|
|
223
|
+
{activeView && (<ImageViewerImage key={activeView.id} src={activeView.src} alt={activeView.alt} crop={activeView.crop} style={imageStyle}/>)}
|
|
183
224
|
</Show.When>
|
|
184
225
|
<Show.Else>{emptyState}</Show.Else>
|
|
185
226
|
</Show>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageViewer.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/ImageViewer/ImageViewer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,SAAS,EACT,KAAK,EACL,QAAQ,GAGT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ImageViewer.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/ImageViewer/ImageViewer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,SAAS,EACT,KAAK,EACL,QAAQ,GAGT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAmB,MAAM,oBAAoB,CAAC;AAsCvE,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,iBAAiB,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAEtE,MAAM,cAAc,GAClB,iUAAiU,CAAC;AAEpU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,MAAM,EACN,MAAM,GAAG,MAAM,EACf,KAAK,EACL,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,GAAG,SAAS,EACK;IACjB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAa,iBAAiB,CAAC,CAAC;IAC1E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC;IAE5B;;;;OAIG;IACH,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE3D,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpB,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAClC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC7C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;gBAAE,eAAe,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACpD,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,CAAC;IAC5C,MAAM,WAAW,GAAG,YAAY;QAC9B,CAAC,CAAC,IAAI,CAAC,GAAG,CACN,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,EAC5C,CAAC,CACF;QACH,CAAC,CAAC,aAAa,CAAC;IAClB,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,KAAK,OAAO,CAAC;IACnC,MAAM,OAAO,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IACrC,MAAM,UAAU,GAAG,EAAE,SAAS,EAAE,UAAU,QAAQ,cAAc,IAAI,GAAG,EAAE,CAAC;IAE1E;;;;OAIG;IACH,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACvE,IAAI,UAAU,EAAE,EAAE,KAAK,eAAe,EAAE,CAAC;QACvC,kBAAkB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACnC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,YAAY,CAAC,iBAAiB,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY;YAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,EAAE,KAAK,UAAU,EAAE,EAAE;YAAE,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CACZ,CAAC,OAAO,CACN,IAAI,SAAS,CAAC,CACd,SAAS,CAAC,CAAC,IAAI,CACb,0FAA0F,EAC1F,YAAY,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,SAAS,EACjE,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAChD,CAAC,CAEF;MAAA,CAAC,GAAG,CAAC,SAAS,CAAC,iIAAiI,CAC9I;QAAA,CAAC,IAAI,CACH;UAAA,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAChC;YAAA,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,iBAAiB,CACtD;cAAA,CAAC,KAAK,CACR;YAAA,EAAE,SAAS,CACb;UAAA,EAAE,IAAI,CAAC,IAAI,CACb;QAAA,EAAE,IAAI,CACN;QAAA,CAAC,GAAG,CAAC,SAAS,CAAC,mCAAmC,CAChD;UAAA,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAC3B,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,CACxC,OAAO,CAAC,CAAC,GAAG,EAAE,CACZ,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACzB,GAAG,OAAO;YACV,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,SAAS;SAC/B,CAAC,CACJ,CAAC,CACD,SAAS,CAAC,CAAC,cAAc,CAAC,CAE1B;YAAA,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAC/B;UAAA,EAAE,MAAM,CACR;UAAA,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAC1B,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,CACxC,OAAO,CAAC,CAAC,GAAG,EAAE,CACZ,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACzB,GAAG,OAAO;YACV,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,SAAS;SAC/B,CAAC,CACJ,CAAC,CACD,SAAS,CAAC,CAAC,cAAc,CAAC,CAE1B;YAAA,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAC9B;UAAA,EAAE,MAAM,CACR;UAAA,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,UAAU,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAC1B,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CACpB,OAAO,CAAC,CAAC,GAAG,EAAE,CACZ,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACzB,GAAG,OAAO;YACV,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,GAAG,YAAY,CAAC,GAAG,SAAS;SACxD,CAAC,CACJ,CAAC,CACD,SAAS,CAAC,CAAC,cAAc,CAAC,CAE1B;YAAA,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,EACnC;UAAA,EAAE,MAAM,CACR;UAAA,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,UAAU,CAAC,CACT,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,eAChD,CAAC,CACD,YAAY,CAAC,CAAC,YAAY,CAAC,CAC3B,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CACpB,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CACtD,SAAS,CAAC,CAAC,cAAc,CAAC,CAE1B;YAAA,CAAC,YAAY,CAAC,CAAC,CAAC,CACd,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAG,CACxC,CAAC,CAAC,CAAC,CACF,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,EAAG,CACpC,CACH;UAAA,EAAE,MAAM,CACV;QAAA,EAAE,GAAG,CACP;MAAA,EAAE,GAAG,CAEL;;MAAA,CAAC,IAAI,CACH;QAAA,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CACzB;UAAA,CAAC,IAAI,CACH,IAAI,CAAC,SAAS,CACd,gBAAgB,CAAC,YAAY,CAC7B,WAAW,CAAC,YAAY,CACxB,SAAS,CAAC,0EAA0E,CAEpF;YAAA,CAAC,IAAI,CACH,EAAE,CAAC,CAAC,KAAK,CAAC,CACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAC3C,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAC9B;kBAAA,CAAC,OAAO,CACN,EAAE,CAAC,CAAC,GAAG,WAAW,QAAQ,KAAK,EAAE,CAAC,CAClC,aAAa,CAAC,CAAC,GAAG,WAAW,QAAQ,CAAC,CACtC,aAAa,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CACrC,QAAQ,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzC,QAAQ,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAChC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CACjC,SAAS,CAAC,MAAM,CAEhB;oBAAA,CAAC,IAAI,CAAC,SAAS,CAAC,kCAAkC,CAChD;sBAAA,CAAC,KAAK,CACN;sBAAA,CAAC,CAAC,CAAC,SAAS,IAAI,CACd,CAAC,IAAI,CAAC,SAAS,CAAC,6BAA6B,CAC3C;0BAAA,CAAC,SAAS,CACZ;wBAAA,EAAE,IAAI,CAAC,CACR,CACH;oBAAA,EAAE,IAAI,CACR;kBAAA,EAAE,OAAO,CACX;gBAAA,EAAE,EAAE,CAAC,CACN,CAAC,EAEN;UAAA,EAAE,IAAI,CACR;QAAA,EAAE,IAAI,CAAC,IAAI,CACb;MAAA,EAAE,IAAI,CAEN;;MAAA,CAAC,GAAG,CACF,EAAE,CAAC,CAAC,GAAG,WAAW,QAAQ,CAAC,CAC3B,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CACvC,eAAe,CAAC,CACd,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,QAAQ,WAAW,EAAE,CAAC,CAAC,CAAC,SAClD,CAAC,CACD,SAAS,CAAC,+FAA+F,CAEzG;QAAA,CAAC,IAAI,CACH;UAAA,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,CACrC;YAAA,CAAC,GAAG,CAAC,SAAS,CAAC,qHAAqH,CAClI;cAAA,CAAC,IAAI,CACH,EAAE,CAAC,CAAC,KAAK,CAAC,CACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACpD,CAAC,MAAM,CACL,GAAG,CAAC,CAAC,EAAE,CAAC,CACR,SAAS,CAAC,qCAAqC,CAE/C;oBAAA,CAAC,UAAU,CAAC,SAAS,CAAC,qCAAqC,CACzD;sBAAA,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,iBAAiB,CACtD;wBAAA,CAAC,KAAK,CACR;sBAAA,EAAE,SAAS,CACX;sBAAA,CAAC,CAAC,CAAC,SAAS,IAAI,CACd,CAAC,IAAI,CAAC,SAAS,CAAC,6BAA6B,CAC3C;0BAAA,CAAC,SAAS,CACZ;wBAAA,EAAE,IAAI,CAAC,CACR,CACH;oBAAA,EAAE,UAAU,CACZ;oBAAA,CAAC,GAAG,CAAC,SAAS,CAAC,iEAAiE,CAC9E;sBAAA,CAAC,gBAAgB,CACf,GAAG,CAAC,CAAC,GAAG,CAAC,CACT,GAAG,CAAC,CAAC,GAAG,CAAC,CACT,IAAI,CAAC,CAAC,IAAI,CAAC,CACX,KAAK,CAAC,CAAC,UAAU,CAAC,EAEtB;oBAAA,EAAE,GAAG,CACP;kBAAA,EAAE,MAAM,CAAC,CACV,CAAC,EAEN;YAAA,EAAE,GAAG,CACP;UAAA,EAAE,IAAI,CAAC,IAAI,CACX;UAAA,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAC1B;YAAA,CAAC,UAAU,IAAI,CACb,CAAC,gBAAgB,CACf,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CACnB,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CACpB,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CACpB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CACtB,KAAK,CAAC,CAAC,UAAU,CAAC,EAClB,CACH,CACH;UAAA,EAAE,IAAI,CAAC,IAAI,CACX;UAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,CACpC;QAAA,EAAE,IAAI,CACR;MAAA,EAAE,GAAG,CACP;IAAA,EAAE,OAAO,CAAC,CACX,CAAC;IAEF,IAAI,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC;IAEhC,OAAO,YAAY,CACjB,CAAC,GAAG,CAAC,SAAS,CAAC,qEAAqE,CAClF;MAAA,CAAC,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CACvD;IAAA,EAAE,GAAG,CAAC,EACN,QAAQ,CAAC,IAAI,CACd,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type CSSProperties, type ReactNode } from 'react';
|
|
2
|
+
export type TImageCrop = {
|
|
3
|
+
left: number;
|
|
4
|
+
top: number;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
};
|
|
8
|
+
type ImageViewerImageProps = {
|
|
9
|
+
src: string;
|
|
10
|
+
alt: string;
|
|
11
|
+
crop?: TImageCrop;
|
|
12
|
+
style: CSSProperties;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Image of one `ImageViewer` view, fitted inside its frame. With `crop`, only
|
|
16
|
+
* that region of the image is drawn, scaled to fit the frame the same way the
|
|
17
|
+
* whole image would be.
|
|
18
|
+
*
|
|
19
|
+
* Internal to `ImageViewer`: it is not exported from the library.
|
|
20
|
+
*
|
|
21
|
+
* @component
|
|
22
|
+
* @example
|
|
23
|
+
* <ImageViewerImage
|
|
24
|
+
* src="/document.jpg"
|
|
25
|
+
* alt="Document front"
|
|
26
|
+
* crop={{ left: 0.1, top: 0.2, width: 0.3, height: 0.4 }}
|
|
27
|
+
* style={{ transform: 'rotate(0deg) scale(1)' }}
|
|
28
|
+
* />
|
|
29
|
+
*
|
|
30
|
+
* @param {Object} props - The properties of the ImageViewerImage component.
|
|
31
|
+
* @param {string} props.src - Image URL.
|
|
32
|
+
* @param {string} props.alt - Accessible description of the image.
|
|
33
|
+
* @param {TImageCrop} [props.crop] - Region to show, as fractions (0 to 1) of the image width and height.
|
|
34
|
+
* @param {CSSProperties} props.style - Zoom and rotation computed by the viewer.
|
|
35
|
+
*
|
|
36
|
+
* @returns {ReactNode} The rendered image.
|
|
37
|
+
*/
|
|
38
|
+
export declare function ImageViewerImage({ src, alt, crop, style, }: ImageViewerImageProps): ReactNode;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=ImageViewerImage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageViewerImage.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/ImageViewer/ImageViewerImage.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAEf,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAOF,KAAK,qBAAqB,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AA0DF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,GAAG,EACH,GAAG,EACH,IAAI,EACJ,KAAK,GACN,EAAE,qBAAqB,GAAG,SAAS,CA4DnC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { useEffect, useId, useState, } from 'react';
|
|
4
|
+
const TRANSFORM_CLASSNAME = 'transition-transform duration-200 ease-out';
|
|
5
|
+
const clampFraction = (value) => Math.min(Math.max(value, 0), 1);
|
|
6
|
+
/**
|
|
7
|
+
* Keeps the region inside the image, and drops it when nothing is left to
|
|
8
|
+
* show, so a malformed crop falls back to the whole image.
|
|
9
|
+
*/
|
|
10
|
+
const normalizeCrop = (crop) => {
|
|
11
|
+
if (!crop)
|
|
12
|
+
return null;
|
|
13
|
+
const left = clampFraction(crop.left);
|
|
14
|
+
const top = clampFraction(crop.top);
|
|
15
|
+
const width = clampFraction(crop.left + crop.width) - left;
|
|
16
|
+
const height = clampFraction(crop.top + crop.height) - top;
|
|
17
|
+
return width > 0 && height > 0 ? { left, top, width, height } : null;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* The crop is expressed in fractions, but an SVG `viewBox` needs pixels to keep
|
|
21
|
+
* the region undistorted, so the image is decoded once to read its size.
|
|
22
|
+
*/
|
|
23
|
+
const useNaturalSize = (src, isEnabled) => {
|
|
24
|
+
const [size, setSize] = useState(null);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (!isEnabled)
|
|
27
|
+
return;
|
|
28
|
+
let isCurrent = true;
|
|
29
|
+
const image = new window.Image();
|
|
30
|
+
setSize(null);
|
|
31
|
+
image.onload = () => {
|
|
32
|
+
if (isCurrent) {
|
|
33
|
+
setSize({ width: image.naturalWidth, height: image.naturalHeight });
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
image.onerror = () => {
|
|
37
|
+
if (isCurrent)
|
|
38
|
+
setSize('error');
|
|
39
|
+
};
|
|
40
|
+
image.src = src;
|
|
41
|
+
return () => {
|
|
42
|
+
isCurrent = false;
|
|
43
|
+
image.onload = null;
|
|
44
|
+
image.onerror = null;
|
|
45
|
+
};
|
|
46
|
+
}, [src, isEnabled]);
|
|
47
|
+
return size;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Image of one `ImageViewer` view, fitted inside its frame. With `crop`, only
|
|
51
|
+
* that region of the image is drawn, scaled to fit the frame the same way the
|
|
52
|
+
* whole image would be.
|
|
53
|
+
*
|
|
54
|
+
* Internal to `ImageViewer`: it is not exported from the library.
|
|
55
|
+
*
|
|
56
|
+
* @component
|
|
57
|
+
* @example
|
|
58
|
+
* <ImageViewerImage
|
|
59
|
+
* src="/document.jpg"
|
|
60
|
+
* alt="Document front"
|
|
61
|
+
* crop={{ left: 0.1, top: 0.2, width: 0.3, height: 0.4 }}
|
|
62
|
+
* style={{ transform: 'rotate(0deg) scale(1)' }}
|
|
63
|
+
* />
|
|
64
|
+
*
|
|
65
|
+
* @param {Object} props - The properties of the ImageViewerImage component.
|
|
66
|
+
* @param {string} props.src - Image URL.
|
|
67
|
+
* @param {string} props.alt - Accessible description of the image.
|
|
68
|
+
* @param {TImageCrop} [props.crop] - Region to show, as fractions (0 to 1) of the image width and height.
|
|
69
|
+
* @param {CSSProperties} props.style - Zoom and rotation computed by the viewer.
|
|
70
|
+
*
|
|
71
|
+
* @returns {ReactNode} The rendered image.
|
|
72
|
+
*/
|
|
73
|
+
export function ImageViewerImage({ src, alt, crop, style, }) {
|
|
74
|
+
const region = normalizeCrop(crop);
|
|
75
|
+
const size = useNaturalSize(src, region !== null);
|
|
76
|
+
const clipId = `crop${useId().replace(/[^\w-]/g, '')}`;
|
|
77
|
+
if (!region || size === 'error') {
|
|
78
|
+
return (
|
|
79
|
+
/**
|
|
80
|
+
* `next/image` exigiria que cada consumidor declare el dominio de sus
|
|
81
|
+
* imagenes en `remotePatterns`. Estas son cargas de usuario en
|
|
82
|
+
* almacenamiento externo, asi que la lista no se puede conocer.
|
|
83
|
+
*/
|
|
84
|
+
// eslint-disable-next-line @next/next/no-img-element
|
|
85
|
+
<img src={src} alt={alt} style={style} className={clsx('max-h-full max-w-full object-contain', TRANSFORM_CLASSNAME)}/>);
|
|
86
|
+
}
|
|
87
|
+
if (!size)
|
|
88
|
+
return null;
|
|
89
|
+
const box = {
|
|
90
|
+
x: region.left * size.width,
|
|
91
|
+
y: region.top * size.height,
|
|
92
|
+
width: region.width * size.width,
|
|
93
|
+
height: region.height * size.height,
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* `meet` centers the region but the SVG still paints whatever falls in the
|
|
97
|
+
* letterbox, which is the rest of the image: the clip keeps only the region.
|
|
98
|
+
*/
|
|
99
|
+
return (<svg role="img" aria-label={alt} viewBox={[box.x, box.y, box.width, box.height].join(' ')} preserveAspectRatio="xMidYMid meet" style={style} className={clsx('h-full w-full', TRANSFORM_CLASSNAME)}>
|
|
100
|
+
<defs>
|
|
101
|
+
<clipPath id={clipId}>
|
|
102
|
+
<rect {...box}/>
|
|
103
|
+
</clipPath>
|
|
104
|
+
</defs>
|
|
105
|
+
<image href={src} width={size.width} height={size.height} clipPath={`url(#${clipId})`}/>
|
|
106
|
+
</svg>);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=ImageViewerImage.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageViewerImage.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/ImageViewer/ImageViewerImage.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAGL,SAAS,EACT,KAAK,EACL,QAAQ,GACT,MAAM,OAAO,CAAC;AAqBf,MAAM,mBAAmB,GAAG,4CAA4C,CAAC;AAEzE,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAC9C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAElC;;;GAGG;AACH,MAAM,aAAa,GAAG,CAAC,IAA4B,EAAqB,EAAE;IACxE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC3D,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;IAE3D,OAAO,KAAK,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,cAAc,GAAG,CACrB,GAAW,EACX,SAAkB,EACa,EAAE;IACjC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAgC,IAAI,CAAC,CAAC;IAEtE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC;QACF,KAAK,CAAC,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,SAAS;gBAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC;QACF,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;QAEhB,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,KAAK,CAAC;YAClB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YACpB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;IAErB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,GAAG,EACH,GAAG,EACH,IAAI,EACJ,KAAK,GACiB;IACtB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,KAAK,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC;IAEvD,IAAI,CAAC,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO;QACL;;;;WAIG;QACH,qDAAqD;QACrD,CAAC,GAAG,CACF,GAAG,CAAC,CAAC,GAAG,CAAC,CACT,GAAG,CAAC,CAAC,GAAG,CAAC,CACT,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,SAAS,CAAC,CAAC,IAAI,CACb,sCAAsC,EACtC,mBAAmB,CACpB,CAAC,EACF,CACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,GAAG,GAAG;QACV,CAAC,EAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK;QAC3B,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;KACpC,CAAC;IAEF;;;OAGG;IACH,OAAO,CACL,CAAC,GAAG,CACF,IAAI,CAAC,KAAK,CACV,UAAU,CAAC,CAAC,GAAG,CAAC,CAChB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACzD,mBAAmB,CAAC,eAAe,CACnC,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,SAAS,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC,CAEtD;MAAA,CAAC,IAAI,CACH;QAAA,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CACnB;UAAA,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAChB;QAAA,EAAE,QAAQ,CACZ;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,KAAK,CACJ,IAAI,CAAC,CAAC,GAAG,CAAC,CACV,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAClB,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CACpB,QAAQ,CAAC,CAAC,QAAQ,MAAM,GAAG,CAAC,EAEhC;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideFilterTemplate.d.ts","sourceRoot":"","sources":["../../../../src/components/04-templates/SideFilterTemplate/SideFilterTemplate.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAM5C,KAAK,uBAAuB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACnD,MAAM,EAAE,GAAG,CAAC;IACZ,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,MAAM,EACN,YAAY,EACZ,kBAAyB,GAC1B,EAAE,uBAAuB,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"SideFilterTemplate.d.ts","sourceRoot":"","sources":["../../../../src/components/04-templates/SideFilterTemplate/SideFilterTemplate.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAM5C,KAAK,uBAAuB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACnD,MAAM,EAAE,GAAG,CAAC;IACZ,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,MAAM,EACN,YAAY,EACZ,kBAAyB,GAC1B,EAAE,uBAAuB,GAAG,SAAS,CAoDrC"}
|
|
@@ -43,7 +43,10 @@ export function SideFilterTemplate({ filterCount, handleSetFilter, handledClearF
|
|
|
43
43
|
filtersEnabledText: 'Filtros activos:',
|
|
44
44
|
submitButton: {
|
|
45
45
|
text: 'Aplicar filtros',
|
|
46
|
-
callback:
|
|
46
|
+
callback: (data) => {
|
|
47
|
+
handleSetFilter(data);
|
|
48
|
+
setIsOpen(false);
|
|
49
|
+
},
|
|
47
50
|
},
|
|
48
51
|
resetButton: {
|
|
49
52
|
text: 'Limpiar',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideFilterTemplate.jsx","sourceRoot":"","sources":["../../../../src/components/04-templates/SideFilterTemplate/SideFilterTemplate.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAa,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWlD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,MAAM,EACN,YAAY,EACZ,kBAAkB,GAAG,IAAI,GACD;IACxB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAErD,OAAO,CACL,EACE;MAAA,CAAC,GAAG,CAAC,SAAS,CAAC,oDAAoD,CACjE;QAAA,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CACvB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CACxC;YAAA,CAAC,WAAW,CAAE;UAChB,EAAE,SAAS,CAAC,CACb,CACD;QAAA,CAAC,MAAM,CACL,QAAQ,CAAC,MAAM,CACf,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,AAAD,EAAG,CAAC,CACnC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAC/B,aAAa,CAAC,CAAC,MAAM,CAAC,CACtB,aAAa,CAAC,QAAQ,CAEtB;;QACF,EAAE,MAAM,CACV;MAAA,EAAE,GAAG,CACL;MAAA,CAAC,CAAC,CAAC,MAAM;YACP,YAAY,CACV,CAAC,YAAY,CACX,KAAK,CAAC,SAAS,CACf,aAAa,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CACtC,MAAM,CAAC,CAAC;oBACN,kBAAkB;oBAClB,kBAAkB,EAAE,kBAAkB;oBACtC,YAAY,EAAE;wBACZ,IAAI,EAAE,iBAAiB;wBACvB,QAAQ,EAAE,eAAe;
|
|
1
|
+
{"version":3,"file":"SideFilterTemplate.jsx","sourceRoot":"","sources":["../../../../src/components/04-templates/SideFilterTemplate/SideFilterTemplate.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAa,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWlD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,MAAM,EACN,YAAY,EACZ,kBAAkB,GAAG,IAAI,GACD;IACxB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAErD,OAAO,CACL,EACE;MAAA,CAAC,GAAG,CAAC,SAAS,CAAC,oDAAoD,CACjE;QAAA,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CACvB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CACxC;YAAA,CAAC,WAAW,CAAE;UAChB,EAAE,SAAS,CAAC,CACb,CACD;QAAA,CAAC,MAAM,CACL,QAAQ,CAAC,MAAM,CACf,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,AAAD,EAAG,CAAC,CACnC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAC/B,aAAa,CAAC,CAAC,MAAM,CAAC,CACtB,aAAa,CAAC,QAAQ,CAEtB;;QACF,EAAE,MAAM,CACV;MAAA,EAAE,GAAG,CACL;MAAA,CAAC,CAAC,CAAC,MAAM;YACP,YAAY,CACV,CAAC,YAAY,CACX,KAAK,CAAC,SAAS,CACf,aAAa,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CACtC,MAAM,CAAC,CAAC;oBACN,kBAAkB;oBAClB,kBAAkB,EAAE,kBAAkB;oBACtC,YAAY,EAAE;wBACZ,IAAI,EAAE,iBAAiB;wBACvB,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;4BACjB,eAAe,CAAC,IAAI,CAAC,CAAC;4BACtB,SAAS,CAAC,KAAK,CAAC,CAAC;wBACnB,CAAC;qBACF;oBACD,WAAW,EAAE;wBACX,IAAI,EAAE,SAAS;wBACf,QAAQ,EAAE,kBAAkB;qBAC7B;oBACD,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE;wBACxB,IAAI,YAAY,EAAE,CAAC;4BACjB,YAAY,CAAC,IAAI,CAAC,CAAC;wBACrB,CAAC;oBACH,CAAC;oBACD,MAAM,EAAE,MAAM;iBACf,CAAC,EACF,EACF,QAAQ,CAAC,IAAI,CACd,CACL;IAAA,GAAG,CACJ,CAAC;AACJ,CAAC"}
|