@lindle/linoardo 1.0.22 → 1.0.24
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.
- package/dist/alert.cjs +18 -0
- package/dist/alert.cjs.map +1 -0
- package/dist/alert.d.cts +9 -0
- package/dist/alert.d.ts +9 -0
- package/dist/alert.js +3 -0
- package/dist/alert.js.map +1 -0
- package/dist/app-bar.cjs +168 -0
- package/dist/app-bar.cjs.map +1 -0
- package/dist/app-bar.d.cts +25 -0
- package/dist/app-bar.d.ts +25 -0
- package/dist/app-bar.js +3 -0
- package/dist/app-bar.js.map +1 -0
- package/dist/badge.cjs +205 -0
- package/dist/badge.cjs.map +1 -0
- package/dist/badge.d.cts +71 -0
- package/dist/badge.d.ts +71 -0
- package/dist/badge.js +3 -0
- package/dist/badge.js.map +1 -0
- package/dist/block.cjs +70 -0
- package/dist/block.cjs.map +1 -0
- package/dist/block.d.cts +32 -0
- package/dist/block.d.ts +32 -0
- package/dist/block.js +3 -0
- package/dist/block.js.map +1 -0
- package/dist/chunk-5GT6L4BE.js +48 -0
- package/dist/chunk-5GT6L4BE.js.map +1 -0
- package/dist/chunk-67BAO35I.js +146 -0
- package/dist/chunk-67BAO35I.js.map +1 -0
- package/dist/chunk-6SKW43XI.js +14 -0
- package/dist/chunk-6SKW43XI.js.map +1 -0
- package/dist/chunk-HIRPMCQJ.js +183 -0
- package/dist/chunk-HIRPMCQJ.js.map +1 -0
- package/dist/chunk-KQOR3C7E.js +16 -0
- package/dist/chunk-KQOR3C7E.js.map +1 -0
- package/dist/{chunk-SAGQYMS3.js → chunk-OPMXH6OF.js} +3 -14
- package/dist/chunk-OPMXH6OF.js.map +1 -0
- package/dist/chunk-SCJMH5VE.js +469 -0
- package/dist/chunk-SCJMH5VE.js.map +1 -0
- package/dist/index.cjs +755 -66
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -26
- package/dist/index.d.ts +7 -26
- package/dist/index.js +14 -151
- package/dist/index.js.map +1 -1
- package/dist/select.js +2 -1
- package/dist/styles.css +324 -0
- package/dist/textarea.cjs +486 -0
- package/dist/textarea.cjs.map +1 -0
- package/dist/textarea.d.cts +29 -0
- package/dist/textarea.d.ts +29 -0
- package/dist/textarea.js +4 -0
- package/dist/textarea.js.map +1 -0
- package/package.json +45 -1
- package/readme.md +46 -0
- package/dist/chunk-SAGQYMS3.js.map +0 -1
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
// src/Info/Badge/index.tsx
|
|
6
|
+
|
|
7
|
+
// src/Info/Badge/states.badge.ts
|
|
8
|
+
var placementGeometries = {
|
|
9
|
+
"top-end": {
|
|
10
|
+
overlap: { top: 0, right: 0, translateX: "50%", translateY: "-50%" },
|
|
11
|
+
detached: { top: 0, right: 0, translateX: "50%", translateY: "-100%" }
|
|
12
|
+
},
|
|
13
|
+
"top-start": {
|
|
14
|
+
overlap: { top: 0, left: 0, translateX: "-50%", translateY: "-50%" },
|
|
15
|
+
detached: { top: 0, left: 0, translateX: "-50%", translateY: "-100%" }
|
|
16
|
+
},
|
|
17
|
+
"bottom-end": {
|
|
18
|
+
overlap: { bottom: 0, right: 0, translateX: "50%", translateY: "50%" },
|
|
19
|
+
detached: { bottom: 0, right: 0, translateX: "50%", translateY: "100%" }
|
|
20
|
+
},
|
|
21
|
+
"bottom-start": {
|
|
22
|
+
overlap: { bottom: 0, left: 0, translateX: "-50%", translateY: "50%" },
|
|
23
|
+
detached: { bottom: 0, left: 0, translateX: "-50%", translateY: "100%" }
|
|
24
|
+
},
|
|
25
|
+
center: {
|
|
26
|
+
overlap: { top: "50%", left: "50%", translateX: "-50%", translateY: "-50%" },
|
|
27
|
+
detached: { top: "50%", left: "50%", translateX: "-50%", translateY: "-50%" }
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
var badgePaletteClasses = {
|
|
31
|
+
primary: "bg-primary text-white",
|
|
32
|
+
neutral: "bg-gray-500 text-white",
|
|
33
|
+
info: "bg-sky-500 text-white",
|
|
34
|
+
success: "bg-emerald-500 text-white",
|
|
35
|
+
warning: "bg-amber-500 text-white",
|
|
36
|
+
danger: "bg-red-500 text-white",
|
|
37
|
+
surface: "bg-white text-gray-900 border border-gray-200",
|
|
38
|
+
bw: "bg-white text-black border border-black"
|
|
39
|
+
};
|
|
40
|
+
var resolvePlacementGeometry = (placement, overlap) => {
|
|
41
|
+
const group = placementGeometries[placement] ?? placementGeometries["top-end"];
|
|
42
|
+
return overlap ? group.overlap : group.detached;
|
|
43
|
+
};
|
|
44
|
+
var buildTranslateComponent = (base, delta) => {
|
|
45
|
+
if (!delta) {
|
|
46
|
+
return base;
|
|
47
|
+
}
|
|
48
|
+
const normalizedBase = base.endsWith("%") || base.endsWith("px") ? base : `${base}`;
|
|
49
|
+
const operator = delta >= 0 ? "+" : "-";
|
|
50
|
+
const magnitude = Math.abs(delta);
|
|
51
|
+
return `calc(${normalizedBase} ${operator} ${magnitude}px)`;
|
|
52
|
+
};
|
|
53
|
+
var iconBaseClasses = {
|
|
54
|
+
mdi: ["mdi"]
|
|
55
|
+
};
|
|
56
|
+
var resolveIconClassName = (icon) => {
|
|
57
|
+
if (!icon) {
|
|
58
|
+
return void 0;
|
|
59
|
+
}
|
|
60
|
+
if (typeof icon === "string") {
|
|
61
|
+
const trimmed = icon.trim();
|
|
62
|
+
if (!trimmed) {
|
|
63
|
+
return void 0;
|
|
64
|
+
}
|
|
65
|
+
if (trimmed.includes(" ")) {
|
|
66
|
+
return trimmed;
|
|
67
|
+
}
|
|
68
|
+
const normalized2 = trimmed.startsWith("mdi-") ? trimmed : `mdi-${trimmed}`;
|
|
69
|
+
return ["mdi", normalized2].join(" ");
|
|
70
|
+
}
|
|
71
|
+
const [library, providedName] = icon;
|
|
72
|
+
const normalizedLibrary = library.trim();
|
|
73
|
+
const base = iconBaseClasses[normalizedLibrary] ?? [normalizedLibrary];
|
|
74
|
+
const iconName = providedName.trim();
|
|
75
|
+
if (!iconName) {
|
|
76
|
+
return base.join(" ");
|
|
77
|
+
}
|
|
78
|
+
const normalized = iconName.startsWith("mdi-") ? iconName : `mdi-${iconName}`;
|
|
79
|
+
return Array.from(/* @__PURE__ */ new Set([...base, normalized])).join(" ");
|
|
80
|
+
};
|
|
81
|
+
var Badge = ({
|
|
82
|
+
children,
|
|
83
|
+
content,
|
|
84
|
+
max = 99,
|
|
85
|
+
showZero = false,
|
|
86
|
+
dot = false,
|
|
87
|
+
icon,
|
|
88
|
+
color = "primary",
|
|
89
|
+
placement = "top-end",
|
|
90
|
+
offset,
|
|
91
|
+
overlap = true,
|
|
92
|
+
bordered = false,
|
|
93
|
+
floating = false,
|
|
94
|
+
visible = true,
|
|
95
|
+
badgeClassName,
|
|
96
|
+
inline = true,
|
|
97
|
+
className,
|
|
98
|
+
...rest
|
|
99
|
+
}) => {
|
|
100
|
+
const hasChildren = React.Children.count(children) > 0;
|
|
101
|
+
const iconClassName = resolveIconClassName(icon);
|
|
102
|
+
const isNumberContent = typeof content === "number" && Number.isFinite(content);
|
|
103
|
+
let displayValue = content;
|
|
104
|
+
if (!dot && !iconClassName && isNumberContent) {
|
|
105
|
+
const numericContent = content;
|
|
106
|
+
if (typeof max === "number" && Number.isFinite(max) && numericContent > max) {
|
|
107
|
+
displayValue = `${max}+`;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (!dot && !iconClassName && isNumberContent) {
|
|
111
|
+
const numericContent = content;
|
|
112
|
+
if (!showZero && numericContent === 0) {
|
|
113
|
+
displayValue = void 0;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const hasRenderableContent = dot || Boolean(iconClassName) || displayValue !== null && displayValue !== void 0 && displayValue !== "";
|
|
117
|
+
const shouldRenderBadge = visible && hasRenderableContent;
|
|
118
|
+
const paletteClass = badgePaletteClasses[color] ?? badgePaletteClasses.primary;
|
|
119
|
+
const [offsetX = 0, offsetY = 0] = offset ?? [];
|
|
120
|
+
const isPositioned = hasChildren && !floating;
|
|
121
|
+
const placementStyle = (() => {
|
|
122
|
+
if (!isPositioned) {
|
|
123
|
+
if (!offsetX && !offsetY) {
|
|
124
|
+
return void 0;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
transform: `translate(${offsetX}px, ${offsetY}px)`
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
const geometry = resolvePlacementGeometry(placement, overlap);
|
|
131
|
+
const style = {};
|
|
132
|
+
if (geometry.top !== void 0) {
|
|
133
|
+
style.top = geometry.top;
|
|
134
|
+
}
|
|
135
|
+
if (geometry.right !== void 0) {
|
|
136
|
+
style.right = geometry.right;
|
|
137
|
+
}
|
|
138
|
+
if (geometry.bottom !== void 0) {
|
|
139
|
+
style.bottom = geometry.bottom;
|
|
140
|
+
}
|
|
141
|
+
if (geometry.left !== void 0) {
|
|
142
|
+
style.left = geometry.left;
|
|
143
|
+
}
|
|
144
|
+
const translateX = buildTranslateComponent(geometry.translateX, offsetX);
|
|
145
|
+
const translateY = buildTranslateComponent(geometry.translateY, offsetY);
|
|
146
|
+
style.transform = `translate(${translateX}, ${translateY})`;
|
|
147
|
+
return style;
|
|
148
|
+
})();
|
|
149
|
+
const badgeContainerClasses = twMerge(
|
|
150
|
+
"pointer-events-none select-none",
|
|
151
|
+
isPositioned ? "absolute" : "relative",
|
|
152
|
+
"flex items-center justify-center whitespace-nowrap",
|
|
153
|
+
dot ? void 0 : "p-0"
|
|
154
|
+
);
|
|
155
|
+
const badgeContentClasses = twMerge(
|
|
156
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-full px-2.5 py-1.5 text-xs font-semibold leading-none min-w-6 min-h-6",
|
|
157
|
+
paletteClass,
|
|
158
|
+
bordered ? "ring-2 ring-white ring-offset-0" : void 0,
|
|
159
|
+
badgeClassName
|
|
160
|
+
);
|
|
161
|
+
const badgeDotClasses = twMerge(
|
|
162
|
+
"inline-block h-2 w-2 rounded-full",
|
|
163
|
+
paletteClass,
|
|
164
|
+
bordered ? "ring-2 ring-white ring-offset-0" : void 0,
|
|
165
|
+
badgeClassName
|
|
166
|
+
);
|
|
167
|
+
const rootClasses = twMerge(
|
|
168
|
+
"relative",
|
|
169
|
+
inline ? "inline-flex" : "flex",
|
|
170
|
+
hasChildren ? void 0 : "items-center justify-center",
|
|
171
|
+
className
|
|
172
|
+
);
|
|
173
|
+
const resolvedChildren = typeof children === "string" || typeof children === "number" ? /* @__PURE__ */ jsx("span", { className: "inline-flex items-center justify-center", children }) : children;
|
|
174
|
+
return /* @__PURE__ */ jsxs("span", { ...rest, className: rootClasses, children: [
|
|
175
|
+
resolvedChildren,
|
|
176
|
+
shouldRenderBadge && /* @__PURE__ */ jsx("span", { className: badgeContainerClasses, style: placementStyle, children: dot ? /* @__PURE__ */ jsx("span", { className: badgeDotClasses }) : /* @__PURE__ */ jsx("span", { className: twMerge(badgeContentClasses), children: iconClassName ? /* @__PURE__ */ jsx("i", { className: iconClassName, "aria-hidden": true }) : displayValue }) })
|
|
177
|
+
] });
|
|
178
|
+
};
|
|
179
|
+
var Badge_default = Badge;
|
|
180
|
+
|
|
181
|
+
export { Badge_default };
|
|
182
|
+
//# sourceMappingURL=chunk-HIRPMCQJ.js.map
|
|
183
|
+
//# sourceMappingURL=chunk-HIRPMCQJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Info/Badge/states.badge.ts","../src/Info/Badge/index.tsx"],"names":["normalized"],"mappings":"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","file":"chunk-HIRPMCQJ.js","sourcesContent":["import { Palette } from '@lindle/linoardo/global.types';\nimport { BadgePlacement, IconDefinition, PlacementGeometry } from './types.badge';\n\nexport const placementGeometries: Record<BadgePlacement, { overlap: PlacementGeometry; detached: PlacementGeometry }> =\n {\n 'top-end': {\n overlap: { top: 0, right: 0, translateX: '50%', translateY: '-50%' },\n detached: { top: 0, right: 0, translateX: '50%', translateY: '-100%' }\n },\n 'top-start': {\n overlap: { top: 0, left: 0, translateX: '-50%', translateY: '-50%' },\n detached: { top: 0, left: 0, translateX: '-50%', translateY: '-100%' }\n },\n 'bottom-end': {\n overlap: { bottom: 0, right: 0, translateX: '50%', translateY: '50%' },\n detached: { bottom: 0, right: 0, translateX: '50%', translateY: '100%' }\n },\n 'bottom-start': {\n overlap: { bottom: 0, left: 0, translateX: '-50%', translateY: '50%' },\n detached: { bottom: 0, left: 0, translateX: '-50%', translateY: '100%' }\n },\n center: {\n overlap: { top: '50%', left: '50%', translateX: '-50%', translateY: '-50%' },\n detached: { top: '50%', left: '50%', translateX: '-50%', translateY: '-50%' }\n }\n };\n\nexport const badgePaletteClasses: Record<Palette, string> = {\n primary: 'bg-primary text-white',\n neutral: 'bg-gray-500 text-white',\n info: 'bg-sky-500 text-white',\n success: 'bg-emerald-500 text-white',\n warning: 'bg-amber-500 text-white',\n danger: 'bg-red-500 text-white',\n surface: 'bg-white text-gray-900 border border-gray-200',\n bw: 'bg-white text-black border border-black'\n};\n\nexport const resolvePlacementGeometry = (placement: BadgePlacement, overlap: boolean): PlacementGeometry => {\n const group = placementGeometries[placement] ?? placementGeometries['top-end'];\n return overlap ? group.overlap : group.detached;\n};\n\nexport const buildTranslateComponent = (base: string, delta: number) => {\n if (!delta) {\n return base;\n }\n\n const normalizedBase = base.endsWith('%') || base.endsWith('px') ? base : `${base}`;\n const operator = delta >= 0 ? '+' : '-';\n const magnitude = Math.abs(delta);\n return `calc(${normalizedBase} ${operator} ${magnitude}px)`;\n};\n\nconst iconBaseClasses = {\n mdi: ['mdi']\n} as const;\n\nexport const resolveIconClassName = (icon?: IconDefinition) => {\n if (!icon) {\n return undefined;\n }\n\n if (typeof icon === 'string') {\n const trimmed = icon.trim();\n if (!trimmed) {\n return undefined;\n }\n\n if (trimmed.includes(' ')) {\n return trimmed;\n }\n\n const normalized = trimmed.startsWith('mdi-') ? trimmed : `mdi-${trimmed}`;\n return ['mdi', normalized].join(' ');\n }\n\n const [library, providedName] = icon;\n const normalizedLibrary = library.trim();\n const base = iconBaseClasses[normalizedLibrary as keyof typeof iconBaseClasses] ?? [normalizedLibrary];\n const iconName = providedName.trim();\n if (!iconName) {\n return base.join(' ');\n }\n\n const normalized = iconName.startsWith('mdi-') ? iconName : `mdi-${iconName}`;\n return Array.from(new Set([...base, normalized])).join(' ');\n};\n","import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { BadgeProps } from './types.badge';\nimport {\n badgePaletteClasses,\n buildTranslateComponent,\n resolveIconClassName,\n resolvePlacementGeometry\n} from './states.badge';\n\n/**\n * Notification badge that can render numbers, dots or icons with flexible positioning.\n */\nconst Badge: React.FC<BadgeProps> = ({\n children,\n content,\n max = 99,\n showZero = false,\n dot = false,\n icon,\n color = 'primary',\n placement = 'top-end',\n offset,\n overlap = true,\n bordered = false,\n floating = false,\n visible = true,\n badgeClassName,\n inline = true,\n className,\n ...rest\n}) => {\n const hasChildren = React.Children.count(children) > 0;\n const iconClassName = resolveIconClassName(icon);\n const isNumberContent = typeof content === 'number' && Number.isFinite(content);\n\n let displayValue: React.ReactNode = content;\n if (!dot && !iconClassName && isNumberContent) {\n const numericContent = content as number;\n if (typeof max === 'number' && Number.isFinite(max) && numericContent > max) {\n displayValue = `${max}+`;\n }\n }\n\n if (!dot && !iconClassName && isNumberContent) {\n const numericContent = content as number;\n if (!showZero && numericContent === 0) {\n displayValue = undefined;\n }\n }\n\n const hasRenderableContent =\n dot || Boolean(iconClassName) || (displayValue !== null && displayValue !== undefined && displayValue !== '');\n\n const shouldRenderBadge = visible && hasRenderableContent;\n const paletteClass = badgePaletteClasses[color] ?? badgePaletteClasses.primary;\n\n const [offsetX = 0, offsetY = 0] = offset ?? [];\n\n const isPositioned = hasChildren && !floating;\n\n const placementStyle: React.CSSProperties | undefined = (() => {\n if (!isPositioned) {\n if (!offsetX && !offsetY) {\n return undefined;\n }\n\n return {\n transform: `translate(${offsetX}px, ${offsetY}px)`\n };\n }\n\n const geometry = resolvePlacementGeometry(placement, overlap);\n const style: React.CSSProperties = {};\n\n if (geometry.top !== undefined) {\n style.top = geometry.top;\n }\n if (geometry.right !== undefined) {\n style.right = geometry.right;\n }\n if (geometry.bottom !== undefined) {\n style.bottom = geometry.bottom;\n }\n if (geometry.left !== undefined) {\n style.left = geometry.left;\n }\n\n const translateX = buildTranslateComponent(geometry.translateX, offsetX);\n const translateY = buildTranslateComponent(geometry.translateY, offsetY);\n style.transform = `translate(${translateX}, ${translateY})`;\n return style;\n })();\n\n const badgeContainerClasses = twMerge(\n 'pointer-events-none select-none',\n isPositioned ? 'absolute' : 'relative',\n 'flex items-center justify-center whitespace-nowrap',\n dot ? undefined : 'p-0'\n );\n\n const badgeContentClasses = twMerge(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-full px-2.5 py-1.5 text-xs font-semibold leading-none min-w-6 min-h-6',\n paletteClass,\n bordered ? 'ring-2 ring-white ring-offset-0' : undefined,\n badgeClassName\n );\n\n const badgeDotClasses = twMerge(\n 'inline-block h-2 w-2 rounded-full',\n paletteClass,\n bordered ? 'ring-2 ring-white ring-offset-0' : undefined,\n badgeClassName\n );\n\n const rootClasses = twMerge(\n 'relative',\n inline ? 'inline-flex' : 'flex',\n hasChildren ? undefined : 'items-center justify-center',\n className\n );\n\n const resolvedChildren =\n typeof children === 'string' || typeof children === 'number' ? (\n <span className='inline-flex items-center justify-center'>{children}</span>\n ) : (\n children\n );\n\n return (\n <span {...rest} className={rootClasses}>\n {resolvedChildren}\n {shouldRenderBadge && (\n <span className={badgeContainerClasses} style={placementStyle}>\n {dot ? (\n <span className={badgeDotClasses} />\n ) : (\n <span className={twMerge(badgeContentClasses)}>\n {iconClassName ? <i className={iconClassName} aria-hidden /> : displayValue}\n </span>\n )}\n </span>\n )}\n </span>\n );\n};\n\nexport default Badge;\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { twMerge } from 'tailwind-merge';
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
// src/Info/Alert/index.tsx
|
|
5
|
+
var Alert = ({ className, children, ...rest }) => {
|
|
6
|
+
const classBase = "text-center p-4 bg-neutral-200 rounded-md ";
|
|
7
|
+
return /* @__PURE__ */ jsxs("div", { ...rest, className: twMerge("grid grid-cols-7 bg-neutral-200", className), children: [
|
|
8
|
+
/* @__PURE__ */ jsx("div", { className: "col-span-1 pt-4 pl-4", children: /* @__PURE__ */ jsx("i", { className: "mdi mdi-google text-2xl" }) }),
|
|
9
|
+
/* @__PURE__ */ jsx("div", { className: twMerge("col-span-6", classBase), children })
|
|
10
|
+
] });
|
|
11
|
+
};
|
|
12
|
+
var Alert_default = Alert;
|
|
13
|
+
|
|
14
|
+
export { Alert_default };
|
|
15
|
+
//# sourceMappingURL=chunk-KQOR3C7E.js.map
|
|
16
|
+
//# sourceMappingURL=chunk-KQOR3C7E.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Info/Alert/index.tsx"],"names":[],"mappings":";;;;AASA,IAAM,QAA8B,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,MAAK,KAAM;AACxE,EAAA,MAAM,SAAA,GAAY,6CAAA;AAElB,EAAA,uBACE,IAAA,CAAC,SAAK,GAAG,IAAA,EAAM,WAAW,OAAA,CAAQ,iCAAA,EAAmC,SAAS,CAAA,EAC5E,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,sBAAA,EACb,8BAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2BAA0B,CAAA,EACzC,CAAA;AAAA,wBACC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,YAAA,EAAc,SAAS,GAAI,QAAA,EAAS;AAAA,GAAA,EAC9D,CAAA;AAEJ,CAAA;AACA,IAAO,aAAA,GAAQ","file":"chunk-KQOR3C7E.js","sourcesContent":["import { twMerge } from 'tailwind-merge';\n\nexport type AlertProps = {\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Informational banner layout with icon column and message body.\n */\nconst Alert: React.FC<AlertProps> = ({ className, children, ...rest }) => {\n const classBase = 'text-center p-4 bg-neutral-200 rounded-md ';\n\n return (\n <div {...rest} className={twMerge('grid grid-cols-7 bg-neutral-200', className)}>\n <div className='col-span-1 pt-4 pl-4'>\n <i className='mdi mdi-google text-2xl'></i>\n </div>\n <div className={twMerge('col-span-6', classBase)}>{children}</div>\n </div>\n );\n};\nexport default Alert;\n"]}
|
|
@@ -1,19 +1,8 @@
|
|
|
1
|
+
import { generateString } from './chunk-6SKW43XI.js';
|
|
1
2
|
import React from 'react';
|
|
2
3
|
import { twMerge } from 'tailwind-merge';
|
|
3
4
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
5
|
|
|
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
6
|
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
7
|
var variantClasses = {
|
|
19
8
|
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",
|
|
@@ -163,5 +152,5 @@ var Select = ({
|
|
|
163
152
|
var Select_default = Select;
|
|
164
153
|
|
|
165
154
|
export { Select_default };
|
|
166
|
-
//# sourceMappingURL=chunk-
|
|
167
|
-
//# sourceMappingURL=chunk-
|
|
155
|
+
//# sourceMappingURL=chunk-OPMXH6OF.js.map
|
|
156
|
+
//# sourceMappingURL=chunk-OPMXH6OF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Form/Select/index.tsx"],"names":[],"mappings":"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","file":"chunk-OPMXH6OF.js","sourcesContent":["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"]}
|