@questpie/admin 3.0.3 → 3.0.4
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/README.md +34 -5
- package/dist/client/blocks/block-renderer.d.mts +2 -2
- package/dist/client/blocks/block-renderer.mjs +4 -1
- package/dist/client/builder/types/action-types.d.mts +31 -3
- package/dist/client/builder/types/collection-types.d.mts +140 -0
- package/dist/client/builder/types/ui-config.d.mts +16 -2
- package/dist/client/builder/types/views.d.mts +57 -0
- package/dist/client/builder/types/widget-types.d.mts +5 -0
- package/dist/client/components/actions/action-button.mjs +137 -199
- package/dist/client/components/actions/action-dialog.mjs +198 -156
- package/dist/client/components/actions/confirmation-dialog.mjs +2 -2
- package/dist/client/components/actions/header-actions.mjs +52 -53
- package/dist/client/components/admin-link.d.mts +2 -2
- package/dist/client/components/auth/auth-loading.mjs +41 -18
- package/dist/client/components/blocks/block-fields-renderer.mjs +64 -28
- package/dist/client/components/blocks/block-insert-button.mjs +4 -4
- package/dist/client/components/blocks/block-item.mjs +2 -2
- package/dist/client/components/blocks/block-library-sidebar.mjs +2 -2
- package/dist/client/components/component-renderer.mjs +1 -1
- package/dist/client/components/fields/array-field.mjs +14 -14
- package/dist/client/components/fields/asset-preview-field.mjs +1 -1
- package/dist/client/components/fields/blocks-field/blocks-field.mjs +84 -104
- package/dist/client/components/fields/json-field.mjs +2 -2
- package/dist/client/components/fields/object-array-field.mjs +22 -22
- package/dist/client/components/fields/object-field.mjs +5 -5
- package/dist/client/components/fields/relation/displays/cards-display.mjs +16 -9
- package/dist/client/components/fields/relation/displays/chips-display.mjs +15 -12
- package/dist/client/components/fields/relation/displays/grid-display.mjs +15 -11
- package/dist/client/components/fields/relation/displays/list-display.mjs +33 -20
- package/dist/client/components/fields/relation/displays/table-display.mjs +62 -93
- package/dist/client/components/fields/relation/relation-items-display.mjs +1 -1
- package/dist/client/components/fields/relation-picker.mjs +7 -6
- package/dist/client/components/fields/relation-select.mjs +71 -47
- package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs +392 -82
- package/dist/client/components/fields/rich-text-editor/extensions.mjs +54 -23
- package/dist/client/components/fields/rich-text-editor/image-popover.mjs +24 -50
- package/dist/client/components/fields/rich-text-editor/image-upload.mjs +66 -0
- package/dist/client/components/fields/rich-text-editor/index.d.mts +38 -0
- package/dist/client/components/fields/rich-text-editor/index.mjs +637 -376
- package/dist/client/components/fields/rich-text-editor/link-utils.mjs +26 -0
- package/dist/client/components/fields/rich-text-editor/presets.d.mts +10 -0
- package/dist/client/components/fields/rich-text-editor/slash-commands.mjs +27 -6
- package/dist/client/components/fields/rich-text-editor/toolbar.mjs +464 -346
- package/dist/client/components/fields/rich-text-editor/types.d.mts +77 -0
- package/dist/client/components/fields/upload-field.mjs +45 -49
- package/dist/client/components/filter-builder/columns-tab.mjs +69 -62
- package/dist/client/components/filter-builder/filter-builder-sheet.mjs +473 -308
- package/dist/client/components/filter-builder/filters-tab.mjs +109 -82
- package/dist/client/components/filter-builder/saved-views-tab.mjs +300 -198
- package/dist/client/components/history-sidebar.mjs +850 -340
- package/dist/client/components/layout/field-layout-renderer.mjs +6 -5
- package/dist/client/components/locale-switcher.mjs +8 -8
- package/dist/client/components/media/media-grid.mjs +12 -9
- package/dist/client/components/media/media-picker-dialog.mjs +242 -230
- package/dist/client/components/preview/live-preview-mode.mjs +1 -1
- package/dist/client/components/primitives/asset-preview.mjs +37 -22
- package/dist/client/components/primitives/date-input.mjs +212 -249
- package/dist/client/components/primitives/dropzone.mjs +192 -159
- package/dist/client/components/primitives/field-select-control.mjs +93 -0
- package/dist/client/components/primitives/select-multi.mjs +251 -230
- package/dist/client/components/primitives/select-single.mjs +345 -290
- package/dist/client/components/primitives/time-input.mjs +2 -2
- package/dist/client/components/sheets/resource-sheet.mjs +2 -0
- package/dist/client/components/ui/accordion.mjs +4 -4
- package/dist/client/components/ui/alert.mjs +3 -3
- package/dist/client/components/ui/badge.mjs +4 -4
- package/dist/client/components/ui/button.mjs +47 -37
- package/dist/client/components/ui/card.mjs +2 -2
- package/dist/client/components/ui/checkbox.mjs +1 -1
- package/dist/client/components/ui/command.mjs +5 -5
- package/dist/client/components/ui/dialog.mjs +3 -3
- package/dist/client/components/ui/drawer.mjs +1 -1
- package/dist/client/components/ui/dropdown-menu.mjs +157 -15
- package/dist/client/components/ui/empty-state.mjs +88 -59
- package/dist/client/components/ui/field.mjs +2 -2
- package/dist/client/components/ui/input-group.mjs +3 -3
- package/dist/client/components/ui/input.mjs +1 -1
- package/dist/client/components/ui/kbd.mjs +1 -1
- package/dist/client/components/ui/label.mjs +1 -1
- package/dist/client/components/ui/popover.mjs +19 -11
- package/dist/client/components/ui/scroll-fade.mjs +170 -0
- package/dist/client/components/ui/search-input.mjs +1 -1
- package/dist/client/components/ui/select.mjs +129 -27
- package/dist/client/components/ui/sheet.mjs +54 -34
- package/dist/client/components/ui/sidebar.mjs +15 -14
- package/dist/client/components/ui/skeleton.mjs +28 -12
- package/dist/client/components/ui/switch.mjs +2 -2
- package/dist/client/components/ui/table.mjs +82 -74
- package/dist/client/components/ui/tabs.mjs +26 -31
- package/dist/client/components/ui/textarea.mjs +1 -1
- package/dist/client/components/ui/tooltip.mjs +1 -1
- package/dist/client/components/widgets/chart-widget.mjs +134 -96
- package/dist/client/components/widgets/progress-widget.mjs +59 -34
- package/dist/client/components/widgets/quick-actions-widget.mjs +184 -113
- package/dist/client/components/widgets/recent-items-widget.mjs +144 -102
- package/dist/client/components/widgets/stats-widget.mjs +91 -72
- package/dist/client/components/widgets/table-widget.mjs +159 -246
- package/dist/client/components/widgets/timeline-widget.mjs +66 -43
- package/dist/client/components/widgets/value-widget.mjs +261 -152
- package/dist/client/components/widgets/widget-empty-state.mjs +88 -0
- package/dist/client/components/widgets/widget-skeletons.mjs +53 -20
- package/dist/client/contexts/focus-context.d.mts +2 -2
- package/dist/client/hooks/use-action.mjs +63 -55
- package/dist/client/hooks/use-audit-history.mjs +1 -65
- package/dist/client/hooks/use-collection-validation.mjs +36 -23
- package/dist/client/hooks/use-collection.mjs +96 -1
- package/dist/client/hooks/use-saved-views.mjs +70 -49
- package/dist/client/hooks/use-server-actions.mjs +59 -40
- package/dist/client/hooks/use-server-validation.mjs +156 -41
- package/dist/client/hooks/use-server-widget-data.mjs +1 -1
- package/dist/client/hooks/use-setup-status.d.mts +3 -3
- package/dist/client/hooks/use-setup-status.mjs +2 -2
- package/dist/client/hooks/use-transition-stage.mjs +2 -10
- package/dist/client/hooks/use-validation-error-map.mjs +31 -13
- package/dist/client/hooks/use-view-state.mjs +238 -174
- package/dist/client/i18n/date-locale.mjs +33 -0
- package/dist/client/i18n/hooks.mjs +17 -1
- package/dist/client/lib/utils.mjs +3 -2
- package/dist/client/preview/block-scope-context.d.mts +2 -2
- package/dist/client/preview/preview-banner.d.mts +2 -2
- package/dist/client/preview/preview-field.d.mts +4 -4
- package/dist/client/preview/preview-field.mjs +2 -2
- package/dist/client/runtime/provider.mjs +8 -1
- package/dist/client/runtime/translations-provider.mjs +1 -1
- package/dist/client/scope/picker.d.mts +2 -2
- package/dist/client/scope/provider.d.mts +2 -2
- package/dist/client/styles/base.css +1022 -0
- package/dist/client/styles/index.css +3 -589
- package/dist/client/utils/auto-expand-fields.mjs +4 -2
- package/dist/client/utils/keyboard-shortcuts.mjs +26 -0
- package/dist/client/utils/use-lazy-component.mjs +80 -0
- package/dist/client/views/auth/auth-layout.d.mts +18 -11
- package/dist/client/views/auth/auth-layout.mjs +291 -80
- package/dist/client/views/auth/forgot-password-form.d.mts +2 -2
- package/dist/client/views/auth/forgot-password-form.mjs +2 -2
- package/dist/client/views/auth/login-form.d.mts +2 -2
- package/dist/client/views/auth/login-form.mjs +1 -1
- package/dist/client/views/auth/reset-password-form.d.mts +2 -2
- package/dist/client/views/auth/reset-password-form.mjs +2 -2
- package/dist/client/views/auth/setup-form.d.mts +2 -2
- package/dist/client/views/collection/auto-form-fields.mjs +11 -9
- package/dist/client/views/collection/bulk-action-toolbar.mjs +173 -138
- package/dist/client/views/collection/cells/complex-cells.mjs +22 -22
- package/dist/client/views/collection/cells/primitive-cells.mjs +1 -1
- package/dist/client/views/collection/cells/relation-cells.mjs +147 -129
- package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs +224 -278
- package/dist/client/views/collection/cells/shared/relation-chip.mjs +64 -36
- package/dist/client/views/collection/cells/upload-cells.mjs +199 -9
- package/dist/client/views/collection/columns/build-columns.mjs +29 -9
- package/dist/client/views/collection/columns/column-defaults.mjs +2 -2
- package/dist/client/views/collection/field-renderer.mjs +50 -89
- package/dist/client/views/collection/form-view.mjs +237 -227
- package/dist/client/views/collection/table-view.mjs +1162 -229
- package/dist/client/views/collection/view-skeletons.mjs +222 -79
- package/dist/client/views/common/global-search.mjs +29 -18
- package/dist/client/views/dashboard/dashboard-grid.mjs +678 -501
- package/dist/client/views/dashboard/dashboard-widget.mjs +6 -3
- package/dist/client/views/dashboard/widget-card.mjs +23 -14
- package/dist/client/views/globals/global-form-view.mjs +634 -589
- package/dist/client/views/layout/admin-layout-provider.mjs +67 -70
- package/dist/client/views/layout/admin-layout.d.mts +3 -6
- package/dist/client/views/layout/admin-layout.mjs +149 -172
- package/dist/client/views/layout/admin-router.mjs +747 -544
- package/dist/client/views/layout/admin-sidebar.d.mts +38 -1
- package/dist/client/views/layout/admin-sidebar.mjs +751 -591
- package/dist/client/views/layout/admin-theme.d.mts +10 -0
- package/dist/client/views/layout/admin-theme.mjs +84 -0
- package/dist/client/views/layout/admin-view-layout.mjs +161 -0
- package/dist/client/views/pages/accept-invite-page.d.mts +2 -2
- package/dist/client/views/pages/accept-invite-page.mjs +49 -26
- package/dist/client/views/pages/dashboard-page.d.mts +2 -2
- package/dist/client/views/pages/forgot-password-page.d.mts +2 -2
- package/dist/client/views/pages/forgot-password-page.mjs +2 -19
- package/dist/client/views/pages/invite-page.d.mts +2 -2
- package/dist/client/views/pages/invite-page.mjs +2 -19
- package/dist/client/views/pages/login-page.d.mts +1 -1
- package/dist/client/views/pages/login-page.mjs +4 -21
- package/dist/client/views/pages/reset-password-page.d.mts +2 -2
- package/dist/client/views/pages/reset-password-page.mjs +3 -20
- package/dist/client/views/pages/setup-page.d.mts +2 -2
- package/dist/client/views/pages/setup-page.mjs +3 -20
- package/dist/client.d.mts +6 -2
- package/dist/client.mjs +2 -1
- package/dist/components/rich-text/rich-text-renderer.d.mts +2 -2
- package/dist/index.d.mts +6 -2
- package/dist/index.mjs +2 -1
- package/dist/server/augmentation/dashboard.d.mts +67 -3
- package/dist/server/augmentation/form-layout.d.mts +21 -0
- package/dist/server/augmentation/index.d.mts +1 -1
- package/dist/server/codegen/admin-client-template.mjs +4 -0
- package/dist/server/fields/blocks.d.mts +1 -1
- package/dist/server/fields/blocks.mjs +12 -0
- package/dist/server/fields/rich-text.d.mts +1 -1
- package/dist/server/fields/rich-text.mjs +8 -0
- package/dist/server/i18n/index.mjs +17 -1
- package/dist/server/i18n/messages/cs.mjs +23 -0
- package/dist/server/i18n/messages/de.mjs +23 -0
- package/dist/server/i18n/messages/en.mjs +64 -1
- package/dist/server/i18n/messages/es.mjs +23 -0
- package/dist/server/i18n/messages/fr.mjs +23 -0
- package/dist/server/i18n/messages/pl.mjs +23 -0
- package/dist/server/i18n/messages/pt.mjs +23 -0
- package/dist/server/i18n/messages/sk.mjs +83 -1
- package/dist/server/modules/admin/block/introspection.mjs +4 -1
- package/dist/server/modules/admin/block/prefetch.mjs +12 -2
- package/dist/server/modules/admin/collections/account.d.mts +50 -50
- package/dist/server/modules/admin/collections/admin-locks.d.mts +54 -54
- package/dist/server/modules/admin/collections/admin-preferences.d.mts +39 -39
- package/dist/server/modules/admin/collections/admin-saved-views.d.mts +47 -47
- package/dist/server/modules/admin/collections/apikey.d.mts +68 -68
- package/dist/server/modules/admin/collections/assets.d.mts +20 -20
- package/dist/server/modules/admin/collections/assets.mjs +0 -1
- package/dist/server/modules/admin/collections/session.d.mts +42 -42
- package/dist/server/modules/admin/collections/user.d.mts +12 -0
- package/dist/server/modules/admin/collections/user.mjs +40 -9
- package/dist/server/modules/admin/collections/verification.d.mts +2 -2
- package/dist/server/modules/admin/dto/admin-config.dto.mjs +2 -0
- package/dist/server/modules/admin/factories.mjs +7 -18
- package/dist/server/modules/admin/index.d.mts +1 -1
- package/dist/server/modules/admin/routes/admin-config.d.mts +2 -2
- package/dist/server/modules/admin/routes/admin-config.mjs +34 -16
- package/dist/server/modules/admin/routes/execute-action.d.mts +9 -9
- package/dist/server/modules/admin/routes/execute-action.mjs +33 -0
- package/dist/server/modules/admin/routes/locales.d.mts +2 -2
- package/dist/server/modules/admin/routes/preview.d.mts +11 -11
- package/dist/server/modules/admin/routes/reactive.d.mts +9 -9
- package/dist/server/modules/admin/routes/setup.d.mts +10 -10
- package/dist/server/modules/admin/routes/setup.mjs +7 -7
- package/dist/server/modules/admin/routes/translations.d.mts +4 -4
- package/dist/server/modules/admin/routes/translations.mjs +5 -1
- package/dist/server/modules/admin/routes/widget-data.d.mts +5 -5
- package/dist/server/modules/admin-preferences/collections/admin-preferences.mjs +1 -1
- package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +27 -27
- package/dist/server/modules/audit/.generated/module.d.mts +1 -1
- package/dist/server/modules/audit/.generated/module.mjs +1 -1
- package/dist/server/modules/audit/collections/audit-log.d.mts +2 -2
- package/dist/server/modules/audit/collections/audit-log.mjs +1 -1
- package/dist/server/modules/audit/config/app.mjs +99 -42
- package/dist/server/modules/audit/jobs/audit-cleanup.mjs +1 -1
- package/dist/server/plugin.mjs +4 -2
- package/dist/server/proxy-factories.d.mts +4 -3
- package/dist/server/proxy-factories.mjs +34 -8
- package/dist/shared/types/saved-views.types.d.mts +2 -0
- package/package.json +6 -4
- package/dist/client/components/fields/rich-text-editor/link-popover.mjs +0 -85
- package/dist/client/components/ui/spinner.mjs +0 -52
- package/dist/client/components/ui/toolbar.mjs +0 -136
- package/dist/client/contexts/breadcrumb-context.mjs +0 -60
- package/dist/client/views/layout/admin-topbar.mjs +0 -236
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useResolveText } from "../../i18n/hooks.mjs";
|
|
3
|
+
import { useDateFnsLocale, useResolveText } from "../../i18n/hooks.mjs";
|
|
4
4
|
import { cn } from "../../lib/utils.mjs";
|
|
5
5
|
import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover.mjs";
|
|
6
6
|
import { c } from "react/compiler-runtime";
|
|
@@ -11,6 +11,29 @@ import { format } from "date-fns";
|
|
|
11
11
|
import { DayPicker } from "react-day-picker";
|
|
12
12
|
|
|
13
13
|
//#region src/client/components/primitives/date-input.tsx
|
|
14
|
+
const datePickerClassNames = {
|
|
15
|
+
months: "flex flex-col sm:flex-row gap-2",
|
|
16
|
+
month: "flex flex-col gap-3",
|
|
17
|
+
month_caption: "relative flex h-9 items-center justify-center px-9",
|
|
18
|
+
caption_label: "text-foreground text-sm font-medium",
|
|
19
|
+
nav: "absolute inset-x-0 top-0 flex items-center justify-between px-1",
|
|
20
|
+
button_previous: cn("text-muted-foreground flex size-8 items-center justify-center rounded-md bg-transparent p-0 transition-[background-color,color,opacity] duration-150 ease-out", "hover:bg-surface-high hover:text-foreground"),
|
|
21
|
+
button_next: cn("text-muted-foreground flex size-8 items-center justify-center rounded-md bg-transparent p-0 transition-[background-color,color,opacity] duration-150 ease-out", "hover:bg-surface-high hover:text-foreground"),
|
|
22
|
+
month_grid: "w-full border-separate border-spacing-y-1",
|
|
23
|
+
weekdays: "flex",
|
|
24
|
+
weekday: "text-muted-foreground flex size-9 items-center justify-center text-[0.7rem] font-medium",
|
|
25
|
+
week: "flex w-full",
|
|
26
|
+
day: "relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-transparent [&:has([aria-selected].day-outside)]:bg-transparent",
|
|
27
|
+
day_button: cn("size-9 rounded-[var(--control-radius-inner)] p-0 text-sm font-normal transition-[background-color,color,box-shadow,transform] duration-150 ease-out", "hover:bg-surface-high hover:text-foreground active:scale-[0.96]", "focus-visible:ring-ring/20 focus-visible:ring-3 focus-visible:outline-none"),
|
|
28
|
+
selected: "bg-foreground text-background shadow-[var(--control-shadow)] hover:bg-foreground hover:text-background focus:bg-foreground focus:text-background",
|
|
29
|
+
today: "bg-surface-mid text-foreground shadow-[inset_0_0_0_1px_var(--border-strong)]",
|
|
30
|
+
outside: "text-muted-foreground opacity-45",
|
|
31
|
+
disabled: "text-muted-foreground opacity-30",
|
|
32
|
+
hidden: "invisible"
|
|
33
|
+
};
|
|
34
|
+
const dateTriggerClassName = cn("control-surface font-chrome flex w-full items-center justify-start gap-2 px-3 py-2 text-sm", "hover:bg-surface-low hover:text-foreground", "focus-visible:border-border-strong focus-visible:ring-ring/20 aria-expanded:border-border-strong aria-expanded:ring-ring/20 focus-visible:ring-3 focus-visible:outline-none aria-expanded:ring-3", "disabled:cursor-not-allowed disabled:opacity-50");
|
|
35
|
+
const openTriggerClassName = "border-border-strong ring-ring/20 ring-3";
|
|
36
|
+
const datePopoverClassName = "floating-surface w-auto p-1";
|
|
14
37
|
/**
|
|
15
38
|
* Date Input Primitive
|
|
16
39
|
*
|
|
@@ -27,11 +50,12 @@ import { DayPicker } from "react-day-picker";
|
|
|
27
50
|
* ```
|
|
28
51
|
*/
|
|
29
52
|
function DateInput(t0) {
|
|
30
|
-
const $ = c(
|
|
53
|
+
const $ = c(39);
|
|
31
54
|
const { value, onChange, minDate, maxDate, format: t1, placeholder: t2, disabled, className, id, "aria-invalid": ariaInvalid } = t0;
|
|
32
55
|
const dateFormat = t1 === void 0 ? "PP" : t1;
|
|
33
56
|
const placeholder = t2 === void 0 ? "Select date" : t2;
|
|
34
57
|
const resolveText = useResolveText();
|
|
58
|
+
const dateFnsLocale = useDateFnsLocale();
|
|
35
59
|
const [open, setOpen] = useState(false);
|
|
36
60
|
let t3;
|
|
37
61
|
if ($[0] !== onChange) {
|
|
@@ -53,152 +77,121 @@ function DateInput(t0) {
|
|
|
53
77
|
$[3] = t4;
|
|
54
78
|
} else t4 = $[3];
|
|
55
79
|
const handleClear = t4;
|
|
56
|
-
const t5 =
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
80
|
+
const t5 = open && openTriggerClassName;
|
|
81
|
+
const t6 = !value && "text-muted-foreground";
|
|
82
|
+
let t7;
|
|
83
|
+
if ($[4] !== className || $[5] !== t5 || $[6] !== t6) {
|
|
84
|
+
t7 = cn("qa-date-input", dateTriggerClassName, t5, t6, className);
|
|
60
85
|
$[4] = className;
|
|
61
86
|
$[5] = t5;
|
|
62
87
|
$[6] = t6;
|
|
63
|
-
} else t6 = $[6];
|
|
64
|
-
let t7;
|
|
65
|
-
if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
|
|
66
|
-
t7 = /* @__PURE__ */ jsx(Icon, {
|
|
67
|
-
icon: "ph:calendar-blank",
|
|
68
|
-
className: "size-4"
|
|
69
|
-
});
|
|
70
88
|
$[7] = t7;
|
|
71
89
|
} else t7 = $[7];
|
|
72
90
|
let t8;
|
|
73
|
-
if ($[8]
|
|
74
|
-
t8 =
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
$[
|
|
79
|
-
|
|
80
|
-
} else t8 = $[12];
|
|
91
|
+
if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
|
|
92
|
+
t8 = /* @__PURE__ */ jsx(Icon, {
|
|
93
|
+
icon: "ph:calendar-blank",
|
|
94
|
+
className: "size-4"
|
|
95
|
+
});
|
|
96
|
+
$[8] = t8;
|
|
97
|
+
} else t8 = $[8];
|
|
81
98
|
let t9;
|
|
82
|
-
if ($[
|
|
83
|
-
t9 =
|
|
99
|
+
if ($[9] !== dateFormat || $[10] !== placeholder || $[11] !== resolveText || $[12] !== value) {
|
|
100
|
+
t9 = value ? format(value, dateFormat) : resolveText(placeholder);
|
|
101
|
+
$[9] = dateFormat;
|
|
102
|
+
$[10] = placeholder;
|
|
103
|
+
$[11] = resolveText;
|
|
104
|
+
$[12] = value;
|
|
105
|
+
$[13] = t9;
|
|
106
|
+
} else t9 = $[13];
|
|
107
|
+
let t10;
|
|
108
|
+
if ($[14] !== t9) {
|
|
109
|
+
t10 = /* @__PURE__ */ jsx("span", {
|
|
84
110
|
className: "flex-1 text-left",
|
|
85
|
-
children:
|
|
111
|
+
children: t9
|
|
86
112
|
});
|
|
87
|
-
$[13] = t8;
|
|
88
113
|
$[14] = t9;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
114
|
+
$[15] = t10;
|
|
115
|
+
} else t10 = $[15];
|
|
116
|
+
let t11;
|
|
117
|
+
if ($[16] !== disabled || $[17] !== handleClear || $[18] !== value) {
|
|
118
|
+
t11 = value && !disabled && /* @__PURE__ */ jsx(Icon, {
|
|
93
119
|
icon: "ph:x",
|
|
94
120
|
className: "size-4 opacity-50 hover:opacity-100",
|
|
95
121
|
onClick: handleClear
|
|
96
122
|
});
|
|
97
|
-
$[
|
|
98
|
-
$[
|
|
99
|
-
$[
|
|
100
|
-
$[
|
|
101
|
-
} else
|
|
102
|
-
let
|
|
103
|
-
if ($[
|
|
104
|
-
|
|
123
|
+
$[16] = disabled;
|
|
124
|
+
$[17] = handleClear;
|
|
125
|
+
$[18] = value;
|
|
126
|
+
$[19] = t11;
|
|
127
|
+
} else t11 = $[19];
|
|
128
|
+
let t12;
|
|
129
|
+
if ($[20] !== ariaInvalid || $[21] !== disabled || $[22] !== id || $[23] !== t10 || $[24] !== t11 || $[25] !== t7) {
|
|
130
|
+
t12 = /* @__PURE__ */ jsxs(PopoverTrigger, {
|
|
105
131
|
id,
|
|
106
132
|
disabled,
|
|
107
133
|
"aria-invalid": ariaInvalid,
|
|
108
|
-
className:
|
|
134
|
+
className: t7,
|
|
109
135
|
children: [
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
136
|
+
t8,
|
|
137
|
+
t10,
|
|
138
|
+
t11
|
|
113
139
|
]
|
|
114
140
|
});
|
|
115
|
-
$[
|
|
116
|
-
$[
|
|
117
|
-
$[
|
|
118
|
-
$[
|
|
119
|
-
$[
|
|
120
|
-
$[
|
|
121
|
-
$[
|
|
122
|
-
} else
|
|
123
|
-
const
|
|
124
|
-
let
|
|
125
|
-
if ($[
|
|
126
|
-
|
|
141
|
+
$[20] = ariaInvalid;
|
|
142
|
+
$[21] = disabled;
|
|
143
|
+
$[22] = id;
|
|
144
|
+
$[23] = t10;
|
|
145
|
+
$[24] = t11;
|
|
146
|
+
$[25] = t7;
|
|
147
|
+
$[26] = t12;
|
|
148
|
+
} else t12 = $[26];
|
|
149
|
+
const t13 = value ?? void 0;
|
|
150
|
+
let t14;
|
|
151
|
+
if ($[27] !== maxDate || $[28] !== minDate) {
|
|
152
|
+
t14 = (date_0) => {
|
|
127
153
|
if (minDate && date_0 < minDate) return true;
|
|
128
154
|
if (maxDate && date_0 > maxDate) return true;
|
|
129
155
|
return false;
|
|
130
156
|
};
|
|
131
|
-
$[
|
|
132
|
-
$[
|
|
133
|
-
$[28] = t13;
|
|
134
|
-
} else t13 = $[28];
|
|
135
|
-
let t14;
|
|
136
|
-
let t15;
|
|
137
|
-
if ($[29] === Symbol.for("react.memo_cache_sentinel")) {
|
|
138
|
-
t14 = cn("flex size-8 items-center justify-center", "hover:bg-accent bg-transparent p-0 opacity-50 hover:opacity-100");
|
|
139
|
-
t15 = cn("flex size-8 items-center justify-center", "hover:bg-accent bg-transparent p-0 opacity-50 hover:opacity-100");
|
|
157
|
+
$[27] = maxDate;
|
|
158
|
+
$[28] = minDate;
|
|
140
159
|
$[29] = t14;
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
t15 =
|
|
145
|
-
|
|
146
|
-
let t16;
|
|
147
|
-
if ($[31] === Symbol.for("react.memo_cache_sentinel")) {
|
|
148
|
-
t16 = {
|
|
149
|
-
months: "flex flex-col sm:flex-row gap-2",
|
|
150
|
-
month: "flex flex-col gap-4",
|
|
151
|
-
month_caption: "flex justify-center pt-1 relative items-center h-9",
|
|
152
|
-
caption_label: "text-sm font-medium",
|
|
153
|
-
nav: "absolute inset-x-0 top-0 flex items-center justify-between px-1",
|
|
154
|
-
button_previous: t14,
|
|
155
|
-
button_next: t15,
|
|
156
|
-
month_grid: "w-full border-collapse",
|
|
157
|
-
weekdays: "flex",
|
|
158
|
-
weekday: "text-muted-foreground w-9 font-normal text-[0.8rem] text-center",
|
|
159
|
-
week: "flex w-full mt-2",
|
|
160
|
-
day: "relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent",
|
|
161
|
-
day_button: cn("size-9 p-0 font-normal", "hover:bg-accent hover:text-accent-foreground", "focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2"),
|
|
162
|
-
selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",
|
|
163
|
-
today: "bg-accent text-accent-foreground",
|
|
164
|
-
outside: "text-muted-foreground opacity-50",
|
|
165
|
-
disabled: "text-muted-foreground opacity-50",
|
|
166
|
-
hidden: "invisible"
|
|
167
|
-
};
|
|
168
|
-
$[31] = t16;
|
|
169
|
-
} else t16 = $[31];
|
|
170
|
-
let t17;
|
|
171
|
-
if ($[32] !== handleSelect || $[33] !== t12 || $[34] !== t13) {
|
|
172
|
-
t17 = /* @__PURE__ */ jsx(PopoverContent, {
|
|
173
|
-
className: "w-auto p-0",
|
|
160
|
+
} else t14 = $[29];
|
|
161
|
+
let t15;
|
|
162
|
+
if ($[30] !== dateFnsLocale || $[31] !== handleSelect || $[32] !== t13 || $[33] !== t14) {
|
|
163
|
+
t15 = /* @__PURE__ */ jsx(PopoverContent, {
|
|
164
|
+
className: datePopoverClassName,
|
|
174
165
|
align: "start",
|
|
175
166
|
children: /* @__PURE__ */ jsx(DayPicker, {
|
|
176
167
|
mode: "single",
|
|
177
|
-
selected:
|
|
168
|
+
selected: t13,
|
|
178
169
|
onSelect: handleSelect,
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
170
|
+
locale: dateFnsLocale,
|
|
171
|
+
disabled: t14,
|
|
172
|
+
className: "qa-date-picker font-chrome p-2",
|
|
173
|
+
classNames: datePickerClassNames
|
|
182
174
|
})
|
|
183
175
|
});
|
|
184
|
-
$[
|
|
185
|
-
$[
|
|
186
|
-
$[
|
|
187
|
-
$[
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
176
|
+
$[30] = dateFnsLocale;
|
|
177
|
+
$[31] = handleSelect;
|
|
178
|
+
$[32] = t13;
|
|
179
|
+
$[33] = t14;
|
|
180
|
+
$[34] = t15;
|
|
181
|
+
} else t15 = $[34];
|
|
182
|
+
let t16;
|
|
183
|
+
if ($[35] !== open || $[36] !== t12 || $[37] !== t15) {
|
|
184
|
+
t16 = /* @__PURE__ */ jsxs(Popover, {
|
|
192
185
|
open,
|
|
193
186
|
onOpenChange: setOpen,
|
|
194
|
-
children: [
|
|
187
|
+
children: [t12, t15]
|
|
195
188
|
});
|
|
196
|
-
$[
|
|
197
|
-
$[
|
|
198
|
-
$[
|
|
199
|
-
$[
|
|
200
|
-
} else
|
|
201
|
-
return
|
|
189
|
+
$[35] = open;
|
|
190
|
+
$[36] = t12;
|
|
191
|
+
$[37] = t15;
|
|
192
|
+
$[38] = t16;
|
|
193
|
+
} else t16 = $[38];
|
|
194
|
+
return t16;
|
|
202
195
|
}
|
|
203
196
|
/**
|
|
204
197
|
* DateTime Input Primitive
|
|
@@ -215,12 +208,13 @@ function DateInput(t0) {
|
|
|
215
208
|
* ```
|
|
216
209
|
*/
|
|
217
210
|
function DateTimeInput(t0) {
|
|
218
|
-
const $ = c(
|
|
211
|
+
const $ = c(54);
|
|
219
212
|
const { value, onChange, minDate, maxDate, format: t1, precision: t2, placeholder: t3, disabled, className, id, "aria-invalid": ariaInvalid } = t0;
|
|
220
213
|
const dateFormat = t1 === void 0 ? "PPp" : t1;
|
|
221
214
|
const precision = t2 === void 0 ? "minute" : t2;
|
|
222
215
|
const placeholder = t3 === void 0 ? "Select date and time" : t3;
|
|
223
216
|
const resolveText = useResolveText();
|
|
217
|
+
const dateFnsLocale = useDateFnsLocale();
|
|
224
218
|
const [open, setOpen] = useState(false);
|
|
225
219
|
let t4;
|
|
226
220
|
if ($[0] !== precision || $[1] !== value) {
|
|
@@ -279,182 +273,151 @@ function DateTimeInput(t0) {
|
|
|
279
273
|
$[10] = t7;
|
|
280
274
|
} else t7 = $[10];
|
|
281
275
|
const handleClear = t7;
|
|
282
|
-
const t8 =
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
276
|
+
const t8 = open && openTriggerClassName;
|
|
277
|
+
const t9 = !value && "text-muted-foreground";
|
|
278
|
+
let t10;
|
|
279
|
+
if ($[11] !== className || $[12] !== t8 || $[13] !== t9) {
|
|
280
|
+
t10 = cn("qa-datetime-input", dateTriggerClassName, t8, t9, className);
|
|
286
281
|
$[11] = className;
|
|
287
282
|
$[12] = t8;
|
|
288
283
|
$[13] = t9;
|
|
289
|
-
} else t9 = $[13];
|
|
290
|
-
let t10;
|
|
291
|
-
if ($[14] === Symbol.for("react.memo_cache_sentinel")) {
|
|
292
|
-
t10 = /* @__PURE__ */ jsx(Icon, {
|
|
293
|
-
icon: "ph:calendar-blank",
|
|
294
|
-
className: "size-4"
|
|
295
|
-
});
|
|
296
284
|
$[14] = t10;
|
|
297
285
|
} else t10 = $[14];
|
|
298
286
|
let t11;
|
|
299
|
-
if ($[15]
|
|
300
|
-
t11 =
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
$[
|
|
305
|
-
|
|
306
|
-
} else t11 = $[19];
|
|
287
|
+
if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
|
|
288
|
+
t11 = /* @__PURE__ */ jsx(Icon, {
|
|
289
|
+
icon: "ph:calendar-blank",
|
|
290
|
+
className: "size-4"
|
|
291
|
+
});
|
|
292
|
+
$[15] = t11;
|
|
293
|
+
} else t11 = $[15];
|
|
307
294
|
let t12;
|
|
308
|
-
if ($[
|
|
309
|
-
t12 =
|
|
295
|
+
if ($[16] !== dateFormat || $[17] !== placeholder || $[18] !== resolveText || $[19] !== value) {
|
|
296
|
+
t12 = value ? format(value, dateFormat) : resolveText(placeholder);
|
|
297
|
+
$[16] = dateFormat;
|
|
298
|
+
$[17] = placeholder;
|
|
299
|
+
$[18] = resolveText;
|
|
300
|
+
$[19] = value;
|
|
301
|
+
$[20] = t12;
|
|
302
|
+
} else t12 = $[20];
|
|
303
|
+
let t13;
|
|
304
|
+
if ($[21] !== t12) {
|
|
305
|
+
t13 = /* @__PURE__ */ jsx("span", {
|
|
310
306
|
className: "flex-1 text-left",
|
|
311
|
-
children:
|
|
307
|
+
children: t12
|
|
312
308
|
});
|
|
313
|
-
$[20] = t11;
|
|
314
309
|
$[21] = t12;
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
310
|
+
$[22] = t13;
|
|
311
|
+
} else t13 = $[22];
|
|
312
|
+
let t14;
|
|
313
|
+
if ($[23] !== disabled || $[24] !== handleClear || $[25] !== value) {
|
|
314
|
+
t14 = value && !disabled && /* @__PURE__ */ jsx(Icon, {
|
|
319
315
|
icon: "ph:x",
|
|
320
316
|
className: "size-4 opacity-50 hover:opacity-100",
|
|
321
317
|
onClick: handleClear
|
|
322
318
|
});
|
|
323
|
-
$[
|
|
324
|
-
$[
|
|
325
|
-
$[
|
|
326
|
-
$[
|
|
327
|
-
} else
|
|
328
|
-
let
|
|
329
|
-
if ($[
|
|
330
|
-
|
|
319
|
+
$[23] = disabled;
|
|
320
|
+
$[24] = handleClear;
|
|
321
|
+
$[25] = value;
|
|
322
|
+
$[26] = t14;
|
|
323
|
+
} else t14 = $[26];
|
|
324
|
+
let t15;
|
|
325
|
+
if ($[27] !== ariaInvalid || $[28] !== disabled || $[29] !== id || $[30] !== t10 || $[31] !== t13 || $[32] !== t14) {
|
|
326
|
+
t15 = /* @__PURE__ */ jsxs(PopoverTrigger, {
|
|
331
327
|
id,
|
|
332
328
|
disabled,
|
|
333
329
|
"aria-invalid": ariaInvalid,
|
|
334
|
-
className:
|
|
330
|
+
className: t10,
|
|
335
331
|
children: [
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
332
|
+
t11,
|
|
333
|
+
t13,
|
|
334
|
+
t14
|
|
339
335
|
]
|
|
340
336
|
});
|
|
341
|
-
$[
|
|
342
|
-
$[
|
|
343
|
-
$[
|
|
344
|
-
$[
|
|
345
|
-
$[
|
|
346
|
-
$[31] = t9;
|
|
337
|
+
$[27] = ariaInvalid;
|
|
338
|
+
$[28] = disabled;
|
|
339
|
+
$[29] = id;
|
|
340
|
+
$[30] = t10;
|
|
341
|
+
$[31] = t13;
|
|
347
342
|
$[32] = t14;
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
343
|
+
$[33] = t15;
|
|
344
|
+
} else t15 = $[33];
|
|
345
|
+
const t16 = value ?? void 0;
|
|
346
|
+
let t17;
|
|
347
|
+
if ($[34] !== maxDate || $[35] !== minDate) {
|
|
348
|
+
t17 = (date_0) => {
|
|
353
349
|
if (minDate && date_0 < minDate) return true;
|
|
354
350
|
if (maxDate && date_0 > maxDate) return true;
|
|
355
351
|
return false;
|
|
356
352
|
};
|
|
357
|
-
$[
|
|
358
|
-
$[
|
|
359
|
-
$[35] = t16;
|
|
360
|
-
} else t16 = $[35];
|
|
361
|
-
let t17;
|
|
362
|
-
let t18;
|
|
363
|
-
if ($[36] === Symbol.for("react.memo_cache_sentinel")) {
|
|
364
|
-
t17 = cn("flex size-8 items-center justify-center", "hover:bg-accent bg-transparent p-0 opacity-50 hover:opacity-100");
|
|
365
|
-
t18 = cn("flex size-8 items-center justify-center", "hover:bg-accent bg-transparent p-0 opacity-50 hover:opacity-100");
|
|
353
|
+
$[34] = maxDate;
|
|
354
|
+
$[35] = minDate;
|
|
366
355
|
$[36] = t17;
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
t18 =
|
|
371
|
-
}
|
|
372
|
-
let t19;
|
|
373
|
-
if ($[38] === Symbol.for("react.memo_cache_sentinel")) {
|
|
374
|
-
t19 = {
|
|
375
|
-
months: "flex flex-col sm:flex-row gap-2",
|
|
376
|
-
month: "flex flex-col gap-4",
|
|
377
|
-
month_caption: "flex justify-center pt-1 relative items-center h-9",
|
|
378
|
-
caption_label: "text-sm font-medium",
|
|
379
|
-
nav: "absolute inset-x-0 top-0 flex items-center justify-between px-1",
|
|
380
|
-
button_previous: t17,
|
|
381
|
-
button_next: t18,
|
|
382
|
-
month_grid: "w-full border-collapse",
|
|
383
|
-
weekdays: "flex",
|
|
384
|
-
weekday: "text-muted-foreground w-9 font-normal text-[0.8rem] text-center",
|
|
385
|
-
week: "flex w-full mt-2",
|
|
386
|
-
day: "relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([aria-selected])]:bg-accent [&:has([aria-selected].day-outside)]:bg-accent",
|
|
387
|
-
day_button: cn("size-9 p-0 font-normal", "hover:bg-accent hover:text-accent-foreground", "focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2"),
|
|
388
|
-
selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",
|
|
389
|
-
today: "bg-accent text-accent-foreground",
|
|
390
|
-
outside: "text-muted-foreground opacity-50",
|
|
391
|
-
disabled: "text-muted-foreground opacity-50",
|
|
392
|
-
hidden: "invisible"
|
|
393
|
-
};
|
|
394
|
-
$[38] = t19;
|
|
395
|
-
} else t19 = $[38];
|
|
396
|
-
let t20;
|
|
397
|
-
if ($[39] !== handleDateSelect || $[40] !== t15 || $[41] !== t16) {
|
|
398
|
-
t20 = /* @__PURE__ */ jsx(DayPicker, {
|
|
356
|
+
} else t17 = $[36];
|
|
357
|
+
let t18;
|
|
358
|
+
if ($[37] !== dateFnsLocale || $[38] !== handleDateSelect || $[39] !== t16 || $[40] !== t17) {
|
|
359
|
+
t18 = /* @__PURE__ */ jsx(DayPicker, {
|
|
399
360
|
mode: "single",
|
|
400
|
-
selected:
|
|
361
|
+
selected: t16,
|
|
401
362
|
onSelect: handleDateSelect,
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
363
|
+
locale: dateFnsLocale,
|
|
364
|
+
disabled: t17,
|
|
365
|
+
className: "qa-date-picker font-chrome p-2",
|
|
366
|
+
classNames: datePickerClassNames
|
|
405
367
|
});
|
|
406
|
-
$[
|
|
407
|
-
$[
|
|
408
|
-
$[
|
|
368
|
+
$[37] = dateFnsLocale;
|
|
369
|
+
$[38] = handleDateSelect;
|
|
370
|
+
$[39] = t16;
|
|
371
|
+
$[40] = t17;
|
|
372
|
+
$[41] = t18;
|
|
373
|
+
} else t18 = $[41];
|
|
374
|
+
const t19 = precision === "second" ? 1 : 60;
|
|
375
|
+
let t20;
|
|
376
|
+
if ($[42] === Symbol.for("react.memo_cache_sentinel")) {
|
|
377
|
+
t20 = cn("qa-time-input control-surface flex w-full px-3 py-2 text-sm", "focus-visible:border-border-strong focus-visible:ring-ring/20 focus-visible:ring-3 focus-visible:outline-none");
|
|
409
378
|
$[42] = t20;
|
|
410
379
|
} else t20 = $[42];
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
$[43] = t22;
|
|
416
|
-
} else t22 = $[43];
|
|
417
|
-
let t23;
|
|
418
|
-
if ($[44] !== handleTimeChange || $[45] !== t21 || $[46] !== timeValue) {
|
|
419
|
-
t23 = /* @__PURE__ */ jsx("div", {
|
|
420
|
-
className: "border-border border-t p-3",
|
|
380
|
+
let t21;
|
|
381
|
+
if ($[43] !== handleTimeChange || $[44] !== t19 || $[45] !== timeValue) {
|
|
382
|
+
t21 = /* @__PURE__ */ jsx("div", {
|
|
383
|
+
className: "border-border-subtle bg-surface-low/60 border-t p-3",
|
|
421
384
|
children: /* @__PURE__ */ jsx("input", {
|
|
422
385
|
type: "time",
|
|
423
|
-
step:
|
|
386
|
+
step: t19,
|
|
424
387
|
value: timeValue,
|
|
425
388
|
onChange: handleTimeChange,
|
|
426
|
-
className:
|
|
389
|
+
className: t20
|
|
427
390
|
})
|
|
428
391
|
});
|
|
429
|
-
$[
|
|
430
|
-
$[
|
|
431
|
-
$[
|
|
432
|
-
$[
|
|
433
|
-
} else
|
|
434
|
-
let
|
|
435
|
-
if ($[
|
|
436
|
-
|
|
437
|
-
className:
|
|
392
|
+
$[43] = handleTimeChange;
|
|
393
|
+
$[44] = t19;
|
|
394
|
+
$[45] = timeValue;
|
|
395
|
+
$[46] = t21;
|
|
396
|
+
} else t21 = $[46];
|
|
397
|
+
let t22;
|
|
398
|
+
if ($[47] !== t18 || $[48] !== t21) {
|
|
399
|
+
t22 = /* @__PURE__ */ jsxs(PopoverContent, {
|
|
400
|
+
className: datePopoverClassName,
|
|
438
401
|
align: "start",
|
|
439
|
-
children: [
|
|
402
|
+
children: [t18, t21]
|
|
440
403
|
});
|
|
441
|
-
$[
|
|
442
|
-
$[
|
|
443
|
-
$[
|
|
444
|
-
} else
|
|
445
|
-
let
|
|
446
|
-
if ($[
|
|
447
|
-
|
|
404
|
+
$[47] = t18;
|
|
405
|
+
$[48] = t21;
|
|
406
|
+
$[49] = t22;
|
|
407
|
+
} else t22 = $[49];
|
|
408
|
+
let t23;
|
|
409
|
+
if ($[50] !== open || $[51] !== t15 || $[52] !== t22) {
|
|
410
|
+
t23 = /* @__PURE__ */ jsxs(Popover, {
|
|
448
411
|
open,
|
|
449
412
|
onOpenChange: setOpen,
|
|
450
|
-
children: [
|
|
413
|
+
children: [t15, t22]
|
|
451
414
|
});
|
|
452
|
-
$[
|
|
453
|
-
$[
|
|
454
|
-
$[
|
|
455
|
-
$[
|
|
456
|
-
} else
|
|
457
|
-
return
|
|
415
|
+
$[50] = open;
|
|
416
|
+
$[51] = t15;
|
|
417
|
+
$[52] = t22;
|
|
418
|
+
$[53] = t23;
|
|
419
|
+
} else t23 = $[53];
|
|
420
|
+
return t23;
|
|
458
421
|
}
|
|
459
422
|
|
|
460
423
|
//#endregion
|