@lazar-ui/kit 0.1.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 (100) hide show
  1. package/README.md +182 -0
  2. package/dist/Overlay-RmiBtqDR.mjs +1011 -0
  3. package/dist/accordion.css +1 -0
  4. package/dist/accordion.d.ts +53 -0
  5. package/dist/accordion.js +48 -0
  6. package/dist/alert.css +1 -0
  7. package/dist/alert.d.ts +33 -0
  8. package/dist/alert.js +20 -0
  9. package/dist/avatar.css +1 -0
  10. package/dist/avatar.d.ts +34 -0
  11. package/dist/avatar.js +41 -0
  12. package/dist/badge.css +1 -0
  13. package/dist/badge.d.ts +33 -0
  14. package/dist/badge.js +23 -0
  15. package/dist/breadcrumbs.css +1 -0
  16. package/dist/breadcrumbs.d.ts +80 -0
  17. package/dist/breadcrumbs.js +63 -0
  18. package/dist/button.css +1 -0
  19. package/dist/button.d.ts +66 -0
  20. package/dist/button.js +46 -0
  21. package/dist/camelCase-PtIYufW8.mjs +528 -0
  22. package/dist/card.css +1 -0
  23. package/dist/card.d.ts +42 -0
  24. package/dist/card.js +24 -0
  25. package/dist/checkbox.css +1 -0
  26. package/dist/checkbox.d.ts +41 -0
  27. package/dist/checkbox.js +42 -0
  28. package/dist/clsx-OuTLNxxd.mjs +16 -0
  29. package/dist/config-provider.d.ts +78 -0
  30. package/dist/config-provider.js +14 -0
  31. package/dist/css/palettes/indigo.css +104 -0
  32. package/dist/css/palettes/monochrome.css +104 -0
  33. package/dist/css/semantic.css +113 -0
  34. package/dist/dialog.css +1 -0
  35. package/dist/dialog.d.ts +91 -0
  36. package/dist/dialog.js +75 -0
  37. package/dist/drawer.css +1 -0
  38. package/dist/drawer.d.ts +128 -0
  39. package/dist/drawer.js +106 -0
  40. package/dist/empty-state.css +1 -0
  41. package/dist/empty-state.d.ts +33 -0
  42. package/dist/empty-state.js +52 -0
  43. package/dist/error-boundary.css +1 -0
  44. package/dist/error-boundary.d.ts +55 -0
  45. package/dist/error-boundary.js +37 -0
  46. package/dist/flex.css +1 -0
  47. package/dist/flex.d.ts +68 -0
  48. package/dist/flex.js +73 -0
  49. package/dist/form-field.css +1 -0
  50. package/dist/form-field.d.ts +27 -0
  51. package/dist/form-field.js +22 -0
  52. package/dist/getComponentSlots-DwAYUFNk.mjs +16 -0
  53. package/dist/getVariantClassName-D7Nhpuec.mjs +8 -0
  54. package/dist/input.css +1 -0
  55. package/dist/input.d.ts +39 -0
  56. package/dist/input.js +146 -0
  57. package/dist/isValidReactNode-CmYwTWCE.mjs +18 -0
  58. package/dist/menu.css +1 -0
  59. package/dist/menu.d.ts +94 -0
  60. package/dist/menu.js +135 -0
  61. package/dist/pagination.css +1 -0
  62. package/dist/pagination.d.ts +40 -0
  63. package/dist/pagination.js +74 -0
  64. package/dist/popover.css +1 -0
  65. package/dist/popover.d.ts +54 -0
  66. package/dist/popover.js +65 -0
  67. package/dist/select.css +1 -0
  68. package/dist/select.d.ts +64 -0
  69. package/dist/select.js +170 -0
  70. package/dist/separator.css +1 -0
  71. package/dist/separator.d.ts +25 -0
  72. package/dist/separator.js +24 -0
  73. package/dist/skeleton.css +1 -0
  74. package/dist/skeleton.d.ts +38 -0
  75. package/dist/skeleton.js +27 -0
  76. package/dist/spinner.css +1 -0
  77. package/dist/spinner.d.ts +31 -0
  78. package/dist/spinner.js +29 -0
  79. package/dist/switch.css +1 -0
  80. package/dist/switch.d.ts +44 -0
  81. package/dist/switch.js +37 -0
  82. package/dist/table.css +1 -0
  83. package/dist/table.d.ts +60 -0
  84. package/dist/table.js +40 -0
  85. package/dist/tabs.css +1 -0
  86. package/dist/tabs.d.ts +69 -0
  87. package/dist/tabs.js +79 -0
  88. package/dist/textarea.css +1 -0
  89. package/dist/textarea.d.ts +53 -0
  90. package/dist/textarea.js +46 -0
  91. package/dist/tooltip.css +1 -0
  92. package/dist/tooltip.d.ts +38 -0
  93. package/dist/tooltip.js +99 -0
  94. package/dist/useLocale-D2Z0JH0l.mjs +70 -0
  95. package/dist/useModalOverlay-D5Bs9FCB.mjs +486 -0
  96. package/dist/useOverlayPosition-DVu1Qziq.mjs +451 -0
  97. package/dist/useOverlayTriggerState-BIo1Jcba.mjs +221 -0
  98. package/dist/utils.d.ts +58 -0
  99. package/dist/utils.js +18 -0
  100. package/package.json +76 -0
package/dist/table.js ADDED
@@ -0,0 +1,40 @@
1
+ import { jsx as a } from "react/jsx-runtime";
2
+ import { c as C } from "./clsx-OuTLNxxd.mjs";
3
+ import s from "react";
4
+ import { g as f } from "./getVariantClassName-D7Nhpuec.mjs";
5
+ import { i } from "./isValidReactNode-CmYwTWCE.mjs";
6
+ import "./camelCase-PtIYufW8.mjs";
7
+ import './table.css';var n = /* @__PURE__ */ ((t) => (t.CELL = "Table.Cell", t.ROW = "Table.Row", t))(n || {});
8
+ const u = "_root_hpkeq_8", L = "_header_hpkeq_17", N = "_alignLeft_hpkeq_21", R = "_alignRight_hpkeq_24", b = "_alignCenter_hpkeq_27", l = {
9
+ root: u,
10
+ header: L,
11
+ alignLeft: N,
12
+ alignRight: R,
13
+ alignCenter: b
14
+ }, c = (t) => {
15
+ const { align: r = "left", as: o = "td", children: e, title: _, width: p } = t, g = C(l.root, f("align", r, l), {
16
+ [l.header]: o === "th"
17
+ });
18
+ return /* @__PURE__ */ a(o, { className: g, title: _, width: p, children: e });
19
+ };
20
+ c.displayName = n.CELL;
21
+ const T = "_root_1xa2n_5", k = {
22
+ root: T
23
+ }, d = (t) => {
24
+ const { children: r } = t, o = (e) => i(n.CELL, e) ? e : null;
25
+ return /* @__PURE__ */ a("tr", { className: k.root, children: s.Children.map(r, o) });
26
+ };
27
+ d.displayName = n.ROW;
28
+ const y = "Table", $ = "_root_op0kb_5", q = {
29
+ root: $
30
+ }, h = (t) => {
31
+ const { children: r } = t, o = (e) => i(n.ROW, e) ? e : null;
32
+ return /* @__PURE__ */ a("table", { className: q.root, children: /* @__PURE__ */ a("tbody", { children: s.Children.map(r, o) }) });
33
+ };
34
+ h.displayName = y;
35
+ const m = h;
36
+ m.Cell = c;
37
+ m.Row = d;
38
+ export {
39
+ m as Table
40
+ };
package/dist/tabs.css ADDED
@@ -0,0 +1 @@
1
+ ._root_9eoad_1{position:relative;-webkit-user-select:none;user-select:none}._root_9eoad_1._disabled_9eoad_5{color:var(--tab-text-disabled);cursor:not-allowed}._root_9eoad_1._variantDefault_9eoad_9{border-bottom:2px solid transparent;color:var(--tab-text);font-size:var(--font-size-md);font-weight:var(--font-weight-medium);line-height:var(--line-height-md);padding:var(--space-3) var(--space-5);transition:border-color .3s,color .3s;white-space:nowrap}._root_9eoad_1._variantDefault_9eoad_9:focus{border-color:var(--tab-text-active)}._root_9eoad_1._variantDefault_9eoad_9._active_9eoad_22{border-color:var(--tab-border-active);color:var(--tab-text-active)}._root_9eoad_1._variantButtons_9eoad_26{align-items:center;background:var(--tab-bg-buttons);border-radius:var(--tab-radius-buttons);color:var(--tab-text-buttons);display:flex;flex:1;flex-direction:column;font-size:var(--tab-font-buttons);font-weight:var(--font-weight-medium);gap:var(--tab-gap-buttons);height:64px;justify-content:center;line-height:var(--line-height-md);max-width:320px;padding:var(--tab-padding-y-buttons) var(--tab-padding-x-buttons)}._root_9eoad_1._variantButtons_9eoad_26:focus{box-shadow:0 0 0 2px #98a2b324}._root_9eoad_1._variantButtons_9eoad_26._active_9eoad_22{background:var(--tab-bg-buttons-active);color:var(--tab-text-buttons-active)}@media only screen and (max-width:1023px){._root_9eoad_1._variantButtons_9eoad_26{gap:var(--tab-gap-buttons);height:40px;justify-content:center;padding:var(--space-2) var(--space-5);white-space:nowrap}}:root{--tabs-padding: var(--space-8);--tabs-panel-padding-top: var(--space-10);--tab-text: var(--color-text-secondary);--tab-text-active: var(--color-text-primary);--tab-text-disabled: var(--color-text-disabled);--tab-border-active: var(--palette-gray-900);--tab-bg-buttons: var(--color-background-tertiary);--tab-bg-buttons-active: var(--color-background-brand-secondary);--tab-text-buttons: var(--color-text-quaternary);--tab-text-buttons-active: var(--color-text-primary);--tab-radius-buttons: var(--radius-1);--tab-font-buttons: var(--font-size-md);--tab-gap-buttons: var(--space-3);--tab-padding-y-buttons: var(--space-2);--tab-padding-x-buttons: var(--space-3);--tab-list-gap: var(--space-4)}._root_1piy6_20{width:auto}._root_1piy6_20._variantDefault_1piy6_23 ._list_1piy6_23:before{border-bottom:1px solid var(--color-border-primary);bottom:0;content:"";left:0;position:absolute;right:0;z-index:0}._root_1piy6_20._variantButtons_1piy6_32 ._list_1piy6_23{align-items:center;gap:var(--tab-list-gap);justify-content:flex-start;padding:var(--tabs-padding)}._list_1piy6_23{display:flex;overflow-x:auto;position:relative}._panel_1piy6_45{padding-top:var(--tabs-panel-padding-top);position:relative}@media only screen and (max-width:1023px){._root_1piy6_20._variantButtons_1piy6_32{justify-content:start}}
package/dist/tabs.d.ts ADDED
@@ -0,0 +1,69 @@
1
+ import { default as default_2 } from 'react';
2
+
3
+ /**
4
+ * Enumerates the variants of a Tabs component.
5
+ */
6
+ export declare enum ETabsVariant {
7
+ /** Tabs are displayed as toggle buttons. */
8
+ BUTTONS = "buttons",
9
+ /** Default display of Tabs. */
10
+ DEFAULT = "default"
11
+ }
12
+
13
+ export declare interface ITabProps {
14
+ /** Index at list of tabs. */
15
+ index?: number;
16
+ /** Disabled tab flag. */
17
+ disabled?: boolean;
18
+ /** Label. */
19
+ label: string;
20
+ /** HTML tabindex attribute. */
21
+ tabIndex?: number;
22
+ }
23
+
24
+ export declare interface ITabsProps extends default_2.PropsWithChildren {
25
+ /** Active tab index by default. */
26
+ defaultActiveIndex?: number;
27
+ /** On active tab change handler. */
28
+ onChange?: (activeIndex: number) => void;
29
+ /** Tabs variant. */
30
+ variant?: ETabsVariant;
31
+ }
32
+
33
+ export declare const Tabs: TTabsCompoundComponent;
34
+
35
+ /**
36
+ * Tabs container. Manages active tab state and renders tab list + panel content.
37
+ *
38
+ * Uses compound component pattern via `<Tabs.Tab>` and `<Tabs.Panel>`.
39
+ * Uncontrolled — tracks active index internally. Pass `onChange` to react to changes.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * <Tabs defaultActiveIndex={0} onChange={(i) => console.log(i)}>
44
+ * <Tabs.Tab label="Profile">
45
+ * <p>Profile content</p>
46
+ * </Tabs.Tab>
47
+ * <Tabs.Tab label="Settings">
48
+ * <p>Settings content</p>
49
+ * </Tabs.Tab>
50
+ * </Tabs>
51
+ * ```
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * // Buttons variant
56
+ * <Tabs variant="buttons">
57
+ * <Tabs.Tab label="Day" />
58
+ * <Tabs.Tab label="Week" />
59
+ * <Tabs.Tab label="Month" />
60
+ * </Tabs>
61
+ * ```
62
+ */
63
+ declare const Tabs_2: default_2.FC<ITabsProps>;
64
+
65
+ declare type TTabsCompoundComponent = typeof Tabs_2 & {
66
+ Tab: default_2.FC<ITabProps & default_2.PropsWithChildren>;
67
+ };
68
+
69
+ export { }
package/dist/tabs.js ADDED
@@ -0,0 +1,79 @@
1
+ import { jsx as l, jsxs as y } from "react/jsx-runtime";
2
+ import { c as C } from "./clsx-OuTLNxxd.mjs";
3
+ import m, { createContext as D, useContext as E, useState as L, useId as U } from "react";
4
+ import { g as I } from "./getVariantClassName-D7Nhpuec.mjs";
5
+ import { i as k } from "./isValidReactNode-CmYwTWCE.mjs";
6
+ import './tabs.css';const x = D(null), A = () => {
7
+ const t = E(x);
8
+ if (!t)
9
+ throw new Error("useTabsContext should be used inside Tabs component");
10
+ return t;
11
+ }, f = (t, e, s) => `${t}-${s}-${e}`, S = (t) => {
12
+ const { defaultActiveIndex: e = 0, children: s, onTabChange: n, variant: o } = t, [i, d] = L(e), r = U(), u = (a) => {
13
+ a !== i && (d(a), n && n(a));
14
+ }, c = (a) => f(r, a, "panel"), v = (a) => f(r, a, "tab");
15
+ return /* @__PURE__ */ l(x.Provider, { value: { activeIndex: i, baseId: r, getPanelId: c, getTabId: v, setActiveTab: u, variant: o }, children: s });
16
+ }, h = "Tabs";
17
+ var p = ((t) => (t.PANEL = `${h}.Panel`, t.TAB = `${h}.Tab`, t))(p || {}), N = /* @__PURE__ */ ((t) => (t.BUTTONS = "buttons", t.DEFAULT = "default", t))(N || {});
18
+ const w = "_root_9eoad_1", O = "_disabled_9eoad_5", j = "_variantDefault_9eoad_9", F = "_active_9eoad_22", M = "_variantButtons_9eoad_26", _ = {
19
+ root: w,
20
+ disabled: O,
21
+ variantDefault: j,
22
+ active: F,
23
+ variantButtons: M
24
+ }, P = (t) => {
25
+ const { disabled: e = !1, label: s, index: n = 0, tabIndex: o = 0 } = t, { activeIndex: i, getPanelId: d, getTabId: r, setActiveTab: u, variant: c } = A(), v = d(n), a = r(n), T = i === n, B = C(_.root, I("variant", c, _), {
26
+ [_.active]: T,
27
+ [_.disabled]: e
28
+ });
29
+ return /* @__PURE__ */ l(
30
+ "button",
31
+ {
32
+ "aria-selected": T,
33
+ "aria-controls": v,
34
+ "aria-disabled": e,
35
+ className: B,
36
+ disabled: e,
37
+ id: a,
38
+ onClick: () => {
39
+ e || u(n);
40
+ },
41
+ role: "tab",
42
+ tabIndex: e ? -1 : o,
43
+ children: s
44
+ }
45
+ );
46
+ };
47
+ P.displayName = `${p.TAB}`;
48
+ const $ = (t) => {
49
+ const { panels: e } = t, { activeIndex: s, getPanelId: n } = A(), o = n(s);
50
+ return /* @__PURE__ */ l("div", { id: o, children: e[s] });
51
+ };
52
+ $.displayName = `${p.PANEL}`;
53
+ const R = "_root_1piy6_20", V = "_variantDefault_1piy6_23", Y = "_list_1piy6_23", q = "_variantButtons_1piy6_32", z = "_panel_1piy6_45", b = {
54
+ root: R,
55
+ variantDefault: V,
56
+ list: Y,
57
+ variantButtons: q,
58
+ panel: z
59
+ }, G = [p.TAB], g = (t) => {
60
+ const { defaultActiveIndex: e = 0, children: s, onChange: n, variant: o = N.DEFAULT } = t, i = [], d = C(b.root, I("variant", o, b));
61
+ let r = !1;
62
+ const u = (c, v) => {
63
+ if (!k(G, c))
64
+ return null;
65
+ const { children: a = null } = c.props;
66
+ return i.push(a), a && (r = !0), m.cloneElement(c, { index: v });
67
+ };
68
+ return /* @__PURE__ */ l(S, { defaultActiveIndex: e, onTabChange: n, variant: o, children: /* @__PURE__ */ y("div", { className: d, children: [
69
+ /* @__PURE__ */ l("div", { className: b.list, children: m.Children.map(s, u) }),
70
+ r && /* @__PURE__ */ l("div", { className: b.panel, children: /* @__PURE__ */ l($, { panels: i }) })
71
+ ] }) });
72
+ };
73
+ g.displayName = "Tabs";
74
+ const H = g;
75
+ H.Tab = P;
76
+ export {
77
+ N as ETabsVariant,
78
+ H as Tabs
79
+ };
@@ -0,0 +1 @@
1
+ :root{--textarea-bg: var(--color-background-primary);--textarea-border: var(--color-border-primary);--textarea-border-hover: var(--color-text-tertiary);--textarea-border-focus: var(--color-border-focus);--textarea-border-error: var(--color-border-focus-error);--textarea-text: var(--color-text-primary);--textarea-text-disabled: var(--color-text-disabled);--textarea-placeholder: var(--color-text-tertiary);--textarea-radius: var(--radius-1);--textarea-shadow: var(--shadow-xs)}._root_1ntao_14{background:var(--textarea-bg);border:1px solid var(--textarea-border);border-radius:var(--textarea-radius);box-shadow:var(--textarea-shadow);color:var(--textarea-text);display:block;font-family:inherit;min-height:80px;outline:none;position:relative;transition:border-color .15s,box-shadow .15s;width:100%}._root_1ntao_14::placeholder{color:var(--textarea-placeholder)}._root_1ntao_14:hover{border-color:var(--textarea-border-hover)}._root_1ntao_14:focus{border-color:var(--textarea-border-focus);box-shadow:0 0 0 1px var(--textarea-border-focus)}._root_1ntao_14:disabled{background:var(--color-background-disabled);border-color:var(--color-border-disabled);box-shadow:none;color:var(--textarea-text-disabled);cursor:not-allowed}._root_1ntao_14:disabled::placeholder{color:var(--textarea-text-disabled)}._root_1ntao_14:disabled:hover{border-color:var(--color-border-disabled)}._root_1ntao_14:disabled:focus{border-color:var(--color-border-disabled);box-shadow:none}._root_1ntao_14._invalid_1ntao_55{border-color:var(--textarea-border-error)}._root_1ntao_14._invalid_1ntao_55:focus{box-shadow:0 0 0 1px var(--textarea-border-error)}._sizeSm_1ntao_63{font-size:var(--font-size-sm);line-height:var(--line-height-sm);padding:var(--space-1) var(--space-2)}._sizeMd_1ntao_69{font-size:var(--font-size-md);line-height:var(--line-height-md);padding:var(--space-2) var(--space-3)}._sizeLg_1ntao_75{font-size:var(--font-size-lg);line-height:var(--line-height-lg);padding:var(--space-3) var(--space-4)}._resizeNone_1ntao_82{resize:none}._resizeVertical_1ntao_86{resize:vertical}._resizeBoth_1ntao_90{resize:both}
@@ -0,0 +1,53 @@
1
+ import { default as default_2 } from 'react';
2
+
3
+ declare enum ETextareaResize {
4
+ NONE = "none",
5
+ VERTICAL = "vertical",
6
+ BOTH = "both"
7
+ }
8
+
9
+ declare enum ETextareaSize {
10
+ SM = "sm",
11
+ MD = "md",
12
+ LG = "lg"
13
+ }
14
+
15
+ export declare interface ITextareaProps extends TNativeTextareaAttributes {
16
+ /** Size variant. Default: 'md'. */
17
+ size?: TTextareaSize;
18
+ /** Resize behavior. Default: 'vertical'. */
19
+ resize?: TTextareaResize;
20
+ /** When true, the textarea is in an invalid/error state. */
21
+ invalid?: boolean;
22
+ /** Callback invoked when the value changes. */
23
+ onChange?: (value: string) => void;
24
+ /** Callback invoked when the textarea loses focus. */
25
+ onBlur?: (e: default_2.FocusEvent<HTMLTextAreaElement>) => void;
26
+ /** Callback invoked when the textarea gains focus. */
27
+ onFocus?: (e: default_2.FocusEvent<HTMLTextAreaElement>) => void;
28
+ }
29
+
30
+ /**
31
+ * Textarea component. Renders a native `<textarea>` with size, resize, and state variants.
32
+ *
33
+ * Visually matches Input component styling using the same CSS tokens.
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * <Textarea placeholder="Enter text" />
38
+ * <Textarea size="lg" rows={6} />
39
+ * <Textarea invalid placeholder="Error" />
40
+ * <Textarea resize="none" />
41
+ * <Textarea disabled value="Read-only" />
42
+ * <Textarea maxLength={200} />
43
+ * ```
44
+ */
45
+ export declare const Textarea: default_2.FC<ITextareaProps>;
46
+
47
+ declare type TNativeTextareaAttributes = Omit<default_2.TextareaHTMLAttributes<HTMLTextAreaElement>, 'className' | 'size' | 'onChange' | 'onBlur' | 'onFocus'>;
48
+
49
+ export declare type TTextareaResize = `${ETextareaResize.NONE | ETextareaResize.VERTICAL | ETextareaResize.BOTH}`;
50
+
51
+ export declare type TTextareaSize = `${ETextareaSize.SM | ETextareaSize.MD | ETextareaSize.LG}`;
52
+
53
+ export { }
@@ -0,0 +1,46 @@
1
+ import { jsx as d } from "react/jsx-runtime";
2
+ import { c as g } from "./clsx-OuTLNxxd.mjs";
3
+ import { g as s } from "./getVariantClassName-D7Nhpuec.mjs";
4
+ import './textarea.css';const h = "Textarea", N = "_root_1ntao_14", v = "_invalid_1ntao_55", x = "_sizeSm_1ntao_63", C = "_sizeMd_1ntao_69", p = "_sizeLg_1ntao_75", f = "_resizeNone_1ntao_82", u = "_resizeVertical_1ntao_86", B = "_resizeBoth_1ntao_90", e = {
5
+ root: N,
6
+ invalid: v,
7
+ sizeSm: x,
8
+ sizeMd: C,
9
+ sizeLg: p,
10
+ resizeNone: f,
11
+ resizeVertical: u,
12
+ resizeBoth: B
13
+ }, L = (o) => {
14
+ const {
15
+ invalid: t = !1,
16
+ resize: a = "vertical",
17
+ rows: n = 3,
18
+ size: i = "md",
19
+ onChange: r,
20
+ onBlur: _,
21
+ onFocus: c,
22
+ ...z
23
+ } = o, l = g(
24
+ e.root,
25
+ s("size", i, e),
26
+ s("resize", a, e),
27
+ t && e.invalid
28
+ );
29
+ return /* @__PURE__ */ d(
30
+ "textarea",
31
+ {
32
+ ...z,
33
+ className: l,
34
+ onChange: (m) => {
35
+ r?.(m.target.value);
36
+ },
37
+ onBlur: _,
38
+ onFocus: c,
39
+ rows: n
40
+ }
41
+ );
42
+ };
43
+ L.displayName = h;
44
+ export {
45
+ L as Textarea
46
+ };
@@ -0,0 +1 @@
1
+ :root{--tooltip-bg: var(--palette-gray-900);--tooltip-text: var(--palette-white);--tooltip-radius: var(--radius-1);--tooltip-shadow: var(--shadow-sm);--tooltip-padding: var(--space-1) var(--space-2);--tooltip-font-size: var(--font-size-xs);--tooltip-z-index: 1100}._content_w5bk0_11{background:var(--tooltip-bg);border-radius:var(--tooltip-radius);box-shadow:var(--tooltip-shadow);color:var(--tooltip-text);font-size:var(--tooltip-font-size);outline:none;padding:var(--tooltip-padding);position:relative;z-index:var(--tooltip-z-index)}._content_w5bk0_11[data-placement*=bottom],._content_w5bk0_11[data-placement*=top],._content_w5bk0_11[data-placement*=left],._content_w5bk0_11[data-placement*=right]{animation:_tooltip-enter_w5bk0_1 .15s ease-out}._arrow_w5bk0_26{height:0;position:absolute;width:0}._content_w5bk0_11[data-placement*=bottom] ._arrow_w5bk0_26{border-bottom:6px solid var(--tooltip-bg);border-left:6px solid transparent;border-right:6px solid transparent;margin-left:-6px;top:-6px}._content_w5bk0_11[data-placement*=top] ._arrow_w5bk0_26{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid var(--tooltip-bg);bottom:-6px;margin-left:-6px}._content_w5bk0_11[data-placement*=left] ._arrow_w5bk0_26{border-bottom:6px solid transparent;border-left:6px solid var(--tooltip-bg);border-top:6px solid transparent;margin-top:-6px;right:-6px}._content_w5bk0_11[data-placement*=right] ._arrow_w5bk0_26{border-bottom:6px solid transparent;border-right:6px solid var(--tooltip-bg);border-top:6px solid transparent;left:-6px;margin-top:-6px}@keyframes _tooltip-enter_w5bk0_1{0%{opacity:0}to{opacity:1}}
@@ -0,0 +1,38 @@
1
+ import { default as default_2 } from 'react';
2
+ import { Placement } from 'react-aria';
3
+
4
+ export declare interface ITooltipProps extends default_2.PropsWithChildren {
5
+ /** Placement relative to trigger. Default: `'top'`. */
6
+ placement?: Placement;
7
+ /** Show delay in ms. Default: `500`. */
8
+ showDelay?: number;
9
+ /** Hide delay in ms. Default: `150`. */
10
+ hideDelay?: number;
11
+ }
12
+
13
+ export declare const Tooltip: TTooltipCompoundComponent;
14
+
15
+ /**
16
+ * Tooltip container. Manages open/close state with show/hide delays and provides context
17
+ * to `Tooltip.Trigger` and `Tooltip.Content`.
18
+ *
19
+ * Opens on hover (with 500ms delay) and on focus (immediate). Closes on leave and blur.
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * <Tooltip placement="top">
24
+ * <Tooltip.Trigger>
25
+ * <Button>Hover me</Button>
26
+ * </Tooltip.Trigger>
27
+ * <Tooltip.Content>Tooltip text</Tooltip.Content>
28
+ * </Tooltip>
29
+ * ```
30
+ */
31
+ declare const Tooltip_2: default_2.FC<ITooltipProps>;
32
+
33
+ declare type TTooltipCompoundComponent = typeof Tooltip_2 & {
34
+ Content: default_2.FC<default_2.PropsWithChildren>;
35
+ Trigger: default_2.FC<default_2.PropsWithChildren>;
36
+ };
37
+
38
+ export { }
@@ -0,0 +1,99 @@
1
+ import { jsx as m, jsxs as O } from "react/jsx-runtime";
2
+ import { createContext as $, useContext as D, useRef as p, useId as L, useState as P, useCallback as i, useEffect as A } from "react";
3
+ import { r as F } from "./Overlay-RmiBtqDR.mjs";
4
+ import { $ as M } from "./useOverlayPosition-DVu1Qziq.mjs";
5
+ import './tooltip.css';const b = $(null), G = b.Provider, I = () => {
6
+ const e = D(b);
7
+ if (!e)
8
+ throw new Error("Sub-component must be used within a Tooltip");
9
+ return e;
10
+ }, T = "Tooltip", S = 500, k = 150, Y = 6;
11
+ var v = ((e) => (e.TRIGGER = `${T}.Trigger`, e.CONTENT = `${T}.Content`, e))(v || {});
12
+ const j = "_content_w5bk0_11", H = "_arrow_w5bk0_26", w = {
13
+ content: j,
14
+ arrow: H
15
+ }, E = (e) => {
16
+ const { children: l } = e, { cancelClose: a, close: r, contentId: s, isOpen: u, placement: d, triggerRef: n } = I(), o = p(null), {
17
+ arrowProps: f,
18
+ overlayProps: c,
19
+ placement: t
20
+ } = M({
21
+ offset: Y,
22
+ overlayRef: o,
23
+ placement: d,
24
+ shouldFlip: !0,
25
+ targetRef: n
26
+ });
27
+ return u ? /* @__PURE__ */ m(F, { children: /* @__PURE__ */ O(
28
+ "div",
29
+ {
30
+ className: w.content,
31
+ "data-placement": t,
32
+ id: s,
33
+ onMouseEnter: a,
34
+ onMouseLeave: r,
35
+ ref: o,
36
+ role: "tooltip",
37
+ ...c,
38
+ children: [
39
+ /* @__PURE__ */ m("div", { className: w.arrow, ...f }),
40
+ l
41
+ ]
42
+ }
43
+ ) }) : null;
44
+ };
45
+ E.displayName = v.CONTENT;
46
+ const g = (e) => {
47
+ const { children: l, placement: a = "top", showDelay: r = S, hideDelay: s = k } = e, u = p(null), d = L(), n = p(void 0), o = p(void 0), [f, c] = P(!1), t = i(() => {
48
+ n.current !== void 0 && (clearTimeout(n.current), n.current = void 0), o.current !== void 0 && (clearTimeout(o.current), o.current = void 0);
49
+ }, []);
50
+ A(() => () => {
51
+ t();
52
+ }, [t]);
53
+ const h = i(() => {
54
+ t(), n.current = window.setTimeout(() => {
55
+ c(!0);
56
+ }, r);
57
+ }, [t, r]), _ = i(() => {
58
+ t(), o.current = window.setTimeout(() => {
59
+ c(!1);
60
+ }, s);
61
+ }, [t, s]), x = i(() => {
62
+ o.current !== void 0 && (clearTimeout(o.current), o.current = void 0);
63
+ }, []), N = i(() => {
64
+ t(), c(!0);
65
+ }, [t]), y = i(() => {
66
+ t(), c(!1);
67
+ }, [t]);
68
+ return /* @__PURE__ */ m(
69
+ G,
70
+ {
71
+ value: { cancelClose: x, close: _, closeImmediate: y, contentId: d, isOpen: f, open: h, openImmediate: N, placement: a, triggerRef: u },
72
+ children: l
73
+ }
74
+ );
75
+ };
76
+ g.displayName = T;
77
+ const C = (e) => {
78
+ const { children: l } = e, { close: a, contentId: r, open: s, openImmediate: u, closeImmediate: d, triggerRef: n } = I();
79
+ return /* @__PURE__ */ m(
80
+ "span",
81
+ {
82
+ "aria-describedby": r,
83
+ onBlur: d,
84
+ onFocus: u,
85
+ onMouseEnter: s,
86
+ onMouseLeave: a,
87
+ ref: n,
88
+ tabIndex: 0,
89
+ children: l
90
+ }
91
+ );
92
+ };
93
+ C.displayName = v.TRIGGER;
94
+ const R = g;
95
+ R.Trigger = C;
96
+ R.Content = E;
97
+ export {
98
+ R as Tooltip
99
+ };
@@ -0,0 +1,70 @@
1
+ import { jsx as d } from "react/jsx-runtime";
2
+ import { createContext as l, useMemo as i, useEffect as u, useContext as f } from "react";
3
+ const c = l(null), r = {
4
+ dialog: {
5
+ close: "Close"
6
+ },
7
+ input: {
8
+ passwordHide: "Hide password",
9
+ passwordShow: "Show password"
10
+ },
11
+ pagination: {
12
+ next: "Next page",
13
+ page: "Page {page}",
14
+ pagination: "Pagination",
15
+ prev: "Previous page"
16
+ },
17
+ select: {
18
+ clear: "Clear",
19
+ noOptions: "No options",
20
+ placeholder: "Select..."
21
+ }
22
+ }, m = {
23
+ dialog: {
24
+ close: "Закрыть"
25
+ },
26
+ input: {
27
+ passwordHide: "Скрыть пароль",
28
+ passwordShow: "Показать пароль"
29
+ },
30
+ pagination: {
31
+ next: "Следующая страница",
32
+ page: "Страница {page}",
33
+ pagination: "Пагинация",
34
+ prev: "Предыдущая страница"
35
+ },
36
+ select: {
37
+ clear: "Очистить",
38
+ noOptions: "Нет вариантов",
39
+ placeholder: "Выберите..."
40
+ }
41
+ }, h = { en: r, ru: m }, x = (e) => i(() => {
42
+ if (!e)
43
+ return r;
44
+ if (typeof e == "string")
45
+ return h[e] ?? r;
46
+ const n = { ...r };
47
+ for (const o of Object.keys(e)) {
48
+ const t = e[o];
49
+ t && typeof t == "object" && !Array.isArray(t) && (n[o] = {
50
+ ...n[o],
51
+ ...t
52
+ });
53
+ }
54
+ return n;
55
+ }, [e]), C = (e) => {
56
+ const { children: n, theme: o = "light", locale: t, themeTarget: s } = e, a = x(t);
57
+ u(() => {
58
+ const g = s ?? document.documentElement;
59
+ g.dataset.theme = o;
60
+ }, [o, s]);
61
+ const p = i(() => ({ locale: a, theme: o }), [o, a]);
62
+ return /* @__PURE__ */ d(c.Provider, { value: p, children: n });
63
+ };
64
+ C.displayName = "ConfigProvider";
65
+ const y = () => f(c)?.locale ?? r;
66
+ export {
67
+ c as C,
68
+ C as a,
69
+ y as u
70
+ };