@sellmate/design-system 0.0.48 → 0.0.50

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 (235) hide show
  1. package/dist/cjs/design-system.cjs.js +2 -2
  2. package/dist/cjs/{index-DXo1Fhkn.js → index-Bxead0A0.js} +4 -2
  3. package/dist/cjs/{index-DXo1Fhkn.js.map → index-Bxead0A0.js.map} +1 -1
  4. package/dist/cjs/loader.cjs.js +2 -2
  5. package/dist/{esm/color-CgyTlXBV.js → cjs/resolveColor-DxvExwgo.js} +17 -4
  6. package/dist/{esm/resolveColor-CswQ9y2Q.js.map → cjs/resolveColor-DxvExwgo.js.map} +1 -1
  7. package/dist/cjs/sd-badge.cjs.entry.js +3 -4
  8. package/dist/cjs/sd-badge.entry.cjs.js.map +1 -1
  9. package/dist/cjs/sd-button.sd-checkbox.sd-guide.sd-icon.sd-input.sd-loading-spinner.sd-pagination.sd-portal.sd-radio-group.sd-select.sd-select-option.sd-table-backup.sd-tooltip.sd-tooltip-portal.entry.cjs.js.map +1 -0
  10. package/dist/cjs/{sd-button_12.cjs.entry.js → sd-button_14.cjs.entry.js} +356 -105
  11. package/dist/cjs/sd-card.cjs.entry.js +2 -2
  12. package/dist/cjs/sd-date-box.cjs.entry.js +1 -1
  13. package/dist/cjs/sd-date-picker.cjs.entry.js +2 -2
  14. package/dist/cjs/sd-date-range-picker.cjs.entry.js +3 -3
  15. package/dist/cjs/sd-modal-card.cjs.entry.js +2 -3
  16. package/dist/cjs/sd-modal-card.entry.cjs.js.map +1 -1
  17. package/dist/cjs/sd-popover.cjs.entry.js +4 -4
  18. package/dist/cjs/sd-progress.cjs.entry.js +3 -3
  19. package/dist/cjs/sd-select-multiple-group.cjs.entry.js +1 -1
  20. package/dist/cjs/sd-select-multiple.cjs.entry.js +3 -3
  21. package/dist/cjs/sd-select-option-group.cjs.entry.js +4 -4
  22. package/dist/cjs/sd-table.cjs.entry.js +1 -1
  23. package/dist/cjs/sd-tag.cjs.entry.js +2 -2
  24. package/dist/cjs/sd-tbody_3.cjs.entry.js +4 -4
  25. package/dist/cjs/sd-td.cjs.entry.js +3 -3
  26. package/dist/cjs/{tooltipArrow-DNiGFQNW.js → tooltipArrow-C7cIAuTo.js} +3 -3
  27. package/dist/cjs/{tooltipArrow-DNiGFQNW.js.map → tooltipArrow-C7cIAuTo.js.map} +1 -1
  28. package/dist/collection/collection-manifest.json +1 -0
  29. package/dist/collection/components/sd-badge/sd-badge.js +1 -1
  30. package/dist/collection/components/sd-card/sd-card.js +1 -1
  31. package/dist/collection/components/sd-date-picker/sd-date-picker.js +1 -1
  32. package/dist/collection/components/sd-date-range-picker/sd-date-range-picker.js +2 -2
  33. package/dist/collection/components/sd-guide/sd-guide.js +3 -3
  34. package/dist/collection/components/sd-icon/sd-icon.js +1 -1
  35. package/dist/collection/components/sd-input/sd-input.js +2 -2
  36. package/dist/collection/components/sd-loading-spinner/sd-loading-spinner.js +1 -1
  37. package/dist/collection/components/sd-pagination/sd-pagination.js +2 -2
  38. package/dist/collection/components/sd-popover/sd-popover.js +2 -2
  39. package/dist/collection/components/sd-portal/sd-portal.js +1 -1
  40. package/dist/collection/components/sd-progress/sd-progress.js +2 -2
  41. package/dist/collection/components/sd-radio-group/sd-radio-group.css +76 -0
  42. package/dist/collection/components/sd-radio-group/sd-radio-group.js +214 -0
  43. package/dist/collection/components/sd-radio-group/sd-radio-group.js.map +1 -0
  44. package/dist/collection/components/sd-select/sd-select-option/sd-select-option.js +1 -1
  45. package/dist/collection/components/sd-select-multiple/sd-select-multiple.js +2 -2
  46. package/dist/collection/components/sd-select-multiple-group/sd-select-option-group/sd-select-option-group.js +3 -3
  47. package/dist/collection/components/sd-table/sd-tbody/sd-tbody.js +1 -1
  48. package/dist/collection/components/sd-table/sd-td/sd-td.js +2 -2
  49. package/dist/collection/components/sd-table/sd-th/sd-th.js +1 -1
  50. package/dist/collection/components/sd-table/sd-tr/sd-tr.js +1 -1
  51. package/dist/collection/components/sd-table-backup/sd-table-backup.css +17 -15
  52. package/dist/collection/components/sd-table-backup/sd-table-backup.js +194 -87
  53. package/dist/collection/components/sd-table-backup/sd-table-backup.js.map +1 -1
  54. package/dist/collection/components/sd-tag/sd-tag.js +1 -1
  55. package/dist/collection/components/sd-tooltip/sd-tooltip.js +4 -4
  56. package/dist/collection/components/sd-tooltip-portal/sd-tooltip-portal.js +1 -1
  57. package/dist/components/index.js +1 -1
  58. package/dist/components/{p-lS2AF6uZ.js → p-BIw-hGVo.js} +6 -6
  59. package/dist/components/{p-lS2AF6uZ.js.map → p-BIw-hGVo.js.map} +1 -1
  60. package/dist/components/{p-DsXAGqf9.js → p-BSUHSOXX.js} +4 -4
  61. package/dist/components/{p-DsXAGqf9.js.map → p-BSUHSOXX.js.map} +1 -1
  62. package/dist/components/{p-C9qV_qzP.js → p-BozMKCTh.js} +6 -6
  63. package/dist/components/{p-C9qV_qzP.js.map → p-BozMKCTh.js.map} +1 -1
  64. package/dist/components/{p-BvuTaRpn.js → p-BpNH68jy.js} +3 -3
  65. package/dist/components/{p-BvuTaRpn.js.map → p-BpNH68jy.js.map} +1 -1
  66. package/dist/components/{p-Cb33bhDR.js → p-C0CLTo3o.js} +4 -4
  67. package/dist/components/{p-Cb33bhDR.js.map → p-C0CLTo3o.js.map} +1 -1
  68. package/dist/components/{p-BlDZogGu.js → p-C171iavd.js} +4 -4
  69. package/dist/components/{p-BlDZogGu.js.map → p-C171iavd.js.map} +1 -1
  70. package/dist/components/{p-CIkSynaQ.js → p-C930Kn80.js} +4 -4
  71. package/dist/components/{p-CIkSynaQ.js.map → p-C930Kn80.js.map} +1 -1
  72. package/dist/components/{p-DWfls6IE.js → p-Cq-Qitdj.js} +11 -11
  73. package/dist/components/{p-DWfls6IE.js.map → p-Cq-Qitdj.js.map} +1 -1
  74. package/dist/components/{p-D2rvzY8X.js → p-D2YMmHfl.js} +4 -4
  75. package/dist/components/{p-D2rvzY8X.js.map → p-D2YMmHfl.js.map} +1 -1
  76. package/dist/components/{p-B6GiEilD.js → p-D2aGA3BX.js} +4 -4
  77. package/dist/components/{p-B6GiEilD.js.map → p-D2aGA3BX.js.map} +1 -1
  78. package/dist/components/{p-t7JZlmXM.js → p-D8f0ASS6.js} +4 -4
  79. package/dist/components/{p-t7JZlmXM.js.map → p-D8f0ASS6.js.map} +1 -1
  80. package/dist/components/{p-CMcI4ZlP.js → p-DC5fpNnQ.js} +4 -4
  81. package/dist/components/{p-CMcI4ZlP.js.map → p-DC5fpNnQ.js.map} +1 -1
  82. package/dist/components/{p-Cafw-qR4.js → p-DY6t0qQj.js} +3 -3
  83. package/dist/components/{p-Cafw-qR4.js.map → p-DY6t0qQj.js.map} +1 -1
  84. package/dist/components/{p-DCDoqfn8.js → p-LziGti_p.js} +4 -4
  85. package/dist/components/{p-DCDoqfn8.js.map → p-LziGti_p.js.map} +1 -1
  86. package/dist/components/{p-WhZES_rm.js → p-RZm_wGW3.js} +6 -6
  87. package/dist/components/{p-WhZES_rm.js.map → p-RZm_wGW3.js.map} +1 -1
  88. package/dist/components/{p-CbnL1UUF.js → p-TFWJruz2.js} +4 -3
  89. package/dist/components/p-TFWJruz2.js.map +1 -0
  90. package/dist/components/{p-Bn_wuPsh.js → p-X8rQBuZk.js} +8 -8
  91. package/dist/components/{p-Bn_wuPsh.js.map → p-X8rQBuZk.js.map} +1 -1
  92. package/dist/components/{p-BBhUxTuK.js → p-_spt_8fG.js} +9 -9
  93. package/dist/components/{p-BBhUxTuK.js.map → p-_spt_8fG.js.map} +1 -1
  94. package/dist/components/{p-wA4KCOG0.js → p-gnOKrd57.js} +3 -3
  95. package/dist/components/{p-wA4KCOG0.js.map → p-gnOKrd57.js.map} +1 -1
  96. package/dist/components/sd-badge.js +2 -2
  97. package/dist/components/sd-button.js +1 -1
  98. package/dist/components/sd-card.js +2 -2
  99. package/dist/components/sd-checkbox.js +1 -1
  100. package/dist/components/sd-date-box.js +1 -1
  101. package/dist/components/sd-date-picker.js +6 -6
  102. package/dist/components/sd-date-range-picker.js +7 -7
  103. package/dist/components/sd-guide.js +7 -7
  104. package/dist/components/sd-icon.js +1 -1
  105. package/dist/components/sd-input.js +1 -1
  106. package/dist/components/sd-loading-spinner.js +1 -1
  107. package/dist/components/sd-modal-card.js +3 -3
  108. package/dist/components/sd-pagination.js +1 -1
  109. package/dist/components/sd-popover.js +7 -7
  110. package/dist/components/sd-portal.js +1 -1
  111. package/dist/components/sd-progress.js +3 -3
  112. package/dist/components/sd-radio-group.d.ts +11 -0
  113. package/dist/components/sd-radio-group.js +99 -0
  114. package/dist/components/sd-radio-group.js.map +1 -0
  115. package/dist/components/sd-select-multiple-group.js +7 -7
  116. package/dist/components/sd-select-multiple.js +9 -9
  117. package/dist/components/sd-select-option-group.js +1 -1
  118. package/dist/components/sd-select-option.js +1 -1
  119. package/dist/components/sd-select.js +1 -1
  120. package/dist/components/sd-table-backup.js +206 -99
  121. package/dist/components/sd-table-backup.js.map +1 -1
  122. package/dist/components/sd-table.js +14 -14
  123. package/dist/components/sd-tag.js +2 -2
  124. package/dist/components/sd-tbody.js +1 -1
  125. package/dist/components/sd-td.js +3 -3
  126. package/dist/components/sd-th.js +1 -1
  127. package/dist/components/sd-tooltip-portal.js +1 -1
  128. package/dist/components/sd-tooltip.js +1 -1
  129. package/dist/components/sd-tr.js +1 -1
  130. package/dist/design-system/design-system.esm.js +1 -1
  131. package/dist/design-system/{p-390283f7.entry.js → p-037de6ce.entry.js} +2 -2
  132. package/dist/design-system/p-154958ba.entry.js +2 -0
  133. package/dist/design-system/p-1b6aec43.entry.js +2 -0
  134. package/dist/design-system/{p-ce8fe1fd.entry.js → p-1e175d35.entry.js} +2 -2
  135. package/dist/design-system/{p-826c6517.entry.js → p-2285c061.entry.js} +2 -2
  136. package/dist/design-system/p-24ef1055.entry.js +2 -0
  137. package/dist/design-system/p-24ef1055.entry.js.map +1 -0
  138. package/dist/design-system/{p-d4b5575e.entry.js → p-267985b3.entry.js} +2 -2
  139. package/dist/design-system/p-328d7e6c.entry.js +2 -0
  140. package/dist/design-system/p-4828e65b.entry.js +2 -0
  141. package/dist/design-system/{p-871c8d66.entry.js → p-6d81e6f8.entry.js} +2 -2
  142. package/dist/design-system/p-6f16399e.entry.js +2 -0
  143. package/dist/design-system/{p-6320b9c6.entry.js.map → p-6f16399e.entry.js.map} +1 -1
  144. package/dist/design-system/{p-3574f319.entry.js → p-8d1a2a13.entry.js} +2 -2
  145. package/dist/design-system/{p-CgyTlXBV.js → p-BYf-ybt2.js} +2 -2
  146. package/dist/design-system/{p-BoLmB6pG.js.map → p-BYf-ybt2.js.map} +1 -1
  147. package/dist/design-system/p-ClyGLKUd.js +3 -0
  148. package/dist/design-system/{p-B2T3tS5r.js.map → p-ClyGLKUd.js.map} +1 -1
  149. package/dist/design-system/p-DXZjHQmQ.js +2 -0
  150. package/dist/design-system/{p-BE6EMCXm.js.map → p-DXZjHQmQ.js.map} +1 -1
  151. package/dist/design-system/p-a73bb448.entry.js +2 -0
  152. package/dist/design-system/p-a73bb448.entry.js.map +1 -0
  153. package/dist/design-system/p-b892a722.entry.js +2 -0
  154. package/dist/design-system/p-b892a722.entry.js.map +1 -0
  155. package/dist/design-system/{p-8734ded6.entry.js → p-c7e8a2c0.entry.js} +2 -2
  156. package/dist/design-system/p-ecb38b6a.entry.js +2 -0
  157. package/dist/design-system/{p-db0f705b.entry.js.map → p-ecb38b6a.entry.js.map} +1 -1
  158. package/dist/design-system/sd-badge.entry.esm.js.map +1 -1
  159. package/dist/design-system/sd-button.sd-checkbox.sd-guide.sd-icon.sd-input.sd-loading-spinner.sd-pagination.sd-portal.sd-radio-group.sd-select.sd-select-option.sd-table-backup.sd-tooltip.sd-tooltip-portal.entry.esm.js.map +1 -0
  160. package/dist/design-system/sd-modal-card.entry.esm.js.map +1 -1
  161. package/dist/esm/design-system.js +3 -3
  162. package/dist/esm/{index-B2T3tS5r.js → index-ClyGLKUd.js} +4 -3
  163. package/dist/esm/{index-B2T3tS5r.js.map → index-ClyGLKUd.js.map} +1 -1
  164. package/dist/esm/loader.js +3 -3
  165. package/dist/{cjs/color-Oz29vj7L.js → esm/resolveColor-BYf-ybt2.js} +14 -6
  166. package/dist/{cjs/resolveColor-CauSLF0s.js.map → esm/resolveColor-BYf-ybt2.js.map} +1 -1
  167. package/dist/esm/sd-badge.entry.js +3 -4
  168. package/dist/esm/sd-badge.entry.js.map +1 -1
  169. package/dist/esm/sd-button.sd-checkbox.sd-guide.sd-icon.sd-input.sd-loading-spinner.sd-pagination.sd-portal.sd-radio-group.sd-select.sd-select-option.sd-table-backup.sd-tooltip.sd-tooltip-portal.entry.js.map +1 -0
  170. package/dist/esm/{sd-button_12.entry.js → sd-button_14.entry.js} +355 -106
  171. package/dist/esm/sd-card.entry.js +2 -2
  172. package/dist/esm/sd-date-box.entry.js +1 -1
  173. package/dist/esm/sd-date-picker.entry.js +2 -2
  174. package/dist/esm/sd-date-range-picker.entry.js +3 -3
  175. package/dist/esm/sd-modal-card.entry.js +2 -3
  176. package/dist/esm/sd-modal-card.entry.js.map +1 -1
  177. package/dist/esm/sd-popover.entry.js +4 -4
  178. package/dist/esm/sd-progress.entry.js +3 -3
  179. package/dist/esm/sd-select-multiple-group.entry.js +1 -1
  180. package/dist/esm/sd-select-multiple.entry.js +3 -3
  181. package/dist/esm/sd-select-option-group.entry.js +4 -4
  182. package/dist/esm/sd-table.entry.js +1 -1
  183. package/dist/esm/sd-tag.entry.js +2 -2
  184. package/dist/esm/sd-tbody_3.entry.js +4 -4
  185. package/dist/esm/sd-td.entry.js +3 -3
  186. package/dist/esm/{tooltipArrow-Pa2XQhpp.js → tooltipArrow-BwO7_hdW.js} +3 -3
  187. package/dist/esm/{tooltipArrow-Pa2XQhpp.js.map → tooltipArrow-BwO7_hdW.js.map} +1 -1
  188. package/dist/types/components/sd-radio-group/sd-radio-group.d.ts +24 -0
  189. package/dist/types/components/sd-table-backup/sd-table-backup.d.ts +15 -0
  190. package/dist/types/components.d.ts +59 -0
  191. package/hydrate/index.js +320 -123
  192. package/hydrate/index.mjs +320 -123
  193. package/package.json +95 -95
  194. package/dist/cjs/color-Oz29vj7L.js.map +0 -1
  195. package/dist/cjs/resolveColor-CauSLF0s.js +0 -18
  196. package/dist/cjs/sd-button.sd-checkbox.sd-icon.sd-input.sd-loading-spinner.sd-pagination.sd-portal.sd-select.sd-select-option.sd-table-backup.sd-tooltip.sd-tooltip-portal.entry.cjs.js.map +0 -1
  197. package/dist/cjs/sd-guide.cjs.entry.js +0 -85
  198. package/dist/cjs/sd-guide.entry.cjs.js.map +0 -1
  199. package/dist/components/p-CbnL1UUF.js.map +0 -1
  200. package/dist/design-system/p-043b7fd1.entry.js +0 -2
  201. package/dist/design-system/p-043b7fd1.entry.js.map +0 -1
  202. package/dist/design-system/p-059ca6cb.entry.js +0 -2
  203. package/dist/design-system/p-0d776157.entry.js +0 -2
  204. package/dist/design-system/p-0d776157.entry.js.map +0 -1
  205. package/dist/design-system/p-4386db36.entry.js +0 -2
  206. package/dist/design-system/p-4386db36.entry.js.map +0 -1
  207. package/dist/design-system/p-6320b9c6.entry.js +0 -2
  208. package/dist/design-system/p-7b4fe5bf.entry.js +0 -2
  209. package/dist/design-system/p-7e8db11c.entry.js +0 -2
  210. package/dist/design-system/p-B2T3tS5r.js +0 -3
  211. package/dist/design-system/p-BE6EMCXm.js +0 -2
  212. package/dist/design-system/p-BoLmB6pG.js +0 -2
  213. package/dist/design-system/p-CgyTlXBV.js.map +0 -1
  214. package/dist/design-system/p-d4e043c5.entry.js +0 -2
  215. package/dist/design-system/p-db0f705b.entry.js +0 -2
  216. package/dist/design-system/p-f9d01bdb.entry.js +0 -2
  217. package/dist/design-system/p-f9d01bdb.entry.js.map +0 -1
  218. package/dist/design-system/sd-button.sd-checkbox.sd-icon.sd-input.sd-loading-spinner.sd-pagination.sd-portal.sd-select.sd-select-option.sd-table-backup.sd-tooltip.sd-tooltip-portal.entry.esm.js.map +0 -1
  219. package/dist/design-system/sd-guide.entry.esm.js.map +0 -1
  220. package/dist/esm/color-CgyTlXBV.js.map +0 -1
  221. package/dist/esm/resolveColor-CswQ9y2Q.js +0 -16
  222. package/dist/esm/sd-button.sd-checkbox.sd-icon.sd-input.sd-loading-spinner.sd-pagination.sd-portal.sd-select.sd-select-option.sd-table-backup.sd-tooltip.sd-tooltip-portal.entry.js.map +0 -1
  223. package/dist/esm/sd-guide.entry.js +0 -83
  224. package/dist/esm/sd-guide.entry.js.map +0 -1
  225. /package/dist/design-system/{p-390283f7.entry.js.map → p-037de6ce.entry.js.map} +0 -0
  226. /package/dist/design-system/{p-059ca6cb.entry.js.map → p-154958ba.entry.js.map} +0 -0
  227. /package/dist/design-system/{p-7b4fe5bf.entry.js.map → p-1b6aec43.entry.js.map} +0 -0
  228. /package/dist/design-system/{p-ce8fe1fd.entry.js.map → p-1e175d35.entry.js.map} +0 -0
  229. /package/dist/design-system/{p-826c6517.entry.js.map → p-2285c061.entry.js.map} +0 -0
  230. /package/dist/design-system/{p-d4b5575e.entry.js.map → p-267985b3.entry.js.map} +0 -0
  231. /package/dist/design-system/{p-7e8db11c.entry.js.map → p-328d7e6c.entry.js.map} +0 -0
  232. /package/dist/design-system/{p-d4e043c5.entry.js.map → p-4828e65b.entry.js.map} +0 -0
  233. /package/dist/design-system/{p-871c8d66.entry.js.map → p-6d81e6f8.entry.js.map} +0 -0
  234. /package/dist/design-system/{p-3574f319.entry.js.map → p-8d1a2a13.entry.js.map} +0 -0
  235. /package/dist/design-system/{p-8734ded6.entry.js.map → p-c7e8a2c0.entry.js.map} +0 -0
@@ -1,17 +1,17 @@
1
- import { p as proxyCustomElement, H, d as createEvent, h, c as Host } from './p-CbnL1UUF.js';
2
- import { d as defineCustomElement$c } from './p-CMcI4ZlP.js';
3
- import { d as defineCustomElement$b } from './p-D2rvzY8X.js';
4
- import { d as defineCustomElement$a } from './p-B6GiEilD.js';
5
- import { d as defineCustomElement$9 } from './p-WhZES_rm.js';
6
- import { d as defineCustomElement$8 } from './p-CIkSynaQ.js';
7
- import { d as defineCustomElement$7 } from './p-C9qV_qzP.js';
8
- import { d as defineCustomElement$6 } from './p-DCDoqfn8.js';
9
- import { d as defineCustomElement$5 } from './p-BBhUxTuK.js';
10
- import { d as defineCustomElement$4 } from './p-lS2AF6uZ.js';
11
- import { d as defineCustomElement$3 } from './p-DWfls6IE.js';
12
- import { d as defineCustomElement$2 } from './p-Cb33bhDR.js';
1
+ import { p as proxyCustomElement, H, d as createEvent, e as readTask, h, c as Host } from './p-TFWJruz2.js';
2
+ import { d as defineCustomElement$c } from './p-DC5fpNnQ.js';
3
+ import { d as defineCustomElement$b } from './p-D2YMmHfl.js';
4
+ import { d as defineCustomElement$a } from './p-D2aGA3BX.js';
5
+ import { d as defineCustomElement$9 } from './p-RZm_wGW3.js';
6
+ import { d as defineCustomElement$8 } from './p-C930Kn80.js';
7
+ import { d as defineCustomElement$7 } from './p-BozMKCTh.js';
8
+ import { d as defineCustomElement$6 } from './p-LziGti_p.js';
9
+ import { d as defineCustomElement$5 } from './p-_spt_8fG.js';
10
+ import { d as defineCustomElement$4 } from './p-BIw-hGVo.js';
11
+ import { d as defineCustomElement$3 } from './p-Cq-Qitdj.js';
12
+ import { d as defineCustomElement$2 } from './p-C0CLTo3o.js';
13
13
 
14
- const sdTableBackupCss = ".sd-table__wrapper .sd-table__container .sd-table__middle{overflow-y:auto;overflow-x:hidden;scroll-behavior:smooth}.sd-table__wrapper .sd-table__container .sd-table__middle::-webkit-scrollbar{opacity:0;background:#e5e5e5}.sd-table__wrapper .sd-table__container .sd-table__middle::-webkit-scrollbar:horizontal{height:8px}.sd-table__wrapper .sd-table__container .sd-table__middle::-webkit-scrollbar:vertical{width:8px}.sd-table__wrapper .sd-table__container .sd-table__middle::-webkit-scrollbar-thumb{height:80px;background-color:#cccccc;border-radius:4px}.sd-table__wrapper .sd-table__container .sd-table__middle::-webkit-scrollbar-track{background-color:transparent}.sd-table__wrapper{height:var(--table-height, auto);width:var(--table-width, 100%);color:#222222}.sd-table__wrapper .sd-table__container{width:100%;height:var(--table-container-height, auto);position:relative;border:1px solid #e1e1e1;border-radius:8px;font-size:12px;overflow:hidden;background:#ffffff}.sd-table__wrapper .sd-table__container .sd-table__middle{overflow:auto;will-change:scroll-position}.sd-table__wrapper .sd-table__container .sd-table__middle--scrollable{height:var(--table-container-height, auto)}.sd-table__wrapper .sd-table__container .sd-table__middle--loading{overflow:hidden !important}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table{background-color:white;display:table;width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody.sd-table-tbody--virtual-scroll{position:relative;height:var(--total-virtual-height, --table-container-height, auto)}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody.sd-table-tbody--virtual-scroll tr:not([aria-hidden=true]){width:100%}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody.sd-table-tbody--virtual-scroll tr[aria-hidden=true]{padding:0;border:none}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody.sd-table-tbody--virtual-scroll tr[aria-hidden=true]:not(.sd-table__virtual-row-spacer) td{display:none}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--selectable td.sd-td--selected,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--selectable th.sd-th--selected{width:52px !important;max-width:52px !important;min-width:52px !important;padding:0 10px 0 24px;text-align:left}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-header thead{position:sticky;top:0;z-index:120}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column th.sticky-left,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column th.sticky-right{position:sticky;background-color:#f5faff;z-index:110 !important}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column td.sticky-left,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column td.sticky-right{position:sticky;background-color:white;z-index:100 !important}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column .sticky-left{left:var(--sticky-left-offset, 0)}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column .sticky-right{right:var(--sticky-right-offset, 0)}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column th.sticky-cell{position:sticky;z-index:102;background-color:#f5faff}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column td.sticky-cell{position:sticky;z-index:101;background-color:white}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-left th.sticky-left-edge,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-left td.sticky-left-edge{overflow:visible}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-left th.sticky-left-edge:after,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-left td.sticky-left-edge:after{content:\"\";position:absolute;top:0;left:100%;right:-20px;width:20px;height:100%;z-index:101 !important;box-shadow:inset 12px 0 20px -25px;opacity:1;pointer-events:none}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-right th.sticky-right-edge,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-right td.sticky-right-edge{overflow:visible}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-right th.sticky-right-edge:after,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-right td.sticky-right-edge:after{content:\"\";position:absolute;top:0;left:-20px;width:20px;height:100%;z-index:101 !important;box-shadow:inset -12px 0 20px -25px;opacity:1;pointer-events:none}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--no-data thead{opacity:0.4}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--no-data thead tr th.sd-th{border-bottom:1px solid rgba(225, 225, 225, 0.4) !important}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table sd-td,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table sd-th,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table .sd-th__content--label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead{height:36px}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr{width:100%}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr th{background:#f5faff;height:36px;padding:0 16px;font-weight:500;vertical-align:middle;border-bottom:1px solid #e1e1e1;-webkit-user-select:none;user-select:none;position:relative}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr th.sd-th .sd-th__content{display:flex;flex-flow:row nowrap;align-items:center;gap:4px}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr th.sd-th .sd-th__content--left{justify-content:flex-start}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr th.sd-th .sd-th__content--center{justify-content:center}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr th.sd-th .sd-th__content--right{justify-content:flex-end}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr th.sd-th .sd-th__resizer{position:absolute;top:50%;right:0;transform:translateY(-50%);width:4px;height:16px;cursor:col-resize;z-index:3;border-left:1px solid #cccccc;border-right:1px solid #cccccc}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody .sd-table__loading{position:absolute;top:0;left:0;width:var(--table-width, 100%);height:var(--table-container-height, 100%);min-height:var(--table-container-height, 100%);background:rgba(255, 255, 255, 0.6);z-index:200;display:flex;align-items:center;justify-content:center}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody tr td{height:44px;padding:0 16px;border-bottom:1px solid #e1e1e1;background:white;vertical-align:middle}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody tr td.sd-td--left{text-align:left}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody tr td.sd-td--center{text-align:center}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody tr td.sd-td--right{text-align:right}.sd-table__wrapper .sd-table__container .sd-table__bottom{background:white;text-align:center}.sd-table__wrapper .sd-table__container .sd-table__bottom .sd-table__no-data{padding-top:15%;color:#888888}.sd-table__wrapper .sd-table__pagination{position:relative;background:#f9f9f9;height:48px;display:flex;align-items:center;justify-content:center;border:1px solid #e1e1e1;border-top:none;border-radius:8px}.sd-table__wrapper .sd-table__pagination sd-select{position:absolute;right:10px;top:50%;transform:translateY(-50%)}.sd-table__wrapper .sd-table__virtual-spacer,.sd-table__wrapper .sd-table__virtual-row-spacer{padding:0}.sd-table__wrapper .sd-table__virtual-spacer td,.sd-table__wrapper .sd-table__virtual-row-spacer td{padding:0;border:none}.sd-table__wrapper .sd-table__virtual-spacer .sd-table__skeleton,.sd-table__wrapper .sd-table__virtual-row-spacer .sd-table__skeleton{width:100%;height:100%;background-image:repeating-linear-gradient(0deg, rgba(246, 246, 246, 0.3) 0px, rgba(225, 225, 225, 0.5) calc(var(--row-height, 44px) / 2), rgba(246, 246, 246, 0.3) var(--row-height, 44px));background-size:100% 200%;animation:skeleton-loading 1.5s ease-in-out infinite;position:relative}.sd-table__wrapper .sd-table__virtual-spacer .sd-table__skeleton::before,.sd-table__wrapper .sd-table__virtual-row-spacer .sd-table__skeleton::before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background-image:repeating-linear-gradient(to bottom, transparent 0, transparent calc(var(--row-height, 44px) - 1px), #e1e1e1 calc(var(--row-height, 44px) - 1px), #e1e1e1 var(--row-height, 44px));pointer-events:none}.sd-table__wrapper .sd-table__skeleton-cell{width:100%;height:20px;background:linear-gradient(90deg, rgba(246, 246, 246, 0.3) 0%, rgba(225, 225, 225, 0.5) 50%, rgba(246, 246, 246, 0.3) 100%);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px}@keyframes skeleton-loading{0%{background-position:0% 0%}50%{background-position:100% 100%}100%{background-position:0% 0%}}";
14
+ const sdTableBackupCss = ".sd-table__wrapper .sd-table__container .sd-table__middle{overflow-y:auto;overflow-x:hidden;scroll-behavior:smooth}.sd-table__wrapper .sd-table__container .sd-table__middle::-webkit-scrollbar{opacity:0;background:#e5e5e5}.sd-table__wrapper .sd-table__container .sd-table__middle::-webkit-scrollbar:horizontal{height:8px}.sd-table__wrapper .sd-table__container .sd-table__middle::-webkit-scrollbar:vertical{width:8px}.sd-table__wrapper .sd-table__container .sd-table__middle::-webkit-scrollbar-thumb{height:80px;background-color:#cccccc;border-radius:4px}.sd-table__wrapper .sd-table__container .sd-table__middle::-webkit-scrollbar-track{background-color:transparent}.sd-table__wrapper{height:var(--table-height, auto);width:var(--table-width, 100%);color:#222222}.sd-table__wrapper .sd-table__container{width:100%;height:var(--table-container-height, auto);position:relative;border:1px solid #e1e1e1;border-radius:8px;font-size:12px;overflow:hidden;background:#ffffff}.sd-table__wrapper .sd-table__container .sd-table__middle{overflow:auto;will-change:scroll-position;min-height:var(--table-container-height, auto)}.sd-table__wrapper .sd-table__container .sd-table__middle--scrollable{height:var(--table-container-height, auto)}.sd-table__wrapper .sd-table__container .sd-table__middle--loading{overflow:hidden !important;pointer-events:none}.sd-table__wrapper .sd-table__container .sd-table__middle--loading__spinner{position:absolute;top:0;left:0;width:100%;height:var(--table-container-height, 100%);min-height:var(--table-container-height, 100%);background:rgba(255, 255, 255, 0.6);z-index:200;display:flex;align-items:center;justify-content:center}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table{background-color:white;display:table;width:100%;border-collapse:separate;border-spacing:0;table-layout:fixed}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody.sd-table-tbody--virtual-scroll{position:relative;height:var(--total-virtual-height, --table-container-height, auto)}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody.sd-table-tbody--virtual-scroll tr:not([aria-hidden=true]){width:100%}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody.sd-table-tbody--virtual-scroll tr[aria-hidden=true]{padding:0;border:none}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody.sd-table-tbody--virtual-scroll tr[aria-hidden=true]:not(.sd-table__virtual-row-spacer) td{display:none}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--selectable td.sd-td--selected,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--selectable th.sd-th--selected{width:52px !important;max-width:52px !important;min-width:52px !important;padding:0 10px 0 24px;text-align:left}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-header thead{position:sticky;top:0;z-index:120}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column th.sticky-left,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column th.sticky-right{position:sticky;background-color:#f5faff;z-index:110 !important}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column td.sticky-left,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column td.sticky-right{position:sticky;background-color:white;z-index:100 !important}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column .sticky-left{left:var(--sticky-left-offset, 0)}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column .sticky-right{right:var(--sticky-right-offset, 0)}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column th.sticky-cell{position:sticky;z-index:102;background-color:#f5faff}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--sticky-column td.sticky-cell{position:sticky;z-index:101;background-color:white}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-left th.sticky-left-edge,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-left td.sticky-left-edge{overflow:visible}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-left th.sticky-left-edge:after,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-left td.sticky-left-edge:after{content:\"\";position:absolute;top:0;left:100%;right:-20px;width:20px;height:100%;z-index:101 !important;box-shadow:inset 12px 0 20px -25px;opacity:1;pointer-events:none}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-right th.sticky-right-edge,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-right td.sticky-right-edge{overflow:visible}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-right th.sticky-right-edge:after,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--scrolled-right td.sticky-right-edge:after{content:\"\";position:absolute;top:0;left:-20px;width:20px;height:100%;z-index:101 !important;box-shadow:inset -12px 0 20px -25px;opacity:1;pointer-events:none}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--no-data thead{opacity:0.4}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table--no-data thead tr th.sd-th{border-bottom:1px solid rgba(225, 225, 225, 0.4) !important}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table sd-td,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table sd-th,.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table .sd-th__content--label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead{height:36px}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr{width:100%}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr th{background:#f5faff;height:36px;padding:0 16px;font-weight:500;vertical-align:middle;border-bottom:1px solid #e1e1e1;-webkit-user-select:none;user-select:none;position:relative}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr th.sd-th .sd-th__content{display:flex;flex-flow:row nowrap;align-items:center;gap:4px}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr th.sd-th .sd-th__content--left{justify-content:flex-start}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr th.sd-th .sd-th__content--center{justify-content:center}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr th.sd-th .sd-th__content--right{justify-content:flex-end}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table thead tr th.sd-th .sd-th__resizer{position:absolute;top:50%;right:0;transform:translateY(-50%);width:4px;height:16px;cursor:col-resize;z-index:3;border-left:1px solid #cccccc;border-right:1px solid #cccccc}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody tr td{height:44px;padding:0 16px;border-bottom:1px solid #e1e1e1;background:white;vertical-align:middle}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody tr td.sd-td--left{text-align:left}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody tr td.sd-td--center{text-align:center}.sd-table__wrapper .sd-table__container .sd-table__middle .sd-table tbody tr td.sd-td--right{text-align:right}.sd-table__wrapper .sd-table__container .sd-table__bottom{background:white;text-align:center}.sd-table__wrapper .sd-table__container .sd-table__bottom .sd-table__no-data{padding-top:15%;color:#888888}.sd-table__wrapper .sd-table__pagination{position:relative;background:#f9f9f9;height:48px;display:flex;align-items:center;justify-content:center;border:1px solid #e1e1e1;border-top:none;border-radius:8px}.sd-table__wrapper .sd-table__pagination sd-select{position:absolute;right:10px;top:50%;transform:translateY(-50%)}.sd-table__wrapper .sd-table__virtual-spacer,.sd-table__wrapper .sd-table__virtual-row-spacer{padding:0 !important}.sd-table__wrapper .sd-table__virtual-spacer td,.sd-table__wrapper .sd-table__virtual-row-spacer td{padding:0 !important;border:none}.sd-table__wrapper .sd-table__virtual-spacer .sd-table__skeleton,.sd-table__wrapper .sd-table__virtual-row-spacer .sd-table__skeleton{width:100%;height:100%;background-image:repeating-linear-gradient(0deg, rgba(246, 246, 246, 0.3) 0px, rgba(225, 225, 225, 0.5) calc(var(--row-height, 44px) / 2), rgba(246, 246, 246, 0.3) var(--row-height, 44px));background-size:100% 200%;animation:skeleton-loading 1.5s ease-in-out infinite;position:relative}.sd-table__wrapper .sd-table__virtual-spacer .sd-table__skeleton::before,.sd-table__wrapper .sd-table__virtual-row-spacer .sd-table__skeleton::before{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0;background-image:repeating-linear-gradient(to bottom, transparent 0, transparent calc(var(--row-height, 44px) - 1px), #e1e1e1 calc(var(--row-height, 44px) - 1px), #e1e1e1 var(--row-height, 44px));pointer-events:none}.sd-table__wrapper .sd-table__skeleton-cell{width:100%;height:20px;background:linear-gradient(90deg, rgba(246, 246, 246, 0.3) 0%, rgba(225, 225, 225, 0.5) 50%, rgba(246, 246, 246, 0.3) 100%);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;border-radius:4px}@keyframes skeleton-loading{0%{background-position:0% 0%}50%{background-position:100% 100%}100%{background-position:0% 0%}}";
15
15
 
16
16
  const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
17
17
  constructor(registerHost) {
@@ -73,6 +73,7 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
73
73
  virtualStartColIdx = 0;
74
74
  virtualEndColIdx = 0;
75
75
  scrollLeftPosition = 0;
76
+ // 가상 스크롤 Raf(Request Animation Frame) 관리
76
77
  scrollRequestAnimationFrame = null;
77
78
  scrollContainer = null;
78
79
  rafScheduled = false;
@@ -80,19 +81,39 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
80
81
  vertical: false,
81
82
  horizontal: false,
82
83
  };
84
+ // 상태 캐시값
85
+ cachedVisibleColumns = null;
86
+ lastColumnsRef = null;
87
+ cachedVirtualRows = null;
88
+ cachedVirtualIndexKey = '';
89
+ cachedColumnOrder = null;
90
+ lastColumnOrderKey = '';
91
+ // DOM 측정 캐시값
92
+ cachedContainerHeight = 0;
93
+ cachedContainerWidth = 0;
94
+ // 스타일 캐시
95
+ stickyStyleCache = new Map();
96
+ // isAllChecked 캐시
97
+ cachedIsAllChecked;
98
+ lastSelectionKey = '';
99
+ onScroll;
83
100
  handleColumnsChange(newCols) {
84
101
  this.columnWidths = newCols.map(c => parseInt(c.width || '120', 10));
102
+ this.cleanUpVirtualCache();
103
+ this.stickyStyleCache.clear();
85
104
  if (this.useVirtualScroll.horizontal) {
86
105
  this.scheduleUpdate('horizontal');
87
106
  }
88
107
  }
89
108
  handleColumnWidthsChange() {
109
+ this.stickyStyleCache.clear();
90
110
  if (this.useVirtualScroll.horizontal) {
91
111
  this.scheduleUpdate('horizontal');
92
112
  }
93
113
  }
94
114
  handleRowsChange(newRows) {
95
115
  this.innerRows = [...newRows];
116
+ this.cleanUpVirtualCache();
96
117
  if (this.useVirtualScroll.vertical) {
97
118
  this.scheduleUpdate('vertical');
98
119
  }
@@ -100,11 +121,19 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
100
121
  handleSelectedChange(newSelected) {
101
122
  this.innerSelected = new Set(newSelected);
102
123
  }
124
+ cleanUpVirtualCache() {
125
+ this.cachedVisibleColumns = null;
126
+ this.lastColumnsRef = null;
127
+ this.cachedVirtualRows = null;
128
+ this.cachedVirtualIndexKey = '';
129
+ this.cachedColumnOrder = null;
130
+ this.lastColumnOrderKey = '';
131
+ }
103
132
  handlePaginationChange(newVal) {
104
133
  if (newVal?.page && newVal.page !== this.currentPage) {
105
134
  this.currentPage = newVal.page;
106
135
  if (this.useVirtualScroll.vertical && this.scrollContainer) {
107
- this.scrollContainer.scrollTop = 0;
136
+ this.scrollContainer.scrollTo({ top: 0, behavior: 'instant' });
108
137
  this.scrollTopPosition = 0;
109
138
  this.calculateVisibleRange();
110
139
  }
@@ -119,66 +148,126 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
119
148
  }
120
149
  }
121
150
  componentDidLoad() {
122
- // SSR 환경 체크
123
- if (typeof window === 'undefined')
124
- return;
125
- const middle = this.el.querySelector('.sd-table__middle');
126
- if (!middle)
127
- return;
128
- this.scrollContainer = middle;
129
- const onScroll = () => {
130
- const { scrollLeft, scrollWidth, clientWidth, scrollTop } = middle;
131
- this.scrolledLeft = scrollLeft > 0;
132
- this.scrolledRight = scrollLeft + clientWidth < scrollWidth;
133
- // 실제 변경사항이 있을 때만 RAF 스케줄
134
- const verticalChanged = this.useVirtualScroll.vertical && this.scrollTopPosition !== scrollTop;
135
- const horizontalChanged = this.useVirtualScroll.horizontal && this.scrollLeftPosition !== scrollLeft;
136
- if (verticalChanged || horizontalChanged) {
137
- if (this.scrollRequestAnimationFrame !== null) {
138
- cancelAnimationFrame(this.scrollRequestAnimationFrame);
151
+ readTask(() => {
152
+ const middle = this.el.querySelector('.sd-table__middle');
153
+ if (!middle)
154
+ return;
155
+ this.onScroll = () => {
156
+ const scrollLeft = middle.scrollLeft;
157
+ const scrollWidth = middle.scrollWidth;
158
+ const clientWidth = middle.clientWidth;
159
+ const scrollTop = middle.scrollTop;
160
+ const verticalChanged = this.useVirtualScroll.vertical && this.scrollTopPosition !== scrollTop;
161
+ const horizontalChanged = this.useVirtualScroll.horizontal && this.scrollLeftPosition !== scrollLeft;
162
+ const newScrolledLeft = scrollLeft > 0;
163
+ const newScrolledRight = scrollLeft + clientWidth < scrollWidth;
164
+ if (this.scrolledLeft !== newScrolledLeft || this.scrolledRight !== newScrolledRight) {
165
+ this.scrolledLeft = newScrolledLeft;
166
+ this.scrolledRight = newScrolledRight;
139
167
  }
140
- this.scrollRequestAnimationFrame = requestAnimationFrame(() => {
141
- if (verticalChanged) {
142
- this.scrollTopPosition = scrollTop;
168
+ if (verticalChanged || horizontalChanged) {
169
+ if (this.scrollRequestAnimationFrame !== null) {
170
+ cancelAnimationFrame(this.scrollRequestAnimationFrame);
171
+ }
172
+ this.scrollRequestAnimationFrame = requestAnimationFrame(() => {
173
+ if (verticalChanged) {
174
+ this.scrollTopPosition = scrollTop;
175
+ this.calculateVisibleRange();
176
+ }
177
+ if (horizontalChanged) {
178
+ this.scrollLeftPosition = scrollLeft;
179
+ this.calculateVisibleColumnRange();
180
+ }
181
+ this.scrollRequestAnimationFrame = null;
182
+ });
183
+ }
184
+ };
185
+ this.scrollContainer = middle;
186
+ requestAnimationFrame(() => {
187
+ if (this.scrollContainer && this.onScroll) {
188
+ this.cachedContainerHeight = this.scrollContainer.clientHeight;
189
+ this.cachedContainerWidth = this.scrollContainer.clientWidth;
190
+ middle.addEventListener('scroll', this.onScroll, { passive: true });
191
+ if (this.useVirtualScroll.vertical) {
143
192
  this.calculateVisibleRange();
144
193
  }
145
- if (horizontalChanged) {
146
- this.scrollLeftPosition = scrollLeft;
194
+ if (this.useVirtualScroll.horizontal) {
147
195
  this.calculateVisibleColumnRange();
148
196
  }
149
- this.scrollRequestAnimationFrame = null;
150
- });
151
- }
197
+ this.onScroll();
198
+ }
199
+ });
200
+ });
201
+ }
202
+ changePage(page) {
203
+ if (!this.useInternalPagination) {
204
+ this.sdPageChange.emit(page);
205
+ return;
206
+ }
207
+ this.currentPage = page;
208
+ this.sdPageChange.emit(this.currentPage);
209
+ }
210
+ changeRowsPerPage(perPage) {
211
+ const changedRowsPerPage = perPage ? Number(perPage) : 0;
212
+ if (!this.useInternalPagination) {
213
+ this.sdRowsPerPageChange.emit(changedRowsPerPage);
214
+ return;
215
+ }
216
+ const newRowsPerPage = Number(perPage || 0);
217
+ let newLastPage = Math.max(1, Math.ceil(this.innerRows.length / newRowsPerPage));
218
+ let newCurrentPage = this.currentPage;
219
+ if (newCurrentPage > newLastPage) {
220
+ newCurrentPage = newLastPage;
221
+ }
222
+ this.pagination = {
223
+ page: newCurrentPage,
224
+ rowsPerPage: newRowsPerPage,
225
+ lastPage: newLastPage,
152
226
  };
153
- middle.addEventListener('scroll', onScroll, { passive: true });
154
- onScroll();
227
+ this.currentPage = newCurrentPage;
228
+ this.sdRowsPerPageChange.emit(changedRowsPerPage);
155
229
  }
156
230
  disconnectedCallback() {
231
+ if (this.scrollContainer && this.onScroll) {
232
+ this.scrollContainer.removeEventListener('scroll', this.onScroll);
233
+ }
157
234
  if (this.scrollRequestAnimationFrame !== null) {
158
235
  cancelAnimationFrame(this.scrollRequestAnimationFrame);
159
236
  }
160
237
  }
161
238
  // ----- Derived getters -----
162
239
  get visibleColumns() {
163
- return this.columns.filter(col => col.visible !== false);
240
+ if (this.cachedVisibleColumns && this.lastColumnsRef === this.columns) {
241
+ return this.cachedVisibleColumns;
242
+ }
243
+ this.lastColumnsRef = this.columns;
244
+ this.cachedVisibleColumns = this.columns.filter(col => col.visible !== false);
245
+ return this.cachedVisibleColumns;
164
246
  }
165
247
  get paginatedRows() {
166
248
  if (!this.pagination || !this.useInternalPagination)
167
249
  return this.innerRows;
168
250
  const { rowsPerPage = this.rows.length } = this.pagination || {};
169
- const result = this.innerRows.slice((this.currentPage - 1) * rowsPerPage, this.currentPage * rowsPerPage);
170
- return result;
251
+ return this.innerRows.slice((this.currentPage - 1) * rowsPerPage, this.currentPage * rowsPerPage);
171
252
  }
172
253
  get virtualRows() {
254
+ const newVirtualIndexKey = `${this.virtualStartIndex}-${this.virtualEndIndex}`;
255
+ if (this.cachedVirtualRows && this.cachedVirtualIndexKey === newVirtualIndexKey) {
256
+ return this.cachedVirtualRows;
257
+ }
258
+ this.cachedVirtualIndexKey = newVirtualIndexKey;
173
259
  if (!this.useVirtualScroll.vertical) {
174
- return this.paginatedRows.map((row, idx) => ({ row, actualIndex: idx }));
260
+ this.cachedVirtualRows = this.paginatedRows.map((row, idx) => ({ row, actualIndex: idx }));
175
261
  }
176
- return this.paginatedRows
177
- .slice(this.virtualStartIndex, this.virtualEndIndex + 1)
178
- .map((row, relativeIdx) => ({
179
- row,
180
- actualIndex: this.virtualStartIndex + relativeIdx,
181
- }));
262
+ else {
263
+ this.cachedVirtualRows = this.paginatedRows
264
+ .slice(this.virtualStartIndex, this.virtualEndIndex + 1)
265
+ .map((row, relativeIdx) => ({
266
+ row,
267
+ actualIndex: this.virtualStartIndex + relativeIdx,
268
+ }));
269
+ }
270
+ return this.cachedVirtualRows;
182
271
  }
183
272
  get topSpacerHeight() {
184
273
  if (!this.useVirtualScroll.vertical || this.virtualStartIndex === 0)
@@ -251,6 +340,7 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
251
340
  if (newSelected.length === selectedArray.length)
252
341
  return;
253
342
  this.innerSelected = new Set(newSelected);
343
+ this.cachedIsAllChecked = undefined;
254
344
  this.sdSelectChange.emit(Array.from(this.innerSelected));
255
345
  }
256
346
  toggleSelectAll(checked) {
@@ -262,16 +352,29 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
262
352
  const currentPageKeys = this.paginatedRows.map(r => r[this.rowKey]);
263
353
  this.innerSelected = new Set([...this.innerSelected].filter(r => !currentPageKeys.includes(r[this.rowKey])));
264
354
  }
355
+ this.cachedIsAllChecked = undefined;
265
356
  this.sdSelectChange.emit(Array.from(this.innerSelected));
266
357
  }
267
358
  get isAllChecked() {
359
+ const selectionKey = `${this.paginatedRows.length}-${this.innerSelected.size}`;
360
+ if (this.cachedIsAllChecked !== undefined && this.lastSelectionKey === selectionKey) {
361
+ return this.cachedIsAllChecked;
362
+ }
268
363
  const total = this.paginatedRows.length;
269
364
  const selectedCount = this.paginatedRows.filter(row => Array.from(this.innerSelected).some(selectedRow => selectedRow[this.rowKey] === row[this.rowKey])).length;
270
- if (selectedCount === 0)
271
- return false; // 아무것도 안 선택됨
272
- if (selectedCount === total)
273
- return true; // 전부 선택됨
274
- return null; // 일부만 선택됨
365
+ let result;
366
+ if (selectedCount === 0) {
367
+ result = false; // 아무것도 안 선택됨
368
+ }
369
+ else if (selectedCount === total) {
370
+ result = true; // 전부 선택됨
371
+ }
372
+ else {
373
+ result = null; // 일부만 선택됨
374
+ }
375
+ this.cachedIsAllChecked = result;
376
+ this.lastSelectionKey = selectionKey;
377
+ return result;
275
378
  }
276
379
  // RAF 통합 관리
277
380
  scheduleUpdate(type) {
@@ -297,13 +400,22 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
297
400
  return;
298
401
  }
299
402
  const scrollTop = this.scrollTopPosition;
300
- const containerHeight = this.scrollContainer?.clientHeight || 0;
403
+ let containerHeight = this.cachedContainerHeight;
404
+ if (containerHeight === 0 && this.scrollContainer) {
405
+ containerHeight = this.scrollContainer.clientHeight;
406
+ this.cachedContainerHeight = containerHeight;
407
+ }
408
+ const bufferSize = this.virtualBufferSize.vertical || 5;
301
409
  const startIndex = Math.floor(scrollTop / this.virtualRowHeight);
302
410
  const visibleCount = Math.ceil(containerHeight / this.virtualRowHeight);
303
- const endIndex = startIndex + visibleCount;
304
- const bufferSize = this.virtualBufferSize.vertical || 5;
305
- this.virtualStartIndex = Math.max(0, startIndex - bufferSize);
306
- this.virtualEndIndex = Math.min(this.paginatedRows.length - 1, endIndex + bufferSize);
411
+ const endIndex = startIndex + visibleCount - 1;
412
+ const newStartIndex = Math.max(0, startIndex - bufferSize);
413
+ const newEndIndex = Math.min(this.paginatedRows.length - 1, endIndex + bufferSize);
414
+ // 실제로 변경된 경우에만 상태 업데이트
415
+ if (this.virtualStartIndex !== newStartIndex || this.virtualEndIndex !== newEndIndex) {
416
+ this.virtualStartIndex = newStartIndex;
417
+ this.virtualEndIndex = newEndIndex;
418
+ }
307
419
  }
308
420
  // 가로 가상 스크롤 렌더링 계산
309
421
  calculateVisibleColumnRange() {
@@ -313,7 +425,12 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
313
425
  return;
314
426
  }
315
427
  const scrollLeft = this.scrollLeftPosition;
316
- const containerWidth = this.scrollContainer?.clientWidth || 0;
428
+ // 캐시된 사용, 없으면 측정 후 캐시
429
+ let containerWidth = this.cachedContainerWidth;
430
+ if (containerWidth === 0 && this.scrollContainer) {
431
+ containerWidth = this.scrollContainer.clientWidth;
432
+ this.cachedContainerWidth = containerWidth;
433
+ }
317
434
  const stickyLeftCount = this.stickyColumn.left || 0;
318
435
  const stickyRightCount = this.stickyColumn.right || 0;
319
436
  // 가상 스크롤 컬럼 - sticky column 제외
@@ -353,22 +470,34 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
353
470
  }
354
471
  }
355
472
  const bufferSize = this.virtualBufferSize.horizontal || 5;
356
- this.virtualStartColIdx = Math.max(0, startIdx - bufferSize);
357
- this.virtualEndColIdx = Math.min(virtualColumns.length - 1, endIdx + bufferSize);
473
+ const newStartColIdx = Math.max(0, startIdx - bufferSize);
474
+ const newEndColIdx = Math.min(virtualColumns.length - 1, endIdx + bufferSize);
475
+ // 실제로 변경된 경우에만 상태 업데이트
476
+ if (this.virtualStartColIdx !== newStartColIdx || this.virtualEndColIdx !== newEndColIdx) {
477
+ this.virtualStartColIdx = newStartColIdx;
478
+ this.virtualEndColIdx = newEndColIdx;
479
+ }
358
480
  }
359
481
  // ----- Helpers -----
360
482
  getStickyStyle(colIdx) {
483
+ // 캐시된 스타일이 있으면 반환
484
+ if (this.stickyStyleCache.has(colIdx)) {
485
+ return this.stickyStyleCache.get(colIdx);
486
+ }
361
487
  const leftOffset = this.columnWidths.slice(0, colIdx).reduce((a, b) => a + b, 0) + (this.selectable ? 52 : 0);
362
488
  const rightOffset = this.columnWidths
363
489
  .filter((_, i) => i >= this.visibleColumns.length - (this.stickyColumn.right || 0) && i > colIdx)
364
490
  .reduce((a, b) => a + b, 0);
365
- return {
491
+ const style = {
366
492
  '--sticky-left-offset': `${leftOffset}px`,
367
493
  '--sticky-right-offset': `${rightOffset}px`,
368
494
  'width': `${this.columnWidths[colIdx]}px`,
369
495
  'minWidth': `${this.columnWidths[colIdx]}px`,
370
496
  'maxWidth': `${this.columnWidths[colIdx]}px`,
371
497
  };
498
+ // 스타일 캐시에 저장
499
+ this.stickyStyleCache.set(colIdx, style);
500
+ return style;
372
501
  }
373
502
  handleResize(index, event) {
374
503
  // SSR 환경 체크
@@ -398,6 +527,10 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
398
527
  return format ? format(value, row) : value;
399
528
  }
400
529
  getColumnRenderedInOrder() {
530
+ const orderKey = `${this.visibleColumns.length}-${this.virtualStartColIdx}-${this.virtualEndColIdx}`;
531
+ if (this.cachedColumnOrder && this.lastColumnOrderKey === orderKey) {
532
+ return this.cachedColumnOrder;
533
+ }
401
534
  const stickyLeftCount = this.stickyColumn.left || 0;
402
535
  const stickyRightCount = this.stickyColumn.right || 0;
403
536
  // Sticky left 컬럼들
@@ -408,13 +541,15 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
408
541
  .slice(stickyLeftCount, this.visibleColumns.length - stickyRightCount)
409
542
  .slice(this.virtualStartColIdx, this.virtualEndColIdx + 1)
410
543
  : this.visibleColumns.slice(stickyLeftCount, this.visibleColumns.length - stickyRightCount);
411
- return {
544
+ this.cachedColumnOrder = {
412
545
  stickyLeftCount,
413
546
  stickyRightCount,
414
547
  stickyLeftCols,
415
548
  middleCols,
416
549
  stickyRightCols,
417
550
  };
551
+ this.lastColumnOrderKey = orderKey;
552
+ return this.cachedColumnOrder;
418
553
  }
419
554
  // ----- Render -----
420
555
  renderHead() {
@@ -452,7 +587,7 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
452
587
  }))));
453
588
  }
454
589
  renderBody() {
455
- return (h("tbody", { ...(!this.paginatedRows.length && { part: 'tbody-empty' }), class: `sd-table-tbody ${this.useVirtualScroll.vertical ? 'sd-table-tbody--virtual-scroll' : ''}`, style: { '--total-virtual-height': `${this.totalVirtualHeight}px` } }, this.isLoading && (h("div", { class: "sd-table__loading" }, h("sd-loading-spinner", null))), this.useVirtualScroll.vertical && this.topSpacerHeight > 0 && this.renderSpacerRow('top'), this.paginatedRows.length > 0 &&
590
+ return (h("tbody", { ...(!this.paginatedRows.length && { part: 'tbody-empty' }), class: `sd-table-tbody ${this.useVirtualScroll.vertical ? 'sd-table-tbody--virtual-scroll' : ''}`, style: { '--total-virtual-height': `${this.totalVirtualHeight}px` } }, this.useVirtualScroll.vertical && this.topSpacerHeight > 0 && this.renderSpacerRow('top'), this.paginatedRows.length > 0 &&
456
591
  this.virtualRows.map(({ row, actualIndex }) => this.renderRow(row, actualIndex)), this.useVirtualScroll.vertical &&
457
592
  this.bottomSpacerHeight > 0 &&
458
593
  this.renderSpacerRow('bottom')));
@@ -522,44 +657,16 @@ const SdTable = /*@__PURE__*/ proxyCustomElement(class SdTable extends H {
522
657
  }, "aria-hidden": "true" }, h("div", { class: "sd-table__skeleton-cell" })));
523
658
  }
524
659
  render() {
525
- return (h(Host, { key: '658ead41c51d9f031c0334d91cad9a06811721b9' }, h("div", { key: 'c98a48d31b16cbd934e4ae47b55bcfeaa5db2520', class: "sd-table__wrapper", style: {
660
+ return (h(Host, { key: '85b4655b2ee298d535add2e43c2ef73b8c816716' }, h("div", { key: '9fc71a34045a725db9fa19fec9954d1edb90f1e4', class: "sd-table__wrapper", style: {
526
661
  '--table-width': this.width,
527
662
  '--table-height': this.height,
528
- } }, h("div", { key: '080fc2b81b016c4876cf90502952e49a5e468534', class: "sd-table__container", style: {
663
+ } }, h("div", { key: 'dcb78c1bac32c68bc5ac81beece5ee8ca74025ba', class: "sd-table__container", style: {
529
664
  '--table-container-height': `calc(${this.height} - ${this.pagination && this.innerRows.length > 0 ? 48 : 0}px)`,
530
- } }, h("div", { key: 'd56754a7cd4acc0505bb36d2d8a116a20d19c0e4', class: {
665
+ } }, h("div", { key: 'e0bb087930f0cf07c06c6f5684a5b26fa5e25a02', class: {
531
666
  'sd-table__middle': true,
532
667
  'sd-table__middle--scrollable': this.paginatedRows.length > 0,
533
668
  'sd-table__middle--loading': this.isLoading,
534
- } }, h("table", { key: '39d620db8e2f9ea585f8c73222687f59aaa830e6', part: "table", class: this.sdTableClasses }, this.renderHead(), this.renderBody())), h("div", { key: 'dcd87252620d5fb95deda064e2a7b4e6871c9dc1', class: "sd-table__bottom" }, !this.paginatedRows.length && (h("div", { key: 'd31ea2dbc747385fb7f7a733725e0e34f24f4489', class: "sd-table__no-data" }, h("slot", { key: '8375b5f42dafa7d430ad33226500d2a84b099990', name: "no-data" }, this.noDataLabel))))), this.pagination && this.innerRows.length > 0 && (h("div", { key: '2b231be27d05c5bb52ff1c0ced255f10be449068', class: "sd-table__pagination" }, h("sd-pagination", { key: '45676f7c4c931896c6414fa8beb6a6c23e203e92', currentPage: !this.useInternalPagination ? this.pagination.page : this.currentPage, lastPage: !this.useInternalPagination ? this.pagination.lastPage : this.lastPageNumber, onPageChange: (e) => {
535
- if (!this.useInternalPagination) {
536
- this.sdPageChange.emit(e.detail);
537
- }
538
- else {
539
- this.currentPage = e.detail;
540
- this.sdPageChange.emit(this.currentPage);
541
- }
542
- } }), this.useRowsPerPageSelect && (h("sd-select", { key: '3f65639b064a27993dc62a8e4a5dc86b16aec4f8', value: this.pagination.rowsPerPage, options: this.rowsPerPageOption, width: "128px", onSdChange: (e) => {
543
- const changedRowsPerPage = e.detail.value ? Number(e.detail.value) : 0;
544
- if (!this.useInternalPagination) {
545
- this.sdRowsPerPageChange.emit(changedRowsPerPage);
546
- }
547
- else {
548
- const newRowsPerPage = Number(e.detail.value || 0);
549
- let newLastPage = Math.max(1, Math.ceil(this.innerRows.length / newRowsPerPage));
550
- let newCurrentPage = this.currentPage;
551
- if (newCurrentPage > newLastPage) {
552
- newCurrentPage = newLastPage;
553
- }
554
- this.pagination = {
555
- page: newCurrentPage,
556
- rowsPerPage: newRowsPerPage,
557
- lastPage: newLastPage,
558
- };
559
- this.currentPage = newCurrentPage;
560
- this.sdRowsPerPageChange.emit(changedRowsPerPage);
561
- }
562
- } })))))));
669
+ } }, this.isLoading && (h("div", { key: '4f36b5fc670aa98774e565b000cc1623a6cae0af', class: "sd-table__middle--loading__spinner" }, h("sd-loading-spinner", { key: '2e794ac56824bfad1f9f42482b75498e7f2ca70c' }))), h("table", { key: 'a4017ae90c8f932c22b26d7f81c9fc13785e52d0', part: "table", class: this.sdTableClasses }, this.renderHead(), this.renderBody())), h("div", { key: 'c7b008d66c47442d25a977d76b7b6dd266d7f008', class: "sd-table__bottom" }, !this.paginatedRows.length && (h("div", { key: '20235f4747c2396710b44d46ea1da659156bb9ca', class: "sd-table__no-data" }, h("slot", { key: '432a8669c4942eb92c4bce7f0b08cb9cb1f9f6e3', name: "no-data" }, this.noDataLabel))))), this.pagination && this.innerRows.length > 0 && (h("div", { key: 'f9f6dc05c1004b03e10ece4c091d67ca564b1633', class: "sd-table__pagination" }, h("sd-pagination", { key: 'd7efd361091fe9725e8c79289501506a779e1111', currentPage: !this.useInternalPagination ? this.pagination.page : this.currentPage, lastPage: !this.useInternalPagination ? this.pagination.lastPage : this.lastPageNumber, onPageChange: (e) => this.changePage(e.detail) }), this.useRowsPerPageSelect && (h("sd-select", { key: '401d35d85c2fc78094c267f27d74055108179f9e', value: this.pagination.rowsPerPage, options: this.rowsPerPageOption, width: "128px", onSdChange: (e) => this.changeRowsPerPage(e.detail.value) })))))));
563
670
  }
564
671
  static get watchers() { return {
565
672
  "columns": ["handleColumnsChange"],