@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
@@ -25,6 +25,7 @@ interface NotificationArgs extends react.HTMLAttributes<HTMLDivElement> {
25
25
  interface NotificationProps extends react.HTMLAttributes<HTMLDivElement> {
26
26
  items?: NotificationArgs[];
27
27
  placement?: NotificationPlacement;
28
+ variant?: NotificationVariant;
28
29
  gap?: number;
29
30
  containerClassName?: string;
30
31
  }
@@ -25,6 +25,7 @@ interface NotificationArgs extends react.HTMLAttributes<HTMLDivElement> {
25
25
  interface NotificationProps extends react.HTMLAttributes<HTMLDivElement> {
26
26
  items?: NotificationArgs[];
27
27
  placement?: NotificationPlacement;
28
+ variant?: NotificationVariant;
28
29
  gap?: number;
29
30
  containerClassName?: string;
30
31
  }
@@ -1,3 +1,3 @@
1
- export { Notification_default as default } from './chunk-67USTSXI.js';
1
+ export { Notification_default as default } from './chunk-KI4DBZ2V.js';
2
2
  //# sourceMappingURL=notification.js.map
3
3
  //# sourceMappingURL=notification.js.map
package/dist/select.cjs CHANGED
@@ -143,7 +143,15 @@ var Select = ({
143
143
  className: tailwindMerge.twMerge("peer", baseClass, variantClass, sizeClass, className),
144
144
  children: [
145
145
  shouldRenderPlaceholder && /* @__PURE__ */ jsxRuntime.jsx("option", { value: "", disabled: props.required, hidden: hasValue, children: placeholderOptionLabel }),
146
- normalizedOptions.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, disabled: option.disabled, children: option.label }, `${selectId}-${option.value}-${index}`))
146
+ normalizedOptions.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(
147
+ "option",
148
+ {
149
+ value: option.value,
150
+ disabled: option.disabled,
151
+ children: option.label
152
+ },
153
+ `${selectId}-${option.value}-${index}`
154
+ ))
147
155
  ]
148
156
  }
149
157
  ),
@@ -156,7 +164,7 @@ var Select = ({
156
164
  "absolute transition-all duration-150 pointer-events-none text-gray-700 dark:text-gray-200",
157
165
  labelLeftClass,
158
166
  labelShouldFloat ? [
159
- "top-0 text-xs px-1",
167
+ "-top-1.5 left-1 text-xs px-1",
160
168
  isFocused ? "-translate-y-1/2 text-gray-600" : "-translate-y-2/3",
161
169
  labelBgDefault
162
170
  ].join(" ") : "top-1/2 -translate-y-1/2 text-sm text-gray-500"
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/helpers/randomStr.ts","../src/Form/Select/index.tsx"],"names":["React","jsx","twMerge","jsxs"],"mappings":";;;;;;;;;;;;;AAAA,IAAM,UAAA,GAAa,gEAAA;AAEZ,SAAS,cAAA,CAAe,SAAS,CAAA,EAAG;AACzC,EAAA,IAAI,MAAA,GAAiB,EAAA;AACrB,EAAA,MAAM,mBAAmB,UAAA,CAAW,MAAA;AACpC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,IAAA,MAAA,IAAU,UAAA,CAAW,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,MAAA,EAAO,GAAI,gBAAgB,CAAC,CAAA;AAAA,EAC1E;AAEA,EAAA,OAAO,MAAA;AACT;ACHA,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,GAAIA,sBAAA,CAAM,SAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,sBAAA,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,EAAAA,sBAAA,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,WAAW,KAAA,CAAM,MAAA,CAAO,gBAAgB,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,KAAA,KAAU,EAAA;AACjG,MAAA,WAAA,CAAY,YAAY,CAAA;AAAA,IAC1B;AACA,IAAA,QAAA,GAAW,KAAK,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,qBAAA,CAAQ,qBAAA,EAAuB,gBAAgB,CAAA,EAC7D,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAA;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,WAAWD,qBAAA,CAAQ,MAAA,EAAQ,SAAA,EAAW,YAAA,EAAc,WAAW,SAAS,CAAA;AAAA,QAEvE,QAAA,EAAA;AAAA,UAAA,uBAAA,oBACCD,cAAA,CAAC,YAAO,KAAA,EAAM,EAAA,EAAG,UAAU,KAAA,CAAM,QAAA,EAAU,MAAA,EAAQ,QAAA,EAChD,QAAA,EAAA,sBAAA,EACH,CAAA;AAAA,UAED,iBAAA,CAAkB,IAAI,CAAC,MAAA,EAAQ,0BAC9BA,cAAA,CAAC,QAAA,EAAA,EAAoD,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,OAAO,QAAA,EACxF,QAAA,EAAA,MAAA,CAAO,KAAA,EAAA,EADG,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,OAAO,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAEjD,CACD;AAAA;AAAA;AAAA,KACH;AAAA,IACC,CAAC,QAAA,oBACAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mGAAA,EACd,QAAA,kBAAAA,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6CAAA,EAA8C,aAAA,EAAW,IAAA,EAAC,CAAA,EACzE,CAAA;AAAA,IAED,KAAA,oBACCA,cAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,QAAA;AAAA,QACT,SAAA,EAAWC,qBAAA;AAAA,UACT,2FAAA;AAAA,UACA,cAAA;AAAA,UACA,gBAAA,GACI;AAAA,YACE,oBAAA;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":"select.cjs","sourcesContent":["const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\nexport function generateString(length = 5) {\n let result: string = '';\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n\n return result;\n}\n","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type { GlobalSize } from '@lindle/linoardo/global.types';\nimport type { InputVariant } from '../Input/types';\nimport type { SelectOption, SelectOptionObject, SelectProps } from './types.select';\nimport { generateString } from '../../utils/helpers/randomStr';\n\nconst baseClass =\n 'select-base w-full appearance-none focus-visible:outline-none focus-visible:ring-primary transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed bg-white text-gray-900 placeholder:text-gray-500 dark:bg-slate-900 dark:text-gray-100 dark:placeholder:text-gray-400';\n\nconst variantClasses = {\n solid:\n 'rounded border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40',\n sharp:\n 'rounded-none border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40',\n outline:\n 'rounded border-2 border-black bg-white focus-visible:border-black focus-visible:ring-2 focus-visible:ring-black/30 dark:border-black dark:bg-transparent dark:focus-visible:border-black dark:focus-visible:ring-black/40',\n text: 'rounded-none border-0 border-b border-transparent pl-0 pr-10 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70',\n ghost:\n 'rounded border border-transparent bg-gray-50 text-gray-900 focus-visible:bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15 dark:bg-slate-800 dark:text-gray-100 dark:focus-visible:bg-slate-700 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/25',\n filled:\n 'rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25 dark:border-gray-700 dark:bg-slate-800 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/30',\n underlined:\n 'rounded-none border-0 border-b border-gray-300 pl-0 pr-10 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70',\n rounded:\n 'rounded-full pl-4 pr-10 border border-gray-300 bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/20 shadow-sm dark:border-gray-600 dark:bg-slate-900 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/30 dark:shadow-black/20'\n} satisfies Record<InputVariant, string>;\n\nconst sizeClasses = {\n 'x-small': { padding: 'pl-2 pr-8 py-2', text: 'text-xs' },\n small: { padding: 'pl-2.5 pr-9 py-2.5', text: 'text-sm' },\n medium: { padding: 'pl-3 pr-10 py-3', text: 'text-base' },\n large: { padding: 'pl-3.5 pr-11 py-3.5', text: 'text-lg' },\n 'x-large': { padding: 'pl-4 pr-12 py-4', text: 'text-xl' }\n} satisfies Record<GlobalSize, { padding: string; text: string }>;\n\nconst normalizeOption = (option: SelectOption): SelectOptionObject => {\n if (typeof option === 'string') {\n return { label: option, value: option };\n }\n\n return option;\n};\n\n/**\n * Native select styled with the same visual variants as Input.\n * Accepts options as string[] or { label, value }[] for convenience.\n */\nconst Select: React.FC<SelectProps> = ({\n options,\n label,\n placeholder,\n variant = 'outline',\n size = 'medium',\n className,\n wrapperClassName,\n id,\n name,\n multiple,\n onFocus,\n onBlur,\n onChange,\n value,\n defaultValue,\n ...props\n}) => {\n const selectId = id || name || generateString();\n const selectName = name || selectId;\n const variantClass = variantClasses[variant] ?? variantClasses.outline;\n const sizeConfig = sizeClasses[size] ?? sizeClasses.medium;\n const sizeClass = `${sizeConfig.padding} ${sizeConfig.text}`;\n const normalizedOptions = options.map(normalizeOption);\n const hasLabel = Boolean(label);\n const hasProvidedPlaceholder = typeof placeholder === 'string' && placeholder.trim().length > 0;\n const hidePlaceholderUntilFocus = hasLabel && hasProvidedPlaceholder && !multiple;\n const placeholderText = placeholder ?? (hasLabel ? ' ' : undefined);\n const [isFocused, setIsFocused] = React.useState(false);\n const [hasValue, setHasValue] = React.useState(() => {\n const initial = value ?? defaultValue;\n if (initial === undefined || initial === null) return false;\n if (multiple) {\n if (Array.isArray(initial)) return initial.length > 0;\n return String(initial).length > 0;\n }\n if (Array.isArray(initial)) {\n if (initial.length === 0) return false;\n return String(initial[0]).length > 0;\n }\n return String(initial).length > 0;\n });\n const isControlled = value !== undefined;\n\n React.useEffect(() => {\n if (!isControlled) return;\n if (value === undefined || value === null) {\n setHasValue(false);\n return;\n }\n if (multiple) {\n if (Array.isArray(value)) {\n setHasValue(value.length > 0);\n } else {\n setHasValue(String(value).length > 0);\n }\n return;\n }\n if (Array.isArray(value)) {\n setHasValue(value.length > 0 ? String(value[0]).length > 0 : false);\n return;\n }\n setHasValue(String(value).length > 0);\n }, [isControlled, multiple, value]);\n\n const placeholderOptionLabel = hidePlaceholderUntilFocus && !isFocused ? ' ' : placeholderText;\n const shouldRenderPlaceholder = !multiple && placeholderText !== undefined;\n const labelShouldFloat = hasValue || isFocused;\n const labelLeftClass = 'left-3';\n const labelBgDefault = ['outline', 'text', 'underlined'].includes(variant)\n ? 'bg-transparent'\n : 'bg-white/90 dark:bg-slate-900';\n\n const handleFocus: React.FocusEventHandler<HTMLSelectElement> = event => {\n if (hidePlaceholderUntilFocus) setIsFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur: React.FocusEventHandler<HTMLSelectElement> = event => {\n if (hidePlaceholderUntilFocus) setIsFocused(false);\n onBlur?.(event);\n };\n\n const handleChange: React.ChangeEventHandler<HTMLSelectElement> = event => {\n if (!isControlled) {\n const nextHasValue = multiple ? event.target.selectedOptions.length > 0 : event.target.value !== '';\n setHasValue(nextHasValue);\n }\n onChange?.(event);\n };\n\n return (\n <div className={twMerge('flex flex-col gap-1', wrapperClassName)}>\n <div className='relative flex items-center'>\n <select\n {...props}\n id={selectId}\n name={selectName}\n multiple={multiple}\n value={value}\n defaultValue={value === undefined ? defaultValue : undefined}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n className={twMerge('peer', baseClass, variantClass, sizeClass, className)}\n >\n {shouldRenderPlaceholder && (\n <option value='' disabled={props.required} hidden={hasValue}>\n {placeholderOptionLabel}\n </option>\n )}\n {normalizedOptions.map((option, index) => (\n <option key={`${selectId}-${option.value}-${index}`} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </select>\n {!multiple && (\n <span className='pointer-events-none absolute inset-y-0 right-3 flex items-center text-gray-500 dark:text-gray-300'>\n <i className='mdi mdi-chevron-down text-base leading-none' aria-hidden />\n </span>\n )}\n {label && (\n <label\n htmlFor={selectId}\n className={twMerge(\n 'absolute transition-all duration-150 pointer-events-none text-gray-700 dark:text-gray-200',\n labelLeftClass,\n labelShouldFloat\n ? [\n 'top-0 text-xs px-1',\n isFocused ? '-translate-y-1/2 text-gray-600' : '-translate-y-2/3',\n labelBgDefault\n ].join(' ')\n : 'top-1/2 -translate-y-1/2 text-sm text-gray-500'\n )}\n >\n {label}\n </label>\n )}\n </div>\n </div>\n );\n};\n\nexport default Select;\nexport type { SelectProps, SelectOption, SelectOptionObject } from './types.select';\n"]}
1
+ {"version":3,"sources":["../src/utils/helpers/randomStr.ts","../src/Form/Select/index.tsx"],"names":["React","jsx","twMerge","jsxs"],"mappings":"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","file":"select.cjs","sourcesContent":["const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\nexport function generateString(length = 5) {\n let result: string = '';\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n\n return result;\n}\n","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport type { GlobalSize } from '@lindle/linoardo/global.types';\nimport type { InputVariant } from '../Input/types';\nimport type { SelectOption, SelectOptionObject, SelectProps } from './types.select';\nimport { generateString } from '../../utils/helpers/randomStr';\n\nconst baseClass =\n 'select-base w-full appearance-none focus-visible:outline-none focus-visible:ring-primary transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed bg-white text-gray-900 placeholder:text-gray-500 dark:bg-slate-900 dark:text-gray-100 dark:placeholder:text-gray-400';\n\nconst variantClasses = {\n solid:\n 'rounded border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40',\n sharp:\n 'rounded-none border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30 dark:border-gray-600 dark:bg-slate-900 dark:shadow-black/20 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/40',\n outline:\n 'rounded border-2 border-black bg-white focus-visible:border-black focus-visible:ring-2 focus-visible:ring-black/30 dark:border-black dark:bg-transparent dark:focus-visible:border-black dark:focus-visible:ring-black/40',\n text: 'rounded-none border-0 border-b border-transparent pl-0 pr-10 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70',\n ghost:\n 'rounded border border-transparent bg-gray-50 text-gray-900 focus-visible:bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15 dark:bg-slate-800 dark:text-gray-100 dark:focus-visible:bg-slate-700 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/25',\n filled:\n 'rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25 dark:border-gray-700 dark:bg-slate-800 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/30',\n underlined:\n 'rounded-none border-0 border-b border-gray-300 pl-0 pr-10 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent dark:border-b-gray-600 dark:focus-visible:border-primary/70',\n rounded:\n 'rounded-full pl-4 pr-10 border border-gray-300 bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/20 shadow-sm dark:border-gray-600 dark:bg-slate-900 dark:focus-visible:border-primary/70 dark:focus-visible:ring-primary/30 dark:shadow-black/20'\n} satisfies Record<InputVariant, string>;\n\nconst sizeClasses = {\n 'x-small': { padding: 'pl-2 pr-8 py-2', text: 'text-xs' },\n small: { padding: 'pl-2.5 pr-9 py-2.5', text: 'text-sm' },\n medium: { padding: 'pl-3 pr-10 py-3', text: 'text-base' },\n large: { padding: 'pl-3.5 pr-11 py-3.5', text: 'text-lg' },\n 'x-large': { padding: 'pl-4 pr-12 py-4', text: 'text-xl' }\n} satisfies Record<GlobalSize, { padding: string; text: string }>;\n\nconst normalizeOption = (option: SelectOption): SelectOptionObject => {\n if (typeof option === 'string') {\n return { label: option, value: option };\n }\n\n return option;\n};\n\n/**\n * Native select styled with the same visual variants as Input.\n * Accepts options as string[] or { label, value }[] for convenience.\n */\nconst Select: React.FC<SelectProps> = ({\n options,\n label,\n placeholder,\n variant = 'outline',\n size = 'medium',\n className,\n wrapperClassName,\n id,\n name,\n multiple,\n onFocus,\n onBlur,\n onChange,\n value,\n defaultValue,\n ...props\n}) => {\n const selectId = id || name || generateString();\n const selectName = name || selectId;\n const variantClass = variantClasses[variant] ?? variantClasses.outline;\n const sizeConfig = sizeClasses[size] ?? sizeClasses.medium;\n const sizeClass = `${sizeConfig.padding} ${sizeConfig.text}`;\n const normalizedOptions = options.map(normalizeOption);\n const hasLabel = Boolean(label);\n const hasProvidedPlaceholder = typeof placeholder === 'string' && placeholder.trim().length > 0;\n const hidePlaceholderUntilFocus = hasLabel && hasProvidedPlaceholder && !multiple;\n const placeholderText = placeholder ?? (hasLabel ? ' ' : undefined);\n const [isFocused, setIsFocused] = React.useState(false);\n const [hasValue, setHasValue] = React.useState(() => {\n const initial = value ?? defaultValue;\n if (initial === undefined || initial === null) return false;\n if (multiple) {\n if (Array.isArray(initial)) return initial.length > 0;\n return String(initial).length > 0;\n }\n if (Array.isArray(initial)) {\n if (initial.length === 0) return false;\n return String(initial[0]).length > 0;\n }\n return String(initial).length > 0;\n });\n const isControlled = value !== undefined;\n\n React.useEffect(() => {\n if (!isControlled) return;\n if (value === undefined || value === null) {\n setHasValue(false);\n return;\n }\n if (multiple) {\n if (Array.isArray(value)) {\n setHasValue(value.length > 0);\n } else {\n setHasValue(String(value).length > 0);\n }\n return;\n }\n if (Array.isArray(value)) {\n setHasValue(value.length > 0 ? String(value[0]).length > 0 : false);\n return;\n }\n setHasValue(String(value).length > 0);\n }, [isControlled, multiple, value]);\n\n const placeholderOptionLabel = hidePlaceholderUntilFocus && !isFocused ? ' ' : placeholderText;\n const shouldRenderPlaceholder = !multiple && placeholderText !== undefined;\n const labelShouldFloat = hasValue || isFocused;\n const labelLeftClass = 'left-3';\n const labelBgDefault = ['outline', 'text', 'underlined'].includes(variant)\n ? 'bg-transparent'\n : 'bg-white/90 dark:bg-slate-900';\n\n const handleFocus: React.FocusEventHandler<HTMLSelectElement> = event => {\n if (hidePlaceholderUntilFocus) setIsFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur: React.FocusEventHandler<HTMLSelectElement> = event => {\n if (hidePlaceholderUntilFocus) setIsFocused(false);\n onBlur?.(event);\n };\n\n const handleChange: React.ChangeEventHandler<HTMLSelectElement> = event => {\n if (!isControlled) {\n const nextHasValue = multiple\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"]}
package/dist/select.js CHANGED
@@ -1,3 +1,4 @@
1
- export { Select_default as default } from './chunk-SAGQYMS3.js';
1
+ export { Select_default as default } from './chunk-BZVDAMMY.js';
2
+ import './chunk-6SKW43XI.js';
2
3
  //# sourceMappingURL=select.js.map
3
4
  //# sourceMappingURL=select.js.map
package/dist/styles.css CHANGED
@@ -321,6 +321,9 @@
321
321
  .inset-y-0 {
322
322
  inset-block: calc(var(--spacing) * 0);
323
323
  }
324
+ .-top-1\.5 {
325
+ top: calc(var(--spacing) * -1.5);
326
+ }
324
327
  .top-0 {
325
328
  top: calc(var(--spacing) * 0);
326
329
  }
@@ -2499,6 +2502,11 @@
2499
2502
  top: calc(var(--spacing) * 0);
2500
2503
  }
2501
2504
  }
2505
+ .peer-focus\:left-7 {
2506
+ &:is(:where(.peer):focus ~ *) {
2507
+ left: calc(var(--spacing) * 7);
2508
+ }
2509
+ }
2502
2510
  .peer-focus\:-translate-y-1\/2 {
2503
2511
  &:is(:where(.peer):focus ~ *) {
2504
2512
  --tw-translate-y: calc(calc(1/2 * 100%) * -1);
@@ -2515,6 +2523,11 @@
2515
2523
  background-color: transparent;
2516
2524
  }
2517
2525
  }
2526
+ .peer-focus\:bg-white {
2527
+ &:is(:where(.peer):focus ~ *) {
2528
+ background-color: var(--color-white);
2529
+ }
2530
+ }
2518
2531
  .peer-focus\:bg-white\/90 {
2519
2532
  &:is(:where(.peer):focus ~ *) {
2520
2533
  background-color: color-mix(in srgb, #fff 90%, transparent);
@@ -0,0 +1,486 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var react = require('@tiptap/react');
5
+ var StarterKit = require('@tiptap/starter-kit');
6
+ var marked = require('marked');
7
+ var TurndownService = require('turndown');
8
+ var tailwindMerge = require('tailwind-merge');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var React__default = /*#__PURE__*/_interopDefault(React);
14
+ var StarterKit__default = /*#__PURE__*/_interopDefault(StarterKit);
15
+ var TurndownService__default = /*#__PURE__*/_interopDefault(TurndownService);
16
+
17
+ // src/utils/helpers/randomStr.ts
18
+ var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
19
+ function generateString(length = 5) {
20
+ let result = "";
21
+ const charactersLength = characters.length;
22
+ for (let i = 0; i < length; i++) {
23
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
24
+ }
25
+ return result;
26
+ }
27
+ var baseClass = "textarea-base px-3 py-2 focus-visible:outline-none transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed w-full text-gray-900 dark:text-gray-100 placeholder:text-gray-500 dark:placeholder:text-gray-400";
28
+ var variantClasses = {
29
+ outlined: "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-slate-900 dark:focus-visible:border-black dark:focus-visible:ring-black/40",
30
+ filled: "rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25 dark:border-gray-700 dark:bg-slate-800 dark:focus-visible:border-primary/60 dark:focus-visible:ring-primary/30",
31
+ standard: "rounded-none border-0 border-b border-gray-300 px-0 bg-transparent focus-visible:border-primary focus-visible:ring-0 dark:border-b-gray-700 dark:focus-visible:border-primary/70"
32
+ };
33
+ var labelBackground = {
34
+ outlined: "bg-white/90 dark:bg-slate-900",
35
+ filled: "bg-gray-100 dark:bg-slate-800",
36
+ standard: "bg-transparent"
37
+ };
38
+ var advancedContainerVariant = {
39
+ outlined: "rounded border-2 border-black bg-white dark:border-black dark:bg-slate-900",
40
+ filled: "rounded border border-gray-200 bg-gray-100 dark:border-gray-700 dark:bg-slate-800",
41
+ standard: "border-b border-gray-300 bg-transparent dark:border-gray-700"
42
+ };
43
+ var renderMarkdown = (value) => marked.marked.parse(value || "", { async: false });
44
+ var dispatchInputEvent = (element) => {
45
+ const event = new Event("input", { bubbles: true });
46
+ element.dispatchEvent(event);
47
+ };
48
+ var toolbarButtonBase = "px-3 py-1 text-gray-700 transition-colors hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-slate-700 disabled:cursor-not-allowed disabled:opacity-50";
49
+ var toolbarButtonActive = "bg-white text-gray-900 dark:bg-slate-900 dark:text-gray-100";
50
+ var handleModeToggle = (wrapperId, mode, textareaName, simpleId, advancedInputId) => {
51
+ if (typeof document === "undefined") return;
52
+ const wrapper = document.getElementById(wrapperId);
53
+ const simple = document.getElementById(simpleId);
54
+ const advancedInput = document.getElementById(advancedInputId);
55
+ if (wrapper) {
56
+ wrapper.dataset.mode = mode;
57
+ }
58
+ if (simple) {
59
+ simple.classList.toggle("hidden", mode !== "simple");
60
+ simple.name = mode === "simple" ? textareaName : "";
61
+ }
62
+ if (advancedInput) {
63
+ advancedInput.classList.toggle("hidden", mode !== "advanced");
64
+ advancedInput.name = mode === "advanced" ? textareaName : "";
65
+ }
66
+ };
67
+ var TextArea = ({
68
+ variant = "outlined",
69
+ label,
70
+ className,
71
+ wrapperClassName,
72
+ id,
73
+ name,
74
+ placeholder,
75
+ rows = 4,
76
+ allowModeSwitch = true,
77
+ mode,
78
+ view = "editor",
79
+ value,
80
+ defaultValue,
81
+ disabled,
82
+ readOnly,
83
+ onChange,
84
+ onInput,
85
+ ...props
86
+ }) => {
87
+ const textareaId = id || name || generateString();
88
+ const textareaName = name || textareaId;
89
+ const wrapperId = `${textareaId}-wrapper`;
90
+ const simpleTextareaId = `${textareaId}-simple`;
91
+ const advancedInputId = `${textareaId}-advanced-input`;
92
+ const advancedEditorId = `${textareaId}-advanced-editor`;
93
+ const advancedLabelId = `${textareaId}-advanced-label`;
94
+ const previewId = `${textareaId}-preview`;
95
+ const variantClass = variantClasses[variant] ?? variantClasses.outlined;
96
+ const labelPadding = label ? "pt-6" : void 0;
97
+ const placeholderValue = placeholder ?? (label ? " " : void 0);
98
+ const placeholderClass = label ? "placeholder-transparent" : void 0;
99
+ const labelBg = labelBackground[variant] ?? labelBackground.outlined;
100
+ const focusLabelBg = variant === "filled" ? "peer-focus:bg-gray-100 dark:peer-focus:bg-slate-800" : variant === "standard" ? "peer-focus:bg-transparent" : "peer-focus:bg-white/90 dark:peer-focus:bg-slate-900";
101
+ const resolvedMode = allowModeSwitch ? mode ?? "simple" : "simple";
102
+ const resolvedView = view ?? "editor";
103
+ const showEditor = resolvedView === "editor";
104
+ const showPreview = resolvedView === "view";
105
+ const contentValue = typeof value === "string" ? value : typeof defaultValue === "string" ? defaultValue : "";
106
+ const isControlled = typeof value === "string";
107
+ const editorEditable = !(disabled || readOnly);
108
+ const modeToggleName = `${textareaId}-mode-toggle`;
109
+ const simpleToggleId = `${modeToggleName}-simple`;
110
+ const advancedToggleId = `${modeToggleName}-advanced`;
111
+ const turndownService = React__default.default.useMemo(() => {
112
+ const service = new TurndownService__default.default({
113
+ codeBlockStyle: "fenced",
114
+ emDelimiter: "*",
115
+ strongDelimiter: "**",
116
+ bulletListMarker: "-"
117
+ });
118
+ service.addRule("strikethrough", {
119
+ filter: (node) => ["DEL", "S", "STRIKE"].includes(node.nodeName),
120
+ replacement: (content) => `~~${content}~~`
121
+ });
122
+ return service;
123
+ }, []);
124
+ const hiddenTextareaRef = React__default.default.useRef(null);
125
+ const lastMarkdownRef = React__default.default.useRef(contentValue);
126
+ const editorContentClass = tailwindMerge.twMerge(
127
+ baseClass,
128
+ "min-h-45 rounded border-0 bg-transparent outline-none whitespace-pre-wrap wrap-break-words",
129
+ "[&_p]:m-0 [&_p]:leading-6",
130
+ "[&_ul]:my-0 [&_ul]:list-disc [&_ul]:pl-5",
131
+ "[&_ol]:my-0 [&_ol]:list-decimal [&_ol]:pl-5",
132
+ "[&_li]:my-0",
133
+ "[&_blockquote]:border-l-2 [&_blockquote]:border-gray-300 [&_blockquote]:pl-3 [&_blockquote]:text-gray-600",
134
+ "dark:[&_blockquote]:border-gray-600 dark:[&_blockquote]:text-gray-300",
135
+ "[&_pre]:bg-gray-100 [&_pre]:rounded [&_pre]:p-3 [&_pre]:text-sm [&_pre]:overflow-x-auto",
136
+ "dark:[&_pre]:bg-slate-800",
137
+ "[&_code]:font-mono",
138
+ className,
139
+ !editorEditable ? "cursor-not-allowed opacity-50" : void 0
140
+ );
141
+ const editor = react.useEditor({
142
+ extensions: [StarterKit__default.default],
143
+ content: renderMarkdown(contentValue),
144
+ editable: editorEditable,
145
+ editorProps: {
146
+ attributes: {
147
+ class: editorContentClass,
148
+ role: "textbox",
149
+ "aria-multiline": "true",
150
+ ...label ? { "aria-labelledby": advancedLabelId } : {}
151
+ }
152
+ },
153
+ onUpdate: ({ editor: currentEditor }) => {
154
+ const markdown = turndownService.turndown(currentEditor.getHTML());
155
+ if (markdown === lastMarkdownRef.current) return;
156
+ lastMarkdownRef.current = markdown;
157
+ if (!hiddenTextareaRef.current) return;
158
+ hiddenTextareaRef.current.value = markdown;
159
+ dispatchInputEvent(hiddenTextareaRef.current);
160
+ }
161
+ });
162
+ React__default.default.useEffect(() => {
163
+ if (!editor) return;
164
+ editor.setEditable(editorEditable);
165
+ }, [editor, editorEditable]);
166
+ React__default.default.useEffect(() => {
167
+ if (!editor) return;
168
+ editor.setOptions({
169
+ editorProps: {
170
+ ...editor.options.editorProps,
171
+ attributes: {
172
+ ...editor.options.editorProps?.attributes,
173
+ class: editorContentClass,
174
+ role: "textbox",
175
+ "aria-multiline": "true",
176
+ ...label ? { "aria-labelledby": advancedLabelId } : {}
177
+ }
178
+ }
179
+ });
180
+ }, [editor, editorContentClass, label, advancedLabelId]);
181
+ React__default.default.useEffect(() => {
182
+ if (!editor || typeof value !== "string") return;
183
+ if (value === lastMarkdownRef.current) return;
184
+ editor.commands.setContent(renderMarkdown(value), { emitUpdate: false });
185
+ lastMarkdownRef.current = value;
186
+ if (hiddenTextareaRef.current) {
187
+ hiddenTextareaRef.current.value = value;
188
+ }
189
+ }, [editor, value]);
190
+ React__default.default.useEffect(() => {
191
+ if (!hiddenTextareaRef.current) return;
192
+ if (hiddenTextareaRef.current.value === contentValue) return;
193
+ hiddenTextareaRef.current.value = contentValue;
194
+ }, [contentValue]);
195
+ const textareaProps = {
196
+ ...props,
197
+ onChange,
198
+ onInput,
199
+ disabled,
200
+ readOnly
201
+ };
202
+ const minHeightStyle = rows ? { minHeight: `${rows * 20}px` } : void 0;
203
+ return /* @__PURE__ */ jsxRuntime.jsxs(
204
+ "div",
205
+ {
206
+ id: wrapperId,
207
+ "data-mode": resolvedMode,
208
+ className: tailwindMerge.twMerge("flex flex-col gap-1", wrapperClassName),
209
+ children: [
210
+ allowModeSwitch && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
211
+ /* @__PURE__ */ jsxRuntime.jsx(
212
+ "input",
213
+ {
214
+ type: "radio",
215
+ name: modeToggleName,
216
+ id: simpleToggleId,
217
+ value: "simple",
218
+ defaultChecked: resolvedMode === "simple",
219
+ className: "peer/simple sr-only",
220
+ onChange: () => handleModeToggle(wrapperId, "simple", textareaName, simpleTextareaId, advancedInputId)
221
+ }
222
+ ),
223
+ /* @__PURE__ */ jsxRuntime.jsx(
224
+ "input",
225
+ {
226
+ type: "radio",
227
+ name: modeToggleName,
228
+ id: advancedToggleId,
229
+ value: "advanced",
230
+ defaultChecked: resolvedMode === "advanced",
231
+ className: "peer/advanced sr-only",
232
+ onChange: () => handleModeToggle(
233
+ wrapperId,
234
+ "advanced",
235
+ textareaName,
236
+ simpleTextareaId,
237
+ advancedInputId
238
+ )
239
+ }
240
+ ),
241
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex overflow-hidden rounded-md border border-gray-200 bg-gray-50 text-xs font-medium dark:border-gray-700 dark:bg-slate-800", children: [
242
+ /* @__PURE__ */ jsxRuntime.jsx(
243
+ "label",
244
+ {
245
+ htmlFor: simpleToggleId,
246
+ className: tailwindMerge.twMerge(
247
+ "cursor-pointer px-3 py-1 transition-colors",
248
+ "text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-slate-700",
249
+ "peer-checked/simple:bg-white peer-checked/simple:text-gray-900 peer-checked/simple:dark:bg-slate-900 peer-checked/simple:dark:text-gray-100"
250
+ ),
251
+ children: "Jednoduch\xFD"
252
+ }
253
+ ),
254
+ /* @__PURE__ */ jsxRuntime.jsx(
255
+ "label",
256
+ {
257
+ htmlFor: advancedToggleId,
258
+ className: tailwindMerge.twMerge(
259
+ "cursor-pointer px-3 py-1 transition-colors",
260
+ "text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-slate-700",
261
+ "peer-checked/advanced:bg-white peer-checked/advanced:text-gray-900 peer-checked/advanced:dark:bg-slate-900 peer-checked/advanced:dark:text-gray-100"
262
+ ),
263
+ children: "Pokro\u010Dil\xFD"
264
+ }
265
+ )
266
+ ] }) })
267
+ ] }),
268
+ (resolvedMode === "simple" || allowModeSwitch) && /* @__PURE__ */ jsxRuntime.jsxs(
269
+ "div",
270
+ {
271
+ className: tailwindMerge.twMerge(
272
+ "relative flex items-start",
273
+ allowModeSwitch ? "hidden peer-checked/simple:flex peer-checked/advanced:hidden" : void 0
274
+ ),
275
+ children: [
276
+ /* @__PURE__ */ jsxRuntime.jsx(
277
+ "textarea",
278
+ {
279
+ ...textareaProps,
280
+ id: simpleTextareaId,
281
+ name: !allowModeSwitch || resolvedMode === "simple" ? textareaName : "",
282
+ rows,
283
+ placeholder: placeholderValue,
284
+ value,
285
+ defaultValue,
286
+ className: tailwindMerge.twMerge(
287
+ "peer",
288
+ baseClass,
289
+ variantClass,
290
+ labelPadding,
291
+ placeholderClass,
292
+ className
293
+ )
294
+ }
295
+ ),
296
+ label && /* @__PURE__ */ jsxRuntime.jsx(
297
+ "label",
298
+ {
299
+ htmlFor: simpleTextareaId,
300
+ className: tailwindMerge.twMerge(
301
+ "absolute transition-all duration-150 pointer-events-none left-3 text-gray-700 dark:text-gray-200",
302
+ "top-0 -translate-y-2/3 text-xs px-1",
303
+ labelBg,
304
+ focusLabelBg,
305
+ "peer-focus:top-0 peer-focus:-translate-y-1/2 peer-focus:text-xs peer-focus:px-1 peer-focus:text-gray-600 dark:peer-focus:text-gray-300",
306
+ "peer-placeholder-shown:top-3 peer-placeholder-shown:-translate-y-1/2 peer-placeholder-shown:text-sm peer-placeholder-shown:bg-transparent peer-placeholder-shown:text-gray-500 dark:peer-placeholder-shown:text-gray-400"
307
+ ),
308
+ children: label
309
+ }
310
+ )
311
+ ]
312
+ }
313
+ ),
314
+ (resolvedMode === "advanced" || allowModeSwitch) && /* @__PURE__ */ jsxRuntime.jsxs(
315
+ "div",
316
+ {
317
+ className: tailwindMerge.twMerge(
318
+ "flex flex-col gap-2",
319
+ allowModeSwitch ? "hidden peer-checked/advanced:flex peer-checked/simple:hidden" : void 0
320
+ ),
321
+ children: [
322
+ label && /* @__PURE__ */ jsxRuntime.jsx(
323
+ "label",
324
+ {
325
+ id: advancedLabelId,
326
+ className: "text-sm font-medium text-gray-700 dark:text-gray-200",
327
+ children: label
328
+ }
329
+ ),
330
+ showEditor && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center justify-between gap-2", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex overflow-hidden rounded-md border border-gray-200 bg-gray-50 text-xs font-medium dark:border-gray-700 dark:bg-slate-800", children: [
331
+ /* @__PURE__ */ jsxRuntime.jsx(
332
+ "button",
333
+ {
334
+ type: "button",
335
+ className: tailwindMerge.twMerge(
336
+ toolbarButtonBase,
337
+ editor?.isActive("bold") ? toolbarButtonActive : void 0
338
+ ),
339
+ onClick: () => editor?.chain().focus().toggleBold().run(),
340
+ disabled: !editor || !editorEditable,
341
+ children: "B"
342
+ }
343
+ ),
344
+ /* @__PURE__ */ jsxRuntime.jsx(
345
+ "button",
346
+ {
347
+ type: "button",
348
+ className: tailwindMerge.twMerge(
349
+ toolbarButtonBase,
350
+ editor?.isActive("italic") ? toolbarButtonActive : void 0
351
+ ),
352
+ onClick: () => editor?.chain().focus().toggleItalic().run(),
353
+ disabled: !editor || !editorEditable,
354
+ children: "I"
355
+ }
356
+ ),
357
+ /* @__PURE__ */ jsxRuntime.jsx(
358
+ "button",
359
+ {
360
+ type: "button",
361
+ className: tailwindMerge.twMerge(
362
+ toolbarButtonBase,
363
+ editor?.isActive("strike") ? toolbarButtonActive : void 0
364
+ ),
365
+ onClick: () => editor?.chain().focus().toggleStrike().run(),
366
+ disabled: !editor || !editorEditable,
367
+ children: "S"
368
+ }
369
+ ),
370
+ /* @__PURE__ */ jsxRuntime.jsx(
371
+ "button",
372
+ {
373
+ type: "button",
374
+ className: tailwindMerge.twMerge(
375
+ toolbarButtonBase,
376
+ editor?.isActive("bulletList") ? toolbarButtonActive : void 0
377
+ ),
378
+ onClick: () => editor?.chain().focus().toggleBulletList().run(),
379
+ disabled: !editor || !editorEditable,
380
+ children: "\u2022 List"
381
+ }
382
+ ),
383
+ /* @__PURE__ */ jsxRuntime.jsx(
384
+ "button",
385
+ {
386
+ type: "button",
387
+ className: tailwindMerge.twMerge(
388
+ toolbarButtonBase,
389
+ editor?.isActive("orderedList") ? toolbarButtonActive : void 0
390
+ ),
391
+ onClick: () => editor?.chain().focus().toggleOrderedList().run(),
392
+ disabled: !editor || !editorEditable,
393
+ children: "1. List"
394
+ }
395
+ ),
396
+ /* @__PURE__ */ jsxRuntime.jsx(
397
+ "button",
398
+ {
399
+ type: "button",
400
+ className: tailwindMerge.twMerge(
401
+ toolbarButtonBase,
402
+ editor?.isActive("blockquote") ? toolbarButtonActive : void 0
403
+ ),
404
+ onClick: () => editor?.chain().focus().toggleBlockquote().run(),
405
+ disabled: !editor || !editorEditable,
406
+ children: "Quote"
407
+ }
408
+ ),
409
+ /* @__PURE__ */ jsxRuntime.jsx(
410
+ "button",
411
+ {
412
+ type: "button",
413
+ className: tailwindMerge.twMerge(
414
+ toolbarButtonBase,
415
+ editor?.isActive("code") ? toolbarButtonActive : void 0
416
+ ),
417
+ onClick: () => editor?.chain().focus().toggleCode().run(),
418
+ disabled: !editor || !editorEditable,
419
+ children: "Code"
420
+ }
421
+ ),
422
+ /* @__PURE__ */ jsxRuntime.jsx(
423
+ "button",
424
+ {
425
+ type: "button",
426
+ className: tailwindMerge.twMerge(
427
+ toolbarButtonBase,
428
+ editor?.isActive("codeBlock") ? toolbarButtonActive : void 0
429
+ ),
430
+ onClick: () => editor?.chain().focus().toggleCodeBlock().run(),
431
+ disabled: !editor || !editorEditable,
432
+ children: "Code block"
433
+ }
434
+ )
435
+ ] }) }),
436
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: tailwindMerge.twMerge("overflow-hidden", advancedContainerVariant[variant]), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-3 py-3 space-y-3", children: [
437
+ showEditor && /* @__PURE__ */ jsxRuntime.jsx(
438
+ react.EditorContent,
439
+ {
440
+ editor,
441
+ id: advancedEditorId,
442
+ className: "w-full",
443
+ style: minHeightStyle
444
+ }
445
+ ),
446
+ /* @__PURE__ */ jsxRuntime.jsx(
447
+ "textarea",
448
+ {
449
+ ...textareaProps,
450
+ ref: hiddenTextareaRef,
451
+ id: advancedInputId,
452
+ name: !allowModeSwitch || resolvedMode === "advanced" ? textareaName : "",
453
+ rows,
454
+ placeholder: placeholderValue,
455
+ className: "sr-only",
456
+ ...isControlled ? { value } : { defaultValue: contentValue }
457
+ }
458
+ ),
459
+ showPreview && /* @__PURE__ */ jsxRuntime.jsx(
460
+ "div",
461
+ {
462
+ id: previewId,
463
+ className: tailwindMerge.twMerge(
464
+ baseClass,
465
+ "min-h-45 rounded border-0 px-0 focus:outline-none whitespace-pre-wrap wrap-break-words",
466
+ className
467
+ ),
468
+ style: minHeightStyle,
469
+ dangerouslySetInnerHTML: {
470
+ __html: renderMarkdown(contentValue)
471
+ }
472
+ }
473
+ )
474
+ ] }) })
475
+ ]
476
+ }
477
+ )
478
+ ]
479
+ }
480
+ );
481
+ };
482
+ var TextArea_default = TextArea;
483
+
484
+ module.exports = TextArea_default;
485
+ //# sourceMappingURL=textarea.cjs.map
486
+ //# sourceMappingURL=textarea.cjs.map