@smwb/ui-solid 0.2.1 → 0.3.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/dist/assets/styles/less/components/carousel/carousel.entry.css +1 -1
- package/dist/components/dataDisplay/carousel/carousel.js +152 -138
- package/dist/components/dataDisplay/carousel/carousel.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatAttachmentImage.js +17 -17
- package/dist/components/dataDisplay/chat/chatAttachmentImage.js.map +1 -1
- package/dist/components/dataDisplay/chat/chatShell.js +16 -16
- package/dist/components/dataDisplay/chat/chatShell.js.map +1 -1
- package/dist/components/dataDisplay/expansionPanel/expansionPanel.js +25 -25
- package/dist/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
- package/dist/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.js +15 -15
- package/dist/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.js.map +1 -1
- package/dist/components/feedBack/modal/modal.js +29 -29
- package/dist/components/feedBack/modal/modal.js.map +1 -1
- package/dist/components/inputs/datePicker/datePicker.js +43 -43
- package/dist/components/inputs/datePicker/datePicker.js.map +1 -1
- package/dist/components/inputs/dateTimePicker/dateTimePicker.js +46 -46
- package/dist/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
- package/dist/components/inputs/selectField/dropdownMenu.js +30 -30
- package/dist/components/inputs/selectField/dropdownMenu.js.map +1 -1
- package/dist/components/inputs/slider/slider.js +48 -48
- package/dist/components/inputs/slider/slider.js.map +1 -1
- package/dist/components/inputs/timePicker/timePicker.js +31 -31
- package/dist/components/inputs/timePicker/timePicker.js.map +1 -1
- package/dist/components/layout/sheet/sheet.js +29 -29
- package/dist/components/layout/sheet/sheet.js.map +1 -1
- package/dist/headless/components/dataDisplay/carousel/carousel.js +157 -143
- package/dist/headless/components/dataDisplay/carousel/carousel.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatAttachmentImage.js +17 -17
- package/dist/headless/components/dataDisplay/chat/chatAttachmentImage.js.map +1 -1
- package/dist/headless/components/dataDisplay/chat/chatShell.js +16 -16
- package/dist/headless/components/dataDisplay/chat/chatShell.js.map +1 -1
- package/dist/headless/components/dataDisplay/expansionPanel/expansionPanel.js +25 -25
- package/dist/headless/components/dataDisplay/expansionPanel/expansionPanel.js.map +1 -1
- package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.js +15 -15
- package/dist/headless/components/dataDisplay/imagesList/imagesListItem/imagesListItemModal.js.map +1 -1
- package/dist/headless/components/feedBack/modal/modal.js +25 -25
- package/dist/headless/components/feedBack/modal/modal.js.map +1 -1
- package/dist/headless/components/inputs/datePicker/datePicker.js +43 -43
- package/dist/headless/components/inputs/datePicker/datePicker.js.map +1 -1
- package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js +46 -46
- package/dist/headless/components/inputs/dateTimePicker/dateTimePicker.js.map +1 -1
- package/dist/headless/components/inputs/selectField/dropdownMenu.js +30 -30
- package/dist/headless/components/inputs/selectField/dropdownMenu.js.map +1 -1
- package/dist/headless/components/inputs/slider/slider.js +90 -90
- package/dist/headless/components/inputs/slider/slider.js.map +1 -1
- package/dist/headless/components/inputs/timePicker/timePicker.js +31 -31
- package/dist/headless/components/inputs/timePicker/timePicker.js.map +1 -1
- package/dist/headless/components/layout/sheet/sheet.js +29 -29
- package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
- package/dist/ssr.ssr-spec.d.ts +1 -0
- package/package.json +4 -3
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { createComponent as i, mergeProps as ee, Portal as te, use as
|
|
2
|
-
import { splitProps as
|
|
3
|
-
import { buildFloatingMiddleware as
|
|
4
|
-
import { createFloating as
|
|
5
|
-
import { DataPickerHeader as
|
|
6
|
-
import { DataPickerDays as
|
|
1
|
+
import { createComponent as i, mergeProps as ee, Portal as te, use as re, insert as b, effect as ae, style as ne, setAttribute as oe, isServer as ie, template as se } from "solid-js/web";
|
|
2
|
+
import { splitProps as le, createSignal as u, createEffect as L, createMemo as me, onCleanup as ce, Show as ue } from "solid-js";
|
|
3
|
+
import { buildFloatingMiddleware as de, resolvePlacement as ge } from "../../../utils/floating.js";
|
|
4
|
+
import { createFloating as fe } from "../../../primitives/createFloating.js";
|
|
5
|
+
import { DataPickerHeader as he } from "../datePicker/dataPickerHeader.js";
|
|
6
|
+
import { DataPickerDays as pe } from "../datePicker/dataPickerDays.js";
|
|
7
7
|
import { DatePickerList as E } from "../datePicker/datePickerList.js";
|
|
8
|
-
import { isValidDate as w, getMonths as
|
|
9
|
-
import { OpenView as
|
|
10
|
-
import { TimePickerColumns as
|
|
11
|
-
import { isValidTimeDate as D, mergeTime as
|
|
12
|
-
import { DateTimePickerInput as
|
|
8
|
+
import { isValidDate as w, getMonths as ve, getYears as be, setYear as we, setMonth as De } from "../datePicker/dateUtils.js";
|
|
9
|
+
import { OpenView as a } from "../datePicker/openView.js";
|
|
10
|
+
import { TimePickerColumns as Ce } from "../timePicker/timePickerColumns.js";
|
|
11
|
+
import { isValidTimeDate as D, mergeTime as ye, DEFAULT_TIME_FORMAT as ke, mergeDate as _e } from "../timePicker/timeUtils.js";
|
|
12
|
+
import { DateTimePickerInput as Fe } from "./dateTimePickerInput.js";
|
|
13
13
|
import { mergeRefs as I } from "../../../primitives/mergeRefs.js";
|
|
14
|
-
import { ClickAwayListener as
|
|
15
|
-
var
|
|
16
|
-
const
|
|
17
|
-
function
|
|
18
|
-
const [e, Y] =
|
|
14
|
+
import { ClickAwayListener as Me } from "../../clickAwayListener/clickAwayListener.js";
|
|
15
|
+
var Te = /* @__PURE__ */ se('<div class="smwb-date-picker smwb-date-time-picker"data-testid=date-time-picker role=dialog aria-modal=false style="transition:opacity 150ms ease-in-out"><div class="smwb-date-picker__inner smwb-date-time-picker__inner"><div class=smwb-date-time-picker__content><div class="smwb-date-picker__body smwb-date-time-picker__body">');
|
|
16
|
+
const Ve = 150;
|
|
17
|
+
function Ue(C) {
|
|
18
|
+
const [e, Y] = le(C, ["value", "onChange", "showDaysOutsideMonth", "disablePast", "disableFuture", "weekStartsOn", "placement", "disabled", "disableCalendar", "calendarAriaLabel", "minDate", "maxDate", "isDateDisabled", "locale", "format", "timeFormat", "calendarIcon", "onBlur", "ref"]), l = () => e.value === void 0 ? void 0 : new Date(e.value), f = l(), [o, m] = u(w(f) || D(f) ? f : /* @__PURE__ */ new Date()), [d, g] = u(a.days), [H, y] = u(!1);
|
|
19
19
|
let k, _;
|
|
20
|
-
const F = () =>
|
|
20
|
+
const F = () => ge(e.placement ?? "bottom-start"), h = fe({
|
|
21
21
|
placement: () => F().placement,
|
|
22
|
-
middleware: () =>
|
|
22
|
+
middleware: () => de(F())
|
|
23
23
|
});
|
|
24
24
|
L(() => {
|
|
25
25
|
if (e.disabled) return;
|
|
@@ -29,37 +29,37 @@ function qe(C) {
|
|
|
29
29
|
const $ = () => e.weekStartsOn ?? 1, x = (t) => {
|
|
30
30
|
m(t);
|
|
31
31
|
}, B = () => {
|
|
32
|
-
g(d() ===
|
|
32
|
+
g(d() === a.months ? a.days : a.months);
|
|
33
33
|
}, R = () => {
|
|
34
|
-
g(d() ===
|
|
34
|
+
g(d() === a.years ? a.days : a.years);
|
|
35
35
|
}, q = (t) => {
|
|
36
|
-
m(
|
|
36
|
+
m(De(o(), t)), g(a.days);
|
|
37
37
|
}, U = (t) => {
|
|
38
|
-
m(
|
|
38
|
+
m(we(o(), t)), g(a.days);
|
|
39
39
|
}, M = (t) => {
|
|
40
40
|
m(t), e.onChange?.(void 0, t, C);
|
|
41
|
-
}, j = (t,
|
|
42
|
-
if (!
|
|
41
|
+
}, j = (t, r) => {
|
|
42
|
+
if (!r) return;
|
|
43
43
|
const n = l(), v = D(n) ? n : o();
|
|
44
|
-
M(
|
|
44
|
+
M(_e(r, v));
|
|
45
45
|
}, z = (t) => {
|
|
46
|
-
const
|
|
47
|
-
M(
|
|
46
|
+
const r = l(), n = w(r) ? r : o();
|
|
47
|
+
M(ye(n, t));
|
|
48
48
|
}, G = () => {
|
|
49
49
|
e.disabled || y((t) => !t);
|
|
50
50
|
}, J = (t) => {
|
|
51
|
-
const
|
|
52
|
-
_?.contains(
|
|
53
|
-
}, K = () => e.timeFormat ? e.timeFormat : e.format?.includes("HH:mm:ss") ? "HH:mm:ss" :
|
|
51
|
+
const r = t.target;
|
|
52
|
+
_?.contains(r) || k?.contains(r) || y(!1);
|
|
53
|
+
}, K = () => e.timeFormat ? e.timeFormat : e.format?.includes("HH:mm:ss") ? "HH:mm:ss" : ke, N = me(() => ve(e.locale)), Q = be((/* @__PURE__ */ new Date()).getFullYear(), 100), T = () => H() && !e.disabled && !e.disableCalendar, [V, O] = u(T()), [W, P] = u(!1);
|
|
54
54
|
let p, c;
|
|
55
55
|
L(() => {
|
|
56
|
-
T() ? (c !== void 0 && clearTimeout(c), O(!0), p = requestAnimationFrame(() => P(!0))) : (P(!1), V() && (c = setTimeout(() => O(!1),
|
|
57
|
-
}),
|
|
56
|
+
T() ? (c !== void 0 && clearTimeout(c), O(!0), p = requestAnimationFrame(() => P(!0))) : (P(!1), V() && (c = setTimeout(() => O(!1), Ve)));
|
|
57
|
+
}), ce(() => {
|
|
58
58
|
p !== void 0 && cancelAnimationFrame(p), c !== void 0 && clearTimeout(c);
|
|
59
59
|
});
|
|
60
60
|
const X = () => {
|
|
61
61
|
switch (d()) {
|
|
62
|
-
case
|
|
62
|
+
case a.months:
|
|
63
63
|
return i(E, {
|
|
64
64
|
get value() {
|
|
65
65
|
return o().getMonth();
|
|
@@ -69,7 +69,7 @@ function qe(C) {
|
|
|
69
69
|
},
|
|
70
70
|
onChange: q
|
|
71
71
|
});
|
|
72
|
-
case
|
|
72
|
+
case a.years:
|
|
73
73
|
return i(E, {
|
|
74
74
|
get value() {
|
|
75
75
|
return o().getFullYear();
|
|
@@ -78,7 +78,7 @@ function qe(C) {
|
|
|
78
78
|
onChange: U
|
|
79
79
|
});
|
|
80
80
|
default:
|
|
81
|
-
return i(
|
|
81
|
+
return i(pe, {
|
|
82
82
|
get viewValue() {
|
|
83
83
|
return o();
|
|
84
84
|
},
|
|
@@ -113,10 +113,10 @@ function qe(C) {
|
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
115
|
};
|
|
116
|
-
return [i(
|
|
116
|
+
return [i(Fe, ee({
|
|
117
117
|
ref(t) {
|
|
118
|
-
var
|
|
119
|
-
typeof
|
|
118
|
+
var r = I(e.ref, h.setReference, (n) => k = n);
|
|
119
|
+
typeof r == "function" && r(t);
|
|
120
120
|
},
|
|
121
121
|
get value() {
|
|
122
122
|
return e.value;
|
|
@@ -140,21 +140,21 @@ function qe(C) {
|
|
|
140
140
|
get calendarIcon() {
|
|
141
141
|
return e.calendarIcon;
|
|
142
142
|
}
|
|
143
|
-
}, Y)), i(
|
|
143
|
+
}, Y)), i(ue, {
|
|
144
144
|
get when() {
|
|
145
145
|
return V();
|
|
146
146
|
},
|
|
147
147
|
get children() {
|
|
148
148
|
return i(te, {
|
|
149
149
|
get mount() {
|
|
150
|
-
return document.body;
|
|
150
|
+
return ie ? void 0 : document.body;
|
|
151
151
|
},
|
|
152
152
|
get children() {
|
|
153
|
-
return i(
|
|
153
|
+
return i(Me, {
|
|
154
154
|
onClickAway: J,
|
|
155
155
|
get children() {
|
|
156
|
-
var t =
|
|
157
|
-
return typeof S == "function" &&
|
|
156
|
+
var t = Te(), r = t.firstChild, n = r.firstChild, v = n.firstChild, S = I(h.setFloating, (s) => _ = s);
|
|
157
|
+
return typeof S == "function" && re(S, t), b(r, i(he, {
|
|
158
158
|
get viewValue() {
|
|
159
159
|
return o();
|
|
160
160
|
},
|
|
@@ -167,7 +167,7 @@ function qe(C) {
|
|
|
167
167
|
onChange: x,
|
|
168
168
|
onMonthLabelClick: B,
|
|
169
169
|
onYearLabelClick: R
|
|
170
|
-
}), n), b(v, X), b(n, i(
|
|
170
|
+
}), n), b(v, X), b(n, i(Ce, {
|
|
171
171
|
get value() {
|
|
172
172
|
return o();
|
|
173
173
|
},
|
|
@@ -175,7 +175,7 @@ function qe(C) {
|
|
|
175
175
|
return K();
|
|
176
176
|
},
|
|
177
177
|
onChange: z
|
|
178
|
-
}), null),
|
|
178
|
+
}), null), ae((s) => {
|
|
179
179
|
var Z = {
|
|
180
180
|
...h.floatingStyles(),
|
|
181
181
|
opacity: W() ? 1 : 0
|
|
@@ -193,6 +193,6 @@ function qe(C) {
|
|
|
193
193
|
})];
|
|
194
194
|
}
|
|
195
195
|
export {
|
|
196
|
-
|
|
196
|
+
Ue as DateTimePicker
|
|
197
197
|
};
|
|
198
198
|
//# sourceMappingURL=dateTimePicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateTimePicker.js","sources":["../../../../src/components/inputs/dateTimePicker/dateTimePicker.tsx"],"sourcesContent":["import { type JSX, Show, createEffect, createMemo, createSignal, onCleanup, splitProps } from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport { buildFloatingMiddleware, type Placement, resolvePlacement } from \"../../../utils/floating\";\nimport { createFloating } from \"../../../primitives/createFloating\";\nimport { ClickAwayListener } from \"../../clickAwayListener\";\nimport type { TextFieldProps } from \"../textField\";\nimport { DataPickerHeader } from \"../datePicker/dataPickerHeader\";\nimport { DataPickerDays } from \"../datePicker/dataPickerDays\";\nimport { DatePickerList } from \"../datePicker/datePickerList\";\nimport { type WeekStart, getMonths, getYears, isValidDate, setMonth, setYear } from \"../datePicker/dateUtils\";\nimport { OpenView } from \"../datePicker/openView\";\nimport { TimePickerColumns } from \"../timePicker/timePickerColumns\";\nimport { DEFAULT_TIME_FORMAT, isValidTimeDate, mergeDate, mergeTime } from \"../timePicker/timeUtils\";\nimport { DateTimePickerInput } from \"./dateTimePickerInput\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface DateTimePickerProps\n extends Omit<TextFieldProps, \"onBlur\" | \"onChange\" | \"value\" | \"defaultValue\" | \"ref\" | \"onToggle\"> {\n showDaysOutsideMonth?: boolean | undefined;\n disablePast?: boolean | undefined;\n disableFuture?: boolean | undefined;\n minDate?: Date | undefined;\n maxDate?: Date | undefined;\n isDateDisabled?: ((day: Date) => boolean) | undefined;\n weekStartsOn?: WeekStart | undefined;\n locale?: string | undefined;\n /** Input format with tokens dd, MM, yyyy, HH, mm, ss, e.g. \"dd/MM/yyyy HH:mm\". */\n format?: string | undefined;\n /** Time portion format when using the clock columns. Defaults to \"HH:mm\". */\n timeFormat?: string | undefined;\n placement?: Placement | undefined;\n disableCalendar?: boolean | undefined;\n label?: string | undefined;\n calendarAriaLabel?: string | undefined;\n value?: Date | string | undefined;\n calendarIcon?: JSX.Element;\n onChange?: ((event?: Event, value?: Date, data?: DateTimePickerProps) => void) | undefined;\n onBlur?: ((event?: FocusEvent, value?: Date, data?: DateTimePickerProps) => void) | undefined;\n ref?: Ref<HTMLInputElement>;\n}\n\nconst FADE_MS = 150;\n\nexport function DateTimePicker(props: DateTimePickerProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"value\",\n \"onChange\",\n \"showDaysOutsideMonth\",\n \"disablePast\",\n \"disableFuture\",\n \"weekStartsOn\",\n \"placement\",\n \"disabled\",\n \"disableCalendar\",\n \"calendarAriaLabel\",\n \"minDate\",\n \"maxDate\",\n \"isDateDisabled\",\n \"locale\",\n \"format\",\n \"timeFormat\",\n \"calendarIcon\",\n \"onBlur\",\n \"ref\",\n ]);\n\n const value = (): Date | undefined => (local.value === undefined ? undefined : new Date(local.value));\n\n const initialValue = value();\n const [viewValue, setViewValue] = createSignal<Date>(\n isValidDate(initialValue) || isValidTimeDate(initialValue) ? initialValue : new Date()\n );\n const [openView, setOpenView] = createSignal<OpenView>(OpenView.days);\n const [isOpen, setIsOpen] = createSignal(false);\n\n let anchorEl: HTMLElement | undefined;\n let popupEl: HTMLElement | undefined;\n\n const resolved = (): ReturnType<typeof resolvePlacement> => resolvePlacement(local.placement ?? \"bottom-start\");\n const floating = createFloating({\n placement: () => resolved().placement,\n middleware: () => buildFloatingMiddleware(resolved()),\n });\n\n createEffect(() => {\n if (local.disabled) return;\n const v = value();\n setViewValue(isValidDate(v) || isValidTimeDate(v) ? v : new Date());\n });\n\n const weekStartsOn = (): WeekStart => local.weekStartsOn ?? 1;\n\n const onViewValueChange = (next: Date): void => {\n setViewValue(next);\n };\n\n const onMonthLabelClick = (): void => {\n setOpenView(openView() === OpenView.months ? OpenView.days : OpenView.months);\n };\n\n const onYearLabelClick = (): void => {\n setOpenView(openView() === OpenView.years ? OpenView.days : OpenView.years);\n };\n\n const onMonthChange = (month: number): void => {\n setViewValue(setMonth(viewValue(), month));\n setOpenView(OpenView.days);\n };\n\n const onYearChange = (year: number): void => {\n setViewValue(setYear(viewValue(), year));\n setOpenView(OpenView.days);\n };\n\n const emitChange = (next: Date): void => {\n setViewValue(next);\n local.onChange?.(undefined, next, props);\n };\n\n const onDateChange = (_event?: Event, date?: Date): void => {\n if (!date) return;\n const v = value();\n const timeSource = isValidTimeDate(v) ? v : viewValue();\n emitChange(mergeDate(date, timeSource));\n };\n\n const onTimeChange = (timeDate: Date): void => {\n const v = value();\n const dateSource = isValidDate(v) ? v : viewValue();\n emitChange(mergeTime(dateSource, timeDate));\n };\n\n const onToggle = (): void => {\n if (!local.disabled) setIsOpen((prev) => !prev);\n };\n\n const onClickAway = (event: MouseEvent | TouchEvent): void => {\n const target = event.target as HTMLElement;\n if (popupEl?.contains(target) || anchorEl?.contains(target)) return;\n setIsOpen(false);\n };\n\n const resolvedTimeFormat = (): string => {\n if (local.timeFormat) return local.timeFormat;\n if (local.format?.includes(\"HH:mm:ss\")) return \"HH:mm:ss\";\n return DEFAULT_TIME_FORMAT;\n };\n\n const months = createMemo(() => getMonths(local.locale));\n const years = getYears(new Date().getFullYear(), 100);\n\n const shouldOpen = (): boolean => isOpen() && !local.disabled && !local.disableCalendar;\n const [mounted, setMounted] = createSignal(shouldOpen());\n const [shown, setShown] = createSignal(false);\n let raf: number | undefined;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n createEffect(() => {\n if (shouldOpen()) {\n if (timer !== undefined) clearTimeout(timer);\n setMounted(true);\n raf = requestAnimationFrame(() => setShown(true));\n } else {\n setShown(false);\n if (mounted()) timer = setTimeout(() => setMounted(false), FADE_MS);\n }\n });\n onCleanup(() => {\n if (raf !== undefined) cancelAnimationFrame(raf);\n if (timer !== undefined) clearTimeout(timer);\n });\n\n const view = (): JSX.Element => {\n switch (openView()) {\n case OpenView.months:\n return <DatePickerList value={viewValue().getMonth()} items={months()} onChange={onMonthChange} />;\n case OpenView.years:\n return <DatePickerList value={viewValue().getFullYear()} items={years} onChange={onYearChange} />;\n default:\n return (\n <DataPickerDays\n viewValue={viewValue()}\n value={value()}\n showDaysOutsideMonth={local.showDaysOutsideMonth}\n onChange={onDateChange}\n disablePast={local.disablePast}\n disableFuture={local.disableFuture}\n weekStartsOn={weekStartsOn()}\n minDate={local.minDate}\n maxDate={local.maxDate}\n isDateDisabled={local.isDateDisabled}\n locale={local.locale}\n />\n );\n }\n };\n\n return (\n <>\n <DateTimePickerInput\n ref={mergeRefs(local.ref, floating.setReference, (el) => (anchorEl = el as HTMLElement))}\n value={local.value}\n onChange={local.onChange}\n onBlur={local.onBlur}\n onToggle={onToggle}\n disabled={local.disabled}\n disableCalendar={local.disableCalendar}\n format={local.format}\n calendarIcon={local.calendarIcon}\n {...rest}\n />\n <Show when={mounted()}>\n <Portal mount={document.body}>\n <ClickAwayListener onClickAway={onClickAway}>\n <div\n ref={mergeRefs(floating.setFloating, (el) => (popupEl = el as HTMLElement))}\n class=\"smwb-date-picker smwb-date-time-picker\"\n style={{\n ...floating.floatingStyles(),\n transition: `opacity ${FADE_MS}ms ease-in-out`,\n opacity: shown() ? 1 : 0,\n }}\n data-testid=\"date-time-picker\"\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label={local.calendarAriaLabel ?? \"Choose date and time\"}\n >\n <div class=\"smwb-date-picker__inner smwb-date-time-picker__inner\">\n <DataPickerHeader\n viewValue={viewValue()}\n locale={local.locale}\n openView={openView()}\n onChange={onViewValueChange}\n onMonthLabelClick={onMonthLabelClick}\n onYearLabelClick={onYearLabelClick}\n />\n <div class=\"smwb-date-time-picker__content\">\n <div class=\"smwb-date-picker__body smwb-date-time-picker__body\">{view()}</div>\n <TimePickerColumns value={viewValue()} format={resolvedTimeFormat()} onChange={onTimeChange} />\n </div>\n </div>\n </div>\n </ClickAwayListener>\n </Portal>\n </Show>\n </>\n );\n}\n\nexport default DateTimePicker;\n"],"names":["FADE_MS","DateTimePicker","props","local","rest","splitProps","value","undefined","Date","initialValue","viewValue","setViewValue","createSignal","isValidDate","isValidTimeDate","openView","setOpenView","OpenView","days","isOpen","setIsOpen","anchorEl","popupEl","resolved","resolvePlacement","placement","floating","createFloating","middleware","buildFloatingMiddleware","createEffect","disabled","v","weekStartsOn","onViewValueChange","next","onMonthLabelClick","months","onYearLabelClick","years","onMonthChange","month","setMonth","onYearChange","year","setYear","emitChange","onChange","onDateChange","_event","date","timeSource","mergeDate","onTimeChange","timeDate","dateSource","mergeTime","onToggle","prev","onClickAway","event","target","contains","resolvedTimeFormat","timeFormat","format","includes","DEFAULT_TIME_FORMAT","createMemo","getMonths","locale","getYears","getFullYear","shouldOpen","disableCalendar","mounted","setMounted","shown","setShown","raf","timer","clearTimeout","requestAnimationFrame","setTimeout","onCleanup","cancelAnimationFrame","view","_$createComponent","DatePickerList","getMonth","items","DataPickerDays","showDaysOutsideMonth","disablePast","disableFuture","minDate","maxDate","isDateDisabled","DateTimePickerInput","_$mergeProps","ref","r$","_ref$","mergeRefs","setReference","el","onBlur","calendarIcon","Show","when","children","Portal","mount","document","body","ClickAwayListener","_el$","_tmpl$","_el$2","firstChild","_el$3","_el$4","_ref$2","setFloating","_$use","_$insert","DataPickerHeader","TimePickerColumns","_$effect","_p$","_v$","floatingStyles","opacity","_v$2","calendarAriaLabel","e","_$style","t","_$setAttribute"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dateTimePicker.js","sources":["../../../../src/components/inputs/dateTimePicker/dateTimePicker.tsx"],"sourcesContent":["import { type JSX, Show, createEffect, createMemo, createSignal, onCleanup, splitProps } from \"solid-js\";\nimport { Portal, isServer } from \"solid-js/web\";\nimport { buildFloatingMiddleware, type Placement, resolvePlacement } from \"../../../utils/floating\";\nimport { createFloating } from \"../../../primitives/createFloating\";\nimport { ClickAwayListener } from \"../../clickAwayListener\";\nimport type { TextFieldProps } from \"../textField\";\nimport { DataPickerHeader } from \"../datePicker/dataPickerHeader\";\nimport { DataPickerDays } from \"../datePicker/dataPickerDays\";\nimport { DatePickerList } from \"../datePicker/datePickerList\";\nimport { type WeekStart, getMonths, getYears, isValidDate, setMonth, setYear } from \"../datePicker/dateUtils\";\nimport { OpenView } from \"../datePicker/openView\";\nimport { TimePickerColumns } from \"../timePicker/timePickerColumns\";\nimport { DEFAULT_TIME_FORMAT, isValidTimeDate, mergeDate, mergeTime } from \"../timePicker/timeUtils\";\nimport { DateTimePickerInput } from \"./dateTimePickerInput\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface DateTimePickerProps\n extends Omit<TextFieldProps, \"onBlur\" | \"onChange\" | \"value\" | \"defaultValue\" | \"ref\" | \"onToggle\"> {\n showDaysOutsideMonth?: boolean | undefined;\n disablePast?: boolean | undefined;\n disableFuture?: boolean | undefined;\n minDate?: Date | undefined;\n maxDate?: Date | undefined;\n isDateDisabled?: ((day: Date) => boolean) | undefined;\n weekStartsOn?: WeekStart | undefined;\n locale?: string | undefined;\n /** Input format with tokens dd, MM, yyyy, HH, mm, ss, e.g. \"dd/MM/yyyy HH:mm\". */\n format?: string | undefined;\n /** Time portion format when using the clock columns. Defaults to \"HH:mm\". */\n timeFormat?: string | undefined;\n placement?: Placement | undefined;\n disableCalendar?: boolean | undefined;\n label?: string | undefined;\n calendarAriaLabel?: string | undefined;\n value?: Date | string | undefined;\n calendarIcon?: JSX.Element;\n onChange?: ((event?: Event, value?: Date, data?: DateTimePickerProps) => void) | undefined;\n onBlur?: ((event?: FocusEvent, value?: Date, data?: DateTimePickerProps) => void) | undefined;\n ref?: Ref<HTMLInputElement>;\n}\n\nconst FADE_MS = 150;\n\nexport function DateTimePicker(props: DateTimePickerProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"value\",\n \"onChange\",\n \"showDaysOutsideMonth\",\n \"disablePast\",\n \"disableFuture\",\n \"weekStartsOn\",\n \"placement\",\n \"disabled\",\n \"disableCalendar\",\n \"calendarAriaLabel\",\n \"minDate\",\n \"maxDate\",\n \"isDateDisabled\",\n \"locale\",\n \"format\",\n \"timeFormat\",\n \"calendarIcon\",\n \"onBlur\",\n \"ref\",\n ]);\n\n const value = (): Date | undefined => (local.value === undefined ? undefined : new Date(local.value));\n\n const initialValue = value();\n const [viewValue, setViewValue] = createSignal<Date>(\n isValidDate(initialValue) || isValidTimeDate(initialValue) ? initialValue : new Date()\n );\n const [openView, setOpenView] = createSignal<OpenView>(OpenView.days);\n const [isOpen, setIsOpen] = createSignal(false);\n\n let anchorEl: HTMLElement | undefined;\n let popupEl: HTMLElement | undefined;\n\n const resolved = (): ReturnType<typeof resolvePlacement> => resolvePlacement(local.placement ?? \"bottom-start\");\n const floating = createFloating({\n placement: () => resolved().placement,\n middleware: () => buildFloatingMiddleware(resolved()),\n });\n\n createEffect(() => {\n if (local.disabled) return;\n const v = value();\n setViewValue(isValidDate(v) || isValidTimeDate(v) ? v : new Date());\n });\n\n const weekStartsOn = (): WeekStart => local.weekStartsOn ?? 1;\n\n const onViewValueChange = (next: Date): void => {\n setViewValue(next);\n };\n\n const onMonthLabelClick = (): void => {\n setOpenView(openView() === OpenView.months ? OpenView.days : OpenView.months);\n };\n\n const onYearLabelClick = (): void => {\n setOpenView(openView() === OpenView.years ? OpenView.days : OpenView.years);\n };\n\n const onMonthChange = (month: number): void => {\n setViewValue(setMonth(viewValue(), month));\n setOpenView(OpenView.days);\n };\n\n const onYearChange = (year: number): void => {\n setViewValue(setYear(viewValue(), year));\n setOpenView(OpenView.days);\n };\n\n const emitChange = (next: Date): void => {\n setViewValue(next);\n local.onChange?.(undefined, next, props);\n };\n\n const onDateChange = (_event?: Event, date?: Date): void => {\n if (!date) return;\n const v = value();\n const timeSource = isValidTimeDate(v) ? v : viewValue();\n emitChange(mergeDate(date, timeSource));\n };\n\n const onTimeChange = (timeDate: Date): void => {\n const v = value();\n const dateSource = isValidDate(v) ? v : viewValue();\n emitChange(mergeTime(dateSource, timeDate));\n };\n\n const onToggle = (): void => {\n if (!local.disabled) setIsOpen((prev) => !prev);\n };\n\n const onClickAway = (event: MouseEvent | TouchEvent): void => {\n const target = event.target as HTMLElement;\n if (popupEl?.contains(target) || anchorEl?.contains(target)) return;\n setIsOpen(false);\n };\n\n const resolvedTimeFormat = (): string => {\n if (local.timeFormat) return local.timeFormat;\n if (local.format?.includes(\"HH:mm:ss\")) return \"HH:mm:ss\";\n return DEFAULT_TIME_FORMAT;\n };\n\n const months = createMemo(() => getMonths(local.locale));\n const years = getYears(new Date().getFullYear(), 100);\n\n const shouldOpen = (): boolean => isOpen() && !local.disabled && !local.disableCalendar;\n const [mounted, setMounted] = createSignal(shouldOpen());\n const [shown, setShown] = createSignal(false);\n let raf: number | undefined;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n createEffect(() => {\n if (shouldOpen()) {\n if (timer !== undefined) clearTimeout(timer);\n setMounted(true);\n raf = requestAnimationFrame(() => setShown(true));\n } else {\n setShown(false);\n if (mounted()) timer = setTimeout(() => setMounted(false), FADE_MS);\n }\n });\n onCleanup(() => {\n if (raf !== undefined) cancelAnimationFrame(raf);\n if (timer !== undefined) clearTimeout(timer);\n });\n\n const view = (): JSX.Element => {\n switch (openView()) {\n case OpenView.months:\n return <DatePickerList value={viewValue().getMonth()} items={months()} onChange={onMonthChange} />;\n case OpenView.years:\n return <DatePickerList value={viewValue().getFullYear()} items={years} onChange={onYearChange} />;\n default:\n return (\n <DataPickerDays\n viewValue={viewValue()}\n value={value()}\n showDaysOutsideMonth={local.showDaysOutsideMonth}\n onChange={onDateChange}\n disablePast={local.disablePast}\n disableFuture={local.disableFuture}\n weekStartsOn={weekStartsOn()}\n minDate={local.minDate}\n maxDate={local.maxDate}\n isDateDisabled={local.isDateDisabled}\n locale={local.locale}\n />\n );\n }\n };\n\n return (\n <>\n <DateTimePickerInput\n ref={mergeRefs(local.ref, floating.setReference, (el) => (anchorEl = el as HTMLElement))}\n value={local.value}\n onChange={local.onChange}\n onBlur={local.onBlur}\n onToggle={onToggle}\n disabled={local.disabled}\n disableCalendar={local.disableCalendar}\n format={local.format}\n calendarIcon={local.calendarIcon}\n {...rest}\n />\n <Show when={mounted()}>\n <Portal mount={(isServer ? undefined : document.body) as Node}>\n <ClickAwayListener onClickAway={onClickAway}>\n <div\n ref={mergeRefs(floating.setFloating, (el) => (popupEl = el as HTMLElement))}\n class=\"smwb-date-picker smwb-date-time-picker\"\n style={{\n ...floating.floatingStyles(),\n transition: `opacity ${FADE_MS}ms ease-in-out`,\n opacity: shown() ? 1 : 0,\n }}\n data-testid=\"date-time-picker\"\n role=\"dialog\"\n aria-modal=\"false\"\n aria-label={local.calendarAriaLabel ?? \"Choose date and time\"}\n >\n <div class=\"smwb-date-picker__inner smwb-date-time-picker__inner\">\n <DataPickerHeader\n viewValue={viewValue()}\n locale={local.locale}\n openView={openView()}\n onChange={onViewValueChange}\n onMonthLabelClick={onMonthLabelClick}\n onYearLabelClick={onYearLabelClick}\n />\n <div class=\"smwb-date-time-picker__content\">\n <div class=\"smwb-date-picker__body smwb-date-time-picker__body\">{view()}</div>\n <TimePickerColumns value={viewValue()} format={resolvedTimeFormat()} onChange={onTimeChange} />\n </div>\n </div>\n </div>\n </ClickAwayListener>\n </Portal>\n </Show>\n </>\n );\n}\n\nexport default DateTimePicker;\n"],"names":["FADE_MS","DateTimePicker","props","local","rest","splitProps","value","undefined","Date","initialValue","viewValue","setViewValue","createSignal","isValidDate","isValidTimeDate","openView","setOpenView","OpenView","days","isOpen","setIsOpen","anchorEl","popupEl","resolved","resolvePlacement","placement","floating","createFloating","middleware","buildFloatingMiddleware","createEffect","disabled","v","weekStartsOn","onViewValueChange","next","onMonthLabelClick","months","onYearLabelClick","years","onMonthChange","month","setMonth","onYearChange","year","setYear","emitChange","onChange","onDateChange","_event","date","timeSource","mergeDate","onTimeChange","timeDate","dateSource","mergeTime","onToggle","prev","onClickAway","event","target","contains","resolvedTimeFormat","timeFormat","format","includes","DEFAULT_TIME_FORMAT","createMemo","getMonths","locale","getYears","getFullYear","shouldOpen","disableCalendar","mounted","setMounted","shown","setShown","raf","timer","clearTimeout","requestAnimationFrame","setTimeout","onCleanup","cancelAnimationFrame","view","_$createComponent","DatePickerList","getMonth","items","DataPickerDays","showDaysOutsideMonth","disablePast","disableFuture","minDate","maxDate","isDateDisabled","DateTimePickerInput","_$mergeProps","ref","r$","_ref$","mergeRefs","setReference","el","onBlur","calendarIcon","Show","when","children","Portal","mount","isServer","document","body","ClickAwayListener","_el$","_tmpl$","_el$2","firstChild","_el$3","_el$4","_ref$2","setFloating","_$use","_$insert","DataPickerHeader","TimePickerColumns","_$effect","_p$","_v$","floatingStyles","opacity","_v$2","calendarAriaLabel","e","_$style","t","_$setAttribute"],"mappings":"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"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { createComponent as r, Portal as L, insert as u, addEventListener as S, effect as O, setStyleProperty as d, template as o, memo as
|
|
2
|
-
import { createSignal as
|
|
3
|
-
import { createVirtualList as
|
|
4
|
-
import { Menu as
|
|
5
|
-
import { TextField as
|
|
6
|
-
import { MenuDivider as
|
|
7
|
-
import { ProgressIndicator as
|
|
1
|
+
import { createComponent as r, Portal as L, insert as u, addEventListener as S, effect as O, setStyleProperty as d, isServer as R, template as o, memo as W } from "solid-js/web";
|
|
2
|
+
import { createSignal as A, createEffect as x, onCleanup as D, Show as l, For as b } from "solid-js";
|
|
3
|
+
import { createVirtualList as P } from "../../../primitives/createVirtualList.js";
|
|
4
|
+
import { Menu as T } from "../../navigation/menu/menu.js";
|
|
5
|
+
import { TextField as V } from "../textField/textField.js";
|
|
6
|
+
import { MenuDivider as F } from "../../navigation/menu/menuDivider.js";
|
|
7
|
+
import { ProgressIndicator as G } from "../../feedBack/progressIndicator/progressIndicator.js";
|
|
8
8
|
import { MenuItem as $ } from "../../navigation/menu/menuItem.js";
|
|
9
|
-
var
|
|
10
|
-
function
|
|
11
|
-
const C = () => Array.isArray(t.value) ? t.value : [t.value], m = () => t.items.some((e) => !!e.group), M = () => t.itemHeight ?? 40, h = () => t.menuMaxHeight || 240, g = () => !!t.virtualized && !m() && !t.isLoading && t.items.length > 0, s =
|
|
9
|
+
var Y = /* @__PURE__ */ o("<span class=smwb-select-field__option__helper-text>"), z = /* @__PURE__ */ o("<li class=smwb-select-field__group-label role=presentation>"), K = /* @__PURE__ */ o("<li class=smwb-select-field__menu-search>"), N = /* @__PURE__ */ o("<div class=smwb-select-field__menu-loading>"), j = /* @__PURE__ */ o("<li role=presentation class=smwb-select-field__virtual-viewport><div class=smwb-select-field__virtual-scroller style=overflow-y:auto><div style=position:relative><ul role=presentation class=smwb-select-field__virtual-list style=list-style:none;margin:0;padding:0>"), q = /* @__PURE__ */ o("<li class=smwb-select-field__empty-items>");
|
|
10
|
+
function te(t) {
|
|
11
|
+
const C = () => Array.isArray(t.value) ? t.value : [t.value], m = () => t.items.some((e) => !!e.group), M = () => t.itemHeight ?? 40, h = () => t.menuMaxHeight || 240, g = () => !!t.virtualized && !m() && !t.isLoading && t.items.length > 0, s = P({
|
|
12
12
|
itemCount: () => g() ? t.items.length : 0,
|
|
13
13
|
itemHeight: M,
|
|
14
14
|
viewportHeight: h
|
|
15
|
-
}), [
|
|
15
|
+
}), [v, k] = A();
|
|
16
16
|
x(() => {
|
|
17
17
|
const e = t.anchorElement();
|
|
18
18
|
t.isOpen && e && k(e.clientWidth);
|
|
@@ -21,7 +21,7 @@ function ee(t) {
|
|
|
21
21
|
const e = (n) => {
|
|
22
22
|
n.key === "Escape" && t.onClose();
|
|
23
23
|
};
|
|
24
|
-
document.addEventListener("keydown", e),
|
|
24
|
+
document.addEventListener("keydown", e), D(() => document.removeEventListener("keydown", e));
|
|
25
25
|
});
|
|
26
26
|
const E = (e) => {
|
|
27
27
|
const n = [];
|
|
@@ -35,7 +35,7 @@ function ee(t) {
|
|
|
35
35
|
item: a
|
|
36
36
|
});
|
|
37
37
|
return n;
|
|
38
|
-
},
|
|
38
|
+
}, f = (e) => r($, {
|
|
39
39
|
get value() {
|
|
40
40
|
return e.value;
|
|
41
41
|
},
|
|
@@ -52,22 +52,22 @@ function ee(t) {
|
|
|
52
52
|
return t.optionRenderer;
|
|
53
53
|
},
|
|
54
54
|
get children() {
|
|
55
|
-
return [
|
|
55
|
+
return [W(() => e.text), r(l, {
|
|
56
56
|
get when() {
|
|
57
57
|
return e.helperText;
|
|
58
58
|
},
|
|
59
59
|
get children() {
|
|
60
|
-
var n =
|
|
60
|
+
var n = Y();
|
|
61
61
|
return u(n, () => e.helperText), n;
|
|
62
62
|
}
|
|
63
63
|
})];
|
|
64
64
|
}
|
|
65
65
|
}), I = (e) => e.kind === "group" ? (() => {
|
|
66
|
-
var n =
|
|
66
|
+
var n = z();
|
|
67
67
|
return u(n, () => e.group), n;
|
|
68
|
-
})() :
|
|
69
|
-
...
|
|
70
|
-
"min-width": `${
|
|
68
|
+
})() : f(e.item), H = () => ({
|
|
69
|
+
...v() ? {
|
|
70
|
+
"min-width": `${v()}px`
|
|
71
71
|
} : {},
|
|
72
72
|
...t.menuMaxHeight ? {
|
|
73
73
|
"max-height": `${t.menuMaxHeight}px`,
|
|
@@ -76,10 +76,10 @@ function ee(t) {
|
|
|
76
76
|
});
|
|
77
77
|
return r(L, {
|
|
78
78
|
get mount() {
|
|
79
|
-
return t.container ?? document.body;
|
|
79
|
+
return R ? void 0 : t.container ?? document.body;
|
|
80
80
|
},
|
|
81
81
|
get children() {
|
|
82
|
-
return r(
|
|
82
|
+
return r(T, {
|
|
83
83
|
get isOpen() {
|
|
84
84
|
return t.isOpen;
|
|
85
85
|
},
|
|
@@ -100,8 +100,8 @@ function ee(t) {
|
|
|
100
100
|
},
|
|
101
101
|
get children() {
|
|
102
102
|
return [(() => {
|
|
103
|
-
var e =
|
|
104
|
-
return u(e, r(
|
|
103
|
+
var e = K();
|
|
104
|
+
return u(e, r(V, {
|
|
105
105
|
class: "smwb-select-field__menu-search-input",
|
|
106
106
|
type: "text",
|
|
107
107
|
placeholder: "Найти...",
|
|
@@ -111,15 +111,15 @@ function ee(t) {
|
|
|
111
111
|
onChange: (n) => t.onSearchInputChange?.(n),
|
|
112
112
|
fullWidth: !0
|
|
113
113
|
})), e;
|
|
114
|
-
})(), r(
|
|
114
|
+
})(), r(F, {})];
|
|
115
115
|
}
|
|
116
116
|
}), r(l, {
|
|
117
117
|
get when() {
|
|
118
118
|
return t.isLoading;
|
|
119
119
|
},
|
|
120
120
|
get children() {
|
|
121
|
-
var e =
|
|
122
|
-
return u(e, r(
|
|
121
|
+
var e = N();
|
|
122
|
+
return u(e, r(G, {
|
|
123
123
|
type: "indeterminate",
|
|
124
124
|
variant: "circular",
|
|
125
125
|
class: "smwb-select-field__menu__loader"
|
|
@@ -145,7 +145,7 @@ function ee(t) {
|
|
|
145
145
|
return !t.createOption;
|
|
146
146
|
},
|
|
147
147
|
get children() {
|
|
148
|
-
var e =
|
|
148
|
+
var e = q();
|
|
149
149
|
return u(e, () => t.menuNoItemsMessage || "Опций не найдено."), e;
|
|
150
150
|
}
|
|
151
151
|
});
|
|
@@ -161,12 +161,12 @@ function ee(t) {
|
|
|
161
161
|
});
|
|
162
162
|
},
|
|
163
163
|
get children() {
|
|
164
|
-
var e =
|
|
164
|
+
var e = j(), n = e.firstChild, c = n.firstChild, a = c.firstChild;
|
|
165
165
|
return S(n, "scroll", s.onScroll), u(a, r(b, {
|
|
166
166
|
get each() {
|
|
167
167
|
return t.items.slice(s.startIndex(), s.endIndex());
|
|
168
168
|
},
|
|
169
|
-
children: (i) =>
|
|
169
|
+
children: (i) => f(i)
|
|
170
170
|
})), O((i) => {
|
|
171
171
|
var _ = `${h()}px`, w = `${s.totalHeight()}px`, y = `translateY(${s.offsetY()}px)`;
|
|
172
172
|
return _ !== i.e && d(n, "max-height", i.e = _), w !== i.t && d(c, "height", i.t = w), y !== i.a && d(a, "transform", i.a = y), i;
|
|
@@ -197,6 +197,6 @@ function ee(t) {
|
|
|
197
197
|
});
|
|
198
198
|
}
|
|
199
199
|
export {
|
|
200
|
-
|
|
200
|
+
te as DropdownMenu
|
|
201
201
|
};
|
|
202
202
|
//# sourceMappingURL=dropdownMenu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdownMenu.js","sources":["../../../../src/components/inputs/selectField/dropdownMenu.tsx"],"sourcesContent":["import { type Accessor, type JSX, For, Show, createEffect, createSignal, onCleanup } from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport type { Middleware } from \"@floating-ui/dom\";\nimport { Menu, MenuDivider, MenuItem } from \"../../navigation/menu\";\nimport { TextField } from \"../textField\";\nimport { ProgressIndicator } from \"../../feedBack/progressIndicator\";\nimport { createVirtualList } from \"../../../primitives/createVirtualList\";\n\nexport interface DropdownItem {\n key?: string | number;\n text: string;\n value: string | number | undefined | null;\n helperText?: string;\n disabled?: boolean;\n /** Optional group label; consecutive items sharing it get a group header. */\n group?: string;\n}\n\ntype SearchEvent = Event & { currentTarget: HTMLInputElement };\ntype ItemEvent = Event & { currentTarget: Element; target: Element };\n\nexport interface DropdownItemProps {\n menuMaxHeight?: number | undefined;\n menuMiddleware?: Middleware[] | undefined;\n menuNoItemsMessage?: JSX.Element;\n search?: boolean | undefined;\n onSearchInputChange?: ((event: SearchEvent) => void) | undefined;\n items: DropdownItem[];\n searchValue?: string | number | undefined;\n isOpen: boolean;\n onClose: () => void;\n anchorElement: Accessor<HTMLElement | null>;\n value?: undefined | null | string | number | (undefined | null | string | number)[];\n onItemClick: (event: ItemEvent, item: DropdownItem) => void;\n isLoading?: boolean | undefined;\n optionRenderer?: ((args: import(\"../../navigation/menu\").MenuItemProps) => JSX.Element) | undefined;\n container?: HTMLElement | undefined;\n createOption?: { text: JSX.Element; onCreate: (event: ItemEvent) => void } | undefined;\n virtualized?: boolean | undefined;\n itemHeight?: number | undefined;\n}\n\ntype Row = { kind: \"group\"; group?: string | undefined } | { kind: \"item\"; item: DropdownItem };\n\nexport function DropdownMenu(props: DropdownItemProps): JSX.Element {\n const valueArray = (): Array<string | number | undefined | null> =>\n Array.isArray(props.value) ? props.value : [props.value];\n const hasGroups = (): boolean => props.items.some((i) => !!i.group);\n const itemHeight = (): number => props.itemHeight ?? 40;\n const viewportHeight = (): number => props.menuMaxHeight || 240;\n const useVirtual = (): boolean => !!props.virtualized && !hasGroups() && !props.isLoading && props.items.length > 0;\n\n const virtual = createVirtualList({\n itemCount: () => (useVirtual() ? props.items.length : 0),\n itemHeight,\n viewportHeight,\n });\n\n const [menuMinWidth, setMenuMinWidth] = createSignal<number>();\n\n createEffect(() => {\n const anchor = props.anchorElement();\n if (props.isOpen && anchor) setMenuMinWidth(anchor.clientWidth);\n });\n\n createEffect(() => {\n if (!props.isOpen) return;\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key === \"Escape\") props.onClose();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => document.removeEventListener(\"keydown\", onKeyDown));\n });\n\n const toRows = (list: DropdownItem[]): Row[] => {\n const out: Row[] = [];\n let lastGroup: string | undefined;\n for (const el of list) {\n if (hasGroups() && el.group !== lastGroup) {\n lastGroup = el.group;\n out.push({ kind: \"group\", group: el.group });\n }\n out.push({ kind: \"item\", item: el });\n }\n return out;\n };\n\n const renderItem = (el: DropdownItem): JSX.Element => (\n <MenuItem\n value={el.value}\n disabled={el.disabled}\n selected={!!valueArray().find((v) => v === el.value)}\n onClick={(e) => {\n if (!el.disabled) props.onItemClick(e as ItemEvent, el);\n }}\n optionRenderer={props.optionRenderer}\n >\n {el.text}\n <Show when={el.helperText}>\n <span class=\"smwb-select-field__option__helper-text\">{el.helperText}</span>\n </Show>\n </MenuItem>\n );\n\n const renderRow = (row: Row): JSX.Element =>\n row.kind === \"group\" ? (\n <li class=\"smwb-select-field__group-label\" role=\"presentation\">\n {row.group}\n </li>\n ) : (\n renderItem(row.item)\n );\n\n const menuStyle = (): JSX.CSSProperties => ({\n ...(menuMinWidth() ? { \"min-width\": `${menuMinWidth()}px` } : {}),\n ...(props.menuMaxHeight ? { \"max-height\": `${props.menuMaxHeight}px`, \"overflow-y\": \"auto\" } : {}),\n });\n\n return (\n <Portal mount={props.container ?? document.body}>\n <Menu\n isOpen={props.isOpen}\n onClose={() => props.onClose()}\n anchorElement={props.anchorElement()}\n middleware={props.menuMiddleware}\n style={menuStyle()}\n >\n <Show when={props.search}>\n <li class=\"smwb-select-field__menu-search\">\n <TextField\n class=\"smwb-select-field__menu-search-input\"\n type=\"text\"\n placeholder=\"Найти...\"\n value={props.searchValue}\n onChange={(e) => props.onSearchInputChange?.(e as SearchEvent)}\n fullWidth\n />\n </li>\n <MenuDivider />\n </Show>\n\n <Show when={props.isLoading}>\n <div class=\"smwb-select-field__menu-loading\">\n <ProgressIndicator type=\"indeterminate\" variant=\"circular\" class=\"smwb-select-field__menu__loader\" />\n </div>\n </Show>\n\n <Show when={!props.isLoading}>\n <Show\n when={useVirtual()}\n fallback={\n <Show\n when={props.items.length > 0}\n fallback={\n <Show when={!props.createOption}>\n <li class=\"smwb-select-field__empty-items\">{props.menuNoItemsMessage || \"Опций не найдено.\"}</li>\n </Show>\n }\n >\n <For each={toRows(props.items)}>{(row) => renderRow(row)}</For>\n </Show>\n }\n >\n <li role=\"presentation\" class=\"smwb-select-field__virtual-viewport\">\n <div\n class=\"smwb-select-field__virtual-scroller\"\n style={{ \"max-height\": `${viewportHeight()}px`, \"overflow-y\": \"auto\" }}\n onScroll={virtual.onScroll}\n >\n <div style={{ height: `${virtual.totalHeight()}px`, position: \"relative\" }}>\n <ul\n role=\"presentation\"\n class=\"smwb-select-field__virtual-list\"\n style={{ transform: `translateY(${virtual.offsetY()}px)`, \"list-style\": \"none\", margin: \"0\", padding: \"0\" }}\n >\n <For each={props.items.slice(virtual.startIndex(), virtual.endIndex())}>{(el) => renderItem(el)}</For>\n </ul>\n </div>\n </div>\n </li>\n </Show>\n </Show>\n\n <Show when={props.createOption}>\n {(createOption) => (\n <MenuItem\n value=\"__create__\"\n onClick={(e) => createOption().onCreate(e as ItemEvent)}\n class=\"smwb-select-field__create-option\"\n >\n {createOption().text}\n </MenuItem>\n )}\n </Show>\n </Menu>\n </Portal>\n );\n}\n\nexport default DropdownMenu;\n"],"names":["DropdownMenu","props","valueArray","Array","isArray","value","hasGroups","items","some","i","group","itemHeight","viewportHeight","menuMaxHeight","useVirtual","virtualized","isLoading","length","virtual","createVirtualList","itemCount","menuMinWidth","setMenuMinWidth","createSignal","createEffect","anchor","anchorElement","isOpen","clientWidth","onKeyDown","event","key","onClose","document","addEventListener","onCleanup","removeEventListener","toRows","list","out","lastGroup","el","push","kind","item","renderItem","_$createComponent","MenuItem","disabled","selected","find","v","onClick","e","onItemClick","optionRenderer","children","_$memo","text","Show","when","helperText","_el$","_tmpl$","_$insert","renderRow","row","_el$2","_tmpl$2","menuStyle","Portal","mount","container","body","Menu","middleware","menuMiddleware","style","search","_el$3","_tmpl$3","TextField","type","placeholder","searchValue","onChange","onSearchInputChange","fullWidth","MenuDivider","_el$4","_tmpl$4","ProgressIndicator","variant","fallback","createOption","_el$9","_tmpl$6","menuNoItemsMessage","For","each","_el$5","_tmpl$5","_el$6","firstChild","_el$7","_el$8","_$addEventListener","onScroll","slice","startIndex","endIndex","_$effect","_p$","_v$","_v$2","totalHeight","_v$3","offsetY","_$setStyleProperty","t","a","undefined","onCreate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdownMenu.js","sources":["../../../../src/components/inputs/selectField/dropdownMenu.tsx"],"sourcesContent":["import { type Accessor, type JSX, For, Show, createEffect, createSignal, onCleanup } from \"solid-js\";\nimport { Portal, isServer } from \"solid-js/web\";\nimport type { Middleware } from \"@floating-ui/dom\";\nimport { Menu, MenuDivider, MenuItem } from \"../../navigation/menu\";\nimport { TextField } from \"../textField\";\nimport { ProgressIndicator } from \"../../feedBack/progressIndicator\";\nimport { createVirtualList } from \"../../../primitives/createVirtualList\";\n\nexport interface DropdownItem {\n key?: string | number;\n text: string;\n value: string | number | undefined | null;\n helperText?: string;\n disabled?: boolean;\n /** Optional group label; consecutive items sharing it get a group header. */\n group?: string;\n}\n\ntype SearchEvent = Event & { currentTarget: HTMLInputElement };\ntype ItemEvent = Event & { currentTarget: Element; target: Element };\n\nexport interface DropdownItemProps {\n menuMaxHeight?: number | undefined;\n menuMiddleware?: Middleware[] | undefined;\n menuNoItemsMessage?: JSX.Element;\n search?: boolean | undefined;\n onSearchInputChange?: ((event: SearchEvent) => void) | undefined;\n items: DropdownItem[];\n searchValue?: string | number | undefined;\n isOpen: boolean;\n onClose: () => void;\n anchorElement: Accessor<HTMLElement | null>;\n value?: undefined | null | string | number | (undefined | null | string | number)[];\n onItemClick: (event: ItemEvent, item: DropdownItem) => void;\n isLoading?: boolean | undefined;\n optionRenderer?: ((args: import(\"../../navigation/menu\").MenuItemProps) => JSX.Element) | undefined;\n container?: HTMLElement | undefined;\n createOption?: { text: JSX.Element; onCreate: (event: ItemEvent) => void } | undefined;\n virtualized?: boolean | undefined;\n itemHeight?: number | undefined;\n}\n\ntype Row = { kind: \"group\"; group?: string | undefined } | { kind: \"item\"; item: DropdownItem };\n\nexport function DropdownMenu(props: DropdownItemProps): JSX.Element {\n const valueArray = (): Array<string | number | undefined | null> =>\n Array.isArray(props.value) ? props.value : [props.value];\n const hasGroups = (): boolean => props.items.some((i) => !!i.group);\n const itemHeight = (): number => props.itemHeight ?? 40;\n const viewportHeight = (): number => props.menuMaxHeight || 240;\n const useVirtual = (): boolean => !!props.virtualized && !hasGroups() && !props.isLoading && props.items.length > 0;\n\n const virtual = createVirtualList({\n itemCount: () => (useVirtual() ? props.items.length : 0),\n itemHeight,\n viewportHeight,\n });\n\n const [menuMinWidth, setMenuMinWidth] = createSignal<number>();\n\n createEffect(() => {\n const anchor = props.anchorElement();\n if (props.isOpen && anchor) setMenuMinWidth(anchor.clientWidth);\n });\n\n createEffect(() => {\n if (!props.isOpen) return;\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.key === \"Escape\") props.onClose();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => document.removeEventListener(\"keydown\", onKeyDown));\n });\n\n const toRows = (list: DropdownItem[]): Row[] => {\n const out: Row[] = [];\n let lastGroup: string | undefined;\n for (const el of list) {\n if (hasGroups() && el.group !== lastGroup) {\n lastGroup = el.group;\n out.push({ kind: \"group\", group: el.group });\n }\n out.push({ kind: \"item\", item: el });\n }\n return out;\n };\n\n const renderItem = (el: DropdownItem): JSX.Element => (\n <MenuItem\n value={el.value}\n disabled={el.disabled}\n selected={!!valueArray().find((v) => v === el.value)}\n onClick={(e) => {\n if (!el.disabled) props.onItemClick(e as ItemEvent, el);\n }}\n optionRenderer={props.optionRenderer}\n >\n {el.text}\n <Show when={el.helperText}>\n <span class=\"smwb-select-field__option__helper-text\">{el.helperText}</span>\n </Show>\n </MenuItem>\n );\n\n const renderRow = (row: Row): JSX.Element =>\n row.kind === \"group\" ? (\n <li class=\"smwb-select-field__group-label\" role=\"presentation\">\n {row.group}\n </li>\n ) : (\n renderItem(row.item)\n );\n\n const menuStyle = (): JSX.CSSProperties => ({\n ...(menuMinWidth() ? { \"min-width\": `${menuMinWidth()}px` } : {}),\n ...(props.menuMaxHeight ? { \"max-height\": `${props.menuMaxHeight}px`, \"overflow-y\": \"auto\" } : {}),\n });\n\n return (\n <Portal mount={(isServer ? undefined : (props.container ?? document.body)) as Node}>\n <Menu\n isOpen={props.isOpen}\n onClose={() => props.onClose()}\n anchorElement={props.anchorElement()}\n middleware={props.menuMiddleware}\n style={menuStyle()}\n >\n <Show when={props.search}>\n <li class=\"smwb-select-field__menu-search\">\n <TextField\n class=\"smwb-select-field__menu-search-input\"\n type=\"text\"\n placeholder=\"Найти...\"\n value={props.searchValue}\n onChange={(e) => props.onSearchInputChange?.(e as SearchEvent)}\n fullWidth\n />\n </li>\n <MenuDivider />\n </Show>\n\n <Show when={props.isLoading}>\n <div class=\"smwb-select-field__menu-loading\">\n <ProgressIndicator type=\"indeterminate\" variant=\"circular\" class=\"smwb-select-field__menu__loader\" />\n </div>\n </Show>\n\n <Show when={!props.isLoading}>\n <Show\n when={useVirtual()}\n fallback={\n <Show\n when={props.items.length > 0}\n fallback={\n <Show when={!props.createOption}>\n <li class=\"smwb-select-field__empty-items\">{props.menuNoItemsMessage || \"Опций не найдено.\"}</li>\n </Show>\n }\n >\n <For each={toRows(props.items)}>{(row) => renderRow(row)}</For>\n </Show>\n }\n >\n <li role=\"presentation\" class=\"smwb-select-field__virtual-viewport\">\n <div\n class=\"smwb-select-field__virtual-scroller\"\n style={{ \"max-height\": `${viewportHeight()}px`, \"overflow-y\": \"auto\" }}\n onScroll={virtual.onScroll}\n >\n <div style={{ height: `${virtual.totalHeight()}px`, position: \"relative\" }}>\n <ul\n role=\"presentation\"\n class=\"smwb-select-field__virtual-list\"\n style={{ transform: `translateY(${virtual.offsetY()}px)`, \"list-style\": \"none\", margin: \"0\", padding: \"0\" }}\n >\n <For each={props.items.slice(virtual.startIndex(), virtual.endIndex())}>{(el) => renderItem(el)}</For>\n </ul>\n </div>\n </div>\n </li>\n </Show>\n </Show>\n\n <Show when={props.createOption}>\n {(createOption) => (\n <MenuItem\n value=\"__create__\"\n onClick={(e) => createOption().onCreate(e as ItemEvent)}\n class=\"smwb-select-field__create-option\"\n >\n {createOption().text}\n </MenuItem>\n )}\n </Show>\n </Menu>\n </Portal>\n );\n}\n\nexport default DropdownMenu;\n"],"names":["DropdownMenu","props","valueArray","Array","isArray","value","hasGroups","items","some","i","group","itemHeight","viewportHeight","menuMaxHeight","useVirtual","virtualized","isLoading","length","virtual","createVirtualList","itemCount","menuMinWidth","setMenuMinWidth","createSignal","createEffect","anchor","anchorElement","isOpen","clientWidth","onKeyDown","event","key","onClose","document","addEventListener","onCleanup","removeEventListener","toRows","list","out","lastGroup","el","push","kind","item","renderItem","_$createComponent","MenuItem","disabled","selected","find","v","onClick","e","onItemClick","optionRenderer","children","_$memo","text","Show","when","helperText","_el$","_tmpl$","_$insert","renderRow","row","_el$2","_tmpl$2","menuStyle","Portal","mount","isServer","undefined","container","body","Menu","middleware","menuMiddleware","style","search","_el$3","_tmpl$3","TextField","type","placeholder","searchValue","onChange","onSearchInputChange","fullWidth","MenuDivider","_el$4","_tmpl$4","ProgressIndicator","variant","fallback","createOption","_el$9","_tmpl$6","menuNoItemsMessage","For","each","_el$5","_tmpl$5","_el$6","firstChild","_el$7","_el$8","_$addEventListener","onScroll","slice","startIndex","endIndex","_$effect","_p$","_v$","_v$2","totalHeight","_v$3","offsetY","_$setStyleProperty","t","a","onCreate"],"mappings":"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"}
|