@lindle/linoardo 1.0.16 → 1.0.18

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 (120) hide show
  1. package/dist/ExpansionPanelItem-Bd6ZWGkR.d.cts +58 -0
  2. package/dist/ExpansionPanelItem-DOjgDeB6.d.ts +58 -0
  3. package/dist/button.cjs +214 -0
  4. package/dist/button.cjs.map +1 -0
  5. package/dist/button.d.cts +20 -0
  6. package/dist/button.d.ts +20 -0
  7. package/dist/button.js +4 -0
  8. package/dist/button.js.map +1 -0
  9. package/dist/card.cjs +87 -0
  10. package/dist/card.cjs.map +1 -0
  11. package/dist/card.d.cts +34 -0
  12. package/dist/card.d.ts +34 -0
  13. package/dist/card.js +3 -0
  14. package/dist/card.js.map +1 -0
  15. package/dist/chip.cjs +247 -0
  16. package/dist/chip.cjs.map +1 -0
  17. package/dist/chip.d.cts +368 -0
  18. package/dist/chip.d.ts +368 -0
  19. package/dist/chip.js +4 -0
  20. package/dist/chip.js.map +1 -0
  21. package/dist/chunk-32KFNI6K.js +114 -0
  22. package/dist/chunk-32KFNI6K.js.map +1 -0
  23. package/dist/chunk-5GY2JCBO.js +92 -0
  24. package/dist/chunk-5GY2JCBO.js.map +1 -0
  25. package/dist/chunk-AOHXZ7OM.js +126 -0
  26. package/dist/chunk-AOHXZ7OM.js.map +1 -0
  27. package/dist/chunk-E32P5AHO.js +125 -0
  28. package/dist/chunk-E32P5AHO.js.map +1 -0
  29. package/dist/chunk-GA6HSRN6.js +235 -0
  30. package/dist/chunk-GA6HSRN6.js.map +1 -0
  31. package/dist/chunk-IEILIKS2.js +8 -0
  32. package/dist/chunk-IEILIKS2.js.map +1 -0
  33. package/dist/chunk-N65GNKRG.js +143 -0
  34. package/dist/chunk-N65GNKRG.js.map +1 -0
  35. package/dist/chunk-PWK6MLZT.js +239 -0
  36. package/dist/chunk-PWK6MLZT.js.map +1 -0
  37. package/dist/chunk-PYG5SDNO.js +98 -0
  38. package/dist/chunk-PYG5SDNO.js.map +1 -0
  39. package/dist/chunk-QGQ66FJD.js +155 -0
  40. package/dist/chunk-QGQ66FJD.js.map +1 -0
  41. package/dist/chunk-SZU6OYLS.js +187 -0
  42. package/dist/chunk-SZU6OYLS.js.map +1 -0
  43. package/dist/chunk-U6NAIIDI.js +99 -0
  44. package/dist/chunk-U6NAIIDI.js.map +1 -0
  45. package/dist/chunk-V4BVJOSC.js +85 -0
  46. package/dist/chunk-V4BVJOSC.js.map +1 -0
  47. package/dist/chunk-XFPBICJG.js +127 -0
  48. package/dist/chunk-XFPBICJG.js.map +1 -0
  49. package/dist/dialog.cjs +121 -0
  50. package/dist/dialog.cjs.map +1 -0
  51. package/dist/dialog.d.cts +17 -0
  52. package/dist/dialog.d.ts +17 -0
  53. package/dist/dialog.js +3 -0
  54. package/dist/dialog.js.map +1 -0
  55. package/dist/expansion-panel/item.cjs +195 -0
  56. package/dist/expansion-panel/item.cjs.map +1 -0
  57. package/dist/expansion-panel/item.d.cts +3 -0
  58. package/dist/expansion-panel/item.d.ts +3 -0
  59. package/dist/expansion-panel/item.js +3 -0
  60. package/dist/expansion-panel/item.js.map +1 -0
  61. package/dist/expansion-panel.cjs +356 -0
  62. package/dist/expansion-panel.cjs.map +1 -0
  63. package/dist/expansion-panel.d.cts +8 -0
  64. package/dist/expansion-panel.d.ts +8 -0
  65. package/dist/expansion-panel.js +4 -0
  66. package/dist/expansion-panel.js.map +1 -0
  67. package/dist/global.types-E2uVLemv.d.cts +7 -0
  68. package/dist/global.types-E2uVLemv.d.ts +7 -0
  69. package/dist/index-Md3BuoGM.d.cts +32 -0
  70. package/dist/index-d_JuI06O.d.ts +32 -0
  71. package/dist/index.cjs +557 -160
  72. package/dist/index.cjs.map +1 -1
  73. package/dist/index.d.cts +15 -549
  74. package/dist/index.d.ts +15 -549
  75. package/dist/index.js +14 -1330
  76. package/dist/index.js.map +1 -1
  77. package/dist/input.cjs +106 -0
  78. package/dist/input.cjs.map +1 -0
  79. package/dist/input.d.cts +22 -0
  80. package/dist/input.d.ts +22 -0
  81. package/dist/input.js +4 -0
  82. package/dist/input.js.map +1 -0
  83. package/dist/list/item.cjs +149 -0
  84. package/dist/list/item.cjs.map +1 -0
  85. package/dist/list/item.d.cts +3 -0
  86. package/dist/list/item.d.ts +3 -0
  87. package/dist/list/item.js +3 -0
  88. package/dist/list/item.js.map +1 -0
  89. package/dist/list.cjs +235 -0
  90. package/dist/list.cjs.map +1 -0
  91. package/dist/list.d.cts +17 -0
  92. package/dist/list.d.ts +17 -0
  93. package/dist/list.js +4 -0
  94. package/dist/list.js.map +1 -0
  95. package/dist/menu.cjs +177 -0
  96. package/dist/menu.cjs.map +1 -0
  97. package/dist/menu.d.cts +20 -0
  98. package/dist/menu.d.ts +20 -0
  99. package/dist/menu.js +3 -0
  100. package/dist/menu.js.map +1 -0
  101. package/dist/slider.cjs +128 -0
  102. package/dist/slider.cjs.map +1 -0
  103. package/dist/slider.d.cts +42 -0
  104. package/dist/slider.d.ts +42 -0
  105. package/dist/slider.js +3 -0
  106. package/dist/slider.js.map +1 -0
  107. package/dist/styles.css +334 -44
  108. package/dist/switch.cjs +145 -0
  109. package/dist/switch.cjs.map +1 -0
  110. package/dist/switch.d.cts +16 -0
  111. package/dist/switch.d.ts +16 -0
  112. package/dist/switch.js +3 -0
  113. package/dist/switch.js.map +1 -0
  114. package/dist/tooltip.cjs +136 -0
  115. package/dist/tooltip.cjs.map +1 -0
  116. package/dist/tooltip.d.cts +19 -0
  117. package/dist/tooltip.d.ts +19 -0
  118. package/dist/tooltip.js +3 -0
  119. package/dist/tooltip.js.map +1 -0
  120. package/package.json +67 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Containment/List/Item/index.tsx"],"names":["React","jsxs","twMerge","jsx"],"mappings":"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","file":"item.cjs","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type { Palette } from '@lindle/linoardo/global.types';\n\nimport type { ListDensity, ListLines } from '../types.list';\n\nconst listItemBaseClasses =\n 'relative flex w-full items-center gap-4 bg-transparent text-left text-sm transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2 focus-visible:ring-offset-white hover:bg-neutral-200';\n\nconst densityClasses: Record<ListDensity, string> = {\n default: 'px-4 py-3 text-base',\n comfortable: 'px-4 py-2.5 text-sm',\n compact: 'px-3 py-2 text-sm'\n};\n\nconst lineClasses: Record<ListLines, string> = {\n one: 'min-h-[3rem]',\n two: 'min-h-[3.75rem]',\n three: 'min-h-[4.5rem]'\n};\n\nconst accentClasses: Record<Palette, { text: string; bg: string; indicator: string }> = {\n primary: { text: 'text-primary', bg: 'bg-primary/10', indicator: 'bg-primary' },\n neutral: { text: 'text-gray-900', bg: 'bg-gray-100', indicator: 'bg-gray-900' },\n info: { text: 'text-sky-600', bg: 'bg-sky-50', indicator: 'bg-sky-500' },\n success: { text: 'text-emerald-600', bg: 'bg-emerald-50', indicator: 'bg-emerald-500' },\n warning: { text: 'text-amber-700', bg: 'bg-amber-50', indicator: 'bg-amber-500' },\n danger: { text: 'text-red-600', bg: 'bg-red-50', indicator: 'bg-red-500' },\n surface: { text: 'text-gray-900', bg: 'bg-gray-100', indicator: 'bg-gray-900' },\n bw: { text: 'text-gray-900', bg: 'bg-gray-100', indicator: 'bg-gray-900' }\n};\n\nexport interface ListItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {\n component?: React.ElementType;\n href?: string;\n target?: string;\n rel?: string;\n type?: 'button' | 'submit' | 'reset';\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n overline?: React.ReactNode;\n prepend?: React.ReactNode;\n append?: React.ReactNode;\n active?: boolean;\n disabled?: boolean;\n inset?: boolean;\n density?: ListDensity;\n lines?: ListLines;\n nav?: boolean;\n divided?: boolean;\n color?: Palette;\n sharp?: boolean;\n}\n\nconst ListItem = React.forwardRef<HTMLElement, ListItemProps>((props, ref) => {\n const {\n component,\n href,\n target,\n rel,\n type,\n title,\n subtitle,\n overline,\n prepend,\n append,\n active = false,\n disabled = false,\n inset = false,\n density: densityOverride,\n lines: linesOverride,\n nav: navOverride,\n divided: dividedOverride,\n color: colorOverride,\n sharp: sharpOverride,\n className,\n children,\n tabIndex,\n role,\n ...rest\n } = props;\n\n const density = densityOverride ?? 'default';\n const lines = linesOverride ?? 'one';\n const nav = navOverride ?? false;\n const divided = dividedOverride ?? false;\n const color = colorOverride ?? 'primary';\n const sharp = sharpOverride ?? false;\n const accent = accentClasses[color] ?? accentClasses.primary;\n const shapeClass = divided || sharp ? 'rounded-none' : 'rounded-lg';\n\n const Component = component ?? (href ? 'a' : 'div');\n const interactive = typeof rest.onClick === 'function' || Component === 'a' || Component === 'button';\n\n const resolvedRole = role ?? 'listitem';\n const resolvedTabIndex = disabled ? -1 : tabIndex ?? (interactive && Component === 'div' ? 0 : undefined);\n const resolvedRel = Component === 'a' ? rel : undefined;\n const resolvedTarget = Component === 'a' ? target : undefined;\n const resolvedHref = Component === 'a' ? href : undefined;\n const resolvedType = Component === 'button' ? type ?? 'button' : undefined;\n\n const disabledClass = disabled ? 'pointer-events-none opacity-60' : 'cursor-pointer';\n const navPaddingClass = nav ? 'pl-5' : undefined;\n const insetClass = inset ? 'pl-12' : undefined;\n const activeClasses = active ? accent.bg : undefined;\n\n return (\n <Component\n {...rest}\n ref={ref}\n role={resolvedRole}\n tabIndex={resolvedTabIndex}\n aria-disabled={disabled || undefined}\n aria-current={active ? 'true' : undefined}\n className={twMerge(\n listItemBaseClasses,\n densityClasses[density],\n lineClasses[lines],\n shapeClass,\n navPaddingClass,\n insetClass,\n disabledClass,\n activeClasses,\n className\n )}\n href={resolvedHref}\n target={resolvedTarget}\n rel={resolvedRel}\n type={resolvedType}\n data-active={active || undefined}\n >\n {nav && (\n <span\n aria-hidden\n className={twMerge(\n 'absolute left-1 top-2 bottom-2 w-0.5 rounded-full bg-transparent transition-colors duration-150',\n active ? accent.indicator : undefined\n )}\n />\n )}\n {prepend && (\n <span className='flex h-10 w-10 shrink-0 items-center justify-center text-base text-gray-500'>{prepend}</span>\n )}\n <span className='flex min-w-0 flex-col gap-0.5 text-left'>\n {overline && (\n <span className='text-[0.65rem] font-semibold uppercase tracking-wide text-gray-500'>{overline}</span>\n )}\n {title && (\n <span className={twMerge('truncate font-medium text-gray-900', active ? accent.text : undefined)}>\n {title}\n </span>\n )}\n {subtitle && <span className='text-sm text-gray-500'>{subtitle}</span>}\n {children}\n </span>\n {append && (\n <span className='ml-auto flex items-center gap-2 whitespace-nowrap text-sm text-gray-500'>{append}</span>\n )}\n </Component>\n );\n});\n\nListItem.displayName = 'ListItem';\n\nexport default ListItem;\nexport type { ListDensity, ListLines } from '../types.list';\n"]}
@@ -0,0 +1,3 @@
1
+ import 'react';
2
+ import '../global.types-E2uVLemv.cjs';
3
+ export { c as ListDensity, a as ListItemProps, d as ListLines, L as default } from '../index-Md3BuoGM.cjs';
@@ -0,0 +1,3 @@
1
+ import 'react';
2
+ import '../global.types-E2uVLemv.js';
3
+ export { c as ListDensity, a as ListItemProps, d as ListLines, L as default } from '../index-d_JuI06O.js';
@@ -0,0 +1,3 @@
1
+ export { Item_default as default } from '../chunk-XFPBICJG.js';
2
+ //# sourceMappingURL=item.js.map
3
+ //# sourceMappingURL=item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"item.js"}
package/dist/list.cjs ADDED
@@ -0,0 +1,235 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React2 = require('react');
6
+ var tailwindMerge = require('tailwind-merge');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React2__namespace = /*#__PURE__*/_interopNamespace(React2);
28
+
29
+ // src/Containment/List/index.tsx
30
+ var listItemBaseClasses = "relative flex w-full items-center gap-4 bg-transparent text-left text-sm transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2 focus-visible:ring-offset-white hover:bg-neutral-200";
31
+ var densityClasses = {
32
+ default: "px-4 py-3 text-base",
33
+ comfortable: "px-4 py-2.5 text-sm",
34
+ compact: "px-3 py-2 text-sm"
35
+ };
36
+ var lineClasses = {
37
+ one: "min-h-[3rem]",
38
+ two: "min-h-[3.75rem]",
39
+ three: "min-h-[4.5rem]"
40
+ };
41
+ var accentClasses = {
42
+ primary: { text: "text-primary", bg: "bg-primary/10", indicator: "bg-primary" },
43
+ neutral: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" },
44
+ info: { text: "text-sky-600", bg: "bg-sky-50", indicator: "bg-sky-500" },
45
+ success: { text: "text-emerald-600", bg: "bg-emerald-50", indicator: "bg-emerald-500" },
46
+ warning: { text: "text-amber-700", bg: "bg-amber-50", indicator: "bg-amber-500" },
47
+ danger: { text: "text-red-600", bg: "bg-red-50", indicator: "bg-red-500" },
48
+ surface: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" },
49
+ bw: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" }
50
+ };
51
+ var ListItem = React2__namespace.forwardRef((props, ref) => {
52
+ const {
53
+ component,
54
+ href,
55
+ target,
56
+ rel,
57
+ type,
58
+ title,
59
+ subtitle,
60
+ overline,
61
+ prepend,
62
+ append,
63
+ active = false,
64
+ disabled = false,
65
+ inset = false,
66
+ density: densityOverride,
67
+ lines: linesOverride,
68
+ nav: navOverride,
69
+ divided: dividedOverride,
70
+ color: colorOverride,
71
+ sharp: sharpOverride,
72
+ className,
73
+ children,
74
+ tabIndex,
75
+ role,
76
+ ...rest
77
+ } = props;
78
+ const density = densityOverride ?? "default";
79
+ const lines = linesOverride ?? "one";
80
+ const nav = navOverride ?? false;
81
+ const divided = dividedOverride ?? false;
82
+ const color = colorOverride ?? "primary";
83
+ const sharp = sharpOverride ?? false;
84
+ const accent = accentClasses[color] ?? accentClasses.primary;
85
+ const shapeClass = divided || sharp ? "rounded-none" : "rounded-lg";
86
+ const Component = component ?? (href ? "a" : "div");
87
+ const interactive = typeof rest.onClick === "function" || Component === "a" || Component === "button";
88
+ const resolvedRole = role ?? "listitem";
89
+ const resolvedTabIndex = disabled ? -1 : tabIndex ?? (interactive && Component === "div" ? 0 : void 0);
90
+ const resolvedRel = Component === "a" ? rel : void 0;
91
+ const resolvedTarget = Component === "a" ? target : void 0;
92
+ const resolvedHref = Component === "a" ? href : void 0;
93
+ const resolvedType = Component === "button" ? type ?? "button" : void 0;
94
+ const disabledClass = disabled ? "pointer-events-none opacity-60" : "cursor-pointer";
95
+ const navPaddingClass = nav ? "pl-5" : void 0;
96
+ const insetClass = inset ? "pl-12" : void 0;
97
+ const activeClasses = active ? accent.bg : void 0;
98
+ return /* @__PURE__ */ jsxRuntime.jsxs(
99
+ Component,
100
+ {
101
+ ...rest,
102
+ ref,
103
+ role: resolvedRole,
104
+ tabIndex: resolvedTabIndex,
105
+ "aria-disabled": disabled || void 0,
106
+ "aria-current": active ? "true" : void 0,
107
+ className: tailwindMerge.twMerge(
108
+ listItemBaseClasses,
109
+ densityClasses[density],
110
+ lineClasses[lines],
111
+ shapeClass,
112
+ navPaddingClass,
113
+ insetClass,
114
+ disabledClass,
115
+ activeClasses,
116
+ className
117
+ ),
118
+ href: resolvedHref,
119
+ target: resolvedTarget,
120
+ rel: resolvedRel,
121
+ type: resolvedType,
122
+ "data-active": active || void 0,
123
+ children: [
124
+ nav && /* @__PURE__ */ jsxRuntime.jsx(
125
+ "span",
126
+ {
127
+ "aria-hidden": true,
128
+ className: tailwindMerge.twMerge(
129
+ "absolute left-1 top-2 bottom-2 w-0.5 rounded-full bg-transparent transition-colors duration-150",
130
+ active ? accent.indicator : void 0
131
+ )
132
+ }
133
+ ),
134
+ prepend && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-10 w-10 shrink-0 items-center justify-center text-base text-gray-500", children: prepend }),
135
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-col gap-0.5 text-left", children: [
136
+ overline && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[0.65rem] font-semibold uppercase tracking-wide text-gray-500", children: overline }),
137
+ title && /* @__PURE__ */ jsxRuntime.jsx("span", { className: tailwindMerge.twMerge("truncate font-medium text-gray-900", active ? accent.text : void 0), children: title }),
138
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-gray-500", children: subtitle }),
139
+ children
140
+ ] }),
141
+ append && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto flex items-center gap-2 whitespace-nowrap text-sm text-gray-500", children: append })
142
+ ]
143
+ }
144
+ );
145
+ });
146
+ ListItem.displayName = "ListItem";
147
+ var Item_default = ListItem;
148
+ var listBaseClasses = "flex w-full min-w-0 flex-col text-gray-900 transition-colors duration-150";
149
+ var listVariantClasses = {
150
+ solid: "bg-white border border-gray-200 shadow-sm shadow-gray-900/5",
151
+ sharp: "bg-white border border-gray-200 shadow-sm shadow-gray-900/5 rounded-none",
152
+ outline: "bg-transparent border border-gray-300",
153
+ ghost: "bg-gray-50 border border-transparent",
154
+ text: "bg-transparent border border-transparent",
155
+ filled: "bg-gray-50 border border-gray-200 shadow-inner shadow-gray-900/5",
156
+ underlined: "bg-transparent border border-transparent border-b border-gray-200 rounded-none",
157
+ rounded: "bg-white border border-gray-200 shadow-lg shadow-gray-900/10"
158
+ };
159
+ var listRoundedClasses = {
160
+ none: "rounded-none",
161
+ sm: "rounded-sm",
162
+ md: "rounded-md",
163
+ lg: "rounded-lg",
164
+ xl: "rounded-xl",
165
+ pill: "rounded-full"
166
+ };
167
+ var isListItemElement = (element) => {
168
+ if (!React2__namespace.isValidElement(element)) {
169
+ return false;
170
+ }
171
+ const elementType = element.type;
172
+ return element.type === Item_default || elementType.displayName === Item_default.displayName;
173
+ };
174
+ var List = React2__namespace.forwardRef((props, ref) => {
175
+ const {
176
+ variant = "solid",
177
+ density = "default",
178
+ lines = "one",
179
+ nav = false,
180
+ divided = false,
181
+ rounded = "lg",
182
+ color = "primary",
183
+ className,
184
+ role,
185
+ children,
186
+ ...rest
187
+ } = props;
188
+ const isSharpVariant = variant === "sharp";
189
+ const variantClass = listVariantClasses[variant] ?? listVariantClasses.solid;
190
+ const roundedClass = isSharpVariant ? "rounded-none" : listRoundedClasses[rounded] ?? listRoundedClasses.lg;
191
+ const dividerClass = divided ? "divide-y divide-gray-100" : void 0;
192
+ const gapClass = divided ? "p-0" : "gap-1 p-1";
193
+ const navClass = nav ? "py-1" : void 0;
194
+ const accentColor = color;
195
+ const enhanceChild = (child) => {
196
+ if (!React2__namespace.isValidElement(child)) {
197
+ return child;
198
+ }
199
+ if (isListItemElement(child)) {
200
+ return React2__namespace.cloneElement(child, {
201
+ density: child.props.density ?? density,
202
+ lines: child.props.lines ?? lines,
203
+ nav: child.props.nav ?? nav,
204
+ divided: child.props.divided ?? divided,
205
+ color: child.props.color ?? accentColor,
206
+ sharp: child.props.sharp ?? isSharpVariant
207
+ });
208
+ }
209
+ if (child.props && typeof child.props === "object" && "children" in child.props) {
210
+ const nestedChildren = React2__namespace.Children.map(child.props.children, enhanceChild);
211
+ if (nestedChildren !== child.props.children) {
212
+ return React2__namespace.cloneElement(child, void 0, nestedChildren);
213
+ }
214
+ }
215
+ return child;
216
+ };
217
+ const resolvedChildren = React2__namespace.Children.map(children, enhanceChild);
218
+ return /* @__PURE__ */ jsxRuntime.jsx(
219
+ "div",
220
+ {
221
+ ...rest,
222
+ ref,
223
+ role: role ?? "list",
224
+ className: tailwindMerge.twMerge(listBaseClasses, variantClass, roundedClass, dividerClass, gapClass, navClass, className),
225
+ children: resolvedChildren
226
+ }
227
+ );
228
+ });
229
+ List.displayName = "List";
230
+ var List_default = List;
231
+
232
+ exports.ListItem = Item_default;
233
+ exports.default = List_default;
234
+ //# sourceMappingURL=list.cjs.map
235
+ //# sourceMappingURL=list.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Containment/List/Item/index.tsx","../src/Containment/List/index.tsx"],"names":["React","jsxs","twMerge","jsx","React2"],"mappings":"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","file":"list.cjs","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type { Palette } from '@lindle/linoardo/global.types';\n\nimport type { ListDensity, ListLines } from '../types.list';\n\nconst listItemBaseClasses =\n 'relative flex w-full items-center gap-4 bg-transparent text-left text-sm transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2 focus-visible:ring-offset-white hover:bg-neutral-200';\n\nconst densityClasses: Record<ListDensity, string> = {\n default: 'px-4 py-3 text-base',\n comfortable: 'px-4 py-2.5 text-sm',\n compact: 'px-3 py-2 text-sm'\n};\n\nconst lineClasses: Record<ListLines, string> = {\n one: 'min-h-[3rem]',\n two: 'min-h-[3.75rem]',\n three: 'min-h-[4.5rem]'\n};\n\nconst accentClasses: Record<Palette, { text: string; bg: string; indicator: string }> = {\n primary: { text: 'text-primary', bg: 'bg-primary/10', indicator: 'bg-primary' },\n neutral: { text: 'text-gray-900', bg: 'bg-gray-100', indicator: 'bg-gray-900' },\n info: { text: 'text-sky-600', bg: 'bg-sky-50', indicator: 'bg-sky-500' },\n success: { text: 'text-emerald-600', bg: 'bg-emerald-50', indicator: 'bg-emerald-500' },\n warning: { text: 'text-amber-700', bg: 'bg-amber-50', indicator: 'bg-amber-500' },\n danger: { text: 'text-red-600', bg: 'bg-red-50', indicator: 'bg-red-500' },\n surface: { text: 'text-gray-900', bg: 'bg-gray-100', indicator: 'bg-gray-900' },\n bw: { text: 'text-gray-900', bg: 'bg-gray-100', indicator: 'bg-gray-900' }\n};\n\nexport interface ListItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'title'> {\n component?: React.ElementType;\n href?: string;\n target?: string;\n rel?: string;\n type?: 'button' | 'submit' | 'reset';\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n overline?: React.ReactNode;\n prepend?: React.ReactNode;\n append?: React.ReactNode;\n active?: boolean;\n disabled?: boolean;\n inset?: boolean;\n density?: ListDensity;\n lines?: ListLines;\n nav?: boolean;\n divided?: boolean;\n color?: Palette;\n sharp?: boolean;\n}\n\nconst ListItem = React.forwardRef<HTMLElement, ListItemProps>((props, ref) => {\n const {\n component,\n href,\n target,\n rel,\n type,\n title,\n subtitle,\n overline,\n prepend,\n append,\n active = false,\n disabled = false,\n inset = false,\n density: densityOverride,\n lines: linesOverride,\n nav: navOverride,\n divided: dividedOverride,\n color: colorOverride,\n sharp: sharpOverride,\n className,\n children,\n tabIndex,\n role,\n ...rest\n } = props;\n\n const density = densityOverride ?? 'default';\n const lines = linesOverride ?? 'one';\n const nav = navOverride ?? false;\n const divided = dividedOverride ?? false;\n const color = colorOverride ?? 'primary';\n const sharp = sharpOverride ?? false;\n const accent = accentClasses[color] ?? accentClasses.primary;\n const shapeClass = divided || sharp ? 'rounded-none' : 'rounded-lg';\n\n const Component = component ?? (href ? 'a' : 'div');\n const interactive = typeof rest.onClick === 'function' || Component === 'a' || Component === 'button';\n\n const resolvedRole = role ?? 'listitem';\n const resolvedTabIndex = disabled ? -1 : tabIndex ?? (interactive && Component === 'div' ? 0 : undefined);\n const resolvedRel = Component === 'a' ? rel : undefined;\n const resolvedTarget = Component === 'a' ? target : undefined;\n const resolvedHref = Component === 'a' ? href : undefined;\n const resolvedType = Component === 'button' ? type ?? 'button' : undefined;\n\n const disabledClass = disabled ? 'pointer-events-none opacity-60' : 'cursor-pointer';\n const navPaddingClass = nav ? 'pl-5' : undefined;\n const insetClass = inset ? 'pl-12' : undefined;\n const activeClasses = active ? accent.bg : undefined;\n\n return (\n <Component\n {...rest}\n ref={ref}\n role={resolvedRole}\n tabIndex={resolvedTabIndex}\n aria-disabled={disabled || undefined}\n aria-current={active ? 'true' : undefined}\n className={twMerge(\n listItemBaseClasses,\n densityClasses[density],\n lineClasses[lines],\n shapeClass,\n navPaddingClass,\n insetClass,\n disabledClass,\n activeClasses,\n className\n )}\n href={resolvedHref}\n target={resolvedTarget}\n rel={resolvedRel}\n type={resolvedType}\n data-active={active || undefined}\n >\n {nav && (\n <span\n aria-hidden\n className={twMerge(\n 'absolute left-1 top-2 bottom-2 w-0.5 rounded-full bg-transparent transition-colors duration-150',\n active ? accent.indicator : undefined\n )}\n />\n )}\n {prepend && (\n <span className='flex h-10 w-10 shrink-0 items-center justify-center text-base text-gray-500'>{prepend}</span>\n )}\n <span className='flex min-w-0 flex-col gap-0.5 text-left'>\n {overline && (\n <span className='text-[0.65rem] font-semibold uppercase tracking-wide text-gray-500'>{overline}</span>\n )}\n {title && (\n <span className={twMerge('truncate font-medium text-gray-900', active ? accent.text : undefined)}>\n {title}\n </span>\n )}\n {subtitle && <span className='text-sm text-gray-500'>{subtitle}</span>}\n {children}\n </span>\n {append && (\n <span className='ml-auto flex items-center gap-2 whitespace-nowrap text-sm text-gray-500'>{append}</span>\n )}\n </Component>\n );\n});\n\nListItem.displayName = 'ListItem';\n\nexport default ListItem;\nexport type { ListDensity, ListLines } from '../types.list';\n","import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type { Palette } from '@lindle/linoardo/global.types';\n\nimport ListItem from './Item';\nimport type { ListItemProps } from './Item';\nimport type { ListDensity, ListLines, ListRounded, ListVariant } from './types.list';\n\nconst listBaseClasses = 'flex w-full min-w-0 flex-col text-gray-900 transition-colors duration-150';\n\nconst listVariantClasses: Record<ListVariant, string> = {\n solid: 'bg-white border border-gray-200 shadow-sm shadow-gray-900/5',\n sharp: 'bg-white border border-gray-200 shadow-sm shadow-gray-900/5 rounded-none',\n outline: 'bg-transparent border border-gray-300',\n ghost: 'bg-gray-50 border border-transparent',\n text: 'bg-transparent border border-transparent',\n filled: 'bg-gray-50 border border-gray-200 shadow-inner shadow-gray-900/5',\n underlined: 'bg-transparent border border-transparent border-b border-gray-200 rounded-none',\n rounded: 'bg-white border border-gray-200 shadow-lg shadow-gray-900/10'\n};\n\nconst listRoundedClasses: Record<ListRounded, string> = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n pill: 'rounded-full'\n};\n\nexport interface ListProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: ListVariant;\n density?: ListDensity;\n lines?: ListLines;\n nav?: boolean;\n divided?: boolean;\n rounded?: ListRounded;\n color?: Palette;\n}\n\nconst isListItemElement = (element: React.ReactNode): element is React.ReactElement<ListItemProps> => {\n if (!React.isValidElement(element)) {\n return false;\n }\n\n const elementType = element.type as { displayName?: string };\n return element.type === ListItem || elementType.displayName === ListItem.displayName;\n};\n\nconst List = React.forwardRef<HTMLDivElement, ListProps>((props, ref) => {\n const {\n variant = 'solid',\n density = 'default',\n lines = 'one',\n nav = false,\n divided = false,\n rounded = 'lg',\n color = 'primary',\n className,\n role,\n children,\n ...rest\n } = props;\n\n const isSharpVariant = variant === 'sharp';\n const variantClass = listVariantClasses[variant] ?? listVariantClasses.solid;\n const roundedClass = isSharpVariant ? 'rounded-none' : listRoundedClasses[rounded] ?? listRoundedClasses.lg;\n const dividerClass = divided ? 'divide-y divide-gray-100' : undefined;\n const gapClass = divided ? 'p-0' : 'gap-1 p-1';\n const navClass = nav ? 'py-1' : undefined;\n const accentColor = color;\n\n const enhanceChild = (child: React.ReactNode): React.ReactNode => {\n if (!React.isValidElement(child)) {\n return child;\n }\n\n if (isListItemElement(child)) {\n return React.cloneElement(child, {\n density: child.props.density ?? density,\n lines: child.props.lines ?? lines,\n nav: child.props.nav ?? nav,\n divided: child.props.divided ?? divided,\n color: child.props.color ?? accentColor,\n sharp: child.props.sharp ?? isSharpVariant\n });\n }\n\n if (child.props && typeof child.props === 'object' && 'children' in child.props) {\n const nestedChildren = React.Children.map(child.props.children as React.ReactNode, enhanceChild);\n if (nestedChildren !== child.props.children) {\n return React.cloneElement(child, undefined, nestedChildren);\n }\n }\n\n return child;\n };\n\n const resolvedChildren = React.Children.map(children, enhanceChild);\n\n return (\n <div\n {...rest}\n ref={ref}\n role={role ?? 'list'}\n className={twMerge(listBaseClasses, variantClass, roundedClass, dividerClass, gapClass, navClass, className)}\n >\n {resolvedChildren}\n </div>\n );\n});\n\nList.displayName = 'List';\n\nexport { ListItem };\nexport type { ListItemProps } from './Item';\nexport type { ListVariant, ListDensity, ListLines, ListRounded } from './types.list';\nexport default List;\n"]}
@@ -0,0 +1,17 @@
1
+ import * as react from 'react';
2
+ import { P as Palette } from './global.types-E2uVLemv.cjs';
3
+ import { b as ListVariant, c as ListDensity, d as ListLines, e as ListRounded } from './index-Md3BuoGM.cjs';
4
+ export { L as ListItem, a as ListItemProps } from './index-Md3BuoGM.cjs';
5
+
6
+ interface ListProps extends react.HTMLAttributes<HTMLDivElement> {
7
+ variant?: ListVariant;
8
+ density?: ListDensity;
9
+ lines?: ListLines;
10
+ nav?: boolean;
11
+ divided?: boolean;
12
+ rounded?: ListRounded;
13
+ color?: Palette;
14
+ }
15
+ declare const List: react.ForwardRefExoticComponent<ListProps & react.RefAttributes<HTMLDivElement>>;
16
+
17
+ export { ListDensity, ListLines, type ListProps, ListRounded, ListVariant, List as default };
package/dist/list.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import * as react from 'react';
2
+ import { P as Palette } from './global.types-E2uVLemv.js';
3
+ import { b as ListVariant, c as ListDensity, d as ListLines, e as ListRounded } from './index-d_JuI06O.js';
4
+ export { L as ListItem, a as ListItemProps } from './index-d_JuI06O.js';
5
+
6
+ interface ListProps extends react.HTMLAttributes<HTMLDivElement> {
7
+ variant?: ListVariant;
8
+ density?: ListDensity;
9
+ lines?: ListLines;
10
+ nav?: boolean;
11
+ divided?: boolean;
12
+ rounded?: ListRounded;
13
+ color?: Palette;
14
+ }
15
+ declare const List: react.ForwardRefExoticComponent<ListProps & react.RefAttributes<HTMLDivElement>>;
16
+
17
+ export { ListDensity, ListLines, type ListProps, ListRounded, ListVariant, List as default };
package/dist/list.js ADDED
@@ -0,0 +1,4 @@
1
+ export { List_default as default } from './chunk-5GY2JCBO.js';
2
+ export { Item_default as ListItem } from './chunk-XFPBICJG.js';
3
+ //# sourceMappingURL=list.js.map
4
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"list.js"}
package/dist/menu.cjs ADDED
@@ -0,0 +1,177 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var tailwindMerge = require('tailwind-merge');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
26
+
27
+ // src/Containment/Menu/index.tsx
28
+ var placementClasses = {
29
+ "bottom-start": "left-0 top-full origin-top-left",
30
+ bottom: "left-1/2 top-full -translate-x-1/2 origin-top",
31
+ "bottom-end": "right-0 top-full origin-top-right",
32
+ "top-start": "left-0 bottom-full origin-bottom-left",
33
+ top: "left-1/2 bottom-full -translate-x-1/2 origin-bottom",
34
+ "top-end": "right-0 bottom-full origin-bottom-right"
35
+ };
36
+ var offsetClasses = {
37
+ top: "mb-2",
38
+ bottom: "mt-2"
39
+ };
40
+ var menuBaseClasses = "absolute z-50 min-w-[10rem] rounded-xl border border-gray-200/80 bg-white/95 p-2 text-sm text-gray-700 shadow-lg shadow-gray-900/10 ring-1 ring-black/5 backdrop-blur-md transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2";
41
+ var overlayBaseClasses = "fixed inset-0 z-40 bg-gray-900/30 backdrop-blur-[1px]";
42
+ var Menu = React__namespace.forwardRef((props, ref) => {
43
+ const {
44
+ activator,
45
+ children,
46
+ placement = "bottom-start",
47
+ open,
48
+ openOnHover = true,
49
+ openOnFocus = true,
50
+ matchActivatorWidth = false,
51
+ keepMounted = false,
52
+ scrim = false,
53
+ contentClassName,
54
+ contentProps,
55
+ overlayClassName,
56
+ className,
57
+ ...rest
58
+ } = props;
59
+ const { onMouseEnter, onMouseLeave, onFocus, onBlur, ...restProps } = rest;
60
+ const hasContent = children !== void 0 && children !== null;
61
+ const isControlled = typeof open === "boolean";
62
+ const [uncontrolledOpen, setUncontrolledOpen] = React__namespace.useState(false);
63
+ const closeTimer = React__namespace.useRef(null);
64
+ const visible = isControlled ? Boolean(open) : uncontrolledOpen;
65
+ const shouldRenderContent = hasContent && (keepMounted || visible || !isControlled && (openOnHover || openOnFocus));
66
+ const verticalPlacement = placement.startsWith("top") ? "top" : "bottom";
67
+ const clearCloseTimer = () => {
68
+ if (closeTimer.current !== null) {
69
+ window.clearTimeout(closeTimer.current);
70
+ closeTimer.current = null;
71
+ }
72
+ };
73
+ const openMenu = () => {
74
+ clearCloseTimer();
75
+ if (!isControlled) {
76
+ setUncontrolledOpen(true);
77
+ }
78
+ };
79
+ const scheduleClose = () => {
80
+ clearCloseTimer();
81
+ if (!isControlled) {
82
+ closeTimer.current = window.setTimeout(() => {
83
+ setUncontrolledOpen(false);
84
+ closeTimer.current = null;
85
+ }, 120);
86
+ }
87
+ };
88
+ React__namespace.useEffect(() => {
89
+ return () => clearCloseTimer();
90
+ }, []);
91
+ const visibilityClasses = visible ? "pointer-events-auto opacity-100 scale-100" : "pointer-events-none opacity-0 scale-95";
92
+ const {
93
+ className: contentExtraClassName,
94
+ style: contentStyle,
95
+ role: contentRole,
96
+ tabIndex: contentTabIndex,
97
+ ...restContentProps
98
+ } = contentProps ?? {};
99
+ const overlayNode = scrim && visible ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: tailwindMerge.twMerge(overlayBaseClasses, overlayClassName), "aria-hidden": true }) : null;
100
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
101
+ overlayNode,
102
+ /* @__PURE__ */ jsxRuntime.jsxs(
103
+ "div",
104
+ {
105
+ ...restProps,
106
+ ref,
107
+ className: tailwindMerge.twMerge("relative inline-flex min-w-0 group/menu", className),
108
+ "data-open": visible || void 0,
109
+ onMouseEnter: (event) => {
110
+ if (openOnHover) {
111
+ openMenu();
112
+ }
113
+ onMouseEnter?.(event);
114
+ },
115
+ onMouseLeave: (event) => {
116
+ if (openOnHover) {
117
+ scheduleClose();
118
+ }
119
+ onMouseLeave?.(event);
120
+ },
121
+ onFocus: (event) => {
122
+ if (openOnFocus) {
123
+ openMenu();
124
+ }
125
+ onFocus?.(event);
126
+ },
127
+ onBlur: (event) => {
128
+ if (openOnFocus) {
129
+ scheduleClose();
130
+ }
131
+ onBlur?.(event);
132
+ },
133
+ children: [
134
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "inline-flex w-full min-w-0", children: activator }),
135
+ shouldRenderContent ? /* @__PURE__ */ jsxRuntime.jsx(
136
+ "div",
137
+ {
138
+ ...restContentProps,
139
+ className: tailwindMerge.twMerge(
140
+ menuBaseClasses,
141
+ placementClasses[placement],
142
+ offsetClasses[verticalPlacement],
143
+ matchActivatorWidth ? "min-w-full" : void 0,
144
+ visibilityClasses,
145
+ contentClassName,
146
+ contentExtraClassName
147
+ ),
148
+ "data-state": visible ? "open" : "closed",
149
+ role: contentRole ?? "menu",
150
+ tabIndex: contentTabIndex ?? -1,
151
+ style: contentStyle,
152
+ onMouseEnter: (event) => {
153
+ if (openOnHover) {
154
+ openMenu();
155
+ }
156
+ restContentProps?.onMouseEnter?.(event);
157
+ },
158
+ onMouseLeave: (event) => {
159
+ if (openOnHover) {
160
+ scheduleClose();
161
+ }
162
+ restContentProps?.onMouseLeave?.(event);
163
+ },
164
+ children
165
+ }
166
+ ) : null
167
+ ]
168
+ }
169
+ )
170
+ ] });
171
+ });
172
+ Menu.displayName = "Menu";
173
+ var Menu_default = Menu;
174
+
175
+ module.exports = Menu_default;
176
+ //# sourceMappingURL=menu.cjs.map
177
+ //# sourceMappingURL=menu.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Containment/Menu/index.tsx"],"names":["React","jsx","twMerge","jsxs","Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,IAAM,gBAAA,GAAkD;AAAA,EACtD,cAAA,EAAgB,iCAAA;AAAA,EAChB,MAAA,EAAQ,+CAAA;AAAA,EACR,YAAA,EAAc,mCAAA;AAAA,EACd,WAAA,EAAa,uCAAA;AAAA,EACb,GAAA,EAAK,qDAAA;AAAA,EACL,SAAA,EAAW;AACb,CAAA;AAEA,IAAM,aAAA,GAAkD;AAAA,EACtD,GAAA,EAAK,MAAA;AAAA,EACL,MAAA,EAAQ;AACV,CAAA;AAEA,IAAM,eAAA,GACJ,gTAAA;AAEF,IAAM,kBAAA,GAAqB,uDAAA;AAE3B,IAAM,IAAA,GAAaA,gBAAA,CAAA,UAAA,CAAsC,CAAC,KAAA,EAAO,GAAA,KAAQ;AACvE,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA,GAAY,cAAA;AAAA,IACZ,IAAA;AAAA,IACA,WAAA,GAAc,IAAA;AAAA,IACd,WAAA,GAAc,IAAA;AAAA,IACd,mBAAA,GAAsB,KAAA;AAAA,IACtB,WAAA,GAAc,KAAA;AAAA,IACd,KAAA,GAAQ,KAAA;AAAA,IACR,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAc,SAAS,MAAA,EAAQ,GAAG,WAAU,GAAI,IAAA;AAEtE,EAAA,MAAM,UAAA,GAAa,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,IAAA;AAC1D,EAAA,MAAM,YAAA,GAAe,OAAO,IAAA,KAAS,SAAA;AACrC,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAUA,0BAAS,KAAK,CAAA;AACpE,EAAA,MAAM,UAAA,GAAmBA,wBAAsB,IAAI,CAAA;AACnD,EAAA,MAAM,OAAA,GAAU,YAAA,GAAe,OAAA,CAAQ,IAAI,CAAA,GAAI,gBAAA;AAC/C,EAAA,MAAM,sBAAsB,UAAA,KAAe,WAAA,IAAe,OAAA,IAAY,CAAC,iBAAiB,WAAA,IAAe,WAAA,CAAA,CAAA;AACvG,EAAA,MAAM,iBAAA,GAAoB,SAAA,CAAU,UAAA,CAAW,KAAK,IAAI,KAAA,GAAQ,QAAA;AAEhE,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,IAAI,UAAA,CAAW,YAAY,IAAA,EAAM;AAC/B,MAAA,MAAA,CAAO,YAAA,CAAa,WAAW,OAAO,CAAA;AACtC,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,IACvB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,eAAA,EAAgB;AAChB,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,eAAA,EAAgB;AAChB,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,UAAA,CAAW,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,MAAM;AAC3C,QAAA,mBAAA,CAAoB,KAAK,CAAA;AACzB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB,GAAG,GAAG,CAAA;AAAA,IACR;AAAA,EACF,CAAA;AAEA,EAAMA,2BAAU,MAAM;AACpB,IAAA,OAAO,MAAM,eAAA,EAAgB;AAAA,EAC/B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,iBAAA,GAAoB,UAAU,2CAAA,GAA8C,wCAAA;AAElF,EAAA,MAAM;AAAA,IACJ,SAAA,EAAW,qBAAA;AAAA,IACX,KAAA,EAAO,YAAA;AAAA,IACP,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,eAAA;AAAA,IACV,GAAG;AAAA,GACL,GAAI,gBAAgB,EAAC;AAErB,EAAA,MAAM,WAAA,GAAc,KAAA,IAAS,OAAA,mBAAUC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,qBAAA,CAAQ,kBAAA,EAAoB,gBAAgB,CAAA,EAAG,aAAA,EAAW,IAAA,EAAC,CAAA,GAAK,IAAA;AAEvH,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,WAAA;AAAA,oBACDD,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACE,GAAG,SAAA;AAAA,QACJ,GAAA;AAAA,QACA,SAAA,EAAWD,qBAAA,CAAQ,yCAAA,EAA2C,SAAS,CAAA;AAAA,QACvE,aAAW,OAAA,IAAW,MAAA;AAAA,QACtB,cAAc,CAAA,KAAA,KAAS;AACrB,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,QAAA,EAAS;AAAA,UACX;AACA,UAAA,YAAA,GAAe,KAAK,CAAA;AAAA,QACtB,CAAA;AAAA,QACA,cAAc,CAAA,KAAA,KAAS;AACrB,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,aAAA,EAAc;AAAA,UAChB;AACA,UAAA,YAAA,GAAe,KAAK,CAAA;AAAA,QACtB,CAAA;AAAA,QACA,SAAS,CAAA,KAAA,KAAS;AAChB,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,QAAA,EAAS;AAAA,UACX;AACA,UAAA,OAAA,GAAU,KAAK,CAAA;AAAA,QACjB,CAAA;AAAA,QACA,QAAQ,CAAA,KAAA,KAAS;AACf,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,aAAA,EAAc;AAAA,UAChB;AACA,UAAA,MAAA,GAAS,KAAK,CAAA;AAAA,QAChB,CAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EAA8B,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,UACtD,mBAAA,mBACCA,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACE,GAAG,gBAAA;AAAA,cACJ,SAAA,EAAWC,qBAAA;AAAA,gBACT,eAAA;AAAA,gBACA,iBAAiB,SAAS,CAAA;AAAA,gBAC1B,cAAc,iBAAiB,CAAA;AAAA,gBAC/B,sBAAsB,YAAA,GAAe,MAAA;AAAA,gBACrC,iBAAA;AAAA,gBACA,gBAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,YAAA,EAAY,UAAU,MAAA,GAAS,QAAA;AAAA,cAC/B,MAAM,WAAA,IAAe,MAAA;AAAA,cACrB,UAAU,eAAA,IAAmB,EAAA;AAAA,cAC7B,KAAA,EAAO,YAAA;AAAA,cACP,cAAc,CAAA,KAAA,KAAS;AACrB,gBAAA,IAAI,WAAA,EAAa;AACf,kBAAA,QAAA,EAAS;AAAA,gBACX;AACA,gBAAA,gBAAA,EAAkB,eAAe,KAAK,CAAA;AAAA,cACxC,CAAA;AAAA,cACA,cAAc,CAAA,KAAA,KAAS;AACrB,gBAAA,IAAI,WAAA,EAAa;AACf,kBAAA,aAAA,EAAc;AAAA,gBAChB;AACA,gBAAA,gBAAA,EAAkB,eAAe,KAAK,CAAA;AAAA,cACxC,CAAA;AAAA,cAEC;AAAA;AAAA,WACH,GACE;AAAA;AAAA;AAAA;AACN,GAAA,EACF,CAAA;AAEJ,CAAC,CAAA;AAED,IAAA,CAAK,WAAA,GAAc,MAAA;AAEnB,IAAO,YAAA,GAAQ","file":"menu.cjs","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport type MenuPlacement = 'bottom-start' | 'bottom' | 'bottom-end' | 'top-start' | 'top' | 'top-end';\n\nexport interface MenuProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n activator: React.ReactNode;\n children: React.ReactNode;\n placement?: MenuPlacement;\n open?: boolean;\n openOnHover?: boolean;\n openOnFocus?: boolean;\n matchActivatorWidth?: boolean;\n keepMounted?: boolean;\n scrim?: boolean;\n contentClassName?: string;\n contentProps?: React.HTMLAttributes<HTMLDivElement>;\n overlayClassName?: string;\n}\n\nconst placementClasses: Record<MenuPlacement, string> = {\n 'bottom-start': 'left-0 top-full origin-top-left',\n bottom: 'left-1/2 top-full -translate-x-1/2 origin-top',\n 'bottom-end': 'right-0 top-full origin-top-right',\n 'top-start': 'left-0 bottom-full origin-bottom-left',\n top: 'left-1/2 bottom-full -translate-x-1/2 origin-bottom',\n 'top-end': 'right-0 bottom-full origin-bottom-right'\n};\n\nconst offsetClasses: Record<'top' | 'bottom', string> = {\n top: 'mb-2',\n bottom: 'mt-2'\n};\n\nconst menuBaseClasses =\n 'absolute z-50 min-w-[10rem] rounded-xl border border-gray-200/80 bg-white/95 p-2 text-sm text-gray-700 shadow-lg shadow-gray-900/10 ring-1 ring-black/5 backdrop-blur-md transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2';\n\nconst overlayBaseClasses = 'fixed inset-0 z-40 bg-gray-900/30 backdrop-blur-[1px]';\n\nconst Menu = React.forwardRef<HTMLDivElement, MenuProps>((props, ref) => {\n const {\n activator,\n children,\n placement = 'bottom-start',\n open,\n openOnHover = true,\n openOnFocus = true,\n matchActivatorWidth = false,\n keepMounted = false,\n scrim = false,\n contentClassName,\n contentProps,\n overlayClassName,\n className,\n ...rest\n } = props;\n\n const { onMouseEnter, onMouseLeave, onFocus, onBlur, ...restProps } = rest;\n\n const hasContent = children !== undefined && children !== null;\n const isControlled = typeof open === 'boolean';\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n const closeTimer = React.useRef<number | null>(null);\n const visible = isControlled ? Boolean(open) : uncontrolledOpen;\n const shouldRenderContent = hasContent && (keepMounted || visible || (!isControlled && (openOnHover || openOnFocus)));\n const verticalPlacement = placement.startsWith('top') ? 'top' : 'bottom';\n\n const clearCloseTimer = () => {\n if (closeTimer.current !== null) {\n window.clearTimeout(closeTimer.current);\n closeTimer.current = null;\n }\n };\n\n const openMenu = () => {\n clearCloseTimer();\n if (!isControlled) {\n setUncontrolledOpen(true);\n }\n };\n\n const scheduleClose = () => {\n clearCloseTimer();\n if (!isControlled) {\n closeTimer.current = window.setTimeout(() => {\n setUncontrolledOpen(false);\n closeTimer.current = null;\n }, 120);\n }\n };\n\n React.useEffect(() => {\n return () => clearCloseTimer();\n }, []);\n\n const visibilityClasses = visible ? 'pointer-events-auto opacity-100 scale-100' : 'pointer-events-none opacity-0 scale-95';\n\n const {\n className: contentExtraClassName,\n style: contentStyle,\n role: contentRole,\n tabIndex: contentTabIndex,\n ...restContentProps\n } = contentProps ?? {};\n\n const overlayNode = scrim && visible ? <div className={twMerge(overlayBaseClasses, overlayClassName)} aria-hidden /> : null;\n\n return (\n <>\n {overlayNode}\n <div\n {...restProps}\n ref={ref}\n className={twMerge('relative inline-flex min-w-0 group/menu', className)}\n data-open={visible || undefined}\n onMouseEnter={event => {\n if (openOnHover) {\n openMenu();\n }\n onMouseEnter?.(event);\n }}\n onMouseLeave={event => {\n if (openOnHover) {\n scheduleClose();\n }\n onMouseLeave?.(event);\n }}\n onFocus={event => {\n if (openOnFocus) {\n openMenu();\n }\n onFocus?.(event);\n }}\n onBlur={event => {\n if (openOnFocus) {\n scheduleClose();\n }\n onBlur?.(event);\n }}\n >\n <div className='inline-flex w-full min-w-0'>{activator}</div>\n {shouldRenderContent ? (\n <div\n {...restContentProps}\n className={twMerge(\n menuBaseClasses,\n placementClasses[placement],\n offsetClasses[verticalPlacement],\n matchActivatorWidth ? 'min-w-full' : undefined,\n visibilityClasses,\n contentClassName,\n contentExtraClassName\n )}\n data-state={visible ? 'open' : 'closed'}\n role={contentRole ?? 'menu'}\n tabIndex={contentTabIndex ?? -1}\n style={contentStyle}\n onMouseEnter={event => {\n if (openOnHover) {\n openMenu();\n }\n restContentProps?.onMouseEnter?.(event);\n }}\n onMouseLeave={event => {\n if (openOnHover) {\n scheduleClose();\n }\n restContentProps?.onMouseLeave?.(event);\n }}\n >\n {children}\n </div>\n ) : null}\n </div>\n </>\n );\n});\n\nMenu.displayName = 'Menu';\n\nexport default Menu;\n"]}
@@ -0,0 +1,20 @@
1
+ import * as react from 'react';
2
+
3
+ type MenuPlacement = 'bottom-start' | 'bottom' | 'bottom-end' | 'top-start' | 'top' | 'top-end';
4
+ interface MenuProps extends Omit<react.HTMLAttributes<HTMLDivElement>, 'children'> {
5
+ activator: react.ReactNode;
6
+ children: react.ReactNode;
7
+ placement?: MenuPlacement;
8
+ open?: boolean;
9
+ openOnHover?: boolean;
10
+ openOnFocus?: boolean;
11
+ matchActivatorWidth?: boolean;
12
+ keepMounted?: boolean;
13
+ scrim?: boolean;
14
+ contentClassName?: string;
15
+ contentProps?: react.HTMLAttributes<HTMLDivElement>;
16
+ overlayClassName?: string;
17
+ }
18
+ declare const Menu: react.ForwardRefExoticComponent<MenuProps & react.RefAttributes<HTMLDivElement>>;
19
+
20
+ export { type MenuPlacement, type MenuProps, Menu as default };
package/dist/menu.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ import * as react from 'react';
2
+
3
+ type MenuPlacement = 'bottom-start' | 'bottom' | 'bottom-end' | 'top-start' | 'top' | 'top-end';
4
+ interface MenuProps extends Omit<react.HTMLAttributes<HTMLDivElement>, 'children'> {
5
+ activator: react.ReactNode;
6
+ children: react.ReactNode;
7
+ placement?: MenuPlacement;
8
+ open?: boolean;
9
+ openOnHover?: boolean;
10
+ openOnFocus?: boolean;
11
+ matchActivatorWidth?: boolean;
12
+ keepMounted?: boolean;
13
+ scrim?: boolean;
14
+ contentClassName?: string;
15
+ contentProps?: react.HTMLAttributes<HTMLDivElement>;
16
+ overlayClassName?: string;
17
+ }
18
+ declare const Menu: react.ForwardRefExoticComponent<MenuProps & react.RefAttributes<HTMLDivElement>>;
19
+
20
+ export { type MenuPlacement, type MenuProps, Menu as default };
package/dist/menu.js ADDED
@@ -0,0 +1,3 @@
1
+ export { Menu_default as default } from './chunk-QGQ66FJD.js';
2
+ //# sourceMappingURL=menu.js.map
3
+ //# sourceMappingURL=menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"menu.js"}