@ryanhe919/lumen-ui 0.3.0 → 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 (177) hide show
  1. package/dist/ErrorMessage-CbE7emgD.cjs +26 -0
  2. package/dist/ErrorMessage-CbE7emgD.cjs.map +1 -0
  3. package/dist/ErrorMessage-Dt4cJ-sy.js +27 -0
  4. package/dist/ErrorMessage-Dt4cJ-sy.js.map +1 -0
  5. package/dist/{LMButton-B258yfky.cjs → LMButton-ByInEqMk.cjs} +15 -11
  6. package/dist/LMButton-ByInEqMk.cjs.map +1 -0
  7. package/dist/{LMButton-S4xQSohi.js → LMButton-DH7s4i80.js} +16 -12
  8. package/dist/LMButton-DH7s4i80.js.map +1 -0
  9. package/dist/{LMCard-D_K051f2.cjs → LMCard-lJGrsAzY.cjs} +9 -6
  10. package/dist/LMCard-lJGrsAzY.cjs.map +1 -0
  11. package/dist/{LMCard-D7ABNC95.js → LMCard-uuWNjVQL.js} +9 -6
  12. package/dist/LMCard-uuWNjVQL.js.map +1 -0
  13. package/dist/{LMCheckbox-C2YvEQ8f.cjs → LMCheckbox-C5gRhXJk.cjs} +11 -34
  14. package/dist/LMCheckbox-C5gRhXJk.cjs.map +1 -0
  15. package/dist/{LMCheckbox-DaaJRjKt.js → LMCheckbox-DPg4CldM.js} +11 -34
  16. package/dist/LMCheckbox-DPg4CldM.js.map +1 -0
  17. package/dist/{LMDatePicker-DSv28BFH.js → LMDatePicker-C7R0ByJ-.js} +5 -1
  18. package/dist/LMDatePicker-C7R0ByJ-.js.map +1 -0
  19. package/dist/{LMDatePicker-BlUwN4On.cjs → LMDatePicker-lH-8-HzG.cjs} +5 -1
  20. package/dist/LMDatePicker-lH-8-HzG.cjs.map +1 -0
  21. package/dist/{LMEmpty-BedQxpbi.cjs → LMEmpty-BCf4K8iH.cjs} +7 -6
  22. package/dist/LMEmpty-BCf4K8iH.cjs.map +1 -0
  23. package/dist/{LMEmpty-DzHM1fOb.js → LMEmpty-C499qRrR.js} +7 -6
  24. package/dist/LMEmpty-C499qRrR.js.map +1 -0
  25. package/dist/{LMField-DhDHj64z.cjs → LMField-BRaviP2p.cjs} +3 -2
  26. package/dist/LMField-BRaviP2p.cjs.map +1 -0
  27. package/dist/{LMField-BS-DSEya.js → LMField-DkRk9Q8-.js} +3 -2
  28. package/dist/LMField-DkRk9Q8-.js.map +1 -0
  29. package/dist/{LMInput-D9csGyhj.js → LMInput-Be2KkPOW.js} +21 -43
  30. package/dist/LMInput-Be2KkPOW.js.map +1 -0
  31. package/dist/{LMInput-CVjawj1F.cjs → LMInput-O55xkiRS.cjs} +20 -42
  32. package/dist/LMInput-O55xkiRS.cjs.map +1 -0
  33. package/dist/{LMModal-BCVVPLot.cjs → LMModal-BgxF1xOT.cjs} +2 -2
  34. package/dist/LMModal-BgxF1xOT.cjs.map +1 -0
  35. package/dist/{LMModal-DCJPlfA4.js → LMModal-CZF26Ask.js} +2 -2
  36. package/dist/LMModal-CZF26Ask.js.map +1 -0
  37. package/dist/{LMNumberInput-B1tU7T_W.cjs → LMNumberInput-DQaLVoud.cjs} +30 -39
  38. package/dist/LMNumberInput-DQaLVoud.cjs.map +1 -0
  39. package/dist/{LMNumberInput-BI5_OEx4.js → LMNumberInput-gnRvWRly.js} +31 -40
  40. package/dist/LMNumberInput-gnRvWRly.js.map +1 -0
  41. package/dist/{LMRadio-CHn6nFSy.cjs → LMRadio-BVBwm1rk.cjs} +11 -37
  42. package/dist/LMRadio-BVBwm1rk.cjs.map +1 -0
  43. package/dist/{LMRadio-UQLNgTMF.js → LMRadio-C0ZL0hVK.js} +11 -37
  44. package/dist/LMRadio-C0ZL0hVK.js.map +1 -0
  45. package/dist/{LMSearchInput-nBlAX734.cjs → LMSearchInput-BDJVh4Vs.cjs} +25 -31
  46. package/dist/LMSearchInput-BDJVh4Vs.cjs.map +1 -0
  47. package/dist/{LMSearchInput-CIvVkEf2.js → LMSearchInput-DQovqMTN.js} +26 -32
  48. package/dist/LMSearchInput-DQovqMTN.js.map +1 -0
  49. package/dist/{LMSelect-B-MWX2JI.js → LMSelect-BPfW-AHI.js} +37 -48
  50. package/dist/LMSelect-BPfW-AHI.js.map +1 -0
  51. package/dist/{LMSelect-ByQcUp2S.cjs → LMSelect-xIVolEhx.cjs} +37 -48
  52. package/dist/LMSelect-xIVolEhx.cjs.map +1 -0
  53. package/dist/{LMStatCard-D5HV9r6d.js → LMStatCard-CdyIDhrA.js} +11 -6
  54. package/dist/LMStatCard-CdyIDhrA.js.map +1 -0
  55. package/dist/{LMStatCard-MXs9Z0qH.cjs → LMStatCard-Do5f2Map.cjs} +11 -6
  56. package/dist/LMStatCard-Do5f2Map.cjs.map +1 -0
  57. package/dist/{LMSwitch-CP1_nrfU.js → LMSwitch-BqhucDO0.js} +3 -31
  58. package/dist/LMSwitch-BqhucDO0.js.map +1 -0
  59. package/dist/{LMSwitch-DYoSH6wE.cjs → LMSwitch-BxVqTSUH.cjs} +3 -31
  60. package/dist/LMSwitch-BxVqTSUH.cjs.map +1 -0
  61. package/dist/{LMTable-j1ZzAzXB.cjs → LMTable-Be9FK8bz.cjs} +7 -4
  62. package/dist/LMTable-Be9FK8bz.cjs.map +1 -0
  63. package/dist/{LMTable-Cp8HZqiV.js → LMTable-IGmHFhnV.js} +7 -4
  64. package/dist/LMTable-IGmHFhnV.js.map +1 -0
  65. package/dist/{LMTabs-D5n9lB8X.js → LMTabs-Cjp3oiNv.js} +2 -2
  66. package/dist/{LMTabs-D5n9lB8X.js.map → LMTabs-Cjp3oiNv.js.map} +1 -1
  67. package/dist/{LMTabs-NPmOzPat.cjs → LMTabs-DEYx2gOH.cjs} +2 -2
  68. package/dist/{LMTabs-NPmOzPat.cjs.map → LMTabs-DEYx2gOH.cjs.map} +1 -1
  69. package/dist/{LMTextarea-5dVVPeL2.js → LMTextarea-BNacTCNn.js} +20 -28
  70. package/dist/LMTextarea-BNacTCNn.js.map +1 -0
  71. package/dist/{LMTextarea-yG0OBZjA.cjs → LMTextarea-DRi6gaFW.cjs} +20 -28
  72. package/dist/LMTextarea-DRi6gaFW.cjs.map +1 -0
  73. package/dist/cn-I2jp-M-K.cjs +6 -0
  74. package/dist/cn-I2jp-M-K.cjs.map +1 -0
  75. package/dist/cn-wDEkOmcn.js +7 -0
  76. package/dist/cn-wDEkOmcn.js.map +1 -0
  77. package/dist/components/Chat/LMChatBubble/LMChatBubble.d.ts.map +1 -1
  78. package/dist/components/Chat/LMChatContainer/LMChatContainer.d.ts.map +1 -1
  79. package/dist/components/Chat/LMChatInput/LMChatInput.d.ts.map +1 -1
  80. package/dist/components/Chat/LMChatMessage/LMChatMessage.d.ts.map +1 -1
  81. package/dist/components/Chat/LMMarkdownRenderer/LMMarkdownRenderer.d.ts.map +1 -1
  82. package/dist/components/Chat/LMTypingIndicator/LMTypingIndicator.d.ts.map +1 -1
  83. package/dist/components/DataDisplay/LMCard/LMCard.d.ts.map +1 -1
  84. package/dist/components/DataDisplay/LMEmpty/LMEmpty.d.ts.map +1 -1
  85. package/dist/components/DataDisplay/LMStatCard/LMStatCard.d.ts.map +1 -1
  86. package/dist/components/DataDisplay/LMTable/LMTable.d.ts.map +1 -1
  87. package/dist/components/Feedback/LMModal/LMModal.d.ts +1 -1
  88. package/dist/components/Feedback/LMModal/LMModal.d.ts.map +1 -1
  89. package/dist/components/Form/LMCheckbox/LMCheckbox.d.ts.map +1 -1
  90. package/dist/components/Form/LMDatePicker/LMDatePicker.d.ts.map +1 -1
  91. package/dist/components/Form/LMField/LMField.d.ts.map +1 -1
  92. package/dist/components/Form/LMInput/LMInput.d.ts +1 -1
  93. package/dist/components/Form/LMInput/LMInput.d.ts.map +1 -1
  94. package/dist/components/Form/LMNumberInput/LMNumberInput.d.ts +1 -1
  95. package/dist/components/Form/LMNumberInput/LMNumberInput.d.ts.map +1 -1
  96. package/dist/components/Form/LMRadio/LMRadio.d.ts.map +1 -1
  97. package/dist/components/Form/LMSearchInput/LMSearchInput.d.ts +1 -1
  98. package/dist/components/Form/LMSearchInput/LMSearchInput.d.ts.map +1 -1
  99. package/dist/components/Form/LMSelect/LMSelect.d.ts.map +1 -1
  100. package/dist/components/Form/LMSwitch/LMSwitch.d.ts.map +1 -1
  101. package/dist/components/Form/LMTextarea/LMTextarea.d.ts +1 -1
  102. package/dist/components/Form/LMTextarea/LMTextarea.d.ts.map +1 -1
  103. package/dist/components/General/LMButton/LMButton.d.ts.map +1 -1
  104. package/dist/components/_internal/ErrorMessage.d.ts +9 -0
  105. package/dist/components/_internal/ErrorMessage.d.ts.map +1 -0
  106. package/dist/components/button/index.cjs +1 -1
  107. package/dist/components/button/index.js +1 -1
  108. package/dist/components/card/index.cjs +1 -1
  109. package/dist/components/card/index.js +1 -1
  110. package/dist/components/checkbox/index.cjs +1 -1
  111. package/dist/components/checkbox/index.js +1 -1
  112. package/dist/components/date-picker/index.cjs +1 -1
  113. package/dist/components/date-picker/index.js +1 -1
  114. package/dist/components/empty/index.cjs +1 -1
  115. package/dist/components/empty/index.js +1 -1
  116. package/dist/components/field/index.cjs +1 -1
  117. package/dist/components/field/index.js +1 -1
  118. package/dist/components/input/index.cjs +1 -1
  119. package/dist/components/input/index.js +1 -1
  120. package/dist/components/modal/index.cjs +1 -1
  121. package/dist/components/modal/index.js +1 -1
  122. package/dist/components/number-input/index.cjs +1 -1
  123. package/dist/components/number-input/index.js +1 -1
  124. package/dist/components/radio/index.cjs +1 -1
  125. package/dist/components/radio/index.js +1 -1
  126. package/dist/components/search-input/index.cjs +1 -1
  127. package/dist/components/search-input/index.js +1 -1
  128. package/dist/components/select/index.cjs +1 -1
  129. package/dist/components/select/index.js +1 -1
  130. package/dist/components/stat-card/index.cjs +1 -1
  131. package/dist/components/stat-card/index.js +1 -1
  132. package/dist/components/switch/index.cjs +1 -1
  133. package/dist/components/switch/index.js +1 -1
  134. package/dist/components/table/index.cjs +1 -1
  135. package/dist/components/table/index.js +1 -1
  136. package/dist/components/tabs/index.cjs +1 -1
  137. package/dist/components/tabs/index.js +1 -1
  138. package/dist/components/textarea/index.cjs +1 -1
  139. package/dist/components/textarea/index.js +1 -1
  140. package/dist/index.cjs +122 -123
  141. package/dist/index.cjs.map +1 -1
  142. package/dist/index.js +121 -122
  143. package/dist/index.js.map +1 -1
  144. package/dist/style.css +6 -0
  145. package/package.json +2 -1
  146. package/dist/LMButton-B258yfky.cjs.map +0 -1
  147. package/dist/LMButton-S4xQSohi.js.map +0 -1
  148. package/dist/LMCard-D7ABNC95.js.map +0 -1
  149. package/dist/LMCard-D_K051f2.cjs.map +0 -1
  150. package/dist/LMCheckbox-C2YvEQ8f.cjs.map +0 -1
  151. package/dist/LMCheckbox-DaaJRjKt.js.map +0 -1
  152. package/dist/LMDatePicker-BlUwN4On.cjs.map +0 -1
  153. package/dist/LMDatePicker-DSv28BFH.js.map +0 -1
  154. package/dist/LMEmpty-BedQxpbi.cjs.map +0 -1
  155. package/dist/LMEmpty-DzHM1fOb.js.map +0 -1
  156. package/dist/LMField-BS-DSEya.js.map +0 -1
  157. package/dist/LMField-DhDHj64z.cjs.map +0 -1
  158. package/dist/LMInput-CVjawj1F.cjs.map +0 -1
  159. package/dist/LMInput-D9csGyhj.js.map +0 -1
  160. package/dist/LMModal-BCVVPLot.cjs.map +0 -1
  161. package/dist/LMModal-DCJPlfA4.js.map +0 -1
  162. package/dist/LMNumberInput-B1tU7T_W.cjs.map +0 -1
  163. package/dist/LMNumberInput-BI5_OEx4.js.map +0 -1
  164. package/dist/LMRadio-CHn6nFSy.cjs.map +0 -1
  165. package/dist/LMRadio-UQLNgTMF.js.map +0 -1
  166. package/dist/LMSearchInput-CIvVkEf2.js.map +0 -1
  167. package/dist/LMSearchInput-nBlAX734.cjs.map +0 -1
  168. package/dist/LMSelect-B-MWX2JI.js.map +0 -1
  169. package/dist/LMSelect-ByQcUp2S.cjs.map +0 -1
  170. package/dist/LMStatCard-D5HV9r6d.js.map +0 -1
  171. package/dist/LMStatCard-MXs9Z0qH.cjs.map +0 -1
  172. package/dist/LMSwitch-CP1_nrfU.js.map +0 -1
  173. package/dist/LMSwitch-DYoSH6wE.cjs.map +0 -1
  174. package/dist/LMTable-Cp8HZqiV.js.map +0 -1
  175. package/dist/LMTable-j1ZzAzXB.cjs.map +0 -1
  176. package/dist/LMTextarea-5dVVPeL2.js.map +0 -1
  177. package/dist/LMTextarea-yG0OBZjA.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMSelect-xIVolEhx.cjs","sources":["../src/components/Form/LMSelect/LMSelect.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react'\nimport { cn } from '../../../utils/cn'\nimport { SIZE_SELECTOR_CONFIG } from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\nimport { ErrorMessage } from '../../_internal/ErrorMessage'\n\nexport interface LMSelectOption {\n value: string | number\n label: string\n disabled?: boolean\n}\n\nexport interface LMSelectProps {\n /** Options */\n options: LMSelectOption[]\n /** Current value */\n value?: string | number | (string | number)[]\n /** Change callback */\n onChange?: (value: string | number | (string | number)[]) => void\n /** Dropdown visibility change callback */\n onDropdownVisibleChange?: (visible: boolean) => void\n /** Error state */\n error?: boolean\n /** Error message */\n errorMessage?: string\n /** Placeholder */\n placeholder?: string\n /** Disabled state */\n disabled?: boolean\n /** Class name */\n className?: string\n /** Form field name */\n name?: string\n /** Size */\n size?: ComponentSize\n /** Multiple selection */\n multiple?: boolean\n}\n\nconst SIZE_DROPDOWN_CONFIG: Record<\n ComponentSize,\n {\n maxHeight: string\n optionPadding: string\n optionTextSize: string\n }\n> = {\n xs: { maxHeight: 'max-h-32', optionPadding: 'px-3 py-1.5', optionTextSize: 'text-xs' },\n sm: { maxHeight: 'max-h-40', optionPadding: 'px-3 py-2', optionTextSize: 'text-xs' },\n md: { maxHeight: 'max-h-48', optionPadding: 'px-4 py-2.5', optionTextSize: 'text-sm' },\n lg: { maxHeight: 'max-h-56', optionPadding: 'px-4 py-3', optionTextSize: 'text-sm' },\n xl: { maxHeight: 'max-h-64', optionPadding: 'px-5 py-3', optionTextSize: 'text-base' },\n '2xl': { maxHeight: 'max-h-72', optionPadding: 'px-6 py-4', optionTextSize: 'text-lg' },\n}\n\nconst ChevronDownIcon: React.FC = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n)\n\nconst CheckIcon: React.FC = () => (\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n)\n\nconst LMSelect: React.FC<LMSelectProps> = ({\n options,\n value,\n onChange,\n onDropdownVisibleChange,\n error = false,\n errorMessage,\n placeholder = 'Select...',\n disabled = false,\n className = '',\n name,\n size = 'md',\n multiple = false,\n}) => {\n const [isOpen, setIsOpen] = useState(false)\n const [selectedOption, setSelectedOption] = useState<LMSelectOption | null>(null)\n const [selectedOptions, setSelectedOptions] = useState<LMSelectOption[]>([])\n const dropdownRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!multiple) {\n if (value !== undefined && value !== null && !Array.isArray(value)) {\n const option = options.find((opt) => opt.value === value)\n setSelectedOption(option || null)\n } else {\n setSelectedOption(null)\n }\n }\n }, [value, options, multiple])\n\n useEffect(() => {\n if (multiple && Array.isArray(value)) {\n const selectedOpts = options.filter((opt) => value.includes(opt.value))\n setSelectedOptions(selectedOpts)\n } else if (multiple) {\n setSelectedOptions([])\n }\n }, [value, options, multiple])\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n onDropdownVisibleChange?.(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, onDropdownVisibleChange])\n\n const handleSelect = (option: LMSelectOption) => {\n if (option.disabled) return\n\n if (multiple) {\n const currentValues = Array.isArray(value) ? value : []\n const isSelected = currentValues.includes(option.value)\n const newValues = isSelected\n ? currentValues.filter((v) => v !== option.value)\n : [...currentValues, option.value]\n onChange?.(newValues)\n } else {\n setSelectedOption(option)\n onChange?.(option.value)\n setIsOpen(false)\n onDropdownVisibleChange?.(false)\n }\n }\n\n const toggleDropdown = () => {\n if (!disabled) {\n const newIsOpen = !isOpen\n setIsOpen(newIsOpen)\n onDropdownVisibleChange?.(newIsOpen)\n }\n }\n\n // Apple-like refined select styling\n const baseClassName = cn(\n 'w-full',\n SIZE_SELECTOR_CONFIG[size].padding,\n SIZE_SELECTOR_CONFIG[size].height,\n SIZE_SELECTOR_CONFIG[size].fontSize,\n 'border rounded-xl',\n 'cursor-pointer select-none',\n 'flex items-center justify-between',\n className\n )\n\n const getSelectorStyles = () => {\n // Apple-like refined select styles\n const baseStyles = {\n backgroundColor: 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: error ? 'var(--lm-error-300)' : 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-sm)',\n transition: 'all var(--lm-transition-fast) var(--lm-ease-out)',\n }\n\n return {\n ...baseStyles,\n '--tw-ring-color': error ? 'var(--lm-error-400)' : 'var(--lm-primary-400)',\n '--tw-ring-opacity': '0.4',\n }\n }\n\n const getDisabledStyles = () =>\n disabled\n ? {\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-disabled)',\n cursor: 'not-allowed',\n opacity: 0.6,\n }\n : {}\n\n const getIconStyles = () =>\n error ? { color: 'var(--lm-error-400)' } : { color: 'var(--lm-text-secondary)' }\n\n // Apple-like refined dropdown styles\n const getDropdownStyles = () => ({\n backgroundColor: 'var(--lm-bg-elevated)',\n borderColor: 'var(--lm-border-default)',\n boxShadow: 'var(--lm-shadow-lg)',\n backdropFilter: 'blur(20px) saturate(180%)',\n WebkitBackdropFilter: 'blur(20px) saturate(180%)',\n })\n\n const isOptionSelected = (optionValue: string | number): boolean => {\n if (multiple) {\n return Array.isArray(value) && value.includes(optionValue)\n }\n return selectedOption?.value === optionValue\n }\n\n const getOptionStyles = (option: LMSelectOption) => {\n const baseStyles = {\n color: option.disabled ? 'var(--lm-text-disabled)' : 'var(--lm-text-primary)',\n backgroundColor: option.disabled ? 'var(--lm-bg-paper)' : 'transparent',\n }\n\n if (isOptionSelected(option.value)) {\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-primary-50)',\n color: 'var(--lm-primary-700)',\n }\n }\n\n return baseStyles\n }\n\n const getHoverOptionStyles = (option: LMSelectOption) => {\n if (option.disabled) return {}\n\n if (isOptionSelected(option.value)) {\n return { backgroundColor: 'var(--lm-primary-100)' }\n }\n\n return { backgroundColor: 'var(--lm-bg-paper)' }\n }\n\n const getDisplayText = (): string => {\n if (multiple) {\n if (selectedOptions.length === 0) return placeholder\n if (selectedOptions.length === 1) return selectedOptions[0].label\n return `${selectedOptions.length} selected`\n }\n return selectedOption ? selectedOption.label : placeholder\n }\n\n return (\n <div className=\"relative\" ref={dropdownRef}>\n <select\n name={name}\n value={\n multiple\n ? Array.isArray(value)\n ? value.map(String)\n : []\n : value !== undefined && value !== null && !Array.isArray(value)\n ? String(value)\n : ''\n }\n // Empty handler to suppress React controlled component warning for hidden native select\n onChange={() => {}}\n className=\"sr-only\"\n disabled={disabled}\n tabIndex={-1}\n multiple={multiple}\n >\n {options.map((option) => (\n <option key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </select>\n\n <div\n className={baseClassName}\n onClick={toggleDropdown}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n tabIndex={disabled ? -1 : 0}\n style={{\n ...getSelectorStyles(),\n ...getDisabledStyles(),\n } as React.CSSProperties}\n onMouseEnter={(e) => {\n if (!disabled && !error) {\n e.currentTarget.style.borderColor = 'var(--lm-border-strong)'\n }\n }}\n onMouseLeave={(e) => {\n if (!disabled && !error) {\n e.currentTarget.style.borderColor = 'var(--lm-border-default)'\n }\n }}\n onFocus={(e) => {\n if (!disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-400)'\n : 'var(--lm-primary-400)'\n }\n }}\n onBlur={(e) => {\n if (!disabled) {\n e.currentTarget.style.borderColor = error\n ? 'var(--lm-error-300)'\n : 'var(--lm-border-default)'\n }\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n toggleDropdown()\n }\n }}\n >\n <span\n style={{\n color:\n (multiple && selectedOptions.length > 0) || selectedOption\n ? 'var(--lm-text-primary)'\n : 'var(--lm-text-secondary)',\n }}\n >\n {getDisplayText()}\n </span>\n <span\n className={`transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}\n style={getIconStyles()}\n >\n <ChevronDownIcon />\n </span>\n </div>\n\n {isOpen && (\n <div\n role=\"listbox\"\n className={`absolute left-0 right-0 z-50 border rounded-xl overflow-y-auto ${SIZE_DROPDOWN_CONFIG[size].maxHeight}`}\n style={{\n ...getDropdownStyles(),\n top: 'calc(100% + 4px)',\n }}\n >\n {options.map((option, index) => (\n <div\n key={option.value}\n className={cn(\n SIZE_DROPDOWN_CONFIG[size].optionPadding,\n SIZE_DROPDOWN_CONFIG[size].optionTextSize,\n 'font-medium cursor-pointer transition-all duration-150',\n option.disabled && 'cursor-not-allowed',\n index === 0 && 'rounded-t-xl',\n index === options.length - 1 && 'rounded-b-xl',\n index > 0 && 'border-t'\n )}\n style={{\n ...getOptionStyles(option),\n borderTopColor: index > 0 ? 'var(--lm-border-light)' : 'transparent',\n }}\n onMouseEnter={(e) => {\n if (!option.disabled) {\n Object.assign(e.currentTarget.style, getHoverOptionStyles(option))\n }\n }}\n onMouseLeave={(e) => {\n if (!option.disabled) {\n Object.assign(e.currentTarget.style, getOptionStyles(option))\n }\n }}\n onClick={() => handleSelect(option)}\n role=\"option\"\n aria-selected={isOptionSelected(option.value)}\n >\n <div className=\"flex items-center justify-between\">\n {multiple && (\n <input\n type=\"checkbox\"\n checked={isOptionSelected(option.value)}\n // Empty handler: selection is handled by parent div onClick\n onChange={() => {}}\n className=\"mr-2 cursor-pointer\"\n style={{ accentColor: 'var(--lm-primary-500)' }}\n onClick={(e) => e.stopPropagation()}\n />\n )}\n <span className=\"truncate flex-1\">{option.label}</span>\n {!multiple && isOptionSelected(option.value) && (\n <span className=\"ml-2 shrink-0\" style={{ color: 'var(--lm-primary-600)' }}>\n <CheckIcon />\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {errorMessage && <ErrorMessage message={errorMessage} className=\"mt-2\" />}\n </div>\n )\n}\n\nexport default LMSelect\n"],"names":["jsx","useState","useRef","useEffect","cn","SIZE_SELECTOR_CONFIG","jsxs","ErrorMessage"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { c as clampComponentSize, e as SIZE_PADDING_CLASSES, f as SIZE_GAP_CLASSES, C as COMPONENT_SIZE_ORDER } from "./componentSizes-CdWNL526.js";
3
+ import { c as cn } from "./cn-wDEkOmcn.js";
3
4
  const ArrowUpIcon = () => /* @__PURE__ */ jsx("svg", { className: "w-3 h-3", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 10V2M6 2l4 4M6 2L2 6" }) });
4
5
  const ArrowDownIcon = () => /* @__PURE__ */ jsx("svg", { className: "w-3 h-3", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 2v8M6 10l4-4M6 10l-4-4" }) });
5
6
  const MinusIcon = () => /* @__PURE__ */ jsx("svg", { className: "w-3 h-3", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M2 6h8" }) });
@@ -94,11 +95,15 @@ const LMStatCard = ({
94
95
  const borderClasses = bordered ? "border" : "";
95
96
  const shadowClasses = shadow ? "shadow-sm" : "";
96
97
  const clickableClasses = clickable ? "cursor-pointer transition-transform hover:scale-105" : "";
97
- const baseClassName = `
98
- ${SIZE_PADDING_CLASSES[resolvedSize]} ${roundedClasses} ${borderClasses} ${shadowClasses} ${clickableClasses}
99
- backdrop-blur-md transition-all duration-300
100
- ${className}
101
- `.trim().replace(/\s+/g, " ");
98
+ const baseClassName = cn(
99
+ SIZE_PADDING_CLASSES[resolvedSize],
100
+ roundedClasses,
101
+ borderClasses,
102
+ shadowClasses,
103
+ clickableClasses,
104
+ "backdrop-blur-md transition-all duration-300",
105
+ className
106
+ );
102
107
  const getCardStyles = () => {
103
108
  const baseStyles = {
104
109
  backgroundColor: "var(--lm-bg-elevated)",
@@ -345,4 +350,4 @@ const LMStatCard = ({
345
350
  export {
346
351
  LMStatCard as L
347
352
  };
348
- //# sourceMappingURL=LMStatCard-D5HV9r6d.js.map
353
+ //# sourceMappingURL=LMStatCard-CdyIDhrA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMStatCard-CdyIDhrA.js","sources":["../src/components/DataDisplay/LMStatCard/LMStatCard.tsx"],"sourcesContent":["import React from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_GAP_CLASSES,\n SIZE_PADDING_CLASSES,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\nimport { cn } from '../../../utils/cn'\n\nexport interface LMStatCardProps {\n /** Title */\n title: string\n /** Value */\n value: string | number\n /** Description text */\n description?: string\n /** Left icon */\n icon?: React.ReactNode\n /** Trend value (percentage, positive/negative indicates direction; 0 means flat) */\n trend?: number\n /** Trend description text */\n trendText?: string\n /** Visual variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info'\n /** Size */\n size?: ComponentSize\n /** Clickable */\n clickable?: boolean\n /** Click event */\n onClick?: () => void\n /** Class name */\n className?: string\n /** Value prefix (e.g., $) */\n prefix?: string\n /** Value suffix (e.g., %, times) */\n suffix?: string\n /** Show border */\n bordered?: boolean\n /** Show shadow */\n shadow?: boolean\n /** Compact mode: uses smaller spacing and fonts when enabled */\n compact?: boolean\n}\n\nconst ArrowUpIcon: React.FC = () => (\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 10V2M6 2l4 4M6 2L2 6\" />\n </svg>\n)\n\nconst ArrowDownIcon: React.FC = () => (\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 2v8M6 10l4-4M6 10l-4-4\" />\n </svg>\n)\n\nconst MinusIcon: React.FC = () => (\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M2 6h8\" />\n </svg>\n)\n\nconst LMStatCard: React.FC<LMStatCardProps> = ({\n title,\n value,\n description,\n icon,\n trend,\n trendText,\n variant = 'default',\n size = 'md',\n clickable = false,\n onClick,\n className = '',\n prefix,\n suffix,\n bordered = true,\n shadow = true,\n compact = false,\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n\n const iconSizeClasses: Record<ComponentSize, string> = compact\n ? {\n xs: 'w-4 h-4',\n sm: 'w-5 h-5',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-10 h-10',\n '2xl': 'w-12 h-12',\n }\n : {\n xs: 'w-5 h-5',\n sm: 'w-6 h-6',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-14 h-14',\n '2xl': 'w-16 h-16',\n }\n\n const titleTextClasses: Record<ComponentSize, string> = compact\n ? {\n xs: 'text-[10px]',\n sm: 'text-[10px]',\n md: 'text-xs',\n lg: 'text-sm',\n xl: 'text-base',\n '2xl': 'text-lg',\n }\n : {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg',\n '2xl': 'text-xl',\n }\n\n const metaTextClasses: Record<ComponentSize, string> = compact\n ? {\n xs: 'text-[10px]',\n sm: 'text-[10px]',\n md: 'text-[10px]',\n lg: 'text-[10px]',\n xl: 'text-xs',\n '2xl': 'text-xs',\n }\n : {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-sm',\n xl: 'text-base',\n '2xl': 'text-lg',\n }\n\n const descriptionTextClasses: Record<ComponentSize, string> = {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-xs',\n lg: 'text-xs',\n xl: 'text-xs',\n '2xl': 'text-xs',\n }\n\n const valueTextClasses: Record<ComponentSize, string> = compact\n ? {\n xs: 'text-sm',\n sm: 'text-base',\n md: 'text-lg',\n lg: 'text-xl',\n xl: 'text-2xl',\n '2xl': 'text-3xl',\n }\n : {\n xs: 'text-lg',\n sm: 'text-xl',\n md: 'text-3xl',\n lg: 'text-4xl',\n xl: 'text-5xl',\n '2xl': 'text-6xl',\n }\n\n const roundedClasses = 'rounded-2xl'\n const borderClasses = bordered ? 'border' : ''\n const shadowClasses = shadow ? 'shadow-sm' : ''\n const clickableClasses = clickable ? 'cursor-pointer transition-transform hover:scale-105' : ''\n\n const baseClassName = cn(\n SIZE_PADDING_CLASSES[resolvedSize], roundedClasses, borderClasses, shadowClasses, clickableClasses,\n 'backdrop-blur-md transition-all duration-300',\n className\n )\n\n const getCardStyles = () => {\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 } as React.CSSProperties\n\n switch (variant) {\n case 'primary':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-primary-50)',\n borderColor: 'var(--lm-primary-200)',\n }\n case 'success':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-success-50)',\n borderColor: 'var(--lm-success-200)',\n }\n case 'warning':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-warning-50)',\n borderColor: 'var(--lm-warning-200)',\n }\n case 'error':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-error-50)',\n borderColor: 'var(--lm-error-200)',\n }\n case 'info':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-gray-50)',\n borderColor: 'var(--lm-gray-200)',\n }\n default:\n return baseStyles\n }\n }\n\n const getHoverStyles = () => {\n if (!clickable) return {}\n switch (variant) {\n case 'primary':\n return {\n backgroundColor: 'var(--lm-primary-100)',\n borderColor: 'var(--lm-primary-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'success':\n return {\n backgroundColor: 'var(--lm-success-100)',\n borderColor: 'var(--lm-success-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'warning':\n return {\n backgroundColor: 'var(--lm-warning-100)',\n borderColor: 'var(--lm-warning-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'error':\n return {\n backgroundColor: 'var(--lm-error-100)',\n borderColor: 'var(--lm-error-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'info':\n return {\n backgroundColor: 'var(--lm-gray-100)',\n borderColor: 'var(--lm-gray-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n default:\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-strong)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n }\n }\n\n const getIconStyles = () => {\n switch (variant) {\n case 'primary':\n return {\n color: 'var(--lm-primary-600)',\n backgroundColor: 'var(--lm-primary-100)',\n }\n case 'success':\n return {\n color: 'var(--lm-success-600)',\n backgroundColor: 'var(--lm-success-100)',\n }\n case 'warning':\n return {\n color: 'var(--lm-warning-600)',\n backgroundColor: 'var(--lm-warning-100)',\n }\n case 'error':\n return {\n color: 'var(--lm-error-600)',\n backgroundColor: 'var(--lm-error-100)',\n }\n case 'info':\n return {\n color: 'var(--lm-gray-600)',\n backgroundColor: 'var(--lm-gray-100)',\n }\n default:\n return {\n color: 'var(--lm-primary-600)',\n backgroundColor: 'var(--lm-bg-paper)',\n }\n }\n }\n\n const getValueStyles = () => {\n switch (variant) {\n case 'primary':\n return { color: 'var(--lm-primary-700)' }\n case 'success':\n return { color: 'var(--lm-success-700)' }\n case 'warning':\n return { color: 'var(--lm-warning-700)' }\n case 'error':\n return { color: 'var(--lm-error-700)' }\n case 'info':\n return { color: 'var(--lm-gray-700)' }\n default:\n return { color: 'var(--lm-text-primary)' }\n }\n }\n\n const getTrendStyles = () => {\n if (trend == null) return {}\n if (trend > 0) return { color: 'var(--lm-success-600)' }\n if (trend < 0) return { color: 'var(--lm-error-600)' }\n return { color: 'var(--lm-text-secondary)' }\n }\n\n const getTrendIcon = () => {\n if (trend == null) return null\n if (trend > 0) return <ArrowUpIcon />\n if (trend < 0) return <ArrowDownIcon />\n return <MinusIcon />\n }\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = (e) => {\n if (!clickable) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick?.()\n }\n }\n\n return (\n <div\n className={baseClassName}\n style={getCardStyles()}\n onClick={clickable ? onClick : undefined}\n onKeyDown={handleKeyDown}\n onMouseEnter={(e) => {\n if (clickable) Object.assign(e.currentTarget.style, getHoverStyles())\n }}\n onMouseLeave={(e) => {\n if (clickable) Object.assign(e.currentTarget.style, getCardStyles())\n }}\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n aria-label={clickable ? title : undefined}\n >\n <div className=\"flex items-start justify-between overflow-hidden\">\n <div className=\"flex-1 min-w-0\">\n {/* Title and icon */}\n <div className=\"flex items-center gap-2 mb-2 min-w-0\">\n {icon && (\n <div\n className={`${iconSizeClasses[resolvedSize]} rounded-lg flex items-center justify-center shrink-0`}\n style={getIconStyles()}\n >\n {icon}\n </div>\n )}\n <h3\n className={`${titleTextClasses[resolvedSize]} font-medium truncate`}\n style={{ color: 'var(--lm-text-secondary)' }}\n title={title}\n >\n {title}\n </h3>\n </div>\n\n {/* Value area (prefix/suffix) */}\n <div\n className={`flex items-baseline ${SIZE_GAP_CLASSES[resolvedSize]} min-w-0 overflow-hidden w-full`}\n >\n {prefix && (\n <span\n className={`${metaTextClasses[resolvedSize]} shrink-0`}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {prefix}\n </span>\n )}\n <span\n className={`font-bold ${valueTextClasses[resolvedSize]} overflow-hidden`}\n style={getValueStyles()}\n >\n {value}\n </span>\n {suffix && (\n <span\n className={`${metaTextClasses[resolvedSize]} shrink-0`}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {suffix}\n </span>\n )}\n </div>\n\n {/* Description */}\n {description && (\n <p\n className={`${descriptionTextClasses[resolvedSize]} mt-1 truncate`}\n style={{ color: 'var(--lm-text-secondary)' }}\n title={description}\n >\n {description}\n </p>\n )}\n\n {/* Trend area */}\n {(trend != null || trendText) && (\n <div className={`flex items-center ${SIZE_GAP_CLASSES[resolvedSize]} mt-2`}>\n {trend != null && (\n <div className=\"flex items-center gap-1\" style={getTrendStyles()}>\n {getTrendIcon()}\n <span className=\"text-sm font-medium\">{Math.abs(trend)}%</span>\n </div>\n )}\n {trendText && (\n <span className=\"text-sm\" style={{ color: 'var(--lm-text-secondary)' }}>\n {trendText}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default LMStatCard\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
3
  const componentSizes = require("./componentSizes-DUTZ7uEM.cjs");
4
+ const cn = require("./cn-I2jp-M-K.cjs");
4
5
  const ArrowUpIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-3 h-3", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 10V2M6 2l4 4M6 2L2 6" }) });
5
6
  const ArrowDownIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-3 h-3", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 2v8M6 10l4-4M6 10l-4-4" }) });
6
7
  const MinusIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-3 h-3", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M2 6h8" }) });
@@ -95,11 +96,15 @@ const LMStatCard = ({
95
96
  const borderClasses = bordered ? "border" : "";
96
97
  const shadowClasses = shadow ? "shadow-sm" : "";
97
98
  const clickableClasses = clickable ? "cursor-pointer transition-transform hover:scale-105" : "";
98
- const baseClassName = `
99
- ${componentSizes.SIZE_PADDING_CLASSES[resolvedSize]} ${roundedClasses} ${borderClasses} ${shadowClasses} ${clickableClasses}
100
- backdrop-blur-md transition-all duration-300
101
- ${className}
102
- `.trim().replace(/\s+/g, " ");
99
+ const baseClassName = cn.cn(
100
+ componentSizes.SIZE_PADDING_CLASSES[resolvedSize],
101
+ roundedClasses,
102
+ borderClasses,
103
+ shadowClasses,
104
+ clickableClasses,
105
+ "backdrop-blur-md transition-all duration-300",
106
+ className
107
+ );
103
108
  const getCardStyles = () => {
104
109
  const baseStyles = {
105
110
  backgroundColor: "var(--lm-bg-elevated)",
@@ -344,4 +349,4 @@ const LMStatCard = ({
344
349
  );
345
350
  };
346
351
  exports.LMStatCard = LMStatCard;
347
- //# sourceMappingURL=LMStatCard-MXs9Z0qH.cjs.map
352
+ //# sourceMappingURL=LMStatCard-Do5f2Map.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMStatCard-Do5f2Map.cjs","sources":["../src/components/DataDisplay/LMStatCard/LMStatCard.tsx"],"sourcesContent":["import React from 'react'\nimport {\n COMPONENT_SIZE_ORDER,\n SIZE_GAP_CLASSES,\n SIZE_PADDING_CLASSES,\n clampComponentSize,\n} from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\nimport { cn } from '../../../utils/cn'\n\nexport interface LMStatCardProps {\n /** Title */\n title: string\n /** Value */\n value: string | number\n /** Description text */\n description?: string\n /** Left icon */\n icon?: React.ReactNode\n /** Trend value (percentage, positive/negative indicates direction; 0 means flat) */\n trend?: number\n /** Trend description text */\n trendText?: string\n /** Visual variant */\n variant?: 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info'\n /** Size */\n size?: ComponentSize\n /** Clickable */\n clickable?: boolean\n /** Click event */\n onClick?: () => void\n /** Class name */\n className?: string\n /** Value prefix (e.g., $) */\n prefix?: string\n /** Value suffix (e.g., %, times) */\n suffix?: string\n /** Show border */\n bordered?: boolean\n /** Show shadow */\n shadow?: boolean\n /** Compact mode: uses smaller spacing and fonts when enabled */\n compact?: boolean\n}\n\nconst ArrowUpIcon: React.FC = () => (\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 10V2M6 2l4 4M6 2L2 6\" />\n </svg>\n)\n\nconst ArrowDownIcon: React.FC = () => (\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 2v8M6 10l4-4M6 10l-4-4\" />\n </svg>\n)\n\nconst MinusIcon: React.FC = () => (\n <svg className=\"w-3 h-3\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M2 6h8\" />\n </svg>\n)\n\nconst LMStatCard: React.FC<LMStatCardProps> = ({\n title,\n value,\n description,\n icon,\n trend,\n trendText,\n variant = 'default',\n size = 'md',\n clickable = false,\n onClick,\n className = '',\n prefix,\n suffix,\n bordered = true,\n shadow = true,\n compact = false,\n}) => {\n const resolvedSize = clampComponentSize(size, COMPONENT_SIZE_ORDER)\n\n const iconSizeClasses: Record<ComponentSize, string> = compact\n ? {\n xs: 'w-4 h-4',\n sm: 'w-5 h-5',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n xl: 'w-10 h-10',\n '2xl': 'w-12 h-12',\n }\n : {\n xs: 'w-5 h-5',\n sm: 'w-6 h-6',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n xl: 'w-14 h-14',\n '2xl': 'w-16 h-16',\n }\n\n const titleTextClasses: Record<ComponentSize, string> = compact\n ? {\n xs: 'text-[10px]',\n sm: 'text-[10px]',\n md: 'text-xs',\n lg: 'text-sm',\n xl: 'text-base',\n '2xl': 'text-lg',\n }\n : {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg',\n '2xl': 'text-xl',\n }\n\n const metaTextClasses: Record<ComponentSize, string> = compact\n ? {\n xs: 'text-[10px]',\n sm: 'text-[10px]',\n md: 'text-[10px]',\n lg: 'text-[10px]',\n xl: 'text-xs',\n '2xl': 'text-xs',\n }\n : {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-sm',\n xl: 'text-base',\n '2xl': 'text-lg',\n }\n\n const descriptionTextClasses: Record<ComponentSize, string> = {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-xs',\n lg: 'text-xs',\n xl: 'text-xs',\n '2xl': 'text-xs',\n }\n\n const valueTextClasses: Record<ComponentSize, string> = compact\n ? {\n xs: 'text-sm',\n sm: 'text-base',\n md: 'text-lg',\n lg: 'text-xl',\n xl: 'text-2xl',\n '2xl': 'text-3xl',\n }\n : {\n xs: 'text-lg',\n sm: 'text-xl',\n md: 'text-3xl',\n lg: 'text-4xl',\n xl: 'text-5xl',\n '2xl': 'text-6xl',\n }\n\n const roundedClasses = 'rounded-2xl'\n const borderClasses = bordered ? 'border' : ''\n const shadowClasses = shadow ? 'shadow-sm' : ''\n const clickableClasses = clickable ? 'cursor-pointer transition-transform hover:scale-105' : ''\n\n const baseClassName = cn(\n SIZE_PADDING_CLASSES[resolvedSize], roundedClasses, borderClasses, shadowClasses, clickableClasses,\n 'backdrop-blur-md transition-all duration-300',\n className\n )\n\n const getCardStyles = () => {\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 } as React.CSSProperties\n\n switch (variant) {\n case 'primary':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-primary-50)',\n borderColor: 'var(--lm-primary-200)',\n }\n case 'success':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-success-50)',\n borderColor: 'var(--lm-success-200)',\n }\n case 'warning':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-warning-50)',\n borderColor: 'var(--lm-warning-200)',\n }\n case 'error':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-error-50)',\n borderColor: 'var(--lm-error-200)',\n }\n case 'info':\n return {\n ...baseStyles,\n backgroundColor: 'var(--lm-gray-50)',\n borderColor: 'var(--lm-gray-200)',\n }\n default:\n return baseStyles\n }\n }\n\n const getHoverStyles = () => {\n if (!clickable) return {}\n switch (variant) {\n case 'primary':\n return {\n backgroundColor: 'var(--lm-primary-100)',\n borderColor: 'var(--lm-primary-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'success':\n return {\n backgroundColor: 'var(--lm-success-100)',\n borderColor: 'var(--lm-success-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'warning':\n return {\n backgroundColor: 'var(--lm-warning-100)',\n borderColor: 'var(--lm-warning-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'error':\n return {\n backgroundColor: 'var(--lm-error-100)',\n borderColor: 'var(--lm-error-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n case 'info':\n return {\n backgroundColor: 'var(--lm-gray-100)',\n borderColor: 'var(--lm-gray-300)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n default:\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n borderColor: 'var(--lm-border-strong)',\n boxShadow: 'var(--lm-shadow-md)',\n }\n }\n }\n\n const getIconStyles = () => {\n switch (variant) {\n case 'primary':\n return {\n color: 'var(--lm-primary-600)',\n backgroundColor: 'var(--lm-primary-100)',\n }\n case 'success':\n return {\n color: 'var(--lm-success-600)',\n backgroundColor: 'var(--lm-success-100)',\n }\n case 'warning':\n return {\n color: 'var(--lm-warning-600)',\n backgroundColor: 'var(--lm-warning-100)',\n }\n case 'error':\n return {\n color: 'var(--lm-error-600)',\n backgroundColor: 'var(--lm-error-100)',\n }\n case 'info':\n return {\n color: 'var(--lm-gray-600)',\n backgroundColor: 'var(--lm-gray-100)',\n }\n default:\n return {\n color: 'var(--lm-primary-600)',\n backgroundColor: 'var(--lm-bg-paper)',\n }\n }\n }\n\n const getValueStyles = () => {\n switch (variant) {\n case 'primary':\n return { color: 'var(--lm-primary-700)' }\n case 'success':\n return { color: 'var(--lm-success-700)' }\n case 'warning':\n return { color: 'var(--lm-warning-700)' }\n case 'error':\n return { color: 'var(--lm-error-700)' }\n case 'info':\n return { color: 'var(--lm-gray-700)' }\n default:\n return { color: 'var(--lm-text-primary)' }\n }\n }\n\n const getTrendStyles = () => {\n if (trend == null) return {}\n if (trend > 0) return { color: 'var(--lm-success-600)' }\n if (trend < 0) return { color: 'var(--lm-error-600)' }\n return { color: 'var(--lm-text-secondary)' }\n }\n\n const getTrendIcon = () => {\n if (trend == null) return null\n if (trend > 0) return <ArrowUpIcon />\n if (trend < 0) return <ArrowDownIcon />\n return <MinusIcon />\n }\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = (e) => {\n if (!clickable) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n onClick?.()\n }\n }\n\n return (\n <div\n className={baseClassName}\n style={getCardStyles()}\n onClick={clickable ? onClick : undefined}\n onKeyDown={handleKeyDown}\n onMouseEnter={(e) => {\n if (clickable) Object.assign(e.currentTarget.style, getHoverStyles())\n }}\n onMouseLeave={(e) => {\n if (clickable) Object.assign(e.currentTarget.style, getCardStyles())\n }}\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n aria-label={clickable ? title : undefined}\n >\n <div className=\"flex items-start justify-between overflow-hidden\">\n <div className=\"flex-1 min-w-0\">\n {/* Title and icon */}\n <div className=\"flex items-center gap-2 mb-2 min-w-0\">\n {icon && (\n <div\n className={`${iconSizeClasses[resolvedSize]} rounded-lg flex items-center justify-center shrink-0`}\n style={getIconStyles()}\n >\n {icon}\n </div>\n )}\n <h3\n className={`${titleTextClasses[resolvedSize]} font-medium truncate`}\n style={{ color: 'var(--lm-text-secondary)' }}\n title={title}\n >\n {title}\n </h3>\n </div>\n\n {/* Value area (prefix/suffix) */}\n <div\n className={`flex items-baseline ${SIZE_GAP_CLASSES[resolvedSize]} min-w-0 overflow-hidden w-full`}\n >\n {prefix && (\n <span\n className={`${metaTextClasses[resolvedSize]} shrink-0`}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {prefix}\n </span>\n )}\n <span\n className={`font-bold ${valueTextClasses[resolvedSize]} overflow-hidden`}\n style={getValueStyles()}\n >\n {value}\n </span>\n {suffix && (\n <span\n className={`${metaTextClasses[resolvedSize]} shrink-0`}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n {suffix}\n </span>\n )}\n </div>\n\n {/* Description */}\n {description && (\n <p\n className={`${descriptionTextClasses[resolvedSize]} mt-1 truncate`}\n style={{ color: 'var(--lm-text-secondary)' }}\n title={description}\n >\n {description}\n </p>\n )}\n\n {/* Trend area */}\n {(trend != null || trendText) && (\n <div className={`flex items-center ${SIZE_GAP_CLASSES[resolvedSize]} mt-2`}>\n {trend != null && (\n <div className=\"flex items-center gap-1\" style={getTrendStyles()}>\n {getTrendIcon()}\n <span className=\"text-sm font-medium\">{Math.abs(trend)}%</span>\n </div>\n )}\n {trendText && (\n <span className=\"text-sm\" style={{ color: 'var(--lm-text-secondary)' }}>\n {trendText}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default LMStatCard\n"],"names":["jsx","clampComponentSize","COMPONENT_SIZE_ORDER","cn","SIZE_PADDING_CLASSES","jsxs","SIZE_GAP_CLASSES"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { useId } from "react";
3
+ import { E as ErrorMessage } from "./ErrorMessage-Dt4cJ-sy.js";
3
4
  const sizeConfig = {
4
5
  xs: {
5
6
  container: "p-2 gap-2",
@@ -169,39 +170,10 @@ const LMSwitch = ({
169
170
  ]
170
171
  }
171
172
  ),
172
- errorMessage && /* @__PURE__ */ jsxs(
173
- "p",
174
- {
175
- id: errId,
176
- className: `flex items-center gap-1 mt-2 ${currentSize.errorMessage}`,
177
- style: { color: "var(--lm-error-500)" },
178
- role: "alert",
179
- "aria-live": "polite",
180
- children: [
181
- /* @__PURE__ */ jsx(
182
- "svg",
183
- {
184
- className: "w-3 h-3",
185
- fill: "currentColor",
186
- viewBox: "0 0 20 20",
187
- "aria-hidden": "true",
188
- children: /* @__PURE__ */ jsx(
189
- "path",
190
- {
191
- fillRule: "evenodd",
192
- 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",
193
- clipRule: "evenodd"
194
- }
195
- )
196
- }
197
- ),
198
- errorMessage
199
- ]
200
- }
201
- )
173
+ errorMessage && /* @__PURE__ */ jsx(ErrorMessage, { message: errorMessage })
202
174
  ] });
203
175
  };
204
176
  export {
205
177
  LMSwitch as L
206
178
  };
207
- //# sourceMappingURL=LMSwitch-CP1_nrfU.js.map
179
+ //# sourceMappingURL=LMSwitch-BqhucDO0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMSwitch-BqhucDO0.js","sources":["../src/components/Form/LMSwitch/LMSwitch.tsx"],"sourcesContent":["import React, { useId } from 'react'\nimport type { ComponentSize } from '../../../utils/componentSizes'\nimport { ErrorMessage } from '../../_internal/ErrorMessage'\n\nexport interface LMSwitchProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | '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 track: 'w-7 h-4',\n thumb: 'w-2.5 h-2.5',\n translate: 'translate-x-3',\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 track: 'w-9 h-5',\n thumb: 'w-3 h-3',\n translate: 'translate-x-4',\n },\n md: {\n container: 'p-4 gap-3',\n label: 'text-base',\n description: 'text-sm mt-1',\n errorMessage: 'text-xs',\n track: 'w-11 h-6',\n thumb: 'w-4 h-4',\n translate: 'translate-x-5',\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 track: 'w-14 h-7',\n thumb: 'w-5 h-5',\n translate: 'translate-x-7',\n },\n xl: {\n container: 'p-6 gap-4',\n label: 'text-xl',\n description: 'text-lg mt-2',\n errorMessage: 'text-sm',\n track: 'w-16 h-8',\n thumb: 'w-6 h-6',\n translate: 'translate-x-8',\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 track: 'w-20 h-10',\n thumb: 'w-8 h-8',\n translate: 'translate-x-10',\n },\n}\n\nconst LMSwitch: React.FC<LMSwitchProps> = ({\n label,\n description,\n error = false,\n errorMessage,\n size = 'md',\n id,\n ...props\n}) => {\n const autoId = useId()\n const controlId = id ?? `lm-switch-${autoId}`\n const errId = `lm-switch-err-${autoId}`\n\n const currentSize = sizeConfig[size]\n\n const getTrackBg = () => {\n if (props.disabled) return 'var(--lm-bg-paper)'\n if (error && !props.checked) return 'var(--lm-error-300)'\n if (props.checked) return 'var(--lm-primary-500)'\n return 'var(--lm-border-default)'\n }\n\n const getDisabledStyles = () => {\n if (props.disabled) {\n return {\n opacity: 0.6,\n cursor: 'not-allowed',\n } as React.CSSProperties\n }\n return {}\n }\n\n const getContainerStyles = () => {\n const base = { backgroundColor: 'var(--lm-bg-paper)' }\n return error ? { ...base, backgroundColor: 'var(--lm-error-50)' } : base\n }\n\n const getHoverContainerStyles = () =>\n error\n ? { backgroundColor: 'var(--lm-error-100)' }\n : { backgroundColor: 'var(--lm-bg-elevated)' }\n\n const getLabelStyles = () => {\n if (error) return { color: 'var(--lm-error-700)' }\n if (props.disabled)\n return { color: 'var(--lm-text-disabled)', cursor: 'not-allowed' }\n return { color: 'var(--lm-text-primary)', cursor: 'pointer' }\n }\n\n const getDescriptionStyles = () =>\n error\n ? { color: 'var(--lm-error-600)' }\n : { color: 'var(--lm-text-secondary)' }\n\n return (\n <div>\n <label\n htmlFor={controlId}\n className={`flex items-start 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 <div className=\"shrink-0 relative\">\n <input\n type=\"checkbox\"\n id={controlId}\n {...props}\n className=\"sr-only peer\"\n aria-invalid={error || undefined}\n aria-describedby={errorMessage ? errId : undefined}\n style={getDisabledStyles()}\n />\n <div\n className={`${currentSize.track} rounded-full transition-all duration-300 relative`}\n style={{\n backgroundColor: getTrackBg(),\n ...getDisabledStyles(),\n }}\n >\n <div\n className={`${currentSize.thumb} absolute left-1 top-1/2 -translate-y-1/2 rounded-full transition-transform duration-300 ${\n props.checked ? currentSize.translate : 'translate-x-0'\n }`}\n style={{\n backgroundColor: 'var(--lm-bg-elevated)',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n }}\n />\n </div>\n </div>\n\n {(label || description) && (\n <div className=\"flex-1\">\n {label && (\n <span\n className={`font-medium leading-tight transition-colors duration-200 ${currentSize.label}`}\n style={getLabelStyles()}\n >\n {label}\n </span>\n )}\n {description && (\n <p\n className={currentSize.description}\n style={getDescriptionStyles()}\n >\n {description}\n </p>\n )}\n </div>\n )}\n </label>\n\n {errorMessage && <ErrorMessage message={errorMessage} />}\n </div>\n )\n}\n\nexport default LMSwitch\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
3
  const React = require("react");
4
+ const ErrorMessage = require("./ErrorMessage-CbE7emgD.cjs");
4
5
  const sizeConfig = {
5
6
  xs: {
6
7
  container: "p-2 gap-2",
@@ -170,37 +171,8 @@ const LMSwitch = ({
170
171
  ]
171
172
  }
172
173
  ),
173
- errorMessage && /* @__PURE__ */ jsxRuntime.jsxs(
174
- "p",
175
- {
176
- id: errId,
177
- className: `flex items-center gap-1 mt-2 ${currentSize.errorMessage}`,
178
- style: { color: "var(--lm-error-500)" },
179
- role: "alert",
180
- "aria-live": "polite",
181
- children: [
182
- /* @__PURE__ */ jsxRuntime.jsx(
183
- "svg",
184
- {
185
- className: "w-3 h-3",
186
- fill: "currentColor",
187
- viewBox: "0 0 20 20",
188
- "aria-hidden": "true",
189
- children: /* @__PURE__ */ jsxRuntime.jsx(
190
- "path",
191
- {
192
- fillRule: "evenodd",
193
- 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",
194
- clipRule: "evenodd"
195
- }
196
- )
197
- }
198
- ),
199
- errorMessage
200
- ]
201
- }
202
- )
174
+ errorMessage && /* @__PURE__ */ jsxRuntime.jsx(ErrorMessage.ErrorMessage, { message: errorMessage })
203
175
  ] });
204
176
  };
205
177
  exports.LMSwitch = LMSwitch;
206
- //# sourceMappingURL=LMSwitch-DYoSH6wE.cjs.map
178
+ //# sourceMappingURL=LMSwitch-BxVqTSUH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMSwitch-BxVqTSUH.cjs","sources":["../src/components/Form/LMSwitch/LMSwitch.tsx"],"sourcesContent":["import React, { useId } from 'react'\nimport type { ComponentSize } from '../../../utils/componentSizes'\nimport { ErrorMessage } from '../../_internal/ErrorMessage'\n\nexport interface LMSwitchProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'type' | '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 track: 'w-7 h-4',\n thumb: 'w-2.5 h-2.5',\n translate: 'translate-x-3',\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 track: 'w-9 h-5',\n thumb: 'w-3 h-3',\n translate: 'translate-x-4',\n },\n md: {\n container: 'p-4 gap-3',\n label: 'text-base',\n description: 'text-sm mt-1',\n errorMessage: 'text-xs',\n track: 'w-11 h-6',\n thumb: 'w-4 h-4',\n translate: 'translate-x-5',\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 track: 'w-14 h-7',\n thumb: 'w-5 h-5',\n translate: 'translate-x-7',\n },\n xl: {\n container: 'p-6 gap-4',\n label: 'text-xl',\n description: 'text-lg mt-2',\n errorMessage: 'text-sm',\n track: 'w-16 h-8',\n thumb: 'w-6 h-6',\n translate: 'translate-x-8',\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 track: 'w-20 h-10',\n thumb: 'w-8 h-8',\n translate: 'translate-x-10',\n },\n}\n\nconst LMSwitch: React.FC<LMSwitchProps> = ({\n label,\n description,\n error = false,\n errorMessage,\n size = 'md',\n id,\n ...props\n}) => {\n const autoId = useId()\n const controlId = id ?? `lm-switch-${autoId}`\n const errId = `lm-switch-err-${autoId}`\n\n const currentSize = sizeConfig[size]\n\n const getTrackBg = () => {\n if (props.disabled) return 'var(--lm-bg-paper)'\n if (error && !props.checked) return 'var(--lm-error-300)'\n if (props.checked) return 'var(--lm-primary-500)'\n return 'var(--lm-border-default)'\n }\n\n const getDisabledStyles = () => {\n if (props.disabled) {\n return {\n opacity: 0.6,\n cursor: 'not-allowed',\n } as React.CSSProperties\n }\n return {}\n }\n\n const getContainerStyles = () => {\n const base = { backgroundColor: 'var(--lm-bg-paper)' }\n return error ? { ...base, backgroundColor: 'var(--lm-error-50)' } : base\n }\n\n const getHoverContainerStyles = () =>\n error\n ? { backgroundColor: 'var(--lm-error-100)' }\n : { backgroundColor: 'var(--lm-bg-elevated)' }\n\n const getLabelStyles = () => {\n if (error) return { color: 'var(--lm-error-700)' }\n if (props.disabled)\n return { color: 'var(--lm-text-disabled)', cursor: 'not-allowed' }\n return { color: 'var(--lm-text-primary)', cursor: 'pointer' }\n }\n\n const getDescriptionStyles = () =>\n error\n ? { color: 'var(--lm-error-600)' }\n : { color: 'var(--lm-text-secondary)' }\n\n return (\n <div>\n <label\n htmlFor={controlId}\n className={`flex items-start 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 <div className=\"shrink-0 relative\">\n <input\n type=\"checkbox\"\n id={controlId}\n {...props}\n className=\"sr-only peer\"\n aria-invalid={error || undefined}\n aria-describedby={errorMessage ? errId : undefined}\n style={getDisabledStyles()}\n />\n <div\n className={`${currentSize.track} rounded-full transition-all duration-300 relative`}\n style={{\n backgroundColor: getTrackBg(),\n ...getDisabledStyles(),\n }}\n >\n <div\n className={`${currentSize.thumb} absolute left-1 top-1/2 -translate-y-1/2 rounded-full transition-transform duration-300 ${\n props.checked ? currentSize.translate : 'translate-x-0'\n }`}\n style={{\n backgroundColor: 'var(--lm-bg-elevated)',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n }}\n />\n </div>\n </div>\n\n {(label || description) && (\n <div className=\"flex-1\">\n {label && (\n <span\n className={`font-medium leading-tight transition-colors duration-200 ${currentSize.label}`}\n style={getLabelStyles()}\n >\n {label}\n </span>\n )}\n {description && (\n <p\n className={currentSize.description}\n style={getDescriptionStyles()}\n >\n {description}\n </p>\n )}\n </div>\n )}\n </label>\n\n {errorMessage && <ErrorMessage message={errorMessage} />}\n </div>\n )\n}\n\nexport default LMSwitch\n"],"names":["useId","jsxs","jsx","ErrorMessage"],"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 CaretUpIcon = ({ active }) => /* @__PURE__ */ jsxRuntime.jsx(
6
7
  "svg",
7
8
  {
@@ -285,11 +286,13 @@ const LMTable = ({
285
286
  const getEmptyStyles = () => ({
286
287
  color: "var(--lm-text-secondary)"
287
288
  });
288
- const tableClassName = `w-full ${componentSizes.SIZE_TEXT_CLASSES[size]} border-collapse ${className}`.trim().replace(/\s+/g, " ");
289
+ const tableClassName = cn.cn("w-full", componentSizes.SIZE_TEXT_CLASSES[size], "border-collapse", className);
289
290
  const isAllSelected = dataSource.length > 0 && selectedRowKeys.length === dataSource.length;
290
291
  const isIndeterminate = selectedRowKeys.length > 0 && selectedRowKeys.length < dataSource.length;
291
- const rootClassName = `space-y-4 ${fullHeight ? "h-full flex flex-col min-h-0" : ""}`.trim().replace(/\s+/g, " ");
292
- const tableContainerClassName = `${fullHeight ? "flex-1 min-h-0 overflow-auto" : `overflow-auto ${(loadMore == null ? void 0 : loadMore.enabled) ? "max-h-96" : ""}`}`.trim().replace(/\s+/g, " ");
292
+ const rootClassName = cn.cn("space-y-4", fullHeight && "h-full flex flex-col min-h-0");
293
+ const tableContainerClassName = cn.cn(
294
+ fullHeight ? "flex-1 min-h-0 overflow-auto" : cn.cn("overflow-auto", (loadMore == null ? void 0 : loadMore.enabled) && "max-h-96")
295
+ );
293
296
  const wrapperVariantClasses = (() => {
294
297
  switch (variant) {
295
298
  case "elevated":
@@ -590,4 +593,4 @@ const LMTable = ({
590
593
  };
591
594
  const LMTable_default = React.memo(LMTable);
592
595
  exports.LMTable_default = LMTable_default;
593
- //# sourceMappingURL=LMTable-j1ZzAzXB.cjs.map
596
+ //# sourceMappingURL=LMTable-Be9FK8bz.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LMTable-Be9FK8bz.cjs","sources":["../src/components/DataDisplay/LMTable/LMTable.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback, memo } from 'react'\nimport { SIZE_TABLE_CONFIG, SIZE_TEXT_CLASSES } from '../../../utils/componentSizes'\nimport type { ComponentSize } from '../../../utils/componentSizes'\nimport { cn } from '../../../utils/cn'\n\nexport interface LMTableColumn<T = Record<string, unknown>> {\n /** Column title */\n title: string\n /** Data field name */\n dataIndex: string\n /** Column width */\n width?: string | number\n /** Custom render function */\n render?: (value: unknown, record: T, index: number) => React.ReactNode\n /** Sortable */\n sorter?: boolean\n /** Column alignment */\n align?: 'left' | 'center' | 'right'\n /** Fixed column */\n fixed?: 'left' | 'right'\n}\n\nexport interface LMPaginationConfig {\n /** Current page */\n current: number\n /** Page size */\n pageSize: number\n /** Total count */\n total: number\n /** Show pagination */\n showPagination?: boolean\n /** Page size options */\n pageSizeOptions?: number[]\n /** Show total */\n showTotal?: boolean\n /** Show quick jumper */\n showQuickJumper?: boolean\n /** Show size changer */\n showSizeChanger?: boolean\n /** Change callback */\n onChange?: (page: number, pageSize: number) => void\n}\n\nexport interface LMLoadMoreConfig {\n /** Enable load more */\n enabled: boolean\n /** Threshold */\n threshold?: number\n /** Has more data */\n hasMore: boolean\n /** Loading state */\n loading: boolean\n /** Load more callback */\n onLoadMore: () => void\n}\n\nexport interface LMTableProps<T = Record<string, unknown>> {\n /** Data source */\n dataSource: T[]\n /** Columns */\n columns: LMTableColumn<T>[]\n /** Row key */\n rowKey?: string | ((record: T, index: number) => string)\n /** Pagination config */\n pagination?: LMPaginationConfig\n /** Load more config */\n loadMore?: LMLoadMoreConfig\n /** Loading state */\n loading?: boolean\n /** Empty text */\n emptyText?: string\n /** Size */\n size?: ComponentSize\n /** Bordered */\n bordered?: boolean\n /** Striped */\n striped?: boolean\n /** Selectable */\n selectable?: boolean\n /** Selected row keys */\n selectedRowKeys?: string[]\n /** Selection change callback */\n onSelectionChange?: (selectedRowKeys: string[], selectedRows: T[]) => void\n /** Row click callback */\n onRowClick?: (record: T, index: number) => void\n /** Sort change callback */\n onSortChange?: (field: string, order: 'ascend' | 'descend') => void\n /** Class name */\n className?: string\n /** Full height */\n fullHeight?: boolean\n /** Variant */\n variant?: 'default' | 'elevated' | 'outline' | 'minimal' | 'soft' | 'zebra'\n}\n\nconst CaretUpIcon: React.FC<{ active?: boolean }> = ({ active }) => (\n <svg\n className=\"w-2.5 h-2.5\"\n viewBox=\"0 0 10 6\"\n fill=\"none\"\n style={{ color: active ? 'var(--lm-primary-500)' : 'var(--lm-gray-400)' }}\n >\n <path d=\"M5 0L10 6H0L5 0Z\" fill=\"currentColor\" />\n </svg>\n)\n\nconst CaretDownIcon: React.FC<{ active?: boolean }> = ({ active }) => (\n <svg\n className=\"w-2.5 h-2.5\"\n viewBox=\"0 0 10 6\"\n fill=\"none\"\n style={{ color: active ? 'var(--lm-primary-500)' : 'var(--lm-gray-400)' }}\n >\n <path d=\"M5 6L0 0H10L5 6Z\" fill=\"currentColor\" />\n </svg>\n)\n\nconst ChevronLeftIcon: React.FC = () => (\n <svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M15 19l-7-7 7-7\" />\n </svg>\n)\n\nconst ChevronRightIcon: React.FC = () => (\n <svg className=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n)\n\nconst SpinnerIcon: React.FC = () => (\n <svg className=\"w-4 h-4 animate-spin\" viewBox=\"0 0 24 24\" fill=\"none\">\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\nconst LMTable = <T = unknown,>({\n dataSource,\n columns,\n rowKey = 'id',\n pagination,\n loadMore,\n loading = false,\n emptyText = 'No data',\n size = 'md',\n bordered = false,\n striped = false,\n selectable = false,\n selectedRowKeys = [],\n onSelectionChange,\n onRowClick,\n onSortChange,\n className = '',\n fullHeight = false,\n variant = 'default',\n}: LMTableProps<T>) => {\n const [currentPage, setCurrentPage] = useState(1)\n const [pageSize, setPageSize] = useState(10)\n const [sortField, setSortField] = useState<string>('')\n const [sortOrder, setSortOrder] = useState<'ascend' | 'descend'>('ascend')\n const containerRef = useRef<HTMLDivElement>(null)\n\n const getRowKey = useCallback(\n (record: T, index: number): string => {\n if (typeof rowKey === 'function') {\n return rowKey(record, index)\n }\n const key = (record as unknown as Record<string, unknown>)[rowKey as string]\n return (typeof key === 'string' ? key : String(key)) || index.toString()\n },\n [rowKey]\n )\n\n const getValueByDataIndex = useCallback((record: T, dataIndex: string) => {\n const parts = String(dataIndex).split('.')\n let current: unknown = record as unknown as Record<string, unknown>\n for (const p of parts) {\n if (\n current == null ||\n typeof current !== 'object' ||\n !(p in (current as Record<string, unknown>))\n ) {\n return ''\n }\n current = (current as Record<string, unknown>)[p]\n }\n return current as unknown\n }, [])\n\n const handleSort = useCallback(\n (column: LMTableColumn<T>) => {\n if (!column.sorter) return\n\n let newSortOrder: 'ascend' | 'descend' = 'ascend'\n if (sortField === column.dataIndex) {\n newSortOrder = sortOrder === 'ascend' ? 'descend' : 'ascend'\n }\n\n setSortField(column.dataIndex)\n setSortOrder(newSortOrder)\n onSortChange?.(column.dataIndex, newSortOrder)\n },\n [sortField, sortOrder, onSortChange]\n )\n\n const handlePageChange = useCallback(\n (page: number) => {\n setCurrentPage(page)\n pagination?.onChange?.(page, pageSize)\n },\n [pagination, pageSize]\n )\n\n const handlePageSizeChange = useCallback(\n (newPageSize: number) => {\n setPageSize(newPageSize)\n setCurrentPage(1)\n pagination?.onChange?.(1, newPageSize)\n },\n [pagination]\n )\n\n const handleRowSelect = useCallback(\n (record: T, checked: boolean) => {\n const key = getRowKey(record, dataSource.indexOf(record))\n let newSelectedRowKeys: string[]\n\n if (checked) {\n newSelectedRowKeys = [...selectedRowKeys, key]\n } else {\n newSelectedRowKeys = selectedRowKeys.filter((k) => k !== key)\n }\n\n const newSelectedRows = dataSource.filter((item) =>\n newSelectedRowKeys.includes(getRowKey(item, dataSource.indexOf(item)))\n )\n\n onSelectionChange?.(newSelectedRowKeys, newSelectedRows)\n },\n [selectedRowKeys, dataSource, getRowKey, onSelectionChange]\n )\n\n const handleSelectAll = useCallback(\n (checked: boolean) => {\n if (checked) {\n const allKeys = dataSource.map((record, index) => getRowKey(record, index))\n onSelectionChange?.(allKeys, dataSource)\n } else {\n onSelectionChange?.([], [])\n }\n },\n [dataSource, getRowKey, onSelectionChange]\n )\n\n const handleScroll = useCallback(() => {\n if (!loadMore?.enabled || loadMore.loading || !loadMore.hasMore) return\n\n const container = containerRef.current\n if (!container) return\n\n const { scrollTop, scrollHeight, clientHeight } = container\n const threshold = loadMore.threshold || 100\n\n if (scrollTop + clientHeight >= scrollHeight - threshold) {\n loadMore.onLoadMore()\n }\n }, [loadMore])\n\n useEffect(() => {\n const container = containerRef.current\n if (!container || !loadMore?.enabled) return\n\n container.addEventListener('scroll', handleScroll)\n return () => container.removeEventListener('scroll', handleScroll)\n }, [handleScroll, loadMore?.enabled, loadMore?.loading, loadMore?.hasMore])\n\n useEffect(() => {\n if (pagination?.current !== undefined) {\n setCurrentPage(pagination.current)\n }\n if (pagination?.pageSize !== undefined) {\n setPageSize(pagination.pageSize)\n }\n }, [pagination])\n\n const paginationUiClasses = {\n xs: {\n container: 'px-3 py-2',\n text: 'text-xs',\n control: 'px-2 py-1 text-xs',\n gap: 'gap-1',\n select: 'px-2 py-1 text-xs',\n input: 'px-2 py-1 text-xs w-14',\n },\n sm: {\n container: 'px-3 py-2',\n text: 'text-sm',\n control: 'px-2 py-1 text-sm',\n gap: 'gap-2',\n select: 'px-2 py-1 text-sm',\n input: 'px-2 py-1 text-sm w-16',\n },\n md: {\n container: 'px-4 py-3',\n text: 'text-sm',\n control: 'px-3 py-1 text-sm',\n gap: 'gap-2',\n select: 'px-2 py-1 text-sm',\n input: 'px-2 py-1 text-sm w-16',\n },\n lg: {\n container: 'px-5 py-3.5',\n text: 'text-base',\n control: 'px-3.5 py-1.5 text-base',\n gap: 'gap-3',\n select: 'px-3 py-1.5 text-base',\n input: 'px-3 py-1.5 text-base w-20',\n },\n xl: {\n container: 'px-6 py-4',\n text: 'text-lg',\n control: 'px-4 py-2 text-lg',\n gap: 'gap-3',\n select: 'px-4 py-2 text-lg',\n input: 'px-4 py-2 text-lg w-24',\n },\n '2xl': {\n container: 'px-8 py-5',\n text: 'text-xl',\n control: 'px-5 py-2.5 text-xl',\n gap: 'gap-4',\n select: 'px-5 py-2.5 text-xl',\n input: 'px-5 py-2.5 text-xl w-28',\n },\n } as const\n\n const totalPages =\n pagination && pagination.total && pageSize\n ? Math.max(1, Math.ceil(pagination.total / pageSize))\n : 1\n\n const getTableStyles = () => ({\n backgroundColor:\n variant === 'minimal'\n ? 'transparent'\n : variant === 'soft'\n ? 'var(--lm-bg-paper)'\n : 'var(--lm-bg-elevated)',\n borderColor:\n variant === 'outline'\n ? 'var(--lm-border-strong)'\n : bordered\n ? 'var(--lm-border-default)'\n : 'transparent',\n })\n\n const getHeaderStyles = () => ({\n backgroundColor: variant === 'minimal' ? 'transparent' : 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: variant === 'outline' ? 'var(--lm-border-strong)' : 'var(--lm-border-light)',\n })\n\n const getCellStyles = (isHeader = false) => ({\n backgroundColor: isHeader\n ? variant === 'minimal'\n ? 'transparent'\n : 'var(--lm-bg-paper)'\n : variant === 'minimal'\n ? 'transparent'\n : variant === 'soft'\n ? 'var(--lm-bg-paper)'\n : 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor:\n variant === 'outline'\n ? 'var(--lm-border-strong)'\n : variant === 'minimal'\n ? 'transparent'\n : 'var(--lm-border-light)',\n })\n\n const getRowStyles = (index: number, isSelected = false) => {\n const baseStyles = {\n backgroundColor: isSelected\n ? 'var(--lm-primary-50)'\n : (striped || variant === 'zebra') && index % 2 === 1\n ? 'var(--lm-bg-paper)'\n : variant === 'minimal'\n ? 'transparent'\n : variant === 'soft'\n ? 'var(--lm-bg-paper)'\n : 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n }\n\n if (isSelected) {\n return {\n ...baseStyles,\n borderColor: 'var(--lm-primary-200)',\n }\n }\n\n return baseStyles\n }\n\n const getPaginationStyles = () => ({\n backgroundColor:\n variant === 'minimal'\n ? 'transparent'\n : variant === 'soft'\n ? 'var(--lm-bg-paper)'\n : 'var(--lm-bg-elevated)',\n color: 'var(--lm-text-primary)',\n borderColor: variant === 'outline' ? 'var(--lm-border-strong)' : 'var(--lm-border-default)',\n boxShadow: variant === 'elevated' ? 'var(--lm-shadow-md)' : undefined,\n })\n\n const getButtonStyles = (disabled = false, active = false) => {\n if (disabled) {\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\n if (active) {\n return {\n backgroundColor: 'var(--lm-primary-500)',\n color: 'white',\n borderColor: 'var(--lm-primary-500)',\n }\n }\n\n return {\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n }\n }\n\n const getLoadingStyles = () => ({\n color: 'var(--lm-text-secondary)',\n })\n\n const getEmptyStyles = () => ({\n color: 'var(--lm-text-secondary)',\n })\n\n const tableClassName = cn('w-full', SIZE_TEXT_CLASSES[size], 'border-collapse', className)\n\n const isAllSelected = dataSource.length > 0 && selectedRowKeys.length === dataSource.length\n\n const isIndeterminate =\n selectedRowKeys.length > 0 && selectedRowKeys.length < dataSource.length\n\n const rootClassName = cn('space-y-4', fullHeight && 'h-full flex flex-col min-h-0')\n\n const tableContainerClassName = cn(\n fullHeight\n ? 'flex-1 min-h-0 overflow-auto'\n : cn('overflow-auto', loadMore?.enabled && 'max-h-96')\n )\n\n const wrapperVariantClasses = (() => {\n switch (variant) {\n case 'elevated':\n return 'rounded-2xl border shadow-lg'\n case 'outline':\n return 'rounded-xl border'\n case 'soft':\n return 'rounded-xl border'\n case 'minimal':\n return 'rounded-xl'\n case 'zebra':\n return 'rounded-xl border'\n default:\n return ''\n }\n })()\n\n return (\n <div className={rootClassName}>\n <div\n ref={containerRef}\n className={`${tableContainerClassName} ${wrapperVariantClasses}`}\n style={{ borderColor: 'var(--lm-border-default)' }}\n >\n <table className={tableClassName} style={getTableStyles()}>\n <thead className=\"sticky top-0 z-20\" style={getHeaderStyles()}>\n <tr>\n {selectable && (\n <th\n className={`${SIZE_TABLE_CONFIG[size].cellPadding} py-3 ${SIZE_TEXT_CLASSES[size]} text-left ${bordered ? 'border-r' : ''} font-semibold`}\n style={getCellStyles(true)}\n >\n <input\n type=\"checkbox\"\n checked={isAllSelected}\n ref={(input) => {\n if (input) input.indeterminate = isIndeterminate\n }}\n onChange={(e) => handleSelectAll(e.target.checked)}\n className=\"w-4 h-4\"\n style={{ accentColor: 'var(--lm-primary-500)' }}\n />\n </th>\n )}\n {columns.map((column) => (\n <th\n key={column.dataIndex}\n className={`${SIZE_TABLE_CONFIG[size].cellPadding} py-3 text-left ${bordered ? 'border-r' : ''} ${\n column.sorter ? 'cursor-pointer hover:bg-opacity-60' : ''\n } font-semibold`}\n style={{\n ...getCellStyles(true),\n width: column.width,\n textAlign: column.align || 'left',\n fontSize:\n size === 'xs'\n ? '0.8125rem'\n : size === 'sm'\n ? '0.875rem'\n : '0.9375rem',\n }}\n onClick={() => handleSort(column)}\n >\n <div className=\"flex items-center gap-2\">\n <span>{column.title}</span>\n {column.sorter && (\n <div className=\"flex flex-col -space-y-1\">\n <CaretUpIcon\n active={sortField === column.dataIndex && sortOrder === 'ascend'}\n />\n <CaretDownIcon\n active={sortField === column.dataIndex && sortOrder === 'descend'}\n />\n </div>\n )}\n </div>\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {loading ? (\n <tr>\n <td\n colSpan={columns.length + (selectable ? 1 : 0)}\n className={`px-4 py-8 text-center ${SIZE_TEXT_CLASSES[size]}`}\n style={getLoadingStyles()}\n >\n <div className=\"flex items-center justify-center gap-2\">\n <SpinnerIcon />\n Loading...\n </div>\n </td>\n </tr>\n ) : dataSource.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length + (selectable ? 1 : 0)}\n className={`px-4 py-8 text-center ${SIZE_TEXT_CLASSES[size]}`}\n style={getEmptyStyles()}\n >\n {emptyText}\n </td>\n </tr>\n ) : (\n dataSource.map((record, index) => {\n const key = getRowKey(record, index)\n const isSelected = selectedRowKeys.includes(key)\n const isLastRow = index === dataSource.length - 1\n\n return (\n <tr\n key={key}\n className={`${onRowClick ? 'cursor-pointer hover:bg-opacity-60' : ''} transition-colors border-t ${isLastRow ? 'border-b' : ''}`}\n style={{\n ...getRowStyles(index, isSelected),\n borderColor: 'var(--lm-border-light)',\n }}\n onClick={() => onRowClick?.(record, index)}\n >\n {selectable && (\n <td\n className={`${SIZE_TABLE_CONFIG[size].cellPadding} ${SIZE_TEXT_CLASSES[size]} ${bordered ? 'border-r' : ''}`}\n style={getCellStyles()}\n onClick={(e) => e.stopPropagation()}\n >\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={(e) => handleRowSelect(record, e.target.checked)}\n className=\"w-4 h-4\"\n style={{ accentColor: 'var(--lm-primary-500)' }}\n />\n </td>\n )}\n {columns.map((column) => (\n <td\n key={column.dataIndex}\n className={`${SIZE_TABLE_CONFIG[size].cellPadding} ${SIZE_TEXT_CLASSES[size]} ${bordered ? 'border-r' : ''}`}\n style={{\n ...getCellStyles(),\n textAlign: column.align || 'left',\n }}\n >\n {column.render\n ? column.render(\n getValueByDataIndex(record, column.dataIndex),\n record,\n index\n )\n : String(getValueByDataIndex(record, column.dataIndex) ?? '')}\n </td>\n ))}\n </tr>\n )\n })\n )}\n </tbody>\n </table>\n </div>\n\n {pagination?.showPagination && (\n <div\n className={`flex items-center justify-between ${paginationUiClasses[size].container} rounded-2xl border`}\n style={getPaginationStyles()}\n >\n {(() => {\n const maxButtons = 5\n const half = Math.floor(maxButtons / 2)\n let start = Math.max(1, currentPage - half)\n const end = Math.min(totalPages, start + maxButtons - 1)\n if (end - start + 1 < maxButtons) {\n start = Math.max(1, end - maxButtons + 1)\n }\n const pageNumbers = Array.from({ length: end - start + 1 }, (_, i) => start + i)\n\n return (\n <>\n <div className=\"flex items-center gap-4\">\n {pagination.showTotal && (\n <span\n className={paginationUiClasses[size].text}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n Total {pagination.total} items / {totalPages} pages\n </span>\n )}\n {pagination.showSizeChanger && (\n <div className=\"flex items-center gap-2\">\n <span\n className={paginationUiClasses[size].text}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n Show:\n </span>\n <select\n value={pageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n className={`${paginationUiClasses[size].select} border rounded-lg focus:ring-2 focus:ring-primary-400 focus:outline-none`}\n style={{\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n }}\n >\n {pagination.pageSizeOptions?.map((s) => (\n <option key={s} value={s}>\n {s} / page\n </option>\n ))}\n </select>\n </div>\n )}\n </div>\n\n <div className={`flex items-center ${paginationUiClasses[size].gap}`}>\n <button\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={currentPage <= 1}\n className={`${paginationUiClasses[size].control} border rounded-lg transition-colors`}\n style={getButtonStyles(currentPage <= 1)}\n aria-label=\"Previous page\"\n title=\"Previous page\"\n >\n <ChevronLeftIcon />\n </button>\n\n {pageNumbers.map((page) => (\n <button\n key={page}\n onClick={() => handlePageChange(page)}\n className={`${paginationUiClasses[size].control} border rounded-lg transition-colors ${currentPage === page ? 'font-medium' : ''}`}\n style={getButtonStyles(false, currentPage === page)}\n >\n {page}\n </button>\n ))}\n\n <button\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={currentPage >= totalPages}\n className={`${paginationUiClasses[size].control} border rounded-lg transition-colors`}\n style={getButtonStyles(currentPage >= totalPages)}\n aria-label=\"Next page\"\n title=\"Next page\"\n >\n <ChevronRightIcon />\n </button>\n\n {pagination.showQuickJumper && (\n <div className={`flex items-center ${paginationUiClasses[size].gap} ml-4`}>\n <span\n className={paginationUiClasses[size].text}\n style={{ color: 'var(--lm-text-secondary)' }}\n >\n Go to:\n </span>\n <input\n type=\"number\"\n min={1}\n max={totalPages}\n className={`${paginationUiClasses[size].input} border rounded-lg focus:ring-2 focus:ring-primary-400 focus:outline-none`}\n style={{\n backgroundColor: 'var(--lm-bg-paper)',\n color: 'var(--lm-text-primary)',\n borderColor: 'var(--lm-border-default)',\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n const page = Number(e.currentTarget.value)\n if (page >= 1 && page <= totalPages) {\n handlePageChange(page)\n }\n }\n }}\n />\n </div>\n )}\n </div>\n </>\n )\n })()}\n </div>\n )}\n\n {loadMore?.enabled && loadMore.hasMore && (\n <div className=\"text-center py-4\">\n <button\n onClick={loadMore.onLoadMore}\n disabled={loadMore.loading}\n className=\"px-6 py-2 text-sm border rounded-2xl transition-colors\"\n style={getButtonStyles(loadMore.loading)}\n >\n {loadMore.loading ? (\n <div className=\"flex items-center gap-2\">\n <SpinnerIcon />\n Loading...\n </div>\n ) : (\n 'Load more'\n )}\n </button>\n </div>\n )}\n </div>\n )\n}\n\nexport default memo(LMTable) as typeof LMTable\n"],"names":["jsx","jsxs","useState","useRef","useCallback","useEffect","cn","SIZE_TEXT_CLASSES","SIZE_TABLE_CONFIG","Fragment","memo"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import { memo, useState, useRef, useCallback, useEffect } from "react";
3
3
  import { b as SIZE_TEXT_CLASSES, g as SIZE_TABLE_CONFIG } from "./componentSizes-CdWNL526.js";
4
+ import { c as cn } from "./cn-wDEkOmcn.js";
4
5
  const CaretUpIcon = ({ active }) => /* @__PURE__ */ jsx(
5
6
  "svg",
6
7
  {
@@ -284,11 +285,13 @@ const LMTable = ({
284
285
  const getEmptyStyles = () => ({
285
286
  color: "var(--lm-text-secondary)"
286
287
  });
287
- const tableClassName = `w-full ${SIZE_TEXT_CLASSES[size]} border-collapse ${className}`.trim().replace(/\s+/g, " ");
288
+ const tableClassName = cn("w-full", SIZE_TEXT_CLASSES[size], "border-collapse", className);
288
289
  const isAllSelected = dataSource.length > 0 && selectedRowKeys.length === dataSource.length;
289
290
  const isIndeterminate = selectedRowKeys.length > 0 && selectedRowKeys.length < dataSource.length;
290
- const rootClassName = `space-y-4 ${fullHeight ? "h-full flex flex-col min-h-0" : ""}`.trim().replace(/\s+/g, " ");
291
- const tableContainerClassName = `${fullHeight ? "flex-1 min-h-0 overflow-auto" : `overflow-auto ${(loadMore == null ? void 0 : loadMore.enabled) ? "max-h-96" : ""}`}`.trim().replace(/\s+/g, " ");
291
+ const rootClassName = cn("space-y-4", fullHeight && "h-full flex flex-col min-h-0");
292
+ const tableContainerClassName = cn(
293
+ fullHeight ? "flex-1 min-h-0 overflow-auto" : cn("overflow-auto", (loadMore == null ? void 0 : loadMore.enabled) && "max-h-96")
294
+ );
292
295
  const wrapperVariantClasses = (() => {
293
296
  switch (variant) {
294
297
  case "elevated":
@@ -591,4 +594,4 @@ const LMTable_default = memo(LMTable);
591
594
  export {
592
595
  LMTable_default as L
593
596
  };
594
- //# sourceMappingURL=LMTable-Cp8HZqiV.js.map
597
+ //# sourceMappingURL=LMTable-IGmHFhnV.js.map