@lindle/linoardo 1.0.19 → 1.0.21

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 (153) hide show
  1. package/dist/button.cjs +30 -15
  2. package/dist/button.cjs.map +1 -1
  3. package/dist/button.d.cts +17 -7
  4. package/dist/button.d.ts +17 -7
  5. package/dist/button.js +1 -1
  6. package/dist/card.cjs +82 -20
  7. package/dist/card.cjs.map +1 -1
  8. package/dist/card.d.cts +8 -1
  9. package/dist/card.d.ts +8 -1
  10. package/dist/card.js +1 -1
  11. package/dist/chip.cjs +17 -10
  12. package/dist/chip.cjs.map +1 -1
  13. package/dist/chip.d.cts +7 -4
  14. package/dist/chip.d.ts +7 -4
  15. package/dist/chip.js +1 -1
  16. package/dist/chunk-2UL3S6KC.js +147 -0
  17. package/dist/chunk-2UL3S6KC.js.map +1 -0
  18. package/dist/{chunk-N65GNKRG.js → chunk-5LWU5T2C.js} +48 -42
  19. package/dist/chunk-5LWU5T2C.js.map +1 -0
  20. package/dist/{chunk-XFPBICJG.js → chunk-5WQW6YSJ.js} +12 -3
  21. package/dist/chunk-5WQW6YSJ.js.map +1 -0
  22. package/dist/{chunk-5GY2JCBO.js → chunk-AK7LFJI4.js} +16 -5
  23. package/dist/chunk-AK7LFJI4.js.map +1 -0
  24. package/dist/{chunk-PWK6MLZT.js → chunk-DSZ3EOQB.js} +19 -12
  25. package/dist/chunk-DSZ3EOQB.js.map +1 -0
  26. package/dist/{chunk-AOHXZ7OM.js → chunk-GMDNSU26.js} +19 -5
  27. package/dist/chunk-GMDNSU26.js.map +1 -0
  28. package/dist/chunk-HAXGOTZO.js +94 -0
  29. package/dist/chunk-HAXGOTZO.js.map +1 -0
  30. package/dist/chunk-HEXJCQRO.js +51 -0
  31. package/dist/chunk-HEXJCQRO.js.map +1 -0
  32. package/dist/chunk-JGEXEDKS.js +168 -0
  33. package/dist/chunk-JGEXEDKS.js.map +1 -0
  34. package/dist/{chunk-GA6HSRN6.js → chunk-KRYWWWXR.js} +20 -7
  35. package/dist/chunk-KRYWWWXR.js.map +1 -0
  36. package/dist/{chunk-U6NAIIDI.js → chunk-LIEBZOLG.js} +42 -20
  37. package/dist/chunk-LIEBZOLG.js.map +1 -0
  38. package/dist/{chunk-E32P5AHO.js → chunk-LYP7V32H.js} +10 -4
  39. package/dist/chunk-LYP7V32H.js.map +1 -0
  40. package/dist/chunk-QRBJFDV5.js +170 -0
  41. package/dist/chunk-QRBJFDV5.js.map +1 -0
  42. package/dist/{chunk-SZU6OYLS.js → chunk-RFPNVLAD.js} +31 -17
  43. package/dist/chunk-RFPNVLAD.js.map +1 -0
  44. package/dist/chunk-SAGQYMS3.js +167 -0
  45. package/dist/chunk-SAGQYMS3.js.map +1 -0
  46. package/dist/{chunk-QGQ66FJD.js → chunk-T37VPLS4.js} +2 -2
  47. package/dist/chunk-T37VPLS4.js.map +1 -0
  48. package/dist/{chunk-32KFNI6K.js → chunk-U2AL7XFY.js} +48 -28
  49. package/dist/chunk-U2AL7XFY.js.map +1 -0
  50. package/dist/chunk-VPF7M2PB.js +141 -0
  51. package/dist/chunk-VPF7M2PB.js.map +1 -0
  52. package/dist/dialog.cjs +40 -18
  53. package/dist/dialog.cjs.map +1 -1
  54. package/dist/dialog.d.cts +3 -0
  55. package/dist/dialog.d.ts +3 -0
  56. package/dist/dialog.js +1 -1
  57. package/dist/expansion-panel/item.cjs +11 -2
  58. package/dist/expansion-panel/item.cjs.map +1 -1
  59. package/dist/expansion-panel/item.js +1 -1
  60. package/dist/expansion-panel.cjs +25 -6
  61. package/dist/expansion-panel.cjs.map +1 -1
  62. package/dist/expansion-panel.js +2 -2
  63. package/dist/hero.cjs +143 -0
  64. package/dist/hero.cjs.map +1 -0
  65. package/dist/hero.d.cts +34 -0
  66. package/dist/hero.d.ts +34 -0
  67. package/dist/hero.js +3 -0
  68. package/dist/hero.js.map +1 -0
  69. package/dist/icon.cjs +53 -0
  70. package/dist/icon.cjs.map +1 -0
  71. package/dist/icon.d.cts +15 -0
  72. package/dist/icon.d.ts +15 -0
  73. package/dist/icon.js +3 -0
  74. package/dist/icon.js.map +1 -0
  75. package/dist/{index-Md3BuoGM.d.cts → index-B5n8tN2G.d.cts} +3 -0
  76. package/dist/{index-d_JuI06O.d.ts → index-D4-O-oJt.d.ts} +3 -0
  77. package/dist/index.cjs +1013 -173
  78. package/dist/index.cjs.map +1 -1
  79. package/dist/index.d.cts +8 -2
  80. package/dist/index.d.ts +8 -2
  81. package/dist/index.js +18 -13
  82. package/dist/input.cjs +104 -30
  83. package/dist/input.cjs.map +1 -1
  84. package/dist/input.d.cts +8 -19
  85. package/dist/input.d.ts +8 -19
  86. package/dist/input.js +1 -1
  87. package/dist/list/item.cjs +10 -1
  88. package/dist/list/item.cjs.map +1 -1
  89. package/dist/list/item.d.cts +1 -1
  90. package/dist/list/item.d.ts +1 -1
  91. package/dist/list/item.js +1 -1
  92. package/dist/list.cjs +23 -3
  93. package/dist/list.cjs.map +1 -1
  94. package/dist/list.d.cts +5 -2
  95. package/dist/list.d.ts +5 -2
  96. package/dist/list.js +2 -2
  97. package/dist/masonry.cjs +116 -0
  98. package/dist/masonry.cjs.map +1 -0
  99. package/dist/masonry.d.cts +45 -0
  100. package/dist/masonry.d.ts +45 -0
  101. package/dist/masonry.js +3 -0
  102. package/dist/masonry.js.map +1 -0
  103. package/dist/menu.cjs.map +1 -1
  104. package/dist/menu.d.cts +3 -0
  105. package/dist/menu.d.ts +3 -0
  106. package/dist/menu.js +1 -1
  107. package/dist/profileCard.cjs +391 -0
  108. package/dist/profileCard.cjs.map +1 -0
  109. package/dist/profileCard.d.cts +29 -0
  110. package/dist/profileCard.d.ts +29 -0
  111. package/dist/profileCard.js +5 -0
  112. package/dist/profileCard.js.map +1 -0
  113. package/dist/select.cjs +173 -0
  114. package/dist/select.cjs.map +1 -0
  115. package/dist/select.d.cts +29 -0
  116. package/dist/select.d.ts +29 -0
  117. package/dist/select.js +3 -0
  118. package/dist/select.js.map +1 -0
  119. package/dist/slider.cjs +17 -3
  120. package/dist/slider.cjs.map +1 -1
  121. package/dist/slider.d.cts +3 -0
  122. package/dist/slider.d.ts +3 -0
  123. package/dist/slider.js +1 -1
  124. package/dist/styles.css +1199 -9
  125. package/dist/switch.cjs +46 -40
  126. package/dist/switch.cjs.map +1 -1
  127. package/dist/switch.d.cts +4 -1
  128. package/dist/switch.d.ts +4 -1
  129. package/dist/switch.js +1 -1
  130. package/dist/tooltip.cjs +46 -26
  131. package/dist/tooltip.cjs.map +1 -1
  132. package/dist/tooltip.d.cts +3 -0
  133. package/dist/tooltip.d.ts +3 -0
  134. package/dist/tooltip.js +1 -1
  135. package/dist/types-BCqIOkp1.d.cts +24 -0
  136. package/dist/types-ChXN4u7x.d.ts +24 -0
  137. package/package.json +30 -5
  138. package/readme.md +1 -0
  139. package/dist/chunk-32KFNI6K.js.map +0 -1
  140. package/dist/chunk-5GY2JCBO.js.map +0 -1
  141. package/dist/chunk-AOHXZ7OM.js.map +0 -1
  142. package/dist/chunk-E32P5AHO.js.map +0 -1
  143. package/dist/chunk-GA6HSRN6.js.map +0 -1
  144. package/dist/chunk-N65GNKRG.js.map +0 -1
  145. package/dist/chunk-PWK6MLZT.js.map +0 -1
  146. package/dist/chunk-PYG5SDNO.js +0 -98
  147. package/dist/chunk-PYG5SDNO.js.map +0 -1
  148. package/dist/chunk-QGQ66FJD.js.map +0 -1
  149. package/dist/chunk-SZU6OYLS.js.map +0 -1
  150. package/dist/chunk-U6NAIIDI.js.map +0 -1
  151. package/dist/chunk-V4BVJOSC.js +0 -85
  152. package/dist/chunk-V4BVJOSC.js.map +0 -1
  153. package/dist/chunk-XFPBICJG.js.map +0 -1
@@ -0,0 +1,167 @@
1
+ import React from 'react';
2
+ import { twMerge } from 'tailwind-merge';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ // src/Form/Select/index.tsx
6
+
7
+ // src/utils/helpers/randomStr.ts
8
+ var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
9
+ function generateString(length = 5) {
10
+ let result = "";
11
+ const charactersLength = characters.length;
12
+ for (let i = 0; i < length; i++) {
13
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
14
+ }
15
+ return result;
16
+ }
17
+ var baseClass = "select-base w-full appearance-none focus-visible:outline-none focus-visible:ring-primary transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed bg-white text-gray-900 placeholder:text-gray-500 dark:bg-slate-900 dark:text-gray-100 dark:placeholder:text-gray-400";
18
+ var variantClasses = {
19
+ solid: "rounded border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40",
20
+ sharp: "rounded-none border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40",
21
+ outline: "rounded border-2 border-black bg-white focus-visible:border-black focus-visible:ring-2 focus-visible:ring-black/30 dark:border-black dark:bg-transparent dark:focus-visible:border-black dark:focus-visible:ring-black/40",
22
+ text: "rounded-none border-0 border-b border-transparent pl-0 pr-10 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70",
23
+ ghost: "rounded border border-transparent bg-gray-50 text-gray-900 focus-visible:bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15 dark:bg-slate-800 dark:text-gray-100 dark:focus-visible:bg-slate-700 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/25",
24
+ filled: "rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25 dark:border-gray-700 dark:bg-slate-800 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/30",
25
+ underlined: "rounded-none border-0 border-b border-gray-300 pl-0 pr-10 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70",
26
+ rounded: "rounded-full pl-4 pr-10 border border-gray-300 bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/20 shadow-sm dark:border-gray-600 dark:bg-slate-900 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/30 dark:shadow-black/20"
27
+ };
28
+ var sizeClasses = {
29
+ "x-small": { padding: "pl-2 pr-8 py-2", text: "text-xs" },
30
+ small: { padding: "pl-2.5 pr-9 py-2.5", text: "text-sm" },
31
+ medium: { padding: "pl-3 pr-10 py-3", text: "text-base" },
32
+ large: { padding: "pl-3.5 pr-11 py-3.5", text: "text-lg" },
33
+ "x-large": { padding: "pl-4 pr-12 py-4", text: "text-xl" }
34
+ };
35
+ var normalizeOption = (option) => {
36
+ if (typeof option === "string") {
37
+ return { label: option, value: option };
38
+ }
39
+ return option;
40
+ };
41
+ var Select = ({
42
+ options,
43
+ label,
44
+ placeholder,
45
+ variant = "outline",
46
+ size = "medium",
47
+ className,
48
+ wrapperClassName,
49
+ id,
50
+ name,
51
+ multiple,
52
+ onFocus,
53
+ onBlur,
54
+ onChange,
55
+ value,
56
+ defaultValue,
57
+ ...props
58
+ }) => {
59
+ const selectId = id || name || generateString();
60
+ const selectName = name || selectId;
61
+ const variantClass = variantClasses[variant] ?? variantClasses.outline;
62
+ const sizeConfig = sizeClasses[size] ?? sizeClasses.medium;
63
+ const sizeClass = `${sizeConfig.padding} ${sizeConfig.text}`;
64
+ const normalizedOptions = options.map(normalizeOption);
65
+ const hasLabel = Boolean(label);
66
+ const hasProvidedPlaceholder = typeof placeholder === "string" && placeholder.trim().length > 0;
67
+ const hidePlaceholderUntilFocus = hasLabel && hasProvidedPlaceholder && !multiple;
68
+ const placeholderText = placeholder ?? (hasLabel ? " " : void 0);
69
+ const [isFocused, setIsFocused] = React.useState(false);
70
+ const [hasValue, setHasValue] = React.useState(() => {
71
+ const initial = value ?? defaultValue;
72
+ if (initial === void 0 || initial === null) return false;
73
+ if (multiple) {
74
+ if (Array.isArray(initial)) return initial.length > 0;
75
+ return String(initial).length > 0;
76
+ }
77
+ if (Array.isArray(initial)) {
78
+ if (initial.length === 0) return false;
79
+ return String(initial[0]).length > 0;
80
+ }
81
+ return String(initial).length > 0;
82
+ });
83
+ const isControlled = value !== void 0;
84
+ React.useEffect(() => {
85
+ if (!isControlled) return;
86
+ if (value === void 0 || value === null) {
87
+ setHasValue(false);
88
+ return;
89
+ }
90
+ if (multiple) {
91
+ if (Array.isArray(value)) {
92
+ setHasValue(value.length > 0);
93
+ } else {
94
+ setHasValue(String(value).length > 0);
95
+ }
96
+ return;
97
+ }
98
+ if (Array.isArray(value)) {
99
+ setHasValue(value.length > 0 ? String(value[0]).length > 0 : false);
100
+ return;
101
+ }
102
+ setHasValue(String(value).length > 0);
103
+ }, [isControlled, multiple, value]);
104
+ const placeholderOptionLabel = hidePlaceholderUntilFocus && !isFocused ? " " : placeholderText;
105
+ const shouldRenderPlaceholder = !multiple && placeholderText !== void 0;
106
+ const labelShouldFloat = hasValue || isFocused;
107
+ const labelLeftClass = "left-3";
108
+ const labelBgDefault = ["outline", "text", "underlined"].includes(variant) ? "bg-transparent" : "bg-white/90 dark:bg-slate-900";
109
+ const handleFocus = (event) => {
110
+ if (hidePlaceholderUntilFocus) setIsFocused(true);
111
+ onFocus?.(event);
112
+ };
113
+ const handleBlur = (event) => {
114
+ if (hidePlaceholderUntilFocus) setIsFocused(false);
115
+ onBlur?.(event);
116
+ };
117
+ const handleChange = (event) => {
118
+ if (!isControlled) {
119
+ const nextHasValue = multiple ? event.target.selectedOptions.length > 0 : event.target.value !== "";
120
+ setHasValue(nextHasValue);
121
+ }
122
+ onChange?.(event);
123
+ };
124
+ return /* @__PURE__ */ jsx("div", { className: twMerge("flex flex-col gap-1", wrapperClassName), children: /* @__PURE__ */ jsxs("div", { className: "relative flex items-center", children: [
125
+ /* @__PURE__ */ jsxs(
126
+ "select",
127
+ {
128
+ ...props,
129
+ id: selectId,
130
+ name: selectName,
131
+ multiple,
132
+ value,
133
+ defaultValue: value === void 0 ? defaultValue : void 0,
134
+ onFocus: handleFocus,
135
+ onBlur: handleBlur,
136
+ onChange: handleChange,
137
+ className: twMerge("peer", baseClass, variantClass, sizeClass, className),
138
+ children: [
139
+ shouldRenderPlaceholder && /* @__PURE__ */ jsx("option", { value: "", disabled: props.required, hidden: hasValue, children: placeholderOptionLabel }),
140
+ normalizedOptions.map((option, index) => /* @__PURE__ */ jsx("option", { value: option.value, disabled: option.disabled, children: option.label }, `${selectId}-${option.value}-${index}`))
141
+ ]
142
+ }
143
+ ),
144
+ !multiple && /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute inset-y-0 right-3 flex items-center text-gray-500 dark:text-gray-300", children: /* @__PURE__ */ jsx("i", { className: "mdi mdi-chevron-down text-base leading-none", "aria-hidden": true }) }),
145
+ label && /* @__PURE__ */ jsx(
146
+ "label",
147
+ {
148
+ htmlFor: selectId,
149
+ className: twMerge(
150
+ "absolute transition-all duration-150 pointer-events-none text-gray-700 dark:text-gray-200",
151
+ labelLeftClass,
152
+ labelShouldFloat ? [
153
+ "top-0 text-xs px-1",
154
+ isFocused ? "-translate-y-1/2 text-gray-600" : "-translate-y-2/3",
155
+ labelBgDefault
156
+ ].join(" ") : "top-1/2 -translate-y-1/2 text-sm text-gray-500"
157
+ ),
158
+ children: label
159
+ }
160
+ )
161
+ ] }) });
162
+ };
163
+ var Select_default = Select;
164
+
165
+ export { Select_default };
166
+ //# sourceMappingURL=chunk-SAGQYMS3.js.map
167
+ //# sourceMappingURL=chunk-SAGQYMS3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/helpers/randomStr.ts","../src/Form/Select/index.tsx"],"names":[],"mappings":"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","file":"chunk-SAGQYMS3.js","sourcesContent":["const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\nexport function generateString(length = 5) {\n let result: string = '';\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n\n return result;\n}\n","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type { GlobalSize } from '@lindle/linoardo/global.types';\nimport type { InputVariant } from '../Input/types';\nimport type { SelectOption, SelectOptionObject, SelectProps } from './types.select';\nimport { generateString } from '../../utils/helpers/randomStr';\n\nconst baseClass =\n 'select-base w-full appearance-none focus-visible:outline-none focus-visible:ring-primary transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed bg-white text-gray-900 placeholder:text-gray-500 dark:bg-slate-900 dark:text-gray-100 dark:placeholder:text-gray-400';\n\nconst variantClasses = {\n solid:\n 'rounded border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40',\n sharp:\n 'rounded-none border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40',\n outline:\n 'rounded border-2 border-black bg-white focus-visible:border-black focus-visible:ring-2 focus-visible:ring-black/30 dark:border-black dark:bg-transparent dark:focus-visible:border-black dark:focus-visible:ring-black/40',\n text: 'rounded-none border-0 border-b border-transparent pl-0 pr-10 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70',\n ghost:\n 'rounded border border-transparent bg-gray-50 text-gray-900 focus-visible:bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15 dark:bg-slate-800 dark:text-gray-100 dark:focus-visible:bg-slate-700 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/25',\n filled:\n 'rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25 dark:border-gray-700 dark:bg-slate-800 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/30',\n underlined:\n 'rounded-none border-0 border-b border-gray-300 pl-0 pr-10 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70',\n rounded:\n 'rounded-full pl-4 pr-10 border border-gray-300 bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/20 shadow-sm dark:border-gray-600 dark:bg-slate-900 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/30 dark:shadow-black/20'\n} satisfies Record<InputVariant, string>;\n\nconst sizeClasses = {\n 'x-small': { padding: 'pl-2 pr-8 py-2', text: 'text-xs' },\n small: { padding: 'pl-2.5 pr-9 py-2.5', text: 'text-sm' },\n medium: { padding: 'pl-3 pr-10 py-3', text: 'text-base' },\n large: { padding: 'pl-3.5 pr-11 py-3.5', text: 'text-lg' },\n 'x-large': { padding: 'pl-4 pr-12 py-4', text: 'text-xl' }\n} satisfies Record<GlobalSize, { padding: string; text: string }>;\n\nconst normalizeOption = (option: SelectOption): SelectOptionObject => {\n if (typeof option === 'string') {\n return { label: option, value: option };\n }\n\n return option;\n};\n\n/**\n * Native select styled with the same visual variants as Input.\n * Accepts options as string[] or { label, value }[] for convenience.\n */\nconst Select: React.FC<SelectProps> = ({\n options,\n label,\n placeholder,\n variant = 'outline',\n size = 'medium',\n className,\n wrapperClassName,\n id,\n name,\n multiple,\n onFocus,\n onBlur,\n onChange,\n value,\n defaultValue,\n ...props\n}) => {\n const selectId = id || name || generateString();\n const selectName = name || selectId;\n const variantClass = variantClasses[variant] ?? variantClasses.outline;\n const sizeConfig = sizeClasses[size] ?? sizeClasses.medium;\n const sizeClass = `${sizeConfig.padding} ${sizeConfig.text}`;\n const normalizedOptions = options.map(normalizeOption);\n const hasLabel = Boolean(label);\n const hasProvidedPlaceholder = typeof placeholder === 'string' && placeholder.trim().length > 0;\n const hidePlaceholderUntilFocus = hasLabel && hasProvidedPlaceholder && !multiple;\n const placeholderText = placeholder ?? (hasLabel ? ' ' : undefined);\n const [isFocused, setIsFocused] = React.useState(false);\n const [hasValue, setHasValue] = React.useState(() => {\n const initial = value ?? defaultValue;\n if (initial === undefined || initial === null) return false;\n if (multiple) {\n if (Array.isArray(initial)) return initial.length > 0;\n return String(initial).length > 0;\n }\n if (Array.isArray(initial)) {\n if (initial.length === 0) return false;\n return String(initial[0]).length > 0;\n }\n return String(initial).length > 0;\n });\n const isControlled = value !== undefined;\n\n React.useEffect(() => {\n if (!isControlled) return;\n if (value === undefined || value === null) {\n setHasValue(false);\n return;\n }\n if (multiple) {\n if (Array.isArray(value)) {\n setHasValue(value.length > 0);\n } else {\n setHasValue(String(value).length > 0);\n }\n return;\n }\n if (Array.isArray(value)) {\n setHasValue(value.length > 0 ? String(value[0]).length > 0 : false);\n return;\n }\n setHasValue(String(value).length > 0);\n }, [isControlled, multiple, value]);\n\n const placeholderOptionLabel = hidePlaceholderUntilFocus && !isFocused ? ' ' : placeholderText;\n const shouldRenderPlaceholder = !multiple && placeholderText !== undefined;\n const labelShouldFloat = hasValue || isFocused;\n const labelLeftClass = 'left-3';\n const labelBgDefault = ['outline', 'text', 'underlined'].includes(variant)\n ? 'bg-transparent'\n : 'bg-white/90 dark:bg-slate-900';\n\n const handleFocus: React.FocusEventHandler<HTMLSelectElement> = event => {\n if (hidePlaceholderUntilFocus) setIsFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur: React.FocusEventHandler<HTMLSelectElement> = event => {\n if (hidePlaceholderUntilFocus) setIsFocused(false);\n onBlur?.(event);\n };\n\n const handleChange: React.ChangeEventHandler<HTMLSelectElement> = event => {\n if (!isControlled) {\n const nextHasValue = multiple ? event.target.selectedOptions.length > 0 : event.target.value !== '';\n setHasValue(nextHasValue);\n }\n onChange?.(event);\n };\n\n return (\n <div className={twMerge('flex flex-col gap-1', wrapperClassName)}>\n <div className='relative flex items-center'>\n <select\n {...props}\n id={selectId}\n name={selectName}\n multiple={multiple}\n value={value}\n defaultValue={value === undefined ? defaultValue : undefined}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n className={twMerge('peer', baseClass, variantClass, sizeClass, className)}\n >\n {shouldRenderPlaceholder && (\n <option value='' disabled={props.required} hidden={hasValue}>\n {placeholderOptionLabel}\n </option>\n )}\n {normalizedOptions.map((option, index) => (\n <option key={`${selectId}-${option.value}-${index}`} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </select>\n {!multiple && (\n <span className='pointer-events-none absolute inset-y-0 right-3 flex items-center text-gray-500 dark:text-gray-300'>\n <i className='mdi mdi-chevron-down text-base leading-none' aria-hidden />\n </span>\n )}\n {label && (\n <label\n htmlFor={selectId}\n className={twMerge(\n 'absolute transition-all duration-150 pointer-events-none text-gray-700 dark:text-gray-200',\n labelLeftClass,\n labelShouldFloat\n ? [\n 'top-0 text-xs px-1',\n isFocused ? '-translate-y-1/2 text-gray-600' : '-translate-y-2/3',\n labelBgDefault\n ].join(' ')\n : 'top-1/2 -translate-y-1/2 text-sm text-gray-500'\n )}\n >\n {label}\n </label>\n )}\n </div>\n </div>\n );\n};\n\nexport default Select;\nexport type { SelectProps, SelectOption, SelectOptionObject } from './types.select';\n"]}
@@ -151,5 +151,5 @@ Menu.displayName = "Menu";
151
151
  var Menu_default = Menu;
152
152
 
153
153
  export { Menu_default };
154
- //# sourceMappingURL=chunk-QGQ66FJD.js.map
155
- //# sourceMappingURL=chunk-QGQ66FJD.js.map
154
+ //# sourceMappingURL=chunk-T37VPLS4.js.map
155
+ //# sourceMappingURL=chunk-T37VPLS4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Containment/Menu/index.tsx"],"names":[],"mappings":"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","file":"chunk-T37VPLS4.js","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport type MenuPlacement =\n | 'bottom-start'\n | 'bottom'\n | 'bottom-end'\n | 'top-start'\n | 'top'\n | '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\n/**\n * Contextual menu that opens relative to an activator with optional hover/focus behavior and scrim.\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 =\n 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\n ? 'pointer-events-auto opacity-100 scale-100'\n : '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 =\n scrim && visible ? (\n <div className={twMerge(overlayBaseClasses, overlayClassName)} aria-hidden />\n ) : 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"]}
@@ -33,19 +33,19 @@ var arrowPlacementClasses = {
33
33
  bottom: "left-1/2 bottom-full -translate-x-1/2 translate-y-1/2",
34
34
  "bottom-start": "left-4 bottom-full translate-y-1/2",
35
35
  "bottom-end": "right-4 bottom-full translate-y-1/2",
36
- left: "right-full top-1/2 -translate-y-1/2 translate-x-1/2",
37
- "left-start": "right-full top-4 translate-x-1/2",
38
- "left-end": "right-full bottom-4 translate-x-1/2",
39
- right: "left-full top-1/2 -translate-y-1/2 -translate-x-1/2",
40
- "right-start": "left-full top-4 -translate-x-1/2",
41
- "right-end": "left-full bottom-4 -translate-x-1/2"
36
+ left: "left-full top-1/2 -translate-y-1/2 -translate-x-1/2",
37
+ "left-start": "left-full top-4 -translate-x-1/2",
38
+ "left-end": "left-full bottom-4 -translate-x-1/2",
39
+ right: "right-full top-1/2 -translate-y-1/2 translate-x-1/2",
40
+ "right-start": "right-full top-4 translate-x-1/2",
41
+ "right-end": "right-full bottom-4 translate-x-1/2"
42
42
  };
43
43
  var ToolTip = React.forwardRef((props, forwardedRef) => {
44
44
  const {
45
45
  activator,
46
46
  children,
47
47
  placement = "top",
48
- arrow = true,
48
+ arrow = false,
49
49
  disabled = false,
50
50
  persistent = false,
51
51
  showOnHover = true,
@@ -86,29 +86,49 @@ var ToolTip = React.forwardRef((props, forwardedRef) => {
86
86
  }
87
87
  return classes.join(" ");
88
88
  })();
89
- return /* @__PURE__ */ jsxs("span", { className: twMerge(wrapperBaseClasses, "group/tooltip", wrapperClassName), "data-disabled": disabled || void 0, children: [
90
- /* @__PURE__ */ jsx("span", { className: "inline-flex max-w-full", children: activator }),
91
- shouldRenderTooltip ? /* @__PURE__ */ jsxs(
92
- "div",
93
- {
94
- ...rest,
95
- ref: forwardedRef,
96
- role: "tooltip",
97
- id,
98
- "aria-hidden": persistent || disabled ? void 0 : true,
99
- className: twMerge(tooltipBaseClasses, placementClasses[placement], visibilityClasses, pointerClasses, className),
100
- style: resolvedStyle,
101
- children: [
102
- children,
103
- arrow && /* @__PURE__ */ jsx("span", { className: twMerge(arrowBaseClasses, arrowPlacementClasses[placement]), "aria-hidden": true, "data-arrow": true })
104
- ]
105
- }
106
- ) : null
107
- ] });
89
+ return /* @__PURE__ */ jsxs(
90
+ "span",
91
+ {
92
+ className: twMerge(wrapperBaseClasses, "group/tooltip", wrapperClassName),
93
+ "data-disabled": disabled || void 0,
94
+ children: [
95
+ /* @__PURE__ */ jsx("span", { className: "inline-flex max-w-full", children: activator }),
96
+ shouldRenderTooltip ? /* @__PURE__ */ jsxs(
97
+ "div",
98
+ {
99
+ ...rest,
100
+ ref: forwardedRef,
101
+ role: "tooltip",
102
+ id,
103
+ "aria-hidden": persistent || disabled ? void 0 : true,
104
+ className: twMerge(
105
+ tooltipBaseClasses,
106
+ placementClasses[placement],
107
+ visibilityClasses,
108
+ pointerClasses,
109
+ className
110
+ ),
111
+ style: resolvedStyle,
112
+ children: [
113
+ children,
114
+ arrow && /* @__PURE__ */ jsx(
115
+ "span",
116
+ {
117
+ className: twMerge(arrowBaseClasses, arrowPlacementClasses[placement]),
118
+ "aria-hidden": true,
119
+ "data-arrow": true
120
+ }
121
+ )
122
+ ]
123
+ }
124
+ ) : null
125
+ ]
126
+ }
127
+ );
108
128
  });
109
129
  ToolTip.displayName = "ToolTip";
110
130
  var ToolTip_default = ToolTip;
111
131
 
112
132
  export { ToolTip_default };
113
- //# sourceMappingURL=chunk-32KFNI6K.js.map
114
- //# sourceMappingURL=chunk-32KFNI6K.js.map
133
+ //# sourceMappingURL=chunk-U2AL7XFY.js.map
134
+ //# sourceMappingURL=chunk-U2AL7XFY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Containment/ToolTip/index.tsx"],"names":[],"mappings":"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","file":"chunk-U2AL7XFY.js","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nconst tooltipBaseClasses =\n 'absolute z-[60] max-w-xs rounded-lg border border-white/10 bg-gray-900 px-3 py-2 text-xs font-medium text-white shadow-lg shadow-black/30 ring-1 ring-black/40 transition-all duration-150';\nconst wrapperBaseClasses = 'relative inline-flex max-w-full align-middle';\nconst arrowBaseClasses =\n 'pointer-events-none absolute h-2 w-2 rotate-45 border border-white/10 bg-gray-900 shadow-lg shadow-black/20';\n\nconst resolveSizeValue = (value?: string | number) => {\n if (value === undefined) {\n return undefined;\n }\n return typeof value === 'number' ? `${value}px` : value;\n};\n\nexport type ToolTipPlacement =\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'right'\n | 'right-start'\n | 'right-end';\n\nconst placementClasses: Record<ToolTipPlacement, string> = {\n top: 'bottom-full left-1/2 -translate-x-1/2 -translate-y-2 origin-bottom',\n 'top-start': 'bottom-full left-0 -translate-y-2 origin-bottom-left',\n 'top-end': 'bottom-full right-0 -translate-y-2 origin-bottom-right',\n bottom: 'top-full left-1/2 -translate-x-1/2 translate-y-2 origin-top',\n 'bottom-start': 'top-full left-0 translate-y-2 origin-top-left',\n 'bottom-end': 'top-full right-0 translate-y-2 origin-top-right',\n left: 'right-full top-1/2 -translate-y-1/2 -translate-x-2 origin-right',\n 'left-start': 'right-full top-0 -translate-x-2 origin-top-right',\n 'left-end': 'right-full bottom-0 -translate-x-2 origin-bottom-right',\n right: 'left-full top-1/2 -translate-y-1/2 translate-x-2 origin-left',\n 'right-start': 'left-full top-0 translate-x-2 origin-top-left',\n 'right-end': 'left-full bottom-0 translate-x-2 origin-bottom-left'\n};\n\nconst arrowPlacementClasses: Record<ToolTipPlacement, string> = {\n top: 'left-1/2 top-full -translate-x-1/2 -translate-y-1/2',\n 'top-start': 'left-4 top-full -translate-y-1/2',\n 'top-end': 'right-4 top-full -translate-y-1/2',\n bottom: 'left-1/2 bottom-full -translate-x-1/2 translate-y-1/2',\n 'bottom-start': 'left-4 bottom-full translate-y-1/2',\n 'bottom-end': 'right-4 bottom-full translate-y-1/2',\n left: 'left-full top-1/2 -translate-y-1/2 -translate-x-1/2',\n 'left-start': 'left-full top-4 -translate-x-1/2',\n 'left-end': 'left-full bottom-4 -translate-x-1/2',\n right: 'right-full top-1/2 -translate-y-1/2 translate-x-1/2',\n 'right-start': 'right-full top-4 translate-x-1/2',\n 'right-end': 'right-full bottom-4 translate-x-1/2'\n};\n\nexport interface ToolTipProps extends React.HTMLAttributes<HTMLDivElement> {\n activator: React.ReactNode;\n placement?: ToolTipPlacement;\n arrow?: boolean;\n disabled?: boolean;\n persistent?: boolean;\n showOnHover?: boolean;\n showOnFocus?: boolean;\n interactive?: boolean;\n keepMounted?: boolean;\n maxWidth?: string | number;\n wrapperClassName?: string;\n}\n\n/**\n * Tooltip wrapper that reveals contextual content around an activator on hover or focus.\n */\nconst ToolTip = React.forwardRef<HTMLDivElement, ToolTipProps>((props, forwardedRef) => {\n const {\n activator,\n children,\n placement = 'top',\n arrow = false,\n disabled = false,\n persistent = false,\n showOnHover = true,\n showOnFocus = true,\n interactive = false,\n keepMounted = false,\n maxWidth = '18rem',\n wrapperClassName,\n className,\n style,\n id,\n ...rest\n } = props;\n\n const hasRenderableContent = children !== undefined && children !== null;\n const shouldEnableTriggers = !disabled && (persistent || showOnHover || showOnFocus);\n const shouldRenderTooltip = hasRenderableContent && (shouldEnableTriggers || keepMounted);\n\n const resolvedStyle: React.CSSProperties = { ...style };\n if (resolvedStyle.maxWidth === undefined) {\n resolvedStyle.maxWidth = resolveSizeValue(maxWidth);\n }\n\n const baseVisibility = persistent ? 'opacity-100 scale-100' : 'opacity-0 scale-95';\n const hoverClasses =\n !persistent && showOnHover\n ? ' group-hover/tooltip:opacity-100 group-hover/tooltip:scale-100'\n : '';\n const focusClasses =\n !persistent && showOnFocus\n ? ' group-focus-within/tooltip:opacity-100 group-focus-within/tooltip:scale-100'\n : '';\n const visibilityClasses = `${baseVisibility}${hoverClasses}${focusClasses}`;\n\n const pointerClasses = (() => {\n if (persistent) {\n return 'pointer-events-auto';\n }\n if (!interactive) {\n return 'pointer-events-none';\n }\n const classes = ['pointer-events-none'];\n if (showOnHover) {\n classes.push('group-hover/tooltip:pointer-events-auto');\n }\n if (showOnFocus) {\n classes.push('group-focus-within/tooltip:pointer-events-auto');\n }\n return classes.join(' ');\n })();\n\n return (\n <span\n className={twMerge(wrapperBaseClasses, 'group/tooltip', wrapperClassName)}\n data-disabled={disabled || undefined}\n >\n <span className='inline-flex max-w-full'>{activator}</span>\n {shouldRenderTooltip ? (\n <div\n {...rest}\n ref={forwardedRef}\n role='tooltip'\n id={id}\n aria-hidden={persistent || disabled ? undefined : true}\n className={twMerge(\n tooltipBaseClasses,\n placementClasses[placement],\n visibilityClasses,\n pointerClasses,\n className\n )}\n style={resolvedStyle}\n >\n {children}\n {arrow && (\n <span\n className={twMerge(arrowBaseClasses, arrowPlacementClasses[placement])}\n aria-hidden\n data-arrow\n />\n )}\n </div>\n ) : null}\n </span>\n );\n});\n\nToolTip.displayName = 'ToolTip';\n\nexport default ToolTip;\n"]}
@@ -0,0 +1,141 @@
1
+ import { twMerge } from 'tailwind-merge';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+
4
+ // src/Blocks/Hero/index.tsx
5
+ var containerVariants = {
6
+ solid: "bg-gradient-to-br from-primary via-primary/90 to-indigo-600 text-white shadow-2xl shadow-primary/30",
7
+ outline: "border border-gray-200 bg-white text-gray-900",
8
+ text: "bg-transparent text-gray-900",
9
+ ghost: "bg-primary/5 text-gray-900 border border-primary/10",
10
+ filled: "bg-slate-900 text-white shadow-2xl shadow-slate-900/40",
11
+ underlined: "border-b-4 border-primary/70 bg-white text-gray-900",
12
+ rounded: "rounded-3xl border border-gray-100 bg-white text-gray-900 shadow-xl",
13
+ sharp: "rounded-none border border-gray-200 bg-white text-gray-900 shadow"
14
+ };
15
+ var frameRadii = {
16
+ solid: "rounded-3xl",
17
+ outline: "rounded-2xl",
18
+ text: "rounded-2xl",
19
+ ghost: "rounded-2xl",
20
+ filled: "rounded-3xl",
21
+ underlined: "rounded-2xl",
22
+ rounded: "rounded-3xl",
23
+ sharp: "rounded-none"
24
+ };
25
+ var badgeVariants = {
26
+ solid: "bg-white/10 text-white border border-white/20",
27
+ outline: "bg-primary/10 text-primary border border-primary/20",
28
+ text: "bg-primary/10 text-primary border border-primary/20",
29
+ ghost: "bg-primary/15 text-primary border border-primary/25",
30
+ filled: "bg-white/10 text-white border border-white/20",
31
+ underlined: "bg-primary/10 text-primary border border-primary/20",
32
+ rounded: "bg-primary/10 text-primary border border-primary/20",
33
+ sharp: "bg-primary/10 text-primary border border-primary/20"
34
+ };
35
+ var Hero = ({
36
+ title,
37
+ description,
38
+ eyebrow,
39
+ actions = [],
40
+ stats = [],
41
+ logos = [],
42
+ image,
43
+ variant = "solid",
44
+ className,
45
+ ...rest
46
+ }) => {
47
+ const containerClass = twMerge(
48
+ "hero-block relative isolate overflow-hidden",
49
+ containerVariants[variant] ?? containerVariants.solid,
50
+ className
51
+ );
52
+ const badgeClass = twMerge(
53
+ "inline-flex items-center gap-2 rounded-full px-3 py-1 text-xs font-semibold uppercase tracking-wide",
54
+ badgeVariants[variant] ?? badgeVariants.solid
55
+ );
56
+ const isDark = variant === "solid" || variant === "filled";
57
+ const subdued = isDark ? "text-white/80" : "text-gray-600";
58
+ const statMuted = isDark ? "text-white/70" : "text-gray-500";
59
+ const actionPrimary = isDark ? "bg-white text-gray-900 hover:bg-white/90 focus-visible:outline-white/70" : "bg-primary text-white hover:bg-primary/90 focus-visible:outline-primary/50";
60
+ const actionSecondary = isDark ? "border border-white/40 text-white hover:bg-white/10 focus-visible:outline-white/60" : "border border-gray-300 text-gray-900 hover:border-primary/60 hover:text-primary focus-visible:outline-primary/50";
61
+ const frameRadius = frameRadii[variant] ?? "rounded-2xl";
62
+ const frameDecoration = isDark ? "border-white/10 bg-white/10 shadow-2xl shadow-black/20" : "border-gray-200 bg-white shadow-2xl shadow-gray-200/60";
63
+ const renderAction = (action, index) => {
64
+ const { href, label, onClick, variant: actionVariant = "primary" } = action;
65
+ const Component = href ? "a" : "button";
66
+ const resolvedClass = actionVariant === "secondary" ? twMerge("bg-white/70", actionSecondary) : twMerge("shadow-lg shadow-primary/25", actionPrimary);
67
+ return /* @__PURE__ */ jsx(
68
+ Component,
69
+ {
70
+ href,
71
+ onClick,
72
+ className: twMerge(
73
+ "inline-flex items-center gap-2 rounded-xl px-4 py-3 text-sm font-semibold transition focus-visible:outline focus-visible:outline-offset-2",
74
+ resolvedClass
75
+ ),
76
+ children: label
77
+ },
78
+ `${label}-${index}`
79
+ );
80
+ };
81
+ return /* @__PURE__ */ jsxs("section", { ...rest, className: containerClass, children: [
82
+ /* @__PURE__ */ jsxs("div", { className: "pointer-events-none absolute inset-0 overflow-hidden", children: [
83
+ /* @__PURE__ */ jsx("div", { className: "absolute left-24 top-10 h-64 w-64 rounded-full bg-primary/15 blur-3xl" }),
84
+ /* @__PURE__ */ jsx("div", { className: "absolute -right-16 -bottom-10 h-80 w-80 rounded-full bg-primary/20 blur-3xl" })
85
+ ] }),
86
+ /* @__PURE__ */ jsxs("div", { className: "mx-auto flex max-w-6xl flex-col gap-12 px-6 py-16 lg:px-10 lg:py-24", children: [
87
+ /* @__PURE__ */ jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2", children: [
88
+ /* @__PURE__ */ jsxs("div", { className: "space-y-6", children: [
89
+ eyebrow && /* @__PURE__ */ jsx("span", { className: badgeClass, children: eyebrow }),
90
+ /* @__PURE__ */ jsx(
91
+ "h1",
92
+ {
93
+ className: twMerge(
94
+ "text-4xl font-semibold leading-tight sm:text-5xl",
95
+ isDark ? "text-white" : "text-gray-900"
96
+ ),
97
+ children: title
98
+ }
99
+ ),
100
+ description && /* @__PURE__ */ jsx("p", { className: twMerge("text-lg leading-relaxed", subdued), children: description }),
101
+ actions.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-3", children: actions.map(renderAction) }),
102
+ stats.length > 0 && /* @__PURE__ */ jsx("dl", { className: "grid gap-6 sm:grid-cols-3", children: stats.map((stat) => /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
103
+ /* @__PURE__ */ jsx("dd", { className: twMerge("text-3xl font-semibold", isDark ? "text-white" : "text-gray-900"), children: stat.value }),
104
+ /* @__PURE__ */ jsx("dt", { className: twMerge("text-sm font-medium", statMuted), children: stat.label })
105
+ ] }, stat.label)) })
106
+ ] }),
107
+ image && /* @__PURE__ */ jsx("div", { className: "relative", children: /* @__PURE__ */ jsxs("div", { className: twMerge("relative overflow-hidden backdrop-blur", frameDecoration, frameRadius), children: [
108
+ /* @__PURE__ */ jsx(
109
+ "img",
110
+ {
111
+ src: image.src,
112
+ alt: image.alt ?? "",
113
+ className: twMerge("h-full w-full object-cover", frameRadius),
114
+ loading: "lazy"
115
+ }
116
+ ),
117
+ /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 bg-linear-to-t from-black/30 via-transparent to-transparent" })
118
+ ] }) })
119
+ ] }),
120
+ logos.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-6 lg:items-center lg:gap-10", children: [
121
+ /* @__PURE__ */ jsx("span", { className: twMerge("text-sm font-semibold tracking-wide", subdued), children: "Duveruji nam" }),
122
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-4 opacity-80", children: logos.map((logo) => /* @__PURE__ */ jsx(
123
+ "img",
124
+ {
125
+ src: logo.src,
126
+ alt: logo.alt ?? "",
127
+ className: "h-8 w-auto grayscale transition hover:grayscale-0",
128
+ loading: "lazy"
129
+ },
130
+ logo.src
131
+ )) })
132
+ ] })
133
+ ] })
134
+ ] });
135
+ };
136
+ Hero.displayName = "Hero";
137
+ var Hero_default = Hero;
138
+
139
+ export { Hero_default };
140
+ //# sourceMappingURL=chunk-VPF7M2PB.js.map
141
+ //# sourceMappingURL=chunk-VPF7M2PB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Blocks/Hero/index.tsx"],"names":[],"mappings":";;;;AAqCA,IAAM,iBAAA,GAAmD;AAAA,EACvD,KAAA,EAAO,qGAAA;AAAA,EACP,OAAA,EAAS,+CAAA;AAAA,EACT,IAAA,EAAM,8BAAA;AAAA,EACN,KAAA,EAAO,qDAAA;AAAA,EACP,MAAA,EAAQ,wDAAA;AAAA,EACR,UAAA,EAAY,qDAAA;AAAA,EACZ,OAAA,EAAS,qEAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AAEA,IAAM,UAAA,GAA4C;AAAA,EAChD,KAAA,EAAO,aAAA;AAAA,EACP,OAAA,EAAS,aAAA;AAAA,EACT,IAAA,EAAM,aAAA;AAAA,EACN,KAAA,EAAO,aAAA;AAAA,EACP,MAAA,EAAQ,aAAA;AAAA,EACR,UAAA,EAAY,aAAA;AAAA,EACZ,OAAA,EAAS,aAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AAEA,IAAM,aAAA,GAA+C;AAAA,EACnD,KAAA,EAAO,+CAAA;AAAA,EACP,OAAA,EAAS,qDAAA;AAAA,EACT,IAAA,EAAM,qDAAA;AAAA,EACN,KAAA,EAAO,qDAAA;AAAA,EACP,MAAA,EAAQ,+CAAA;AAAA,EACR,UAAA,EAAY,qDAAA;AAAA,EACZ,OAAA,EAAS,qDAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AAEA,IAAM,OAA4B,CAAC;AAAA,EACjC,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAU,EAAC;AAAA,EACX,QAAQ,EAAC;AAAA,EACT,QAAQ,EAAC;AAAA,EACT,KAAA;AAAA,EACA,OAAA,GAAU,OAAA;AAAA,EACV,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,cAAA,GAAiB,OAAA;AAAA,IACrB,6CAAA;AAAA,IACA,iBAAA,CAAkB,OAAO,CAAA,IAAK,iBAAA,CAAkB,KAAA;AAAA,IAChD;AAAA,GACF;AACA,EAAA,MAAM,UAAA,GAAa,OAAA;AAAA,IACjB,qGAAA;AAAA,IACA,aAAA,CAAc,OAAO,CAAA,IAAK,aAAA,CAAc;AAAA,GAC1C;AACA,EAAA,MAAM,MAAA,GAAS,OAAA,KAAY,OAAA,IAAW,OAAA,KAAY,QAAA;AAClD,EAAA,MAAM,OAAA,GAAU,SAAS,eAAA,GAAkB,eAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,SAAS,eAAA,GAAkB,eAAA;AAC7C,EAAA,MAAM,aAAA,GAAgB,SAClB,yEAAA,GACA,4EAAA;AACJ,EAAA,MAAM,eAAA,GAAkB,SACpB,oFAAA,GACA,kHAAA;AACJ,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,OAAO,CAAA,IAAK,aAAA;AAC3C,EAAA,MAAM,eAAA,GAAkB,SACpB,wDAAA,GACA,wDAAA;AAEJ,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,EAAoB,KAAA,KAAkB;AAC1D,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,SAAS,OAAA,EAAS,aAAA,GAAgB,WAAU,GAAI,MAAA;AACrE,IAAA,MAAM,SAAA,GAAY,OAAO,GAAA,GAAM,QAAA;AAC/B,IAAA,MAAM,aAAA,GACJ,kBAAkB,WAAA,GACd,OAAA,CAAQ,eAAe,eAAe,CAAA,GACtC,OAAA,CAAQ,6BAAA,EAA+B,aAAa,CAAA;AAE1D,IAAA,uBACE,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QAEC,IAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA,EAAW,OAAA;AAAA,UACT,4IAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEC,QAAA,EAAA;AAAA,OAAA;AAAA,MARI,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,KASxB;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,SAAA,EAAA,EAAS,GAAG,IAAA,EAAM,WAAW,cAAA,EAC5B,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sDAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uEAAA,EAAwE,CAAA;AAAA,sBACvF,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6EAAA,EAA8E;AAAA,KAAA,EAC/F,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qEAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACZ,QAAA,EAAA;AAAA,UAAA,OAAA,oBAAW,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,UAAA,EAAa,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,0BAClD,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,OAAA;AAAA,gBACT,kDAAA;AAAA,gBACA,SAAS,YAAA,GAAe;AAAA,eAC1B;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UACC,WAAA,wBAAgB,GAAA,EAAA,EAAE,SAAA,EAAW,QAAQ,yBAAA,EAA2B,OAAO,GAAI,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,UACvF,OAAA,CAAQ,MAAA,GAAS,CAAA,oBAAK,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sBAAA,EAAwB,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA,EAAE,CAAA;AAAA,UACvF,KAAA,CAAM,MAAA,GAAS,CAAA,oBACd,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,2BAAA,EACX,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,qBACT,IAAA,CAAC,KAAA,EAAA,EAAqB,WAAU,WAAA,EAC9B,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAG,WAAW,OAAA,CAAQ,wBAAA,EAA0B,SAAS,YAAA,GAAe,eAAe,CAAA,EACrF,QAAA,EAAA,IAAA,CAAK,KAAA,EACR,CAAA;AAAA,4BACA,GAAA,CAAC,QAAG,SAAA,EAAW,OAAA,CAAQ,uBAAuB,SAAS,CAAA,EAAI,eAAK,KAAA,EAAM;AAAA,WAAA,EAAA,EAJ9D,IAAA,CAAK,KAKf,CACD,CAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QACC,KAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,wCAAA,EAA0C,eAAA,EAAiB,WAAW,CAAA,EAC5F,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAK,KAAA,CAAM,GAAA;AAAA,cACX,GAAA,EAAK,MAAM,GAAA,IAAO,EAAA;AAAA,cAClB,SAAA,EAAW,OAAA,CAAQ,4BAAA,EAA8B,WAAW,CAAA;AAAA,cAC5D,OAAA,EAAQ;AAAA;AAAA,WACV;AAAA,0BACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kGAAA,EAAmG;AAAA,SAAA,EACpH,CAAA,EACF;AAAA,OAAA,EAEJ,CAAA;AAAA,MACC,MAAM,MAAA,GAAS,CAAA,oBACd,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6DAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAK,SAAA,EAAW,OAAA,CAAQ,qCAAA,EAAuC,OAAO,GAAG,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,4BACrF,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EACZ,QAAA,EAAA,KAAA,CAAM,IAAI,CAAA,IAAA,qBACT,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,KAAK,IAAA,CAAK,GAAA;AAAA,YACV,GAAA,EAAK,KAAK,GAAA,IAAO,EAAA;AAAA,YACjB,SAAA,EAAU,mDAAA;AAAA,YACV,OAAA,EAAQ;AAAA,WAAA;AAAA,UAJH,IAAA,CAAK;AAAA,SAMb,CAAA,EACH;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AAEnB,IAAO,YAAA,GAAQ","file":"chunk-VPF7M2PB.js","sourcesContent":["import type { GlobalVariant } from '@lindle/linoardo/global.types';\nimport * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\ntype HeroAction = {\n label: string;\n href?: string;\n variant?: 'primary' | 'secondary';\n onClick?: React.MouseEventHandler<HTMLButtonElement | HTMLAnchorElement>;\n};\n\ntype HeroStat = {\n value: string;\n label: string;\n};\n\ntype HeroLogo = {\n src: string;\n alt?: string;\n};\n\ntype HeroImage = {\n src: string;\n alt?: string;\n};\n\nexport type HeroProps = React.HTMLAttributes<HTMLElement> & {\n title: React.ReactNode;\n description?: React.ReactNode;\n eyebrow?: string;\n actions?: HeroAction[];\n stats?: HeroStat[];\n logos?: HeroLogo[];\n image?: HeroImage;\n variant?: GlobalVariant;\n};\n\nconst containerVariants: Record<GlobalVariant, string> = {\n solid: 'bg-gradient-to-br from-primary via-primary/90 to-indigo-600 text-white shadow-2xl shadow-primary/30',\n outline: 'border border-gray-200 bg-white text-gray-900',\n text: 'bg-transparent text-gray-900',\n ghost: 'bg-primary/5 text-gray-900 border border-primary/10',\n filled: 'bg-slate-900 text-white shadow-2xl shadow-slate-900/40',\n underlined: 'border-b-4 border-primary/70 bg-white text-gray-900',\n rounded: 'rounded-3xl border border-gray-100 bg-white text-gray-900 shadow-xl',\n sharp: 'rounded-none border border-gray-200 bg-white text-gray-900 shadow'\n};\n\nconst frameRadii: Record<GlobalVariant, string> = {\n solid: 'rounded-3xl',\n outline: 'rounded-2xl',\n text: 'rounded-2xl',\n ghost: 'rounded-2xl',\n filled: 'rounded-3xl',\n underlined: 'rounded-2xl',\n rounded: 'rounded-3xl',\n sharp: 'rounded-none'\n};\n\nconst badgeVariants: Record<GlobalVariant, string> = {\n solid: 'bg-white/10 text-white border border-white/20',\n outline: 'bg-primary/10 text-primary border border-primary/20',\n text: 'bg-primary/10 text-primary border border-primary/20',\n ghost: 'bg-primary/15 text-primary border border-primary/25',\n filled: 'bg-white/10 text-white border border-white/20',\n underlined: 'bg-primary/10 text-primary border border-primary/20',\n rounded: 'bg-primary/10 text-primary border border-primary/20',\n sharp: 'bg-primary/10 text-primary border border-primary/20'\n};\n\nconst Hero: React.FC<HeroProps> = ({\n title,\n description,\n eyebrow,\n actions = [],\n stats = [],\n logos = [],\n image,\n variant = 'solid',\n className,\n ...rest\n}) => {\n const containerClass = twMerge(\n 'hero-block relative isolate overflow-hidden',\n containerVariants[variant] ?? containerVariants.solid,\n className\n );\n const badgeClass = twMerge(\n 'inline-flex items-center gap-2 rounded-full px-3 py-1 text-xs font-semibold uppercase tracking-wide',\n badgeVariants[variant] ?? badgeVariants.solid\n );\n const isDark = variant === 'solid' || variant === 'filled';\n const subdued = isDark ? 'text-white/80' : 'text-gray-600';\n const statMuted = isDark ? 'text-white/70' : 'text-gray-500';\n const actionPrimary = isDark\n ? 'bg-white text-gray-900 hover:bg-white/90 focus-visible:outline-white/70'\n : 'bg-primary text-white hover:bg-primary/90 focus-visible:outline-primary/50';\n const actionSecondary = isDark\n ? 'border border-white/40 text-white hover:bg-white/10 focus-visible:outline-white/60'\n : 'border border-gray-300 text-gray-900 hover:border-primary/60 hover:text-primary focus-visible:outline-primary/50';\n const frameRadius = frameRadii[variant] ?? 'rounded-2xl';\n const frameDecoration = isDark\n ? 'border-white/10 bg-white/10 shadow-2xl shadow-black/20'\n : 'border-gray-200 bg-white shadow-2xl shadow-gray-200/60';\n\n const renderAction = (action: HeroAction, index: number) => {\n const { href, label, onClick, variant: actionVariant = 'primary' } = action;\n const Component = href ? 'a' : 'button';\n const resolvedClass =\n actionVariant === 'secondary'\n ? twMerge('bg-white/70', actionSecondary)\n : twMerge('shadow-lg shadow-primary/25', actionPrimary);\n\n return (\n <Component\n key={`${label}-${index}`}\n href={href}\n onClick={onClick as never}\n className={twMerge(\n 'inline-flex items-center gap-2 rounded-xl px-4 py-3 text-sm font-semibold transition focus-visible:outline focus-visible:outline-offset-2',\n resolvedClass\n )}\n >\n {label}\n </Component>\n );\n };\n\n return (\n <section {...rest} className={containerClass}>\n <div className='pointer-events-none absolute inset-0 overflow-hidden'>\n <div className='absolute left-24 top-10 h-64 w-64 rounded-full bg-primary/15 blur-3xl' />\n <div className='absolute -right-16 -bottom-10 h-80 w-80 rounded-full bg-primary/20 blur-3xl' />\n </div>\n <div className='mx-auto flex max-w-6xl flex-col gap-12 px-6 py-16 lg:px-10 lg:py-24'>\n <div className='grid items-center gap-12 lg:grid-cols-2'>\n <div className='space-y-6'>\n {eyebrow && <span className={badgeClass}>{eyebrow}</span>}\n <h1\n className={twMerge(\n 'text-4xl font-semibold leading-tight sm:text-5xl',\n isDark ? 'text-white' : 'text-gray-900'\n )}\n >\n {title}\n </h1>\n {description && <p className={twMerge('text-lg leading-relaxed', subdued)}>{description}</p>}\n {actions.length > 0 && <div className='flex flex-wrap gap-3'>{actions.map(renderAction)}</div>}\n {stats.length > 0 && (\n <dl className='grid gap-6 sm:grid-cols-3'>\n {stats.map(stat => (\n <div key={stat.label} className='space-y-1'>\n <dd className={twMerge('text-3xl font-semibold', isDark ? 'text-white' : 'text-gray-900')}>\n {stat.value}\n </dd>\n <dt className={twMerge('text-sm font-medium', statMuted)}>{stat.label}</dt>\n </div>\n ))}\n </dl>\n )}\n </div>\n {image && (\n <div className='relative'>\n <div className={twMerge('relative overflow-hidden backdrop-blur', frameDecoration, frameRadius)}>\n <img\n src={image.src}\n alt={image.alt ?? ''}\n className={twMerge('h-full w-full object-cover', frameRadius)}\n loading='lazy'\n />\n <div className='pointer-events-none absolute inset-0 bg-linear-to-t from-black/30 via-transparent to-transparent' />\n </div>\n </div>\n )}\n </div>\n {logos.length > 0 && (\n <div className='flex flex-wrap items-center gap-6 lg:items-center lg:gap-10'>\n <span className={twMerge('text-sm font-semibold tracking-wide', subdued)}>Duveruji nam</span>\n <div className='flex flex-wrap items-center gap-4 opacity-80'>\n {logos.map(logo => (\n <img\n key={logo.src}\n src={logo.src}\n alt={logo.alt ?? ''}\n className='h-8 w-auto grayscale transition hover:grayscale-0'\n loading='lazy'\n />\n ))}\n </div>\n </div>\n )}\n </div>\n </section>\n );\n};\n\nHero.displayName = 'Hero';\n\nexport default Hero;\n"]}
package/dist/dialog.cjs CHANGED
@@ -93,24 +93,46 @@ var Dialog = React__namespace.forwardRef((props, forwardedRef) => {
93
93
  ) : null;
94
94
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
95
95
  activator ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "inline-flex", children: activator }) : null,
96
- shouldRenderDialog ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: tailwindMerge.twMerge(containerBaseClasses, containerClassName), "data-state": state, "aria-hidden": !open, children: [
97
- overlayNode,
98
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: tailwindMerge.twMerge(panelWrapperClasses, fullscreen ? "h-full items-stretch" : "mx-auto"), "data-state": state, children: /* @__PURE__ */ jsxRuntime.jsx(
99
- "div",
100
- {
101
- ...rest,
102
- ref: forwardedRef,
103
- id,
104
- role: roleProp,
105
- tabIndex,
106
- "aria-modal": ariaModal,
107
- className: tailwindMerge.twMerge(panelBaseClasses, fullscreen ? "h-full w-full max-w-none rounded-none" : void 0, className),
108
- style: resolvedStyle,
109
- "data-state": state,
110
- children
111
- }
112
- ) })
113
- ] }) : null
96
+ shouldRenderDialog ? /* @__PURE__ */ jsxRuntime.jsxs(
97
+ "div",
98
+ {
99
+ className: tailwindMerge.twMerge(containerBaseClasses, containerClassName),
100
+ "data-state": state,
101
+ "aria-hidden": !open,
102
+ children: [
103
+ overlayNode,
104
+ /* @__PURE__ */ jsxRuntime.jsx(
105
+ "div",
106
+ {
107
+ className: tailwindMerge.twMerge(
108
+ panelWrapperClasses,
109
+ fullscreen ? "h-full items-stretch" : "mx-auto"
110
+ ),
111
+ "data-state": state,
112
+ children: /* @__PURE__ */ jsxRuntime.jsx(
113
+ "div",
114
+ {
115
+ ...rest,
116
+ ref: forwardedRef,
117
+ id,
118
+ role: roleProp,
119
+ tabIndex,
120
+ "aria-modal": ariaModal,
121
+ className: tailwindMerge.twMerge(
122
+ panelBaseClasses,
123
+ fullscreen ? "h-full w-full max-w-none rounded-none" : void 0,
124
+ className
125
+ ),
126
+ style: resolvedStyle,
127
+ "data-state": state,
128
+ children
129
+ }
130
+ )
131
+ }
132
+ )
133
+ ]
134
+ }
135
+ ) : null
114
136
  ] });
115
137
  });
116
138
  Dialog.displayName = "Dialog";