ics-ui-kit 0.1.0-alpha.19 → 0.1.0-alpha.20
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/Input-CMe4wtYX.js +48 -0
- package/dist/Input-CMe4wtYX.js.map +1 -0
- package/dist/{InputGroup-DsB92_AE.js → InputGroup-B4dHkS9R.js} +2 -2
- package/dist/{InputGroup-DsB92_AE.js.map → InputGroup-B4dHkS9R.js.map} +1 -1
- package/dist/ScrollShadowContainer-DRHX1zcp.js.map +1 -1
- package/dist/{Select-CwJsXFDU.js → Select-Ddi3fZoD.js} +4 -1
- package/dist/{Select-CwJsXFDU.js.map → Select-Ddi3fZoD.js.map} +1 -1
- package/dist/Sheet-31MHzdDM.js +102 -0
- package/dist/Sheet-31MHzdDM.js.map +1 -0
- package/dist/Skeleton-hlxed0e-.js +42 -0
- package/dist/Skeleton-hlxed0e-.js.map +1 -0
- package/dist/Toggle-DFlav1DR.js +108 -0
- package/dist/Toggle-DFlav1DR.js.map +1 -0
- package/dist/{ToggleGroup-KOC9p1kq.js → ToggleGroup-BtsFQrie.js} +2 -2
- package/dist/{ToggleGroup-KOC9p1kq.js.map → ToggleGroup-BtsFQrie.js.map} +1 -1
- package/dist/components/input.js +135 -153
- package/dist/components/input.js.map +1 -1
- package/dist/components/option-group.js +1 -1
- package/dist/components/scroll-shadow-container/ScrollShadowContainer.d.ts +1 -1
- package/dist/components/scroll-shadow-container/ScrollShadowContainer.stories.d.ts +13 -0
- package/dist/components/search-select.js +1 -1
- package/dist/components/select/index.d.ts +1 -1
- package/dist/components/select.js +12 -9
- package/dist/components/sheet/index.d.ts +1 -0
- package/dist/components/sheet.d.ts +2 -0
- package/dist/components/sheet.js +10 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/sidebar/index.d.ts +1 -0
- package/dist/components/sidebar.d.ts +2 -0
- package/dist/components/sidebar.js +546 -0
- package/dist/components/sidebar.js.map +1 -0
- package/dist/components/skeleton.js +2 -39
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/tag-input.js +2 -2
- package/dist/components/textarea.js +12 -12
- package/dist/components/toggle-group.js +1 -1
- package/dist/components/toggle.js +1 -1
- package/dist/design-tokens.source.json +1 -1
- package/dist/index-YPy6Yhze.js +49 -0
- package/dist/index-YPy6Yhze.js.map +1 -0
- package/dist/{inputBaseStyles-BV-qDE0l.js → inputBaseStyles-to7AgVX2.js} +3 -3
- package/dist/{inputBaseStyles-BV-qDE0l.js.map → inputBaseStyles-to7AgVX2.js.map} +1 -1
- package/package.json +1 -1
- package/dist/Toggle-CE2q-pTm.js +0 -130
- package/dist/Toggle-CE2q-pTm.js.map +0 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
var d = Object.defineProperty;
|
|
2
|
+
var o = Object.getOwnPropertySymbols;
|
|
3
|
+
var u = Object.prototype.hasOwnProperty, m = Object.prototype.propertyIsEnumerable;
|
|
4
|
+
var n = (t, s, e) => s in t ? d(t, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : t[s] = e, f = (t, s) => {
|
|
5
|
+
for (var e in s || (s = {}))
|
|
6
|
+
u.call(s, e) && n(t, e, s[e]);
|
|
7
|
+
if (o)
|
|
8
|
+
for (var e of o(s))
|
|
9
|
+
m.call(s, e) && n(t, e, s[e]);
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
var p = (t, s) => {
|
|
13
|
+
var e = {};
|
|
14
|
+
for (var a in t)
|
|
15
|
+
u.call(t, a) && s.indexOf(a) < 0 && (e[a] = t[a]);
|
|
16
|
+
if (t != null && o)
|
|
17
|
+
for (var a of o(t))
|
|
18
|
+
s.indexOf(a) < 0 && m.call(t, a) && (e[a] = t[a]);
|
|
19
|
+
return e;
|
|
20
|
+
};
|
|
21
|
+
import { jsx as R } from "react/jsx-runtime";
|
|
22
|
+
import x, { useRef as y } from "react";
|
|
23
|
+
import { u as g } from "./useMergeRefs-qoKniYqT.js";
|
|
24
|
+
import { u as I, i as h } from "./inputBaseStyles-to7AgVX2.js";
|
|
25
|
+
import { c as C } from "./index-CR-odn5-.js";
|
|
26
|
+
const N = C({
|
|
27
|
+
extend: h,
|
|
28
|
+
base: "h-10 lg:h-9"
|
|
29
|
+
}), S = x.forwardRef(
|
|
30
|
+
(_, l) => {
|
|
31
|
+
var r = _, { type: t = "text", className: s, error: e } = r, a = p(r, ["type", "className", "error"]);
|
|
32
|
+
const i = y(null), c = g(i, l);
|
|
33
|
+
return I(i, e), /* @__PURE__ */ R(
|
|
34
|
+
"input",
|
|
35
|
+
f({
|
|
36
|
+
type: t,
|
|
37
|
+
className: N({ className: s }),
|
|
38
|
+
ref: c,
|
|
39
|
+
"aria-invalid": !!e
|
|
40
|
+
}, a)
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
S.displayName = "Input";
|
|
45
|
+
export {
|
|
46
|
+
S as I
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=Input-CMe4wtYX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input-CMe4wtYX.js","sources":["../src/components/input/input/Input.tsx"],"sourcesContent":["import React, { useRef } from \"react\";\r\nimport { useMergeRefs } from \"../../../hooks/useMergeRefs\";\r\nimport { useCustomValidity } from \"../../../hooks/useCustomValidity\";\r\nimport { inputBaseControlStyles } from \"../styles/inputBaseStyles\";\r\nimport { tv } from \"tailwind-variants\";\r\n\r\nexport type InputProps = React.ComponentProps<\"input\"> & {\r\n\t/** Текст сообщения об ошибке. При наличии делает поле невалидным */\r\n\terror?: string;\r\n};\r\n\r\nconst inputStyles = tv({\r\n\textend: inputBaseControlStyles,\r\n\tbase: \"h-10 lg:h-9\"\r\n});\r\n\r\n/**\r\n * Стилизованный базовый компонент для создания инпутов.\r\n */\r\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\r\n\t({ type = \"text\", className, error, ...other }, ref) => {\r\n\t\tconst inputRef = useRef<HTMLInputElement>(null);\r\n\t\tconst mergedRef = useMergeRefs(inputRef, ref);\r\n\r\n\t\tuseCustomValidity(inputRef, error);\r\n\r\n\t\treturn (\r\n\t\t\t<input\r\n\t\t\t\ttype={type}\r\n\t\t\t\tclassName={inputStyles({ className })}\r\n\t\t\t\tref={mergedRef}\r\n\t\t\t\taria-invalid={!!error}\r\n\t\t\t\t{...other}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nInput.displayName = \"Input\";\r\n\r\nexport default Input;\r\n"],"names":["inputStyles","tv","inputBaseControlStyles","Input","React","_a","ref","_b","type","className","error","other","__objRest","inputRef","useRef","mergedRef","useMergeRefs","useCustomValidity","jsx","__spreadValues"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAWA,MAAMA,IAAcC,EAAG;AAAA,EACtB,QAAQC;AAAA,EACR,MAAM;AACP,CAAC,GAKYC,IAAQC,EAAM;AAAA,EAC1B,CAACC,GAA+CC,MAAQ;AAAvD,QAAAC,IAAAF,GAAE,QAAAG,IAAO,QAAQ,WAAAC,GAAW,OAAAC,MAA5BH,GAAsCI,IAAAC,EAAtCL,GAAsC,CAApC,QAAe,aAAW;AACtB,UAAAM,IAAWC,EAAyB,IAAI,GACxCC,IAAYC,EAAaH,GAAUP,CAAG;AAE5C,WAAAW,EAAkBJ,GAAUH,CAAK,GAGhC,gBAAAQ;AAAA,MAAC;AAAA,MAAAC,EAAA;AAAA,QACA,MAAAX;AAAA,QACA,WAAWR,EAAY,EAAE,WAAAS,GAAW;AAAA,QACpC,KAAKM;AAAA,QACL,gBAAc,CAAC,CAACL;AAAA,SACZC;AAAA,IACL;AAAA,EAAA;AAGH;AAEAR,EAAM,cAAc;"}
|
|
@@ -22,7 +22,7 @@ var i = (t, e) => {
|
|
|
22
22
|
import { jsx as p } from "react/jsx-runtime";
|
|
23
23
|
import d, { useRef as I } from "react";
|
|
24
24
|
import { c as l } from "./index-CR-odn5-.js";
|
|
25
|
-
import { u as G,
|
|
25
|
+
import { u as G, a as N } from "./inputBaseStyles-to7AgVX2.js";
|
|
26
26
|
import { u as R } from "./useMergeRefs-qoKniYqT.js";
|
|
27
27
|
import { I as E } from "./IconButton-B0MTRnme.js";
|
|
28
28
|
const S = l({
|
|
@@ -149,4 +149,4 @@ export {
|
|
|
149
149
|
T as c,
|
|
150
150
|
V as d
|
|
151
151
|
};
|
|
152
|
-
//# sourceMappingURL=InputGroup-
|
|
152
|
+
//# sourceMappingURL=InputGroup-B4dHkS9R.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputGroup-DsB92_AE.js","sources":["../src/components/input/input-group/InputGroup.tsx"],"sourcesContent":["import React, { useRef } from \"react\";\r\nimport { tv, type VariantProps } from \"tailwind-variants\";\r\nimport { inputBaseElementStyles } from \"../styles/inputBaseStyles\";\r\nimport { useMergeRefs } from \"@/hooks/useMergeRefs\";\r\nimport { useCustomValidity } from \"@/hooks/useCustomValidity\";\r\nimport { IconButton } from \"@/components/button\";\r\nimport { LucideIcon } from \"lucide-react\";\r\nimport { ButtonBaseProps } from \"@/components/button/button-base/ButtonBase\";\r\n\r\nconst inputGroupStyles = tv({\r\n\textend: inputBaseElementStyles,\r\n\tbase: [\r\n\t\t\"group/input-group flex h-10 px-0 py-0 lg:h-9 lg:py-0\",\r\n\t\t\"has-[input:focus]:border-secondary-border has-[input:focus]:bg-secondary-bg has-[input:focus]:shadow-focus\",\r\n\t\t\"has-[div[data-input-group-element='contenteditable']:focus]:border-secondary-border has-[div[data-input-group-element='contenteditable']:focus]:bg-secondary-bg has-[div[data-input-group-element='contenteditable']:focus]:shadow-focus\",\r\n\r\n\t\t// Стили для обычных read-only input'ов (исключая file)\r\n\t\t\"has-[input:read-only:not([type='file'])]:border-primary-border\",\r\n\t\t\"has-[input:read-only:not([type='file'])]:bg-secondary-bg-hover\",\r\n\t\t\"has-[input:read-only:not([type='file'])]:shadow-sm\",\r\n\t\t\"has-[input:read-only:not([type='file'])]:hover:bg-secondary-bg-hover\",\r\n\t\t\"has-[input:read-only:not([type='file'])]:has-[input:focus]:!bg-secondary-bg-hover\",\r\n\t\t\"has-[input:read-only:not([type='file'])]:has-[input:focus]:shadow-focus\",\r\n\r\n\t\t\"has-[input:disabled]:border-primary-border\",\r\n\t\t\"has-[input:disabled]:bg-secondary-bg-hover\",\r\n\t\t\"has-[input:disabled]:shadow-sm\",\r\n\t\t\"has-[input:invalid]:border-status-error-secondary-border\",\r\n\t\t\"has-[input:invalid]:shadow-base\",\r\n\t\t\"has-[input:invalid]:hover:border-status-error-primary-border\",\r\n\t\t\"has-[input:invalid]:hover:shadow-base\",\r\n\t\t\"has-[input:invalid]:has-[input:focus]:border-status-error-secondary-border\",\r\n\t\t\"has-[input:invalid]:has-[input:focus]:shadow-focus-error\",\r\n\t\t\"has-[input[aria-invalid=true]]:border-status-error-secondary-border\",\r\n\t\t\"has-[input[aria-invalid=true]]:shadow-base\",\r\n\t\t\"has-[input[aria-invalid=true]]:hover:border-status-error-primary-border\",\r\n\t\t\"has-[input[aria-invalid=true]]:hover:shadow-base\",\r\n\t\t\"has-[input[aria-invalid=true]]:has-[input:focus]:border-status-error-secondary-border\",\r\n\t\t\"has-[input[aria-invalid=true]]:has-[input:focus]:shadow-focus-error\",\r\n\r\n\t\t// Стили для автозаполнения - применяем фон ко всей группе\r\n\t\t\"has-[input:-webkit-autofill]:bg-[hsl(var(--autofill-bg))]\",\r\n\t\t\"has-[input:-webkit-autofill]:has-[input:focus]:bg-[hsl(var(--autofill-bg))]\"\r\n\t]\r\n});\r\n\r\nexport interface InputGroupProps extends React.ComponentProps<\"div\">, VariantProps<typeof inputGroupStyles> {}\r\n\r\n/**\r\n * Контейнер для группировки инпутов с дополнительными элементами (текст, кнопки).\r\n * Позволяет создавать композиции из инпутов, текстовых блоков и кнопок.\r\n */\r\nconst InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(({ className, children, ...props }, ref) => {\r\n\tconst styles = inputGroupStyles({ className });\r\n\r\n\treturn (\r\n\t\t<div ref={ref} className={styles} {...props}>\r\n\t\t\t{children}\r\n\t\t</div>\r\n\t);\r\n});\r\n\r\nInputGroup.displayName = \"InputGroup\";\r\n\r\nconst inputGroupInputStyles = tv({\r\n\tbase: [\r\n\t\t\"min-w-5 flex-1 rounded-lg bg-transparent py-2.5 pl-3 lg:py-2\",\r\n\t\t\"outline-none placeholder:text-muted focus:outline-none\",\r\n\t\t// Градиентная маска для плавного обрезания текста слева\r\n\t\t\"[mask-image:linear-gradient(to_left,rgba(255,255,255,0),#fff_15%)]\",\r\n\t\t// Стили для автозаполнения - убираем фон у самого input'а\r\n\t\t\"[-webkit-autofill]:bg-transparent\",\r\n\t\t\"[-webkit-autofill]:shadow-none\"\r\n\t]\r\n});\r\n\r\nexport interface InputGroupInputProps extends React.ComponentProps<\"input\"> {\r\n\terror?: string;\r\n}\r\n\r\n/**\r\n * Инпут для использования в группе.\r\n */\r\nconst InputGroupInput = React.forwardRef<HTMLInputElement, InputGroupInputProps>(\r\n\t({ className, error, ...props }, ref) => {\r\n\t\tconst styles = inputGroupInputStyles({ className });\r\n\t\tconst inputRef = useRef<HTMLInputElement>(null);\r\n\t\tconst mergedRef = useMergeRefs(inputRef, ref);\r\n\r\n\t\tuseCustomValidity(inputRef, error);\r\n\r\n\t\treturn (\r\n\t\t\t<input\r\n\t\t\t\tref={mergedRef}\r\n\t\t\t\tclassName={styles}\r\n\t\t\t\taria-invalid={!!error}\r\n\t\t\t\tdata-input-group-element=\"input\"\r\n\t\t\t\t{...props}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nInputGroupInput.displayName = \"InputGroup.Input\";\r\n\r\nconst inputGroupTextStyles = tv({\r\n\tbase: [\r\n\t\t\"flex h-full items-center border-l border-secondary-border px-3 text-secondary-fg first:border-l-0\",\r\n\t\t// Правая граница, если следующий элемент НЕ InputGroupText\r\n\t\t\"[&[data-input-group-element='text']:has(+_:not([data-input-group-element='text']))]:border-r\"\r\n\t]\r\n});\r\n\r\ntype InputGroupTextProps = React.ComponentProps<\"div\">;\r\n\r\n/**\r\n * Текстовый элемент для отображения префикса или суффикса в группе инпутов.\r\n */\r\nconst InputGroupText = React.forwardRef<HTMLDivElement, InputGroupTextProps>(({ className, ...props }, ref) => {\r\n\tconst styles = inputGroupTextStyles({ className });\r\n\treturn <div ref={ref} className={styles} data-input-group-element=\"text\" {...props} />;\r\n});\r\n\r\nInputGroupText.displayName = \"InputGroup.Text\";\r\n\r\nconst inputGroupContentEditableStyles = tv({\r\n\tbase: [\"bg-transparent py-2.5 pl-3 lg:py-2\", \"outline-none focus:outline-none\"]\r\n});\r\n\r\nexport interface InputGroupContentEditableProps extends React.ComponentProps<\"div\"> {\r\n\terror?: string;\r\n}\r\n\r\n/**\r\n * Contenteditable элемент для использования в группе.\r\n */\r\nconst InputGroupContentEditable = React.forwardRef<HTMLDivElement, InputGroupContentEditableProps>(\r\n\t({ className, error, ...props }, ref) => {\r\n\t\tconst styles = inputGroupContentEditableStyles({ className });\r\n\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tref={ref}\r\n\t\t\t\tclassName={styles}\r\n\t\t\t\tcontentEditable\r\n\t\t\t\trole=\"textbox\"\r\n\t\t\t\taria-invalid={!!error}\r\n\t\t\t\tdata-input-group-element=\"contenteditable\"\r\n\t\t\t\tsuppressContentEditableWarning={true}\r\n\t\t\t\t{...props}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nInputGroupContentEditable.displayName = \"InputGroup.ContentEditable\";\r\n\r\nconst inputGroupButtonStyles = tv({\r\n\tbase: [\"aspect-auto h-full px-1.5 py-2.5 first:pl-2.5 last:pr-2.5 lg:py-2\"]\r\n});\r\n\r\ntype InputGroupButtonProps = ButtonBaseProps & {\r\n\ticon: LucideIcon;\r\n\ticonClassName?: string;\r\n};\r\n\r\nconst InputGroupButton = React.forwardRef<HTMLButtonElement, InputGroupButtonProps>(\r\n\t({ icon, className, ...props }, ref) => {\r\n\t\tconst styles = inputGroupButtonStyles({ className });\r\n\t\treturn (\r\n\t\t\t<IconButton\r\n\t\t\t\tref={ref}\r\n\t\t\t\ticon={icon}\r\n\t\t\t\tclassName={styles}\r\n\t\t\t\tvariant=\"text\"\r\n\t\t\t\tsize=\"md\"\r\n\t\t\t\tdata-input-group-element=\"button\"\r\n\t\t\t\t{...props}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nInputGroupButton.displayName = \"InputGroup.Button\";\r\n\r\nexport { InputGroupText, InputGroupInput, InputGroup, InputGroupButton, InputGroupContentEditable };\r\n"],"names":["inputGroupStyles","tv","inputBaseElementStyles","InputGroup","React","_a","ref","_b","className","children","props","__objRest","styles","__spreadProps","__spreadValues","inputGroupInputStyles","InputGroupInput","error","inputRef","useRef","mergedRef","useMergeRefs","useCustomValidity","jsx","inputGroupTextStyles","InputGroupText","inputGroupContentEditableStyles","InputGroupContentEditable","inputGroupButtonStyles","InputGroupButton","icon","IconButton"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InputGroup-B4dHkS9R.js","sources":["../src/components/input/input-group/InputGroup.tsx"],"sourcesContent":["import React, { useRef } from \"react\";\r\nimport { tv, type VariantProps } from \"tailwind-variants\";\r\nimport { inputBaseElementStyles } from \"../styles/inputBaseStyles\";\r\nimport { useMergeRefs } from \"@/hooks/useMergeRefs\";\r\nimport { useCustomValidity } from \"@/hooks/useCustomValidity\";\r\nimport { IconButton } from \"@/components/button\";\r\nimport { LucideIcon } from \"lucide-react\";\r\nimport { ButtonBaseProps } from \"@/components/button/button-base/ButtonBase\";\r\n\r\nconst inputGroupStyles = tv({\r\n\textend: inputBaseElementStyles,\r\n\tbase: [\r\n\t\t\"group/input-group flex h-10 px-0 py-0 lg:h-9 lg:py-0\",\r\n\t\t\"has-[input:focus]:border-secondary-border has-[input:focus]:bg-secondary-bg has-[input:focus]:shadow-focus\",\r\n\t\t\"has-[div[data-input-group-element='contenteditable']:focus]:border-secondary-border has-[div[data-input-group-element='contenteditable']:focus]:bg-secondary-bg has-[div[data-input-group-element='contenteditable']:focus]:shadow-focus\",\r\n\r\n\t\t// Стили для обычных read-only input'ов (исключая file)\r\n\t\t\"has-[input:read-only:not([type='file'])]:border-primary-border\",\r\n\t\t\"has-[input:read-only:not([type='file'])]:bg-secondary-bg-hover\",\r\n\t\t\"has-[input:read-only:not([type='file'])]:shadow-sm\",\r\n\t\t\"has-[input:read-only:not([type='file'])]:hover:bg-secondary-bg-hover\",\r\n\t\t\"has-[input:read-only:not([type='file'])]:has-[input:focus]:!bg-secondary-bg-hover\",\r\n\t\t\"has-[input:read-only:not([type='file'])]:has-[input:focus]:shadow-focus\",\r\n\r\n\t\t\"has-[input:disabled]:border-primary-border\",\r\n\t\t\"has-[input:disabled]:bg-secondary-bg-hover\",\r\n\t\t\"has-[input:disabled]:shadow-sm\",\r\n\t\t\"has-[input:invalid]:border-status-error-secondary-border\",\r\n\t\t\"has-[input:invalid]:shadow-base\",\r\n\t\t\"has-[input:invalid]:hover:border-status-error-primary-border\",\r\n\t\t\"has-[input:invalid]:hover:shadow-base\",\r\n\t\t\"has-[input:invalid]:has-[input:focus]:border-status-error-secondary-border\",\r\n\t\t\"has-[input:invalid]:has-[input:focus]:shadow-focus-error\",\r\n\t\t\"has-[input[aria-invalid=true]]:border-status-error-secondary-border\",\r\n\t\t\"has-[input[aria-invalid=true]]:shadow-base\",\r\n\t\t\"has-[input[aria-invalid=true]]:hover:border-status-error-primary-border\",\r\n\t\t\"has-[input[aria-invalid=true]]:hover:shadow-base\",\r\n\t\t\"has-[input[aria-invalid=true]]:has-[input:focus]:border-status-error-secondary-border\",\r\n\t\t\"has-[input[aria-invalid=true]]:has-[input:focus]:shadow-focus-error\",\r\n\r\n\t\t// Стили для автозаполнения - применяем фон ко всей группе\r\n\t\t\"has-[input:-webkit-autofill]:bg-[hsl(var(--autofill-bg))]\",\r\n\t\t\"has-[input:-webkit-autofill]:has-[input:focus]:bg-[hsl(var(--autofill-bg))]\"\r\n\t]\r\n});\r\n\r\nexport interface InputGroupProps extends React.ComponentProps<\"div\">, VariantProps<typeof inputGroupStyles> {}\r\n\r\n/**\r\n * Контейнер для группировки инпутов с дополнительными элементами (текст, кнопки).\r\n * Позволяет создавать композиции из инпутов, текстовых блоков и кнопок.\r\n */\r\nconst InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(({ className, children, ...props }, ref) => {\r\n\tconst styles = inputGroupStyles({ className });\r\n\r\n\treturn (\r\n\t\t<div ref={ref} className={styles} {...props}>\r\n\t\t\t{children}\r\n\t\t</div>\r\n\t);\r\n});\r\n\r\nInputGroup.displayName = \"InputGroup\";\r\n\r\nconst inputGroupInputStyles = tv({\r\n\tbase: [\r\n\t\t\"min-w-5 flex-1 rounded-lg bg-transparent py-2.5 pl-3 lg:py-2\",\r\n\t\t\"outline-none placeholder:text-muted focus:outline-none\",\r\n\t\t// Градиентная маска для плавного обрезания текста слева\r\n\t\t\"[mask-image:linear-gradient(to_left,rgba(255,255,255,0),#fff_15%)]\",\r\n\t\t// Стили для автозаполнения - убираем фон у самого input'а\r\n\t\t\"[-webkit-autofill]:bg-transparent\",\r\n\t\t\"[-webkit-autofill]:shadow-none\"\r\n\t]\r\n});\r\n\r\nexport interface InputGroupInputProps extends React.ComponentProps<\"input\"> {\r\n\terror?: string;\r\n}\r\n\r\n/**\r\n * Инпут для использования в группе.\r\n */\r\nconst InputGroupInput = React.forwardRef<HTMLInputElement, InputGroupInputProps>(\r\n\t({ className, error, ...props }, ref) => {\r\n\t\tconst styles = inputGroupInputStyles({ className });\r\n\t\tconst inputRef = useRef<HTMLInputElement>(null);\r\n\t\tconst mergedRef = useMergeRefs(inputRef, ref);\r\n\r\n\t\tuseCustomValidity(inputRef, error);\r\n\r\n\t\treturn (\r\n\t\t\t<input\r\n\t\t\t\tref={mergedRef}\r\n\t\t\t\tclassName={styles}\r\n\t\t\t\taria-invalid={!!error}\r\n\t\t\t\tdata-input-group-element=\"input\"\r\n\t\t\t\t{...props}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nInputGroupInput.displayName = \"InputGroup.Input\";\r\n\r\nconst inputGroupTextStyles = tv({\r\n\tbase: [\r\n\t\t\"flex h-full items-center border-l border-secondary-border px-3 text-secondary-fg first:border-l-0\",\r\n\t\t// Правая граница, если следующий элемент НЕ InputGroupText\r\n\t\t\"[&[data-input-group-element='text']:has(+_:not([data-input-group-element='text']))]:border-r\"\r\n\t]\r\n});\r\n\r\ntype InputGroupTextProps = React.ComponentProps<\"div\">;\r\n\r\n/**\r\n * Текстовый элемент для отображения префикса или суффикса в группе инпутов.\r\n */\r\nconst InputGroupText = React.forwardRef<HTMLDivElement, InputGroupTextProps>(({ className, ...props }, ref) => {\r\n\tconst styles = inputGroupTextStyles({ className });\r\n\treturn <div ref={ref} className={styles} data-input-group-element=\"text\" {...props} />;\r\n});\r\n\r\nInputGroupText.displayName = \"InputGroup.Text\";\r\n\r\nconst inputGroupContentEditableStyles = tv({\r\n\tbase: [\"bg-transparent py-2.5 pl-3 lg:py-2\", \"outline-none focus:outline-none\"]\r\n});\r\n\r\nexport interface InputGroupContentEditableProps extends React.ComponentProps<\"div\"> {\r\n\terror?: string;\r\n}\r\n\r\n/**\r\n * Contenteditable элемент для использования в группе.\r\n */\r\nconst InputGroupContentEditable = React.forwardRef<HTMLDivElement, InputGroupContentEditableProps>(\r\n\t({ className, error, ...props }, ref) => {\r\n\t\tconst styles = inputGroupContentEditableStyles({ className });\r\n\r\n\t\treturn (\r\n\t\t\t<div\r\n\t\t\t\tref={ref}\r\n\t\t\t\tclassName={styles}\r\n\t\t\t\tcontentEditable\r\n\t\t\t\trole=\"textbox\"\r\n\t\t\t\taria-invalid={!!error}\r\n\t\t\t\tdata-input-group-element=\"contenteditable\"\r\n\t\t\t\tsuppressContentEditableWarning={true}\r\n\t\t\t\t{...props}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nInputGroupContentEditable.displayName = \"InputGroup.ContentEditable\";\r\n\r\nconst inputGroupButtonStyles = tv({\r\n\tbase: [\"aspect-auto h-full px-1.5 py-2.5 first:pl-2.5 last:pr-2.5 lg:py-2\"]\r\n});\r\n\r\ntype InputGroupButtonProps = ButtonBaseProps & {\r\n\ticon: LucideIcon;\r\n\ticonClassName?: string;\r\n};\r\n\r\nconst InputGroupButton = React.forwardRef<HTMLButtonElement, InputGroupButtonProps>(\r\n\t({ icon, className, ...props }, ref) => {\r\n\t\tconst styles = inputGroupButtonStyles({ className });\r\n\t\treturn (\r\n\t\t\t<IconButton\r\n\t\t\t\tref={ref}\r\n\t\t\t\ticon={icon}\r\n\t\t\t\tclassName={styles}\r\n\t\t\t\tvariant=\"text\"\r\n\t\t\t\tsize=\"md\"\r\n\t\t\t\tdata-input-group-element=\"button\"\r\n\t\t\t\t{...props}\r\n\t\t\t/>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nInputGroupButton.displayName = \"InputGroup.Button\";\r\n\r\nexport { InputGroupText, InputGroupInput, InputGroup, InputGroupButton, InputGroupContentEditable };\r\n"],"names":["inputGroupStyles","tv","inputBaseElementStyles","InputGroup","React","_a","ref","_b","className","children","props","__objRest","styles","__spreadProps","__spreadValues","inputGroupInputStyles","InputGroupInput","error","inputRef","useRef","mergedRef","useMergeRefs","useCustomValidity","jsx","inputGroupTextStyles","InputGroupText","inputGroupContentEditableStyles","InputGroupContentEditable","inputGroupButtonStyles","InputGroupButton","icon","IconButton"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollShadowContainer-DRHX1zcp.js","sources":["../src/components/scroll-shadow-container/ScrollShadowContainer.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { tv, type VariantProps } from \"tailwind-variants\";\r\n\r\nconst scrollShadowContainerStyles = tv({\r\n\tbase: \"relative overflow-hidden\",\r\n\tslots: {\r\n\t\tshadow: \"pointer-events-none absolute left-0 right-0 z-10 h-[10px]\",\r\n\t\ttopShadow: \"top-0 bg-gradient-to-b from-shadow-scroll to-transparent opacity-5\",\r\n\t\tbottomShadow: \"bottom-0 bg-gradient-to-t from-shadow-scroll to-transparent opacity-5\",\r\n\t\tcontent: \"h-full w-full overflow-auto\"\r\n\t}\r\n});\r\n\r\
|
|
1
|
+
{"version":3,"file":"ScrollShadowContainer-DRHX1zcp.js","sources":["../src/components/scroll-shadow-container/ScrollShadowContainer.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { tv, type VariantProps } from \"tailwind-variants\";\r\n\r\nconst scrollShadowContainerStyles = tv({\r\n\tbase: \"relative overflow-hidden\",\r\n\tslots: {\r\n\t\tshadow: \"pointer-events-none absolute left-0 right-0 z-10 h-[10px]\",\r\n\t\ttopShadow: \"top-0 bg-gradient-to-b from-shadow-scroll to-transparent opacity-5\",\r\n\t\tbottomShadow: \"bottom-0 bg-gradient-to-t from-shadow-scroll to-transparent opacity-5\",\r\n\t\tcontent: \"h-full w-full overflow-auto\"\r\n\t}\r\n});\r\n\r\nexport interface ScrollShadowContainerProps\r\n\textends React.HTMLAttributes<HTMLDivElement>,\r\n\t\tVariantProps<typeof scrollShadowContainerStyles> {\r\n\tchildren: React.ReactNode;\r\n\twrapperClassName?: string;\r\n\tshadowTopClassName?: string;\r\n\tshadowBottomClassName?: string;\r\n}\r\n\r\nexport const ScrollShadowContainer = React.forwardRef<HTMLDivElement, ScrollShadowContainerProps>(\r\n\t({ className, children, shadowTopClassName, shadowBottomClassName, wrapperClassName, ...props }, ref) => {\r\n\t\tconst containerRef = React.useRef<HTMLDivElement>(null);\r\n\t\tconst [showTopShadow, setShowTopShadow] = React.useState(false);\r\n\t\tconst [showBottomShadow, setShowBottomShadow] = React.useState(false);\r\n\r\n\t\tconst { base, shadow, topShadow, bottomShadow, content } = scrollShadowContainerStyles();\r\n\r\n\t\tReact.useImperativeHandle(ref, () => containerRef.current as HTMLDivElement);\r\n\r\n\t\t// Функция проверки скролла для отображения теней\r\n\t\tconst checkScroll = React.useCallback(() => {\r\n\t\t\tif (!containerRef.current) return;\r\n\r\n\t\t\tconst { scrollTop, scrollHeight, clientHeight } = containerRef.current;\r\n\r\n\t\t\t// Показываем верхнюю тень только если прокрутили вниз\r\n\t\t\tsetShowTopShadow(scrollTop > 0);\r\n\r\n\t\t\t// Показываем нижнюю тень только если не докрутили до конца\r\n\t\t\tsetShowBottomShadow(scrollTop < scrollHeight - clientHeight - 1);\r\n\t\t}, []);\r\n\r\n\t\tReact.useEffect(() => {\r\n\t\t\tconst container = containerRef.current;\r\n\t\t\tif (!container) return;\r\n\t\t\tcheckScroll();\r\n\t\t\tcontainer.addEventListener(\"scroll\", checkScroll);\r\n\t\t\treturn () => {\r\n\t\t\t\tcontainer.removeEventListener(\"scroll\", checkScroll);\r\n\t\t\t};\r\n\t\t}, [checkScroll]);\r\n\r\n\t\treturn (\r\n\t\t\t<div className={base({ className: wrapperClassName })} {...props}>\r\n\t\t\t\t{showTopShadow && (\r\n\t\t\t\t\t<div className={shadow({ className: topShadow({ className: shadowTopClassName }) })} />\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<div ref={containerRef} className={content({ className })}>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t{showBottomShadow && (\r\n\t\t\t\t\t<div className={shadow({ className: bottomShadow({ className: shadowBottomClassName }) })} />\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nScrollShadowContainer.displayName = \"ScrollShadowContainer\";\r\n"],"names":["scrollShadowContainerStyles","tv","ScrollShadowContainer","React","_a","ref","_b","className","children","shadowTopClassName","shadowBottomClassName","wrapperClassName","props","__objRest","containerRef","showTopShadow","setShowTopShadow","showBottomShadow","setShowBottomShadow","base","shadow","topShadow","bottomShadow","content","checkScroll","scrollTop","scrollHeight","clientHeight","container","jsxs","__spreadProps","__spreadValues","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAGA,MAAMA,IAA8BC,EAAG;AAAA,EACtC,MAAM;AAAA,EACN,OAAO;AAAA,IACN,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,cAAc;AAAA,IACd,SAAS;AAAA,EAAA;AAEX,CAAC,GAWYC,IAAwBC,EAAM;AAAA,EAC1C,CAACC,GAAgGC,MAAQ;AAAxG,QAAAC,IAAAF,GAAE,aAAAG,GAAW,UAAAC,GAAU,oBAAAC,GAAoB,uBAAAC,GAAuB,kBAAAC,MAAlEL,GAAuFM,IAAAC,EAAvFP,GAAuF,CAArF,aAAW,YAAU,sBAAoB,yBAAuB;AAC5D,UAAAQ,IAAeX,EAAM,OAAuB,IAAI,GAChD,CAACY,GAAeC,CAAgB,IAAIb,EAAM,SAAS,EAAK,GACxD,CAACc,GAAkBC,CAAmB,IAAIf,EAAM,SAAS,EAAK,GAE9D,EAAE,MAAAgB,GAAM,QAAAC,GAAQ,WAAAC,GAAW,cAAAC,GAAc,SAAAC,MAAYvB,EAA4B;AAEvF,IAAAG,EAAM,oBAAoBE,GAAK,MAAMS,EAAa,OAAyB;AAGrE,UAAAU,IAAcrB,EAAM,YAAY,MAAM;AACvC,UAAA,CAACW,EAAa,QAAS;AAE3B,YAAM,EAAE,WAAAW,GAAW,cAAAC,GAAc,cAAAC,MAAiBb,EAAa;AAG/D,MAAAE,EAAiBS,IAAY,CAAC,GAGVP,EAAAO,IAAYC,IAAeC,IAAe,CAAC;AAAA,IAChE,GAAG,EAAE;AAEL,WAAAxB,EAAM,UAAU,MAAM;AACrB,YAAMyB,IAAYd,EAAa;AAC/B,UAAKc;AACO,eAAAJ,EAAA,GACFI,EAAA,iBAAiB,UAAUJ,CAAW,GACzC,MAAM;AACF,UAAAI,EAAA,oBAAoB,UAAUJ,CAAW;AAAA,QACpD;AAAA,IAAA,GACE,CAACA,CAAW,CAAC,GAGf,gBAAAK,EAAC,OAAIC,EAAAC,EAAA,EAAA,WAAWZ,EAAK,EAAE,WAAWR,EAAkB,CAAA,KAAOC,IAAtD,EACH,UAAA;AAAA,MAAAG,KACC,gBAAAiB,EAAA,OAAA,EAAI,WAAWZ,EAAO,EAAE,WAAWC,EAAU,EAAE,WAAWZ,EAAA,CAAoB,EAAA,CAAG,EAAG,CAAA;AAAA,MAGtF,gBAAAuB,EAAC,OAAI,EAAA,KAAKlB,GAAc,WAAWS,EAAQ,EAAE,WAAAhB,EAAA,CAAW,GACtD,UAAAC,GACF;AAAA,MAECS,KACA,gBAAAe,EAAC,OAAI,EAAA,WAAWZ,EAAO,EAAE,WAAWE,EAAa,EAAE,WAAWZ,EAAuB,CAAA,EAAG,CAAA,EAAG,CAAA;AAAA,IAAA,IAE7F;AAAA,EAAA;AAGH;AAEAR,EAAsB,cAAc;"}
|