@mdigital_ui/ui 0.4.5 → 0.4.7

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 (128) hide show
  1. package/README.md +258 -662
  2. package/dist/anchor/index.js +4 -0
  3. package/dist/anchor/index.js.map +1 -0
  4. package/dist/autocomplete/index.js +6 -0
  5. package/dist/autocomplete/index.js.map +1 -0
  6. package/dist/breadcrumbs/index.js +3 -3
  7. package/dist/calendar/index.js +4 -0
  8. package/dist/calendar/index.js.map +1 -0
  9. package/dist/chunk-3Z7RLVWD.js +258 -0
  10. package/dist/chunk-3Z7RLVWD.js.map +1 -0
  11. package/dist/chunk-5YEC6FDN.js +263 -0
  12. package/dist/chunk-5YEC6FDN.js.map +1 -0
  13. package/dist/{chunk-OTNKP5CD.js → chunk-6NXZWLSM.js} +3 -3
  14. package/dist/{chunk-OTNKP5CD.js.map → chunk-6NXZWLSM.js.map} +1 -1
  15. package/dist/{chunk-AL2EEKUY.js → chunk-6ROGWFQ2.js} +3 -3
  16. package/dist/{chunk-AL2EEKUY.js.map → chunk-6ROGWFQ2.js.map} +1 -1
  17. package/dist/{chunk-LJOQ2C5W.js → chunk-6RZEJRTC.js} +3 -3
  18. package/dist/{chunk-LJOQ2C5W.js.map → chunk-6RZEJRTC.js.map} +1 -1
  19. package/dist/chunk-74AF6PO2.js +374 -0
  20. package/dist/chunk-74AF6PO2.js.map +1 -0
  21. package/dist/chunk-75N6T3IS.js +77 -0
  22. package/dist/chunk-75N6T3IS.js.map +1 -0
  23. package/dist/{chunk-BKLJDEUX.js → chunk-DBPLQZJ2.js} +38 -14
  24. package/dist/chunk-DBPLQZJ2.js.map +1 -0
  25. package/dist/{chunk-HVHQA34X.js → chunk-DIUOGEL3.js} +95 -100
  26. package/dist/chunk-DIUOGEL3.js.map +1 -0
  27. package/dist/chunk-ED4CQZ72.js +343 -0
  28. package/dist/chunk-ED4CQZ72.js.map +1 -0
  29. package/dist/{chunk-4ZXHLPRS.js → chunk-FY2TZ2NT.js} +4 -4
  30. package/dist/{chunk-4ZXHLPRS.js.map → chunk-FY2TZ2NT.js.map} +1 -1
  31. package/dist/{chunk-I5AD247M.js → chunk-HKQOAEFY.js} +13 -3
  32. package/dist/chunk-HKQOAEFY.js.map +1 -0
  33. package/dist/chunk-JWYBDNC6.js +307 -0
  34. package/dist/chunk-JWYBDNC6.js.map +1 -0
  35. package/dist/{chunk-W5VLFE4U.js → chunk-LHZJ2GJU.js} +32 -6
  36. package/dist/chunk-LHZJ2GJU.js.map +1 -0
  37. package/dist/{chunk-253JZOYG.js → chunk-NB66D6A5.js} +3 -2
  38. package/dist/chunk-NB66D6A5.js.map +1 -0
  39. package/dist/{chunk-BGMYX7L5.js → chunk-NF6JUJBE.js} +9 -7
  40. package/dist/chunk-NF6JUJBE.js.map +1 -0
  41. package/dist/chunk-NPK4ESMA.js +281 -0
  42. package/dist/chunk-NPK4ESMA.js.map +1 -0
  43. package/dist/{chunk-X7MF3TIF.js → chunk-PD3O6ZH4.js} +12 -5
  44. package/dist/chunk-PD3O6ZH4.js.map +1 -0
  45. package/dist/{chunk-HJITFPBT.js → chunk-QDJ5PZPP.js} +14 -9
  46. package/dist/chunk-QDJ5PZPP.js.map +1 -0
  47. package/dist/chunk-QEYNOLRC.js +157 -0
  48. package/dist/chunk-QEYNOLRC.js.map +1 -0
  49. package/dist/chunk-RNG7HR6U.js +174 -0
  50. package/dist/chunk-RNG7HR6U.js.map +1 -0
  51. package/dist/chunk-TDPJYCNI.js +96 -0
  52. package/dist/chunk-TDPJYCNI.js.map +1 -0
  53. package/dist/chunk-UFYG3HKL.js +374 -0
  54. package/dist/chunk-UFYG3HKL.js.map +1 -0
  55. package/dist/chunk-VNH6R5EU.js +211 -0
  56. package/dist/chunk-VNH6R5EU.js.map +1 -0
  57. package/dist/{chunk-XOEEAMMY.js → chunk-X3VT5SSK.js} +88 -98
  58. package/dist/chunk-X3VT5SSK.js.map +1 -0
  59. package/dist/{chunk-SFP77VS3.js → chunk-X7JN7WPF.js} +5 -2
  60. package/dist/chunk-X7JN7WPF.js.map +1 -0
  61. package/dist/chunk-YRSHBAUQ.js +201 -0
  62. package/dist/chunk-YRSHBAUQ.js.map +1 -0
  63. package/dist/chunk-YUACN5GJ.js +303 -0
  64. package/dist/chunk-YUACN5GJ.js.map +1 -0
  65. package/dist/color-picker/index.js +6 -0
  66. package/dist/color-picker/index.js.map +1 -0
  67. package/dist/date-picker/RangePicker.d.ts.map +1 -1
  68. package/dist/date-picker/index.d.ts.map +1 -1
  69. package/dist/date-picker/index.js +1 -1
  70. package/dist/date-picker/shared.d.ts +5 -0
  71. package/dist/date-picker/shared.d.ts.map +1 -1
  72. package/dist/dropdown/index.js +2 -2
  73. package/dist/float-button/index.js +5 -0
  74. package/dist/float-button/index.js.map +1 -0
  75. package/dist/index.js +50 -2995
  76. package/dist/index.js.map +1 -1
  77. package/dist/input/index.d.ts.map +1 -1
  78. package/dist/input/index.js +1 -1
  79. package/dist/input-password/index.js +2 -2
  80. package/dist/mentions/index.js +4 -0
  81. package/dist/mentions/index.js.map +1 -0
  82. package/dist/menubar/index.d.ts +3 -3
  83. package/dist/menubar/index.d.ts.map +1 -1
  84. package/dist/menubar/index.js +2 -2
  85. package/dist/multi-select/index.d.ts.map +1 -1
  86. package/dist/multi-select/index.js +4 -4
  87. package/dist/number-input/index.d.ts.map +1 -1
  88. package/dist/number-input/index.js +1 -1
  89. package/dist/qr-code/index.js +5 -0
  90. package/dist/qr-code/index.js.map +1 -0
  91. package/dist/resizable/index.js +4 -0
  92. package/dist/resizable/index.js.map +1 -0
  93. package/dist/result/index.js +4 -0
  94. package/dist/result/index.js.map +1 -0
  95. package/dist/select/index.d.ts.map +1 -1
  96. package/dist/select/index.js +4 -4
  97. package/dist/shared/useSelectBase.d.ts.map +1 -1
  98. package/dist/skeleton/index.d.ts.map +1 -1
  99. package/dist/skeleton/index.js +1 -1
  100. package/dist/table/index.js +4 -4
  101. package/dist/tabs/index.d.ts.map +1 -1
  102. package/dist/tabs/index.js +1 -1
  103. package/dist/tags-input/index.js +5 -0
  104. package/dist/tags-input/index.js.map +1 -0
  105. package/dist/toast/index.d.ts.map +1 -1
  106. package/dist/toast/index.js +1 -1
  107. package/dist/tooltip/index.d.ts.map +1 -1
  108. package/dist/tooltip/index.js +1 -1
  109. package/dist/tour/index.js +5 -0
  110. package/dist/tour/index.js.map +1 -0
  111. package/dist/typography/index.js +4 -0
  112. package/dist/typography/index.js.map +1 -0
  113. package/dist/watermark/index.js +4 -0
  114. package/dist/watermark/index.js.map +1 -0
  115. package/package.json +59 -11
  116. package/styles/global.css +6 -3
  117. package/dist/chunk-253JZOYG.js.map +0 -1
  118. package/dist/chunk-BGMYX7L5.js.map +0 -1
  119. package/dist/chunk-BKLJDEUX.js.map +0 -1
  120. package/dist/chunk-HJITFPBT.js.map +0 -1
  121. package/dist/chunk-HVHQA34X.js.map +0 -1
  122. package/dist/chunk-I5AD247M.js.map +0 -1
  123. package/dist/chunk-JBNFVXH5.js +0 -322
  124. package/dist/chunk-JBNFVXH5.js.map +0 -1
  125. package/dist/chunk-SFP77VS3.js.map +0 -1
  126. package/dist/chunk-W5VLFE4U.js.map +0 -1
  127. package/dist/chunk-X7MF3TIF.js.map +0 -1
  128. package/dist/chunk-XOEEAMMY.js.map +0 -1
@@ -0,0 +1,157 @@
1
+ import { cn } from './chunk-RAS6HUEI.js';
2
+ import React, { useState, useRef, useCallback, useEffect } from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ function generateWatermark({
6
+ text,
7
+ image,
8
+ width = 120,
9
+ height = 64,
10
+ rotate = -22,
11
+ gap = [100, 100],
12
+ offset = [0, 0],
13
+ fontSize = 14,
14
+ fontFamily = "sans-serif",
15
+ fontWeight = "normal",
16
+ fontColor = "rgba(0,0,0,0.15)",
17
+ opacity = 1
18
+ }) {
19
+ return new Promise((resolve) => {
20
+ const canvas = document.createElement("canvas");
21
+ const ctx = canvas.getContext("2d");
22
+ const ratio = window.devicePixelRatio || 1;
23
+ const cellWidth = width + gap[0];
24
+ const cellHeight = height + gap[1];
25
+ canvas.width = cellWidth * ratio;
26
+ canvas.height = cellHeight * ratio;
27
+ ctx.scale(ratio, ratio);
28
+ ctx.globalAlpha = opacity;
29
+ ctx.translate(cellWidth / 2 + offset[0], cellHeight / 2 + offset[1]);
30
+ ctx.rotate(rotate * Math.PI / 180);
31
+ if (image) {
32
+ const img = new Image();
33
+ img.crossOrigin = "anonymous";
34
+ img.onload = () => {
35
+ ctx.drawImage(img, -width / 2, -height / 2, width, height);
36
+ resolve(canvas.toDataURL());
37
+ };
38
+ img.onerror = () => resolve("");
39
+ img.src = image;
40
+ } else if (text) {
41
+ ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`;
42
+ ctx.fillStyle = fontColor;
43
+ ctx.textAlign = "center";
44
+ ctx.textBaseline = "middle";
45
+ const lines = Array.isArray(text) ? text : [text];
46
+ const lineHeight = fontSize * 1.5;
47
+ const startY = -((lines.length - 1) * lineHeight) / 2;
48
+ lines.forEach((line, i) => {
49
+ ctx.fillText(line, 0, startY + i * lineHeight);
50
+ });
51
+ resolve(canvas.toDataURL());
52
+ } else {
53
+ resolve("");
54
+ }
55
+ });
56
+ }
57
+ var Watermark = React.memo(
58
+ ({
59
+ children,
60
+ text,
61
+ image,
62
+ width = 120,
63
+ height = 64,
64
+ rotate = -22,
65
+ gap = [100, 100],
66
+ offset = [0, 0],
67
+ fontSize = 14,
68
+ fontFamily = "sans-serif",
69
+ fontWeight = "normal",
70
+ fontColor = "rgba(0,0,0,0.15)",
71
+ opacity = 1,
72
+ zIndex = 10,
73
+ className,
74
+ classNames
75
+ }) => {
76
+ const [bgImage, setBgImage] = useState("");
77
+ const containerRef = useRef(null);
78
+ const watermarkRef = useRef(null);
79
+ const observerRef = useRef(null);
80
+ const render = useCallback(async () => {
81
+ if (typeof window === "undefined") return;
82
+ const dataUrl = await generateWatermark({
83
+ text,
84
+ image,
85
+ width,
86
+ height,
87
+ rotate,
88
+ gap,
89
+ offset,
90
+ fontSize,
91
+ fontFamily,
92
+ fontWeight,
93
+ fontColor,
94
+ opacity
95
+ });
96
+ setBgImage(dataUrl);
97
+ }, [text, image, width, height, rotate, gap, offset, fontSize, fontFamily, fontWeight, fontColor, opacity]);
98
+ useEffect(() => {
99
+ render();
100
+ }, [render]);
101
+ useEffect(() => {
102
+ if (!watermarkRef.current || !containerRef.current) return;
103
+ observerRef.current = new MutationObserver((mutations) => {
104
+ for (const m of mutations) {
105
+ if (m.type === "childList") {
106
+ const removed = Array.from(m.removedNodes);
107
+ if (removed.includes(watermarkRef.current)) {
108
+ render();
109
+ return;
110
+ }
111
+ }
112
+ if (m.type === "attributes" && m.target === watermarkRef.current) {
113
+ render();
114
+ return;
115
+ }
116
+ }
117
+ });
118
+ observerRef.current.observe(containerRef.current, {
119
+ childList: true,
120
+ subtree: true,
121
+ attributes: true,
122
+ attributeFilter: ["style", "class"]
123
+ });
124
+ return () => observerRef.current?.disconnect();
125
+ }, [render]);
126
+ return /* @__PURE__ */ jsxs(
127
+ "div",
128
+ {
129
+ ref: containerRef,
130
+ "data-slot": "root",
131
+ className: cn("watermark_root", "relative", classNames?.root, className),
132
+ children: [
133
+ /* @__PURE__ */ jsx("div", { "data-slot": "content", className: cn("watermark_content", "relative", classNames?.content), children }),
134
+ bgImage && /* @__PURE__ */ jsx(
135
+ "div",
136
+ {
137
+ ref: watermarkRef,
138
+ "data-slot": "watermark",
139
+ className: cn("watermark_layer", "absolute inset-0 pointer-events-none", classNames?.watermark),
140
+ style: {
141
+ backgroundImage: `url(${bgImage})`,
142
+ backgroundRepeat: "repeat",
143
+ zIndex
144
+ }
145
+ }
146
+ )
147
+ ]
148
+ }
149
+ );
150
+ }
151
+ );
152
+ Watermark.displayName = "Watermark";
153
+ var watermark_default = Watermark;
154
+
155
+ export { watermark_default };
156
+ //# sourceMappingURL=chunk-QEYNOLRC.js.map
157
+ //# sourceMappingURL=chunk-QEYNOLRC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/watermark/index.tsx"],"names":[],"mappings":";;;;AAOA,SAAS,iBAAA,CAAkB;AAAA,EACzB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA,GAAQ,GAAA;AAAA,EACR,MAAA,GAAS,EAAA;AAAA,EACT,MAAA,GAAS,GAAA;AAAA,EACT,GAAA,GAAM,CAAC,GAAA,EAAK,GAAG,CAAA;AAAA,EACf,MAAA,GAAS,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,EACd,QAAA,GAAW,EAAA;AAAA,EACX,UAAA,GAAa,YAAA;AAAA,EACb,UAAA,GAAa,QAAA;AAAA,EACb,SAAA,GAAY,kBAAA;AAAA,EACZ,OAAA,GAAU;AACZ,CAAA,EAA8F;AAC5F,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AAC9B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AAClC,IAAA,MAAM,KAAA,GAAQ,OAAO,gBAAA,IAAoB,CAAA;AAEzC,IAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,GAAA,CAAI,CAAC,CAAA;AAC/B,IAAA,MAAM,UAAA,GAAa,MAAA,GAAS,GAAA,CAAI,CAAC,CAAA;AACjC,IAAA,MAAA,CAAO,QAAQ,SAAA,GAAY,KAAA;AAC3B,IAAA,MAAA,CAAO,SAAS,UAAA,GAAa,KAAA;AAC7B,IAAA,GAAA,CAAI,KAAA,CAAM,OAAO,KAAK,CAAA;AAEtB,IAAA,GAAA,CAAI,WAAA,GAAc,OAAA;AAClB,IAAA,GAAA,CAAI,SAAA,CAAU,SAAA,GAAY,CAAA,GAAI,MAAA,CAAO,CAAC,GAAG,UAAA,GAAa,CAAA,GAAI,MAAA,CAAO,CAAC,CAAC,CAAA;AACnE,IAAA,GAAA,CAAI,MAAA,CAAQ,MAAA,GAAS,IAAA,CAAK,EAAA,GAAM,GAAG,CAAA;AAEnC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,GAAA,GAAM,IAAI,KAAA,EAAM;AACtB,MAAA,GAAA,CAAI,WAAA,GAAc,WAAA;AAClB,MAAA,GAAA,CAAI,SAAS,MAAM;AACjB,QAAA,GAAA,CAAI,SAAA,CAAU,KAAK,CAAC,KAAA,GAAQ,GAAG,CAAC,MAAA,GAAS,CAAA,EAAG,KAAA,EAAO,MAAM,CAAA;AACzD,QAAA,OAAA,CAAQ,MAAA,CAAO,WAAW,CAAA;AAAA,MAC5B,CAAA;AACA,MAAA,GAAA,CAAI,OAAA,GAAU,MAAM,OAAA,CAAQ,EAAE,CAAA;AAC9B,MAAA,GAAA,CAAI,GAAA,GAAM,KAAA;AAAA,IACZ,WAAW,IAAA,EAAM;AACf,MAAA,GAAA,CAAI,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,QAAQ,MAAM,UAAU,CAAA,CAAA;AACpD,MAAA,GAAA,CAAI,SAAA,GAAY,SAAA;AAChB,MAAA,GAAA,CAAI,SAAA,GAAY,QAAA;AAChB,MAAA,GAAA,CAAI,YAAA,GAAe,QAAA;AAEnB,MAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA,GAAO,CAAC,IAAI,CAAA;AAChD,MAAA,MAAM,aAAa,QAAA,GAAW,GAAA;AAC9B,MAAA,MAAM,MAAA,GAAS,EAAA,CAAG,KAAA,CAAM,MAAA,GAAS,KAAK,UAAA,CAAA,GAAc,CAAA;AAEpD,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,CAAA,KAAM;AACzB,QAAA,GAAA,CAAI,QAAA,CAAS,IAAA,EAAM,CAAA,EAAG,MAAA,GAAS,IAAI,UAAU,CAAA;AAAA,MAC/C,CAAC,CAAA;AACD,MAAA,OAAA,CAAQ,MAAA,CAAO,WAAW,CAAA;AAAA,IAC5B,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,IACZ;AAAA,EACF,CAAC,CAAA;AACH;AAEA,IAAM,YAAY,KAAA,CAAM,IAAA;AAAA,EACtB,CAAC;AAAA,IACC,QAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA,GAAQ,GAAA;AAAA,IACR,MAAA,GAAS,EAAA;AAAA,IACT,MAAA,GAAS,GAAA;AAAA,IACT,GAAA,GAAM,CAAC,GAAA,EAAK,GAAG,CAAA;AAAA,IACf,MAAA,GAAS,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IACd,QAAA,GAAW,EAAA;AAAA,IACX,UAAA,GAAa,YAAA;AAAA,IACb,UAAA,GAAa,QAAA;AAAA,IACb,SAAA,GAAY,kBAAA;AAAA,IACZ,OAAA,GAAU,CAAA;AAAA,IACV,MAAA,GAAS,EAAA;AAAA,IACT,SAAA;AAAA,IACA;AAAA,GACF,KAAM;AACJ,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,EAAE,CAAA;AACzC,IAAA,MAAM,YAAA,GAAe,OAAuB,IAAI,CAAA;AAChD,IAAA,MAAM,YAAA,GAAe,OAAuB,IAAI,CAAA;AAChD,IAAA,MAAM,WAAA,GAAc,OAAgC,IAAI,CAAA;AAExD,IAAA,MAAM,MAAA,GAAS,YAAY,YAAY;AACrC,MAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,MAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB;AAAA,QACtC,IAAA;AAAA,QAAM,KAAA;AAAA,QAAO,KAAA;AAAA,QAAO,MAAA;AAAA,QAAQ,MAAA;AAAA,QAAQ,GAAA;AAAA,QAAK,MAAA;AAAA,QAAQ,QAAA;AAAA,QAAU,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QAAW;AAAA,OAC/F,CAAA;AACD,MAAA,UAAA,CAAW,OAAO,CAAA;AAAA,IACpB,CAAA,EAAG,CAAC,IAAA,EAAM,KAAA,EAAO,OAAO,MAAA,EAAQ,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,UAAA,EAAY,SAAA,EAAW,OAAO,CAAC,CAAA;AAE1G,IAAA,SAAA,CAAU,MAAM;AAAE,MAAA,MAAA,EAAO;AAAA,IAAE,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGtC,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,YAAA,CAAa,OAAA,IAAW,CAAC,aAAa,OAAA,EAAS;AACpD,MAAA,WAAA,CAAY,OAAA,GAAU,IAAI,gBAAA,CAAiB,CAAC,SAAA,KAAc;AACxD,QAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,UAAA,IAAI,CAAA,CAAE,SAAS,WAAA,EAAa;AAC1B,YAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,YAAY,CAAA;AACzC,YAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAA,CAAa,OAAQ,CAAA,EAAG;AAAE,cAAA,MAAA,EAAO;AAAG,cAAA;AAAA,YAAO;AAAA,UAClE;AACA,UAAA,IAAI,EAAE,IAAA,KAAS,YAAA,IAAgB,CAAA,CAAE,MAAA,KAAW,aAAa,OAAA,EAAS;AAAE,YAAA,MAAA,EAAO;AAAG,YAAA;AAAA,UAAO;AAAA,QACvF;AAAA,MACF,CAAC,CAAA;AACD,MAAA,WAAA,CAAY,OAAA,CAAQ,OAAA,CAAQ,YAAA,CAAa,OAAA,EAAS;AAAA,QAChD,SAAA,EAAW,IAAA;AAAA,QACX,OAAA,EAAS,IAAA;AAAA,QACT,UAAA,EAAY,IAAA;AAAA,QACZ,eAAA,EAAiB,CAAC,OAAA,EAAS,OAAO;AAAA,OACnC,CAAA;AACD,MAAA,OAAO,MAAM,WAAA,CAAY,OAAA,EAAS,UAAA,EAAW;AAAA,IAC/C,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,YAAA;AAAA,QACL,WAAA,EAAU,MAAA;AAAA,QACV,WAAW,EAAA,CAAG,gBAAA,EAAkB,UAAA,EAAY,UAAA,EAAY,MAAM,SAAS,CAAA;AAAA,QAEvE,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAA,EAAU,SAAA,EAAU,SAAA,EAAW,EAAA,CAAG,qBAAqB,UAAA,EAAY,UAAA,EAAY,OAAO,CAAA,EACxF,QAAA,EACH,CAAA;AAAA,UACC,OAAA,oBACC,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,YAAA;AAAA,cACL,WAAA,EAAU,WAAA;AAAA,cACV,SAAA,EAAW,EAAA,CAAG,iBAAA,EAAmB,sCAAA,EAAwC,YAAY,SAAS,CAAA;AAAA,cAC9F,KAAA,EAAO;AAAA,gBACL,eAAA,EAAiB,OAAO,OAAO,CAAA,CAAA,CAAA;AAAA,gBAC/B,gBAAA,EAAkB,QAAA;AAAA,gBAClB;AAAA;AACF;AAAA;AACF;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF,CAAA;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA;AAGxB,IAAO,iBAAA,GAAQ","file":"chunk-QEYNOLRC.js","sourcesContent":["'use client'\n\nimport React, { useState, useEffect, useCallback, useRef } from 'react'\n\nimport { cn } from '../utils'\nimport type { WatermarkProps } from './types'\n\nfunction generateWatermark({\n text,\n image,\n width = 120,\n height = 64,\n rotate = -22,\n gap = [100, 100] as [number, number],\n offset = [0, 0] as [number, number],\n fontSize = 14,\n fontFamily = 'sans-serif',\n fontWeight = 'normal',\n fontColor = 'rgba(0,0,0,0.15)',\n opacity = 1,\n}: Omit<WatermarkProps, 'children' | 'className' | 'classNames' | 'zIndex'>): Promise<string> {\n return new Promise((resolve) => {\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')!\n const ratio = window.devicePixelRatio || 1\n\n const cellWidth = width + gap[0]\n const cellHeight = height + gap[1]\n canvas.width = cellWidth * ratio\n canvas.height = cellHeight * ratio\n ctx.scale(ratio, ratio)\n\n ctx.globalAlpha = opacity\n ctx.translate(cellWidth / 2 + offset[0], cellHeight / 2 + offset[1])\n ctx.rotate((rotate * Math.PI) / 180)\n\n if (image) {\n const img = new Image()\n img.crossOrigin = 'anonymous'\n img.onload = () => {\n ctx.drawImage(img, -width / 2, -height / 2, width, height)\n resolve(canvas.toDataURL())\n }\n img.onerror = () => resolve('')\n img.src = image\n } else if (text) {\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.fillStyle = fontColor\n ctx.textAlign = 'center'\n ctx.textBaseline = 'middle'\n\n const lines = Array.isArray(text) ? text : [text]\n const lineHeight = fontSize * 1.5\n const startY = -((lines.length - 1) * lineHeight) / 2\n\n lines.forEach((line, i) => {\n ctx.fillText(line, 0, startY + i * lineHeight)\n })\n resolve(canvas.toDataURL())\n } else {\n resolve('')\n }\n })\n}\n\nconst Watermark = React.memo<WatermarkProps>(\n ({\n children,\n text,\n image,\n width = 120,\n height = 64,\n rotate = -22,\n gap = [100, 100],\n offset = [0, 0],\n fontSize = 14,\n fontFamily = 'sans-serif',\n fontWeight = 'normal',\n fontColor = 'rgba(0,0,0,0.15)',\n opacity = 1,\n zIndex = 10,\n className,\n classNames,\n }) => {\n const [bgImage, setBgImage] = useState('')\n const containerRef = useRef<HTMLDivElement>(null)\n const watermarkRef = useRef<HTMLDivElement>(null)\n const observerRef = useRef<MutationObserver | null>(null)\n\n const render = useCallback(async () => {\n if (typeof window === 'undefined') return\n const dataUrl = await generateWatermark({\n text, image, width, height, rotate, gap, offset, fontSize, fontFamily, fontWeight, fontColor, opacity,\n })\n setBgImage(dataUrl)\n }, [text, image, width, height, rotate, gap, offset, fontSize, fontFamily, fontWeight, fontColor, opacity])\n\n useEffect(() => { render() }, [render])\n\n // Tamper protection: re-render if watermark DOM is modified\n useEffect(() => {\n if (!watermarkRef.current || !containerRef.current) return\n observerRef.current = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (m.type === 'childList') {\n const removed = Array.from(m.removedNodes)\n if (removed.includes(watermarkRef.current!)) { render(); return }\n }\n if (m.type === 'attributes' && m.target === watermarkRef.current) { render(); return }\n }\n })\n observerRef.current.observe(containerRef.current, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'class'],\n })\n return () => observerRef.current?.disconnect()\n }, [render])\n\n return (\n <div\n ref={containerRef}\n data-slot=\"root\"\n className={cn('watermark_root', 'relative', classNames?.root, className)}\n >\n <div data-slot=\"content\" className={cn('watermark_content', 'relative', classNames?.content)}>\n {children}\n </div>\n {bgImage && (\n <div\n ref={watermarkRef}\n data-slot=\"watermark\"\n className={cn('watermark_layer', 'absolute inset-0 pointer-events-none', classNames?.watermark)}\n style={{\n backgroundImage: `url(${bgImage})`,\n backgroundRepeat: 'repeat',\n zIndex,\n }}\n />\n )}\n </div>\n )\n },\n)\n\nWatermark.displayName = 'Watermark'\n\nexport type * from './types'\nexport default Watermark\n"]}
@@ -0,0 +1,174 @@
1
+ import { cn } from './chunk-RAS6HUEI.js';
2
+ import React, { useState, useRef, useCallback, useEffect } from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ var sizeClasses = {
6
+ xs: { link: "text-xs py-0.5 pl-3", indicator: "w-0.5" },
7
+ sm: { link: "text-sm py-0.5 pl-3", indicator: "w-0.5" },
8
+ md: { link: "text-sm py-1 pl-4", indicator: "w-0.5" },
9
+ lg: { link: "text-base py-1 pl-5", indicator: "w-1" }
10
+ };
11
+ function flattenIds(list) {
12
+ return list.flatMap((item) => [item.id, ...item.children ? flattenIds(item.children) : []]);
13
+ }
14
+ function getScrollContainer(getContainer) {
15
+ if (getContainer) return getContainer();
16
+ return typeof window !== "undefined" ? window : null;
17
+ }
18
+ function getContainerRect(container) {
19
+ if (!container || container === window || container instanceof Window) return { top: 0 };
20
+ return container.getBoundingClientRect();
21
+ }
22
+ function scrollTo(container, top) {
23
+ container.scrollTo({ top, behavior: "smooth" });
24
+ }
25
+ var Anchor = React.memo(
26
+ ({
27
+ items,
28
+ offset = 0,
29
+ targetOffset = 0,
30
+ size = "md",
31
+ affix = false,
32
+ affixTop = 0,
33
+ getContainer,
34
+ className,
35
+ classNames,
36
+ onChange
37
+ }) => {
38
+ const [activeId, setActiveId] = useState("");
39
+ const [indicatorTop, setIndicatorTop] = useState(0);
40
+ const [indicatorHeight, setIndicatorHeight] = useState(0);
41
+ const navRef = useRef(null);
42
+ const linkRefs = useRef(/* @__PURE__ */ new Map());
43
+ const isScrolling = useRef(false);
44
+ const allIds = flattenIds(items);
45
+ const updateActive = useCallback(() => {
46
+ if (isScrolling.current) return;
47
+ if (typeof window === "undefined") return;
48
+ const container = getScrollContainer(getContainer);
49
+ const containerTop = getContainerRect(container).top;
50
+ let current = "";
51
+ for (const id of allIds) {
52
+ const el = document.getElementById(id);
53
+ if (el) {
54
+ const rect = el.getBoundingClientRect();
55
+ const relativeTop = rect.top - containerTop;
56
+ if (relativeTop <= offset + 10) current = id;
57
+ }
58
+ }
59
+ if (current && current !== activeId) {
60
+ setActiveId(current);
61
+ onChange?.(current);
62
+ }
63
+ }, [allIds, offset, activeId, onChange, getContainer]);
64
+ useEffect(() => {
65
+ if (typeof window === "undefined") return;
66
+ const container = getScrollContainer(getContainer);
67
+ const target = container instanceof Window ? window : container;
68
+ target.addEventListener("scroll", updateActive, { passive: true });
69
+ updateActive();
70
+ return () => target.removeEventListener("scroll", updateActive);
71
+ }, [updateActive, getContainer]);
72
+ useEffect(() => {
73
+ if (!activeId || !navRef.current) return;
74
+ const linkEl = linkRefs.current.get(activeId);
75
+ if (linkEl) {
76
+ const navRect = navRef.current.getBoundingClientRect();
77
+ const linkRect = linkEl.getBoundingClientRect();
78
+ setIndicatorTop(linkRect.top - navRect.top);
79
+ setIndicatorHeight(linkRect.height);
80
+ }
81
+ }, [activeId]);
82
+ const handleClick = useCallback(
83
+ (e, id) => {
84
+ e.preventDefault();
85
+ const el = document.getElementById(id);
86
+ if (!el) return;
87
+ const container = getScrollContainer(getContainer);
88
+ isScrolling.current = true;
89
+ setActiveId(id);
90
+ onChange?.(id);
91
+ if (container instanceof Window) {
92
+ const y = el.getBoundingClientRect().top + window.scrollY - targetOffset;
93
+ scrollTo(container, y);
94
+ } else {
95
+ const y = el.offsetTop - targetOffset;
96
+ scrollTo(container, y);
97
+ }
98
+ setTimeout(() => {
99
+ isScrolling.current = false;
100
+ }, 800);
101
+ },
102
+ [targetOffset, onChange, getContainer]
103
+ );
104
+ const s = sizeClasses[size];
105
+ const depthPadding = { 0: "", 1: "pl-6", 2: "pl-10", 3: "pl-14" };
106
+ const renderLink = (item, depth = 0) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
107
+ /* @__PURE__ */ jsx(
108
+ "a",
109
+ {
110
+ ref: (el) => {
111
+ if (el) linkRefs.current.set(item.id, el);
112
+ },
113
+ href: `#${item.id}`,
114
+ onClick: (e) => handleClick(e, item.id),
115
+ "data-slot": "link",
116
+ className: cn(
117
+ "anchor_link",
118
+ "block text-text-secondary hover:text-text-primary transition-colors truncate",
119
+ s.link,
120
+ depth > 0 && (depthPadding[depth] || "pl-14"),
121
+ activeId === item.id && "text-primary font-medium",
122
+ activeId === item.id && classNames?.activeLink,
123
+ classNames?.link
124
+ ),
125
+ children: item.label
126
+ }
127
+ ),
128
+ item.children?.map((child) => renderLink(child, depth + 1))
129
+ ] }, item.id);
130
+ return /* @__PURE__ */ jsxs(
131
+ "nav",
132
+ {
133
+ ref: navRef,
134
+ "data-slot": "root",
135
+ className: cn(
136
+ "anchor_root",
137
+ "relative",
138
+ affix && "sticky",
139
+ classNames?.root,
140
+ className
141
+ ),
142
+ style: affix ? { top: affixTop } : void 0,
143
+ "aria-label": "Table of contents",
144
+ children: [
145
+ /* @__PURE__ */ jsx(
146
+ "div",
147
+ {
148
+ "data-slot": "indicator",
149
+ className: cn(
150
+ "anchor_indicator",
151
+ "absolute left-0 rounded-full bg-primary transition-all duration-200",
152
+ s.indicator,
153
+ classNames?.indicator
154
+ ),
155
+ style: {
156
+ top: indicatorTop,
157
+ height: indicatorHeight,
158
+ opacity: activeId ? 1 : 0
159
+ }
160
+ }
161
+ ),
162
+ /* @__PURE__ */ jsx("div", { className: "absolute left-0 top-0 bottom-0 w-px bg-border" }),
163
+ items.map((item) => renderLink(item))
164
+ ]
165
+ }
166
+ );
167
+ }
168
+ );
169
+ Anchor.displayName = "Anchor";
170
+ var anchor_default = Anchor;
171
+
172
+ export { anchor_default };
173
+ //# sourceMappingURL=chunk-RNG7HR6U.js.map
174
+ //# sourceMappingURL=chunk-RNG7HR6U.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/anchor/index.tsx"],"names":[],"mappings":"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","file":"chunk-RNG7HR6U.js","sourcesContent":["'use client'\n\nimport React, { useState, useEffect, useCallback, useRef } from 'react'\n\nimport { cn } from '../utils'\nimport type { AnchorItem, AnchorProps } from './types'\n\nconst sizeClasses = {\n xs: { link: 'text-xs py-0.5 pl-3', indicator: 'w-0.5' },\n sm: { link: 'text-sm py-0.5 pl-3', indicator: 'w-0.5' },\n md: { link: 'text-sm py-1 pl-4', indicator: 'w-0.5' },\n lg: { link: 'text-base py-1 pl-5', indicator: 'w-1' },\n}\n\nfunction flattenIds(list: AnchorItem[]): string[] {\n return list.flatMap((item) => [item.id, ...(item.children ? flattenIds(item.children) : [])])\n}\n\nfunction getScrollContainer(getContainer?: () => HTMLElement | Window): HTMLElement | Window {\n if (getContainer) return getContainer()\n return typeof window !== 'undefined' ? window : (null as any)\n}\n\nfunction getContainerRect(container: HTMLElement | Window): { top: number } {\n if (!container || container === window || container instanceof Window) return { top: 0 }\n return (container as HTMLElement).getBoundingClientRect()\n}\n\nfunction scrollTo(container: HTMLElement | Window, top: number) {\n container.scrollTo({ top, behavior: 'smooth' })\n}\n\nconst Anchor = React.memo<AnchorProps>(\n ({\n items,\n offset = 0,\n targetOffset = 0,\n size = 'md',\n affix = false,\n affixTop = 0,\n getContainer,\n className,\n classNames,\n onChange,\n }) => {\n const [activeId, setActiveId] = useState<string>('')\n const [indicatorTop, setIndicatorTop] = useState(0)\n const [indicatorHeight, setIndicatorHeight] = useState(0)\n const navRef = useRef<HTMLElement>(null)\n const linkRefs = useRef<Map<string, HTMLAnchorElement>>(new Map())\n const isScrolling = useRef(false)\n\n const allIds = flattenIds(items)\n\n const updateActive = useCallback(() => {\n if (isScrolling.current) return\n if (typeof window === 'undefined') return\n\n const container = getScrollContainer(getContainer)\n const containerTop = getContainerRect(container).top\n\n let current = ''\n for (const id of allIds) {\n const el = document.getElementById(id)\n if (el) {\n const rect = el.getBoundingClientRect()\n // Position relative to scroll container\n const relativeTop = rect.top - containerTop\n if (relativeTop <= offset + 10) current = id\n }\n }\n if (current && current !== activeId) {\n setActiveId(current)\n onChange?.(current)\n }\n }, [allIds, offset, activeId, onChange, getContainer])\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n const container = getScrollContainer(getContainer)\n const target = container instanceof Window ? window : container\n\n target.addEventListener('scroll', updateActive, { passive: true })\n updateActive()\n return () => target.removeEventListener('scroll', updateActive)\n }, [updateActive, getContainer])\n\n useEffect(() => {\n if (!activeId || !navRef.current) return\n const linkEl = linkRefs.current.get(activeId)\n if (linkEl) {\n const navRect = navRef.current.getBoundingClientRect()\n const linkRect = linkEl.getBoundingClientRect()\n setIndicatorTop(linkRect.top - navRect.top)\n setIndicatorHeight(linkRect.height)\n }\n }, [activeId])\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLAnchorElement>, id: string) => {\n e.preventDefault()\n const el = document.getElementById(id)\n if (!el) return\n\n const container = getScrollContainer(getContainer)\n\n isScrolling.current = true\n setActiveId(id)\n onChange?.(id)\n\n if (container instanceof Window) {\n const y = el.getBoundingClientRect().top + window.scrollY - targetOffset\n scrollTo(container, y)\n } else {\n const y = el.offsetTop - targetOffset\n scrollTo(container, y)\n }\n\n setTimeout(() => { isScrolling.current = false }, 800)\n },\n [targetOffset, onChange, getContainer],\n )\n\n const s = sizeClasses[size]\n const depthPadding = { 0: '', 1: 'pl-6', 2: 'pl-10', 3: 'pl-14' } as Record<number, string>\n\n const renderLink = (item: AnchorItem, depth = 0) => (\n <React.Fragment key={item.id}>\n <a\n ref={(el) => { if (el) linkRefs.current.set(item.id, el) }}\n href={`#${item.id}`}\n onClick={(e) => handleClick(e, item.id)}\n data-slot=\"link\"\n className={cn(\n 'anchor_link',\n 'block text-text-secondary hover:text-text-primary transition-colors truncate',\n s.link,\n depth > 0 && (depthPadding[depth] || 'pl-14'),\n activeId === item.id && 'text-primary font-medium',\n activeId === item.id && classNames?.activeLink,\n classNames?.link,\n )}\n >\n {item.label}\n </a>\n {item.children?.map((child) => renderLink(child, depth + 1))}\n </React.Fragment>\n )\n\n return (\n <nav\n ref={navRef}\n data-slot=\"root\"\n className={cn(\n 'anchor_root',\n 'relative',\n affix && 'sticky',\n classNames?.root,\n className,\n )}\n style={affix ? { top: affixTop } : undefined}\n aria-label=\"Table of contents\"\n >\n <div\n data-slot=\"indicator\"\n className={cn(\n 'anchor_indicator',\n 'absolute left-0 rounded-full bg-primary transition-all duration-200',\n s.indicator,\n classNames?.indicator,\n )}\n style={{\n top: indicatorTop,\n height: indicatorHeight,\n opacity: activeId ? 1 : 0,\n }}\n />\n\n <div className=\"absolute left-0 top-0 bottom-0 w-px bg-border\" />\n\n {items.map((item) => renderLink(item))}\n </nav>\n )\n },\n)\n\nAnchor.displayName = 'Anchor'\n\nexport type * from './types'\nexport default Anchor\n"]}
@@ -0,0 +1,96 @@
1
+ import { cn } from './chunk-RAS6HUEI.js';
2
+ import React from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ var statusConfig = {
6
+ success: { color: "text-success", defaultTitle: "Successfully Done" },
7
+ error: { color: "text-error", defaultTitle: "Something Went Wrong" },
8
+ info: { color: "text-info", defaultTitle: "Information" },
9
+ warning: { color: "text-warning", defaultTitle: "Warning" },
10
+ "403": { color: "text-warning", defaultTitle: "403 \u2014 Access Denied" },
11
+ "404": { color: "text-info", defaultTitle: "404 \u2014 Page Not Found" },
12
+ "500": { color: "text-error", defaultTitle: "500 \u2014 Server Error" }
13
+ };
14
+ var sizeMap = {
15
+ xs: { icon: "w-10 h-10", title: "text-base font-semibold", subtitle: "text-xs", padding: "py-6 px-4", maxW: "max-w-xs" },
16
+ sm: { icon: "w-12 h-12", title: "text-lg font-semibold", subtitle: "text-sm", padding: "py-8 px-4", maxW: "max-w-sm" },
17
+ md: { icon: "w-16 h-16", title: "text-xl font-semibold", subtitle: "text-sm", padding: "py-12 px-6", maxW: "max-w-md" },
18
+ lg: { icon: "w-20 h-20", title: "text-2xl font-bold", subtitle: "text-base", padding: "py-16 px-8", maxW: "max-w-lg" }
19
+ };
20
+ function StatusIcon({ status, sizeClass }) {
21
+ const className = cn(sizeClass, statusConfig[status].color);
22
+ if (status === "success") {
23
+ return /* @__PURE__ */ jsxs("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
24
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
25
+ /* @__PURE__ */ jsx("path", { d: "M9 12l2 2 4-4" })
26
+ ] });
27
+ }
28
+ if (status === "error" || status === "500") {
29
+ return /* @__PURE__ */ jsxs("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
30
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
31
+ /* @__PURE__ */ jsx("line", { x1: "15", y1: "9", x2: "9", y2: "15" }),
32
+ /* @__PURE__ */ jsx("line", { x1: "9", y1: "9", x2: "15", y2: "15" })
33
+ ] });
34
+ }
35
+ if (status === "warning" || status === "403") {
36
+ return /* @__PURE__ */ jsxs("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
37
+ /* @__PURE__ */ jsx("path", { d: "M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z" }),
38
+ /* @__PURE__ */ jsx("line", { x1: "12", y1: "9", x2: "12", y2: "13" }),
39
+ /* @__PURE__ */ jsx("line", { x1: "12", y1: "17", x2: "12.01", y2: "17" })
40
+ ] });
41
+ }
42
+ if (status === "404") {
43
+ return /* @__PURE__ */ jsxs("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
44
+ /* @__PURE__ */ jsx("circle", { cx: "11", cy: "11", r: "8" }),
45
+ /* @__PURE__ */ jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" }),
46
+ /* @__PURE__ */ jsx("line", { x1: "8", y1: "11", x2: "14", y2: "11" })
47
+ ] });
48
+ }
49
+ return /* @__PURE__ */ jsxs("svg", { className, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
50
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
51
+ /* @__PURE__ */ jsx("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
52
+ /* @__PURE__ */ jsx("line", { x1: "12", y1: "8", x2: "12.01", y2: "8" })
53
+ ] });
54
+ }
55
+ var Result = React.memo(
56
+ ({
57
+ status = "info",
58
+ icon,
59
+ title,
60
+ subtitle,
61
+ extra,
62
+ children,
63
+ size = "md",
64
+ className,
65
+ classNames
66
+ }) => {
67
+ const config = statusConfig[status];
68
+ const s = sizeMap[size];
69
+ return /* @__PURE__ */ jsxs(
70
+ "div",
71
+ {
72
+ "data-slot": "root",
73
+ className: cn(
74
+ "result_root",
75
+ "flex flex-col items-center text-center",
76
+ s.padding,
77
+ classNames?.root,
78
+ className
79
+ ),
80
+ children: [
81
+ /* @__PURE__ */ jsx("div", { "data-slot": "icon", className: cn("result_icon", "mb-6", classNames?.icon), children: icon ?? /* @__PURE__ */ jsx(StatusIcon, { status, sizeClass: s.icon }) }),
82
+ /* @__PURE__ */ jsx("h3", { "data-slot": "title", className: cn("result_title", s.title, "text-text-primary mb-2", classNames?.title), children: title ?? config.defaultTitle }),
83
+ subtitle && /* @__PURE__ */ jsx("p", { "data-slot": "subtitle", className: cn("result_subtitle", s.subtitle, "text-text-secondary", s.maxW, "mb-6", classNames?.subtitle), children: subtitle }),
84
+ extra && /* @__PURE__ */ jsx("div", { "data-slot": "extra", className: cn("result_extra", "flex items-center gap-3 mb-6", classNames?.extra), children: extra }),
85
+ children && /* @__PURE__ */ jsx("div", { "data-slot": "content", className: cn("result_content", "w-full", s.maxW, classNames?.content), children })
86
+ ]
87
+ }
88
+ );
89
+ }
90
+ );
91
+ Result.displayName = "Result";
92
+ var result_default = Result;
93
+
94
+ export { result_default };
95
+ //# sourceMappingURL=chunk-TDPJYCNI.js.map
96
+ //# sourceMappingURL=chunk-TDPJYCNI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/result/index.tsx"],"names":[],"mappings":"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","file":"chunk-TDPJYCNI.js","sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { cn } from '../utils'\nimport type { ResultProps, ResultStatus } from './types'\n\nconst statusConfig: Record<ResultStatus, { color: string; defaultTitle: string }> = {\n success: { color: 'text-success', defaultTitle: 'Successfully Done' },\n error: { color: 'text-error', defaultTitle: 'Something Went Wrong' },\n info: { color: 'text-info', defaultTitle: 'Information' },\n warning: { color: 'text-warning', defaultTitle: 'Warning' },\n '403': { color: 'text-warning', defaultTitle: '403 — Access Denied' },\n '404': { color: 'text-info', defaultTitle: '404 — Page Not Found' },\n '500': { color: 'text-error', defaultTitle: '500 — Server Error' },\n}\n\nconst sizeMap = {\n xs: { icon: 'w-10 h-10', title: 'text-base font-semibold', subtitle: 'text-xs', padding: 'py-6 px-4', maxW: 'max-w-xs' },\n sm: { icon: 'w-12 h-12', title: 'text-lg font-semibold', subtitle: 'text-sm', padding: 'py-8 px-4', maxW: 'max-w-sm' },\n md: { icon: 'w-16 h-16', title: 'text-xl font-semibold', subtitle: 'text-sm', padding: 'py-12 px-6', maxW: 'max-w-md' },\n lg: { icon: 'w-20 h-20', title: 'text-2xl font-bold', subtitle: 'text-base', padding: 'py-16 px-8', maxW: 'max-w-lg' },\n}\n\nfunction StatusIcon({ status, sizeClass }: { status: ResultStatus; sizeClass: string }) {\n const className = cn(sizeClass, statusConfig[status].color)\n\n if (status === 'success') {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9 12l2 2 4-4\" />\n </svg>\n )\n }\n\n if (status === 'error' || status === '500') {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n )\n }\n\n if (status === 'warning' || status === '403') {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n )\n }\n\n if (status === '404') {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" />\n </svg>\n )\n }\n\n // info\n return (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n )\n}\n\nconst Result = React.memo<ResultProps>(\n ({\n status = 'info',\n icon,\n title,\n subtitle,\n extra,\n children,\n size = 'md',\n className,\n classNames,\n }) => {\n const config = statusConfig[status]\n const s = sizeMap[size]\n\n return (\n <div\n data-slot=\"root\"\n className={cn(\n 'result_root',\n 'flex flex-col items-center text-center',\n s.padding,\n classNames?.root,\n className,\n )}\n >\n <div data-slot=\"icon\" className={cn('result_icon', 'mb-6', classNames?.icon)}>\n {icon ?? <StatusIcon status={status} sizeClass={s.icon} />}\n </div>\n\n <h3 data-slot=\"title\" className={cn('result_title', s.title, 'text-text-primary mb-2', classNames?.title)}>\n {title ?? config.defaultTitle}\n </h3>\n\n {subtitle && (\n <p data-slot=\"subtitle\" className={cn('result_subtitle', s.subtitle, 'text-text-secondary', s.maxW, 'mb-6', classNames?.subtitle)}>\n {subtitle}\n </p>\n )}\n\n {extra && (\n <div data-slot=\"extra\" className={cn('result_extra', 'flex items-center gap-3 mb-6', classNames?.extra)}>\n {extra}\n </div>\n )}\n\n {children && (\n <div data-slot=\"content\" className={cn('result_content', 'w-full', s.maxW, classNames?.content)}>\n {children}\n </div>\n )}\n </div>\n )\n },\n)\n\nResult.displayName = 'Result'\n\nexport type * from './types'\nexport default Result\n"]}