@ryanhe919/lumen-ui 0.3.1 → 0.3.2

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 (178) hide show
  1. package/LICENSE +21 -0
  2. package/dist/ErrorMessage-CbE7emgD.cjs +26 -0
  3. package/dist/ErrorMessage-CbE7emgD.cjs.map +1 -0
  4. package/dist/ErrorMessage-Dt4cJ-sy.js +27 -0
  5. package/dist/ErrorMessage-Dt4cJ-sy.js.map +1 -0
  6. package/dist/{LMButton-B258yfky.cjs → LMButton-ByInEqMk.cjs} +15 -11
  7. package/dist/LMButton-ByInEqMk.cjs.map +1 -0
  8. package/dist/{LMButton-S4xQSohi.js → LMButton-DH7s4i80.js} +16 -12
  9. package/dist/LMButton-DH7s4i80.js.map +1 -0
  10. package/dist/{LMCard-D_K051f2.cjs → LMCard-lJGrsAzY.cjs} +9 -6
  11. package/dist/LMCard-lJGrsAzY.cjs.map +1 -0
  12. package/dist/{LMCard-D7ABNC95.js → LMCard-uuWNjVQL.js} +9 -6
  13. package/dist/LMCard-uuWNjVQL.js.map +1 -0
  14. package/dist/{LMCheckbox-C2YvEQ8f.cjs → LMCheckbox-C5gRhXJk.cjs} +11 -34
  15. package/dist/LMCheckbox-C5gRhXJk.cjs.map +1 -0
  16. package/dist/{LMCheckbox-DaaJRjKt.js → LMCheckbox-DPg4CldM.js} +11 -34
  17. package/dist/LMCheckbox-DPg4CldM.js.map +1 -0
  18. package/dist/{LMDatePicker-DSv28BFH.js → LMDatePicker-C7R0ByJ-.js} +5 -1
  19. package/dist/LMDatePicker-C7R0ByJ-.js.map +1 -0
  20. package/dist/{LMDatePicker-BlUwN4On.cjs → LMDatePicker-lH-8-HzG.cjs} +5 -1
  21. package/dist/LMDatePicker-lH-8-HzG.cjs.map +1 -0
  22. package/dist/{LMEmpty-BedQxpbi.cjs → LMEmpty-BCf4K8iH.cjs} +7 -6
  23. package/dist/LMEmpty-BCf4K8iH.cjs.map +1 -0
  24. package/dist/{LMEmpty-DzHM1fOb.js → LMEmpty-C499qRrR.js} +7 -6
  25. package/dist/LMEmpty-C499qRrR.js.map +1 -0
  26. package/dist/{LMField-DhDHj64z.cjs → LMField-BRaviP2p.cjs} +3 -2
  27. package/dist/LMField-BRaviP2p.cjs.map +1 -0
  28. package/dist/{LMField-BS-DSEya.js → LMField-DkRk9Q8-.js} +3 -2
  29. package/dist/LMField-DkRk9Q8-.js.map +1 -0
  30. package/dist/{LMInput-D9csGyhj.js → LMInput-Be2KkPOW.js} +21 -43
  31. package/dist/LMInput-Be2KkPOW.js.map +1 -0
  32. package/dist/{LMInput-CVjawj1F.cjs → LMInput-O55xkiRS.cjs} +20 -42
  33. package/dist/LMInput-O55xkiRS.cjs.map +1 -0
  34. package/dist/{LMModal-BCVVPLot.cjs → LMModal-BgxF1xOT.cjs} +2 -2
  35. package/dist/LMModal-BgxF1xOT.cjs.map +1 -0
  36. package/dist/{LMModal-DCJPlfA4.js → LMModal-CZF26Ask.js} +2 -2
  37. package/dist/LMModal-CZF26Ask.js.map +1 -0
  38. package/dist/{LMNumberInput-B1tU7T_W.cjs → LMNumberInput-DQaLVoud.cjs} +30 -39
  39. package/dist/LMNumberInput-DQaLVoud.cjs.map +1 -0
  40. package/dist/{LMNumberInput-BI5_OEx4.js → LMNumberInput-gnRvWRly.js} +31 -40
  41. package/dist/LMNumberInput-gnRvWRly.js.map +1 -0
  42. package/dist/{LMRadio-CHn6nFSy.cjs → LMRadio-BVBwm1rk.cjs} +11 -37
  43. package/dist/LMRadio-BVBwm1rk.cjs.map +1 -0
  44. package/dist/{LMRadio-UQLNgTMF.js → LMRadio-C0ZL0hVK.js} +11 -37
  45. package/dist/LMRadio-C0ZL0hVK.js.map +1 -0
  46. package/dist/{LMSearchInput-nBlAX734.cjs → LMSearchInput-BDJVh4Vs.cjs} +25 -31
  47. package/dist/LMSearchInput-BDJVh4Vs.cjs.map +1 -0
  48. package/dist/{LMSearchInput-CIvVkEf2.js → LMSearchInput-DQovqMTN.js} +26 -32
  49. package/dist/LMSearchInput-DQovqMTN.js.map +1 -0
  50. package/dist/{LMSelect-B-MWX2JI.js → LMSelect-BPfW-AHI.js} +37 -48
  51. package/dist/LMSelect-BPfW-AHI.js.map +1 -0
  52. package/dist/{LMSelect-ByQcUp2S.cjs → LMSelect-xIVolEhx.cjs} +37 -48
  53. package/dist/LMSelect-xIVolEhx.cjs.map +1 -0
  54. package/dist/{LMStatCard-D5HV9r6d.js → LMStatCard-CdyIDhrA.js} +11 -6
  55. package/dist/LMStatCard-CdyIDhrA.js.map +1 -0
  56. package/dist/{LMStatCard-MXs9Z0qH.cjs → LMStatCard-Do5f2Map.cjs} +11 -6
  57. package/dist/LMStatCard-Do5f2Map.cjs.map +1 -0
  58. package/dist/{LMSwitch-CP1_nrfU.js → LMSwitch-BqhucDO0.js} +3 -31
  59. package/dist/LMSwitch-BqhucDO0.js.map +1 -0
  60. package/dist/{LMSwitch-DYoSH6wE.cjs → LMSwitch-BxVqTSUH.cjs} +3 -31
  61. package/dist/LMSwitch-BxVqTSUH.cjs.map +1 -0
  62. package/dist/{LMTable-j1ZzAzXB.cjs → LMTable-Be9FK8bz.cjs} +7 -4
  63. package/dist/LMTable-Be9FK8bz.cjs.map +1 -0
  64. package/dist/{LMTable-Cp8HZqiV.js → LMTable-IGmHFhnV.js} +7 -4
  65. package/dist/LMTable-IGmHFhnV.js.map +1 -0
  66. package/dist/{LMTabs-D5n9lB8X.js → LMTabs-Cjp3oiNv.js} +2 -2
  67. package/dist/{LMTabs-D5n9lB8X.js.map → LMTabs-Cjp3oiNv.js.map} +1 -1
  68. package/dist/{LMTabs-NPmOzPat.cjs → LMTabs-DEYx2gOH.cjs} +2 -2
  69. package/dist/{LMTabs-NPmOzPat.cjs.map → LMTabs-DEYx2gOH.cjs.map} +1 -1
  70. package/dist/{LMTextarea-5dVVPeL2.js → LMTextarea-BNacTCNn.js} +20 -28
  71. package/dist/LMTextarea-BNacTCNn.js.map +1 -0
  72. package/dist/{LMTextarea-yG0OBZjA.cjs → LMTextarea-DRi6gaFW.cjs} +20 -28
  73. package/dist/LMTextarea-DRi6gaFW.cjs.map +1 -0
  74. package/dist/cn-I2jp-M-K.cjs +6 -0
  75. package/dist/cn-I2jp-M-K.cjs.map +1 -0
  76. package/dist/cn-wDEkOmcn.js +7 -0
  77. package/dist/cn-wDEkOmcn.js.map +1 -0
  78. package/dist/components/Chat/LMChatBubble/LMChatBubble.d.ts.map +1 -1
  79. package/dist/components/Chat/LMChatContainer/LMChatContainer.d.ts.map +1 -1
  80. package/dist/components/Chat/LMChatInput/LMChatInput.d.ts.map +1 -1
  81. package/dist/components/Chat/LMChatMessage/LMChatMessage.d.ts.map +1 -1
  82. package/dist/components/Chat/LMMarkdownRenderer/LMMarkdownRenderer.d.ts.map +1 -1
  83. package/dist/components/Chat/LMTypingIndicator/LMTypingIndicator.d.ts.map +1 -1
  84. package/dist/components/DataDisplay/LMCard/LMCard.d.ts.map +1 -1
  85. package/dist/components/DataDisplay/LMEmpty/LMEmpty.d.ts.map +1 -1
  86. package/dist/components/DataDisplay/LMStatCard/LMStatCard.d.ts.map +1 -1
  87. package/dist/components/DataDisplay/LMTable/LMTable.d.ts.map +1 -1
  88. package/dist/components/Feedback/LMModal/LMModal.d.ts +1 -1
  89. package/dist/components/Feedback/LMModal/LMModal.d.ts.map +1 -1
  90. package/dist/components/Form/LMCheckbox/LMCheckbox.d.ts.map +1 -1
  91. package/dist/components/Form/LMDatePicker/LMDatePicker.d.ts.map +1 -1
  92. package/dist/components/Form/LMField/LMField.d.ts.map +1 -1
  93. package/dist/components/Form/LMInput/LMInput.d.ts +1 -1
  94. package/dist/components/Form/LMInput/LMInput.d.ts.map +1 -1
  95. package/dist/components/Form/LMNumberInput/LMNumberInput.d.ts +1 -1
  96. package/dist/components/Form/LMNumberInput/LMNumberInput.d.ts.map +1 -1
  97. package/dist/components/Form/LMRadio/LMRadio.d.ts.map +1 -1
  98. package/dist/components/Form/LMSearchInput/LMSearchInput.d.ts +1 -1
  99. package/dist/components/Form/LMSearchInput/LMSearchInput.d.ts.map +1 -1
  100. package/dist/components/Form/LMSelect/LMSelect.d.ts.map +1 -1
  101. package/dist/components/Form/LMSwitch/LMSwitch.d.ts.map +1 -1
  102. package/dist/components/Form/LMTextarea/LMTextarea.d.ts +1 -1
  103. package/dist/components/Form/LMTextarea/LMTextarea.d.ts.map +1 -1
  104. package/dist/components/General/LMButton/LMButton.d.ts.map +1 -1
  105. package/dist/components/_internal/ErrorMessage.d.ts +9 -0
  106. package/dist/components/_internal/ErrorMessage.d.ts.map +1 -0
  107. package/dist/components/button/index.cjs +1 -1
  108. package/dist/components/button/index.js +1 -1
  109. package/dist/components/card/index.cjs +1 -1
  110. package/dist/components/card/index.js +1 -1
  111. package/dist/components/checkbox/index.cjs +1 -1
  112. package/dist/components/checkbox/index.js +1 -1
  113. package/dist/components/date-picker/index.cjs +1 -1
  114. package/dist/components/date-picker/index.js +1 -1
  115. package/dist/components/empty/index.cjs +1 -1
  116. package/dist/components/empty/index.js +1 -1
  117. package/dist/components/field/index.cjs +1 -1
  118. package/dist/components/field/index.js +1 -1
  119. package/dist/components/input/index.cjs +1 -1
  120. package/dist/components/input/index.js +1 -1
  121. package/dist/components/modal/index.cjs +1 -1
  122. package/dist/components/modal/index.js +1 -1
  123. package/dist/components/number-input/index.cjs +1 -1
  124. package/dist/components/number-input/index.js +1 -1
  125. package/dist/components/radio/index.cjs +1 -1
  126. package/dist/components/radio/index.js +1 -1
  127. package/dist/components/search-input/index.cjs +1 -1
  128. package/dist/components/search-input/index.js +1 -1
  129. package/dist/components/select/index.cjs +1 -1
  130. package/dist/components/select/index.js +1 -1
  131. package/dist/components/stat-card/index.cjs +1 -1
  132. package/dist/components/stat-card/index.js +1 -1
  133. package/dist/components/switch/index.cjs +1 -1
  134. package/dist/components/switch/index.js +1 -1
  135. package/dist/components/table/index.cjs +1 -1
  136. package/dist/components/table/index.js +1 -1
  137. package/dist/components/tabs/index.cjs +1 -1
  138. package/dist/components/tabs/index.js +1 -1
  139. package/dist/components/textarea/index.cjs +1 -1
  140. package/dist/components/textarea/index.js +1 -1
  141. package/dist/index.cjs +120 -121
  142. package/dist/index.cjs.map +1 -1
  143. package/dist/index.js +119 -120
  144. package/dist/index.js.map +1 -1
  145. package/dist/style.css +6 -0
  146. package/package.json +8 -7
  147. package/dist/LMButton-B258yfky.cjs.map +0 -1
  148. package/dist/LMButton-S4xQSohi.js.map +0 -1
  149. package/dist/LMCard-D7ABNC95.js.map +0 -1
  150. package/dist/LMCard-D_K051f2.cjs.map +0 -1
  151. package/dist/LMCheckbox-C2YvEQ8f.cjs.map +0 -1
  152. package/dist/LMCheckbox-DaaJRjKt.js.map +0 -1
  153. package/dist/LMDatePicker-BlUwN4On.cjs.map +0 -1
  154. package/dist/LMDatePicker-DSv28BFH.js.map +0 -1
  155. package/dist/LMEmpty-BedQxpbi.cjs.map +0 -1
  156. package/dist/LMEmpty-DzHM1fOb.js.map +0 -1
  157. package/dist/LMField-BS-DSEya.js.map +0 -1
  158. package/dist/LMField-DhDHj64z.cjs.map +0 -1
  159. package/dist/LMInput-CVjawj1F.cjs.map +0 -1
  160. package/dist/LMInput-D9csGyhj.js.map +0 -1
  161. package/dist/LMModal-BCVVPLot.cjs.map +0 -1
  162. package/dist/LMModal-DCJPlfA4.js.map +0 -1
  163. package/dist/LMNumberInput-B1tU7T_W.cjs.map +0 -1
  164. package/dist/LMNumberInput-BI5_OEx4.js.map +0 -1
  165. package/dist/LMRadio-CHn6nFSy.cjs.map +0 -1
  166. package/dist/LMRadio-UQLNgTMF.js.map +0 -1
  167. package/dist/LMSearchInput-CIvVkEf2.js.map +0 -1
  168. package/dist/LMSearchInput-nBlAX734.cjs.map +0 -1
  169. package/dist/LMSelect-B-MWX2JI.js.map +0 -1
  170. package/dist/LMSelect-ByQcUp2S.cjs.map +0 -1
  171. package/dist/LMStatCard-D5HV9r6d.js.map +0 -1
  172. package/dist/LMStatCard-MXs9Z0qH.cjs.map +0 -1
  173. package/dist/LMSwitch-CP1_nrfU.js.map +0 -1
  174. package/dist/LMSwitch-DYoSH6wE.cjs.map +0 -1
  175. package/dist/LMTable-Cp8HZqiV.js.map +0 -1
  176. package/dist/LMTable-j1ZzAzXB.cjs.map +0 -1
  177. package/dist/LMTextarea-5dVVPeL2.js.map +0 -1
  178. package/dist/LMTextarea-yG0OBZjA.cjs.map +0 -1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Yufan He
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ const jsxRuntime = require("react/jsx-runtime");
3
+ const WarningIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-3 h-3", fill: "currentColor", viewBox: "0 0 20 20", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
4
+ "path",
5
+ {
6
+ fillRule: "evenodd",
7
+ d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z",
8
+ clipRule: "evenodd"
9
+ }
10
+ ) });
11
+ const ErrorMessage = ({ message, id, className = "" }) => /* @__PURE__ */ jsxRuntime.jsxs(
12
+ "p",
13
+ {
14
+ id,
15
+ className: `text-xs flex items-center gap-1 ${className}`,
16
+ style: { color: "var(--lm-error-500)" },
17
+ role: "alert",
18
+ "aria-live": "polite",
19
+ children: [
20
+ /* @__PURE__ */ jsxRuntime.jsx(WarningIcon, {}),
21
+ message
22
+ ]
23
+ }
24
+ );
25
+ exports.ErrorMessage = ErrorMessage;
26
+ //# sourceMappingURL=ErrorMessage-CbE7emgD.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorMessage-CbE7emgD.cjs","sources":["../src/components/_internal/ErrorMessage.tsx"],"sourcesContent":["import React from 'react'\n\nconst WarningIcon: React.FC = () => (\n <svg className=\"w-3 h-3\" fill=\"currentColor\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n)\n\nexport interface ErrorMessageProps {\n message: string\n id?: string\n className?: string\n}\n\nexport const ErrorMessage: React.FC<ErrorMessageProps> = ({ message, id, className = '' }) => (\n <p\n id={id}\n className={`text-xs flex items-center gap-1 ${className}`}\n style={{ color: 'var(--lm-error-500)' }}\n role=\"alert\"\n aria-live=\"polite\"\n >\n <WarningIcon />\n {message}\n </p>\n)\n"],"names":["jsx","jsxs"],"mappings":";;AAEA,MAAM,cAAwB,MAC5BA,2BAAAA,IAAC,OAAA,EAAI,WAAU,WAAU,MAAK,gBAAe,SAAQ,aAAY,eAAY,QAC3E,UAAAA,2BAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,UAAS;AAAA,IACT,GAAE;AAAA,IACF,UAAS;AAAA,EAAA;AACX,GACF;AASK,MAAM,eAA4C,CAAC,EAAE,SAAS,IAAI,YAAY,SACnFC,2BAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC;AAAA,IACA,WAAW,mCAAmC,SAAS;AAAA,IACvD,OAAO,EAAE,OAAO,sBAAA;AAAA,IAChB,MAAK;AAAA,IACL,aAAU;AAAA,IAEV,UAAA;AAAA,MAAAD,2BAAAA,IAAC,aAAA,EAAY;AAAA,MACZ;AAAA,IAAA;AAAA,EAAA;AACH;;"}
@@ -0,0 +1,27 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ const WarningIcon = () => /* @__PURE__ */ jsx("svg", { className: "w-3 h-3", fill: "currentColor", viewBox: "0 0 20 20", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
3
+ "path",
4
+ {
5
+ fillRule: "evenodd",
6
+ d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z",
7
+ clipRule: "evenodd"
8
+ }
9
+ ) });
10
+ const ErrorMessage = ({ message, id, className = "" }) => /* @__PURE__ */ jsxs(
11
+ "p",
12
+ {
13
+ id,
14
+ className: `text-xs flex items-center gap-1 ${className}`,
15
+ style: { color: "var(--lm-error-500)" },
16
+ role: "alert",
17
+ "aria-live": "polite",
18
+ children: [
19
+ /* @__PURE__ */ jsx(WarningIcon, {}),
20
+ message
21
+ ]
22
+ }
23
+ );
24
+ export {
25
+ ErrorMessage as E
26
+ };
27
+ //# sourceMappingURL=ErrorMessage-Dt4cJ-sy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorMessage-Dt4cJ-sy.js","sources":["../src/components/_internal/ErrorMessage.tsx"],"sourcesContent":["import React from 'react'\n\nconst WarningIcon: React.FC = () => (\n <svg className=\"w-3 h-3\" fill=\"currentColor\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path\n fillRule=\"evenodd\"\n d=\"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z\"\n clipRule=\"evenodd\"\n />\n </svg>\n)\n\nexport interface ErrorMessageProps {\n message: string\n id?: string\n className?: string\n}\n\nexport const ErrorMessage: React.FC<ErrorMessageProps> = ({ message, id, className = '' }) => (\n <p\n id={id}\n className={`text-xs flex items-center gap-1 ${className}`}\n style={{ color: 'var(--lm-error-500)' }}\n role=\"alert\"\n aria-live=\"polite\"\n >\n <WarningIcon />\n {message}\n </p>\n)\n"],"names":[],"mappings":";AAEA,MAAM,cAAwB,MAC5B,oBAAC,OAAA,EAAI,WAAU,WAAU,MAAK,gBAAe,SAAQ,aAAY,eAAY,QAC3E,UAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,UAAS;AAAA,IACT,GAAE;AAAA,IACF,UAAS;AAAA,EAAA;AACX,GACF;AASK,MAAM,eAA4C,CAAC,EAAE,SAAS,IAAI,YAAY,SACnF;AAAA,EAAC;AAAA,EAAA;AAAA,IACC;AAAA,IACA,WAAW,mCAAmC,SAAS;AAAA,IACvD,OAAO,EAAE,OAAO,sBAAA;AAAA,IAChB,MAAK;AAAA,IACL,aAAU;AAAA,IAEV,UAAA;AAAA,MAAA,oBAAC,aAAA,EAAY;AAAA,MACZ;AAAA,IAAA;AAAA,EAAA;AACH;"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
3
  const React = require("react");
4
+ const cn = require("./cn-I2jp-M-K.cjs");
4
5
  const componentSizes = require("./componentSizes-DUTZ7uEM.cjs");
5
6
  const LoadingSpinner = ({ style }) => /* @__PURE__ */ jsxRuntime.jsxs(
6
7
  "svg",
@@ -51,16 +52,19 @@ const LMButton$1 = ({
51
52
  const resolvedSize = componentSizes.clampComponentSize(size, componentSizes.COMPONENT_SIZE_ORDER);
52
53
  const roundedClasses = rounded ? "rounded-full" : "rounded-xl";
53
54
  const widthClasses = fullWidth ? "w-full" : "";
54
- const baseClassName = `
55
- ${componentSizes.SIZE_BUTTON_CONFIG[resolvedSize].padding} ${componentSizes.SIZE_TEXT_CLASSES[resolvedSize]} ${componentSizes.SIZE_GAP_CLASSES[resolvedSize]}
56
- ${roundedClasses} ${widthClasses}
57
- border font-medium
58
- focus:ring-2 focus:ring-offset-0 focus:outline-none
59
- disabled:cursor-not-allowed
60
- flex items-center justify-center
61
- cursor-pointer select-none
62
- ${className}
63
- `.trim().replace(/\s+/g, " ");
55
+ const baseClassName = cn.cn(
56
+ componentSizes.SIZE_BUTTON_CONFIG[resolvedSize].padding,
57
+ componentSizes.SIZE_TEXT_CLASSES[resolvedSize],
58
+ componentSizes.SIZE_GAP_CLASSES[resolvedSize],
59
+ roundedClasses,
60
+ widthClasses,
61
+ "border font-medium",
62
+ "focus:ring-2 focus:ring-offset-0 focus:outline-none",
63
+ "disabled:cursor-not-allowed",
64
+ "flex items-center justify-center",
65
+ "cursor-pointer select-none",
66
+ className
67
+ );
64
68
  const getButtonStyles = () => {
65
69
  const baseStyles = {
66
70
  backgroundColor: "var(--lm-bg-elevated)",
@@ -330,4 +334,4 @@ const LMButton$1 = ({
330
334
  };
331
335
  const LMButton = React.memo(LMButton$1);
332
336
  exports.LMButton = LMButton;
333
- //# sourceMappingURL=LMButton-B258yfky.cjs.map
337
+ //# sourceMappingURL=LMButton-ByInEqMk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMButton-ByInEqMk.cjs","sources":["../src/components/General/LMButton/LMButton.tsx"],"sourcesContent":["import React, { memo } from 'react'\nimport { cn } from '../../../utils/cn'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_GAP_CLASSES,\n SIZE_TEXT_CLASSES,\n SIZE_BUTTON_CONFIG,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\n\nconst LoadingSpinner: React.FC<{ style?: React.CSSProperties }> = ({ style }) => (\n <svg\n className=\"animate-spin h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n style={style}\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n)\n\nexport type LMButtonVariant =\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'danger'\n | 'success'\n | 'warning'\n\nexport interface LMButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Button variant */\n variant?: LMButtonVariant\n /** Size */\n size?: ComponentSize\n /** Loading state */\n loading?: boolean\n /** Loading text */\n loadingText?: string\n /** Left icon */\n leftIcon?: React.ReactNode\n /** Right icon */\n rightIcon?: React.ReactNode\n /** Full width */\n fullWidth?: boolean\n /** Full rounded */\n rounded?: boolean\n}\n\nconst LMButton: React.FC<LMButtonProps> = ({\n children,\n variant = 'primary',\n size = 'md',\n loading = false,\n loadingText,\n leftIcon,\n rightIcon,\n fullWidth = false,\n rounded = false,\n disabled = false,\n className = '',\n ...props\n}) => {\n const isDisabled = disabled || loading\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n\n // Apple-like refined border radius (12px default, full for pill)\n const roundedClasses = rounded ? 'rounded-full' : 'rounded-xl'\n const widthClasses = fullWidth ? 'w-full' : ''\n\n // Apple-like base styling with refined transitions\n const baseClassName = cn(\n SIZE_BUTTON_CONFIG[resolvedSize].padding,\n SIZE_TEXT_CLASSES[resolvedSize],\n SIZE_GAP_CLASSES[resolvedSize],\n roundedClasses,\n widthClasses,\n 'border font-medium',\n 'focus:ring-2 focus:ring-offset-0 focus:outline-none',\n 'disabled:cursor-not-allowed',\n 'flex items-center justify-center',\n 'cursor-pointer select-none',\n className\n )\n\n const getButtonStyles = () => {\n // Apple-like base styles with refined shadows and transitions\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n transition: 'all var(--lm-transition-normal) var(--lm-ease-out)',\n }\n\n switch (variant) {\n case 'primary':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-primary-500)',\n color: 'white',\n borderColor: 'transparent',\n boxShadow: 'var(--lm-shadow-md)',\n '--tw-ring-color': 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.4',\n }\n case 'secondary':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n '--tw-ring-color': 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n case 'outline':\n return {\n ...baseStyles,\n backgroundColor: 'transparent',\n color: 'var(--lm-primary-500)',\n borderColor: 'var(--lm-primary-400)',\n boxShadow: 'none',\n '--tw-ring-color': 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n case 'ghost':\n return {\n ...baseStyles,\n backgroundColor: 'transparent',\n color: 'var(--lm-text-primary)',\n borderColor: 'transparent',\n boxShadow: 'none',\n '--tw-ring-color': 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n case 'danger':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-error-500)',\n color: 'white',\n borderColor: 'transparent',\n boxShadow: 'var(--lm-shadow-md)',\n '--tw-ring-color': 'var(--lm-error-400)',\n '--tw-ring-opacity': '0.4',\n }\n case 'success':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-success-500)',\n color: 'white',\n borderColor: 'transparent',\n boxShadow: 'var(--lm-shadow-md)',\n '--tw-ring-color': 'var(--lm-success-400)',\n '--tw-ring-opacity': '0.4',\n }\n case 'warning':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-warning-500)',\n color: 'white',\n borderColor: 'transparent',\n boxShadow: 'var(--lm-shadow-md)',\n '--tw-ring-color': 'var(--lm-warning-400)',\n '--tw-ring-opacity': '0.4',\n }\n default:\n return baseStyles\n }\n }\n\n const getDisabledStyles = () => {\n if (isDisabled) {\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-disabled)',\n borderColor: 'var(--lm-border-light)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n }\n return {}\n }\n\n // Apple-like subtle hover with scale effect\n const getHoverStyles = () => {\n if (isDisabled) return {}\n\n const baseHover = {\n transform: 'scale(1.02)',\n }\n\n switch (variant) {\n case 'primary':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-primary-600)',\n boxShadow: 'var(--lm-shadow-lg)',\n }\n case 'secondary':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-bg-hover)',\n borderColor: 'var(--lm-border-strong)',\n }\n case 'outline':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-primary-50)',\n borderColor: 'var(--lm-primary-500)',\n }\n case 'ghost':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-bg-hover)',\n }\n case 'danger':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-error-600)',\n boxShadow: 'var(--lm-shadow-lg)',\n }\n case 'success':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-success-600)',\n boxShadow: 'var(--lm-shadow-lg)',\n }\n case 'warning':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-warning-600)',\n boxShadow: 'var(--lm-shadow-lg)',\n }\n default:\n return baseHover\n }\n }\n\n // Apple-like pressed state with scale down\n const getActiveStyles = () => {\n if (isDisabled) return {}\n\n const baseActive = {\n transform: 'scale(0.98)',\n }\n\n switch (variant) {\n case 'primary':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-primary-700)',\n }\n case 'secondary':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-bg-active)',\n }\n case 'outline':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-primary-100)',\n }\n case 'ghost':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-bg-active)',\n }\n case 'danger':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-error-700)',\n }\n case 'success':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-success-700)',\n }\n case 'warning':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-warning-700)',\n }\n default:\n return baseActive\n }\n }\n\n const getIconStyles = () => {\n if (isDisabled) {\n return { color: 'var(--lm-text-disabled)' }\n }\n switch (variant) {\n case 'primary':\n case 'danger':\n case 'success':\n case 'warning':\n return { color: 'white' }\n case 'outline':\n return { color: 'var(--lm-primary-600)' }\n default:\n return { color: 'var(--lm-text-primary)' }\n }\n }\n\n return (\n <button\n {...props}\n disabled={isDisabled}\n className={baseClassName}\n style={{\n ...getButtonStyles(),\n ...getDisabledStyles(),\n } as React.CSSProperties}\n onMouseEnter={(e) => {\n if (!isDisabled) Object.assign(e.currentTarget.style, getHoverStyles())\n props.onMouseEnter?.(e)\n }}\n onMouseLeave={(e) => {\n if (!isDisabled)\n Object.assign(e.currentTarget.style, {\n ...getButtonStyles(),\n ...getDisabledStyles(),\n })\n props.onMouseLeave?.(e)\n }}\n onMouseDown={(e) => {\n if (!isDisabled) Object.assign(e.currentTarget.style, getActiveStyles())\n props.onMouseDown?.(e)\n }}\n onMouseUp={(e) => {\n if (!isDisabled) Object.assign(e.currentTarget.style, getHoverStyles())\n props.onMouseUp?.(e)\n }}\n onFocus={(e) => {\n if (!isDisabled) {\n e.currentTarget.style.borderColor = 'var(--lm-primary-400)'\n }\n props.onFocus?.(e)\n }}\n onBlur={(e) => {\n if (!isDisabled)\n Object.assign(e.currentTarget.style, {\n ...getButtonStyles(),\n ...getDisabledStyles(),\n })\n props.onBlur?.(e)\n }}\n >\n {loading ? (\n <>\n <LoadingSpinner style={getIconStyles()} />\n {loadingText || children}\n </>\n ) : (\n <>\n {leftIcon && <span style={getIconStyles()}>{leftIcon}</span>}\n <span className=\"inline-flex items-center\">{children}</span>\n {rightIcon && <span style={getIconStyles()}>{rightIcon}</span>}\n </>\n )}\n </button>\n )\n}\n\nexport default memo(LMButton)\n"],"names":["jsxs","jsx","LMButton","clampComponentSize","COMPONENT_SIZE_ORDER","cn","SIZE_BUTTON_CONFIG","SIZE_TEXT_CLASSES","SIZE_GAP_CLASSES","Fragment","memo"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { memo } from "react";
3
- import { c as clampComponentSize, k as SIZE_BUTTON_CONFIG, b as SIZE_TEXT_CLASSES, f as SIZE_GAP_CLASSES, C as COMPONENT_SIZE_ORDER } from "./componentSizes-CdWNL526.js";
3
+ import { c as cn } from "./cn-wDEkOmcn.js";
4
+ import { c as clampComponentSize, f as SIZE_GAP_CLASSES, b as SIZE_TEXT_CLASSES, k as SIZE_BUTTON_CONFIG, C as COMPONENT_SIZE_ORDER } from "./componentSizes-CdWNL526.js";
4
5
  const LoadingSpinner = ({ style }) => /* @__PURE__ */ jsxs(
5
6
  "svg",
6
7
  {
@@ -50,16 +51,19 @@ const LMButton = ({
50
51
  const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER);
51
52
  const roundedClasses = rounded ? "rounded-full" : "rounded-xl";
52
53
  const widthClasses = fullWidth ? "w-full" : "";
53
- const baseClassName = `
54
- ${SIZE_BUTTON_CONFIG[resolvedSize].padding} ${SIZE_TEXT_CLASSES[resolvedSize]} ${SIZE_GAP_CLASSES[resolvedSize]}
55
- ${roundedClasses} ${widthClasses}
56
- border font-medium
57
- focus:ring-2 focus:ring-offset-0 focus:outline-none
58
- disabled:cursor-not-allowed
59
- flex items-center justify-center
60
- cursor-pointer select-none
61
- ${className}
62
- `.trim().replace(/\s+/g, " ");
54
+ const baseClassName = cn(
55
+ SIZE_BUTTON_CONFIG[resolvedSize].padding,
56
+ SIZE_TEXT_CLASSES[resolvedSize],
57
+ SIZE_GAP_CLASSES[resolvedSize],
58
+ roundedClasses,
59
+ widthClasses,
60
+ "border font-medium",
61
+ "focus:ring-2 focus:ring-offset-0 focus:outline-none",
62
+ "disabled:cursor-not-allowed",
63
+ "flex items-center justify-center",
64
+ "cursor-pointer select-none",
65
+ className
66
+ );
63
67
  const getButtonStyles = () => {
64
68
  const baseStyles = {
65
69
  backgroundColor: "var(--lm-bg-elevated)",
@@ -331,4 +335,4 @@ const LMButton$1 = memo(LMButton);
331
335
  export {
332
336
  LMButton$1 as L
333
337
  };
334
- //# sourceMappingURL=LMButton-S4xQSohi.js.map
338
+ //# sourceMappingURL=LMButton-DH7s4i80.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMButton-DH7s4i80.js","sources":["../src/components/General/LMButton/LMButton.tsx"],"sourcesContent":["import React, { memo } from 'react'\nimport { cn } from '../../../utils/cn'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_GAP_CLASSES,\n SIZE_TEXT_CLASSES,\n SIZE_BUTTON_CONFIG,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\n\nconst LoadingSpinner: React.FC<{ style?: React.CSSProperties }> = ({ style }) => (\n <svg\n className=\"animate-spin h-4 w-4\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n style={style}\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n)\n\nexport type LMButtonVariant =\n | 'primary'\n | 'secondary'\n | 'outline'\n | 'ghost'\n | 'danger'\n | 'success'\n | 'warning'\n\nexport interface LMButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Button variant */\n variant?: LMButtonVariant\n /** Size */\n size?: ComponentSize\n /** Loading state */\n loading?: boolean\n /** Loading text */\n loadingText?: string\n /** Left icon */\n leftIcon?: React.ReactNode\n /** Right icon */\n rightIcon?: React.ReactNode\n /** Full width */\n fullWidth?: boolean\n /** Full rounded */\n rounded?: boolean\n}\n\nconst LMButton: React.FC<LMButtonProps> = ({\n children,\n variant = 'primary',\n size = 'md',\n loading = false,\n loadingText,\n leftIcon,\n rightIcon,\n fullWidth = false,\n rounded = false,\n disabled = false,\n className = '',\n ...props\n}) => {\n const isDisabled = disabled || loading\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n\n // Apple-like refined border radius (12px default, full for pill)\n const roundedClasses = rounded ? 'rounded-full' : 'rounded-xl'\n const widthClasses = fullWidth ? 'w-full' : ''\n\n // Apple-like base styling with refined transitions\n const baseClassName = cn(\n SIZE_BUTTON_CONFIG[resolvedSize].padding,\n SIZE_TEXT_CLASSES[resolvedSize],\n SIZE_GAP_CLASSES[resolvedSize],\n roundedClasses,\n widthClasses,\n 'border font-medium',\n 'focus:ring-2 focus:ring-offset-0 focus:outline-none',\n 'disabled:cursor-not-allowed',\n 'flex items-center justify-center',\n 'cursor-pointer select-none',\n className\n )\n\n const getButtonStyles = () => {\n // Apple-like base styles with refined shadows and transitions\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n transition: 'all var(--lm-transition-normal) var(--lm-ease-out)',\n }\n\n switch (variant) {\n case 'primary':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-primary-500)',\n color: 'white',\n borderColor: 'transparent',\n boxShadow: 'var(--lm-shadow-md)',\n '--tw-ring-color': 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.4',\n }\n case 'secondary':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n '--tw-ring-color': 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n case 'outline':\n return {\n ...baseStyles,\n backgroundColor: 'transparent',\n color: 'var(--lm-primary-500)',\n borderColor: 'var(--lm-primary-400)',\n boxShadow: 'none',\n '--tw-ring-color': 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n case 'ghost':\n return {\n ...baseStyles,\n backgroundColor: 'transparent',\n color: 'var(--lm-text-primary)',\n borderColor: 'transparent',\n boxShadow: 'none',\n '--tw-ring-color': 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n }\n case 'danger':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-error-500)',\n color: 'white',\n borderColor: 'transparent',\n boxShadow: 'var(--lm-shadow-md)',\n '--tw-ring-color': 'var(--lm-error-400)',\n '--tw-ring-opacity': '0.4',\n }\n case 'success':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-success-500)',\n color: 'white',\n borderColor: 'transparent',\n boxShadow: 'var(--lm-shadow-md)',\n '--tw-ring-color': 'var(--lm-success-400)',\n '--tw-ring-opacity': '0.4',\n }\n case 'warning':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-warning-500)',\n color: 'white',\n borderColor: 'transparent',\n boxShadow: 'var(--lm-shadow-md)',\n '--tw-ring-color': 'var(--lm-warning-400)',\n '--tw-ring-opacity': '0.4',\n }\n default:\n return baseStyles\n }\n }\n\n const getDisabledStyles = () => {\n if (isDisabled) {\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-disabled)',\n borderColor: 'var(--lm-border-light)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n }\n return {}\n }\n\n // Apple-like subtle hover with scale effect\n const getHoverStyles = () => {\n if (isDisabled) return {}\n\n const baseHover = {\n transform: 'scale(1.02)',\n }\n\n switch (variant) {\n case 'primary':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-primary-600)',\n boxShadow: 'var(--lm-shadow-lg)',\n }\n case 'secondary':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-bg-hover)',\n borderColor: 'var(--lm-border-strong)',\n }\n case 'outline':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-primary-50)',\n borderColor: 'var(--lm-primary-500)',\n }\n case 'ghost':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-bg-hover)',\n }\n case 'danger':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-error-600)',\n boxShadow: 'var(--lm-shadow-lg)',\n }\n case 'success':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-success-600)',\n boxShadow: 'var(--lm-shadow-lg)',\n }\n case 'warning':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-warning-600)',\n boxShadow: 'var(--lm-shadow-lg)',\n }\n default:\n return baseHover\n }\n }\n\n // Apple-like pressed state with scale down\n const getActiveStyles = () => {\n if (isDisabled) return {}\n\n const baseActive = {\n transform: 'scale(0.98)',\n }\n\n switch (variant) {\n case 'primary':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-primary-700)',\n }\n case 'secondary':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-bg-active)',\n }\n case 'outline':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-primary-100)',\n }\n case 'ghost':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-bg-active)',\n }\n case 'danger':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-error-700)',\n }\n case 'success':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-success-700)',\n }\n case 'warning':\n return {\n ...baseActive,\n backgroundColor: 'var(--lm-warning-700)',\n }\n default:\n return baseActive\n }\n }\n\n const getIconStyles = () => {\n if (isDisabled) {\n return { color: 'var(--lm-text-disabled)' }\n }\n switch (variant) {\n case 'primary':\n case 'danger':\n case 'success':\n case 'warning':\n return { color: 'white' }\n case 'outline':\n return { color: 'var(--lm-primary-600)' }\n default:\n return { color: 'var(--lm-text-primary)' }\n }\n }\n\n return (\n <button\n {...props}\n disabled={isDisabled}\n className={baseClassName}\n style={{\n ...getButtonStyles(),\n ...getDisabledStyles(),\n } as React.CSSProperties}\n onMouseEnter={(e) => {\n if (!isDisabled) Object.assign(e.currentTarget.style, getHoverStyles())\n props.onMouseEnter?.(e)\n }}\n onMouseLeave={(e) => {\n if (!isDisabled)\n Object.assign(e.currentTarget.style, {\n ...getButtonStyles(),\n ...getDisabledStyles(),\n })\n props.onMouseLeave?.(e)\n }}\n onMouseDown={(e) => {\n if (!isDisabled) Object.assign(e.currentTarget.style, getActiveStyles())\n props.onMouseDown?.(e)\n }}\n onMouseUp={(e) => {\n if (!isDisabled) Object.assign(e.currentTarget.style, getHoverStyles())\n props.onMouseUp?.(e)\n }}\n onFocus={(e) => {\n if (!isDisabled) {\n e.currentTarget.style.borderColor = 'var(--lm-primary-400)'\n }\n props.onFocus?.(e)\n }}\n onBlur={(e) => {\n if (!isDisabled)\n Object.assign(e.currentTarget.style, {\n ...getButtonStyles(),\n ...getDisabledStyles(),\n })\n props.onBlur?.(e)\n }}\n >\n {loading ? (\n <>\n <LoadingSpinner style={getIconStyles()} />\n {loadingText || children}\n </>\n ) : (\n <>\n {leftIcon && <span style={getIconStyles()}>{leftIcon}</span>}\n <span className=\"inline-flex items-center\">{children}</span>\n {rightIcon && <span style={getIconStyles()}>{rightIcon}</span>}\n </>\n )}\n </button>\n )\n}\n\nexport default memo(LMButton)\n"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
3
  const React = require("react");
4
4
  const componentSizes = require("./componentSizes-DUTZ7uEM.cjs");
5
+ const cn = require("./cn-I2jp-M-K.cjs");
5
6
  const LMCard = ({
6
7
  title,
7
8
  extra,
@@ -29,11 +30,13 @@ const LMCard = ({
29
30
  const roundedClasses = "rounded-xl";
30
31
  const borderClasses = bordered ? "border" : "";
31
32
  const hoverableClasses = hoverable ? "cursor-pointer" : "";
32
- const baseClassName = `
33
- ${roundedClasses} ${borderClasses} ${hoverableClasses}
34
- overflow-hidden
35
- ${className}
36
- `.trim().replace(/\s+/g, " ");
33
+ const baseClassName = cn.cn(
34
+ roundedClasses,
35
+ borderClasses,
36
+ hoverableClasses,
37
+ "overflow-hidden",
38
+ className
39
+ );
37
40
  const getCardStyles = () => {
38
41
  const baseStyles = {
39
42
  backgroundColor: "var(--lm-bg-elevated)",
@@ -203,4 +206,4 @@ const LMCard = ({
203
206
  );
204
207
  };
205
208
  exports.LMCard = LMCard;
206
- //# sourceMappingURL=LMCard-D_K051f2.cjs.map
209
+ //# sourceMappingURL=LMCard-lJGrsAzY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMCard-lJGrsAzY.cjs","sources":["../src/components/DataDisplay/LMCard/LMCard.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_PADDING_CLASSES,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\nimport { cn } from '../../../utils/cn'\n\nexport interface LMCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Card title */\n title?: React.ReactNode\n /** Extra content in the top-right corner */\n extra?: React.ReactNode\n /** Card content */\n children: React.ReactNode\n /** Card size */\n size?: ComponentSize\n /** Show border */\n bordered?: boolean\n /** Hoverable effect */\n hoverable?: boolean\n /** Loading state - shows skeleton */\n loading?: boolean\n /** Cover image at top */\n cover?: React.ReactNode\n /** Actions at bottom */\n actions?: React.ReactNode[]\n /** Visual variant */\n variant?: 'default' | 'elevated' | 'outline' | 'soft'\n /** Custom class name */\n className?: string\n}\n\nconst LMCard: React.FC<LMCardProps> = ({\n title,\n extra,\n children,\n size = 'md',\n bordered = true,\n hoverable = false,\n loading = false,\n cover,\n actions,\n variant = 'default',\n className = '',\n ...rest\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const [isHovered, setIsHovered] = useState(false)\n\n const titleTextClasses: Record<ComponentSize, string> = {\n xs: 'text-sm',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n }\n\n // Apple-like refined border radius\n const roundedClasses = 'rounded-xl'\n const borderClasses = bordered ? 'border' : ''\n const hoverableClasses = hoverable ? 'cursor-pointer' : ''\n\n // Apple-like card styling\n const baseClassName = cn(\n roundedClasses, borderClasses, hoverableClasses,\n 'overflow-hidden',\n className\n )\n\n const getCardStyles = (): React.CSSProperties => {\n // Apple-like refined card styles with smooth transitions\n const baseStyles: React.CSSProperties = {\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n transition: 'all var(--lm-transition-normal) var(--lm-ease-out)',\n }\n\n switch (variant) {\n case 'elevated':\n return {\n ...baseStyles,\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'outline':\n return {\n ...baseStyles,\n backgroundColor: 'transparent',\n borderColor: 'var(--lm-border-strong)',\n boxShadow: 'none',\n }\n case 'soft':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-light)',\n boxShadow: 'none',\n }\n default:\n return baseStyles\n }\n }\n\n // Apple-like subtle hover with scale effect (not translateY)\n const getHoverStyles = (): React.CSSProperties => {\n if (!hoverable) return {}\n\n const baseHover: React.CSSProperties = {\n boxShadow: 'var(--lm-shadow-lg)',\n borderColor: 'var(--lm-border-strong)',\n transform: 'scale(1.01)',\n }\n\n switch (variant) {\n case 'elevated':\n return {\n ...baseHover,\n boxShadow: 'var(--lm-shadow-xl)',\n }\n case 'outline':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-bg-hover)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'soft':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-bg-hover)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n default:\n return baseHover\n }\n }\n\n const currentStyles = isHovered && hoverable ? { ...getCardStyles(), ...getHoverStyles() } : getCardStyles()\n\n // Loading skeleton\n const renderSkeleton = () => (\n <div className=\"animate-pulse\">\n {title && (\n <div className=\"mb-4\">\n <div\n className=\"h-4 rounded w-1/3\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n </div>\n )}\n <div className=\"space-y-3\">\n <div\n className=\"h-4 rounded w-full\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n <div\n className=\"h-4 rounded w-5/6\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n <div\n className=\"h-4 rounded w-4/6\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n </div>\n </div>\n )\n\n // Header section\n const renderHeader = () => {\n if (!title && !extra) return null\n\n return (\n <div\n className={`flex items-center justify-between ${SIZE_GAP_CLASSES[resolvedSize]} border-b`}\n style={{\n borderColor: 'var(--lm-border-light)',\n padding: `${SIZE_PADDING_CLASSES[resolvedSize].split(' ')[0].replace('px-', '')}rem ${SIZE_PADDING_CLASSES[resolvedSize].split(' ')[1]?.replace('py-', '') || '1'}rem`,\n paddingLeft: '1rem',\n paddingRight: '1rem',\n paddingTop: '0.75rem',\n paddingBottom: '0.75rem',\n }}\n >\n {title && (\n <div\n className={`${titleTextClasses[resolvedSize]} font-semibold`}\n style={{ color: 'var(--lm-text-primary)' }}\n >\n {title}\n </div>\n )}\n {extra && (\n <div\n className={SIZE_TEXT_CLASSES[resolvedSize]}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {extra}\n </div>\n )}\n </div>\n )\n }\n\n // Actions section\n const renderActions = () => {\n if (!actions || actions.length === 0) return null\n\n return (\n <div\n className=\"flex items-center border-t\"\n style={{ borderColor: 'var(--lm-border-light)' }}\n >\n {actions.map((action, index) => (\n <div\n key={index}\n className={`flex-1 flex items-center justify-center py-3 transition-colors duration-200 hover:bg-(--lm-bg-hover) ${\n index !== actions.length - 1 ? 'border-r' : ''\n }`}\n style={{\n borderColor: 'var(--lm-border-light)',\n color: 'var(--lm-text-secondary)',\n }}\n >\n {action}\n </div>\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={baseClassName}\n style={currentStyles}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...rest}\n >\n {/* Cover image */}\n {cover && (\n <div className=\"w-full overflow-hidden\">\n {cover}\n </div>\n )}\n\n {/* Header */}\n {renderHeader()}\n\n {/* Body */}\n <div className={SIZE_PADDING_CLASSES[resolvedSize]}>\n {loading ? renderSkeleton() : children}\n </div>\n\n {/* Actions */}\n {renderActions()}\n </div>\n )\n}\n\nexport default LMCard\n"],"names":["clampComponentSize","COMPONENT_SIZE_ORDER","useState","cn","jsxs","jsx","SIZE_GAP_CLASSES","SIZE_PADDING_CLASSES","SIZE_TEXT_CLASSES"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
3
  import { c as clampComponentSize, e as SIZE_PADDING_CLASSES, f as SIZE_GAP_CLASSES, b as SIZE_TEXT_CLASSES, C as COMPONENT_SIZE_ORDER } from "./componentSizes-CdWNL526.js";
4
+ import { c as cn } from "./cn-wDEkOmcn.js";
4
5
  const LMCard = ({
5
6
  title,
6
7
  extra,
@@ -28,11 +29,13 @@ const LMCard = ({
28
29
  const roundedClasses = "rounded-xl";
29
30
  const borderClasses = bordered ? "border" : "";
30
31
  const hoverableClasses = hoverable ? "cursor-pointer" : "";
31
- const baseClassName = `
32
- ${roundedClasses} ${borderClasses} ${hoverableClasses}
33
- overflow-hidden
34
- ${className}
35
- `.trim().replace(/\s+/g, " ");
32
+ const baseClassName = cn(
33
+ roundedClasses,
34
+ borderClasses,
35
+ hoverableClasses,
36
+ "overflow-hidden",
37
+ className
38
+ );
36
39
  const getCardStyles = () => {
37
40
  const baseStyles = {
38
41
  backgroundColor: "var(--lm-bg-elevated)",
@@ -204,4 +207,4 @@ const LMCard = ({
204
207
  export {
205
208
  LMCard as L
206
209
  };
207
- //# sourceMappingURL=LMCard-D7ABNC95.js.map
210
+ //# sourceMappingURL=LMCard-uuWNjVQL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMCard-uuWNjVQL.js","sources":["../src/components/DataDisplay/LMCard/LMCard.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_PADDING_CLASSES,\n SIZE_TEXT_CLASSES,\n SIZE_GAP_CLASSES,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\nimport { cn } from '../../../utils/cn'\n\nexport interface LMCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Card title */\n title?: React.ReactNode\n /** Extra content in the top-right corner */\n extra?: React.ReactNode\n /** Card content */\n children: React.ReactNode\n /** Card size */\n size?: ComponentSize\n /** Show border */\n bordered?: boolean\n /** Hoverable effect */\n hoverable?: boolean\n /** Loading state - shows skeleton */\n loading?: boolean\n /** Cover image at top */\n cover?: React.ReactNode\n /** Actions at bottom */\n actions?: React.ReactNode[]\n /** Visual variant */\n variant?: 'default' | 'elevated' | 'outline' | 'soft'\n /** Custom class name */\n className?: string\n}\n\nconst LMCard: React.FC<LMCardProps> = ({\n title,\n extra,\n children,\n size = 'md',\n bordered = true,\n hoverable = false,\n loading = false,\n cover,\n actions,\n variant = 'default',\n className = '',\n ...rest\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n const [isHovered, setIsHovered] = useState(false)\n\n const titleTextClasses: Record<ComponentSize, string> = {\n xs: 'text-sm',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl',\n '2xl': 'text-2xl',\n }\n\n // Apple-like refined border radius\n const roundedClasses = 'rounded-xl'\n const borderClasses = bordered ? 'border' : ''\n const hoverableClasses = hoverable ? 'cursor-pointer' : ''\n\n // Apple-like card styling\n const baseClassName = cn(\n roundedClasses, borderClasses, hoverableClasses,\n 'overflow-hidden',\n className\n )\n\n const getCardStyles = (): React.CSSProperties => {\n // Apple-like refined card styles with smooth transitions\n const baseStyles: React.CSSProperties = {\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n transition: 'all var(--lm-transition-normal) var(--lm-ease-out)',\n }\n\n switch (variant) {\n case 'elevated':\n return {\n ...baseStyles,\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'outline':\n return {\n ...baseStyles,\n backgroundColor: 'transparent',\n borderColor: 'var(--lm-border-strong)',\n boxShadow: 'none',\n }\n case 'soft':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-light)',\n boxShadow: 'none',\n }\n default:\n return baseStyles\n }\n }\n\n // Apple-like subtle hover with scale effect (not translateY)\n const getHoverStyles = (): React.CSSProperties => {\n if (!hoverable) return {}\n\n const baseHover: React.CSSProperties = {\n boxShadow: 'var(--lm-shadow-lg)',\n borderColor: 'var(--lm-border-strong)',\n transform: 'scale(1.01)',\n }\n\n switch (variant) {\n case 'elevated':\n return {\n ...baseHover,\n boxShadow: 'var(--lm-shadow-xl)',\n }\n case 'outline':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-bg-hover)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'soft':\n return {\n ...baseHover,\n backgroundColor: 'var(--lm-bg-hover)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n default:\n return baseHover\n }\n }\n\n const currentStyles = isHovered && hoverable ? { ...getCardStyles(), ...getHoverStyles() } : getCardStyles()\n\n // Loading skeleton\n const renderSkeleton = () => (\n <div className=\"animate-pulse\">\n {title && (\n <div className=\"mb-4\">\n <div\n className=\"h-4 rounded w-1/3\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n </div>\n )}\n <div className=\"space-y-3\">\n <div\n className=\"h-4 rounded w-full\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n <div\n className=\"h-4 rounded w-5/6\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n <div\n className=\"h-4 rounded w-4/6\"\n style={{ backgroundColor: 'var(--lm-bg-active)' }}\n />\n </div>\n </div>\n )\n\n // Header section\n const renderHeader = () => {\n if (!title && !extra) return null\n\n return (\n <div\n className={`flex items-center justify-between ${SIZE_GAP_CLASSES[resolvedSize]} border-b`}\n style={{\n borderColor: 'var(--lm-border-light)',\n padding: `${SIZE_PADDING_CLASSES[resolvedSize].split(' ')[0].replace('px-', '')}rem ${SIZE_PADDING_CLASSES[resolvedSize].split(' ')[1]?.replace('py-', '') || '1'}rem`,\n paddingLeft: '1rem',\n paddingRight: '1rem',\n paddingTop: '0.75rem',\n paddingBottom: '0.75rem',\n }}\n >\n {title && (\n <div\n className={`${titleTextClasses[resolvedSize]} font-semibold`}\n style={{ color: 'var(--lm-text-primary)' }}\n >\n {title}\n </div>\n )}\n {extra && (\n <div\n className={SIZE_TEXT_CLASSES[resolvedSize]}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {extra}\n </div>\n )}\n </div>\n )\n }\n\n // Actions section\n const renderActions = () => {\n if (!actions || actions.length === 0) return null\n\n return (\n <div\n className=\"flex items-center border-t\"\n style={{ borderColor: 'var(--lm-border-light)' }}\n >\n {actions.map((action, index) => (\n <div\n key={index}\n className={`flex-1 flex items-center justify-center py-3 transition-colors duration-200 hover:bg-(--lm-bg-hover) ${\n index !== actions.length - 1 ? 'border-r' : ''\n }`}\n style={{\n borderColor: 'var(--lm-border-light)',\n color: 'var(--lm-text-secondary)',\n }}\n >\n {action}\n </div>\n ))}\n </div>\n )\n }\n\n return (\n <div\n className={baseClassName}\n style={currentStyles}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n {...rest}\n >\n {/* Cover image */}\n {cover && (\n <div className=\"w-full overflow-hidden\">\n {cover}\n </div>\n )}\n\n {/* Header */}\n {renderHeader()}\n\n {/* Body */}\n <div className={SIZE_PADDING_CLASSES[resolvedSize]}>\n {loading ? renderSkeleton() : children}\n </div>\n\n {/* Actions */}\n {renderActions()}\n </div>\n )\n}\n\nexport default LMCard\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
+ const cn = require("./cn-I2jp-M-K.cjs");
3
4
  const componentSizes = require("./componentSizes-DUTZ7uEM.cjs");
5
+ const ErrorMessage = require("./ErrorMessage-CbE7emgD.cjs");
4
6
  const sizeConfig = {
5
7
  xs: {
6
8
  container: "p-2 gap-2",
@@ -94,12 +96,13 @@ const LMCheckbox = ({
94
96
  };
95
97
  };
96
98
  const getDescriptionStyles = () => error ? { color: "var(--lm-error-600)" } : { color: "var(--lm-text-secondary)" };
97
- const checkboxClassName = `
98
- ${checkboxSizeClass} border-2 rounded-md
99
- focus:ring-2 focus:ring-offset-0
100
- transition-all duration-200
101
- ${className}
102
- `.trim().replace(/\s+/g, " ");
99
+ const checkboxClassName = cn.cn(
100
+ checkboxSizeClass,
101
+ "border-2 rounded-md",
102
+ "focus:ring-2 focus:ring-offset-0",
103
+ "transition-all duration-200",
104
+ className
105
+ );
103
106
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
104
107
  /* @__PURE__ */ jsxRuntime.jsxs(
105
108
  "label",
@@ -164,34 +167,8 @@ const LMCheckbox = ({
164
167
  ]
165
168
  }
166
169
  ),
167
- errorMessage && /* @__PURE__ */ jsxRuntime.jsxs(
168
- "p",
169
- {
170
- className: `flex items-center gap-1 ${currentSize.errorMessage}`,
171
- style: { color: "var(--lm-error-500)" },
172
- children: [
173
- /* @__PURE__ */ jsxRuntime.jsx(
174
- "svg",
175
- {
176
- className: "w-3 h-3",
177
- fill: "currentColor",
178
- viewBox: "0 0 20 20",
179
- "aria-hidden": "true",
180
- children: /* @__PURE__ */ jsxRuntime.jsx(
181
- "path",
182
- {
183
- fillRule: "evenodd",
184
- d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z",
185
- clipRule: "evenodd"
186
- }
187
- )
188
- }
189
- ),
190
- errorMessage
191
- ]
192
- }
193
- )
170
+ errorMessage && /* @__PURE__ */ jsxRuntime.jsx(ErrorMessage.ErrorMessage, { message: errorMessage })
194
171
  ] });
195
172
  };
196
173
  exports.LMCheckbox = LMCheckbox;
197
- //# sourceMappingURL=LMCheckbox-C2YvEQ8f.cjs.map
174
+ //# sourceMappingURL=LMCheckbox-C5gRhXJk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMCheckbox-C5gRhXJk.cjs","sources":["../src/components/Form/LMCheckbox/LMCheckbox.tsx"],"sourcesContent":["import React from 'react'\nimport { cn } from '../../../utils/cn'\nimport { SIZE_ICON_CONFIG } from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\nimport { ErrorMessage } from '../../_internal/ErrorMessage'\n\nexport interface LMCheckboxProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** Label text */\n label: string\n /** Description text */\n description?: string\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Size */\n size?: ComponentSize\n}\n\nconst sizeConfig = {\n xs: {\n container: 'p-2 gap-2',\n label: 'text-xs',\n description: 'text-xs mt-0.5',\n errorMessage: 'text-xs',\n },\n sm: {\n container: 'p-3 gap-2.5',\n label: 'text-sm',\n description: 'text-xs mt-1',\n errorMessage: 'text-xs',\n },\n md: {\n container: 'p-4 gap-3',\n label: 'text-base',\n description: 'text-sm mt-1',\n errorMessage: 'text-xs',\n },\n lg: {\n container: 'p-5 gap-4',\n label: 'text-lg',\n description: 'text-base mt-1.5',\n errorMessage: 'text-sm',\n },\n xl: {\n container: 'p-6 gap-4',\n label: 'text-xl',\n description: 'text-lg mt-2',\n errorMessage: 'text-sm',\n },\n '2xl': {\n container: 'p-8 gap-5',\n label: 'text-2xl',\n description: 'text-xl mt-2.5',\n errorMessage: 'text-base',\n },\n}\n\nconst LMCheckbox: React.FC<LMCheckboxProps> = ({\n label,\n description,\n error = false,\n errorMessage,\n size = 'md',\n className = '',\n ...props\n}) => {\n const currentSize = sizeConfig[size]\n const checkboxSizeClass = SIZE_ICON_CONFIG[size]\n\n const getCheckboxStyles = () => {\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)',\n color: 'var(--lm-primary-500)',\n }\n\n return {\n ...baseStyles,\n '--tw-ring-color': error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n } as React.CSSProperties\n }\n\n const getDisabledStyles = () => {\n if (props.disabled) {\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-light)',\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n opacity: 0.6,\n } as React.CSSProperties\n }\n return {}\n }\n\n const getContainerStyles = () =>\n ({\n backgroundColor: error\n ? 'var(--lm-error-50)'\n : 'var(--lm-bg-paper)',\n }) as React.CSSProperties\n\n const getHoverContainerStyles = () =>\n ({\n backgroundColor: error\n ? 'var(--lm-error-100)'\n : 'var(--lm-bg-elevated)',\n }) as React.CSSProperties\n\n const getLabelStyles = () => {\n if (error)\n return { color: 'var(--lm-error-700)' } as React.CSSProperties\n if (props.disabled)\n return {\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n } as React.CSSProperties\n return {\n color: 'var(--lm-text-primary)',\n cursor: 'pointer',\n } as React.CSSProperties\n }\n\n const getDescriptionStyles = () =>\n (error\n ? { color: 'var(--lm-error-600)' }\n : { color: 'var(--lm-text-secondary)' }) as React.CSSProperties\n\n const checkboxClassName = cn(\n checkboxSizeClass,\n 'border-2 rounded-md',\n 'focus:ring-2 focus:ring-offset-0',\n 'transition-all duration-200',\n className\n )\n\n return (\n <div>\n <label\n className={`flex items-center rounded-2xl transition-colors duration-200 ${currentSize.container} ${\n props.disabled ? '' : 'cursor-pointer'\n }`}\n style={getContainerStyles()}\n onMouseEnter={(e) => {\n if (!props.disabled) {\n Object.assign(e.currentTarget.style, getHoverContainerStyles())\n }\n }}\n onMouseLeave={(e) => {\n if (!props.disabled) {\n Object.assign(e.currentTarget.style, getContainerStyles())\n }\n }}\n >\n <input\n type=\"checkbox\"\n {...props}\n className={checkboxClassName}\n style={{\n ...getCheckboxStyles(),\n ...getDisabledStyles(),\n }}\n onFocus={(e) => {\n if (!props.disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)'\n }\n props.onFocus?.(e)\n }}\n onBlur={(e) => {\n if (!props.disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)'\n }\n props.onBlur?.(e)\n }}\n />\n\n <div className=\"flex-1\">\n <span\n className={`font-medium leading-tight transition-colors duration-200 ${currentSize.label}`}\n style={getLabelStyles()}\n >\n {label}\n </span>\n {description && (\n <p\n className={currentSize.description}\n style={getDescriptionStyles()}\n >\n {description}\n </p>\n )}\n </div>\n </label>\n\n {errorMessage && <ErrorMessage message={errorMessage} />}\n </div>\n )\n}\n\nexport default LMCheckbox\n"],"names":["SIZE_ICON_CONFIG","cn","jsxs","jsx","ErrorMessage"],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { c as cn } from "./cn-wDEkOmcn.js";
2
3
  import { S as SIZE_ICON_CONFIG } from "./componentSizes-CdWNL526.js";
4
+ import { E as ErrorMessage } from "./ErrorMessage-Dt4cJ-sy.js";
3
5
  const sizeConfig = {
4
6
  xs: {
5
7
  container: "p-2 gap-2",
@@ -93,12 +95,13 @@ const LMCheckbox = ({
93
95
  };
94
96
  };
95
97
  const getDescriptionStyles = () => error ? { color: "var(--lm-error-600)" } : { color: "var(--lm-text-secondary)" };
96
- const checkboxClassName = `
97
- ${checkboxSizeClass} border-2 rounded-md
98
- focus:ring-2 focus:ring-offset-0
99
- transition-all duration-200
100
- ${className}
101
- `.trim().replace(/\s+/g, " ");
98
+ const checkboxClassName = cn(
99
+ checkboxSizeClass,
100
+ "border-2 rounded-md",
101
+ "focus:ring-2 focus:ring-offset-0",
102
+ "transition-all duration-200",
103
+ className
104
+ );
102
105
  return /* @__PURE__ */ jsxs("div", { children: [
103
106
  /* @__PURE__ */ jsxs(
104
107
  "label",
@@ -163,36 +166,10 @@ const LMCheckbox = ({
163
166
  ]
164
167
  }
165
168
  ),
166
- errorMessage && /* @__PURE__ */ jsxs(
167
- "p",
168
- {
169
- className: `flex items-center gap-1 ${currentSize.errorMessage}`,
170
- style: { color: "var(--lm-error-500)" },
171
- children: [
172
- /* @__PURE__ */ jsx(
173
- "svg",
174
- {
175
- className: "w-3 h-3",
176
- fill: "currentColor",
177
- viewBox: "0 0 20 20",
178
- "aria-hidden": "true",
179
- children: /* @__PURE__ */ jsx(
180
- "path",
181
- {
182
- fillRule: "evenodd",
183
- d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z",
184
- clipRule: "evenodd"
185
- }
186
- )
187
- }
188
- ),
189
- errorMessage
190
- ]
191
- }
192
- )
169
+ errorMessage && /* @__PURE__ */ jsx(ErrorMessage, { message: errorMessage })
193
170
  ] });
194
171
  };
195
172
  export {
196
173
  LMCheckbox as L
197
174
  };
198
- //# sourceMappingURL=LMCheckbox-DaaJRjKt.js.map
175
+ //# sourceMappingURL=LMCheckbox-DPg4CldM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMCheckbox-DPg4CldM.js","sources":["../src/components/Form/LMCheckbox/LMCheckbox.tsx"],"sourcesContent":["import React from 'react'\nimport { cn } from '../../../utils/cn'\nimport { SIZE_ICON_CONFIG } from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\nimport { ErrorMessage } from '../../_internal/ErrorMessage'\n\nexport interface LMCheckboxProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'> {\n /** Label text */\n label: string\n /** Description text */\n description?: string\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Size */\n size?: ComponentSize\n}\n\nconst sizeConfig = {\n xs: {\n container: 'p-2 gap-2',\n label: 'text-xs',\n description: 'text-xs mt-0.5',\n errorMessage: 'text-xs',\n },\n sm: {\n container: 'p-3 gap-2.5',\n label: 'text-sm',\n description: 'text-xs mt-1',\n errorMessage: 'text-xs',\n },\n md: {\n container: 'p-4 gap-3',\n label: 'text-base',\n description: 'text-sm mt-1',\n errorMessage: 'text-xs',\n },\n lg: {\n container: 'p-5 gap-4',\n label: 'text-lg',\n description: 'text-base mt-1.5',\n errorMessage: 'text-sm',\n },\n xl: {\n container: 'p-6 gap-4',\n label: 'text-xl',\n description: 'text-lg mt-2',\n errorMessage: 'text-sm',\n },\n '2xl': {\n container: 'p-8 gap-5',\n label: 'text-2xl',\n description: 'text-xl mt-2.5',\n errorMessage: 'text-base',\n },\n}\n\nconst LMCheckbox: React.FC<LMCheckboxProps> = ({\n label,\n description,\n error = false,\n errorMessage,\n size = 'md',\n className = '',\n ...props\n}) => {\n const currentSize = sizeConfig[size]\n const checkboxSizeClass = SIZE_ICON_CONFIG[size]\n\n const getCheckboxStyles = () => {\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)',\n color: 'var(--lm-primary-500)',\n }\n\n return {\n ...baseStyles,\n '--tw-ring-color': error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.3',\n } as React.CSSProperties\n }\n\n const getDisabledStyles = () => {\n if (props.disabled) {\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-light)',\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n opacity: 0.6,\n } as React.CSSProperties\n }\n return {}\n }\n\n const getContainerStyles = () =>\n ({\n backgroundColor: error\n ? 'var(--lm-error-50)'\n : 'var(--lm-bg-paper)',\n }) as React.CSSProperties\n\n const getHoverContainerStyles = () =>\n ({\n backgroundColor: error\n ? 'var(--lm-error-100)'\n : 'var(--lm-bg-elevated)',\n }) as React.CSSProperties\n\n const getLabelStyles = () => {\n if (error)\n return { color: 'var(--lm-error-700)' } as React.CSSProperties\n if (props.disabled)\n return {\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n } as React.CSSProperties\n return {\n color: 'var(--lm-text-primary)',\n cursor: 'pointer',\n } as React.CSSProperties\n }\n\n const getDescriptionStyles = () =>\n (error\n ? { color: 'var(--lm-error-600)' }\n : { color: 'var(--lm-text-secondary)' }) as React.CSSProperties\n\n const checkboxClassName = cn(\n checkboxSizeClass,\n 'border-2 rounded-md',\n 'focus:ring-2 focus:ring-offset-0',\n 'transition-all duration-200',\n className\n )\n\n return (\n <div>\n <label\n className={`flex items-center rounded-2xl transition-colors duration-200 ${currentSize.container} ${\n props.disabled ? '' : 'cursor-pointer'\n }`}\n style={getContainerStyles()}\n onMouseEnter={(e) => {\n if (!props.disabled) {\n Object.assign(e.currentTarget.style, getHoverContainerStyles())\n }\n }}\n onMouseLeave={(e) => {\n if (!props.disabled) {\n Object.assign(e.currentTarget.style, getContainerStyles())\n }\n }}\n >\n <input\n type=\"checkbox\"\n {...props}\n className={checkboxClassName}\n style={{\n ...getCheckboxStyles(),\n ...getDisabledStyles(),\n }}\n onFocus={(e) => {\n if (!props.disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)'\n }\n props.onFocus?.(e)\n }}\n onBlur={(e) => {\n if (!props.disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)'\n }\n props.onBlur?.(e)\n }}\n />\n\n <div className=\"flex-1\">\n <span\n className={`font-medium leading-tight transition-colors duration-200 ${currentSize.label}`}\n style={getLabelStyles()}\n >\n {label}\n </span>\n {description && (\n <p\n className={currentSize.description}\n style={getDescriptionStyles()}\n >\n {description}\n </p>\n )}\n </div>\n </label>\n\n {errorMessage && <ErrorMessage message={errorMessage} />}\n </div>\n )\n}\n\nexport default LMCheckbox\n"],"names":[],"mappings":"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"}
@@ -361,6 +361,7 @@ const LMDatePicker = ({
361
361
  className: "p-1 rounded hover:bg-(--lm-bg-hover) transition-colors",
362
362
  onClick: handlePrevYear,
363
363
  style: { color: "var(--lm-text-secondary)" },
364
+ "aria-label": "上一年",
364
365
  children: /* @__PURE__ */ jsx(DoubleChevronLeftIcon, {})
365
366
  }
366
367
  ),
@@ -370,6 +371,7 @@ const LMDatePicker = ({
370
371
  className: "p-1 rounded hover:bg-(--lm-bg-hover) transition-colors",
371
372
  onClick: handlePrevMonth,
372
373
  style: { color: "var(--lm-text-secondary)" },
374
+ "aria-label": "上一月",
373
375
  children: /* @__PURE__ */ jsx(ChevronLeftIcon, {})
374
376
  }
375
377
  ),
@@ -391,6 +393,7 @@ const LMDatePicker = ({
391
393
  className: "p-1 rounded hover:bg-(--lm-bg-hover) transition-colors",
392
394
  onClick: handleNextMonth,
393
395
  style: { color: "var(--lm-text-secondary)" },
396
+ "aria-label": "下一月",
394
397
  children: /* @__PURE__ */ jsx(ChevronRightIcon, {})
395
398
  }
396
399
  ),
@@ -400,6 +403,7 @@ const LMDatePicker = ({
400
403
  className: "p-1 rounded hover:bg-(--lm-bg-hover) transition-colors",
401
404
  onClick: handleNextYear,
402
405
  style: { color: "var(--lm-text-secondary)" },
406
+ "aria-label": "下一年",
403
407
  children: /* @__PURE__ */ jsx(DoubleChevronRightIcon, {})
404
408
  }
405
409
  )
@@ -563,4 +567,4 @@ const LMDatePicker = ({
563
567
  export {
564
568
  LMDatePicker as L
565
569
  };
566
- //# sourceMappingURL=LMDatePicker-DSv28BFH.js.map
570
+ //# sourceMappingURL=LMDatePicker-C7R0ByJ-.js.map