@plexui/ui 0.7.96 → 0.7.97

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 CHANGED
@@ -107,7 +107,7 @@ import { Select, Option } from "@plexui/ui/components/Select";
107
107
  <details>
108
108
  <summary>Full component list</summary>
109
109
 
110
- Alert, Avatar, AvatarGroup, Badge, Button, ButtonLink, Checkbox, CodeBlock, CopyTooltip, DatePicker, DateRangePicker, EmptyMessage, FieldError, FloatingLabelInput, Icon, Image, Indicators (LoadingIndicator, LoadingDots, CircularProgress), Input, Markdown, Menu, PlexUIProvider, Popover, ProgressSteps, RadioGroup, SegmentedControl, Select, SelectControl, ShimmerText, Sidebar, Skeleton, Slider, Switch, TagInput, TextLink, Textarea, Tooltip, Transition (Animate, AnimateLayout, AnimateLayoutGroup, TransitionGroup)
110
+ Alert, Avatar, AvatarGroup, Badge, Button, ButtonLink, Checkbox, CodeBlock, CopyTooltip, DateInput, DatePicker, DateRangePicker, EmptyMessage, FieldError, FloatingLabelInput, Icon, Image, Indicators (LoadingIndicator, LoadingDots, CircularProgress), Input, Markdown, Menu, PlexUIProvider, Popover, ProgressSteps, RadioGroup, SegmentedControl, Select, SelectControl, ShimmerText, Sidebar, Skeleton, Slider, Switch, TagInput, TextLink, Textarea, Tooltip, Transition (Animate, AnimateLayout, AnimateLayoutGroup, TransitionGroup)
111
111
 
112
112
  </details>
113
113
 
@@ -0,0 +1,73 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { maskitoDateOptionsGenerator, maskitoDateTimeOptionsGenerator, maskitoParseDate, maskitoParseDateTime, maskitoStringifyDate, maskitoStringifyDateTime, } from "@maskito/kit";
4
+ import { useMaskito } from "@maskito/react";
5
+ import { DateTime } from "luxon";
6
+ import { useEffect, useMemo, useState } from "react";
7
+ import { mergeRefs } from "react-merge-refs";
8
+ import { Input } from "../Input";
9
+ export const DateInput = (props) => {
10
+ const { value, onChange, mode = "dd/mm/yyyy", separator = ".", timeMode, dateTimeSeparator = ", ", timeStep = 0, min, max, clearable = false, placeholder, ref, ...inputProps } = props;
11
+ const hasTime = !!timeMode;
12
+ const dateParams = useMemo(() => ({
13
+ mode,
14
+ separator,
15
+ ...(min ? { min: min.toJSDate() } : undefined),
16
+ ...(max ? { max: max.toJSDate() } : undefined),
17
+ }),
18
+ // eslint-disable-next-line react-hooks/exhaustive-deps
19
+ [mode, separator, min?.toMillis(), max?.toMillis()]);
20
+ const dateTimeParams = useMemo(() => ({
21
+ dateMode: mode,
22
+ dateSeparator: separator,
23
+ timeMode: timeMode ?? "HH:MM",
24
+ dateTimeSeparator,
25
+ ...(timeStep ? { timeStep } : undefined),
26
+ ...(min ? { min: min.toJSDate() } : undefined),
27
+ ...(max ? { max: max.toJSDate() } : undefined),
28
+ }),
29
+ // eslint-disable-next-line react-hooks/exhaustive-deps
30
+ [mode, separator, timeMode, dateTimeSeparator, timeStep, min?.toMillis(), max?.toMillis()]);
31
+ const maskOptions = useMemo(() => hasTime
32
+ ? maskitoDateTimeOptionsGenerator(dateTimeParams)
33
+ : maskitoDateOptionsGenerator(dateParams), [hasTime, dateParams, dateTimeParams]);
34
+ const maskRef = useMaskito({ options: maskOptions });
35
+ const [inputValue, setInputValue] = useState("");
36
+ const valueMsKey = value?.toMillis() ?? null;
37
+ useEffect(() => {
38
+ if (!value) {
39
+ setInputValue("");
40
+ return;
41
+ }
42
+ setInputValue(hasTime
43
+ ? maskitoStringifyDateTime(value.toJSDate(), dateTimeParams)
44
+ : maskitoStringifyDate(value.toJSDate(), dateParams));
45
+ // eslint-disable-next-line react-hooks/exhaustive-deps
46
+ }, [valueMsKey, hasTime, dateParams, dateTimeParams]);
47
+ const handleInput = (evt) => {
48
+ const str = evt.currentTarget.value;
49
+ setInputValue(str);
50
+ if (!str) {
51
+ onChange(null);
52
+ return;
53
+ }
54
+ const parsed = hasTime
55
+ ? maskitoParseDateTime(str, dateTimeParams)
56
+ : maskitoParseDate(str, dateParams);
57
+ if (parsed) {
58
+ onChange(DateTime.fromJSDate(parsed));
59
+ }
60
+ };
61
+ const handleClear = () => {
62
+ setInputValue("");
63
+ onChange(null);
64
+ };
65
+ const defaultPlaceholder = useMemo(() => {
66
+ const datePart = mode.replace(/\//g, separator).toUpperCase();
67
+ if (!hasTime)
68
+ return datePart;
69
+ return `${datePart}${dateTimeSeparator}${timeMode}`;
70
+ }, [mode, separator, hasTime, timeMode, dateTimeSeparator]);
71
+ return (_jsx(Input, { ...inputProps, ref: mergeRefs([maskRef, ref]), value: inputValue, onInput: handleInput, placeholder: placeholder ?? defaultPlaceholder, onClear: clearable ? handleClear : undefined }));
72
+ };
73
+ //# sourceMappingURL=DateInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateInput.js","sourceRoot":"","sources":["../../../../src/components/DateInput/DateInput.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\"\n\nimport {\n maskitoDateOptionsGenerator,\n maskitoDateTimeOptionsGenerator,\n maskitoParseDate,\n maskitoParseDateTime,\n maskitoStringifyDate,\n maskitoStringifyDateTime,\n type MaskitoDateMode,\n type MaskitoDateParams,\n type MaskitoDateTimeParams,\n type MaskitoTimeMode,\n} from \"@maskito/kit\"\nimport { useMaskito } from \"@maskito/react\"\nimport { DateTime } from \"luxon\"\nimport { useEffect, useMemo, useState } from \"react\"\nimport { mergeRefs } from \"react-merge-refs\"\nimport { Input, type InputProps } from \"../Input\"\n\nexport type DateInputProps = {\n value: DateTime | null\n onChange: (value: DateTime | null) => void\n mode?: MaskitoDateMode\n separator?: string\n timeMode?: MaskitoTimeMode\n dateTimeSeparator?: string\n timeStep?: number\n min?: DateTime\n max?: DateTime\n clearable?: boolean\n ref?: React.Ref<HTMLInputElement | null>\n} & Omit<\n InputProps,\n \"value\" | \"defaultValue\" | \"onChange\" | \"onInput\" | \"onClear\" | \"ref\" | \"type\" | \"min\" | \"max\"\n>\n\nexport const DateInput = (props: DateInputProps) => {\n const {\n value,\n onChange,\n mode = \"dd/mm/yyyy\",\n separator = \".\",\n timeMode,\n dateTimeSeparator = \", \",\n timeStep = 0,\n min,\n max,\n clearable = false,\n placeholder,\n ref,\n ...inputProps\n } = props\n\n const hasTime = !!timeMode\n\n const dateParams = useMemo<MaskitoDateParams>(\n () => ({\n mode,\n separator,\n ...(min ? { min: min.toJSDate() } : undefined),\n ...(max ? { max: max.toJSDate() } : undefined),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [mode, separator, min?.toMillis(), max?.toMillis()],\n )\n\n const dateTimeParams = useMemo<MaskitoDateTimeParams>(\n () => ({\n dateMode: mode,\n dateSeparator: separator,\n timeMode: timeMode ?? \"HH:MM\",\n dateTimeSeparator,\n ...(timeStep ? { timeStep } : undefined),\n ...(min ? { min: min.toJSDate() } : undefined),\n ...(max ? { max: max.toJSDate() } : undefined),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [mode, separator, timeMode, dateTimeSeparator, timeStep, min?.toMillis(), max?.toMillis()],\n )\n\n const maskOptions = useMemo(\n () =>\n hasTime\n ? maskitoDateTimeOptionsGenerator(dateTimeParams)\n : maskitoDateOptionsGenerator(dateParams),\n [hasTime, dateParams, dateTimeParams],\n )\n\n const maskRef = useMaskito({ options: maskOptions })\n\n const [inputValue, setInputValue] = useState(\"\")\n\n const valueMsKey = value?.toMillis() ?? null\n useEffect(() => {\n if (!value) {\n setInputValue(\"\")\n return\n }\n setInputValue(\n hasTime\n ? maskitoStringifyDateTime(value.toJSDate(), dateTimeParams)\n : maskitoStringifyDate(value.toJSDate(), dateParams),\n )\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueMsKey, hasTime, dateParams, dateTimeParams])\n\n const handleInput = (evt: React.FormEvent<HTMLInputElement>) => {\n const str = evt.currentTarget.value\n setInputValue(str)\n\n if (!str) {\n onChange(null)\n return\n }\n\n const parsed = hasTime\n ? maskitoParseDateTime(str, dateTimeParams)\n : maskitoParseDate(str, dateParams)\n\n if (parsed) {\n onChange(DateTime.fromJSDate(parsed))\n }\n }\n\n const handleClear = () => {\n setInputValue(\"\")\n onChange(null)\n }\n\n const defaultPlaceholder = useMemo(() => {\n const datePart = mode.replace(/\\//g, separator).toUpperCase()\n if (!hasTime) return datePart\n return `${datePart}${dateTimeSeparator}${timeMode}`\n }, [mode, separator, hasTime, timeMode, dateTimeSeparator])\n\n return (\n <Input\n {...inputProps}\n ref={mergeRefs([maskRef as unknown as React.Ref<HTMLInputElement>, ref])}\n value={inputValue}\n onInput={handleInput}\n placeholder={placeholder ?? defaultPlaceholder}\n onClear={clearable ? handleClear : undefined}\n />\n )\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export { DateInput } from "./DateInput";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/DateInput/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAuB,MAAM,aAAa,CAAA","sourcesContent":["export { DateInput, type DateInputProps } from \"./DateInput\"\n"]}
@@ -0,0 +1,17 @@
1
+ import { type MaskitoDateMode, type MaskitoTimeMode } from "@maskito/kit";
2
+ import { DateTime } from "luxon";
3
+ import { type InputProps } from "../Input";
4
+ export type DateInputProps = {
5
+ value: DateTime | null;
6
+ onChange: (value: DateTime | null) => void;
7
+ mode?: MaskitoDateMode;
8
+ separator?: string;
9
+ timeMode?: MaskitoTimeMode;
10
+ dateTimeSeparator?: string;
11
+ timeStep?: number;
12
+ min?: DateTime;
13
+ max?: DateTime;
14
+ clearable?: boolean;
15
+ ref?: React.Ref<HTMLInputElement | null>;
16
+ } & Omit<InputProps, "value" | "defaultValue" | "onChange" | "onInput" | "onClear" | "ref" | "type" | "min" | "max">;
17
+ export declare const DateInput: (props: DateInputProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export { DateInput, type DateInputProps } from "./DateInput";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plexui/ui",
3
- "version": "0.7.96",
3
+ "version": "0.7.97",
4
4
  "description": "Modern design system for building high-quality applications",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -81,6 +81,9 @@
81
81
  "tailwindcss": "^4.0.10"
82
82
  },
83
83
  "dependencies": {
84
+ "@maskito/core": "^5.2.2",
85
+ "@maskito/kit": "^5.2.2",
86
+ "@maskito/react": "^5.2.2",
84
87
  "@tanstack/react-table": "^8.21.3",
85
88
  "@tiptap/core": "^3.21.0",
86
89
  "@tiptap/extension-bold": "^3.21.0",
@@ -116,7 +119,7 @@
116
119
  "devDependencies": {
117
120
  "@tailwindcss/postcss": "4.0.17",
118
121
  "@types/lodash": "4.17.16",
119
- "@types/luxon": "3.6.2",
122
+ "@types/luxon": "^3.7.1",
120
123
  "@types/mdast": "^4.0.4",
121
124
  "@types/postcss-functions": "4.0.4",
122
125
  "@types/postcss-mixins": "9.0.6",