@clicoh/orion-library 1.2.0-beta.25 → 1.2.0-beta.27
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/FileUpload/FileUpload.d.ts +5 -0
- package/dist/components/01-atoms/FileUpload/FileUpload.d.ts.map +1 -1
- package/dist/components/01-atoms/FileUpload/FileUpload.jsx +48 -13
- package/dist/components/01-atoms/FileUpload/FileUpload.jsx.map +1 -1
- package/dist/components/01-atoms/MultiSelect/MultiSelect.d.ts +33 -4
- package/dist/components/01-atoms/MultiSelect/MultiSelect.d.ts.map +1 -1
- package/dist/components/01-atoms/MultiSelect/MultiSelect.jsx +62 -13
- package/dist/components/01-atoms/MultiSelect/MultiSelect.jsx.map +1 -1
- package/dist/components/01-atoms/MultiSelect/index.d.ts +1 -1
- package/dist/components/01-atoms/MultiSelect/index.d.ts.map +1 -1
- package/dist/components/01-atoms/Select/Select.d.ts +1 -1
- package/dist/components/01-atoms/Select/Select.jsx +1 -1
- package/dist/components/01-atoms/Select/SelectList.d.ts +4 -0
- package/dist/components/01-atoms/Select/SelectList.d.ts.map +1 -1
- package/dist/components/01-atoms/Select/SelectList.jsx +8 -2
- package/dist/components/01-atoms/Select/SelectList.jsx.map +1 -1
- package/dist/components/02-molecules/Accordion/AccordionSection.d.ts +17 -1
- package/dist/components/02-molecules/Accordion/AccordionSection.d.ts.map +1 -1
- package/dist/components/02-molecules/Accordion/AccordionSection.jsx +46 -5
- package/dist/components/02-molecules/Accordion/AccordionSection.jsx.map +1 -1
- package/dist/components/02-molecules/DatePicker/DatePicker.d.ts +14 -1
- package/dist/components/02-molecules/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/components/02-molecules/DatePicker/DatePicker.jsx +18 -5
- package/dist/components/02-molecules/DatePicker/DatePicker.jsx.map +1 -1
- package/dist/components/02-molecules/Filter/Filter.d.ts +10 -2
- package/dist/components/02-molecules/Filter/Filter.d.ts.map +1 -1
- package/dist/components/02-molecules/Filter/Filter.jsx +20 -7
- package/dist/components/02-molecules/Filter/Filter.jsx.map +1 -1
- package/dist/components/02-molecules/Filter/index.d.ts +1 -0
- package/dist/components/02-molecules/Filter/index.d.ts.map +1 -1
- package/dist/components/02-molecules/Filter/index.js +1 -0
- package/dist/components/02-molecules/Filter/index.js.map +1 -1
- package/dist/components/02-molecules/Filter/types.d.ts +8 -0
- package/dist/components/02-molecules/Filter/types.d.ts.map +1 -1
- package/dist/components/02-molecules/Filter/utils/getFilterChips.d.ts +9 -2
- package/dist/components/02-molecules/Filter/utils/getFilterChips.d.ts.map +1 -1
- package/dist/components/02-molecules/Filter/utils/getFilterChips.js +15 -2
- package/dist/components/02-molecules/Filter/utils/getFilterChips.js.map +1 -1
- package/dist/components/02-molecules/Filter/utils/removeFilterChip.d.ts +9 -0
- package/dist/components/02-molecules/Filter/utils/removeFilterChip.d.ts.map +1 -0
- package/dist/components/02-molecules/Filter/utils/removeFilterChip.js +13 -0
- package/dist/components/02-molecules/Filter/utils/removeFilterChip.js.map +1 -0
- package/dist/components/02-molecules/FilterChips/FilterChips.d.ts +21 -5
- package/dist/components/02-molecules/FilterChips/FilterChips.d.ts.map +1 -1
- package/dist/components/02-molecules/FilterChips/FilterChips.jsx +22 -6
- package/dist/components/02-molecules/FilterChips/FilterChips.jsx.map +1 -1
- package/dist/components/02-molecules/ImageViewer/ImageViewer.d.ts +45 -4
- package/dist/components/02-molecules/ImageViewer/ImageViewer.d.ts.map +1 -1
- package/dist/components/02-molecules/ImageViewer/ImageViewer.jsx +106 -52
- package/dist/components/02-molecules/ImageViewer/ImageViewer.jsx.map +1 -1
- package/dist/components/02-molecules/ImageViewer/ImageViewerDocument.d.ts +16 -5
- package/dist/components/02-molecules/ImageViewer/ImageViewerDocument.d.ts.map +1 -1
- package/dist/components/02-molecules/ImageViewer/ImageViewerDocument.jsx +30 -13
- package/dist/components/02-molecules/ImageViewer/ImageViewerDocument.jsx.map +1 -1
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.d.ts +7 -1
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.d.ts.map +1 -1
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.jsx +7 -3
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.jsx.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFilterChips.js","sourceRoot":"","sources":["../../../../../src/components/02-molecules/Filter/utils/getFilterChips.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getFilterChips.js","sourceRoot":"","sources":["../../../../../src/components/02-molecules/Filter/utils/getFilterChips.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { OptionType } from '../../../01-atoms';
|
|
2
|
+
import type { TFilterValues } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the filter values without the removed chip. With a `value`, from a
|
|
5
|
+
* per-value chip of `chipPerValue`, only that option leaves its `multiselect`,
|
|
6
|
+
* and the key goes away with the last one. Without it, the whole key goes.
|
|
7
|
+
*/
|
|
8
|
+
export declare const removeFilterChip: (values: Record<string, TFilterValues>, key: string, value?: OptionType["value"]) => Record<string, TFilterValues>;
|
|
9
|
+
//# sourceMappingURL=removeFilterChip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeFilterChip.d.ts","sourceRoot":"","sources":["../../../../../src/components/02-molecules/Filter/utils/removeFilterChip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,WACnB,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAChC,MAAM,UACH,UAAU,CAAC,OAAO,CAAC,KAC1B,MAAM,CAAC,MAAM,EAAE,aAAa,CAQ9B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the filter values without the removed chip. With a `value`, from a
|
|
3
|
+
* per-value chip of `chipPerValue`, only that option leaves its `multiselect`,
|
|
4
|
+
* and the key goes away with the last one. Without it, the whole key goes.
|
|
5
|
+
*/
|
|
6
|
+
export const removeFilterChip = (values, key, value) => {
|
|
7
|
+
const { [key]: current, ...rest } = values;
|
|
8
|
+
if (value === undefined || !Array.isArray(current))
|
|
9
|
+
return rest;
|
|
10
|
+
const remaining = current.filter((option) => option.value !== value);
|
|
11
|
+
return remaining.length ? { ...rest, [key]: remaining } : rest;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=removeFilterChip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeFilterChip.js","sourceRoot":"","sources":["../../../../../src/components/02-molecules/Filter/utils/removeFilterChip.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAAqC,EACrC,GAAW,EACX,KAA2B,EACI,EAAE;IACjC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAE3C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAErE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC,CAAC"}
|
|
@@ -4,11 +4,12 @@ import type { TFilterInputs, TFilterValues } from '../Filter/types';
|
|
|
4
4
|
type FilterChipsProps = {
|
|
5
5
|
inputs: TFilterInputs;
|
|
6
6
|
values: Record<string, TFilterValues>;
|
|
7
|
-
onRemove: (key: string) => void;
|
|
7
|
+
onRemove: (key: string, value?: OptionType['value']) => void;
|
|
8
8
|
onClearAll?: () => void;
|
|
9
9
|
clearAllText?: string;
|
|
10
|
-
removeFilterLabel?: (filterLabel: string) => string;
|
|
10
|
+
removeFilterLabel?: (filterLabel: string, valueLabel?: string) => string;
|
|
11
11
|
extraOptions?: Record<string, OptionType[]>;
|
|
12
|
+
chipPerValue?: boolean;
|
|
12
13
|
} & Omit<HTMLAttributes<HTMLUListElement>, 'children'>;
|
|
13
14
|
/**
|
|
14
15
|
* FilterChips component for rendering the applied filters as removable chips.
|
|
@@ -17,6 +18,11 @@ type FilterChipsProps = {
|
|
|
17
18
|
* the chips read the same inside the panel and outside of it. Renders nothing
|
|
18
19
|
* while no filter is applied.
|
|
19
20
|
*
|
|
21
|
+
* With `chipPerValue`, a `multiselect` with several options selected gives one
|
|
22
|
+
* chip per option (`Country: Mexico`, `Country: Colombia`), and removing one
|
|
23
|
+
* calls `onRemove` with the key and that option's value. `removeFilterChip`
|
|
24
|
+
* applies that removal to the values.
|
|
25
|
+
*
|
|
20
26
|
* @component
|
|
21
27
|
* @example
|
|
22
28
|
* <FilterChips
|
|
@@ -27,18 +33,28 @@ type FilterChipsProps = {
|
|
|
27
33
|
* clearAllText="Limpiar todos"
|
|
28
34
|
* />
|
|
29
35
|
*
|
|
36
|
+
* @example
|
|
37
|
+
* // One chip per selected option
|
|
38
|
+
* <FilterChips
|
|
39
|
+
* inputs={config}
|
|
40
|
+
* values={values}
|
|
41
|
+
* chipPerValue
|
|
42
|
+
* onRemove={(key, value) => setValues(removeFilterChip(values, key, value))}
|
|
43
|
+
* />
|
|
44
|
+
*
|
|
30
45
|
* @param {Object} props - The properties of the FilterChips component.
|
|
31
46
|
* @param {TFilterInputs} props.inputs - Filter configuration used to resolve the labels.
|
|
32
47
|
* @param {Object} props.values - Applied filter values, keyed by filter key.
|
|
33
|
-
* @param {Function} props.onRemove - Callback triggered with the key of the removed filter.
|
|
48
|
+
* @param {Function} props.onRemove - Callback triggered with the key of the removed filter and, on a per-value chip, the value of the removed option.
|
|
34
49
|
* @param {Function} [props.onClearAll] - Callback that clears every filter. The action is hidden when omitted.
|
|
35
50
|
* @param {string} [props.clearAllText] - Text of the clear all action.
|
|
36
|
-
* @param {Function} [props.removeFilterLabel] - Builds the accessible label of each remove button.
|
|
51
|
+
* @param {Function} [props.removeFilterLabel] - Builds the accessible label of each remove button, from the filter label and, on a per-value chip, the option label.
|
|
37
52
|
* @param {Object} [props.extraOptions] - Asynchronously loaded options, keyed by filter key.
|
|
53
|
+
* @param {boolean} [props.chipPerValue=false] - One chip per selected option of a `multiselect`, instead of one chip per control.
|
|
38
54
|
* @param {HTMLAttributes<HTMLUListElement>} [props.restProps] - Additional attributes for the list element.
|
|
39
55
|
*
|
|
40
56
|
* @returns {ReactNode} The rendered FilterChips component.
|
|
41
57
|
*/
|
|
42
|
-
export declare function FilterChips({ inputs, values, onRemove, onClearAll, clearAllText, removeFilterLabel, extraOptions, ...restProps }: FilterChipsProps): ReactNode;
|
|
58
|
+
export declare function FilterChips({ inputs, values, onRemove, onClearAll, clearAllText, removeFilterLabel, extraOptions, chipPerValue, ...restProps }: FilterChipsProps): ReactNode;
|
|
43
59
|
export {};
|
|
44
60
|
//# sourceMappingURL=FilterChips.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterChips.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/FilterChips/FilterChips.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5D,OAAO,EAAQ,KAAK,UAAU,EAAa,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGpE,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"FilterChips.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/FilterChips/FilterChips.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5D,OAAO,EAAQ,KAAK,UAAU,EAAa,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGpE,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,MAAM,EACN,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,GAAG,SAAS,EACb,EAAE,gBAAgB,GAAG,SAAS,CAiD9B"}
|
|
@@ -11,6 +11,11 @@ import { getFilterChips } from '../Filter/utils/getFilterChips';
|
|
|
11
11
|
* the chips read the same inside the panel and outside of it. Renders nothing
|
|
12
12
|
* while no filter is applied.
|
|
13
13
|
*
|
|
14
|
+
* With `chipPerValue`, a `multiselect` with several options selected gives one
|
|
15
|
+
* chip per option (`Country: Mexico`, `Country: Colombia`), and removing one
|
|
16
|
+
* calls `onRemove` with the key and that option's value. `removeFilterChip`
|
|
17
|
+
* applies that removal to the values.
|
|
18
|
+
*
|
|
14
19
|
* @component
|
|
15
20
|
* @example
|
|
16
21
|
* <FilterChips
|
|
@@ -21,27 +26,38 @@ import { getFilterChips } from '../Filter/utils/getFilterChips';
|
|
|
21
26
|
* clearAllText="Limpiar todos"
|
|
22
27
|
* />
|
|
23
28
|
*
|
|
29
|
+
* @example
|
|
30
|
+
* // One chip per selected option
|
|
31
|
+
* <FilterChips
|
|
32
|
+
* inputs={config}
|
|
33
|
+
* values={values}
|
|
34
|
+
* chipPerValue
|
|
35
|
+
* onRemove={(key, value) => setValues(removeFilterChip(values, key, value))}
|
|
36
|
+
* />
|
|
37
|
+
*
|
|
24
38
|
* @param {Object} props - The properties of the FilterChips component.
|
|
25
39
|
* @param {TFilterInputs} props.inputs - Filter configuration used to resolve the labels.
|
|
26
40
|
* @param {Object} props.values - Applied filter values, keyed by filter key.
|
|
27
|
-
* @param {Function} props.onRemove - Callback triggered with the key of the removed filter.
|
|
41
|
+
* @param {Function} props.onRemove - Callback triggered with the key of the removed filter and, on a per-value chip, the value of the removed option.
|
|
28
42
|
* @param {Function} [props.onClearAll] - Callback that clears every filter. The action is hidden when omitted.
|
|
29
43
|
* @param {string} [props.clearAllText] - Text of the clear all action.
|
|
30
|
-
* @param {Function} [props.removeFilterLabel] - Builds the accessible label of each remove button.
|
|
44
|
+
* @param {Function} [props.removeFilterLabel] - Builds the accessible label of each remove button, from the filter label and, on a per-value chip, the option label.
|
|
31
45
|
* @param {Object} [props.extraOptions] - Asynchronously loaded options, keyed by filter key.
|
|
46
|
+
* @param {boolean} [props.chipPerValue=false] - One chip per selected option of a `multiselect`, instead of one chip per control.
|
|
32
47
|
* @param {HTMLAttributes<HTMLUListElement>} [props.restProps] - Additional attributes for the list element.
|
|
33
48
|
*
|
|
34
49
|
* @returns {ReactNode} The rendered FilterChips component.
|
|
35
50
|
*/
|
|
36
|
-
export function FilterChips({ inputs, values, onRemove, onClearAll, clearAllText, removeFilterLabel, extraOptions, ...restProps }) {
|
|
37
|
-
const chips = getFilterChips({ inputs, values, extraOptions });
|
|
51
|
+
export function FilterChips({ inputs, values, onRemove, onClearAll, clearAllText, removeFilterLabel, extraOptions, chipPerValue, ...restProps }) {
|
|
52
|
+
const chips = getFilterChips({ inputs, values, extraOptions, chipPerValue });
|
|
38
53
|
if (!chips.length)
|
|
39
54
|
return null;
|
|
40
55
|
return (<List {...restProps} orientation="horizontal" className={clsx('flex-wrap gap-2', restProps.className)}>
|
|
41
|
-
<Each of={chips} render={({ key, label, text }) => (<li key={key}>
|
|
56
|
+
<Each of={chips} render={({ key, label, text, value, valueLabel }) => (<li key={value === undefined ? key : `${key}:${value}`}>
|
|
42
57
|
<div className="bg-gray-5 dark:bg-gray-1 inline-flex items-center rounded-full px-4 py-2 dark:text-white">
|
|
43
58
|
<Paragraph size="chips">{text}</Paragraph>
|
|
44
|
-
<button type="button" aria-label={removeFilterLabel?.(label) ??
|
|
59
|
+
<button type="button" aria-label={removeFilterLabel?.(label, valueLabel) ??
|
|
60
|
+
(valueLabel === undefined ? label : text)} onClick={() => value === undefined ? onRemove(key) : onRemove(key, value)} className="bg-error ml-1.5 inline-flex h-4 w-4 cursor-pointer items-center justify-center rounded-full p-0.5 text-white">
|
|
45
61
|
<MdClose aria-hidden="true"/>
|
|
46
62
|
</button>
|
|
47
63
|
</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterChips.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/FilterChips/FilterChips.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAmB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"FilterChips.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/FilterChips/FilterChips.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAmB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAahE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,MAAM,EACN,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,GAAG,SAAS,EACK;IACjB,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;IAE7E,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE/B,OAAO,CACL,CAAC,IAAI,CACH,IAAI,SAAS,CAAC,CACd,WAAW,CAAC,YAAY,CACxB,SAAS,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAExD;MAAA,CAAC,IAAI,CACH,EAAE,CAAC,CAAC,KAAK,CAAC,CACV,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CACnD,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CACrD;YAAA,CAAC,GAAG,CAAC,SAAS,CAAC,0FAA0F,CACvG;cAAA,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,CACzC;cAAA,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,UAAU,CAAC,CACT,iBAAiB,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC;gBACtC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAC1C,CAAC,CACD,OAAO,CAAC,CAAC,GAAG,EAAE,CACZ,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAC3D,CAAC,CACD,SAAS,CAAC,8GAA8G,CAExH;gBAAA,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,EAC7B;cAAA,EAAE,MAAM,CACV;YAAA,EAAE,GAAG,CACP;UAAA,EAAE,EAAE,CAAC,CACN,CAAC,EAEJ;MAAA,CAAC,IAAI,CACH;QAAA,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,YAAY,CAAC,CAAC,CACrD;UAAA,CAAC,EAAE,CACD;YAAA,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,OAAO,CAAC,CAAC,UAAU,CAAC,CACpB,SAAS,CAAC,8GAA8G,CAExH;cAAA,CAAC,YAAY,CACf;YAAA,EAAE,MAAM,CACV;UAAA,EAAE,EAAE,CACN;QAAA,EAAE,IAAI,CAAC,IAAI,CACb;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -7,13 +7,15 @@ export type TImageViewType = 'image' | 'pdf';
|
|
|
7
7
|
export type TImageView = {
|
|
8
8
|
id: string;
|
|
9
9
|
label: string;
|
|
10
|
-
src
|
|
10
|
+
src?: string;
|
|
11
11
|
alt: string;
|
|
12
12
|
type?: TImageViewType;
|
|
13
13
|
indicator?: ReactNode;
|
|
14
14
|
crop?: TImageCrop;
|
|
15
|
+
emptyContent?: ReactNode;
|
|
15
16
|
};
|
|
16
17
|
export type TImageViewerLayout = 'tabs' | 'split';
|
|
18
|
+
export type TImageViewerTabsPlacement = 'below' | 'toolbar';
|
|
17
19
|
export type TImageViewerLabels = {
|
|
18
20
|
zoomIn: string;
|
|
19
21
|
zoomOut: string;
|
|
@@ -25,6 +27,8 @@ type ImageViewerProps = {
|
|
|
25
27
|
views: TImageView[];
|
|
26
28
|
labels: TImageViewerLabels;
|
|
27
29
|
layout?: TImageViewerLayout;
|
|
30
|
+
tabsPlacement?: TImageViewerTabsPlacement;
|
|
31
|
+
showSingleTab?: boolean;
|
|
28
32
|
title?: ReactNode;
|
|
29
33
|
emptyState?: ReactNode;
|
|
30
34
|
activeId?: string;
|
|
@@ -67,6 +71,19 @@ type ImageViewerProps = {
|
|
|
67
71
|
* allow CORS; when it cannot be loaded, the view shows its description and
|
|
68
72
|
* the same link.
|
|
69
73
|
*
|
|
74
|
+
* `tabsPlacement="toolbar"` folds the tabs into the toolbar: one bar on top,
|
|
75
|
+
* tabs on the left and actions on the right. With no tabs and a PDF of several
|
|
76
|
+
* pages, the pager takes that left side instead of floating over the page.
|
|
77
|
+
* Every toolbar action shows its label as a tooltip, in both placements.
|
|
78
|
+
*
|
|
79
|
+
* A single view has no tabs unless `showSingleTab` is set: then its tab is
|
|
80
|
+
* drawn in either placement, so a one-sided file reads like the views of a
|
|
81
|
+
* two-sided one. Being a tab, a PDF with it keeps its pager over the page.
|
|
82
|
+
*
|
|
83
|
+
* A view without `src` keeps its tab and draws its `emptyContent` in the frame
|
|
84
|
+
* instead — a side that was never uploaded, for instance. With nothing to
|
|
85
|
+
* inspect, the toolbar actions are disabled.
|
|
86
|
+
*
|
|
70
87
|
* @component
|
|
71
88
|
* @example
|
|
72
89
|
* const [viewId, setViewId] = useState('front');
|
|
@@ -126,10 +143,34 @@ type ImageViewerProps = {
|
|
|
126
143
|
* }}
|
|
127
144
|
* />
|
|
128
145
|
*
|
|
146
|
+
* @example
|
|
147
|
+
* <ImageViewer
|
|
148
|
+
* tabsPlacement="toolbar"
|
|
149
|
+
* views={[
|
|
150
|
+
* { id: 'front', label: 'Front', src: '/front.jpg', alt: 'Document front' },
|
|
151
|
+
* {
|
|
152
|
+
* id: 'back',
|
|
153
|
+
* label: 'Back',
|
|
154
|
+
* alt: 'Document back',
|
|
155
|
+
* emptyContent: <p>Not uploaded yet</p>,
|
|
156
|
+
* },
|
|
157
|
+
* ]}
|
|
158
|
+
* labels={labels}
|
|
159
|
+
* />
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* <ImageViewer
|
|
163
|
+
* showSingleTab
|
|
164
|
+
* views={[{ id: 'front', label: 'Front', src: '/front.jpg', alt: 'Document front' }]}
|
|
165
|
+
* labels={labels}
|
|
166
|
+
* />
|
|
167
|
+
*
|
|
129
168
|
* @param {Object} props - The properties of the ImageViewer component.
|
|
130
|
-
* @param {TImageView[]} props.views - Files 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. A view's `type` is `image` unless set to `pdf`; `crop` is ignored on a `pdf`.
|
|
131
|
-
* @param {TImageViewerLabels} props.labels - Accessible names of the toolbar actions. With `pdf` views, `openDocument` names the action that opens the original file in a new tab, and `previousPage` / `nextPage` name the pager of a document with several pages; without the pair, only the first page is reachable.
|
|
169
|
+
* @param {TImageView[]} props.views - Files 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, unless `showSingleTab` is set. 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. A view's `type` is `image` unless set to `pdf`; `crop` is ignored on a `pdf`. A view without `src` draws its optional `emptyContent` in the frame (or its pane, in `split`) instead of a file.
|
|
170
|
+
* @param {TImageViewerLabels} props.labels - Accessible names of the toolbar actions, also shown as their tooltips. With `pdf` views, `openDocument` names the action that opens the original file in a new tab, and `previousPage` / `nextPage` name the pager of a document with several pages; without the pair, only the first page is reachable. `pageStatus(page, pageCount)` writes the pager text (for instance `Page 2 of 5`); without it the pager reads `2 / 5`.
|
|
132
171
|
* @param {TImageViewerLayout} [props.layout='tabs'] - `tabs` shows one view at a time; `split` shows every view at once, one pane each.
|
|
172
|
+
* @param {TImageViewerTabsPlacement} [props.tabsPlacement='below'] - `below` puts the tabs in their own row under the toolbar; `toolbar` puts them on the left of the toolbar, after the title, and also moves the pager of a several-page PDF there when there are no tabs. Ignored in `split`.
|
|
173
|
+
* @param {boolean} [props.showSingleTab=false] - Draws the tab of a single view, in either `tabsPlacement`. With two or more views it changes nothing. Ignored in `split`.
|
|
133
174
|
* @param {ReactNode} [props.title] - Optional heading rendered on the left of the toolbar.
|
|
134
175
|
* @param {ReactNode} [props.emptyState] - Content rendered when there is no image.
|
|
135
176
|
* @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`.
|
|
@@ -138,5 +179,5 @@ type ImageViewerProps = {
|
|
|
138
179
|
*
|
|
139
180
|
* @returns {ReactNode} The rendered ImageViewer component.
|
|
140
181
|
*/
|
|
141
|
-
export declare function ImageViewer({ views, labels, layout, title, emptyState, activeId, onViewChange, ...restProps }: ImageViewerProps): ReactNode;
|
|
182
|
+
export declare function ImageViewer({ views, labels, layout, tabsPlacement, showSingleTab, title, emptyState, activeId, onViewChange, ...restProps }: ImageViewerProps): ReactNode;
|
|
142
183
|
//# 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,EAKL,KAAK,cAAc,EAGnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAExE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ImageViewer.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/ImageViewer/ImageViewer.tsx"],"names":[],"mappings":"AAGA,OAAO,EAKL,KAAK,cAAc,EAGnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAaf,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAExE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,CAAC;AAElD,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,SAAS,CAAC;AAE5D,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,GAAG,0BAA0B,CAAC;AAE/B,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,aAAa,CAAC,EAAE,yBAAyB,CAAC;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,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;AA8E5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgJG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,MAAM,EACN,MAAe,EACf,aAAuB,EACvB,aAAqB,EACrB,KAAK,EACL,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,GAAG,SAAS,EACb,EAAE,gBAAgB,GAAG,SAAS,CA0a9B"}
|
|
@@ -4,7 +4,7 @@ import { useEffect, useId, useRef, useState, } from 'react';
|
|
|
4
4
|
import { createPortal } from 'react-dom';
|
|
5
5
|
import { MdFullscreen, MdFullscreenExit, MdOpenInNew, MdRotateRight, MdZoomIn, MdZoomOut, } from 'react-icons/md';
|
|
6
6
|
import { Each, Show } from '../../00-base';
|
|
7
|
-
import { List, Paragraph } from '../../01-atoms';
|
|
7
|
+
import { IconButton, List, Paragraph, Tooltip } from '../../01-atoms';
|
|
8
8
|
import { TabItem } from '../Tab/TabItem';
|
|
9
9
|
import { ImageViewerDocument, } from './ImageViewerDocument';
|
|
10
10
|
import { IMAGE_VIEWER_IMAGE_ATTRIBUTE, ImageViewerImage, } from './ImageViewerImage';
|
|
@@ -30,7 +30,11 @@ const PAN_DIRECTIONS = {
|
|
|
30
30
|
ArrowUp: { x: 0, y: 1 },
|
|
31
31
|
ArrowDown: { x: 0, y: -1 },
|
|
32
32
|
};
|
|
33
|
-
|
|
33
|
+
/**
|
|
34
|
+
* The "open in a new tab" action is a link, so it cannot be an `IconButton`;
|
|
35
|
+
* it copies its look and gets the same `Tooltip`.
|
|
36
|
+
*/
|
|
37
|
+
const LINK_ACTION_CLASSNAME = 'text-gray-1 dark:text-gray-5 focus-visible:ring-lavender dark:focus-visible:ring-lavender-dark flex items-center justify-center rounded-sm p-2 text-base transition-colors hover:bg-black hover:text-white focus-visible:ring-2 focus-visible:outline-none dark:hover:bg-white dark:hover:text-black';
|
|
34
38
|
/**
|
|
35
39
|
* How far the images may leave the center before their edge enters the pane:
|
|
36
40
|
* half the overflow on each axis, none when the image already fits. Read from
|
|
@@ -89,6 +93,19 @@ const clampOffset = (offset, bounds) => ({
|
|
|
89
93
|
* allow CORS; when it cannot be loaded, the view shows its description and
|
|
90
94
|
* the same link.
|
|
91
95
|
*
|
|
96
|
+
* `tabsPlacement="toolbar"` folds the tabs into the toolbar: one bar on top,
|
|
97
|
+
* tabs on the left and actions on the right. With no tabs and a PDF of several
|
|
98
|
+
* pages, the pager takes that left side instead of floating over the page.
|
|
99
|
+
* Every toolbar action shows its label as a tooltip, in both placements.
|
|
100
|
+
*
|
|
101
|
+
* A single view has no tabs unless `showSingleTab` is set: then its tab is
|
|
102
|
+
* drawn in either placement, so a one-sided file reads like the views of a
|
|
103
|
+
* two-sided one. Being a tab, a PDF with it keeps its pager over the page.
|
|
104
|
+
*
|
|
105
|
+
* A view without `src` keeps its tab and draws its `emptyContent` in the frame
|
|
106
|
+
* instead — a side that was never uploaded, for instance. With nothing to
|
|
107
|
+
* inspect, the toolbar actions are disabled.
|
|
108
|
+
*
|
|
92
109
|
* @component
|
|
93
110
|
* @example
|
|
94
111
|
* const [viewId, setViewId] = useState('front');
|
|
@@ -148,10 +165,34 @@ const clampOffset = (offset, bounds) => ({
|
|
|
148
165
|
* }}
|
|
149
166
|
* />
|
|
150
167
|
*
|
|
168
|
+
* @example
|
|
169
|
+
* <ImageViewer
|
|
170
|
+
* tabsPlacement="toolbar"
|
|
171
|
+
* views={[
|
|
172
|
+
* { id: 'front', label: 'Front', src: '/front.jpg', alt: 'Document front' },
|
|
173
|
+
* {
|
|
174
|
+
* id: 'back',
|
|
175
|
+
* label: 'Back',
|
|
176
|
+
* alt: 'Document back',
|
|
177
|
+
* emptyContent: <p>Not uploaded yet</p>,
|
|
178
|
+
* },
|
|
179
|
+
* ]}
|
|
180
|
+
* labels={labels}
|
|
181
|
+
* />
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* <ImageViewer
|
|
185
|
+
* showSingleTab
|
|
186
|
+
* views={[{ id: 'front', label: 'Front', src: '/front.jpg', alt: 'Document front' }]}
|
|
187
|
+
* labels={labels}
|
|
188
|
+
* />
|
|
189
|
+
*
|
|
151
190
|
* @param {Object} props - The properties of the ImageViewer component.
|
|
152
|
-
* @param {TImageView[]} props.views - Files 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. A view's `type` is `image` unless set to `pdf`; `crop` is ignored on a `pdf`.
|
|
153
|
-
* @param {TImageViewerLabels} props.labels - Accessible names of the toolbar actions. With `pdf` views, `openDocument` names the action that opens the original file in a new tab, and `previousPage` / `nextPage` name the pager of a document with several pages; without the pair, only the first page is reachable.
|
|
191
|
+
* @param {TImageView[]} props.views - Files 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, unless `showSingleTab` is set. 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. A view's `type` is `image` unless set to `pdf`; `crop` is ignored on a `pdf`. A view without `src` draws its optional `emptyContent` in the frame (or its pane, in `split`) instead of a file.
|
|
192
|
+
* @param {TImageViewerLabels} props.labels - Accessible names of the toolbar actions, also shown as their tooltips. With `pdf` views, `openDocument` names the action that opens the original file in a new tab, and `previousPage` / `nextPage` name the pager of a document with several pages; without the pair, only the first page is reachable. `pageStatus(page, pageCount)` writes the pager text (for instance `Page 2 of 5`); without it the pager reads `2 / 5`.
|
|
154
193
|
* @param {TImageViewerLayout} [props.layout='tabs'] - `tabs` shows one view at a time; `split` shows every view at once, one pane each.
|
|
194
|
+
* @param {TImageViewerTabsPlacement} [props.tabsPlacement='below'] - `below` puts the tabs in their own row under the toolbar; `toolbar` puts them on the left of the toolbar, after the title, and also moves the pager of a several-page PDF there when there are no tabs. Ignored in `split`.
|
|
195
|
+
* @param {boolean} [props.showSingleTab=false] - Draws the tab of a single view, in either `tabsPlacement`. With two or more views it changes nothing. Ignored in `split`.
|
|
155
196
|
* @param {ReactNode} [props.title] - Optional heading rendered on the left of the toolbar.
|
|
156
197
|
* @param {ReactNode} [props.emptyState] - Content rendered when there is no image.
|
|
157
198
|
* @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`.
|
|
@@ -160,11 +201,12 @@ const clampOffset = (offset, bounds) => ({
|
|
|
160
201
|
*
|
|
161
202
|
* @returns {ReactNode} The rendered ImageViewer component.
|
|
162
203
|
*/
|
|
163
|
-
export function ImageViewer({ views, labels, layout = 'tabs', title, emptyState, activeId, onViewChange, ...restProps }) {
|
|
204
|
+
export function ImageViewer({ views, labels, layout = 'tabs', tabsPlacement = 'below', showSingleTab = false, title, emptyState, activeId, onViewChange, ...restProps }) {
|
|
164
205
|
const [internalIndex, setInternalIndex] = useState(0);
|
|
165
206
|
const [transform, setTransform] = useState(INITIAL_TRANSFORM);
|
|
166
207
|
const [isFullscreen, setIsFullscreen] = useState(false);
|
|
167
208
|
const [isDragging, setIsDragging] = useState(false);
|
|
209
|
+
const [pagerSlot, setPagerSlot] = useState(null);
|
|
168
210
|
const panelRef = useRef(null);
|
|
169
211
|
const dragRef = useRef(null);
|
|
170
212
|
const generatedId = useId();
|
|
@@ -196,12 +238,16 @@ export function ImageViewer({ views, labels, layout = 'tabs', title, emptyState,
|
|
|
196
238
|
const activeView = views[activeIndex] ?? views[0];
|
|
197
239
|
const hasView = Boolean(activeView);
|
|
198
240
|
const isSplit = layout === 'split';
|
|
199
|
-
const hasTabs = !isSplit && views.length > 1;
|
|
241
|
+
const hasTabs = !isSplit && (views.length > 1 || (showSingleTab && views.length === 1));
|
|
242
|
+
const isToolbarPlacement = !isSplit && tabsPlacement === 'toolbar';
|
|
243
|
+
const hasToolbarTabs = isToolbarPlacement && hasTabs;
|
|
200
244
|
const shownViews = isSplit ? views : activeView ? [activeView] : [];
|
|
245
|
+
const hasContent = shownViews.some(({ src }) => Boolean(src));
|
|
201
246
|
const documentHref = !isSplit && activeView?.type === 'pdf' ? activeView.src : undefined;
|
|
247
|
+
const hasToolbarPager = isToolbarPlacement && !hasTabs && !!documentHref;
|
|
202
248
|
const panelLabel = shownViews.map(({ alt }) => alt).join(', ') || undefined;
|
|
203
249
|
const { zoom, rotation, offset } = transform;
|
|
204
|
-
const canPan =
|
|
250
|
+
const canPan = hasContent && zoom > MIN_ZOOM;
|
|
205
251
|
const imageStyle = {
|
|
206
252
|
transform: `translate(${offset.x}px, ${offset.y}px) rotate(${rotation}deg) scale(${zoom})`,
|
|
207
253
|
};
|
|
@@ -263,12 +309,18 @@ export function ImageViewer({ views, labels, layout = 'tabs', title, emptyState,
|
|
|
263
309
|
};
|
|
264
310
|
/**
|
|
265
311
|
* Los controles que viven sobre la imagen (el paginador de un PDF) deben
|
|
266
|
-
* recibir su clic: capturar el puntero aqui se lo quitaria.
|
|
312
|
+
* recibir su clic: capturar el puntero aqui se lo quitaria. El paginador en
|
|
313
|
+
* la barra llega por un portal, asi que React propaga sus eventos al panel
|
|
314
|
+
* aunque no este dentro de el en el DOM.
|
|
267
315
|
*/
|
|
268
|
-
const isControl = (target) => target instanceof Element &&
|
|
316
|
+
const isControl = (target, panel) => target instanceof Element &&
|
|
317
|
+
(target.closest('button, a') !== null || !panel.contains(target));
|
|
269
318
|
const startDrag = (event) => {
|
|
270
|
-
if (!canPan ||
|
|
319
|
+
if (!canPan ||
|
|
320
|
+
event.button !== 0 ||
|
|
321
|
+
isControl(event.target, event.currentTarget)) {
|
|
271
322
|
return;
|
|
323
|
+
}
|
|
272
324
|
event.currentTarget.setPointerCapture(event.pointerId);
|
|
273
325
|
dragRef.current = {
|
|
274
326
|
pointerId: event.pointerId,
|
|
@@ -309,58 +361,60 @@ export function ImageViewer({ views, labels, layout = 'tabs', title, emptyState,
|
|
|
309
361
|
}, bounds),
|
|
310
362
|
}));
|
|
311
363
|
};
|
|
312
|
-
const renderView = (
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
364
|
+
const renderView = ({ id, src, alt, type, crop, emptyContent, }) => {
|
|
365
|
+
if (!src) {
|
|
366
|
+
return (<div key={id} className="flex h-full w-full items-center justify-center">
|
|
367
|
+
{emptyContent}
|
|
368
|
+
</div>);
|
|
369
|
+
}
|
|
370
|
+
return (<Show key={id}>
|
|
371
|
+
<Show.When isTrue={type === 'pdf'}>
|
|
372
|
+
<ImageViewerDocument src={src} alt={alt} style={imageStyle} isAnimated={!isDragging} labels={labels} pagerContainer={hasToolbarPager ? pagerSlot : undefined} onPageChange={recenter}/>
|
|
373
|
+
</Show.When>
|
|
374
|
+
<Show.Else>
|
|
375
|
+
<ImageViewerImage src={src} alt={alt} crop={crop} style={imageStyle} isAnimated={!isDragging}/>
|
|
376
|
+
</Show.Else>
|
|
377
|
+
</Show>);
|
|
378
|
+
};
|
|
379
|
+
const tabList = (<List role="tablist" aria-orientation="horizontal" orientation="horizontal" className={clsx('gap-6', hasToolbarTabs
|
|
380
|
+
? 'min-w-0 self-stretch overflow-x-auto'
|
|
381
|
+
: 'border-gray-5 dark:border-gray-1 flex-none items-end border-b px-4')}>
|
|
382
|
+
<Each of={views} render={({ id, label, indicator }, index) => (<li key={id} role="presentation" className={hasToolbarTabs ? 'flex flex-none self-stretch' : undefined}>
|
|
383
|
+
<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={hasToolbarTabs ? 'h-full' : 'pb-2'}>
|
|
384
|
+
<span className="inline-flex items-center gap-1.5">
|
|
385
|
+
{label}
|
|
386
|
+
{!!indicator && (<span className="flex flex-none items-center">
|
|
387
|
+
{indicator}
|
|
388
|
+
</span>)}
|
|
389
|
+
</span>
|
|
390
|
+
</TabItem>
|
|
391
|
+
</li>)}/>
|
|
392
|
+
</List>);
|
|
320
393
|
const frame = (<section {...restProps} className={clsx('border-gray-5 dark:border-gray-1 flex min-h-0 flex-col overflow-hidden rounded-lg border', isFullscreen ? 'h-full w-full bg-white dark:bg-black' : undefined, !isFullscreen ? restProps.className : undefined)}>
|
|
321
|
-
<div className=
|
|
394
|
+
<div className={clsx('border-gray-5 bg-gray-6 dark:border-gray-1 dark:bg-black-1 flex flex-none justify-between gap-4 border-b px-4', hasToolbarTabs ? 'min-h-14 items-stretch' : 'items-center py-3')}>
|
|
322
395
|
<Show>
|
|
323
396
|
<Show.When isTrue={Boolean(title)}>
|
|
324
|
-
<Paragraph size="subtitle-1" className="dark:text-white">
|
|
397
|
+
<Paragraph size="subtitle-1" className="self-center dark:text-white">
|
|
325
398
|
{title}
|
|
326
399
|
</Paragraph>
|
|
327
400
|
</Show.When>
|
|
328
401
|
</Show>
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
<
|
|
340
|
-
|
|
341
|
-
</button>
|
|
342
|
-
<button type="button" aria-label={isFullscreen ? labels.exitFullscreen : labels.enterFullscreen} aria-pressed={isFullscreen} disabled={!hasView} onClick={toggleFullscreen} className={TOOL_CLASSNAME}>
|
|
343
|
-
{isFullscreen ? (<MdFullscreenExit aria-hidden="true"/>) : (<MdFullscreen aria-hidden="true"/>)}
|
|
344
|
-
</button>
|
|
402
|
+
{!!hasToolbarTabs && tabList}
|
|
403
|
+
{!!hasToolbarPager && (<div ref={setPagerSlot} className="flex items-center gap-1"/>)}
|
|
404
|
+
<div className="ml-auto flex flex-none items-center gap-1 self-center">
|
|
405
|
+
{!!documentHref && !!labels.openDocument && (<Tooltip message={labels.openDocument}>
|
|
406
|
+
<a href={documentHref} target="_blank" rel="noopener noreferrer" aria-label={labels.openDocument} className={LINK_ACTION_CLASSNAME}>
|
|
407
|
+
<MdOpenInNew aria-hidden="true"/>
|
|
408
|
+
</a>
|
|
409
|
+
</Tooltip>)}
|
|
410
|
+
<IconButton icon={<MdZoomOut />} label={labels.zoomOut} disabled={!hasContent || zoom <= MIN_ZOOM} onClick={() => changeZoom(-ZOOM_STEP)}/>
|
|
411
|
+
<IconButton icon={<MdZoomIn />} label={labels.zoomIn} disabled={!hasContent || zoom >= MAX_ZOOM} onClick={() => changeZoom(ZOOM_STEP)}/>
|
|
412
|
+
<IconButton icon={<MdRotateRight />} label={labels.rotate} disabled={!hasContent} onClick={rotate}/>
|
|
413
|
+
<IconButton icon={isFullscreen ? <MdFullscreenExit /> : <MdFullscreen />} label={isFullscreen ? labels.exitFullscreen : labels.enterFullscreen} aria-pressed={isFullscreen} disabled={!hasContent && !isFullscreen} onClick={toggleFullscreen}/>
|
|
345
414
|
</div>
|
|
346
415
|
</div>
|
|
347
416
|
|
|
348
|
-
|
|
349
|
-
<Show.When isTrue={hasTabs}>
|
|
350
|
-
<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">
|
|
351
|
-
<Each of={views} render={({ id, label, indicator }, index) => (<li key={id} role="presentation">
|
|
352
|
-
<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">
|
|
353
|
-
<span className="inline-flex items-center gap-1.5">
|
|
354
|
-
{label}
|
|
355
|
-
{!!indicator && (<span className="flex flex-none items-center">
|
|
356
|
-
{indicator}
|
|
357
|
-
</span>)}
|
|
358
|
-
</span>
|
|
359
|
-
</TabItem>
|
|
360
|
-
</li>)}/>
|
|
361
|
-
</List>
|
|
362
|
-
</Show.When>
|
|
363
|
-
</Show>
|
|
417
|
+
{!!hasTabs && !hasToolbarTabs && tabList}
|
|
364
418
|
|
|
365
419
|
<div ref={panelRef} id={`${generatedId}-panel`} role={hasTabs ? 'tabpanel' : 'group'} aria-labelledby={hasTabs ? `${generatedId}-tab-${activeIndex}` : undefined} aria-label={hasTabs ? undefined : panelLabel} tabIndex={canPan ? 0 : undefined} onPointerDown={startDrag} onPointerMove={moveDrag} onPointerUp={endDrag} onPointerCancel={endDrag} onKeyDown={panWithKeyboard} className={clsx('bg-gray-7 dark:bg-black-2 focus-visible:ring-lavender flex min-h-0 flex-1 items-center justify-center overflow-hidden p-5 focus-visible:ring-2 focus-visible:outline-none focus-visible:ring-inset', canPan && 'touch-none select-none', canPan && (isDragging ? 'cursor-grabbing' : 'cursor-grab'))}>
|
|
366
420
|
<Show>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageViewer.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/ImageViewer/ImageViewer.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ImageViewer.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/ImageViewer/ImageViewer.tsx"],"names":[],"mappings":"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"}
|