asterui 0.12.6 → 0.12.8

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 (176) hide show
  1. package/dist/components/Container.d.ts +7 -1
  2. package/dist/components/Fieldset.d.ts +6 -0
  3. package/dist/components/Filter.d.ts +27 -0
  4. package/dist/components/FloatButton.d.ts +50 -11
  5. package/dist/components/Grid.d.ts +1 -1
  6. package/dist/components/Modal.d.ts +7 -2
  7. package/dist/components/ThemeController.d.ts +12 -4
  8. package/dist/index.d.ts +4 -2
  9. package/dist/index.js +167 -165
  10. package/dist/index.js.map +1 -1
  11. package/dist/index100.js +44 -11
  12. package/dist/index100.js.map +1 -1
  13. package/dist/index101.js +10 -12
  14. package/dist/index101.js.map +1 -1
  15. package/dist/index102.js +14 -7
  16. package/dist/index102.js.map +1 -1
  17. package/dist/index103.js +7 -12
  18. package/dist/index103.js.map +1 -1
  19. package/dist/index104.js +11 -29
  20. package/dist/index104.js.map +1 -1
  21. package/dist/index105.js +29 -16
  22. package/dist/index105.js.map +1 -1
  23. package/dist/index106.js +21 -0
  24. package/dist/index106.js.map +1 -0
  25. package/dist/index18.js +23 -15
  26. package/dist/index18.js.map +1 -1
  27. package/dist/index2.js +41 -34
  28. package/dist/index2.js.map +1 -1
  29. package/dist/index21.js +1 -1
  30. package/dist/index25.js +8 -8
  31. package/dist/index25.js.map +1 -1
  32. package/dist/index27.js +13 -8
  33. package/dist/index27.js.map +1 -1
  34. package/dist/index29.js +50 -61
  35. package/dist/index29.js.map +1 -1
  36. package/dist/index30.js +60 -77
  37. package/dist/index30.js.map +1 -1
  38. package/dist/index31.js +184 -18
  39. package/dist/index31.js.map +1 -1
  40. package/dist/index32.js +15 -217
  41. package/dist/index32.js.map +1 -1
  42. package/dist/index33.js +216 -1078
  43. package/dist/index33.js.map +1 -1
  44. package/dist/index34.js +1086 -17
  45. package/dist/index34.js.map +1 -1
  46. package/dist/index35.js +17 -121
  47. package/dist/index35.js.map +1 -1
  48. package/dist/index36.js +119 -37
  49. package/dist/index36.js.map +1 -1
  50. package/dist/index37.js +34 -208
  51. package/dist/index37.js.map +1 -1
  52. package/dist/index38.js +214 -97
  53. package/dist/index38.js.map +1 -1
  54. package/dist/index39.js +93 -158
  55. package/dist/index39.js.map +1 -1
  56. package/dist/index40.js +155 -139
  57. package/dist/index40.js.map +1 -1
  58. package/dist/index41.js +146 -15
  59. package/dist/index41.js.map +1 -1
  60. package/dist/index42.js +15 -17
  61. package/dist/index42.js.map +1 -1
  62. package/dist/index43.js +17 -21
  63. package/dist/index43.js.map +1 -1
  64. package/dist/index44.js +18 -116
  65. package/dist/index44.js.map +1 -1
  66. package/dist/index45.js +116 -10
  67. package/dist/index45.js.map +1 -1
  68. package/dist/index46.js +13 -35
  69. package/dist/index46.js.map +1 -1
  70. package/dist/index47.js +35 -34
  71. package/dist/index47.js.map +1 -1
  72. package/dist/index48.js +34 -116
  73. package/dist/index48.js.map +1 -1
  74. package/dist/index49.js +114 -174
  75. package/dist/index49.js.map +1 -1
  76. package/dist/index50.js +165 -136
  77. package/dist/index50.js.map +1 -1
  78. package/dist/index51.js +146 -11
  79. package/dist/index51.js.map +1 -1
  80. package/dist/index52.js +10 -20
  81. package/dist/index52.js.map +1 -1
  82. package/dist/index53.js +22 -14
  83. package/dist/index53.js.map +1 -1
  84. package/dist/index54.js +14 -7
  85. package/dist/index54.js.map +1 -1
  86. package/dist/index55.js +6 -268
  87. package/dist/index55.js.map +1 -1
  88. package/dist/index56.js +311 -17
  89. package/dist/index56.js.map +1 -1
  90. package/dist/index57.js +17 -122
  91. package/dist/index57.js.map +1 -1
  92. package/dist/index58.js +120 -108
  93. package/dist/index58.js.map +1 -1
  94. package/dist/index59.js +107 -167
  95. package/dist/index59.js.map +1 -1
  96. package/dist/index60.js +167 -29
  97. package/dist/index60.js.map +1 -1
  98. package/dist/index61.js +30 -120
  99. package/dist/index61.js.map +1 -1
  100. package/dist/index62.js +116 -80
  101. package/dist/index62.js.map +1 -1
  102. package/dist/index63.js +85 -19
  103. package/dist/index63.js.map +1 -1
  104. package/dist/index64.js +19 -73
  105. package/dist/index64.js.map +1 -1
  106. package/dist/index65.js +71 -54
  107. package/dist/index65.js.map +1 -1
  108. package/dist/index66.js +56 -44
  109. package/dist/index66.js.map +1 -1
  110. package/dist/index67.js +42 -49
  111. package/dist/index67.js.map +1 -1
  112. package/dist/index68.js +52 -62
  113. package/dist/index68.js.map +1 -1
  114. package/dist/index69.js +56 -101
  115. package/dist/index69.js.map +1 -1
  116. package/dist/index70.js +107 -41
  117. package/dist/index70.js.map +1 -1
  118. package/dist/index71.js +41 -68
  119. package/dist/index71.js.map +1 -1
  120. package/dist/index72.js +66 -19
  121. package/dist/index72.js.map +1 -1
  122. package/dist/index73.js +18 -43
  123. package/dist/index73.js.map +1 -1
  124. package/dist/index74.js +44 -132
  125. package/dist/index74.js.map +1 -1
  126. package/dist/index75.js +132 -50
  127. package/dist/index75.js.map +1 -1
  128. package/dist/index76.js +51 -21
  129. package/dist/index76.js.map +1 -1
  130. package/dist/index77.js +22 -31
  131. package/dist/index77.js.map +1 -1
  132. package/dist/index78.js +31 -22
  133. package/dist/index78.js.map +1 -1
  134. package/dist/index79.js +20 -327
  135. package/dist/index79.js.map +1 -1
  136. package/dist/index80.js +323 -50
  137. package/dist/index80.js.map +1 -1
  138. package/dist/index81.js +56 -40
  139. package/dist/index81.js.map +1 -1
  140. package/dist/index82.js +40 -23
  141. package/dist/index82.js.map +1 -1
  142. package/dist/index83.js +21 -93
  143. package/dist/index83.js.map +1 -1
  144. package/dist/index84.js +88 -123
  145. package/dist/index84.js.map +1 -1
  146. package/dist/index85.js +147 -152
  147. package/dist/index85.js.map +1 -1
  148. package/dist/index86.js +159 -63
  149. package/dist/index86.js.map +1 -1
  150. package/dist/index87.js +65 -35
  151. package/dist/index87.js.map +1 -1
  152. package/dist/index88.js +35 -234
  153. package/dist/index88.js.map +1 -1
  154. package/dist/index89.js +231 -31
  155. package/dist/index89.js.map +1 -1
  156. package/dist/index90.js +34 -210
  157. package/dist/index90.js.map +1 -1
  158. package/dist/index91.js +195 -198
  159. package/dist/index91.js.map +1 -1
  160. package/dist/index92.js +159 -241
  161. package/dist/index92.js.map +1 -1
  162. package/dist/index93.js +283 -166
  163. package/dist/index93.js.map +1 -1
  164. package/dist/index94.js +173 -253
  165. package/dist/index94.js.map +1 -1
  166. package/dist/index95.js +258 -14
  167. package/dist/index95.js.map +1 -1
  168. package/dist/index96.js +12 -31
  169. package/dist/index96.js.map +1 -1
  170. package/dist/index97.js +32 -5
  171. package/dist/index97.js.map +1 -1
  172. package/dist/index98.js +5 -13
  173. package/dist/index98.js.map +1 -1
  174. package/dist/index99.js +11 -43
  175. package/dist/index99.js.map +1 -1
  176. package/package.json +2 -2
package/dist/index48.js CHANGED
@@ -1,119 +1,37 @@
1
- import { jsx as n } from "react/jsx-runtime";
2
- import C from "react";
3
- const h = ({
4
- children: u,
5
- columns: l = 3,
6
- gap: m = 4,
7
- className: c = "",
8
- ...a
9
- }) => {
10
- const p = () => typeof m == "string" ? m : {
11
- 0: "gap-0",
12
- 1: "gap-1",
13
- 2: "gap-2",
14
- 3: "gap-3",
15
- 4: "gap-4",
16
- 5: "gap-5",
17
- 6: "gap-6",
18
- 7: "gap-7",
19
- 8: "gap-8",
20
- 9: "gap-9",
21
- 10: "gap-10",
22
- 11: "gap-11",
23
- 12: "gap-12"
24
- }[m] || "gap-4", o = {
25
- 1: "columns-1",
26
- 2: "columns-2",
27
- 3: "columns-3",
28
- 4: "columns-4",
29
- 5: "columns-5",
30
- 6: "columns-6",
31
- 7: "columns-7",
32
- 8: "columns-8",
33
- 9: "columns-9",
34
- 10: "columns-10",
35
- 11: "columns-11",
36
- 12: "columns-12"
37
- }, x = {
38
- 1: "sm:columns-1",
39
- 2: "sm:columns-2",
40
- 3: "sm:columns-3",
41
- 4: "sm:columns-4",
42
- 5: "sm:columns-5",
43
- 6: "sm:columns-6",
44
- 7: "sm:columns-7",
45
- 8: "sm:columns-8",
46
- 9: "sm:columns-9",
47
- 10: "sm:columns-10",
48
- 11: "sm:columns-11",
49
- 12: "sm:columns-12"
50
- }, g = {
51
- 1: "md:columns-1",
52
- 2: "md:columns-2",
53
- 3: "md:columns-3",
54
- 4: "md:columns-4",
55
- 5: "md:columns-5",
56
- 6: "md:columns-6",
57
- 7: "md:columns-7",
58
- 8: "md:columns-8",
59
- 9: "md:columns-9",
60
- 10: "md:columns-10",
61
- 11: "md:columns-11",
62
- 12: "md:columns-12"
63
- }, d = {
64
- 1: "lg:columns-1",
65
- 2: "lg:columns-2",
66
- 3: "lg:columns-3",
67
- 4: "lg:columns-4",
68
- 5: "lg:columns-5",
69
- 6: "lg:columns-6",
70
- 7: "lg:columns-7",
71
- 8: "lg:columns-8",
72
- 9: "lg:columns-9",
73
- 10: "lg:columns-10",
74
- 11: "lg:columns-11",
75
- 12: "lg:columns-12"
76
- }, e = {
77
- 1: "xl:columns-1",
78
- 2: "xl:columns-2",
79
- 3: "xl:columns-3",
80
- 4: "xl:columns-4",
81
- 5: "xl:columns-5",
82
- 6: "xl:columns-6",
83
- 7: "xl:columns-7",
84
- 8: "xl:columns-8",
85
- 9: "xl:columns-9",
86
- 10: "xl:columns-10",
87
- 11: "xl:columns-11",
88
- 12: "xl:columns-12"
89
- }, i = {
90
- 1: "2xl:columns-1",
91
- 2: "2xl:columns-2",
92
- 3: "2xl:columns-3",
93
- 4: "2xl:columns-4",
94
- 5: "2xl:columns-5",
95
- 6: "2xl:columns-6",
96
- 7: "2xl:columns-7",
97
- 8: "2xl:columns-8",
98
- 9: "2xl:columns-9",
99
- 10: "2xl:columns-10",
100
- 11: "2xl:columns-11",
101
- 12: "2xl:columns-12"
102
- }, t = [
103
- (() => {
104
- if (typeof l == "number")
105
- return o[l] || "columns-3";
106
- const s = [];
107
- return l.xs !== void 0 && s.push(o[l.xs] || "columns-3"), l.sm !== void 0 && s.push(x[l.sm] || "sm:columns-3"), l.md !== void 0 && s.push(g[l.md] || "md:columns-3"), l.lg !== void 0 && s.push(d[l.lg] || "lg:columns-3"), l.xl !== void 0 && s.push(e[l.xl] || "xl:columns-3"), l["2xl"] !== void 0 && s.push(i[l["2xl"]] || "2xl:columns-3"), s.join(" ");
108
- })(),
109
- p(),
110
- c
111
- ].filter(Boolean).join(" "), r = C.Children.map(u, (s, f) => /* @__PURE__ */ n("div", { className: "break-inside-avoid mb-4", children: s }, f));
112
- return /* @__PURE__ */ n("div", { className: t, ...a, children: r });
113
- };
114
- h.displayName = "Masonry";
1
+ import { jsx as l } from "react/jsx-runtime";
2
+ import { forwardRef as o } from "react";
3
+ const i = {
4
+ squircle: "mask-squircle",
5
+ heart: "mask-heart",
6
+ hexagon: "mask-hexagon",
7
+ "hexagon-2": "mask-hexagon-2",
8
+ decagon: "mask-decagon",
9
+ pentagon: "mask-pentagon",
10
+ diamond: "mask-diamond",
11
+ square: "mask-square",
12
+ circle: "mask-circle",
13
+ star: "mask-star",
14
+ "star-2": "mask-star-2",
15
+ triangle: "mask-triangle",
16
+ "triangle-2": "mask-triangle-2",
17
+ "triangle-3": "mask-triangle-3",
18
+ "triangle-4": "mask-triangle-4"
19
+ }, k = {
20
+ "half-1": "mask-half-1",
21
+ "half-2": "mask-half-2"
22
+ }, g = o(
23
+ ({ shape: s, half: a, children: e, className: r = "", ...n }, m) => {
24
+ const t = [
25
+ "mask",
26
+ i[s],
27
+ a ? k[a] : "",
28
+ r
29
+ ].filter(Boolean).join(" ");
30
+ return /* @__PURE__ */ l("div", { ref: m, className: t, ...n, children: e });
31
+ }
32
+ );
33
+ g.displayName = "Mask";
115
34
  export {
116
- h as Masonry,
117
- h as default
35
+ g as Mask
118
36
  };
119
37
  //# sourceMappingURL=index48.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index48.js","sources":["../src/components/Masonry.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface MasonryProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n columns?: number | {\n xs?: number\n sm?: number\n md?: number\n lg?: number\n xl?: number\n '2xl'?: number\n }\n gap?: number | string\n}\n\nexport const Masonry: React.FC<MasonryProps> = ({\n children,\n columns = 3,\n gap = 4,\n className = '',\n ...rest\n}) => {\n // Map gap values to Tailwind classes\n const getGapClass = () => {\n if (typeof gap === 'string') {\n return gap\n }\n\n const gapMap: Record<number, string> = {\n 0: 'gap-0',\n 1: 'gap-1',\n 2: 'gap-2',\n 3: 'gap-3',\n 4: 'gap-4',\n 5: 'gap-5',\n 6: 'gap-6',\n 7: 'gap-7',\n 8: 'gap-8',\n 9: 'gap-9',\n 10: 'gap-10',\n 11: 'gap-11',\n 12: 'gap-12',\n }\n return gapMap[gap] || 'gap-4'\n }\n\n // Static column class mappings for Tailwind JIT\n const baseColumnMap: Record<number, string> = {\n 1: 'columns-1',\n 2: 'columns-2',\n 3: 'columns-3',\n 4: 'columns-4',\n 5: 'columns-5',\n 6: 'columns-6',\n 7: 'columns-7',\n 8: 'columns-8',\n 9: 'columns-9',\n 10: 'columns-10',\n 11: 'columns-11',\n 12: 'columns-12',\n }\n\n const smColumnMap: Record<number, string> = {\n 1: 'sm:columns-1',\n 2: 'sm:columns-2',\n 3: 'sm:columns-3',\n 4: 'sm:columns-4',\n 5: 'sm:columns-5',\n 6: 'sm:columns-6',\n 7: 'sm:columns-7',\n 8: 'sm:columns-8',\n 9: 'sm:columns-9',\n 10: 'sm:columns-10',\n 11: 'sm:columns-11',\n 12: 'sm:columns-12',\n }\n\n const mdColumnMap: Record<number, string> = {\n 1: 'md:columns-1',\n 2: 'md:columns-2',\n 3: 'md:columns-3',\n 4: 'md:columns-4',\n 5: 'md:columns-5',\n 6: 'md:columns-6',\n 7: 'md:columns-7',\n 8: 'md:columns-8',\n 9: 'md:columns-9',\n 10: 'md:columns-10',\n 11: 'md:columns-11',\n 12: 'md:columns-12',\n }\n\n const lgColumnMap: Record<number, string> = {\n 1: 'lg:columns-1',\n 2: 'lg:columns-2',\n 3: 'lg:columns-3',\n 4: 'lg:columns-4',\n 5: 'lg:columns-5',\n 6: 'lg:columns-6',\n 7: 'lg:columns-7',\n 8: 'lg:columns-8',\n 9: 'lg:columns-9',\n 10: 'lg:columns-10',\n 11: 'lg:columns-11',\n 12: 'lg:columns-12',\n }\n\n const xlColumnMap: Record<number, string> = {\n 1: 'xl:columns-1',\n 2: 'xl:columns-2',\n 3: 'xl:columns-3',\n 4: 'xl:columns-4',\n 5: 'xl:columns-5',\n 6: 'xl:columns-6',\n 7: 'xl:columns-7',\n 8: 'xl:columns-8',\n 9: 'xl:columns-9',\n 10: 'xl:columns-10',\n 11: 'xl:columns-11',\n 12: 'xl:columns-12',\n }\n\n const xl2ColumnMap: Record<number, string> = {\n 1: '2xl:columns-1',\n 2: '2xl:columns-2',\n 3: '2xl:columns-3',\n 4: '2xl:columns-4',\n 5: '2xl:columns-5',\n 6: '2xl:columns-6',\n 7: '2xl:columns-7',\n 8: '2xl:columns-8',\n 9: '2xl:columns-9',\n 10: '2xl:columns-10',\n 11: '2xl:columns-11',\n 12: '2xl:columns-12',\n }\n\n // Convert columns to Tailwind classes\n const getColumnClasses = () => {\n if (typeof columns === 'number') {\n return baseColumnMap[columns] || 'columns-3'\n }\n\n // Handle responsive columns object\n const classes: string[] = []\n if (columns.xs !== undefined) classes.push(baseColumnMap[columns.xs] || 'columns-3')\n if (columns.sm !== undefined) classes.push(smColumnMap[columns.sm] || 'sm:columns-3')\n if (columns.md !== undefined) classes.push(mdColumnMap[columns.md] || 'md:columns-3')\n if (columns.lg !== undefined) classes.push(lgColumnMap[columns.lg] || 'lg:columns-3')\n if (columns.xl !== undefined) classes.push(xlColumnMap[columns.xl] || 'xl:columns-3')\n if (columns['2xl'] !== undefined) classes.push(xl2ColumnMap[columns['2xl']] || '2xl:columns-3')\n\n return classes.join(' ')\n }\n\n const containerClasses = [\n getColumnClasses(),\n getGapClass(),\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Wrap children in break-inside-avoid containers\n const wrappedChildren = React.Children.map(children, (child, index) => (\n <div key={index} className=\"break-inside-avoid mb-4\">\n {child}\n </div>\n ))\n\n return (\n <div className={containerClasses} {...rest}>\n {wrappedChildren}\n </div>\n )\n}\n\nMasonry.displayName = 'Masonry'\n\nexport default Masonry\n"],"names":["Masonry","children","columns","gap","className","rest","getGapClass","baseColumnMap","smColumnMap","mdColumnMap","lgColumnMap","xlColumnMap","xl2ColumnMap","containerClasses","classes","wrappedChildren","React","child","index","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index48.js","sources":["../src/components/Mask.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nexport type MaskShape =\n | 'squircle'\n | 'heart'\n | 'hexagon'\n | 'hexagon-2'\n | 'decagon'\n | 'pentagon'\n | 'diamond'\n | 'square'\n | 'circle'\n | 'star'\n | 'star-2'\n | 'triangle'\n | 'triangle-2'\n | 'triangle-3'\n | 'triangle-4'\n\nexport type MaskHalf = 'half-1' | 'half-2'\n\nexport interface MaskProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Shape of the mask */\n shape: MaskShape\n /** Show only half of the mask */\n half?: MaskHalf\n /** Content to mask (typically an image) */\n children: React.ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\nconst shapeClasses: Record<MaskShape, string> = {\n squircle: 'mask-squircle',\n heart: 'mask-heart',\n hexagon: 'mask-hexagon',\n 'hexagon-2': 'mask-hexagon-2',\n decagon: 'mask-decagon',\n pentagon: 'mask-pentagon',\n diamond: 'mask-diamond',\n square: 'mask-square',\n circle: 'mask-circle',\n star: 'mask-star',\n 'star-2': 'mask-star-2',\n triangle: 'mask-triangle',\n 'triangle-2': 'mask-triangle-2',\n 'triangle-3': 'mask-triangle-3',\n 'triangle-4': 'mask-triangle-4',\n}\n\nconst halfClasses: Record<MaskHalf, string> = {\n 'half-1': 'mask-half-1',\n 'half-2': 'mask-half-2',\n}\n\nexport const Mask = forwardRef<HTMLDivElement, MaskProps>(\n ({ shape, half, children, className = '', ...props }, ref) => {\n const classes = [\n 'mask',\n shapeClasses[shape],\n half ? halfClasses[half] : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div ref={ref} className={classes} {...props}>\n {children}\n </div>\n )\n }\n)\n\nMask.displayName = 'Mask'\n"],"names":["shapeClasses","halfClasses","Mask","forwardRef","shape","half","children","className","props","ref","classes"],"mappings":";;AAgCA,MAAMA,IAA0C;AAAA,EAC9C,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAChB,GAEMC,IAAwC;AAAA,EAC5C,UAAU;AAAA,EACV,UAAU;AACZ,GAEaC,IAAOC;AAAA,EAClB,CAAC,EAAE,OAAAC,GAAO,MAAAC,GAAM,UAAAC,GAAU,WAAAC,IAAY,IAAI,GAAGC,EAAA,GAASC,MAAQ;AAC5D,UAAMC,IAAU;AAAA,MACd;AAAA,MACAV,EAAaI,CAAK;AAAA,MAClBC,IAAOJ,EAAYI,CAAI,IAAI;AAAA,MAC3BE;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,6BACG,OAAA,EAAI,KAAAE,GAAU,WAAWC,GAAU,GAAGF,GACpC,UAAAF,GACH;AAAA,EAEJ;AACF;AAEAJ,EAAK,cAAc;"}
package/dist/index49.js CHANGED
@@ -1,179 +1,119 @@
1
- import { jsx as a, jsxs as K } from "react/jsx-runtime";
2
- import { useState as f, useRef as $, useCallback as A, useEffect as C } from "react";
3
- import { createPortal as oe } from "react-dom";
4
- const fe = ({
5
- value: p,
6
- defaultValue: q = "",
7
- onChange: E,
8
- onSelect: U,
9
- onSearch: W,
10
- options: R = [],
11
- loading: X = !1,
12
- prefix: k = "@",
13
- split: v = " ",
14
- placeholder: Y,
15
- disabled: G = !1,
16
- readOnly: J = !1,
17
- rows: V = 3,
18
- autoSize: o = !1,
19
- notFoundContent: Q = "No matches found",
20
- filterOption: x = !0,
21
- className: Z = "",
22
- dropdownClassName: _ = "",
23
- ...z
1
+ import { jsx as n } from "react/jsx-runtime";
2
+ import C from "react";
3
+ const h = ({
4
+ children: u,
5
+ columns: l = 3,
6
+ gap: m = 4,
7
+ className: c = "",
8
+ ...a
24
9
  }) => {
25
- const [ee, T] = f(q), h = p !== void 0 ? p : ee, [u, m] = f(!1), [I, N] = f(null), [D, M] = f(""), [d, y] = f(0), [g, H] = f(null), [j, te] = f({ top: 0, left: 0 }), l = $(null), b = $(null), B = $(null), ne = Array.isArray(k) ? k : [k], c = A(() => {
26
- if (!x) return R;
27
- const e = typeof x == "function" ? x : (t, n) => (n.label || n.value).toLowerCase().includes(t.toLowerCase());
28
- return R.filter((t) => e(D, t));
29
- }, [R, D, x])(), L = A(() => {
30
- const e = l.current;
31
- if (!e || !o) return;
32
- e.style.height = "auto";
33
- const t = e.scrollHeight;
34
- if (typeof o == "object") {
35
- const n = parseInt(getComputedStyle(e).lineHeight) || 20, r = o.minRows ? o.minRows * n : 0, s = o.maxRows ? o.maxRows * n : 1 / 0;
36
- e.style.height = `${Math.min(Math.max(t, r), s)}px`;
37
- } else
38
- e.style.height = `${t}px`;
39
- }, [o]);
40
- C(() => {
41
- L();
42
- }, [h, L]);
43
- const O = A(() => {
44
- const e = l.current, t = B.current;
45
- if (!e || !t || g === null) return;
46
- const n = h.substring(0, g);
47
- t.textContent = n;
48
- const r = e.getBoundingClientRect(), s = t.getBoundingClientRect(), w = parseInt(getComputedStyle(e).lineHeight) || 20;
49
- te({
50
- top: r.top + window.scrollY + w + 4,
51
- left: r.left + window.scrollX + Math.min(s.width % r.width, r.width - 200)
52
- });
53
- }, [h, g]);
54
- C(() => {
55
- u && O();
56
- }, [u, O, D]);
57
- const re = (e) => {
58
- const t = e.target.value, n = e.target.selectionStart;
59
- p === void 0 && T(t), E?.(t), se(t, n);
60
- }, se = (e, t) => {
61
- let n = null, r = null;
62
- for (const s of ne) {
63
- const i = e.substring(0, t).lastIndexOf(s);
64
- if (i !== -1) {
65
- const S = i > 0 ? e[i - 1] : v;
66
- if (S === v || S === `
67
- ` || i === 0) {
68
- const F = e.substring(i + s.length, t);
69
- if (!F.includes(v) && !F.includes(`
70
- `)) {
71
- n = s, r = i;
72
- break;
73
- }
74
- }
75
- }
76
- }
77
- if (n !== null && r !== null) {
78
- const s = e.substring(r + n.length, t);
79
- N(n), M(s), H(r), m(!0), y(0), W?.(s, n);
80
- } else
81
- m(!1), N(null), M(""), H(null);
82
- }, P = (e) => {
83
- if (e.disabled || g === null || I === null) return;
84
- const t = l.current;
85
- if (!t) return;
86
- const n = h.substring(0, g), r = h.substring(t.selectionStart), s = `${I}${e.value}${v}`, w = n + s + r;
87
- p === void 0 && T(w), E?.(w), U?.(e, I), m(!1), N(null), M(""), H(null), setTimeout(() => {
88
- const i = n.length + s.length;
89
- t.focus(), t.setSelectionRange(i, i);
90
- }, 0);
91
- }, ae = (e) => {
92
- if (u)
93
- switch (e.key) {
94
- case "ArrowDown":
95
- e.preventDefault(), y((t) => (t + 1) % Math.max(c.length, 1));
96
- break;
97
- case "ArrowUp":
98
- e.preventDefault(), y((t) => (t - 1 + c.length) % Math.max(c.length, 1));
99
- break;
100
- case "Enter":
101
- c[d] && (e.preventDefault(), P(c[d]));
102
- break;
103
- case "Escape":
104
- e.preventDefault(), m(!1);
105
- break;
106
- case "Tab":
107
- c[d] && (e.preventDefault(), P(c[d]));
108
- break;
109
- }
110
- };
111
- C(() => {
112
- const e = (t) => {
113
- b.current && !b.current.contains(t.target) && l.current && !l.current.contains(t.target) && m(!1);
114
- };
115
- return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
116
- }, []), C(() => {
117
- u && b.current && b.current.querySelector('[data-active="true"]')?.scrollIntoView({ block: "nearest" });
118
- }, [d, u]);
119
- const le = u && /* @__PURE__ */ a(
120
- "div",
121
- {
122
- ref: b,
123
- className: `fixed z-50 bg-base-100 border border-base-300 rounded-lg shadow-lg
124
- min-w-48 max-h-60 overflow-auto ${_}`,
125
- style: {
126
- top: j.top,
127
- left: j.left
128
- },
129
- children: X ? /* @__PURE__ */ a("div", { className: "p-3 text-center text-base-content/60", children: /* @__PURE__ */ a("span", { className: "loading loading-spinner loading-sm" }) }) : c.length === 0 ? /* @__PURE__ */ a("div", { className: "p-3 text-center text-base-content/60 text-sm", children: Q }) : /* @__PURE__ */ a("ul", { className: "menu menu-sm p-1", children: c.map((e, t) => /* @__PURE__ */ a("li", { children: /* @__PURE__ */ K(
130
- "button",
131
- {
132
- type: "button",
133
- "data-active": t === d,
134
- className: `flex items-center gap-2 ${t === d ? "active" : ""} ${e.disabled ? "disabled opacity-50 cursor-not-allowed" : ""}`,
135
- onClick: () => P(e),
136
- onMouseEnter: () => y(t),
137
- children: [
138
- e.avatar && /* @__PURE__ */ a("div", { className: "avatar", children: /* @__PURE__ */ a("div", { className: "w-6 h-6 rounded-full", children: /* @__PURE__ */ a("img", { src: e.avatar, alt: "" }) }) }),
139
- /* @__PURE__ */ a("span", { children: e.label || e.value })
140
- ]
141
- }
142
- ) }, e.value)) })
143
- }
144
- );
145
- return /* @__PURE__ */ K("div", { className: `relative ${Z}`, "data-state": u ? "open" : "closed", ...z, children: [
146
- /* @__PURE__ */ a(
147
- "div",
148
- {
149
- ref: B,
150
- className: "invisible absolute whitespace-pre-wrap break-words",
151
- style: {
152
- font: l.current ? getComputedStyle(l.current).font : void 0,
153
- width: l.current?.clientWidth,
154
- padding: l.current ? getComputedStyle(l.current).padding : void 0
155
- },
156
- "aria-hidden": "true"
157
- }
158
- ),
159
- /* @__PURE__ */ a(
160
- "textarea",
161
- {
162
- ref: l,
163
- value: h,
164
- onChange: re,
165
- onKeyDown: ae,
166
- placeholder: Y,
167
- disabled: G,
168
- readOnly: J,
169
- rows: typeof o == "object" ? o.minRows || V : o ? 1 : V,
170
- className: "textarea textarea-bordered w-full resize-none"
171
- }
172
- ),
173
- oe(le, document.body)
174
- ] });
10
+ const p = () => typeof m == "string" ? m : {
11
+ 0: "gap-0",
12
+ 1: "gap-1",
13
+ 2: "gap-2",
14
+ 3: "gap-3",
15
+ 4: "gap-4",
16
+ 5: "gap-5",
17
+ 6: "gap-6",
18
+ 7: "gap-7",
19
+ 8: "gap-8",
20
+ 9: "gap-9",
21
+ 10: "gap-10",
22
+ 11: "gap-11",
23
+ 12: "gap-12"
24
+ }[m] || "gap-4", o = {
25
+ 1: "columns-1",
26
+ 2: "columns-2",
27
+ 3: "columns-3",
28
+ 4: "columns-4",
29
+ 5: "columns-5",
30
+ 6: "columns-6",
31
+ 7: "columns-7",
32
+ 8: "columns-8",
33
+ 9: "columns-9",
34
+ 10: "columns-10",
35
+ 11: "columns-11",
36
+ 12: "columns-12"
37
+ }, x = {
38
+ 1: "sm:columns-1",
39
+ 2: "sm:columns-2",
40
+ 3: "sm:columns-3",
41
+ 4: "sm:columns-4",
42
+ 5: "sm:columns-5",
43
+ 6: "sm:columns-6",
44
+ 7: "sm:columns-7",
45
+ 8: "sm:columns-8",
46
+ 9: "sm:columns-9",
47
+ 10: "sm:columns-10",
48
+ 11: "sm:columns-11",
49
+ 12: "sm:columns-12"
50
+ }, g = {
51
+ 1: "md:columns-1",
52
+ 2: "md:columns-2",
53
+ 3: "md:columns-3",
54
+ 4: "md:columns-4",
55
+ 5: "md:columns-5",
56
+ 6: "md:columns-6",
57
+ 7: "md:columns-7",
58
+ 8: "md:columns-8",
59
+ 9: "md:columns-9",
60
+ 10: "md:columns-10",
61
+ 11: "md:columns-11",
62
+ 12: "md:columns-12"
63
+ }, d = {
64
+ 1: "lg:columns-1",
65
+ 2: "lg:columns-2",
66
+ 3: "lg:columns-3",
67
+ 4: "lg:columns-4",
68
+ 5: "lg:columns-5",
69
+ 6: "lg:columns-6",
70
+ 7: "lg:columns-7",
71
+ 8: "lg:columns-8",
72
+ 9: "lg:columns-9",
73
+ 10: "lg:columns-10",
74
+ 11: "lg:columns-11",
75
+ 12: "lg:columns-12"
76
+ }, e = {
77
+ 1: "xl:columns-1",
78
+ 2: "xl:columns-2",
79
+ 3: "xl:columns-3",
80
+ 4: "xl:columns-4",
81
+ 5: "xl:columns-5",
82
+ 6: "xl:columns-6",
83
+ 7: "xl:columns-7",
84
+ 8: "xl:columns-8",
85
+ 9: "xl:columns-9",
86
+ 10: "xl:columns-10",
87
+ 11: "xl:columns-11",
88
+ 12: "xl:columns-12"
89
+ }, i = {
90
+ 1: "2xl:columns-1",
91
+ 2: "2xl:columns-2",
92
+ 3: "2xl:columns-3",
93
+ 4: "2xl:columns-4",
94
+ 5: "2xl:columns-5",
95
+ 6: "2xl:columns-6",
96
+ 7: "2xl:columns-7",
97
+ 8: "2xl:columns-8",
98
+ 9: "2xl:columns-9",
99
+ 10: "2xl:columns-10",
100
+ 11: "2xl:columns-11",
101
+ 12: "2xl:columns-12"
102
+ }, t = [
103
+ (() => {
104
+ if (typeof l == "number")
105
+ return o[l] || "columns-3";
106
+ const s = [];
107
+ return l.xs !== void 0 && s.push(o[l.xs] || "columns-3"), l.sm !== void 0 && s.push(x[l.sm] || "sm:columns-3"), l.md !== void 0 && s.push(g[l.md] || "md:columns-3"), l.lg !== void 0 && s.push(d[l.lg] || "lg:columns-3"), l.xl !== void 0 && s.push(e[l.xl] || "xl:columns-3"), l["2xl"] !== void 0 && s.push(i[l["2xl"]] || "2xl:columns-3"), s.join(" ");
108
+ })(),
109
+ p(),
110
+ c
111
+ ].filter(Boolean).join(" "), r = C.Children.map(u, (s, f) => /* @__PURE__ */ n("div", { className: "break-inside-avoid mb-4", children: s }, f));
112
+ return /* @__PURE__ */ n("div", { className: t, ...a, children: r });
175
113
  };
114
+ h.displayName = "Masonry";
176
115
  export {
177
- fe as Mention
116
+ h as Masonry,
117
+ h as default
178
118
  };
179
119
  //# sourceMappingURL=index49.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index49.js","sources":["../src/components/Mention.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport interface MentionOption {\n value: string\n label?: string\n avatar?: string\n disabled?: boolean\n}\n\nexport interface MentionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'onSelect' | 'defaultValue' | 'prefix'> {\n value?: string\n defaultValue?: string\n onChange?: (value: string) => void\n onSelect?: (option: MentionOption, prefix: string) => void\n onSearch?: (text: string, prefix: string) => void\n options?: MentionOption[]\n loading?: boolean\n prefix?: string | string[]\n split?: string\n placeholder?: string\n disabled?: boolean\n readOnly?: boolean\n rows?: number\n autoSize?: boolean | { minRows?: number; maxRows?: number }\n notFoundContent?: React.ReactNode\n filterOption?: boolean | ((input: string, option: MentionOption) => boolean)\n dropdownClassName?: string\n}\n\nexport const Mention: React.FC<MentionProps> = ({\n value,\n defaultValue = '',\n onChange,\n onSelect,\n onSearch,\n options = [],\n loading = false,\n prefix = '@',\n split = ' ',\n placeholder,\n disabled = false,\n readOnly = false,\n rows = 3,\n autoSize = false,\n notFoundContent = 'No matches found',\n filterOption = true,\n className = '',\n dropdownClassName = '',\n ...rest\n}) => {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const currentValue = value !== undefined ? value : internalValue\n\n const [isOpen, setIsOpen] = useState(false)\n const [activePrefix, setActivePrefix] = useState<string | null>(null)\n const [searchText, setSearchText] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n const [mentionStart, setMentionStart] = useState<number | null>(null)\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0 })\n\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const measureRef = useRef<HTMLDivElement>(null)\n\n const prefixes = Array.isArray(prefix) ? prefix : [prefix]\n\n // Filter options based on search text\n const filteredOptions = useCallback(() => {\n if (!filterOption) return options\n\n const filterFn =\n typeof filterOption === 'function'\n ? filterOption\n : (input: string, option: MentionOption) => {\n const label = option.label || option.value\n return label.toLowerCase().includes(input.toLowerCase())\n }\n\n return options.filter((opt) => filterFn(searchText, opt))\n }, [options, searchText, filterOption])\n\n const filtered = filteredOptions()\n\n // Update textarea height for autoSize\n const updateHeight = useCallback(() => {\n const textarea = textareaRef.current\n if (!textarea || !autoSize) return\n\n textarea.style.height = 'auto'\n const scrollHeight = textarea.scrollHeight\n\n if (typeof autoSize === 'object') {\n const lineHeight = parseInt(getComputedStyle(textarea).lineHeight) || 20\n const minHeight = autoSize.minRows ? autoSize.minRows * lineHeight : 0\n const maxHeight = autoSize.maxRows ? autoSize.maxRows * lineHeight : Infinity\n\n textarea.style.height = `${Math.min(Math.max(scrollHeight, minHeight), maxHeight)}px`\n } else {\n textarea.style.height = `${scrollHeight}px`\n }\n }, [autoSize])\n\n useEffect(() => {\n updateHeight()\n }, [currentValue, updateHeight])\n\n // Calculate dropdown position\n const updateDropdownPosition = useCallback(() => {\n const textarea = textareaRef.current\n const measure = measureRef.current\n if (!textarea || !measure || mentionStart === null) return\n\n // Get text before cursor to measure position\n const textBeforeCursor = currentValue.substring(0, mentionStart)\n\n // Create a temporary element to measure text position\n measure.textContent = textBeforeCursor\n\n const textareaRect = textarea.getBoundingClientRect()\n const measureRect = measure.getBoundingClientRect()\n\n // Calculate position relative to viewport\n const lineHeight = parseInt(getComputedStyle(textarea).lineHeight) || 20\n\n setDropdownPosition({\n top: textareaRect.top + window.scrollY + lineHeight + 4,\n left: textareaRect.left + window.scrollX + Math.min(measureRect.width % textareaRect.width, textareaRect.width - 200),\n })\n }, [currentValue, mentionStart])\n\n useEffect(() => {\n if (isOpen) {\n updateDropdownPosition()\n }\n }, [isOpen, updateDropdownPosition, searchText])\n\n // Handle text change\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value\n const cursorPos = e.target.selectionStart\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n\n // Check if we should open the mention dropdown\n checkForMention(newValue, cursorPos)\n }\n\n const checkForMention = (text: string, cursorPos: number) => {\n // Look backwards from cursor for a prefix\n let foundPrefix: string | null = null\n let foundStart: number | null = null\n\n for (const p of prefixes) {\n // Find the last occurrence of prefix before cursor\n const beforeCursor = text.substring(0, cursorPos)\n const lastPrefixIndex = beforeCursor.lastIndexOf(p)\n\n if (lastPrefixIndex !== -1) {\n // Check if prefix is at start or preceded by whitespace/split\n const charBefore = lastPrefixIndex > 0 ? text[lastPrefixIndex - 1] : split\n if (charBefore === split || charBefore === '\\n' || lastPrefixIndex === 0) {\n // Check if there's no space between prefix and cursor\n const textAfterPrefix = text.substring(lastPrefixIndex + p.length, cursorPos)\n if (!textAfterPrefix.includes(split) && !textAfterPrefix.includes('\\n')) {\n foundPrefix = p\n foundStart = lastPrefixIndex\n break\n }\n }\n }\n }\n\n if (foundPrefix !== null && foundStart !== null) {\n const search = text.substring(foundStart + foundPrefix.length, cursorPos)\n setActivePrefix(foundPrefix)\n setSearchText(search)\n setMentionStart(foundStart)\n setIsOpen(true)\n setActiveIndex(0)\n onSearch?.(search, foundPrefix)\n } else {\n setIsOpen(false)\n setActivePrefix(null)\n setSearchText('')\n setMentionStart(null)\n }\n }\n\n // Handle option selection\n const selectOption = (option: MentionOption) => {\n if (option.disabled || mentionStart === null || activePrefix === null) return\n\n const textarea = textareaRef.current\n if (!textarea) return\n\n const beforeMention = currentValue.substring(0, mentionStart)\n const afterCursor = currentValue.substring(textarea.selectionStart)\n\n const mentionText = `${activePrefix}${option.value}${split}`\n const newValue = beforeMention + mentionText + afterCursor\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n onSelect?.(option, activePrefix)\n\n setIsOpen(false)\n setActivePrefix(null)\n setSearchText('')\n setMentionStart(null)\n\n // Set cursor position after mention\n setTimeout(() => {\n const newCursorPos = beforeMention.length + mentionText.length\n textarea.focus()\n textarea.setSelectionRange(newCursorPos, newCursorPos)\n }, 0)\n }\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (!isOpen) return\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n setActiveIndex((prev) => (prev + 1) % Math.max(filtered.length, 1))\n break\n case 'ArrowUp':\n e.preventDefault()\n setActiveIndex((prev) => (prev - 1 + filtered.length) % Math.max(filtered.length, 1))\n break\n case 'Enter':\n if (filtered[activeIndex]) {\n e.preventDefault()\n selectOption(filtered[activeIndex])\n }\n break\n case 'Escape':\n e.preventDefault()\n setIsOpen(false)\n break\n case 'Tab':\n if (filtered[activeIndex]) {\n e.preventDefault()\n selectOption(filtered[activeIndex])\n }\n break\n }\n }\n\n // Close dropdown on outside click\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(e.target as Node) &&\n textareaRef.current &&\n !textareaRef.current.contains(e.target as Node)\n ) {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n // Scroll active item into view\n useEffect(() => {\n if (isOpen && dropdownRef.current) {\n const activeItem = dropdownRef.current.querySelector('[data-active=\"true\"]')\n activeItem?.scrollIntoView({ block: 'nearest' })\n }\n }, [activeIndex, isOpen])\n\n const dropdown = isOpen && (\n <div\n ref={dropdownRef}\n className={`fixed z-50 bg-base-100 border border-base-300 rounded-lg shadow-lg\n min-w-48 max-h-60 overflow-auto ${dropdownClassName}`}\n style={{\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n }}\n >\n {loading ? (\n <div className=\"p-3 text-center text-base-content/60\">\n <span className=\"loading loading-spinner loading-sm\"></span>\n </div>\n ) : filtered.length === 0 ? (\n <div className=\"p-3 text-center text-base-content/60 text-sm\">\n {notFoundContent}\n </div>\n ) : (\n <ul className=\"menu menu-sm p-1\">\n {filtered.map((option, index) => (\n <li key={option.value}>\n <button\n type=\"button\"\n data-active={index === activeIndex}\n className={`flex items-center gap-2 ${\n index === activeIndex ? 'active' : ''\n } ${option.disabled ? 'disabled opacity-50 cursor-not-allowed' : ''}`}\n onClick={() => selectOption(option)}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {option.avatar && (\n <div className=\"avatar\">\n <div className=\"w-6 h-6 rounded-full\">\n <img src={option.avatar} alt=\"\" />\n </div>\n </div>\n )}\n <span>{option.label || option.value}</span>\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n\n return (\n <div className={`relative ${className}`} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n {/* Hidden measure element for cursor position */}\n <div\n ref={measureRef}\n className=\"invisible absolute whitespace-pre-wrap break-words\"\n style={{\n font: textareaRef.current ? getComputedStyle(textareaRef.current).font : undefined,\n width: textareaRef.current?.clientWidth,\n padding: textareaRef.current ? getComputedStyle(textareaRef.current).padding : undefined,\n }}\n aria-hidden=\"true\"\n />\n\n <textarea\n ref={textareaRef}\n value={currentValue}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n rows={typeof autoSize === 'object' ? autoSize.minRows || rows : autoSize ? 1 : rows}\n className=\"textarea textarea-bordered w-full resize-none\"\n />\n\n {createPortal(dropdown, document.body)}\n </div>\n )\n}\n"],"names":["Mention","value","defaultValue","onChange","onSelect","onSearch","options","loading","prefix","split","placeholder","disabled","readOnly","rows","autoSize","notFoundContent","filterOption","className","dropdownClassName","rest","internalValue","setInternalValue","useState","currentValue","isOpen","setIsOpen","activePrefix","setActivePrefix","searchText","setSearchText","activeIndex","setActiveIndex","mentionStart","setMentionStart","dropdownPosition","setDropdownPosition","textareaRef","useRef","dropdownRef","measureRef","prefixes","filtered","useCallback","filterFn","input","option","opt","updateHeight","textarea","scrollHeight","lineHeight","minHeight","maxHeight","useEffect","updateDropdownPosition","measure","textBeforeCursor","textareaRect","measureRect","handleChange","newValue","cursorPos","checkForMention","text","foundPrefix","foundStart","p","lastPrefixIndex","charBefore","textAfterPrefix","search","selectOption","beforeMention","afterCursor","mentionText","newCursorPos","handleKeyDown","prev","handleClickOutside","e","dropdown","jsx","index","jsxs","createPortal"],"mappings":"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"}
1
+ {"version":3,"file":"index49.js","sources":["../src/components/Masonry.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface MasonryProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n columns?: number | {\n xs?: number\n sm?: number\n md?: number\n lg?: number\n xl?: number\n '2xl'?: number\n }\n gap?: number | string\n}\n\nexport const Masonry: React.FC<MasonryProps> = ({\n children,\n columns = 3,\n gap = 4,\n className = '',\n ...rest\n}) => {\n // Map gap values to Tailwind classes\n const getGapClass = () => {\n if (typeof gap === 'string') {\n return gap\n }\n\n const gapMap: Record<number, string> = {\n 0: 'gap-0',\n 1: 'gap-1',\n 2: 'gap-2',\n 3: 'gap-3',\n 4: 'gap-4',\n 5: 'gap-5',\n 6: 'gap-6',\n 7: 'gap-7',\n 8: 'gap-8',\n 9: 'gap-9',\n 10: 'gap-10',\n 11: 'gap-11',\n 12: 'gap-12',\n }\n return gapMap[gap] || 'gap-4'\n }\n\n // Static column class mappings for Tailwind JIT\n const baseColumnMap: Record<number, string> = {\n 1: 'columns-1',\n 2: 'columns-2',\n 3: 'columns-3',\n 4: 'columns-4',\n 5: 'columns-5',\n 6: 'columns-6',\n 7: 'columns-7',\n 8: 'columns-8',\n 9: 'columns-9',\n 10: 'columns-10',\n 11: 'columns-11',\n 12: 'columns-12',\n }\n\n const smColumnMap: Record<number, string> = {\n 1: 'sm:columns-1',\n 2: 'sm:columns-2',\n 3: 'sm:columns-3',\n 4: 'sm:columns-4',\n 5: 'sm:columns-5',\n 6: 'sm:columns-6',\n 7: 'sm:columns-7',\n 8: 'sm:columns-8',\n 9: 'sm:columns-9',\n 10: 'sm:columns-10',\n 11: 'sm:columns-11',\n 12: 'sm:columns-12',\n }\n\n const mdColumnMap: Record<number, string> = {\n 1: 'md:columns-1',\n 2: 'md:columns-2',\n 3: 'md:columns-3',\n 4: 'md:columns-4',\n 5: 'md:columns-5',\n 6: 'md:columns-6',\n 7: 'md:columns-7',\n 8: 'md:columns-8',\n 9: 'md:columns-9',\n 10: 'md:columns-10',\n 11: 'md:columns-11',\n 12: 'md:columns-12',\n }\n\n const lgColumnMap: Record<number, string> = {\n 1: 'lg:columns-1',\n 2: 'lg:columns-2',\n 3: 'lg:columns-3',\n 4: 'lg:columns-4',\n 5: 'lg:columns-5',\n 6: 'lg:columns-6',\n 7: 'lg:columns-7',\n 8: 'lg:columns-8',\n 9: 'lg:columns-9',\n 10: 'lg:columns-10',\n 11: 'lg:columns-11',\n 12: 'lg:columns-12',\n }\n\n const xlColumnMap: Record<number, string> = {\n 1: 'xl:columns-1',\n 2: 'xl:columns-2',\n 3: 'xl:columns-3',\n 4: 'xl:columns-4',\n 5: 'xl:columns-5',\n 6: 'xl:columns-6',\n 7: 'xl:columns-7',\n 8: 'xl:columns-8',\n 9: 'xl:columns-9',\n 10: 'xl:columns-10',\n 11: 'xl:columns-11',\n 12: 'xl:columns-12',\n }\n\n const xl2ColumnMap: Record<number, string> = {\n 1: '2xl:columns-1',\n 2: '2xl:columns-2',\n 3: '2xl:columns-3',\n 4: '2xl:columns-4',\n 5: '2xl:columns-5',\n 6: '2xl:columns-6',\n 7: '2xl:columns-7',\n 8: '2xl:columns-8',\n 9: '2xl:columns-9',\n 10: '2xl:columns-10',\n 11: '2xl:columns-11',\n 12: '2xl:columns-12',\n }\n\n // Convert columns to Tailwind classes\n const getColumnClasses = () => {\n if (typeof columns === 'number') {\n return baseColumnMap[columns] || 'columns-3'\n }\n\n // Handle responsive columns object\n const classes: string[] = []\n if (columns.xs !== undefined) classes.push(baseColumnMap[columns.xs] || 'columns-3')\n if (columns.sm !== undefined) classes.push(smColumnMap[columns.sm] || 'sm:columns-3')\n if (columns.md !== undefined) classes.push(mdColumnMap[columns.md] || 'md:columns-3')\n if (columns.lg !== undefined) classes.push(lgColumnMap[columns.lg] || 'lg:columns-3')\n if (columns.xl !== undefined) classes.push(xlColumnMap[columns.xl] || 'xl:columns-3')\n if (columns['2xl'] !== undefined) classes.push(xl2ColumnMap[columns['2xl']] || '2xl:columns-3')\n\n return classes.join(' ')\n }\n\n const containerClasses = [\n getColumnClasses(),\n getGapClass(),\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Wrap children in break-inside-avoid containers\n const wrappedChildren = React.Children.map(children, (child, index) => (\n <div key={index} className=\"break-inside-avoid mb-4\">\n {child}\n </div>\n ))\n\n return (\n <div className={containerClasses} {...rest}>\n {wrappedChildren}\n </div>\n )\n}\n\nMasonry.displayName = 'Masonry'\n\nexport default Masonry\n"],"names":["Masonry","children","columns","gap","className","rest","getGapClass","baseColumnMap","smColumnMap","mdColumnMap","lgColumnMap","xlColumnMap","xl2ColumnMap","containerClasses","classes","wrappedChildren","React","child","index","jsx"],"mappings":";;AAeO,MAAMA,IAAkC,CAAC;AAAA,EAC9C,UAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,KAAAC,IAAM;AAAA,EACN,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AAEJ,QAAMC,IAAc,MACd,OAAOH,KAAQ,WACVA,IAG8B;AAAA,IACrC,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,EAEQA,CAAG,KAAK,SAIlBI,IAAwC;AAAA,IAC5C,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAC,IAAsC;AAAA,IAC1C,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAC,IAAsC;AAAA,IAC1C,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAC,IAAsC;AAAA,IAC1C,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAC,IAAsC;AAAA,IAC1C,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAC,IAAuC;AAAA,IAC3C,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAqBAC,IAAmB;AAAA,KAjBA,MAAM;AAC7B,UAAI,OAAOX,KAAY;AACrB,eAAOK,EAAcL,CAAO,KAAK;AAInC,YAAMY,IAAoB,CAAA;AAC1B,aAAIZ,EAAQ,OAAO,UAAWY,EAAQ,KAAKP,EAAcL,EAAQ,EAAE,KAAK,WAAW,GAC/EA,EAAQ,OAAO,UAAWY,EAAQ,KAAKN,EAAYN,EAAQ,EAAE,KAAK,cAAc,GAChFA,EAAQ,OAAO,UAAWY,EAAQ,KAAKL,EAAYP,EAAQ,EAAE,KAAK,cAAc,GAChFA,EAAQ,OAAO,UAAWY,EAAQ,KAAKJ,EAAYR,EAAQ,EAAE,KAAK,cAAc,GAChFA,EAAQ,OAAO,UAAWY,EAAQ,KAAKH,EAAYT,EAAQ,EAAE,KAAK,cAAc,GAChFA,EAAQ,KAAK,MAAM,UAAWY,EAAQ,KAAKF,EAAaV,EAAQ,KAAK,CAAC,KAAK,eAAe,GAEvFY,EAAQ,KAAK,GAAG;AAAA,IACzB,GAGE;AAAA,IACAR,EAAA;AAAA,IACAF;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAGLW,IAAkBC,EAAM,SAAS,IAAIf,GAAU,CAACgB,GAAOC,MAC3D,gBAAAC,EAAC,OAAA,EAAgB,WAAU,2BACxB,UAAAF,EAAA,GADOC,CAEV,CACD;AAED,2BACG,OAAA,EAAI,WAAWL,GAAmB,GAAGR,GACnC,UAAAU,GACH;AAEJ;AAEAf,EAAQ,cAAc;"}