@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.
Files changed (70) hide show
  1. package/dist/alert.cjs +18 -0
  2. package/dist/alert.cjs.map +1 -0
  3. package/dist/alert.d.cts +9 -0
  4. package/dist/alert.d.ts +9 -0
  5. package/dist/alert.js +3 -0
  6. package/dist/alert.js.map +1 -0
  7. package/dist/app-bar.cjs +168 -0
  8. package/dist/app-bar.cjs.map +1 -0
  9. package/dist/app-bar.d.cts +25 -0
  10. package/dist/app-bar.d.ts +25 -0
  11. package/dist/app-bar.js +3 -0
  12. package/dist/app-bar.js.map +1 -0
  13. package/dist/badge.cjs +205 -0
  14. package/dist/badge.cjs.map +1 -0
  15. package/dist/badge.d.cts +71 -0
  16. package/dist/badge.d.ts +71 -0
  17. package/dist/badge.js +3 -0
  18. package/dist/badge.js.map +1 -0
  19. package/dist/block.cjs +70 -0
  20. package/dist/block.cjs.map +1 -0
  21. package/dist/block.d.cts +32 -0
  22. package/dist/block.d.ts +32 -0
  23. package/dist/block.js +3 -0
  24. package/dist/block.js.map +1 -0
  25. package/dist/chunk-5GT6L4BE.js +48 -0
  26. package/dist/chunk-5GT6L4BE.js.map +1 -0
  27. package/dist/chunk-67BAO35I.js +146 -0
  28. package/dist/chunk-67BAO35I.js.map +1 -0
  29. package/dist/chunk-6SKW43XI.js +14 -0
  30. package/dist/chunk-6SKW43XI.js.map +1 -0
  31. package/dist/{chunk-JGEXEDKS.js → chunk-AUFMBVXA.js} +5 -5
  32. package/dist/{chunk-JGEXEDKS.js.map → chunk-AUFMBVXA.js.map} +1 -1
  33. package/dist/{chunk-SAGQYMS3.js → chunk-BZVDAMMY.js} +13 -16
  34. package/dist/chunk-BZVDAMMY.js.map +1 -0
  35. package/dist/chunk-HIRPMCQJ.js +183 -0
  36. package/dist/chunk-HIRPMCQJ.js.map +1 -0
  37. package/dist/{chunk-67USTSXI.js → chunk-KI4DBZ2V.js} +5 -3
  38. package/dist/chunk-KI4DBZ2V.js.map +1 -0
  39. package/dist/chunk-KQOR3C7E.js +16 -0
  40. package/dist/chunk-KQOR3C7E.js.map +1 -0
  41. package/dist/chunk-SCJMH5VE.js +469 -0
  42. package/dist/chunk-SCJMH5VE.js.map +1 -0
  43. package/dist/index.cjs +731 -72
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.d.cts +8 -55
  46. package/dist/index.d.ts +8 -55
  47. package/dist/index.js +14 -190
  48. package/dist/index.js.map +1 -1
  49. package/dist/input.cjs +3 -3
  50. package/dist/input.cjs.map +1 -1
  51. package/dist/input.js +1 -1
  52. package/dist/notification.cjs +3 -1
  53. package/dist/notification.cjs.map +1 -1
  54. package/dist/notification.d.cts +1 -0
  55. package/dist/notification.d.ts +1 -0
  56. package/dist/notification.js +1 -1
  57. package/dist/select.cjs +10 -2
  58. package/dist/select.cjs.map +1 -1
  59. package/dist/select.js +2 -1
  60. package/dist/styles.css +13 -0
  61. package/dist/textarea.cjs +486 -0
  62. package/dist/textarea.cjs.map +1 -0
  63. package/dist/textarea.d.cts +29 -0
  64. package/dist/textarea.d.ts +29 -0
  65. package/dist/textarea.js +4 -0
  66. package/dist/textarea.js.map +1 -0
  67. package/package.json +36 -1
  68. package/readme.md +46 -0
  69. package/dist/chunk-67USTSXI.js.map +0 -1
  70. 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("option", { value: option.value, disabled: option.disabled, children: option.label }, `${selectId}-${option.value}-${index}`))
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-0 text-xs px-1",
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-SAGQYMS3.js.map
167
- //# sourceMappingURL=chunk-SAGQYMS3.js.map
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-67USTSXI.js.map
214
- //# sourceMappingURL=chunk-67USTSXI.js.map
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"]}