@lindle/linoardo 1.0.23 → 1.0.25
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-JGEXEDKS.js → chunk-AUFMBVXA.js} +5 -5
- package/dist/{chunk-JGEXEDKS.js.map → chunk-AUFMBVXA.js.map} +1 -1
- package/dist/{chunk-SAGQYMS3.js → chunk-BZVDAMMY.js} +13 -16
- package/dist/chunk-BZVDAMMY.js.map +1 -0
- package/dist/chunk-HIRPMCQJ.js +183 -0
- package/dist/chunk-HIRPMCQJ.js.map +1 -0
- package/dist/{chunk-67USTSXI.js → chunk-KI4DBZ2V.js} +5 -3
- package/dist/chunk-KI4DBZ2V.js.map +1 -0
- package/dist/chunk-KQOR3C7E.js +16 -0
- package/dist/chunk-KQOR3C7E.js.map +1 -0
- package/dist/chunk-SCJMH5VE.js +469 -0
- package/dist/chunk-SCJMH5VE.js.map +1 -0
- package/dist/index.cjs +731 -72
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -55
- package/dist/index.d.ts +8 -55
- package/dist/index.js +14 -190
- package/dist/index.js.map +1 -1
- package/dist/input.cjs +3 -3
- package/dist/input.cjs.map +1 -1
- package/dist/input.js +1 -1
- package/dist/notification.cjs +3 -1
- package/dist/notification.cjs.map +1 -1
- package/dist/notification.d.cts +1 -0
- package/dist/notification.d.ts +1 -0
- package/dist/notification.js +1 -1
- package/dist/select.cjs +10 -2
- package/dist/select.cjs.map +1 -1
- package/dist/select.js +2 -1
- package/dist/styles.css +13 -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 +36 -1
- package/readme.md +46 -0
- package/dist/chunk-67USTSXI.js.map +0 -1
- package/dist/chunk-SAGQYMS3.js.map +0 -1
|
@@ -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",
|
|
@@ -137,7 +126,15 @@ var Select = ({
|
|
|
137
126
|
className: twMerge("peer", baseClass, variantClass, sizeClass, className),
|
|
138
127
|
children: [
|
|
139
128
|
shouldRenderPlaceholder && /* @__PURE__ */ jsx("option", { value: "", disabled: props.required, hidden: hasValue, children: placeholderOptionLabel }),
|
|
140
|
-
normalizedOptions.map((option, index) => /* @__PURE__ */ jsx(
|
|
129
|
+
normalizedOptions.map((option, index) => /* @__PURE__ */ jsx(
|
|
130
|
+
"option",
|
|
131
|
+
{
|
|
132
|
+
value: option.value,
|
|
133
|
+
disabled: option.disabled,
|
|
134
|
+
children: option.label
|
|
135
|
+
},
|
|
136
|
+
`${selectId}-${option.value}-${index}`
|
|
137
|
+
))
|
|
141
138
|
]
|
|
142
139
|
}
|
|
143
140
|
),
|
|
@@ -150,7 +147,7 @@ var Select = ({
|
|
|
150
147
|
"absolute transition-all duration-150 pointer-events-none text-gray-700 dark:text-gray-200",
|
|
151
148
|
labelLeftClass,
|
|
152
149
|
labelShouldFloat ? [
|
|
153
|
-
"top-
|
|
150
|
+
"-top-1.5 left-1 text-xs px-1",
|
|
154
151
|
isFocused ? "-translate-y-1/2 text-gray-600" : "-translate-y-2/3",
|
|
155
152
|
labelBgDefault
|
|
156
153
|
].join(" ") : "top-1/2 -translate-y-1/2 text-sm text-gray-500"
|
|
@@ -163,5 +160,5 @@ var Select = ({
|
|
|
163
160
|
var Select_default = Select;
|
|
164
161
|
|
|
165
162
|
export { Select_default };
|
|
166
|
-
//# sourceMappingURL=chunk-
|
|
167
|
-
//# sourceMappingURL=chunk-
|
|
163
|
+
//# sourceMappingURL=chunk-BZVDAMMY.js.map
|
|
164
|
+
//# sourceMappingURL=chunk-BZVDAMMY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Form/Select/index.tsx"],"names":[],"mappings":";;;;;AAOA,IAAM,SAAA,GACJ,8RAAA;AAEF,IAAM,cAAA,GAAiB;AAAA,EACrB,KAAA,EACE,uQAAA;AAAA,EACF,KAAA,EACE,4QAAA;AAAA,EACF,OAAA,EACE,2NAAA;AAAA,EACF,IAAA,EAAM,0NAAA;AAAA,EACN,KAAA,EACE,gTAAA;AAAA,EACF,MAAA,EACE,2OAAA;AAAA,EACF,UAAA,EACE,uNAAA;AAAA,EACF,OAAA,EACE;AACJ,CAAA;AAEA,IAAM,WAAA,GAAc;AAAA,EAClB,SAAA,EAAW,EAAE,OAAA,EAAS,gBAAA,EAAkB,MAAM,SAAA,EAAU;AAAA,EACxD,KAAA,EAAO,EAAE,OAAA,EAAS,oBAAA,EAAsB,MAAM,SAAA,EAAU;AAAA,EACxD,MAAA,EAAQ,EAAE,OAAA,EAAS,iBAAA,EAAmB,MAAM,WAAA,EAAY;AAAA,EACxD,KAAA,EAAO,EAAE,OAAA,EAAS,qBAAA,EAAuB,MAAM,SAAA,EAAU;AAAA,EACzD,SAAA,EAAW,EAAE,OAAA,EAAS,iBAAA,EAAmB,MAAM,SAAA;AACjD,CAAA;AAEA,IAAM,eAAA,GAAkB,CAAC,MAAA,KAA6C;AACpE,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EACxC;AAEA,EAAA,OAAO,MAAA;AACT,CAAA;AAMA,IAAM,SAAgC,CAAC;AAAA,EACrC,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,QAAA;AAAA,EACP,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,EAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,QAAA,GAAW,EAAA,IAAM,IAAA,IAAQ,cAAA,EAAe;AAC9C,EAAA,MAAM,aAAa,IAAA,IAAQ,QAAA;AAC3B,EAAA,MAAM,YAAA,GAAe,cAAA,CAAe,OAAO,CAAA,IAAK,cAAA,CAAe,OAAA;AAC/D,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,IAAI,CAAA,IAAK,WAAA,CAAY,MAAA;AACpD,EAAA,MAAM,YAAY,CAAA,EAAG,UAAA,CAAW,OAAO,CAAA,CAAA,EAAI,WAAW,IAAI,CAAA,CAAA;AAC1D,EAAA,MAAM,iBAAA,GAAoB,OAAA,CAAQ,GAAA,CAAI,eAAe,CAAA;AACrD,EAAA,MAAM,QAAA,GAAW,QAAQ,KAAK,CAAA;AAC9B,EAAA,MAAM,yBAAyB,OAAO,WAAA,KAAgB,YAAY,WAAA,CAAY,IAAA,GAAO,MAAA,GAAS,CAAA;AAC9F,EAAA,MAAM,yBAAA,GAA4B,QAAA,IAAY,sBAAA,IAA0B,CAAC,QAAA;AACzE,EAAA,MAAM,eAAA,GAAkB,WAAA,KAAgB,QAAA,GAAW,GAAA,GAAM,MAAA,CAAA;AACzD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,KAAA,CAAM,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,KAAA,CAAM,SAAS,MAAM;AACnD,IAAA,MAAM,UAAU,KAAA,IAAS,YAAA;AACzB,IAAA,IAAI,OAAA,KAAY,MAAA,IAAa,OAAA,KAAY,IAAA,EAAM,OAAO,KAAA;AACtD,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,MAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,OAAO,QAAQ,MAAA,GAAS,CAAA;AACpD,MAAA,OAAO,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA;AAAA,IAClC;AACA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,MAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA;AACjC,MAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAC,EAAE,MAAA,GAAS,CAAA;AAAA,IACrC;AACA,IAAA,OAAO,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA;AAAA,EAClC,CAAC,CAAA;AACD,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAE/B,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,MAAA,WAAA,CAAY,KAAK,CAAA;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,QAAA,WAAA,CAAY,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,MAC9B,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,MAAA,CAAO,KAAK,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AAAA,MACtC;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,WAAA,CAAY,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,KAAK,CAAA;AAClE,MAAA;AAAA,IACF;AACA,IAAA,WAAA,CAAY,MAAA,CAAO,KAAK,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AAAA,EACtC,CAAA,EAAG,CAAC,YAAA,EAAc,QAAA,EAAU,KAAK,CAAC,CAAA;AAElC,EAAA,MAAM,sBAAA,GAAyB,yBAAA,IAA6B,CAAC,SAAA,GAAY,GAAA,GAAM,eAAA;AAC/E,EAAA,MAAM,uBAAA,GAA0B,CAAC,QAAA,IAAY,eAAA,KAAoB,MAAA;AACjE,EAAA,MAAM,mBAAmB,QAAA,IAAY,SAAA;AACrC,EAAA,MAAM,cAAA,GAAiB,QAAA;AACvB,EAAA,MAAM,cAAA,GAAiB,CAAC,SAAA,EAAW,MAAA,EAAQ,YAAY,CAAA,CAAE,QAAA,CAAS,OAAO,CAAA,GACrE,gBAAA,GACA,+BAAA;AAEJ,EAAA,MAAM,cAA0D,CAAA,KAAA,KAAS;AACvE,IAAA,IAAI,yBAAA,eAAwC,IAAI,CAAA;AAChD,IAAA,OAAA,GAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,aAAyD,CAAA,KAAA,KAAS;AACtE,IAAA,IAAI,yBAAA,eAAwC,KAAK,CAAA;AACjD,IAAA,MAAA,GAAS,KAAK,CAAA;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,eAA4D,CAAA,KAAA,KAAS;AACzE,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,YAAA,GAAe,WACjB,KAAA,CAAM,MAAA,CAAO,gBAAgB,MAAA,GAAS,CAAA,GACtC,KAAA,CAAM,MAAA,CAAO,KAAA,KAAU,EAAA;AAC3B,MAAA,WAAA,CAAY,YAAY,CAAA;AAAA,IAC1B;AACA,IAAA,QAAA,GAAW,KAAK,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,qBAAA,EAAuB,gBAAgB,CAAA,EAC7D,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACE,GAAG,KAAA;AAAA,QACJ,EAAA,EAAI,QAAA;AAAA,QACJ,IAAA,EAAM,UAAA;AAAA,QACN,QAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA,EAAc,KAAA,KAAU,MAAA,GAAY,YAAA,GAAe,MAAA;AAAA,QACnD,OAAA,EAAS,WAAA;AAAA,QACT,MAAA,EAAQ,UAAA;AAAA,QACR,QAAA,EAAU,YAAA;AAAA,QACV,WAAW,OAAA,CAAQ,MAAA,EAAQ,SAAA,EAAW,YAAA,EAAc,WAAW,SAAS,CAAA;AAAA,QAEvE,QAAA,EAAA;AAAA,UAAA,uBAAA,oBACC,GAAA,CAAC,YAAO,KAAA,EAAM,EAAA,EAAG,UAAU,KAAA,CAAM,QAAA,EAAU,MAAA,EAAQ,QAAA,EAChD,QAAA,EAAA,sBAAA,EACH,CAAA;AAAA,UAED,iBAAA,CAAkB,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,qBAC9B,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,OAAO,MAAA,CAAO,KAAA;AAAA,cACd,UAAU,MAAA,CAAO,QAAA;AAAA,cAEhB,QAAA,EAAA,MAAA,CAAO;AAAA,aAAA;AAAA,YAJH,GAAG,QAAQ,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,IAAI,KAAK,CAAA;AAAA,WAM5C;AAAA;AAAA;AAAA,KACH;AAAA,IACC,CAAC,QAAA,oBACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mGAAA,EACd,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6CAAA,EAA8C,aAAA,EAAW,IAAA,EAAC,CAAA,EACzE,CAAA;AAAA,IAED,KAAA,oBACC,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,QAAA;AAAA,QACT,SAAA,EAAW,OAAA;AAAA,UACT,2FAAA;AAAA,UACA,cAAA;AAAA,UACA,gBAAA,GACI;AAAA,YACE,8BAAA;AAAA,YACA,YAAY,gCAAA,GAAmC,kBAAA;AAAA,YAC/C;AAAA,WACF,CAAE,IAAA,CAAK,GAAG,CAAA,GACV;AAAA,SACN;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAO,cAAA,GAAQ","file":"chunk-BZVDAMMY.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\n ? event.target.selectedOptions.length > 0\n : 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\n key={`${selectId}-${option.value}-${index}`}\n value={option.value}\n disabled={option.disabled}\n >\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-1.5 left-1 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"]}
|
|
@@ -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"]}
|
|
@@ -177,6 +177,7 @@ var NotificationCard = ({ item }) => {
|
|
|
177
177
|
var Notification = ({
|
|
178
178
|
items = [],
|
|
179
179
|
placement = "topRight",
|
|
180
|
+
variant = "solid",
|
|
180
181
|
gap = 12,
|
|
181
182
|
containerClassName,
|
|
182
183
|
className,
|
|
@@ -187,8 +188,9 @@ var Notification = ({
|
|
|
187
188
|
items.forEach((item) => {
|
|
188
189
|
const resolvedKey = item.key ?? `notification-${item.message ?? Math.random()}`;
|
|
189
190
|
const resolvedPlacement = item.placement ?? placement;
|
|
191
|
+
const resolvedVariant = item.variant ?? variant;
|
|
190
192
|
const group = grouped.get(resolvedPlacement) ?? [];
|
|
191
|
-
group.push({ ...item, key: resolvedKey });
|
|
193
|
+
group.push({ ...item, key: resolvedKey, variant: resolvedVariant });
|
|
192
194
|
grouped.set(resolvedPlacement, group);
|
|
193
195
|
});
|
|
194
196
|
return /* @__PURE__ */ jsx(Fragment, { children: Array.from(grouped.entries()).map(([groupPlacement, groupItems]) => /* @__PURE__ */ jsx(
|
|
@@ -210,5 +212,5 @@ var Notification = ({
|
|
|
210
212
|
var Notification_default = Notification;
|
|
211
213
|
|
|
212
214
|
export { Notification_default };
|
|
213
|
-
//# sourceMappingURL=chunk-
|
|
214
|
-
//# sourceMappingURL=chunk-
|
|
215
|
+
//# sourceMappingURL=chunk-KI4DBZ2V.js.map
|
|
216
|
+
//# sourceMappingURL=chunk-KI4DBZ2V.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Feedback/Notification/index.tsx"],"names":["normalized"],"mappings":"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","file":"chunk-KI4DBZ2V.js","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type {\n NotificationArgs,\n NotificationPlacement,\n NotificationProps,\n NotificationType,\n NotificationVariant\n} from './types.notification';\nimport type { PropIcon } from '../../global.types';\n\nconst placementClasses: Record<NotificationPlacement, string> = {\n topLeft: 'top-4 left-4 items-start',\n topRight: 'top-4 right-4 items-end',\n bottomLeft: 'bottom-4 left-4 items-start',\n bottomRight: 'bottom-4 right-4 items-end'\n};\n\nconst typeIconMap: Record<NotificationType, string> = {\n info: 'mdi-information-outline',\n success: 'mdi-check-circle-outline',\n warning: 'mdi-alert-outline',\n error: 'mdi-close-circle-outline'\n};\n\nconst typeAccentMap: Record<NotificationType, string> = {\n info: 'bg-sky-50 text-sky-600',\n success: 'bg-emerald-50 text-emerald-600',\n warning: 'bg-amber-50 text-amber-700',\n error: 'bg-red-50 text-red-600'\n};\n\nconst typeTone: Record<\n NotificationType,\n { bg: string; text: string; border: string; iconBg: string; iconText: string }\n> = {\n info: {\n bg: 'bg-sky-50',\n text: 'text-sky-900',\n border: 'border-sky-200',\n iconBg: 'bg-sky-100',\n iconText: 'text-sky-600'\n },\n success: {\n bg: 'bg-emerald-50',\n text: 'text-emerald-900',\n border: 'border-emerald-200',\n iconBg: 'bg-emerald-100',\n iconText: 'text-emerald-600'\n },\n warning: {\n bg: 'bg-amber-50',\n text: 'text-amber-900',\n border: 'border-amber-200',\n iconBg: 'bg-amber-100',\n iconText: 'text-amber-700'\n },\n error: {\n bg: 'bg-red-50',\n text: 'text-red-900',\n border: 'border-red-200',\n iconBg: 'bg-red-100',\n iconText: 'text-red-600'\n }\n};\n\nconst resolveVariantClass = (variant: NotificationVariant, type?: NotificationType) => {\n const tone = type ? typeTone[type] : undefined;\n switch (variant) {\n case 'filled':\n return twMerge(\n tone?.bg ?? 'bg-primary/10',\n tone?.text ?? 'text-primary',\n 'border border-transparent shadow-none'\n );\n case 'outline':\n return twMerge(\n 'bg-white/90',\n tone?.text ?? 'text-gray-900',\n tone?.border ?? 'border-primary/20',\n 'border-[1.5px]'\n );\n case 'ghost':\n return twMerge(\n 'bg-transparent shadow-none border border-transparent',\n tone?.text ?? 'text-gray-900'\n );\n case 'solid':\n default:\n return 'bg-white/95 text-gray-900 border border-gray-200';\n }\n};\n\nconst resolveIconClassName = (icon?: PropIcon | string) => {\n if (!icon) return undefined;\n if (typeof icon === 'string') {\n const trimmed = icon.trim();\n if (!trimmed) return undefined;\n if (trimmed.includes(' ')) return trimmed;\n const normalized = trimmed.startsWith('mdi-') ? trimmed : `mdi-${trimmed}`;\n return `mdi ${normalized}`;\n }\n const [library, iconName] = icon;\n const normalized = iconName?.startsWith('mdi-') ? iconName : `mdi-${iconName}`;\n return `mdi ${library} ${normalized}`.trim();\n};\n\nconst resolveIconNode = (icon?: React.ReactNode | PropIcon, fallbackClassName?: string) => {\n if (React.isValidElement(icon)) return icon;\n const iconClassName = resolveIconClassName(icon as PropIcon) ?? fallbackClassName;\n if (!iconClassName) return null;\n const hasBase = iconClassName.split(' ').some(token => token.trim() === 'mdi');\n const hasGlyph = iconClassName.includes('mdi-');\n const finalClassName = hasBase && hasGlyph ? iconClassName : `mdi ${iconClassName}`.trim();\n return <i className={finalClassName} aria-hidden />;\n};\n\nconst NotificationCard: React.FC<{\n item: NotificationArgs & { key: React.Key };\n}> = ({ item }) => {\n const {\n key,\n message,\n description,\n icon,\n closeIcon,\n closable = true,\n btn,\n onClick,\n className,\n style,\n role = 'status',\n type,\n variant = 'solid',\n ...rest\n } = item;\n\n const hasMessage = message !== undefined && message !== null;\n const hasDescription = description !== undefined && description !== null;\n const hasContent = hasMessage || hasDescription;\n const accentClass = type ? typeAccentMap[type] : undefined;\n const iconNode = resolveIconNode(icon, type ? `mdi ${typeIconMap[type]}` : undefined);\n const closeIconNode = resolveIconNode(closeIcon, 'mdi mdi-close');\n const variantClass = resolveVariantClass(variant as NotificationVariant, type);\n const toneIconBg = type ? typeTone[type]?.iconBg : undefined;\n const toneIconText = type ? typeTone[type]?.iconText : undefined;\n\n return (\n <article\n {...rest}\n role={role}\n className={twMerge(\n 'pointer-events-auto flex w-88 max-w-[calc(100vw-2.5rem)] gap-3 rounded-2xl p-4 shadow-xl ring-1 ring-black/5 backdrop-blur-sm transition hover:-translate-y-0.5 hover:shadow-2xl focus:outline-none',\n 'dark:border-gray-800 dark:bg-gray-900/95 dark:text-gray-50 dark:ring-white/5',\n variantClass,\n className\n )}\n style={style}\n onClick={onClick}\n >\n {iconNode ? (\n <div\n className={twMerge(\n 'mt-0.5 flex h-10 w-10 shrink-0 items-center justify-center rounded-xl text-xl',\n toneIconBg ?? accentClass ?? 'bg-primary/10',\n toneIconText ?? 'text-primary'\n )}\n >\n {iconNode}\n </div>\n ) : null}\n <div className='min-w-0 flex-1 space-y-1'>\n {hasContent ? (\n <div className='space-y-1'>\n {hasMessage ? (\n <div className='text-[15px] font-semibold leading-5 text-gray-900 dark:text-white'>\n {message}\n </div>\n ) : null}\n {hasDescription ? (\n <div className='text-sm leading-6 text-gray-600 dark:text-gray-300'>\n {description}\n </div>\n ) : null}\n </div>\n ) : null}\n {btn ? <div className='pt-1 text-sm'>{btn}</div> : null}\n </div>\n {closable ? (\n <button\n type='button'\n aria-label='Zavřít upozornění'\n className='-mr-1 -mt-1 h-8 w-8 shrink-0 rounded-full text-gray-500 transition hover:bg-gray-100 hover:text-gray-700 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white'\n onClick={event => {\n event.stopPropagation();\n item.onClose?.();\n }}\n >\n {closeIconNode}\n </button>\n ) : null}\n </article>\n );\n};\n\nconst Notification: React.FC<NotificationProps> = ({\n items = [],\n placement = 'topRight',\n variant = 'solid',\n gap = 12,\n containerClassName,\n className,\n ...rest\n}) => {\n if (!items.length) return null;\n\n const grouped = new Map<NotificationPlacement, (NotificationArgs & { key: React.Key })[]>();\n items.forEach(item => {\n const resolvedKey = item.key ?? `notification-${item.message ?? Math.random()}`;\n const resolvedPlacement = item.placement ?? placement;\n const resolvedVariant = item.variant ?? variant;\n const group = grouped.get(resolvedPlacement) ?? [];\n group.push({ ...item, key: resolvedKey, variant: resolvedVariant });\n grouped.set(resolvedPlacement, group);\n });\n\n return (\n <>\n {Array.from(grouped.entries()).map(([groupPlacement, groupItems]) => (\n <div\n key={groupPlacement}\n className={twMerge(\n 'pointer-events-none fixed z-70 flex w-full max-w-[24rem] flex-col',\n placementClasses[groupPlacement],\n containerClassName,\n className\n )}\n style={{ gap: `${gap}px` }}\n {...rest}\n >\n {groupItems.map(item => (\n <NotificationCard key={item.key} item={item} />\n ))}\n </div>\n ))}\n </>\n );\n};\n\nexport type {\n NotificationArgs,\n NotificationPlacement,\n NotificationProps,\n NotificationType,\n NotificationVariant\n} from './types.notification';\nexport default Notification;\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"]}
|