mosuk-ui 1.0.10 → 1.11.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.
Files changed (28) hide show
  1. package/components/actions/input/(otp)/component/component.d.ts +3 -0
  2. package/components/actions/input/(otp)/component/component.interface.d.ts +6 -0
  3. package/components/actions/input/(otp)/component/component.interface.js +1 -0
  4. package/components/actions/input/(otp)/component/component.js +33 -0
  5. package/components/actions/input/(otp)/component/component.module.css +49 -0
  6. package/components/actions/input/(otp)/component/field/component.d.ts +7 -0
  7. package/components/actions/input/(otp)/component/field/component.js +30 -0
  8. package/components/actions/input/(otp)/component/index.d.ts +13 -0
  9. package/components/actions/input/(otp)/component/index.js +7 -0
  10. package/components/actions/input/(otp)/component/separator/component.d.ts +7 -0
  11. package/components/actions/input/(otp)/component/separator/component.js +30 -0
  12. package/components/actions/input/(otp)/skeleton/component.d.ts +3 -0
  13. package/components/actions/input/(otp)/skeleton/component.interface.d.ts +6 -0
  14. package/components/actions/input/(otp)/skeleton/component.interface.js +1 -0
  15. package/components/actions/input/(otp)/skeleton/component.js +30 -0
  16. package/components/actions/input/(otp)/skeleton/component.module.css +18 -0
  17. package/components/actions/input/(otp)/skeleton/index.d.ts +6 -0
  18. package/components/actions/input/(otp)/skeleton/index.js +2 -0
  19. package/components/texts/counter/component/component.js +55 -12
  20. package/package.json +16 -6
  21. package/styles/components/actions/button/[size]/style.css +11 -265
  22. package/styles/components/actions/icon/[size]/style.css +12 -290
  23. package/styles/components/actions/input/[size]/style.css +18 -76
  24. package/styles/utilities/action/fill/style.css +1 -3
  25. package/styles/utilities/action/glass/style.css +0 -2
  26. package/styles/utilities/action/outline/style.css +1 -0
  27. package/styles/utilities/action/style.css +1 -2
  28. package/styles/utilities/action/transparent/style.css +0 -5
@@ -0,0 +1,3 @@
1
+ import React, { ElementType } from 'react';
2
+ import { InputOtpProps } from './component.interface';
3
+ export declare function InputOtp<C extends ElementType = 'div'>({ as, children, length, ...rest }: InputOtpProps<C>): React.JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { ComponentPropsWithoutRef, ElementType, Ref } from 'react';
2
+ import { OTPFieldPreview as BaseOTPField } from '@base-ui/react/otp-field';
3
+ export type InputOtpProps<C extends ElementType = 'div'> = {
4
+ as?: C;
5
+ ref?: Ref<any>;
6
+ } & Omit<ComponentPropsWithoutRef<C>, 'as' | 'ref'> & Omit<BaseOTPField.Root.Props, 'className' | 'style'>;
@@ -0,0 +1,33 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ import classNames from 'classnames';
24
+ import React, { useId } from 'react';
25
+ import { OTPFieldPreview as OTPField } from '@base-ui/react/otp-field';
26
+ import styles from './component.module.css';
27
+ export function InputOtp(_a) {
28
+ var _b;
29
+ var as = _a.as, children = _a.children, length = _a.length, rest = __rest(_a, ["as", "children", "length"]);
30
+ var Component = (as || OTPField.Root);
31
+ var id = (_b = rest === null || rest === void 0 ? void 0 : rest.id) !== null && _b !== void 0 ? _b : useId();
32
+ return (React.createElement(Component, __assign({}, rest, { id: id, length: length, className: classNames(styles.root, 'mosuk-input-otp', rest === null || rest === void 0 ? void 0 : rest.className) }), children));
33
+ }
@@ -0,0 +1,49 @@
1
+ @layer mosuk-ui {
2
+ @layer index-11 {
3
+ .root {
4
+ display: flex;
5
+ width: 100%;
6
+ gap: var(--spacing-2, calc(var(--spacing, 0.25rem) * 2));
7
+ }
8
+
9
+ .input {
10
+ box-sizing: border-box;
11
+ margin: 0;
12
+ height: var(--spacing-11, calc(var(--spacing, 0.25rem) * 11));
13
+ width: var(--spacing-10, calc(var(--spacing, 0.25rem) * 10));
14
+ border-radius: var(--radius-lg, calc(var(--spacing, 0.25rem) * 2));
15
+ border: 1px solid var(--color-gray-300, rgb(209 213 219));
16
+ background-color: transparent;
17
+ text-align: center;
18
+ font-family: inherit;
19
+ font-size: var(--text-xl, calc(var(--spacing, 0.25rem) * 4.5));
20
+ font-weight: var(--font-medium, 500);
21
+ color: var(--color-black, #000);
22
+ outline: none;
23
+ transition: all 200ms ease-in-out;
24
+
25
+ &::placeholder {
26
+ color: var(--color-gray-500, oklch(0.551 0.027 264.364));
27
+ }
28
+
29
+ &:focus {
30
+ outline: none;
31
+ border-color: var(--color-blue-500, oklch(0.623 0.214 259.815));
32
+ }
33
+
34
+ &:read-only {
35
+ opacity: 50%;
36
+ pointer-events: none;
37
+ }
38
+ }
39
+
40
+ .separator {
41
+ display: flex;
42
+ align-items: center;
43
+ justify-content: center;
44
+ color: var(--color-gray-500, oklch(0.551 0.027 264.364));
45
+ font-size: var(--text-xl, calc(var(--spacing, 0.25rem) * 4.5));
46
+ font-weight: var(--font-medium, 500);
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { OTPFieldInputProps } from "@base-ui/react";
3
+ export interface InputOtpFieldProps extends OTPFieldInputProps {
4
+ index?: number;
5
+ length?: number;
6
+ }
7
+ export declare function InputOtpField({ index, length, className, ...rest }: InputOtpFieldProps): React.JSX.Element;
@@ -0,0 +1,30 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ import classNames from 'classnames';
24
+ import React from 'react';
25
+ import { OTPFieldPreview as OTPField } from '@base-ui/react/otp-field';
26
+ import styles from '../component.module.css';
27
+ export function InputOtpField(_a) {
28
+ var index = _a.index, length = _a.length, className = _a.className, rest = __rest(_a, ["index", "length", "className"]);
29
+ return (React.createElement(OTPField.Input, __assign({ className: classNames(styles.input, 'mosuk-input-otp-field', className), "aria-label": "Character ".concat(index !== null && index !== void 0 ? index : 1, " of ").concat(length) }, rest)));
30
+ }
@@ -0,0 +1,13 @@
1
+ import { InputOtp as Component } from './component';
2
+ import { InputOtpProps as ComponentProps } from './component.interface';
3
+ import { InputOtpField, InputOtpFieldProps } from './field/component';
4
+ import { InputOtpSeparator, InputOtpSeparatorProps } from './separator/component';
5
+ export declare const InputOtp: typeof Component & {
6
+ Field: typeof InputOtpField;
7
+ Separator: typeof InputOtpSeparator;
8
+ };
9
+ export declare namespace InputOtp {
10
+ type Props = ComponentProps;
11
+ type FieldProps = InputOtpFieldProps;
12
+ type SeparatorProps = InputOtpSeparatorProps;
13
+ }
@@ -0,0 +1,7 @@
1
+ import { InputOtp as Component } from './component';
2
+ import { InputOtpField } from './field/component';
3
+ import { InputOtpSeparator } from './separator/component';
4
+ export var InputOtp = Object.assign(Component, {
5
+ Field: InputOtpField,
6
+ Separator: InputOtpSeparator,
7
+ });
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { SeparatorProps } from "@base-ui/react";
3
+ export interface InputOtpSeparatorProps extends SeparatorProps {
4
+ index?: number;
5
+ length?: number;
6
+ }
7
+ export declare function InputOtpSeparator({ index, length, className, ...rest }: InputOtpSeparatorProps): React.JSX.Element;
@@ -0,0 +1,30 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ import classNames from 'classnames';
24
+ import React from 'react';
25
+ import { OTPFieldPreview as OTPField } from '@base-ui/react/otp-field';
26
+ import styles from '../component.module.css';
27
+ export function InputOtpSeparator(_a) {
28
+ var index = _a.index, length = _a.length, className = _a.className, rest = __rest(_a, ["index", "length", "className"]);
29
+ return (React.createElement(OTPField.Separator, __assign({ className: classNames(styles.separator, 'mosuk-input-otp-separator', className), "aria-label": "Character ".concat(index !== null && index !== void 0 ? index : 1, " of ").concat(length) }, rest)));
30
+ }
@@ -0,0 +1,3 @@
1
+ import React, { ElementType } from 'react';
2
+ import { InputOtpSkeletonProps } from './component.interface';
3
+ export declare function InputOtpSkeleton<C extends ElementType = 'div'>({ as, slots, children, ...rest }: InputOtpSkeletonProps<C>): React.JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { ComponentPropsWithoutRef, ElementType, Ref } from 'react';
2
+ export type InputOtpSkeletonProps<C extends ElementType = 'div'> = {
3
+ as?: C;
4
+ ref?: Ref<any>;
5
+ slots?: number;
6
+ } & Omit<ComponentPropsWithoutRef<C>, 'as' | 'ref'>;
@@ -0,0 +1,30 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
23
+ import classNames from 'classnames';
24
+ import React from 'react';
25
+ import styles from './component.module.css';
26
+ export function InputOtpSkeleton(_a) {
27
+ var as = _a.as, _b = _a.slots, slots = _b === void 0 ? 6 : _b, children = _a.children, rest = __rest(_a, ["as", "slots", "children"]);
28
+ var Component = (as || 'div');
29
+ return (React.createElement(Component, __assign({}, rest, { className: classNames('mosuk-input-otp-skeleton', styles.otp, rest === null || rest === void 0 ? void 0 : rest.className) }), children));
30
+ }
@@ -0,0 +1,18 @@
1
+ @layer mosuk-ui {
2
+ @layer index-11 {
3
+ .otp {
4
+ display: flex;
5
+ gap: calc(var(--spacing, .25rem) * 2);
6
+ width: 100%;
7
+ }
8
+
9
+ .slot {
10
+ width: calc(var(--spacing, .25rem) * 10);
11
+ height: calc(var(--spacing, .25rem) * 10);
12
+ min-width: calc(var(--spacing, .25rem) * 10);
13
+ min-height: calc(var(--spacing, .25rem) * 10);
14
+
15
+ border-radius: calc(var(--spacing, .25rem) * 2);
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,6 @@
1
+ import { InputOtpSkeleton as Component } from './component';
2
+ import { InputOtpSkeletonProps as ComponentProps } from './component.interface';
3
+ export declare const InputOtpSkeleton: typeof Component;
4
+ export declare namespace InputOtpSkeleton {
5
+ type Props = ComponentProps;
6
+ }
@@ -0,0 +1,2 @@
1
+ import { InputOtpSkeleton as Component } from './component';
2
+ export var InputOtpSkeleton = Object.assign(Component, {});
@@ -30,7 +30,9 @@ export var Counter = forwardRef(function (props, externalRef) {
30
30
  // Преобразуем children в число
31
31
  var targetValue = typeof children === 'number'
32
32
  ? children
33
- : parseFloat(String(children).replace(/[^\d.,-]/g, '').replace(/,/g, '.')) || 0;
33
+ : parseFloat(String(children)
34
+ .replace(/[^\d.,-]/g, '')
35
+ .replace(/,/g, '.')) || 0;
34
36
  // Определяем количество десятичных знаков в исходном числе
35
37
  var getDecimalPlaces = function (num) {
36
38
  var match = String(num).match(/(?:\.(\d+))?$/);
@@ -41,8 +43,43 @@ export var Counter = forwardRef(function (props, externalRef) {
41
43
  var element = ref.current;
42
44
  if (!element)
43
45
  return;
44
- var rafId;
46
+ var rafId = 0;
45
47
  var isActive = true;
48
+ var finished = false;
49
+ var formatter = new Intl.NumberFormat('ru-RU', {
50
+ minimumFractionDigits: 0,
51
+ maximumFractionDigits: maxDigits,
52
+ });
53
+ var tolerance = maxDigits > 0
54
+ ? 0.5 * Math.pow(10, -maxDigits)
55
+ : Math.max(1e-6, Math.abs(targetValue) * 1e-9);
56
+ var applyFinal = function () {
57
+ if (!element)
58
+ return;
59
+ element.textContent = formatter.format(targetValue);
60
+ };
61
+ var stopRaf = function () {
62
+ if (rafId !== 0) {
63
+ cancelAnimationFrame(rafId);
64
+ rafId = 0;
65
+ }
66
+ };
67
+ var complete = function () {
68
+ if (!isActive || finished)
69
+ return;
70
+ finished = true;
71
+ stopRaf();
72
+ applyFinal();
73
+ };
74
+ var onTransitionEnd = function (event) {
75
+ if (event.target !== element)
76
+ return;
77
+ // Registered custom property: Chromium reports "--value"
78
+ if (event.propertyName !== '--value')
79
+ return;
80
+ complete();
81
+ };
82
+ element.addEventListener('transitionend', onTransitionEnd);
46
83
  // Небольшая задержка для запуска transition
47
84
  requestAnimationFrame(function () {
48
85
  if (!element || !isActive)
@@ -51,23 +88,25 @@ export var Counter = forwardRef(function (props, externalRef) {
51
88
  element.style.setProperty('--value', String(targetValue));
52
89
  });
53
90
  var animate = function () {
54
- if (!isActive || !element)
91
+ if (!isActive || !element || finished)
55
92
  return;
56
93
  try {
57
- var currentValue = parseFloat(getComputedStyle(element).getPropertyValue('--value')) || 0;
58
- element.textContent = new Intl.NumberFormat('ru-RU', {
59
- minimumFractionDigits: 0,
60
- maximumFractionDigits: maxDigits,
61
- }).format(currentValue);
94
+ var currentValue = parseFloat(getComputedStyle(element).getPropertyValue('--value')) ||
95
+ 0;
96
+ element.textContent = formatter.format(currentValue);
97
+ if (Math.abs(currentValue - targetValue) <= tolerance) {
98
+ complete();
99
+ return;
100
+ }
62
101
  }
63
102
  catch (_a) { }
64
- if (isActive)
65
- rafId = requestAnimationFrame(animate);
103
+ rafId = requestAnimationFrame(animate);
66
104
  };
67
105
  rafId = requestAnimationFrame(animate);
68
106
  return function () {
69
107
  isActive = false;
70
- cancelAnimationFrame(rafId);
108
+ stopRaf();
109
+ element.removeEventListener('transitionend', onTransitionEnd);
71
110
  };
72
111
  }, [targetValue, maxDigits]);
73
112
  // Объединяем refs
@@ -81,5 +120,9 @@ export var Counter = forwardRef(function (props, externalRef) {
81
120
  }
82
121
  }
83
122
  }, [externalRef]);
84
- return (React.createElement(Component, __assign({}, rest, { ref: ref, className: classNames(styles.counter, className), style: __assign({ '--value': 0 }, style) }), "0"));
123
+ return (React.createElement(Component, __assign({}, rest, { ref: ref, className: classNames(styles.counter, className),
124
+ // Не задаём --value через React: при каждом ре-рендере это сбрасывало бы
125
+ // переменную и срывало transition, из‑за чего RAF никогда не останавливался.
126
+ // Начальное значение задаётся в CSS (@property --value initial-value: 0).
127
+ style: style }), "0"));
85
128
  });
package/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "mosuk-ui",
3
- "version": "1.0.10",
3
+ "version": "1.11.0",
4
4
  "author": "mosuk",
5
5
  "license": "MIT",
6
6
  "private": false,
7
7
  "type": "module",
8
8
  "dependencies": {
9
- "@base-ui/react": "^1.3.0",
9
+ "@base-ui/react": "^1.4.1",
10
10
  "@dnd-kit/core": "^6.3.1",
11
+ "@dnd-kit/modifiers": "^9.0.0",
11
12
  "@dnd-kit/sortable": "^10.0.0",
12
13
  "@dnd-kit/utilities": "^3.2.2",
13
- "@dnd-kit/modifiers": "^9.0.0",
14
14
  "classnames": "^2.5.1",
15
15
  "date-fns": "^4.1.0",
16
16
  "lucide-react": "latest",
17
- "mosuk-utilities": "^1.0.0",
18
17
  "mosuk-icons": "^1.0.5",
18
+ "mosuk-utilities": "^1.0.0",
19
19
  "react-hook-form": "^7.56.4",
20
20
  "react-imask": "^7.6.1",
21
21
  "react-textarea-autosize": "^8.5.9",
@@ -23,10 +23,10 @@
23
23
  "swr": "^2.3.8"
24
24
  },
25
25
  "peerDependencies": {
26
+ "framer-motion": "^12.34.3",
26
27
  "next": "^15.3.4 || ^16.0.0-beta.0",
27
28
  "react": "^19.0.0",
28
- "react-dom": "^19.0.0",
29
- "framer-motion": "^12.34.3"
29
+ "react-dom": "^19.0.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@yandex/ymaps3-types": "^1.0.17595433"
@@ -87,6 +87,16 @@
87
87
  "default": "./components/actions/input/(mask)/skeleton/index.js"
88
88
  }
89
89
  },
90
+ "./components/actions/input/(otp)/component": {
91
+ "import": {
92
+ "default": "./components/actions/input/(otp)/component/index.js"
93
+ }
94
+ },
95
+ "./components/actions/input/(otp)/skeleton": {
96
+ "import": {
97
+ "default": "./components/actions/input/(otp)/skeleton/index.js"
98
+ }
99
+ },
90
100
  "./components/actions/input/(search)/component": {
91
101
  "import": {
92
102
  "default": "./components/actions/input/(search)/component/index.js"
@@ -1,281 +1,27 @@
1
- @utility button-3xs {
2
- height: calc(var(--spacing, 0.25rem) * 4);
1
+ @utility button-* {
2
+ height: calc(var(--spacing, 0.25rem) * --value(integer));
3
3
 
4
4
  display: flex;
5
5
  align-items: center;
6
6
  justify-content: center;
7
- gap: calc(var(--spacing, 0.25rem) * 1.125);
7
+ gap: calc(var(--spacing, 0.25rem) * 0.25 * --value(integer));
8
8
 
9
- font-size: var(--text-3xs, 0.5rem);
10
- text-wrap: nowrap;
11
-
12
- padding-left: calc(var(--spacing, 0.25rem) * 2);
13
- padding-right: calc(var(--spacing, 0.25rem) * 2);
14
- border-radius: calc(infinity * 1px);
15
- outline: none;
16
-
17
- cursor: pointer;
18
-
19
- transition: all 200ms ease-in-out;
20
-
21
- & svg {
22
- width: calc(var(--spacing, 0.25rem) * 2);
23
- height: calc(var(--spacing, 0.25rem) * 2);
24
- min-width: calc(var(--spacing, 0.25rem) * 2);
25
- min-height: calc(var(--spacing, 0.25rem) * 2);
26
-
27
- transition: all 200ms ease-in-out;
28
- }
29
- }
30
-
31
- @utility button-2xs {
32
- height: calc(var(--spacing, 0.25rem) * 5);
33
-
34
- display: flex;
35
- align-items: center;
36
- justify-content: center;
37
- gap: calc(var(--spacing, 0.25rem) * 1.25);
38
-
39
- font-size: var(--text-3xs, 0.5rem);
40
- text-wrap: nowrap;
41
-
42
- padding-left: calc(var(--spacing, 0.25rem) * 2.5);
43
- padding-right: calc(var(--spacing, 0.25rem) * 2.5);
44
- border-radius: calc(infinity * 1px);
45
- outline: none;
46
-
47
- cursor: pointer;
48
-
49
- transition: all 200ms ease-in-out;
50
-
51
- & svg {
52
- width: calc(var(--spacing, 0.25rem) * 2);
53
- height: calc(var(--spacing, 0.25rem) * 2);
54
- min-width: calc(var(--spacing, 0.25rem) * 2);
55
- min-height: calc(var(--spacing, 0.25rem) * 2);
56
-
57
- transition: all 200ms ease-in-out;
58
- }
59
- }
60
-
61
- @utility button-xs {
62
- height: calc(var(--spacing, 0.25rem) * 6);
63
-
64
- display: flex;
65
- align-items: center;
66
- justify-content: center;
67
- gap: calc(var(--spacing, 0.25rem) * 1.5);
68
-
69
- font-size: var(--text-3xs, 0.5rem);
70
- text-wrap: nowrap;
71
-
72
- padding-left: calc(var(--spacing, 0.25rem) * 2.75);
73
- padding-right: calc(var(--spacing, 0.25rem) * 2.75);
74
- border-radius: calc(infinity * 1px);
75
- outline: none;
76
-
77
- cursor: pointer;
78
-
79
- transition: all 200ms ease-in-out;
80
-
81
- & svg {
82
- width: calc(var(--spacing, 0.25rem) * 2.5);
83
- height: calc(var(--spacing, 0.25rem) * 2.5);
84
- min-width: calc(var(--spacing, 0.25rem) * 2.5);
85
- min-height: calc(var(--spacing, 0.25rem) * 2.5);
86
-
87
- margin-bottom: 1px;
88
-
89
- transition: all 200ms ease-in-out;
90
- }
91
- }
92
-
93
- @utility button-sm {
94
- height: calc(var(--spacing, 0.25rem) * 7);
95
-
96
- display: flex;
97
- align-items: center;
98
- justify-content: center;
99
- gap: calc(var(--spacing, 0.25rem) * 1.75);
100
-
101
- font-size: var(--text-2xs, 0.625rem);
102
- text-wrap: nowrap;
103
-
104
- padding-left: calc(var(--spacing, 0.25rem) * 3);
105
- padding-right: calc(var(--spacing, 0.25rem) * 3);
106
- border-radius: calc(infinity * 1px);
107
- outline: none;
108
-
109
- cursor: pointer;
110
-
111
- transition: all 200ms ease-in-out;
112
-
113
- & svg {
114
- width: calc(var(--spacing, 0.25rem) * 3);
115
- height: calc(var(--spacing, 0.25rem) * 3);
116
- min-width: calc(var(--spacing, 0.25rem) * 3);
117
- min-height: calc(var(--spacing, 0.25rem) * 3);
118
-
119
- transition: all 200ms ease-in-out;
120
- }
121
- }
122
-
123
- @utility button-base {
124
- height: calc(var(--spacing, 0.25rem) * 8);
125
-
126
- display: flex;
127
- align-items: center;
128
- justify-content: center;
129
- gap: calc(var(--spacing, 0.25rem) * 2);
130
-
131
- font-size: var(--text-xs, 0.75rem);
132
- text-wrap: nowrap;
133
-
134
- padding-left: calc(var(--spacing, 0.25rem) * 4);
135
- padding-right: calc(var(--spacing, 0.25rem) * 4);
136
- border-radius: calc(infinity * 1px);
137
- outline: none;
138
-
139
- cursor: pointer;
140
-
141
- transition: all 200ms ease-in-out;
142
-
143
- & svg {
144
- width: calc(var(--spacing, 0.25rem) * 3.5);
145
- height: calc(var(--spacing, 0.25rem) * 3.5);
146
- min-width: calc(var(--spacing, 0.25rem) * 3.5);
147
- min-height: calc(var(--spacing, 0.25rem) * 3.5);
148
-
149
- transition: all 200ms ease-in-out;
150
- }
151
- }
152
-
153
- @utility button-md {
154
- height: calc(var(--spacing, 0.25rem) * 9);
155
-
156
- display: flex;
157
- align-items: center;
158
- justify-content: center;
159
- gap: calc(var(--spacing, 0.25rem) * 2);
160
-
161
- font-size: 0.7875rem;
162
- text-wrap: nowrap;
163
-
164
- padding-left: calc(var(--spacing, 0.25rem) * 5);
165
- padding-right: calc(var(--spacing, 0.25rem) * 5);
166
- border-radius: calc(infinity * 1px);
167
- outline: none;
168
-
169
- cursor: pointer;
170
-
171
- transition: all 200ms ease-in-out;
172
-
173
- & svg {
174
- width: calc(var(--spacing, 0.25rem) * 4);
175
- height: calc(var(--spacing, 0.25rem) * 4);
176
- min-width: calc(var(--spacing, 0.25rem) * 4);
177
- min-height: calc(var(--spacing, 0.25rem) * 4);
178
-
179
- margin-bottom: 1px;
180
-
181
- transition: all 200ms ease-in-out;
182
- }
183
- }
184
-
185
- @utility button-lg {
186
- height: calc(var(--spacing, 0.25rem) * 10);
187
-
188
- display: flex;
189
- align-items: center;
190
- justify-content: center;
191
- gap: calc(var(--spacing, 0.25rem) * 2);
192
-
193
- font-size: var(--text-sm, 0.875rem);
194
- font-weight: 500;
195
- text-wrap: nowrap;
196
-
197
- padding-left: calc(var(--spacing, 0.25rem) * 5);
198
- padding-right: calc(var(--spacing, 0.25rem) * 5);
199
- border-radius: calc(infinity * 1px);
200
- outline: none;
201
-
202
- cursor: pointer;
203
-
204
- transition: all 200ms ease-in-out;
205
-
206
- & svg {
207
- width: calc(var(--spacing, 0.25rem) * 4.5);
208
- height: calc(var(--spacing, 0.25rem) * 4.5);
209
- min-width: calc(var(--spacing, 0.25rem) * 4.5);
210
- min-height: calc(var(--spacing, 0.25rem) * 4.5);
211
-
212
- margin-bottom: 1px;
213
-
214
- transition: all 200ms ease-in-out;
215
- }
216
- }
217
-
218
- @utility button-xl {
219
- height: calc(var(--spacing, 0.25rem) * 11);
220
-
221
- display: flex;
222
- align-items: center;
223
- justify-content: center;
224
- gap: calc(var(--spacing, 0.25rem) * 2.5);
225
-
226
- font-size: var(--text-sm, 0.875rem);
227
- font-weight: 500;
228
- text-wrap: nowrap;
229
-
230
- padding-left: calc(var(--spacing, 0.25rem) * 6);
231
- padding-right: calc(var(--spacing, 0.25rem) * 6);
232
- border-radius: calc(infinity * 1px);
233
- outline: none;
234
-
235
- cursor: pointer;
236
-
237
- transition: all 200ms ease-in-out;
238
-
239
- & svg {
240
- width: calc(var(--spacing, 0.25rem) * 5);
241
- height: calc(var(--spacing, 0.25rem) * 5);
242
- min-width: calc(var(--spacing, 0.25rem) * 5);
243
- min-height: calc(var(--spacing, 0.25rem) * 5);
244
-
245
- margin-bottom: 1px;
246
-
247
- transition: all 200ms ease-in-out;
248
- }
249
- }
250
-
251
- @utility button-2xl {
252
- height: calc(var(--spacing, 0.25rem) * 12);
253
-
254
- display: flex;
255
- align-items: center;
256
- justify-content: center;
257
- gap: calc(var(--spacing, 0.25rem) * 2.5);
258
-
259
- font-size: var(--text-base, 1rem);
9
+ font-size: calc(var(--spacing, 0.25rem) * 0.375 * --value(integer));
260
10
  font-weight: 500;
261
11
  text-wrap: nowrap;
262
12
 
263
- padding-left: calc(var(--spacing, 0.25rem) * 6);
264
- padding-right: calc(var(--spacing, 0.25rem) * 6);
13
+ padding-left: calc(var(--spacing, 0.25rem) * 0.5 * --value(integer));
14
+ padding-right: calc(var(--spacing, 0.25rem) * 0.5 * --value(integer));
265
15
  border-radius: calc(infinity * 1px);
266
16
  outline: none;
267
17
 
268
- cursor: pointer;
269
-
270
18
  transition: all 200ms ease-in-out;
271
19
 
272
- & svg {
273
- width: calc(var(--spacing, 0.25rem) * 5.5);
274
- height: calc(var(--spacing, 0.25rem) * 5.5);
275
- min-width: calc(var(--spacing, 0.25rem) * 5.5);
276
- min-height: calc(var(--spacing, 0.25rem) * 5.5);
277
-
278
- margin-bottom: 1px;
20
+ & :where(svg) {
21
+ width: calc(var(--spacing, 0.25rem) * 0.5 * --value(integer));
22
+ height: calc(var(--spacing, 0.25rem) * 0.5 * --value(integer));
23
+ min-width: calc(var(--spacing, 0.25rem) * 0.5 * --value(integer));
24
+ min-height: calc(var(--spacing, 0.25rem) * 0.5 * --value(integer));
279
25
 
280
26
  transition: all 200ms ease-in-out;
281
27
  }
@@ -1,306 +1,28 @@
1
- @utility icon-4xs {
2
- width: calc(var(--spacing, .25rem) * 3);
3
- height: calc(var(--spacing, .25rem) * 3);
4
- min-width: calc(var(--spacing, .25rem) * 3);
5
- min-height: calc(var(--spacing, .25rem) * 3);
1
+ @utility icon-* {
2
+ width: calc(var(--spacing, 0.25rem) * --value(integer));
3
+ height: calc(var(--spacing, 0.25rem) * --value(integer));
4
+ min-width: calc(var(--spacing, 0.25rem) * --value(integer));
5
+ min-height: calc(var(--spacing, 0.25rem) * --value(integer));
6
6
 
7
7
  display: inline-flex;
8
8
  align-items: center;
9
9
  justify-content: center;
10
10
 
11
- padding: calc(var(--spacing, .25rem) * 0.85);
12
- border-radius: calc(infinity * 1px);
13
-
14
- font-size: var(--text-3xs, 0.5rem);
15
- text-wrap: nowrap;
16
- text-overflow: ellipsis;
17
-
18
- cursor: pointer;
19
-
20
- transition: all 200ms ease-in-out;
21
-
22
- & svg {
23
- width: 100%;
24
- height: 100%;
25
-
26
- outline: none;
27
-
28
- transition: all 200ms ease-in-out;
29
- }
30
- }
31
-
32
- @utility icon-3xs {
33
- width: calc(var(--spacing, .25rem) * 4);
34
- height: calc(var(--spacing, .25rem) * 4);
35
- min-width: calc(var(--spacing, .25rem) * 4);
36
- min-height: calc(var(--spacing, .25rem) * 4);
37
-
38
- display: inline-flex;
39
- align-items: center;
40
- justify-content: center;
41
-
42
- padding: calc(var(--spacing, .25rem) * 1);
43
- border-radius: calc(infinity * 1px);
44
-
45
- font-size: var(--text-2xs, 0.625rem);
46
- text-wrap: nowrap;
47
- text-overflow: ellipsis;
48
-
49
- cursor: pointer;
50
-
51
- transition: all 200ms ease-in-out;
52
-
53
- & svg {
54
- width: 100%;
55
- height: 100%;
56
-
57
- outline: none;
58
-
59
- transition: all 200ms ease-in-out;
60
- }
61
- }
62
-
63
- @utility icon-2xs {
64
- width: calc(var(--spacing, .25rem) * 5);
65
- height: calc(var(--spacing, .25rem) * 5);
66
- min-width: calc(var(--spacing, .25rem) * 5);
67
- min-height: calc(var(--spacing, .25rem) * 5);
68
-
69
- display: inline-flex;
70
- align-items: center;
71
- justify-content: center;
72
-
73
- padding: calc(var(--spacing, .25rem) * 1.5);
74
- border-radius: calc(infinity * 1px);
75
-
76
- font-size: var(--text-xs, 0.75rem);
77
- text-wrap: nowrap;
78
- text-overflow: ellipsis;
79
-
80
- cursor: pointer;
81
-
82
- & svg {
83
- width: 100%;
84
- height: 100%;
85
-
86
- outline: none;
87
-
88
- transition: all 200ms ease-in-out;
89
- }
90
- }
91
-
92
- @utility icon-xs {
93
- width: calc(var(--spacing, .25rem) * 6);
94
- height: calc(var(--spacing, .25rem) * 6);
95
- min-width: calc(var(--spacing, .25rem) * 6);
96
- min-height: calc(var(--spacing, .25rem) * 6);
97
-
98
- display: inline-flex;
99
- align-items: center;
100
- justify-content: center;
101
-
102
- padding: calc(var(--spacing, .25rem) * 1.75);
103
- border-radius: calc(infinity * 1px);
104
-
105
- font-size: var(--text-sm, 0.875rem);
11
+ font-size: calc(var(--spacing, 0.25rem) * 0.375 * --value(integer));
12
+ font-weight: 500;
106
13
  text-wrap: nowrap;
107
- text-overflow: ellipsis;
108
-
109
- cursor: pointer;
110
-
111
- transition: all 200ms ease-in-out;
112
14
 
113
- & svg {
114
- width: 100%;
115
- height: 100%;
116
-
117
- outline: none;
118
-
119
- transition: all 200ms ease-in-out;
120
- }
121
- }
122
-
123
- @utility icon-sm {
124
- width: calc(var(--spacing, .25rem) * 7);
125
- height: calc(var(--spacing, .25rem) * 7);
126
- min-width: calc(var(--spacing, .25rem) * 7);
127
- min-height: calc(var(--spacing, .25rem) * 7);
128
-
129
- display: inline-flex;
130
- align-items: center;
131
- justify-content: center;
132
-
133
- padding: calc(var(--spacing, .25rem) * 2);
15
+ padding: calc(var(--spacing, 0.25rem) * 0.275 * --value(integer));
134
16
  border-radius: calc(infinity * 1px);
135
-
136
- font-size: var(--text-sm, 0.875rem);
137
- text-wrap: nowrap;
138
- text-overflow: ellipsis;
139
-
140
- cursor: pointer;
17
+ outline: none;
141
18
 
142
19
  transition: all 200ms ease-in-out;
143
20
 
144
- & svg {
21
+ & :where(svg) {
145
22
  width: 100%;
146
23
  height: 100%;
147
-
148
- outline: none;
149
-
150
- transition: all 200ms ease-in-out;
151
- }
152
- }
153
-
154
- @utility icon-base {
155
- width: calc(var(--spacing, .25rem) * 8);
156
- height: calc(var(--spacing, .25rem) * 8);
157
- min-width: calc(var(--spacing, .25rem) * 8);
158
- min-height: calc(var(--spacing, .25rem) * 8);
159
-
160
- display: inline-flex;
161
- align-items: center;
162
- justify-content: center;
163
-
164
- padding: calc(var(--spacing, .25rem) * 2.25);
165
- border-radius: calc(infinity * 1px);
166
-
167
- font-size: var(--text-base, 1rem);
168
- text-wrap: nowrap;
169
- text-overflow: ellipsis;
170
-
171
- cursor: pointer;
172
-
173
- transition: all 200ms ease-in-out;
174
-
175
- & svg {
176
- width: 100%;
177
- height: 100%;
178
-
179
- outline: none;
180
-
181
- transition: all 200ms ease-in-out;
182
- }
183
- }
184
-
185
- @utility icon-md {
186
- width: calc(var(--spacing, .25rem) * 9);
187
- height: calc(var(--spacing, .25rem) * 9);
188
- min-width: calc(var(--spacing, .25rem) * 9);
189
- min-height: calc(var(--spacing, .25rem) * 9);
190
-
191
- display: inline-flex;
192
- align-items: center;
193
- justify-content: center;
194
-
195
- padding: calc(var(--spacing, .25rem) * 2.5);
196
- border-radius: calc(infinity * 1px);
197
-
198
- font-size: var(--text-base, 1rem);
199
- text-wrap: nowrap;
200
- text-overflow: ellipsis;
201
-
202
- cursor: pointer;
203
-
204
- transition: all 200ms ease-in-out;
205
-
206
- & svg {
207
- width: 100%;
208
- height: 100%;
209
-
210
- outline: none;
211
-
212
- transition: all 200ms ease-in-out;
213
- }
214
- }
215
-
216
- @utility icon-lg {
217
- width: calc(var(--spacing, .25rem) * 10);
218
- height: calc(var(--spacing, .25rem) * 10);
219
- min-width: calc(var(--spacing, .25rem) * 10);
220
- min-height: calc(var(--spacing, .25rem) * 10);
221
-
222
- display: inline-flex;
223
- align-items: center;
224
- justify-content: center;
225
-
226
- padding: calc(var(--spacing, .25rem) * 3);
227
- border-radius: calc(infinity * 1px);
228
-
229
- font-size: var(--text-lg, 1.125rem);
230
- text-wrap: nowrap;
231
- text-overflow: ellipsis;
232
-
233
- cursor: pointer;
234
-
235
- transition: all 200ms ease-in-out;
236
-
237
- & svg {
238
- width: 100%;
239
- height: 100%;
240
-
241
- outline: none;
242
-
243
- transition: all 200ms ease-in-out;
244
- }
245
- }
246
-
247
- @utility icon-xl {
248
- width: calc(var(--spacing, .25rem) * 12);
249
- height: calc(var(--spacing, .25rem) * 12);
250
- min-width: calc(var(--spacing, .25rem) * 12);
251
- min-height: calc(var(--spacing, .25rem) * 12);
252
-
253
- display: inline-flex;
254
- align-items: center;
255
- justify-content: center;
256
-
257
- padding: calc(var(--spacing, .25rem) * 3.5);
258
- border-radius: calc(infinity * 1px);
259
-
260
- font-size: var(--text-lg, 1.125rem);
261
- text-wrap: nowrap;
262
- text-overflow: ellipsis;
263
-
264
- cursor: pointer;
265
-
266
- transition: all 200ms ease-in-out;
267
-
268
- & svg {
269
- width: 100%;
270
- height: 100%;
271
-
272
- outline: none;
273
-
274
- transition: all 200ms ease-in-out;
275
- }
276
- }
277
-
278
- @utility icon-2xl {
279
- width: calc(var(--spacing, .25rem) * 14);
280
- height: calc(var(--spacing, .25rem) * 14);
281
- min-width: calc(var(--spacing, .25rem) * 14);
282
- min-height: calc(var(--spacing, .25rem) * 14);
283
-
284
- display: inline-flex;
285
- align-items: center;
286
- justify-content: center;
287
-
288
- padding: calc(var(--spacing, .25rem) * 4);
289
- border-radius: calc(infinity * 1px);
290
-
291
- font-size: var(--text-xl, 1.25rem);
292
- text-wrap: nowrap;
293
- text-overflow: ellipsis;
294
-
295
- cursor: pointer;
296
-
297
- transition: all 200ms ease-in-out;
298
-
299
- & svg {
300
- width: 100%;
301
- height: 100%;
302
-
303
- outline: none;
24
+ min-width: 100%;
25
+ min-height: 100%;
304
26
 
305
27
  transition: all 200ms ease-in-out;
306
28
  }
@@ -1,86 +1,28 @@
1
- @utility input-2xs {
2
- width: 100%;
3
- height: calc(var(--spacing, 0.25rem) * 5);
1
+ @utility input-* {
2
+ height: calc(var(--spacing, 0.25rem) * --value(integer));
4
3
 
5
- display: block;
6
-
7
- font-size: var(--text-3xs, 0.5rem);
8
-
9
- padding-left: calc(var(--spacing, 0.25rem) * 2.5);
10
- padding-right: calc(var(--spacing, 0.25rem) * 2.5);
11
- border-radius: calc(infinity * 1px);
12
- outline: none;
13
- }
14
-
15
- @utility input-xs {
16
- width: 100%;
17
- height: calc(var(--spacing, 0.25rem) * 6);
18
-
19
- display: block;
20
-
21
- font-size: var(--text-3xs, 0.5rem);
22
-
23
- padding-left: calc(var(--spacing, 0.25rem) * 2.75);
24
- padding-right: calc(var(--spacing, 0.25rem) * 2.75);
25
- border-radius: calc(infinity * 1px);
26
- outline: none;
27
- }
28
-
29
-
30
- @utility input-sm {
31
- width: 100%;
32
- height: calc(var(--spacing, 0.25rem) * 7);
33
-
34
- display: block;
35
-
36
- font-size: var(--text-2xs, 0.625rem);
37
-
38
- padding-left: calc(var(--spacing, 0.25rem) * 3);
39
- padding-right: calc(var(--spacing, 0.25rem) * 3);
40
- border-radius: calc(infinity * 1px);
41
- outline: none;
42
- }
43
-
44
- @utility input-base {
45
- width: 100%;
46
- height: calc(var(--spacing, 0.25rem) * 8);
47
-
48
- display: block;
49
-
50
- font-size: var(--text-base, 1rem);
51
-
52
- padding-left: calc(var(--spacing, 0.25rem) * 3.5);
53
- padding-right: calc(var(--spacing, 0.25rem) * 3.5);
54
- border-radius: calc(infinity * 1px);
55
- outline: none;
56
- }
57
-
58
- @utility input-md {
59
- width: 100%;
60
- height: calc(var(--spacing, 0.25rem) * 9);
61
-
62
- display: block;
4
+ display: flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ gap: calc(var(--spacing, 0.25rem) * 0.25 * --value(integer));
63
8
 
64
9
  font-size: var(--text-base, 1rem);
10
+ font-weight: 500;
11
+ text-wrap: nowrap;
65
12
 
66
- padding-left: calc(var(--spacing, 0.25rem) * 4);
67
- padding-right: calc(var(--spacing, 0.25rem) * 4);
13
+ padding-left: calc(var(--spacing, 0.25rem) * 0.5 * --value(integer));
14
+ padding-right: calc(var(--spacing, 0.25rem) * 0.5 * --value(integer));
68
15
  border-radius: calc(infinity * 1px);
69
16
  outline: none;
70
- }
71
17
 
72
- @utility input-lg {
73
- width: 100%;
74
- height: calc(var(--spacing, 0.25rem) * 10);
18
+ transition: all 200ms ease-in-out;
75
19
 
76
- display: block;
77
-
78
- font-size: var(--text-base, 1rem);
79
- font-weight: 500;
80
- text-wrap: nowrap;
20
+ & :where(svg) {
21
+ width: calc(var(--spacing, 0.25rem) * 0.5 * --value(integer));
22
+ height: calc(var(--spacing, 0.25rem) * 0.5 * --value(integer));
23
+ min-width: calc(var(--spacing, 0.25rem) * 0.5 * --value(integer));
24
+ min-height: calc(var(--spacing, 0.25rem) * 0.5 * --value(integer));
81
25
 
82
- padding-left: calc(var(--spacing, 0.25rem) * 4);
83
- padding-right: calc(var(--spacing, 0.25rem) * 4);
84
- border-radius: calc(infinity * 1px);
85
- outline: none;
26
+ transition: all 200ms ease-in-out;
27
+ }
86
28
  }
@@ -4,7 +4,5 @@
4
4
  color: white;
5
5
 
6
6
  border: none;
7
- box-shadow:
8
- inset 3px 3px 7px -1px color-mix(in oklab, --value(--color-*, [color]) 90%, white),
9
- inset -6px -6px 14px -4px color-mix(in oklab, --value(--color-*, [color]) 90%, white);
7
+ box-shadow: transparent;
10
8
  }
@@ -4,8 +4,6 @@
4
4
  color: --value(--color-*, [color]);
5
5
 
6
6
  border: none;
7
- /* Два inset: акцент у верхнего левого и нижнего правого угла; по центру и по другой диагонали слабее за счёт размытия и отсутствия перекрытия */
8
- /* Два inset: акцент у верхнего левого и нижнего правого угла; по центру и по другой диагонали слабее за счёт размытия и отсутствия перекрытия */
9
7
  box-shadow:
10
8
  inset 6px 6px 14px -4px color-mix(in oklab, --value(--color-*, [color]) 28%, transparent),
11
9
  inset -6px -6px 14px -4px color-mix(in oklab, --value(--color-*, [color]) 28%, transparent);
@@ -3,4 +3,5 @@
3
3
  color: --value(--color-*, [color]);
4
4
 
5
5
  border: 1px solid --value(--color-*, [color]);
6
+ box-shadow: transparent;
6
7
  }
@@ -1,4 +1,3 @@
1
1
  @import './fill/style.css';
2
2
  @import './glass/style.css';
3
- @import './outline/style.css';
4
- @import './transparent/style.css';
3
+ @import './outline/style.css';
@@ -1,5 +0,0 @@
1
- @utility action-transparent-* {
2
- background-color: transparent;
3
-
4
- color: --value(--color-*, [color]);
5
- }