@m4l/components 9.12.0 → 9.12.1-beta-feature-m4l-components-rhf-image-selector.0
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/@types/types.d.ts +8 -0
- package/components/ImageSelector/ImageSelector.d.ts +6 -0
- package/components/ImageSelector/ImageSelector.d.ts.map +1 -0
- package/components/ImageSelector/ImageSelector.js +226 -0
- package/components/ImageSelector/ImageSelector.styles.d.ts +3 -0
- package/components/ImageSelector/ImageSelector.styles.d.ts.map +1 -0
- package/components/ImageSelector/ImageSelector.styles.js +245 -0
- package/components/ImageSelector/constants.d.ts +16 -0
- package/components/ImageSelector/constants.d.ts.map +1 -0
- package/components/ImageSelector/constants.js +23 -0
- package/components/ImageSelector/dictionary.d.ts +8 -0
- package/components/ImageSelector/dictionary.d.ts.map +1 -0
- package/components/ImageSelector/dictionary.js +11 -0
- package/components/ImageSelector/hooks/useImageSelector.d.ts +6 -0
- package/components/ImageSelector/hooks/useImageSelector.d.ts.map +1 -0
- package/components/ImageSelector/hooks/useImageSelector.js +279 -0
- package/components/ImageSelector/index.d.ts +4 -0
- package/components/ImageSelector/index.d.ts.map +1 -0
- package/components/ImageSelector/slots/ImageSelectorEnum.d.ts +15 -0
- package/components/ImageSelector/slots/ImageSelectorEnum.d.ts.map +1 -0
- package/components/ImageSelector/slots/ImageSelectorEnum.js +4 -0
- package/components/ImageSelector/slots/ImageSelectorSlots.d.ts +19 -0
- package/components/ImageSelector/slots/ImageSelectorSlots.d.ts.map +1 -0
- package/components/ImageSelector/slots/ImageSelectorSlots.js +75 -0
- package/components/ImageSelector/slots/index.d.ts +3 -0
- package/components/ImageSelector/slots/index.d.ts.map +1 -0
- package/components/ImageSelector/types.d.ts +210 -0
- package/components/ImageSelector/types.d.ts.map +1 -0
- package/components/hook-form/RHFImageSelector/RHFImageSelector.d.ts +9 -0
- package/components/hook-form/RHFImageSelector/RHFImageSelector.d.ts.map +1 -0
- package/components/hook-form/RHFImageSelector/RHFImageSelector.js +6 -0
- package/components/hook-form/RHFImageSelector/index.d.ts +3 -0
- package/components/hook-form/RHFImageSelector/index.d.ts.map +1 -0
- package/components/hook-form/RHFImageSelector/types.d.ts +7 -0
- package/components/hook-form/RHFImageSelector/types.d.ts.map +1 -0
- package/components/hook-form/index.d.ts +1 -0
- package/components/hook-form/index.d.ts.map +1 -1
- package/components/index.d.ts +1 -0
- package/components/index.d.ts.map +1 -1
- package/index.js +315 -309
- package/package.json +6 -6
package/@types/types.d.ts
CHANGED
|
@@ -370,6 +370,7 @@ import {
|
|
|
370
370
|
VariableSizeListOwnerState,
|
|
371
371
|
VariableSizeListSlotsType,
|
|
372
372
|
} from '../components/extended/React-Window/VariableSizeList/types';
|
|
373
|
+
import { ImageSelectorOwnerState, ImageSelectorSlotsType } from 'src/components/ImageSelector/types';
|
|
373
374
|
|
|
374
375
|
declare module '@mui/material/styles' {
|
|
375
376
|
// Define the slots in the theme
|
|
@@ -481,6 +482,7 @@ declare module '@mui/material/styles' {
|
|
|
481
482
|
M4LReactJsonViewer: ReactJsonViewerSlotsType;
|
|
482
483
|
M4LResizable: ResizableSlotsType;
|
|
483
484
|
M4LResizableBox: ResizableBoxSlotsType;
|
|
485
|
+
M4LImageSelector: ImageSelectorSlotsType;
|
|
484
486
|
}
|
|
485
487
|
interface ComponentsPropsList {
|
|
486
488
|
// Extend ComponentsProps or ComponentsOwnerState(this extend ComponentProps)
|
|
@@ -591,6 +593,7 @@ declare module '@mui/material/styles' {
|
|
|
591
593
|
M4LReactJsonViewer: Partial<ReactJsonViewerOwnerState>;
|
|
592
594
|
M4LResizable: Partial<ReactResizableOwnerState>;
|
|
593
595
|
M4LResizableBox: Partial<ResizableBoxOwnerState>;
|
|
596
|
+
M4LImageSelector: Partial<ImageSelectorOwnerState>;
|
|
594
597
|
}
|
|
595
598
|
interface Components {
|
|
596
599
|
M4LDynamicFilter?: {
|
|
@@ -1132,5 +1135,10 @@ declare module '@mui/material/styles' {
|
|
|
1132
1135
|
styleOverrides?: ComponentsOverrides<Theme>['M4LResizableBox'];
|
|
1133
1136
|
variants?: ComponentsVariants['M4LResizableBox'];
|
|
1134
1137
|
};
|
|
1138
|
+
M4LImageSelector?: {
|
|
1139
|
+
defaultProps?: ComponentsPropsList['M4LImageSelector'];
|
|
1140
|
+
styleOverrides?: ComponentsOverrides<Theme>['M4LImageSelector'];
|
|
1141
|
+
variants?: ComponentsVariants['M4LImageSelector'];
|
|
1142
|
+
};
|
|
1135
1143
|
}
|
|
1136
1144
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageSelector.d.ts","sourceRoot":"","sources":["../../../../../../packages/components/src/components/ImageSelector/ImageSelector.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,GAAG,EACJ,MAAM,OAAO,CAAC;AAWf,OAAO,EAEL,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAgPjB,eAAO,MAAM,aAAa,EAAyC,CACjE,CAAC,GAAG,OAAO,EAEX,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG;IAC7B,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;CAC9B,KACE,GAAG,CAAC,OAAO,CAAC"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { jsx as e, jsxs as b, Fragment as ie } from "@emotion/react/jsx-runtime";
|
|
2
|
+
import se from "clsx";
|
|
3
|
+
import { forwardRef as de } from "react";
|
|
4
|
+
import { Icon as ce } from "@m4l/base";
|
|
5
|
+
import { useModuleDictionary as me } from "@m4l/core";
|
|
6
|
+
import { getPropDataTestId as pe } from "../../test/getNameDataTestId.js";
|
|
7
|
+
import { DEFAULT_PRESENTATION_TYPE as Se, IMAGE_SELECTOR_CLASSES as t, IMAGE_SELECTOR_KEY_COMPONENT as ge } from "./constants.js";
|
|
8
|
+
import { DICTIONARY as he } from "./dictionary.js";
|
|
9
|
+
import { useImageSelector as ue } from "./hooks/useImageSelector.js";
|
|
10
|
+
import { LoadingStateStyled as fe, CircularProgressStyled as we, OptionsGridStyled as Oe, OptionButtonStyled as Ie, OptionImageStyled as ye, EmptyStateStyled as be, RootStyled as ve, TriggerStyled as Ee, PreviewFrameStyled as Ce, PreviewImageStyled as Te, OverlayStyled as Le, PopoverStyled as Ne } from "./slots/ImageSelectorSlots.js";
|
|
11
|
+
import { ImageSelectorSlots as Re } from "./slots/ImageSelectorEnum.js";
|
|
12
|
+
function Ae(c, v) {
|
|
13
|
+
const {
|
|
14
|
+
value: E,
|
|
15
|
+
onChange: C,
|
|
16
|
+
endpoint: T,
|
|
17
|
+
refetchOnOpen: L = !1,
|
|
18
|
+
getOptionLabel: m,
|
|
19
|
+
getOptionImage: p,
|
|
20
|
+
isOptionEqualToValue: N,
|
|
21
|
+
presentationType: S = Se,
|
|
22
|
+
imageSize: g,
|
|
23
|
+
maxColumns: R,
|
|
24
|
+
maxRows: A,
|
|
25
|
+
size: l = "medium",
|
|
26
|
+
disabled: r = !1,
|
|
27
|
+
error: h = !1,
|
|
28
|
+
className: F,
|
|
29
|
+
dataTestId: P,
|
|
30
|
+
id: _,
|
|
31
|
+
name: x,
|
|
32
|
+
timeout: D,
|
|
33
|
+
parms: B,
|
|
34
|
+
resultField: K,
|
|
35
|
+
isExternalUrl: M,
|
|
36
|
+
isRemote: z,
|
|
37
|
+
responseToCamelCase: G
|
|
38
|
+
} = c, Y = c.onBlur, { getLabel: $ } = me(), {
|
|
39
|
+
getOptionId: j,
|
|
40
|
+
gridOwnerState: i,
|
|
41
|
+
handleBlur: k,
|
|
42
|
+
handleFocus: H,
|
|
43
|
+
handleKeyDown: U,
|
|
44
|
+
handleOptionFocus: V,
|
|
45
|
+
handleOptionKeyDown: q,
|
|
46
|
+
handleOptionRef: W,
|
|
47
|
+
handlePopoverClose: J,
|
|
48
|
+
handleSelect: Q,
|
|
49
|
+
handleToggle: X,
|
|
50
|
+
handleTriggerRef: Z,
|
|
51
|
+
isOptionSelected: ee,
|
|
52
|
+
loading: te,
|
|
53
|
+
open: u,
|
|
54
|
+
options: f,
|
|
55
|
+
optionsListId: w,
|
|
56
|
+
overlayIconSrc: oe,
|
|
57
|
+
previewLabel: O,
|
|
58
|
+
previewOwnerState: re,
|
|
59
|
+
previewSource: ae,
|
|
60
|
+
rootOwnerState: a,
|
|
61
|
+
triggerElement: ne
|
|
62
|
+
} = ue({
|
|
63
|
+
blurHandler: Y,
|
|
64
|
+
disabled: r,
|
|
65
|
+
endpoint: T,
|
|
66
|
+
error: h,
|
|
67
|
+
forwardedRef: v,
|
|
68
|
+
getOptionImage: p,
|
|
69
|
+
getOptionLabel: m,
|
|
70
|
+
isExternalUrl: M,
|
|
71
|
+
isOptionEqualToValue: N,
|
|
72
|
+
isRemote: z,
|
|
73
|
+
imageSize: g,
|
|
74
|
+
maxColumns: R,
|
|
75
|
+
maxRows: A,
|
|
76
|
+
onChange: C,
|
|
77
|
+
presentationType: S,
|
|
78
|
+
parms: B,
|
|
79
|
+
refetchOnOpen: L,
|
|
80
|
+
responseToCamelCase: G,
|
|
81
|
+
resultField: K,
|
|
82
|
+
size: l,
|
|
83
|
+
timeout: D,
|
|
84
|
+
value: E
|
|
85
|
+
}), I = te ? /* @__PURE__ */ e(fe, { ownerState: i, children: /* @__PURE__ */ e(we, { size: l }) }) : f.length > 0 ? /* @__PURE__ */ e(
|
|
86
|
+
Oe,
|
|
87
|
+
{
|
|
88
|
+
id: w,
|
|
89
|
+
role: "listbox",
|
|
90
|
+
"aria-label": "Image options",
|
|
91
|
+
ownerState: i,
|
|
92
|
+
children: f.map((n, o) => {
|
|
93
|
+
const y = ee(n), s = m(n), le = {
|
|
94
|
+
disabled: r,
|
|
95
|
+
imageSize: g,
|
|
96
|
+
selected: y,
|
|
97
|
+
size: l
|
|
98
|
+
};
|
|
99
|
+
return /* @__PURE__ */ e(
|
|
100
|
+
Ie,
|
|
101
|
+
{
|
|
102
|
+
id: j(o),
|
|
103
|
+
ref: (d) => W(o, d),
|
|
104
|
+
role: "option",
|
|
105
|
+
"aria-selected": y,
|
|
106
|
+
"aria-label": s,
|
|
107
|
+
ownerState: le,
|
|
108
|
+
disabled: r,
|
|
109
|
+
onFocus: () => V(o),
|
|
110
|
+
onKeyDown: (d) => q(o, d),
|
|
111
|
+
onClick: () => Q(n),
|
|
112
|
+
children: /* @__PURE__ */ e(
|
|
113
|
+
ye,
|
|
114
|
+
{
|
|
115
|
+
className: t.optionImage,
|
|
116
|
+
src: p(n),
|
|
117
|
+
alt: s,
|
|
118
|
+
width: "100%",
|
|
119
|
+
height: "100%",
|
|
120
|
+
enableIntersectionObserver: !1
|
|
121
|
+
}
|
|
122
|
+
)
|
|
123
|
+
},
|
|
124
|
+
`${s}-${o}`
|
|
125
|
+
);
|
|
126
|
+
})
|
|
127
|
+
}
|
|
128
|
+
) : /* @__PURE__ */ e(
|
|
129
|
+
be,
|
|
130
|
+
{
|
|
131
|
+
ownerState: i,
|
|
132
|
+
variant: "bodyStandard",
|
|
133
|
+
children: $(he.LABEL_NO_IMAGES_AVAILABLE)
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
return /* @__PURE__ */ e(
|
|
137
|
+
ve,
|
|
138
|
+
{
|
|
139
|
+
ownerState: a,
|
|
140
|
+
className: se(F, t.root),
|
|
141
|
+
...pe(ge, Re.root, P),
|
|
142
|
+
children: S === "standard" ? /* @__PURE__ */ b(ie, { children: [
|
|
143
|
+
/* @__PURE__ */ e(
|
|
144
|
+
Ee,
|
|
145
|
+
{
|
|
146
|
+
ref: Z,
|
|
147
|
+
type: "button",
|
|
148
|
+
id: _,
|
|
149
|
+
name: x,
|
|
150
|
+
ownerState: a,
|
|
151
|
+
className: t.trigger,
|
|
152
|
+
disabled: r,
|
|
153
|
+
"aria-haspopup": "listbox",
|
|
154
|
+
"aria-expanded": u,
|
|
155
|
+
"aria-controls": w,
|
|
156
|
+
"aria-invalid": h || void 0,
|
|
157
|
+
"aria-label": `Image selector: ${O}`,
|
|
158
|
+
onClick: X,
|
|
159
|
+
onFocus: H,
|
|
160
|
+
onBlur: k,
|
|
161
|
+
onKeyDown: U,
|
|
162
|
+
disableRipple: !0,
|
|
163
|
+
children: /* @__PURE__ */ b(
|
|
164
|
+
Ce,
|
|
165
|
+
{
|
|
166
|
+
ownerState: a,
|
|
167
|
+
className: t.previewFrame,
|
|
168
|
+
children: [
|
|
169
|
+
/* @__PURE__ */ e(
|
|
170
|
+
Te,
|
|
171
|
+
{
|
|
172
|
+
ownerState: re,
|
|
173
|
+
className: t.previewImage,
|
|
174
|
+
src: ae,
|
|
175
|
+
alt: O,
|
|
176
|
+
width: "100%",
|
|
177
|
+
height: "100%",
|
|
178
|
+
enableIntersectionObserver: !1
|
|
179
|
+
}
|
|
180
|
+
),
|
|
181
|
+
/* @__PURE__ */ e(
|
|
182
|
+
Le,
|
|
183
|
+
{
|
|
184
|
+
ownerState: a,
|
|
185
|
+
className: t.overlay,
|
|
186
|
+
"aria-hidden": !0,
|
|
187
|
+
children: /* @__PURE__ */ e(ce, { src: oe })
|
|
188
|
+
}
|
|
189
|
+
)
|
|
190
|
+
]
|
|
191
|
+
}
|
|
192
|
+
)
|
|
193
|
+
}
|
|
194
|
+
),
|
|
195
|
+
/* @__PURE__ */ e(
|
|
196
|
+
Ne,
|
|
197
|
+
{
|
|
198
|
+
open: u,
|
|
199
|
+
anchorEl: ne,
|
|
200
|
+
onClose: J,
|
|
201
|
+
disableRestoreFocus: !0,
|
|
202
|
+
disableEnforceFocus: !0,
|
|
203
|
+
disableAutoFocus: !0,
|
|
204
|
+
anchorOrigin: { vertical: "bottom", horizontal: "left" },
|
|
205
|
+
transformOrigin: { vertical: "top", horizontal: "left" },
|
|
206
|
+
slotProps: {
|
|
207
|
+
paper: {
|
|
208
|
+
"aria-label": "Image selector options paper",
|
|
209
|
+
sx: {
|
|
210
|
+
p: 2,
|
|
211
|
+
overflow: "hidden",
|
|
212
|
+
maxWidth: "calc(100vw - 32px)"
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
children: I
|
|
217
|
+
}
|
|
218
|
+
)
|
|
219
|
+
] }) : I
|
|
220
|
+
}
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
const $e = de(Ae);
|
|
224
|
+
export {
|
|
225
|
+
$e as ImageSelector
|
|
226
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageSelector.styles.d.ts","sourceRoot":"","sources":["../../../../../../packages/components/src/components/ImageSelector/ImageSelector.styles.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,mBAAmB,EACpB,MAAM,SAAS,CAAC;AA0BjB,eAAO,MAAM,mBAAmB,EAAE,mBAoSjC,CAAC"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { OPTION_DIMENSION as d, DEFAULT_MAX_COLUMNS as b, GRID_GAP as i, DEFAULT_MAX_ROWS as S, SCROLLBAR_TRACK_SIZE as f, TRIGGER_DIMENSION as w, IMAGE_SELECTOR_CLASSES as s } from "./constants.js";
|
|
2
|
+
const R = /^(-?\d+(?:\.\d+)?)px$/;
|
|
3
|
+
function u(o) {
|
|
4
|
+
return o?.presentationType === "grid" && o.error;
|
|
5
|
+
}
|
|
6
|
+
function h(o, e) {
|
|
7
|
+
const r = R.exec(e.trim());
|
|
8
|
+
return r ? `${o + Number.parseFloat(r[1]) * 2}px` : `calc(${o}px + (${e} * 2))`;
|
|
9
|
+
}
|
|
10
|
+
const $ = {
|
|
11
|
+
/**
|
|
12
|
+
* Base styles for the root element of the ImageSelector component.
|
|
13
|
+
*/
|
|
14
|
+
root: (o) => {
|
|
15
|
+
const { ownerState: e } = o;
|
|
16
|
+
return {
|
|
17
|
+
display: e?.presentationType === "grid" ? "flex" : "inline-flex",
|
|
18
|
+
flexDirection: "column",
|
|
19
|
+
position: "relative",
|
|
20
|
+
width: e?.presentationType === "grid" ? "100%" : "fit-content",
|
|
21
|
+
maxWidth: "100%"
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
/**
|
|
25
|
+
* Interactive trigger styles.
|
|
26
|
+
*/
|
|
27
|
+
trigger: (o) => {
|
|
28
|
+
const { theme: e, ownerState: r = {} } = o, t = r.imageSize ?? w;
|
|
29
|
+
return {
|
|
30
|
+
width: `${t}px`,
|
|
31
|
+
height: `${t}px`,
|
|
32
|
+
aspectRatio: "1 / 1",
|
|
33
|
+
borderRadius: e.vars.size.borderRadius.r2,
|
|
34
|
+
border: e.vars.size.borderStroke.container,
|
|
35
|
+
borderColor: r.error ? e.vars.palette.error.main : "transparent",
|
|
36
|
+
backgroundColor: e.vars.palette.background.default,
|
|
37
|
+
overflow: "hidden",
|
|
38
|
+
padding: 0,
|
|
39
|
+
transition: "border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease",
|
|
40
|
+
[`& .${s.overlay}`]: {
|
|
41
|
+
opacity: 0
|
|
42
|
+
},
|
|
43
|
+
[`&:hover .${s.previewImage}`]: {
|
|
44
|
+
filter: r.disabled || r.isOpen ? "none" : "blur(1px)"
|
|
45
|
+
},
|
|
46
|
+
[`&:hover .${s.overlay}`]: {
|
|
47
|
+
opacity: r.disabled || r.isOpen ? 0 : 1
|
|
48
|
+
},
|
|
49
|
+
[`&:active .${s.previewImage}`]: {
|
|
50
|
+
filter: r.disabled || r.isOpen ? "none" : "blur(1px)"
|
|
51
|
+
},
|
|
52
|
+
[`&:active .${s.overlay}`]: {
|
|
53
|
+
opacity: r.disabled || r.isOpen ? 0 : 1
|
|
54
|
+
},
|
|
55
|
+
"&:focus-visible": {
|
|
56
|
+
outline: "none",
|
|
57
|
+
borderColor: e.vars.palette.primary.focus,
|
|
58
|
+
boxShadow: `0 0 0 1px ${e.vars.palette.primary.focus}`
|
|
59
|
+
},
|
|
60
|
+
"&.Mui-disabled": {
|
|
61
|
+
opacity: 0.64,
|
|
62
|
+
cursor: "not-allowed"
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
/**
|
|
67
|
+
* Preview frame styles.
|
|
68
|
+
*/
|
|
69
|
+
previewFrame: (o) => {
|
|
70
|
+
const { theme: e } = o;
|
|
71
|
+
return {
|
|
72
|
+
position: "relative",
|
|
73
|
+
width: "100%",
|
|
74
|
+
height: "100%",
|
|
75
|
+
display: "flex",
|
|
76
|
+
alignItems: "center",
|
|
77
|
+
justifyContent: "center",
|
|
78
|
+
backgroundColor: e.vars.palette.background.default
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* Preview image styles.
|
|
83
|
+
*/
|
|
84
|
+
previewImage: (o) => {
|
|
85
|
+
const { theme: e, ownerState: r } = o;
|
|
86
|
+
return {
|
|
87
|
+
width: "100%",
|
|
88
|
+
height: "100%",
|
|
89
|
+
objectFit: "contain",
|
|
90
|
+
transition: "filter 0.2s ease, opacity 0.2s ease, transform 0.2s ease",
|
|
91
|
+
opacity: r?.isPlaceholder ? 0.82 : 1,
|
|
92
|
+
transform: r?.disabled ? "scale(0.98)" : "scale(1)",
|
|
93
|
+
borderRadius: e.vars.size.borderRadius.r2
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
/**
|
|
97
|
+
* Overlay container styles.
|
|
98
|
+
*/
|
|
99
|
+
overlay: (o) => {
|
|
100
|
+
const { theme: e } = o;
|
|
101
|
+
return {
|
|
102
|
+
position: "absolute",
|
|
103
|
+
inset: 0,
|
|
104
|
+
overflow: "hidden",
|
|
105
|
+
display: "flex",
|
|
106
|
+
alignItems: "center",
|
|
107
|
+
justifyContent: "center",
|
|
108
|
+
opacity: 0,
|
|
109
|
+
pointerEvents: "none",
|
|
110
|
+
borderRadius: e.vars.size.borderRadius.r2,
|
|
111
|
+
"&::before": {
|
|
112
|
+
content: '""',
|
|
113
|
+
position: "absolute",
|
|
114
|
+
inset: 0,
|
|
115
|
+
backgroundColor: e.vars.palette.background.surface,
|
|
116
|
+
opacity: 0.5
|
|
117
|
+
},
|
|
118
|
+
transition: "opacity 0.2s ease"
|
|
119
|
+
};
|
|
120
|
+
},
|
|
121
|
+
/**
|
|
122
|
+
* Refresh icon styles rendered above the blur layer.
|
|
123
|
+
*/
|
|
124
|
+
overlayIcon: (o) => {
|
|
125
|
+
const { theme: e } = o;
|
|
126
|
+
return {
|
|
127
|
+
position: "relative",
|
|
128
|
+
zIndex: 1,
|
|
129
|
+
fontSize: 18,
|
|
130
|
+
color: e.vars.palette.primary.contrastText
|
|
131
|
+
};
|
|
132
|
+
},
|
|
133
|
+
popover: {},
|
|
134
|
+
/**
|
|
135
|
+
* Options grid layout styles.
|
|
136
|
+
*/
|
|
137
|
+
optionsGrid: (o) => {
|
|
138
|
+
const { theme: e, ownerState: r } = o, t = r?.imageSize ?? d, a = r?.maxColumns ?? b, l = r?.maxRows ?? S, p = a > 0, g = l > 0, n = r?.presentationType === "grid" ? e.vars.size.baseSpacings.sp1 : void 0, x = r?.hasVerticalScroll ? f : 0, m = a * t + (a - 1) * i + x, v = l * t + (l - 1) * i, y = p ? n ? h(m, n) : `${m}px` : void 0, c = g ? n ? h(v, n) : `${v}px` : void 0;
|
|
139
|
+
return {
|
|
140
|
+
boxSizing: r?.presentationType === "grid" ? "border-box" : void 0,
|
|
141
|
+
...p ? {
|
|
142
|
+
display: "grid",
|
|
143
|
+
gridTemplateColumns: `repeat(${a}, ${t}px)`,
|
|
144
|
+
width: y
|
|
145
|
+
} : {
|
|
146
|
+
display: "flex",
|
|
147
|
+
flexWrap: "wrap",
|
|
148
|
+
width: "100%"
|
|
149
|
+
},
|
|
150
|
+
gap: `${i}px`,
|
|
151
|
+
alignContent: "flex-start",
|
|
152
|
+
minWidth: `${t}px`,
|
|
153
|
+
maxWidth: "100%",
|
|
154
|
+
padding: r?.presentationType === "grid" ? e.vars.size.baseSpacings.sp1 : void 0,
|
|
155
|
+
borderRadius: e.vars.size.borderRadius.r2,
|
|
156
|
+
boxShadow: u(r) ? `0 0 0 1px ${e.vars.palette.error.main}` : "none",
|
|
157
|
+
...r?.hasVerticalScroll && {
|
|
158
|
+
scrollbarGutter: "stable"
|
|
159
|
+
},
|
|
160
|
+
overflowX: p ? "auto" : "hidden",
|
|
161
|
+
overflowY: c ? "auto" : "visible",
|
|
162
|
+
...c && {
|
|
163
|
+
maxHeight: c
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
},
|
|
167
|
+
/**
|
|
168
|
+
* Selectable option tile styles.
|
|
169
|
+
*/
|
|
170
|
+
option: (o) => {
|
|
171
|
+
const { theme: e, ownerState: r } = o, t = r?.imageSize ?? d;
|
|
172
|
+
return {
|
|
173
|
+
width: `${t}px`,
|
|
174
|
+
height: `${t}px`,
|
|
175
|
+
aspectRatio: "1 / 1",
|
|
176
|
+
padding: r?.size === "small" ? e.vars.size.baseSpacings["sp0-5"] : e.vars.size.baseSpacings.sp1,
|
|
177
|
+
borderRadius: e.vars.size.borderRadius.r2,
|
|
178
|
+
border: e.vars.size.borderStroke.container,
|
|
179
|
+
borderColor: r?.selected ? e.vars.palette.primary.focus : "transparent",
|
|
180
|
+
backgroundColor: r?.selected ? e.vars.palette.primary.opacity : e.vars.palette.background.default,
|
|
181
|
+
transition: "border-color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease",
|
|
182
|
+
"&:hover": {
|
|
183
|
+
borderColor: r?.selected ? e.vars.palette.primary.focus : e.vars.palette.border.secondary,
|
|
184
|
+
backgroundColor: e.vars.palette.background.base
|
|
185
|
+
},
|
|
186
|
+
"&:focus-visible": {
|
|
187
|
+
outline: "none",
|
|
188
|
+
borderColor: e.vars.palette.primary.focus
|
|
189
|
+
},
|
|
190
|
+
"&.Mui-disabled": {
|
|
191
|
+
opacity: 0.64
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
},
|
|
195
|
+
/**
|
|
196
|
+
* Option image sizing styles.
|
|
197
|
+
*/
|
|
198
|
+
optionImage: () => ({
|
|
199
|
+
width: "100%",
|
|
200
|
+
height: "100%",
|
|
201
|
+
objectFit: "contain"
|
|
202
|
+
}),
|
|
203
|
+
/**
|
|
204
|
+
* Loading state container styles.
|
|
205
|
+
*/
|
|
206
|
+
loadingState: (o) => {
|
|
207
|
+
const { theme: e, ownerState: r } = o, t = r?.imageSize ?? d, a = r?.maxColumns ?? b;
|
|
208
|
+
return {
|
|
209
|
+
width: `${a * t + (a - 1) * i}px`,
|
|
210
|
+
maxWidth: "100%",
|
|
211
|
+
minHeight: `${t * 1.45}px`,
|
|
212
|
+
display: "flex",
|
|
213
|
+
alignItems: "center",
|
|
214
|
+
justifyContent: "center",
|
|
215
|
+
borderRadius: e.vars.size.borderRadius.r2,
|
|
216
|
+
boxShadow: u(r) ? `0 0 0 1px ${e.vars.palette.error.main}` : "none"
|
|
217
|
+
};
|
|
218
|
+
},
|
|
219
|
+
/**
|
|
220
|
+
* Empty state message layout styles.
|
|
221
|
+
*/
|
|
222
|
+
emptyState: (o) => {
|
|
223
|
+
const { theme: e, ownerState: r } = o, t = r?.imageSize ?? d, a = r?.maxColumns ?? b;
|
|
224
|
+
return {
|
|
225
|
+
boxSizing: "border-box",
|
|
226
|
+
width: `${a * t + (a - 1) * i}px`,
|
|
227
|
+
maxWidth: "100%",
|
|
228
|
+
minHeight: `${t * 1.45}px`,
|
|
229
|
+
display: "flex",
|
|
230
|
+
alignItems: "center",
|
|
231
|
+
justifyContent: "center",
|
|
232
|
+
borderRadius: e.vars.size.borderRadius.r2,
|
|
233
|
+
boxShadow: u(r) ? `0 0 0 1px ${e.vars.palette.error.main}` : "none",
|
|
234
|
+
textAlign: "center",
|
|
235
|
+
whiteSpace: "normal",
|
|
236
|
+
overflowWrap: "anywhere",
|
|
237
|
+
wordBreak: "break-word",
|
|
238
|
+
color: e.vars.palette.text.secondary,
|
|
239
|
+
padding: e.vars.size.baseSpacings.sp3
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
export {
|
|
244
|
+
$ as imageSelectorStyles
|
|
245
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const IMAGE_SELECTOR_KEY_COMPONENT = "M4LImageSelector";
|
|
2
|
+
export declare const IMAGE_SELECTOR_DICTIONARY_KEY = "image_selector";
|
|
3
|
+
export declare const IMAGE_SELECTOR_CLASSES: Record<"overlay" | "option" | "popover" | "root" | "trigger" | "previewFrame" | "previewImage" | "overlayIcon" | "optionsGrid" | "optionImage" | "loadingState" | "emptyState", string>;
|
|
4
|
+
export declare const DEFAULT_PRESENTATION_TYPE = "standard";
|
|
5
|
+
export declare const DEFAULT_TIMEOUT = 5000;
|
|
6
|
+
export declare const DEFAULT_RESULT_FIELD = "data";
|
|
7
|
+
export declare const DEFAULT_PLACEHOLDER_ALT = "No image selected";
|
|
8
|
+
export declare const DEFAULT_MAX_COLUMNS = 4;
|
|
9
|
+
export declare const DEFAULT_MAX_ROWS = 2;
|
|
10
|
+
export declare const TRIGGER_DIMENSION = 42;
|
|
11
|
+
export declare const OPTION_DIMENSION = 48;
|
|
12
|
+
export declare const GRID_GAP = 8;
|
|
13
|
+
export declare const SCROLLBAR_TRACK_SIZE = 12;
|
|
14
|
+
export declare const DEFAULT_PLACEHOLDER_IMAGE_SRC = "frontend/components/ImageSelector/assets/icons/no_image.png";
|
|
15
|
+
export declare const OVERLAY_ICON = "frontend/components/ImageSelector/assets/icons/arrow_reload_horizontal.svg";
|
|
16
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../../packages/components/src/components/ImageSelector/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,4BAA4B,qBAAqB,CAAC;AAC/D,eAAO,MAAM,6BAA6B,mBAAmB,CAAC;AAE9D,eAAO,MAAM,sBAAsB,yLAGlC,CAAC;AAEF,eAAO,MAAM,yBAAyB,aAAa,CAAC;AACpD,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAC3C,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAC3D,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,eAAO,MAAM,QAAQ,IAAI,CAAC;AAE1B,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,eAAO,MAAM,6BAA6B,gEAAgE,CAAC;AAC3G,eAAO,MAAM,YAAY,+EAA+E,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { getComponentClasses as o } from "../../utils/getComponentSlotRoot.js";
|
|
2
|
+
import { ImageSelectorSlots as t } from "./slots/ImageSelectorEnum.js";
|
|
3
|
+
const E = "M4LImageSelector", _ = "image_selector", n = o(
|
|
4
|
+
E,
|
|
5
|
+
t
|
|
6
|
+
), c = "standard", A = 5e3, L = "data", I = "No image selected", T = 4, S = 2, O = 42, a = 48, r = 8, R = 12, C = "frontend/components/ImageSelector/assets/icons/no_image.png", m = "frontend/components/ImageSelector/assets/icons/arrow_reload_horizontal.svg";
|
|
7
|
+
export {
|
|
8
|
+
T as DEFAULT_MAX_COLUMNS,
|
|
9
|
+
S as DEFAULT_MAX_ROWS,
|
|
10
|
+
I as DEFAULT_PLACEHOLDER_ALT,
|
|
11
|
+
C as DEFAULT_PLACEHOLDER_IMAGE_SRC,
|
|
12
|
+
c as DEFAULT_PRESENTATION_TYPE,
|
|
13
|
+
L as DEFAULT_RESULT_FIELD,
|
|
14
|
+
A as DEFAULT_TIMEOUT,
|
|
15
|
+
r as GRID_GAP,
|
|
16
|
+
n as IMAGE_SELECTOR_CLASSES,
|
|
17
|
+
_ as IMAGE_SELECTOR_DICTIONARY_KEY,
|
|
18
|
+
E as IMAGE_SELECTOR_KEY_COMPONENT,
|
|
19
|
+
a as OPTION_DIMENSION,
|
|
20
|
+
m as OVERLAY_ICON,
|
|
21
|
+
R as SCROLLBAR_TRACK_SIZE,
|
|
22
|
+
O as TRIGGER_DIMENSION
|
|
23
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const DICTIONARY: {
|
|
2
|
+
readonly LABEL_NO_IMAGES_AVAILABLE: "image_selector.label_no_images_available";
|
|
3
|
+
};
|
|
4
|
+
/**
|
|
5
|
+
* Return the dictionary namespaces required by ImageSelector.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getImageSelectorComponentsDictionary(): string[];
|
|
8
|
+
//# sourceMappingURL=dictionary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dictionary.d.ts","sourceRoot":"","sources":["../../../../../../packages/components/src/components/ImageSelector/dictionary.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU;;CAEb,CAAC;AAEX;;GAEG;AACH,wBAAgB,oCAAoC,aAEnD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IMAGE_SELECTOR_DICTIONARY_KEY as e } from "./constants.js";
|
|
2
|
+
const t = {
|
|
3
|
+
LABEL_NO_IMAGES_AVAILABLE: `${e}.label_no_images_available`
|
|
4
|
+
};
|
|
5
|
+
function _() {
|
|
6
|
+
return [e];
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
t as DICTIONARY,
|
|
10
|
+
_ as getImageSelectorComponentsDictionary
|
|
11
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { UseImageSelectorProps, UseImageSelectorResult } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the async options and interactive state used by ImageSelector.
|
|
4
|
+
*/
|
|
5
|
+
export declare function useImageSelector<T>(props: UseImageSelectorProps<T>): UseImageSelectorResult<T>;
|
|
6
|
+
//# sourceMappingURL=useImageSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useImageSelector.d.ts","sourceRoot":"","sources":["../../../../../../../packages/components/src/components/ImageSelector/hooks/useImageSelector.ts"],"names":[],"mappings":"AAwBA,OAAO,EAEL,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAalB;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAC9B,sBAAsB,CAAC,CAAC,CAAC,CAwgB3B"}
|