@kavagy/react 0.1.1

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 (112) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/THIRD_PARTY_NOTICES.md +30 -0
  3. package/dist/avatar/avatar.d.ts +189 -0
  4. package/dist/avatar/avatar.d.ts.map +1 -0
  5. package/dist/avatar/avatar.js +185 -0
  6. package/dist/avatar/avatar.js.map +1 -0
  7. package/dist/avatar/index.d.ts +2 -0
  8. package/dist/avatar/index.js +2 -0
  9. package/dist/badges/badges.d.ts +149 -0
  10. package/dist/badges/badges.d.ts.map +1 -0
  11. package/dist/badges/badges.js +269 -0
  12. package/dist/badges/badges.js.map +1 -0
  13. package/dist/badges/index.d.ts +2 -0
  14. package/dist/badges/index.js +2 -0
  15. package/dist/button/button.d.ts +208 -0
  16. package/dist/button/button.d.ts.map +1 -0
  17. package/dist/button/button.js +158 -0
  18. package/dist/button/button.js.map +1 -0
  19. package/dist/button/index.d.ts +2 -0
  20. package/dist/button/index.js +2 -0
  21. package/dist/button-utility/button-utility.d.ts +59 -0
  22. package/dist/button-utility/button-utility.d.ts.map +1 -0
  23. package/dist/button-utility/button-utility.js +78 -0
  24. package/dist/button-utility/button-utility.js.map +1 -0
  25. package/dist/button-utility/index.d.ts +2 -0
  26. package/dist/button-utility/index.js +2 -0
  27. package/dist/checkbox/checkbox.d.ts +23 -0
  28. package/dist/checkbox/checkbox.d.ts.map +1 -0
  29. package/dist/checkbox/checkbox.js +81 -0
  30. package/dist/checkbox/checkbox.js.map +1 -0
  31. package/dist/checkbox/index.d.ts +2 -0
  32. package/dist/checkbox/index.js +2 -0
  33. package/dist/dropdown/dropdown.d.ts +33 -0
  34. package/dist/dropdown/dropdown.d.ts.map +1 -0
  35. package/dist/dropdown/dropdown.js +128 -0
  36. package/dist/dropdown/dropdown.js.map +1 -0
  37. package/dist/dropdown/index.d.ts +2 -0
  38. package/dist/dropdown/index.js +2 -0
  39. package/dist/featured-icon/featured-icon.d.ts +141 -0
  40. package/dist/featured-icon/featured-icon.d.ts.map +1 -0
  41. package/dist/featured-icon/featured-icon.js +292 -0
  42. package/dist/featured-icon/featured-icon.js.map +1 -0
  43. package/dist/featured-icon/index.d.ts +2 -0
  44. package/dist/featured-icon/index.js +2 -0
  45. package/dist/input/index.d.ts +2 -0
  46. package/dist/input/index.js +2 -0
  47. package/dist/input/input.d.ts +42 -0
  48. package/dist/input/input.d.ts.map +1 -0
  49. package/dist/input/input.js +136 -0
  50. package/dist/input/input.js.map +1 -0
  51. package/dist/modal/index.d.ts +2 -0
  52. package/dist/modal/index.js +2 -0
  53. package/dist/modal/modal.d.ts +8 -0
  54. package/dist/modal/modal.d.ts.map +1 -0
  55. package/dist/modal/modal.js +35 -0
  56. package/dist/modal/modal.js.map +1 -0
  57. package/dist/radio-buttons/index.d.ts +2 -0
  58. package/dist/radio-buttons/index.js +2 -0
  59. package/dist/radio-buttons/radio-buttons.d.ts +30 -0
  60. package/dist/radio-buttons/radio-buttons.d.ts.map +1 -0
  61. package/dist/radio-buttons/radio-buttons.js +71 -0
  62. package/dist/radio-buttons/radio-buttons.js.map +1 -0
  63. package/dist/select/index.d.ts +2 -0
  64. package/dist/select/index.js +2 -0
  65. package/dist/select/select.d.ts +40 -0
  66. package/dist/select/select.d.ts.map +1 -0
  67. package/dist/select/select.js +198 -0
  68. package/dist/select/select.js.map +1 -0
  69. package/dist/styles.css +2843 -0
  70. package/dist/table/index.d.ts +2 -0
  71. package/dist/table/index.js +2 -0
  72. package/dist/table/table.d.ts +61 -0
  73. package/dist/table/table.d.ts.map +1 -0
  74. package/dist/table/table.js +208 -0
  75. package/dist/table/table.js.map +1 -0
  76. package/dist/tabs/index.d.ts +2 -0
  77. package/dist/tabs/index.js +2 -0
  78. package/dist/tabs/tabs.d.ts +62 -0
  79. package/dist/tabs/tabs.d.ts.map +1 -0
  80. package/dist/tabs/tabs.js +120 -0
  81. package/dist/tabs/tabs.js.map +1 -0
  82. package/dist/textarea/index.d.ts +2 -0
  83. package/dist/textarea/index.js +2 -0
  84. package/dist/textarea/textarea.d.ts +26 -0
  85. package/dist/textarea/textarea.d.ts.map +1 -0
  86. package/dist/textarea/textarea.js +74 -0
  87. package/dist/textarea/textarea.js.map +1 -0
  88. package/dist/toggle/index.d.ts +2 -0
  89. package/dist/toggle/index.js +2 -0
  90. package/dist/toggle/toggle.d.ts +151 -0
  91. package/dist/toggle/toggle.d.ts.map +1 -0
  92. package/dist/toggle/toggle.js +145 -0
  93. package/dist/toggle/toggle.js.map +1 -0
  94. package/dist/tooltip/index.d.ts +2 -0
  95. package/dist/tooltip/index.js +2 -0
  96. package/dist/tooltip/tooltip.d.ts +59 -0
  97. package/dist/tooltip/tooltip.d.ts.map +1 -0
  98. package/dist/tooltip/tooltip.js +86 -0
  99. package/dist/tooltip/tooltip.js.map +1 -0
  100. package/dist/utils/cx.d.ts +21 -0
  101. package/dist/utils/cx.d.ts.map +1 -0
  102. package/dist/utils/cx.js +75 -0
  103. package/dist/utils/cx.js.map +1 -0
  104. package/dist/utils/is-react-component.d.ts +9 -0
  105. package/dist/utils/is-react-component.d.ts.map +1 -0
  106. package/dist/utils/is-react-component.js +17 -0
  107. package/dist/utils/is-react-component.js.map +1 -0
  108. package/dist/utils/tv.d.ts +6 -0
  109. package/dist/utils/tv.d.ts.map +1 -0
  110. package/dist/utils/tv.js +11 -0
  111. package/dist/utils/tv.js.map +1 -0
  112. package/package.json +146 -0
@@ -0,0 +1,74 @@
1
+ "use client";
2
+ import { cx } from "../utils/cx.js";
3
+ import { Tooltip as Tooltip$1, TooltipTrigger as TooltipTrigger$1 } from "../tooltip/tooltip.js";
4
+ import "../tooltip/index.js";
5
+ import { HintText, Label as Label$1 } from "../input/input.js";
6
+ import "../input/index.js";
7
+ import { HelpCircle } from "@kavagy/icons";
8
+ import { forwardRef } from "react";
9
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
+ import { TextArea as TextArea$1, TextField } from "react-aria-components";
11
+ //#region src/textarea/textarea.tsx
12
+ const getResizeHandleBg = (color) => {
13
+ return `url(data:image/svg+xml;base64,${btoa(`<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 2L2 10" stroke="${color}" stroke-linecap="round"/><path d="M11 7L7 11" stroke="${color}" stroke-linecap="round"/></svg>`)})`;
14
+ };
15
+ const TextAreaBase = forwardRef(function TextAreaBase({ className, size = "md", style, ...props }, ref) {
16
+ return /* @__PURE__ */ jsx(TextArea$1, {
17
+ ...props,
18
+ ref,
19
+ style: {
20
+ ...style,
21
+ "--resize-handle-bg": getResizeHandleBg("#D5D7DA"),
22
+ "--resize-handle-bg-dark": getResizeHandleBg("#373A41")
23
+ },
24
+ className: (state) => cx("w-full scroll-py-3 rounded-lg bg-primary text-primary shadow-xs ring-1 ring-primary transition duration-100 ease-linear ring-inset placeholder:text-placeholder autofill:rounded-lg autofill:text-primary focus:outline-hidden", size === "sm" && "p-3 text-sm", size === "md" && "px-3.5 py-3 text-md", "[&::-webkit-resizer]:bg-(image:--resize-handle-bg) [&::-webkit-resizer]:bg-contain dark:[&::-webkit-resizer]:bg-(image:--resize-handle-bg-dark)", state.isFocused && !state.isDisabled && "ring-2 ring-focus-ring", state.isDisabled && "cursor-not-allowed opacity-50", state.isInvalid && "ring-error_subtle", state.isInvalid && state.isFocused && "ring-2 ring-error", typeof className === "function" ? className(state) : className)
25
+ });
26
+ });
27
+ TextAreaBase.displayName = "TextAreaBase";
28
+ const TextArea = forwardRef(function TextArea({ label, hint, hideRequiredIndicator, tooltip, tooltipPlacement, textAreaClassName, placeholder, className, rows, cols, size = "md", ...props }, ref) {
29
+ return /* @__PURE__ */ jsx(TextField, {
30
+ ...props,
31
+ className: (state) => cx("group flex h-max w-full flex-col items-start justify-start gap-1.5", typeof className === "function" ? className(state) : className),
32
+ children: ({ isInvalid, isRequired }) => /* @__PURE__ */ jsxs(Fragment, { children: [
33
+ (label || tooltip) && /* @__PURE__ */ jsxs("div", {
34
+ className: "flex w-full items-center justify-between gap-1",
35
+ children: [label && /* @__PURE__ */ jsx(Label$1, {
36
+ isRequired: hideRequiredIndicator ? !hideRequiredIndicator : isRequired,
37
+ isInvalid,
38
+ children: label
39
+ }), tooltip && /* @__PURE__ */ jsx(Tooltip$1, {
40
+ title: tooltip,
41
+ placement: tooltipPlacement ?? "top",
42
+ children: /* @__PURE__ */ jsxs(TooltipTrigger$1, {
43
+ className: "text-fg-quaternary hover:text-fg-quaternary_hover",
44
+ children: [/* @__PURE__ */ jsx(HelpCircle, {
45
+ "aria-hidden": "true",
46
+ className: "size-4"
47
+ }), /* @__PURE__ */ jsx("span", {
48
+ className: "sr-only",
49
+ children: "More information"
50
+ })]
51
+ })
52
+ })]
53
+ }),
54
+ /* @__PURE__ */ jsx(TextAreaBase, {
55
+ ref,
56
+ placeholder,
57
+ className: textAreaClassName,
58
+ rows,
59
+ cols,
60
+ size
61
+ }),
62
+ hint && /* @__PURE__ */ jsx(HintText, {
63
+ isInvalid,
64
+ size,
65
+ children: hint
66
+ })
67
+ ] })
68
+ });
69
+ });
70
+ TextArea.displayName = "TextArea";
71
+ //#endregion
72
+ export { TextArea, TextAreaBase };
73
+
74
+ //# sourceMappingURL=textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.js","names":["AriaTextArea","AriaTextField","Label","Tooltip","TooltipTrigger"],"sources":["../../src/textarea/textarea.tsx"],"sourcesContent":["'use client';\n\n/* @kavagy-source: untitledui/base/textarea/textarea.tsx */\n\nimport { HelpCircle } from '@kavagy/icons';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { forwardRef } from 'react';\nimport type {\n TextAreaProps as AriaTextAreaProps,\n TextFieldProps as AriaTextFieldProps,\n} from 'react-aria-components';\nimport { TextArea as AriaTextArea, TextField as AriaTextField } from 'react-aria-components';\nimport { HintText, Label } from '../input';\nimport type { TooltipProps } from '../tooltip';\nimport { Tooltip, TooltipTrigger } from '../tooltip';\nimport { cx } from '../utils/cx';\n\nconst getResizeHandleBg = (color: string) => {\n return `url(data:image/svg+xml;base64,${btoa(\n `<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 2L2 10\" stroke=\"${color}\" stroke-linecap=\"round\"/><path d=\"M11 7L7 11\" stroke=\"${color}\" stroke-linecap=\"round\"/></svg>`,\n )})`;\n};\n\nexport interface TextAreaBaseProps extends AriaTextAreaProps {\n size?: 'sm' | 'md';\n}\n\nexport const TextAreaBase = forwardRef<HTMLTextAreaElement, TextAreaBaseProps>(\n function TextAreaBase({ className, size = 'md', style, ...props }, ref) {\n return (\n <AriaTextArea\n {...props}\n ref={ref}\n style={\n {\n ...style,\n '--resize-handle-bg': getResizeHandleBg('#D5D7DA'),\n '--resize-handle-bg-dark': getResizeHandleBg('#373A41'),\n } as CSSProperties\n }\n className={(state) =>\n cx(\n 'w-full scroll-py-3 rounded-lg bg-primary text-primary shadow-xs ring-1 ring-primary transition duration-100 ease-linear ring-inset placeholder:text-placeholder autofill:rounded-lg autofill:text-primary focus:outline-hidden',\n size === 'sm' && 'p-3 text-sm',\n size === 'md' && 'px-3.5 py-3 text-md',\n '[&::-webkit-resizer]:bg-(image:--resize-handle-bg) [&::-webkit-resizer]:bg-contain dark:[&::-webkit-resizer]:bg-(image:--resize-handle-bg-dark)',\n state.isFocused && !state.isDisabled && 'ring-2 ring-focus-ring',\n state.isDisabled && 'cursor-not-allowed opacity-50',\n state.isInvalid && 'ring-error_subtle',\n state.isInvalid && state.isFocused && 'ring-2 ring-error',\n typeof className === 'function' ? className(state) : className,\n )\n }\n />\n );\n },\n);\n\nTextAreaBase.displayName = 'TextAreaBase';\n\nexport interface TextAreaProps extends AriaTextFieldProps {\n label?: string;\n hint?: ReactNode;\n size?: TextAreaBaseProps['size'];\n textAreaClassName?: TextAreaBaseProps['className'];\n hideRequiredIndicator?: boolean;\n placeholder?: string;\n rows?: number;\n cols?: number;\n /** Tooltip content displayed next to the label. */\n tooltip?: ReactNode;\n /** Placement of the tooltip. @default 'top' */\n tooltipPlacement?: TooltipProps['placement'];\n}\n\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(function TextArea(\n {\n label,\n hint,\n hideRequiredIndicator,\n tooltip,\n tooltipPlacement,\n textAreaClassName,\n placeholder,\n className,\n rows,\n cols,\n size = 'md',\n ...props\n },\n ref,\n) {\n return (\n <AriaTextField\n {...props}\n className={(state) =>\n cx(\n 'group flex h-max w-full flex-col items-start justify-start gap-1.5',\n typeof className === 'function' ? className(state) : className,\n )\n }\n >\n {({ isInvalid, isRequired }) => (\n <>\n {(label || tooltip) && (\n <div className=\"flex w-full items-center justify-between gap-1\">\n {label && (\n <Label\n isRequired={hideRequiredIndicator ? !hideRequiredIndicator : isRequired}\n isInvalid={isInvalid}\n >\n {label}\n </Label>\n )}\n\n {tooltip && (\n <Tooltip title={tooltip} placement={tooltipPlacement ?? 'top'}>\n <TooltipTrigger className=\"text-fg-quaternary hover:text-fg-quaternary_hover\">\n <HelpCircle aria-hidden=\"true\" className=\"size-4\" />\n <span className=\"sr-only\">More information</span>\n </TooltipTrigger>\n </Tooltip>\n )}\n </div>\n )}\n\n <TextAreaBase\n ref={ref}\n placeholder={placeholder}\n className={textAreaClassName}\n rows={rows}\n cols={cols}\n size={size}\n />\n\n {hint && (\n <HintText isInvalid={isInvalid} size={size}>\n {hint}\n </HintText>\n )}\n </>\n )}\n </AriaTextField>\n );\n});\n\nTextArea.displayName = 'TextArea';\n"],"mappings":";;;;;;;;;;;AAiBA,MAAM,qBAAqB,UAAkB;CAC3C,OAAO,iCAAiC,KACtC,+HAA+H,MAAM,yDAAyD,MAAM,iCACtM,EAAE;AACJ;AAMA,MAAa,eAAe,WAC1B,SAAS,aAAa,EAAE,WAAW,OAAO,MAAM,OAAO,GAAG,SAAS,KAAK;CACtE,OACE,oBAACA,YAAD;EACE,GAAI;EACC;EACL,OACE;GACE,GAAG;GACH,sBAAsB,kBAAkB,SAAS;GACjD,2BAA2B,kBAAkB,SAAS;EACxD;EAEF,YAAY,UACV,GACE,kOACA,SAAS,QAAQ,eACjB,SAAS,QAAQ,uBACjB,mJACA,MAAM,aAAa,CAAC,MAAM,cAAc,0BACxC,MAAM,cAAc,iCACpB,MAAM,aAAa,qBACnB,MAAM,aAAa,MAAM,aAAa,qBACtC,OAAO,cAAc,aAAa,UAAU,KAAK,IAAI,SACvD;CAEH,CAAA;AAEL,CACF;AAEA,aAAa,cAAc;AAiB3B,MAAa,WAAW,WAA+C,SAAS,SAC9E,EACE,OACA,MACA,uBACA,SACA,kBACA,mBACA,aACA,WACA,MACA,MACA,OAAO,MACP,GAAG,SAEL,KACA;CACA,OACE,oBAACC,WAAD;EACE,GAAI;EACJ,YAAY,UACV,GACE,sEACA,OAAO,cAAc,aAAa,UAAU,KAAK,IAAI,SACvD;EAGA,WAAA,EAAE,WAAW,iBACb,qBAAA,UAAA,EAAA,UAAA;IACI,SAAS,YACT,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACG,SACC,oBAACC,SAAD;KACE,YAAY,wBAAwB,CAAC,wBAAwB;KAClD;KAEV,UAAA;IACI,CAAA,GAGR,WACC,oBAACC,WAAD;KAAS,OAAO;KAAS,WAAW,oBAAoB;KACtD,UAAA,qBAACC,kBAAD;MAAgB,WAAU;MAA1B,UAAA,CACE,oBAAC,YAAD;OAAY,eAAY;OAAO,WAAU;MAAU,CAAA,GACnD,oBAAC,QAAD;OAAM,WAAU;OAAU,UAAA;MAAsB,CAAA,CAClC;;IACT,CAAA,CAER;;GAGP,oBAAC,cAAD;IACO;IACQ;IACb,WAAW;IACL;IACA;IACA;GACP,CAAA;GAEA,QACC,oBAAC,UAAD;IAAqB;IAAiB;IACnC,UAAA;GACO,CAAA;EAEZ,EAAA,CAAA;CAES,CAAA;AAEnB,CAAC;AAED,SAAS,cAAc"}
@@ -0,0 +1,2 @@
1
+ import { Toggle, ToggleProps, toggleStyles } from "./toggle.js";
2
+ export { Toggle, type ToggleProps, toggleStyles };
@@ -0,0 +1,2 @@
1
+ import { Toggle, toggleStyles } from "./toggle.js";
2
+ export { Toggle, toggleStyles };
@@ -0,0 +1,151 @@
1
+ import { VariantProps } from "../utils/tv.js";
2
+ import { ReactNode } from "react";
3
+ import { SwitchProps } from "react-aria-components";
4
+ //#region src/toggle/toggle.d.ts
5
+ export declare const toggleStyles: import("tailwind-variants").TVReturnType<{
6
+ size: {
7
+ sm: {
8
+ root: string;
9
+ track: string;
10
+ thumb: string;
11
+ label: string;
12
+ hint: string;
13
+ };
14
+ md: {
15
+ root: string;
16
+ track: string;
17
+ thumb: string;
18
+ textWrapper: string;
19
+ label: string;
20
+ hint: string;
21
+ };
22
+ };
23
+ slim: {
24
+ true: {};
25
+ };
26
+ isSelected: {
27
+ true: {};
28
+ };
29
+ isDisabled: {
30
+ true: {
31
+ root: string;
32
+ track: string;
33
+ };
34
+ };
35
+ isFocusVisible: {
36
+ true: {
37
+ track: string;
38
+ };
39
+ };
40
+ isHovered: {
41
+ true: {};
42
+ };
43
+ }, {
44
+ root: string;
45
+ track: string;
46
+ thumb: string;
47
+ textWrapper: string;
48
+ label: string;
49
+ hint: string;
50
+ }, undefined, {
51
+ size: {
52
+ sm: {
53
+ root: string;
54
+ track: string;
55
+ thumb: string;
56
+ label: string;
57
+ hint: string;
58
+ };
59
+ md: {
60
+ root: string;
61
+ track: string;
62
+ thumb: string;
63
+ textWrapper: string;
64
+ label: string;
65
+ hint: string;
66
+ };
67
+ };
68
+ slim: {
69
+ true: {};
70
+ };
71
+ isSelected: {
72
+ true: {};
73
+ };
74
+ isDisabled: {
75
+ true: {
76
+ root: string;
77
+ track: string;
78
+ };
79
+ };
80
+ isFocusVisible: {
81
+ true: {
82
+ track: string;
83
+ };
84
+ };
85
+ isHovered: {
86
+ true: {};
87
+ };
88
+ }, {
89
+ root: string;
90
+ track: string;
91
+ thumb: string;
92
+ textWrapper: string;
93
+ label: string;
94
+ hint: string;
95
+ }, import("tailwind-variants").TVReturnType<{
96
+ size: {
97
+ sm: {
98
+ root: string;
99
+ track: string;
100
+ thumb: string;
101
+ label: string;
102
+ hint: string;
103
+ };
104
+ md: {
105
+ root: string;
106
+ track: string;
107
+ thumb: string;
108
+ textWrapper: string;
109
+ label: string;
110
+ hint: string;
111
+ };
112
+ };
113
+ slim: {
114
+ true: {};
115
+ };
116
+ isSelected: {
117
+ true: {};
118
+ };
119
+ isDisabled: {
120
+ true: {
121
+ root: string;
122
+ track: string;
123
+ };
124
+ };
125
+ isFocusVisible: {
126
+ true: {
127
+ track: string;
128
+ };
129
+ };
130
+ isHovered: {
131
+ true: {};
132
+ };
133
+ }, {
134
+ root: string;
135
+ track: string;
136
+ thumb: string;
137
+ textWrapper: string;
138
+ label: string;
139
+ hint: string;
140
+ }, undefined, unknown, unknown, undefined>>;
141
+ type ToggleVariants = VariantProps<typeof toggleStyles>;
142
+ export interface ToggleProps extends Omit<SwitchProps, 'className' | 'children'> {
143
+ size?: ToggleVariants['size'];
144
+ label?: string;
145
+ hint?: ReactNode;
146
+ slim?: boolean;
147
+ className?: string;
148
+ }
149
+ export declare const Toggle: import("react").ForwardRefExoticComponent<ToggleProps & import("react").RefAttributes<HTMLLabelElement>>;
150
+ //#endregion
151
+ //# sourceMappingURL=toggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.d.ts","names":[],"sources":["../../src/toggle/toggle.tsx"],"mappings":";;;;qBAYa,0CAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyDpB,iBAAiB,oBAAoB;iBAEzB,oBAAoB,KAAK;EACxC,OAAO;EACP;EACA,OAAO;EACP;EACA;;qBAGW,wBAAM,0BAAA,8BAAA,cAAA"}
@@ -0,0 +1,145 @@
1
+ "use client";
2
+ import { cx } from "../utils/cx.js";
3
+ import { tv } from "../utils/tv.js";
4
+ import { forwardRef } from "react";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ import { Switch } from "react-aria-components";
7
+ //#region src/toggle/toggle.tsx
8
+ const toggleStyles = tv({
9
+ slots: {
10
+ root: "flex w-max items-start",
11
+ track: "cursor-pointer rounded-full bg-tertiary ring-[0.5px] ring-secondary outline-focus-ring transition duration-150 ease-linear ring-inset",
12
+ thumb: "rounded-full bg-fg-white shadow-sm transition-transform duration-150 ease-in-out",
13
+ textWrapper: "flex flex-col",
14
+ label: "text-secondary font-medium select-none",
15
+ hint: "text-tertiary"
16
+ },
17
+ variants: {
18
+ size: {
19
+ sm: {
20
+ root: "gap-2",
21
+ track: "h-5 w-9 p-0.5",
22
+ thumb: "size-4",
23
+ label: "text-sm",
24
+ hint: "text-sm"
25
+ },
26
+ md: {
27
+ root: "gap-3",
28
+ track: "h-6 w-11 p-0.5",
29
+ thumb: "size-5",
30
+ textWrapper: "gap-0.5",
31
+ label: "text-md",
32
+ hint: "text-md"
33
+ }
34
+ },
35
+ slim: { true: {} },
36
+ isSelected: { true: {} },
37
+ isDisabled: { true: {
38
+ root: "cursor-not-allowed",
39
+ track: "cursor-not-allowed opacity-50"
40
+ } },
41
+ isFocusVisible: { true: { track: "outline-2 outline-offset-2" } },
42
+ isHovered: { true: {} }
43
+ },
44
+ compoundVariants: [
45
+ {
46
+ slim: true,
47
+ size: "sm",
48
+ class: { track: "h-4 w-8 p-0" }
49
+ },
50
+ {
51
+ slim: true,
52
+ size: "md",
53
+ class: { track: "h-5 w-10 p-0" }
54
+ },
55
+ {
56
+ slim: true,
57
+ class: {
58
+ track: "ring-1",
59
+ thumb: "shadow-xs border border-primary"
60
+ }
61
+ },
62
+ {
63
+ slim: true,
64
+ isSelected: true,
65
+ class: {
66
+ track: "ring-transparent",
67
+ thumb: "border-brand"
68
+ }
69
+ },
70
+ {
71
+ slim: true,
72
+ isSelected: true,
73
+ isHovered: true,
74
+ class: { thumb: "border-brand_alt" }
75
+ },
76
+ {
77
+ isSelected: true,
78
+ size: "sm",
79
+ class: { thumb: "translate-x-4" }
80
+ },
81
+ {
82
+ isSelected: true,
83
+ size: "md",
84
+ class: { thumb: "translate-x-5" }
85
+ },
86
+ {
87
+ isSelected: true,
88
+ class: { track: "bg-brand-solid" }
89
+ },
90
+ {
91
+ isSelected: true,
92
+ isHovered: true,
93
+ class: { track: "bg-brand-solid_hover" }
94
+ }
95
+ ],
96
+ defaultVariants: { size: "sm" }
97
+ });
98
+ const Toggle = forwardRef(function Toggle(props, ref) {
99
+ const { label, hint, className, size = "sm", slim, ...rest } = props;
100
+ return /* @__PURE__ */ jsx(Switch, {
101
+ ...rest,
102
+ ref,
103
+ className: (state) => cx(toggleStyles({
104
+ size,
105
+ isDisabled: state.isDisabled
106
+ }).root(), className),
107
+ children: ({ isSelected, isDisabled, isFocusVisible, isHovered }) => {
108
+ const slots = toggleStyles({
109
+ size,
110
+ slim,
111
+ isSelected,
112
+ isDisabled,
113
+ isFocusVisible,
114
+ isHovered
115
+ });
116
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
117
+ "data-track": true,
118
+ className: cx(slots.track(), slim && "mt-0.5"),
119
+ children: /* @__PURE__ */ jsx("span", {
120
+ "data-thumb": true,
121
+ className: slots.thumb()
122
+ })
123
+ }), (label || hint) && /* @__PURE__ */ jsxs("span", {
124
+ className: slots.textWrapper(),
125
+ children: [label && /* @__PURE__ */ jsx("p", {
126
+ className: slots.label(),
127
+ children: label
128
+ }), hint && /* @__PURE__ */ jsx("span", {
129
+ className: slots.hint(),
130
+ onPointerDown: (event) => event.stopPropagation(),
131
+ onClick: (event) => {
132
+ event.preventDefault();
133
+ event.stopPropagation();
134
+ },
135
+ children: hint
136
+ })]
137
+ })] });
138
+ }
139
+ });
140
+ });
141
+ Toggle.displayName = "Toggle";
142
+ //#endregion
143
+ export { Toggle, toggleStyles };
144
+
145
+ //# sourceMappingURL=toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.js","names":["AriaSwitch"],"sources":["../../src/toggle/toggle.tsx"],"sourcesContent":["'use client';\n\n/* @kavagy-source: untitledui/base/toggle/toggle.tsx */\n\nimport type { ReactNode } from 'react';\nimport { forwardRef } from 'react';\nimport type { SwitchProps as AriaSwitchProps } from 'react-aria-components';\nimport { Switch as AriaSwitch } from 'react-aria-components';\nimport { cx } from '../utils/cx';\nimport type { VariantProps } from '../utils/tv';\nimport { tv } from '../utils/tv';\n\nexport const toggleStyles = tv({\n slots: {\n root: 'flex w-max items-start',\n track:\n 'cursor-pointer rounded-full bg-tertiary ring-[0.5px] ring-secondary outline-focus-ring transition duration-150 ease-linear ring-inset',\n thumb: 'rounded-full bg-fg-white shadow-sm transition-transform duration-150 ease-in-out',\n textWrapper: 'flex flex-col',\n label: 'text-secondary font-medium select-none',\n hint: 'text-tertiary',\n },\n variants: {\n size: {\n sm: {\n root: 'gap-2',\n track: 'h-5 w-9 p-0.5',\n thumb: 'size-4',\n label: 'text-sm',\n hint: 'text-sm',\n },\n md: {\n root: 'gap-3',\n track: 'h-6 w-11 p-0.5',\n thumb: 'size-5',\n textWrapper: 'gap-0.5',\n label: 'text-md',\n hint: 'text-md',\n },\n },\n slim: { true: {} },\n isSelected: { true: {} },\n isDisabled: {\n true: { root: 'cursor-not-allowed', track: 'cursor-not-allowed opacity-50' },\n },\n isFocusVisible: {\n true: { track: 'outline-2 outline-offset-2' },\n },\n isHovered: { true: {} },\n },\n compoundVariants: [\n { slim: true, size: 'sm', class: { track: 'h-4 w-8 p-0' } },\n { slim: true, size: 'md', class: { track: 'h-5 w-10 p-0' } },\n { slim: true, class: { track: 'ring-1', thumb: 'shadow-xs border border-primary' } },\n { slim: true, isSelected: true, class: { track: 'ring-transparent', thumb: 'border-brand' } },\n {\n slim: true,\n isSelected: true,\n isHovered: true,\n class: { thumb: 'border-brand_alt' },\n },\n { isSelected: true, size: 'sm', class: { thumb: 'translate-x-4' } },\n { isSelected: true, size: 'md', class: { thumb: 'translate-x-5' } },\n { isSelected: true, class: { track: 'bg-brand-solid' } },\n { isSelected: true, isHovered: true, class: { track: 'bg-brand-solid_hover' } },\n ],\n defaultVariants: { size: 'sm' },\n});\n\ntype ToggleVariants = VariantProps<typeof toggleStyles>;\n\nexport interface ToggleProps extends Omit<AriaSwitchProps, 'className' | 'children'> {\n size?: ToggleVariants['size'];\n label?: string;\n hint?: ReactNode;\n slim?: boolean;\n className?: string;\n}\n\nexport const Toggle = forwardRef<HTMLLabelElement, ToggleProps>(function Toggle(props, ref) {\n const { label, hint, className, size = 'sm', slim, ...rest } = props;\n\n return (\n <AriaSwitch\n {...rest}\n ref={ref}\n className={(state) =>\n cx(toggleStyles({ size, isDisabled: state.isDisabled }).root(), className)\n }\n >\n {({ isSelected, isDisabled, isFocusVisible, isHovered }) => {\n const slots = toggleStyles({\n size,\n slim,\n isSelected,\n isDisabled,\n isFocusVisible,\n isHovered,\n });\n\n return (\n <>\n <span data-track className={cx(slots.track(), slim && 'mt-0.5')}>\n <span data-thumb className={slots.thumb()} />\n </span>\n\n {(label || hint) && (\n <span className={slots.textWrapper()}>\n {label && <p className={slots.label()}>{label}</p>}\n {hint && (\n // biome-ignore lint/a11y/noStaticElementInteractions: blocks the native <label>-to-switch click-forwarding; this isn't its own control.\n // biome-ignore lint/a11y/useKeyWithClickEvents: no keyboard action to mirror, just suppressing a <label> side effect.\n <span\n className={slots.hint()}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n >\n {hint}\n </span>\n )}\n </span>\n )}\n </>\n );\n }}\n </AriaSwitch>\n );\n});\n\nToggle.displayName = 'Toggle';\n"],"mappings":";;;;;;;AAYA,MAAa,eAAe,GAAG;CAC7B,OAAO;EACL,MAAM;EACN,OACE;EACF,OAAO;EACP,aAAa;EACb,OAAO;EACP,MAAM;CACR;CACA,UAAU;EACR,MAAM;GACJ,IAAI;IACF,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;GACR;GACA,IAAI;IACF,MAAM;IACN,OAAO;IACP,OAAO;IACP,aAAa;IACb,OAAO;IACP,MAAM;GACR;EACF;EACA,MAAM,EAAE,MAAM,CAAC,EAAE;EACjB,YAAY,EAAE,MAAM,CAAC,EAAE;EACvB,YAAY,EACV,MAAM;GAAE,MAAM;GAAsB,OAAO;EAAgC,EAC7E;EACA,gBAAgB,EACd,MAAM,EAAE,OAAO,6BAA6B,EAC9C;EACA,WAAW,EAAE,MAAM,CAAC,EAAE;CACxB;CACA,kBAAkB;EAChB;GAAE,MAAM;GAAM,MAAM;GAAM,OAAO,EAAE,OAAO,cAAc;EAAE;EAC1D;GAAE,MAAM;GAAM,MAAM;GAAM,OAAO,EAAE,OAAO,eAAe;EAAE;EAC3D;GAAE,MAAM;GAAM,OAAO;IAAE,OAAO;IAAU,OAAO;GAAkC;EAAE;EACnF;GAAE,MAAM;GAAM,YAAY;GAAM,OAAO;IAAE,OAAO;IAAoB,OAAO;GAAe;EAAE;EAC5F;GACE,MAAM;GACN,YAAY;GACZ,WAAW;GACX,OAAO,EAAE,OAAO,mBAAmB;EACrC;EACA;GAAE,YAAY;GAAM,MAAM;GAAM,OAAO,EAAE,OAAO,gBAAgB;EAAE;EAClE;GAAE,YAAY;GAAM,MAAM;GAAM,OAAO,EAAE,OAAO,gBAAgB;EAAE;EAClE;GAAE,YAAY;GAAM,OAAO,EAAE,OAAO,iBAAiB;EAAE;EACvD;GAAE,YAAY;GAAM,WAAW;GAAM,OAAO,EAAE,OAAO,uBAAuB;EAAE;CAChF;CACA,iBAAiB,EAAE,MAAM,KAAK;AAChC,CAAC;AAYD,MAAa,SAAS,WAA0C,SAAS,OAAO,OAAO,KAAK;CAC1F,MAAM,EAAE,OAAO,MAAM,WAAW,OAAO,MAAM,MAAM,GAAG,SAAS;CAE/D,OACE,oBAACA,QAAD;EACE,GAAI;EACC;EACL,YAAY,UACV,GAAG,aAAa;GAAE;GAAM,YAAY,MAAM;EAAW,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS;EAGzE,WAAA,EAAE,YAAY,YAAY,gBAAgB,gBAAgB;GAC1D,MAAM,QAAQ,aAAa;IACzB;IACA;IACA;IACA;IACA;IACA;GACF,CAAC;GAED,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;IAAM,cAAA;IAAW,WAAW,GAAG,MAAM,MAAM,GAAG,QAAQ,QAAQ;IAC5D,UAAA,oBAAC,QAAD;KAAM,cAAA;KAAW,WAAW,MAAM,MAAM;IAAI,CAAA;GACxC,CAAA,IAEJ,SAAS,SACT,qBAAC,QAAD;IAAM,WAAW,MAAM,YAAY;IAAnC,UAAA,CACG,SAAS,oBAAC,KAAD;KAAG,WAAW,MAAM,MAAM;KAAI,UAAA;IAAS,CAAA,GAChD,QAGC,oBAAC,QAAD;KACE,WAAW,MAAM,KAAK;KACtB,gBAAgB,UAAU,MAAM,gBAAgB;KAChD,UAAU,UAAU;MAClB,MAAM,eAAe;MACrB,MAAM,gBAAgB;KACxB;KAEC,UAAA;IACG,CAAA,CAEJ;GAER,CAAA,CAAA,EAAA,CAAA;EAEN;CACU,CAAA;AAEhB,CAAC;AAED,OAAO,cAAc"}
@@ -0,0 +1,2 @@
1
+ import { Tooltip, TooltipProps, TooltipTrigger, TooltipTriggerProps, tooltipStyles } from "./tooltip.js";
2
+ export { Tooltip, type TooltipProps, TooltipTrigger, type TooltipTriggerProps, tooltipStyles };
@@ -0,0 +1,2 @@
1
+ import { Tooltip, TooltipTrigger, tooltipStyles } from "./tooltip.js";
2
+ export { Tooltip, TooltipTrigger, tooltipStyles };
@@ -0,0 +1,59 @@
1
+ import { ReactNode } from "react";
2
+ import { ButtonProps, TooltipProps as TooltipProps$1, TooltipTriggerComponentProps } from "react-aria-components";
3
+ //#region src/tooltip/tooltip.d.ts
4
+ export declare const tooltipStyles: import("tailwind-variants").TVReturnType<{
5
+ hasDescription: {
6
+ true: {
7
+ content: string;
8
+ };
9
+ false: {
10
+ content: string;
11
+ };
12
+ };
13
+ }, {
14
+ content: string;
15
+ title: string;
16
+ description: string;
17
+ arrow: string;
18
+ }, undefined, {
19
+ hasDescription: {
20
+ true: {
21
+ content: string;
22
+ };
23
+ false: {
24
+ content: string;
25
+ };
26
+ };
27
+ }, {
28
+ content: string;
29
+ title: string;
30
+ description: string;
31
+ arrow: string;
32
+ }, import("tailwind-variants").TVReturnType<{
33
+ hasDescription: {
34
+ true: {
35
+ content: string;
36
+ };
37
+ false: {
38
+ content: string;
39
+ };
40
+ };
41
+ }, {
42
+ content: string;
43
+ title: string;
44
+ description: string;
45
+ arrow: string;
46
+ }, undefined, unknown, unknown, undefined>>;
47
+ export interface TooltipProps extends TooltipTriggerComponentProps, Omit<TooltipProps$1, 'children'> {
48
+ title: ReactNode;
49
+ description?: ReactNode;
50
+ /** @default false */
51
+ arrow?: boolean;
52
+ /** Delay in ms before the tooltip appears. @default 300 */
53
+ delay?: number;
54
+ }
55
+ export declare const Tooltip: import("react").ForwardRefExoticComponent<TooltipProps & import("react").RefAttributes<HTMLDivElement>>;
56
+ export interface TooltipTriggerProps extends ButtonProps {}
57
+ export declare const TooltipTrigger: import("react").ForwardRefExoticComponent<TooltipTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
58
+ //#endregion
59
+ //# sourceMappingURL=tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.d.ts","names":[],"sources":["../../src/tooltip/tooltip.tsx"],"mappings":";;;qBAoBa,2CAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAcT,qBACP,8BACN,KAAK;EACP,OAAO;EACP,cAAc;;EAEd;;EAEA;;qBAGW,yBAAO,0BAAA,+BAAA,cAAA;iBA2EH,4BAA4B;qBAEhC,gCAAc,0BAAA,sCAAA,cAAA"}
@@ -0,0 +1,86 @@
1
+ "use client";
2
+ import { cx } from "../utils/cx.js";
3
+ import { tv } from "../utils/tv.js";
4
+ import { forwardRef } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { Button, OverlayArrow, Tooltip as Tooltip$1, TooltipTrigger as TooltipTrigger$1 } from "react-aria-components";
7
+ //#region src/tooltip/tooltip.tsx
8
+ const tooltipStyles = tv({
9
+ slots: {
10
+ content: "z-50 flex max-w-xs origin-(--trigger-anchor-point) flex-col items-start gap-1 rounded-lg bg-primary-solid px-3 shadow-lg will-change-transform",
11
+ title: "text-xs font-semibold text-white",
12
+ description: "text-xs font-medium text-secondary_on-brand",
13
+ arrow: "size-2.5 fill-bg-primary-solid in-placement-left:-rotate-90 in-placement-right:rotate-90 in-placement-top:rotate-0 in-placement-bottom:rotate-180"
14
+ },
15
+ variants: { hasDescription: {
16
+ true: { content: "py-3" },
17
+ false: { content: "py-2" }
18
+ } }
19
+ });
20
+ const Tooltip = forwardRef(function Tooltip(props, ref) {
21
+ const { title, description, children, arrow = false, delay = 300, closeDelay = 0, trigger, isDisabled, isOpen, defaultOpen, offset = 6, crossOffset, placement = "top", onOpenChange, ...tooltipProps } = props;
22
+ const isTopOrBottomLeft = [
23
+ "top left",
24
+ "top end",
25
+ "bottom left",
26
+ "bottom end"
27
+ ].includes(placement);
28
+ const isTopOrBottomRight = [
29
+ "top right",
30
+ "top start",
31
+ "bottom right",
32
+ "bottom start"
33
+ ].includes(placement);
34
+ const calculatedCrossOffset = isTopOrBottomLeft ? -12 : isTopOrBottomRight ? 12 : 0;
35
+ const slots = tooltipStyles({ hasDescription: Boolean(description) });
36
+ return /* @__PURE__ */ jsxs(TooltipTrigger$1, {
37
+ trigger,
38
+ delay,
39
+ closeDelay,
40
+ isDisabled,
41
+ isOpen,
42
+ defaultOpen,
43
+ onOpenChange,
44
+ children: [children, /* @__PURE__ */ jsx(Tooltip$1, {
45
+ ...tooltipProps,
46
+ offset,
47
+ placement,
48
+ crossOffset: crossOffset ?? calculatedCrossOffset,
49
+ className: ({ isEntering, isExiting }) => cx(isEntering && "ease-out animate-in", isExiting && "ease-in animate-out"),
50
+ children: ({ isEntering, isExiting }) => /* @__PURE__ */ jsxs("div", {
51
+ ref,
52
+ className: cx(slots.content(), isEntering && "ease-out animate-in fade-in zoom-in-95 in-placement-left:slide-in-from-right-0.5 in-placement-right:slide-in-from-left-0.5 in-placement-top:slide-in-from-bottom-0.5 in-placement-bottom:slide-in-from-top-0.5", isExiting && "ease-in animate-out fade-out zoom-out-95 in-placement-left:slide-out-to-right-0.5 in-placement-right:slide-out-to-left-0.5 in-placement-top:slide-out-to-bottom-0.5 in-placement-bottom:slide-out-to-top-0.5"),
53
+ children: [
54
+ /* @__PURE__ */ jsx("span", {
55
+ className: slots.title(),
56
+ children: title
57
+ }),
58
+ description && /* @__PURE__ */ jsx("span", {
59
+ className: slots.description(),
60
+ children: description
61
+ }),
62
+ arrow && /* @__PURE__ */ jsx(OverlayArrow, { children: /* @__PURE__ */ jsx("svg", {
63
+ "aria-hidden": "true",
64
+ viewBox: "0 0 100 100",
65
+ className: slots.arrow(),
66
+ children: /* @__PURE__ */ jsx("path", { d: "M0,0 L35.858,35.858 Q50,50 64.142,35.858 L100,0 Z" })
67
+ }) })
68
+ ]
69
+ })
70
+ })]
71
+ });
72
+ });
73
+ Tooltip.displayName = "Tooltip";
74
+ const TooltipTrigger = forwardRef(function TooltipTrigger({ children, className, ...buttonProps }, ref) {
75
+ return /* @__PURE__ */ jsx(Button, {
76
+ ...buttonProps,
77
+ ref,
78
+ className: (values) => cx("h-max w-max outline-hidden", typeof className === "function" ? className(values) : className),
79
+ children
80
+ });
81
+ });
82
+ TooltipTrigger.displayName = "TooltipTrigger";
83
+ //#endregion
84
+ export { Tooltip, TooltipTrigger, tooltipStyles };
85
+
86
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","names":["AriaTooltipTrigger","AriaTooltip","AriaOverlayArrow","AriaButton"],"sources":["../../src/tooltip/tooltip.tsx"],"sourcesContent":["'use client';\n\n/* @kavagy-source: untitledui/base/tooltip/tooltip.tsx */\n\nimport type { ReactNode } from 'react';\nimport { forwardRef } from 'react';\nimport type {\n ButtonProps as AriaButtonProps,\n TooltipProps as AriaTooltipProps,\n TooltipTriggerComponentProps as AriaTooltipTriggerComponentProps,\n} from 'react-aria-components';\nimport {\n Button as AriaButton,\n OverlayArrow as AriaOverlayArrow,\n Tooltip as AriaTooltip,\n TooltipTrigger as AriaTooltipTrigger,\n} from 'react-aria-components';\nimport { cx } from '../utils/cx';\nimport { tv } from '../utils/tv';\n\nexport const tooltipStyles = tv({\n slots: {\n content:\n 'z-50 flex max-w-xs origin-(--trigger-anchor-point) flex-col items-start gap-1 rounded-lg bg-primary-solid px-3 shadow-lg will-change-transform',\n title: 'text-xs font-semibold text-white',\n description: 'text-xs font-medium text-secondary_on-brand',\n arrow:\n 'size-2.5 fill-bg-primary-solid in-placement-left:-rotate-90 in-placement-right:rotate-90 in-placement-top:rotate-0 in-placement-bottom:rotate-180',\n },\n variants: {\n hasDescription: { true: { content: 'py-3' }, false: { content: 'py-2' } },\n },\n});\n\nexport interface TooltipProps\n extends AriaTooltipTriggerComponentProps,\n Omit<AriaTooltipProps, 'children'> {\n title: ReactNode;\n description?: ReactNode;\n /** @default false */\n arrow?: boolean;\n /** Delay in ms before the tooltip appears. @default 300 */\n delay?: number;\n}\n\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(function Tooltip(props, ref) {\n const {\n title,\n description,\n children,\n arrow = false,\n delay = 300,\n closeDelay = 0,\n trigger,\n isDisabled,\n isOpen,\n defaultOpen,\n offset = 6,\n crossOffset,\n placement = 'top',\n onOpenChange,\n ...tooltipProps\n } = props;\n\n const isTopOrBottomLeft = ['top left', 'top end', 'bottom left', 'bottom end'].includes(\n placement as string,\n );\n const isTopOrBottomRight = ['top right', 'top start', 'bottom right', 'bottom start'].includes(\n placement as string,\n );\n const calculatedCrossOffset = isTopOrBottomLeft ? -12 : isTopOrBottomRight ? 12 : 0;\n\n const slots = tooltipStyles({ hasDescription: Boolean(description) });\n\n return (\n <AriaTooltipTrigger\n {...{ trigger, delay, closeDelay, isDisabled, isOpen, defaultOpen, onOpenChange }}\n >\n {children}\n\n <AriaTooltip\n {...tooltipProps}\n offset={offset}\n placement={placement}\n crossOffset={crossOffset ?? calculatedCrossOffset}\n className={({ isEntering, isExiting }) =>\n cx(isEntering && 'ease-out animate-in', isExiting && 'ease-in animate-out')\n }\n >\n {({ isEntering, isExiting }) => (\n <div\n ref={ref}\n className={cx(\n slots.content(),\n isEntering &&\n 'ease-out animate-in fade-in zoom-in-95 in-placement-left:slide-in-from-right-0.5 in-placement-right:slide-in-from-left-0.5 in-placement-top:slide-in-from-bottom-0.5 in-placement-bottom:slide-in-from-top-0.5',\n isExiting &&\n 'ease-in animate-out fade-out zoom-out-95 in-placement-left:slide-out-to-right-0.5 in-placement-right:slide-out-to-left-0.5 in-placement-top:slide-out-to-bottom-0.5 in-placement-bottom:slide-out-to-top-0.5',\n )}\n >\n <span className={slots.title()}>{title}</span>\n\n {description && <span className={slots.description()}>{description}</span>}\n\n {arrow && (\n <AriaOverlayArrow>\n <svg aria-hidden=\"true\" viewBox=\"0 0 100 100\" className={slots.arrow()}>\n <path d=\"M0,0 L35.858,35.858 Q50,50 64.142,35.858 L100,0 Z\" />\n </svg>\n </AriaOverlayArrow>\n )}\n </div>\n )}\n </AriaTooltip>\n </AriaTooltipTrigger>\n );\n});\n\nTooltip.displayName = 'Tooltip';\n\nexport interface TooltipTriggerProps extends AriaButtonProps {}\n\nexport const TooltipTrigger = forwardRef<HTMLButtonElement, TooltipTriggerProps>(\n function TooltipTrigger({ children, className, ...buttonProps }, ref) {\n return (\n <AriaButton\n {...buttonProps}\n ref={ref}\n className={(values) =>\n cx(\n 'h-max w-max outline-hidden',\n typeof className === 'function' ? className(values) : className,\n )\n }\n >\n {children}\n </AriaButton>\n );\n },\n);\n\nTooltipTrigger.displayName = 'TooltipTrigger';\n"],"mappings":";;;;;;;AAoBA,MAAa,gBAAgB,GAAG;CAC9B,OAAO;EACL,SACE;EACF,OAAO;EACP,aAAa;EACb,OACE;CACJ;CACA,UAAU,EACR,gBAAgB;EAAE,MAAM,EAAE,SAAS,OAAO;EAAG,OAAO,EAAE,SAAS,OAAO;CAAE,EAC1E;AACF,CAAC;AAaD,MAAa,UAAU,WAAyC,SAAS,QAAQ,OAAO,KAAK;CAC3F,MAAM,EACJ,OACA,aACA,UACA,QAAQ,OACR,QAAQ,KACR,aAAa,GACb,SACA,YACA,QACA,aACA,SAAS,GACT,aACA,YAAY,OACZ,cACA,GAAG,iBACD;CAEJ,MAAM,oBAAoB;EAAC;EAAY;EAAW;EAAe;CAAY,CAAC,CAAC,SAC7E,SACF;CACA,MAAM,qBAAqB;EAAC;EAAa;EAAa;EAAgB;CAAc,CAAC,CAAC,SACpF,SACF;CACA,MAAM,wBAAwB,oBAAoB,MAAM,qBAAqB,KAAK;CAElF,MAAM,QAAQ,cAAc,EAAE,gBAAgB,QAAQ,WAAW,EAAE,CAAC;CAEpE,OACE,qBAACA,kBAAD;EACQ;EAAS;EAAO;EAAY;EAAY;EAAQ;EAAa;EADrE,UAAA,CAGG,UAED,oBAACC,WAAD;GACE,GAAI;GACI;GACG;GACX,aAAa,eAAe;GAC5B,YAAY,EAAE,YAAY,gBACxB,GAAG,cAAc,uBAAuB,aAAa,qBAAqB;GAG1E,WAAA,EAAE,YAAY,gBACd,qBAAC,OAAD;IACO;IACL,WAAW,GACT,MAAM,QAAQ,GACd,cACE,kNACF,aACE,8MACJ;IARF,UAAA;KAUE,oBAAC,QAAD;MAAM,WAAW,MAAM,MAAM;MAAI,UAAA;KAAY,CAAA;KAE5C,eAAe,oBAAC,QAAD;MAAM,WAAW,MAAM,YAAY;MAAI,UAAA;KAAkB,CAAA;KAExE,SACC,oBAACC,cAAD,EAAA,UACE,oBAAC,OAAD;MAAK,eAAY;MAAO,SAAQ;MAAc,WAAW,MAAM,MAAM;MACnE,UAAA,oBAAC,QAAD,EAAM,GAAE,oDAAqD,CAAA;KAC1D,CAAA,EACW,CAAA;IAEjB;;EAEI,CAAA,CACK;;AAExB,CAAC;AAED,QAAQ,cAAc;AAItB,MAAa,iBAAiB,WAC5B,SAAS,eAAe,EAAE,UAAU,WAAW,GAAG,eAAe,KAAK;CACpE,OACE,oBAACC,QAAD;EACE,GAAI;EACC;EACL,YAAY,WACV,GACE,8BACA,OAAO,cAAc,aAAa,UAAU,MAAM,IAAI,SACxD;EAGD;CACS,CAAA;AAEhB,CACF;AAEA,eAAe,cAAc"}
@@ -0,0 +1,21 @@
1
+ //#region src/utils/cx.d.ts
2
+ export declare const twMergeConfig: {
3
+ readonly extend: {
4
+ readonly theme: {
5
+ readonly text: readonly ["xxs", "xs", "sm", "md", "lg", "xl", "display-xs", "display-sm", "display-md", "display-lg", "display-xl", "display-2xl"];
6
+ readonly radius: readonly ["none", "xs", "sm", "md", "lg", "xl", "2xl", "3xl", "full"];
7
+ readonly shadow: readonly ["xs", "sm", "md", "lg", "xl", "2xl", "3xl", "skeuomorphic", "xs-skeuomorphic"];
8
+ };
9
+ readonly classGroups: {
10
+ readonly 'ring-color': readonly [{
11
+ readonly ring: readonly ["primary", "secondary", "secondary_alt", "tertiary", "disabled", "error", "error_subtle", "brand", "brand_alt", "brand-solid", "brand-solid_hover"];
12
+ }];
13
+ readonly 'outline-color': readonly [{
14
+ readonly outline: readonly ["primary", "secondary", "secondary_alt", "tertiary", "disabled", "error", "error_subtle", "brand", "brand_alt", "brand-solid", "brand-solid_hover"];
15
+ }];
16
+ };
17
+ };
18
+ };
19
+ export declare const cx: (...classLists: import("tailwind-merge").ClassNameValue[]) => string;
20
+ //#endregion
21
+ //# sourceMappingURL=cx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cx.d.ts","names":[],"sources":["../../src/utils/cx.ts"],"mappings":";qBAEa;;;;;;;;;;;;;;;;;qBA2DA,QAAE,qCAAA"}