@pine-ds/core 3.12.0 → 3.13.0

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 (431) hide show
  1. package/components/index2.js +1 -1
  2. package/components/index2.js.map +1 -1
  3. package/components/mock-pds-modal.js +9 -5
  4. package/components/mock-pds-modal.js.map +1 -1
  5. package/components/pds-alert.js +2 -2
  6. package/components/pds-alert.js.map +1 -1
  7. package/components/pds-avatar.js +3 -3
  8. package/components/pds-avatar.js.map +1 -1
  9. package/components/pds-checkbox2.js +1 -1
  10. package/components/pds-checkbox2.js.map +1 -1
  11. package/components/pds-copytext.js +1 -1
  12. package/components/pds-copytext.js.map +1 -1
  13. package/components/pds-input.js +1 -1
  14. package/components/pds-input.js.map +1 -1
  15. package/components/pds-link2.js +1 -1
  16. package/components/pds-link2.js.map +1 -1
  17. package/components/pds-modal-content.js +3 -19
  18. package/components/pds-modal-content.js.map +1 -1
  19. package/components/pds-modal.js +7 -6
  20. package/components/pds-modal.js.map +1 -1
  21. package/components/pds-radio-group.js +1 -1
  22. package/components/pds-radio-group.js.map +1 -1
  23. package/components/pds-radio.js +1 -1
  24. package/components/pds-radio.js.map +1 -1
  25. package/components/pds-select.js +1 -1
  26. package/components/pds-select.js.map +1 -1
  27. package/components/pds-tab.js +20 -4
  28. package/components/pds-tab.js.map +1 -1
  29. package/components/pds-table-head-cell2.js +49 -5
  30. package/components/pds-table-head-cell2.js.map +1 -1
  31. package/components/pds-table-head.js +15 -3
  32. package/components/pds-table-head.js.map +1 -1
  33. package/components/pds-table-row.js +100 -4
  34. package/components/pds-table-row.js.map +1 -1
  35. package/components/pds-table.js +6 -0
  36. package/components/pds-table.js.map +1 -1
  37. package/components/pds-textarea.js +1 -1
  38. package/components/pds-textarea.js.map +1 -1
  39. package/dist/cjs/{index-BIrlTMGo.js → index-CMeuo765.js} +3 -3
  40. package/dist/cjs/index-CMeuo765.js.map +1 -0
  41. package/dist/cjs/loader.cjs.js +1 -1
  42. package/dist/cjs/mock-pds-modal.cjs.entry.js +9 -5
  43. package/dist/cjs/mock-pds-modal.entry.cjs.js.map +1 -1
  44. package/dist/cjs/pds-accordion.cjs.entry.js +1 -1
  45. package/dist/cjs/pds-alert.cjs.entry.js +2 -2
  46. package/dist/cjs/pds-alert.entry.cjs.js.map +1 -1
  47. package/dist/cjs/pds-avatar.cjs.entry.js +4 -4
  48. package/dist/cjs/pds-avatar.entry.cjs.js.map +1 -1
  49. package/dist/cjs/pds-button.cjs.entry.js +1 -1
  50. package/dist/cjs/pds-checkbox.cjs.entry.js +2 -2
  51. package/dist/cjs/pds-checkbox.entry.cjs.js.map +1 -1
  52. package/dist/cjs/pds-chip.cjs.entry.js +1 -1
  53. package/dist/cjs/pds-copytext.cjs.entry.js +2 -2
  54. package/dist/cjs/pds-copytext.entry.cjs.js.map +1 -1
  55. package/dist/cjs/pds-filter.cjs.entry.js +1 -1
  56. package/dist/cjs/pds-input.cjs.entry.js +2 -2
  57. package/dist/cjs/pds-input.entry.cjs.js.map +1 -1
  58. package/dist/cjs/pds-link.cjs.entry.js +2 -2
  59. package/dist/cjs/pds-link.entry.cjs.js.map +1 -1
  60. package/dist/cjs/pds-modal-content.cjs.entry.js +2 -18
  61. package/dist/cjs/pds-modal-content.entry.cjs.js.map +1 -1
  62. package/dist/cjs/pds-modal.cjs.entry.js +7 -6
  63. package/dist/cjs/pds-modal.entry.cjs.js.map +1 -1
  64. package/dist/cjs/pds-radio-group.cjs.entry.js +2 -2
  65. package/dist/cjs/pds-radio-group.entry.cjs.js.map +1 -1
  66. package/dist/cjs/pds-radio.cjs.entry.js +2 -2
  67. package/dist/cjs/pds-radio.entry.cjs.js.map +1 -1
  68. package/dist/cjs/pds-select.cjs.entry.js +2 -2
  69. package/dist/cjs/pds-select.entry.cjs.js.map +1 -1
  70. package/dist/cjs/pds-sortable-item.cjs.entry.js +1 -1
  71. package/dist/cjs/pds-switch.cjs.entry.js +1 -1
  72. package/dist/cjs/pds-tab.cjs.entry.js +19 -4
  73. package/dist/cjs/pds-tab.entry.cjs.js.map +1 -1
  74. package/dist/cjs/pds-table-head-cell.cjs.entry.js +47 -5
  75. package/dist/cjs/pds-table-head-cell.entry.cjs.js.map +1 -1
  76. package/dist/cjs/pds-table-head.cjs.entry.js +12 -2
  77. package/dist/cjs/pds-table-head.entry.cjs.js.map +1 -1
  78. package/dist/cjs/pds-table-row.cjs.entry.js +97 -3
  79. package/dist/cjs/pds-table-row.entry.cjs.js.map +1 -1
  80. package/dist/cjs/pds-table.cjs.entry.js +5 -0
  81. package/dist/cjs/pds-table.entry.cjs.js.map +1 -1
  82. package/dist/cjs/pds-textarea.cjs.entry.js +2 -2
  83. package/dist/cjs/pds-textarea.entry.cjs.js.map +1 -1
  84. package/dist/cjs/pine-core.cjs.js +1 -1
  85. package/dist/collection/components/pds-alert/pds-alert.css +22 -0
  86. package/dist/collection/components/pds-alert/pds-alert.tokens.css +10 -0
  87. package/dist/collection/components/pds-avatar/pds-avatar.css +1 -1
  88. package/dist/collection/components/pds-avatar/pds-avatar.js +2 -2
  89. package/dist/collection/components/pds-avatar/pds-avatar.js.map +1 -1
  90. package/dist/collection/components/pds-checkbox/pds-checkbox.css +1 -2
  91. package/dist/collection/components/pds-copytext/pds-copytext.css +1 -1
  92. package/dist/collection/components/pds-input/pds-input.css +4 -2
  93. package/dist/collection/components/pds-link/pds-link.css +3 -3
  94. package/dist/collection/components/pds-modal/pds-modal-content/pds-modal-content.js +3 -19
  95. package/dist/collection/components/pds-modal/pds-modal-content/pds-modal-content.js.map +1 -1
  96. package/dist/collection/components/pds-modal/pds-modal.js +7 -6
  97. package/dist/collection/components/pds-modal/pds-modal.js.map +1 -1
  98. package/dist/collection/components/pds-modal/test/mock-pds-modal.js +10 -6
  99. package/dist/collection/components/pds-modal/test/mock-pds-modal.js.map +1 -1
  100. package/dist/collection/components/pds-radio/pds-radio.css +3 -1
  101. package/dist/collection/components/pds-radio-group/pds-radio-group.css +3 -1
  102. package/dist/collection/components/pds-select/pds-select.css +3 -1
  103. package/dist/collection/components/pds-table/pds-table-head/pds-table-head.css +18 -0
  104. package/dist/collection/components/pds-table/pds-table-head/pds-table-head.js +57 -1
  105. package/dist/collection/components/pds-table/pds-table-head/pds-table-head.js.map +1 -1
  106. package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.css +11 -2
  107. package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.js +48 -4
  108. package/dist/collection/components/pds-table/pds-table-head-cell/pds-table-head-cell.js.map +1 -1
  109. package/dist/collection/components/pds-table/pds-table-row/pds-table-row.css +10 -0
  110. package/dist/collection/components/pds-table/pds-table-row/pds-table-row.js +102 -2
  111. package/dist/collection/components/pds-table/pds-table-row/pds-table-row.js.map +1 -1
  112. package/dist/collection/components/pds-table/pds-table.js +28 -0
  113. package/dist/collection/components/pds-table/pds-table.js.map +1 -1
  114. package/dist/collection/components/pds-table/stories/pds-table.stories.js +73 -5
  115. package/dist/collection/components/pds-tabs/pds-tab/pds-tab.css +23 -4
  116. package/dist/collection/components/pds-tabs/pds-tab/pds-tab.js +41 -3
  117. package/dist/collection/components/pds-tabs/pds-tab/pds-tab.js.map +1 -1
  118. package/dist/collection/components/pds-textarea/pds-textarea.css +3 -1
  119. package/dist/docs.json +119 -3
  120. package/dist/esm/{index-CShvJnsl.js → index-xbb79yLt.js} +3 -3
  121. package/dist/esm/index-xbb79yLt.js.map +1 -0
  122. package/dist/esm/loader.js +1 -1
  123. package/dist/esm/mock-pds-modal.entry.js +9 -5
  124. package/dist/esm/mock-pds-modal.entry.js.map +1 -1
  125. package/dist/esm/pds-accordion.entry.js +1 -1
  126. package/dist/esm/pds-alert.entry.js +2 -2
  127. package/dist/esm/pds-alert.entry.js.map +1 -1
  128. package/dist/esm/pds-avatar.entry.js +4 -4
  129. package/dist/esm/pds-avatar.entry.js.map +1 -1
  130. package/dist/esm/pds-button.entry.js +1 -1
  131. package/dist/esm/pds-checkbox.entry.js +2 -2
  132. package/dist/esm/pds-checkbox.entry.js.map +1 -1
  133. package/dist/esm/pds-chip.entry.js +1 -1
  134. package/dist/esm/pds-copytext.entry.js +2 -2
  135. package/dist/esm/pds-copytext.entry.js.map +1 -1
  136. package/dist/esm/pds-filter.entry.js +1 -1
  137. package/dist/esm/pds-input.entry.js +2 -2
  138. package/dist/esm/pds-input.entry.js.map +1 -1
  139. package/dist/esm/pds-link.entry.js +2 -2
  140. package/dist/esm/pds-link.entry.js.map +1 -1
  141. package/dist/esm/pds-modal-content.entry.js +2 -18
  142. package/dist/esm/pds-modal-content.entry.js.map +1 -1
  143. package/dist/esm/pds-modal.entry.js +7 -6
  144. package/dist/esm/pds-modal.entry.js.map +1 -1
  145. package/dist/esm/pds-radio-group.entry.js +2 -2
  146. package/dist/esm/pds-radio-group.entry.js.map +1 -1
  147. package/dist/esm/pds-radio.entry.js +2 -2
  148. package/dist/esm/pds-radio.entry.js.map +1 -1
  149. package/dist/esm/pds-select.entry.js +2 -2
  150. package/dist/esm/pds-select.entry.js.map +1 -1
  151. package/dist/esm/pds-sortable-item.entry.js +1 -1
  152. package/dist/esm/pds-switch.entry.js +1 -1
  153. package/dist/esm/pds-tab.entry.js +19 -4
  154. package/dist/esm/pds-tab.entry.js.map +1 -1
  155. package/dist/esm/pds-table-head-cell.entry.js +47 -5
  156. package/dist/esm/pds-table-head-cell.entry.js.map +1 -1
  157. package/dist/esm/pds-table-head.entry.js +12 -2
  158. package/dist/esm/pds-table-head.entry.js.map +1 -1
  159. package/dist/esm/pds-table-row.entry.js +97 -3
  160. package/dist/esm/pds-table-row.entry.js.map +1 -1
  161. package/dist/esm/pds-table.entry.js +5 -0
  162. package/dist/esm/pds-table.entry.js.map +1 -1
  163. package/dist/esm/pds-textarea.entry.js +2 -2
  164. package/dist/esm/pds-textarea.entry.js.map +1 -1
  165. package/dist/esm/pine-core.js +1 -1
  166. package/dist/esm-es5/{index-CShvJnsl.js → index-xbb79yLt.js} +1 -1
  167. package/dist/esm-es5/index-xbb79yLt.js.map +1 -0
  168. package/dist/esm-es5/loader.js +1 -1
  169. package/dist/esm-es5/mock-pds-modal.entry.js +1 -1
  170. package/dist/esm-es5/mock-pds-modal.entry.js.map +1 -1
  171. package/dist/esm-es5/pds-accordion.entry.js +1 -1
  172. package/dist/esm-es5/pds-alert.entry.js +1 -1
  173. package/dist/esm-es5/pds-alert.entry.js.map +1 -1
  174. package/dist/esm-es5/pds-avatar.entry.js +1 -1
  175. package/dist/esm-es5/pds-avatar.entry.js.map +1 -1
  176. package/dist/esm-es5/pds-button.entry.js +1 -1
  177. package/dist/esm-es5/pds-checkbox.entry.js +1 -1
  178. package/dist/esm-es5/pds-checkbox.entry.js.map +1 -1
  179. package/dist/esm-es5/pds-chip.entry.js +1 -1
  180. package/dist/esm-es5/pds-copytext.entry.js +1 -1
  181. package/dist/esm-es5/pds-copytext.entry.js.map +1 -1
  182. package/dist/esm-es5/pds-filter.entry.js +1 -1
  183. package/dist/esm-es5/pds-input.entry.js +1 -1
  184. package/dist/esm-es5/pds-input.entry.js.map +1 -1
  185. package/dist/esm-es5/pds-link.entry.js +1 -1
  186. package/dist/esm-es5/pds-link.entry.js.map +1 -1
  187. package/dist/esm-es5/pds-modal-content.entry.js +1 -1
  188. package/dist/esm-es5/pds-modal-content.entry.js.map +1 -1
  189. package/dist/esm-es5/pds-modal.entry.js +1 -1
  190. package/dist/esm-es5/pds-modal.entry.js.map +1 -1
  191. package/dist/esm-es5/pds-radio-group.entry.js +1 -1
  192. package/dist/esm-es5/pds-radio-group.entry.js.map +1 -1
  193. package/dist/esm-es5/pds-radio.entry.js +1 -1
  194. package/dist/esm-es5/pds-radio.entry.js.map +1 -1
  195. package/dist/esm-es5/pds-select.entry.js +1 -1
  196. package/dist/esm-es5/pds-select.entry.js.map +1 -1
  197. package/dist/esm-es5/pds-sortable-item.entry.js +1 -1
  198. package/dist/esm-es5/pds-switch.entry.js +1 -1
  199. package/dist/esm-es5/pds-tab.entry.js +1 -1
  200. package/dist/esm-es5/pds-tab.entry.js.map +1 -1
  201. package/dist/esm-es5/pds-table-head-cell.entry.js +1 -1
  202. package/dist/esm-es5/pds-table-head-cell.entry.js.map +1 -1
  203. package/dist/esm-es5/pds-table-head.entry.js +1 -1
  204. package/dist/esm-es5/pds-table-head.entry.js.map +1 -1
  205. package/dist/esm-es5/pds-table-row.entry.js +1 -1
  206. package/dist/esm-es5/pds-table-row.entry.js.map +1 -1
  207. package/dist/esm-es5/pds-table.entry.js +1 -1
  208. package/dist/esm-es5/pds-table.entry.js.map +1 -1
  209. package/dist/esm-es5/pds-textarea.entry.js +1 -1
  210. package/dist/esm-es5/pds-textarea.entry.js.map +1 -1
  211. package/dist/esm-es5/pine-core.js +1 -1
  212. package/dist/pine-core/mock-pds-modal.entry.esm.js.map +1 -1
  213. package/dist/pine-core/{p-CsVpJw_i.system.js.map → p--gPqixhD.system.js.map} +1 -1
  214. package/dist/pine-core/p-0c84a3f4.entry.js +2 -0
  215. package/dist/pine-core/p-0c84a3f4.entry.js.map +1 -0
  216. package/dist/pine-core/p-0fdffed5.entry.js +2 -0
  217. package/dist/pine-core/{p-80017aa5.entry.js.map → p-0fdffed5.entry.js.map} +1 -1
  218. package/dist/pine-core/p-1282026f.entry.js +2 -0
  219. package/dist/pine-core/{p-be647b2a.entry.js.map → p-1282026f.entry.js.map} +1 -1
  220. package/dist/pine-core/p-131a8cff.system.entry.js +2 -0
  221. package/dist/pine-core/{p-dba5ca37.system.entry.js.map → p-131a8cff.system.entry.js.map} +1 -1
  222. package/dist/pine-core/{p-b64407a4.entry.js → p-15202869.entry.js} +2 -2
  223. package/dist/pine-core/{p-cd564179.entry.js → p-15650db8.entry.js} +2 -2
  224. package/dist/pine-core/p-198abda7.system.entry.js +2 -0
  225. package/dist/pine-core/p-198abda7.system.entry.js.map +1 -0
  226. package/dist/pine-core/{p-9998c2a0.entry.js → p-1daf66d1.entry.js} +2 -2
  227. package/dist/pine-core/{p-e08503a7.entry.js → p-20f255e6.entry.js} +2 -2
  228. package/dist/pine-core/{p-e08503a7.entry.js.map → p-20f255e6.entry.js.map} +1 -1
  229. package/dist/pine-core/p-35f644cf.system.entry.js +2 -0
  230. package/dist/pine-core/{p-cf910e8b.system.entry.js.map → p-35f644cf.system.entry.js.map} +1 -1
  231. package/dist/pine-core/p-3f0a6a75.system.entry.js +2 -0
  232. package/dist/pine-core/p-3f0a6a75.system.entry.js.map +1 -0
  233. package/dist/pine-core/{p-0398f6e3.entry.js → p-41cc9270.entry.js} +2 -2
  234. package/dist/pine-core/p-41d89f20.entry.js +2 -0
  235. package/dist/pine-core/p-41d89f20.entry.js.map +1 -0
  236. package/dist/pine-core/p-426e90cb.entry.js +2 -0
  237. package/dist/pine-core/p-426e90cb.entry.js.map +1 -0
  238. package/dist/pine-core/p-49c1eab0.entry.js +2 -0
  239. package/dist/pine-core/{p-58fa5c8f.entry.js.map → p-49c1eab0.entry.js.map} +1 -1
  240. package/dist/pine-core/{p-670b1551.system.entry.js → p-54a02bb5.system.entry.js} +2 -2
  241. package/dist/pine-core/{p-670b1551.system.entry.js.map → p-54a02bb5.system.entry.js.map} +1 -1
  242. package/dist/pine-core/p-5b7ab891.entry.js +2 -0
  243. package/dist/pine-core/{p-e6b39ec1.entry.js.map → p-5b7ab891.entry.js.map} +1 -1
  244. package/dist/pine-core/{p-428a96f9.entry.js → p-6cba6806.entry.js} +2 -2
  245. package/dist/pine-core/p-6fcac53b.entry.js +2 -0
  246. package/dist/pine-core/{p-8007f4de.entry.js.map → p-6fcac53b.entry.js.map} +1 -1
  247. package/dist/pine-core/{p-03209958.system.entry.js → p-732e2564.system.entry.js} +2 -2
  248. package/dist/pine-core/{p-2d3da08b.system.entry.js → p-8f2a5a4c.system.entry.js} +2 -2
  249. package/dist/pine-core/p-8f2a5a4c.system.entry.js.map +1 -0
  250. package/dist/pine-core/{p-91954848.entry.js → p-95f2782c.entry.js} +2 -2
  251. package/dist/pine-core/{p-91954848.entry.js.map → p-95f2782c.entry.js.map} +1 -1
  252. package/dist/pine-core/p-98824683.entry.js +2 -0
  253. package/dist/pine-core/p-98824683.entry.js.map +1 -0
  254. package/dist/pine-core/{p-43f1eead.entry.js → p-9b3794cd.entry.js} +2 -2
  255. package/dist/pine-core/p-9b3794cd.entry.js.map +1 -0
  256. package/dist/pine-core/p-9bfaed7e.system.entry.js +2 -0
  257. package/dist/pine-core/p-9bfaed7e.system.entry.js.map +1 -0
  258. package/dist/pine-core/{p-3f8a5f3d.system.entry.js → p-9d6b6ff3.system.entry.js} +2 -2
  259. package/dist/pine-core/p-9d6b6ff3.system.entry.js.map +1 -0
  260. package/dist/pine-core/{p-dfcdd55d.system.entry.js → p-9f53eb94.system.entry.js} +2 -2
  261. package/dist/pine-core/p-B8OHXU49.system.js.map +1 -0
  262. package/dist/pine-core/{p-Cwz8YTwo.system.js.map → p-BCKPcTKX.system.js.map} +1 -1
  263. package/dist/pine-core/p-BOn7G6db.system.js.map +1 -0
  264. package/dist/pine-core/p-B_Co5NfG.system.js.map +1 -0
  265. package/dist/pine-core/p-C48G0LPH.system.js.map +1 -0
  266. package/dist/pine-core/{p-BjRES1T-.system.js.map → p-CGo2P4Fr.system.js.map} +1 -1
  267. package/dist/pine-core/{p-e50YjICS.system.js → p-CKzDRRgx.system.js} +1 -1
  268. package/dist/pine-core/p-CKzDRRgx.system.js.map +1 -0
  269. package/dist/pine-core/p-CTfQ_9yC.system.js.map +1 -0
  270. package/dist/pine-core/p-CTjTtD1R.system.js.map +1 -0
  271. package/dist/pine-core/p-CXGuX44q.system.js.map +1 -0
  272. package/dist/pine-core/{p-D2aexWnE.system.js.map → p-Ch7MRoFE.system.js.map} +1 -1
  273. package/dist/pine-core/p-ChiYqN-p.system.js.map +1 -0
  274. package/dist/pine-core/p-DAvCgWA9.system.js.map +1 -0
  275. package/dist/pine-core/{p-BK-Kji1Y.system.js.map → p-DB45WSlG.system.js.map} +1 -1
  276. package/dist/pine-core/{p-PAmjcE4m.system.js.map → p-DC2NZwtk.system.js.map} +1 -1
  277. package/dist/pine-core/p-DQawTYre.system.js.map +1 -0
  278. package/dist/pine-core/p-DQs506y8.system.js.map +1 -0
  279. package/dist/pine-core/p-DyrNlfLT.system.js.map +1 -0
  280. package/dist/pine-core/p-JAVnELnm.system.js +1 -1
  281. package/dist/pine-core/p-LEkjdrKv.system.js.map +1 -0
  282. package/dist/pine-core/{p-BQImnLWy.system.js.map → p-WhfStK1C.system.js.map} +1 -1
  283. package/dist/pine-core/{p-5b2b3e8a.entry.js → p-a08b60ae.entry.js} +2 -2
  284. package/dist/pine-core/p-a737df90.entry.js +2 -0
  285. package/dist/pine-core/{p-0869fe00.entry.js.map → p-a737df90.entry.js.map} +1 -1
  286. package/dist/pine-core/{p-65db991d.entry.js → p-b02936d2.entry.js} +2 -2
  287. package/dist/pine-core/p-b30424e3.system.entry.js +2 -0
  288. package/dist/pine-core/{p-bd53ca9a.system.entry.js.map → p-b30424e3.system.entry.js.map} +1 -1
  289. package/dist/pine-core/p-bbc349b3.system.entry.js +2 -0
  290. package/dist/pine-core/p-bbc349b3.system.entry.js.map +1 -0
  291. package/dist/pine-core/{p-04a7b66c.system.entry.js → p-c03e2c5d.system.entry.js} +2 -2
  292. package/dist/pine-core/p-c2d17093.system.entry.js +2 -0
  293. package/dist/pine-core/{p-3a231ae4.system.entry.js.map → p-c2d17093.system.entry.js.map} +1 -1
  294. package/dist/pine-core/p-cb6c279a.system.entry.js +2 -0
  295. package/dist/pine-core/{p-a226ecdb.system.entry.js.map → p-cb6c279a.system.entry.js.map} +1 -1
  296. package/dist/pine-core/{p-6ace63a3.system.entry.js → p-cd335ec2.system.entry.js} +2 -2
  297. package/dist/pine-core/p-cf2e1c07.system.entry.js +2 -0
  298. package/dist/pine-core/{p-676f1f32.system.entry.js.map → p-cf2e1c07.system.entry.js.map} +1 -1
  299. package/dist/pine-core/{p-c9f97ccb.system.entry.js → p-dad604e4.system.entry.js} +2 -2
  300. package/dist/pine-core/p-e2104c31.entry.js +2 -0
  301. package/dist/pine-core/{p-e837b577.entry.js.map → p-e2104c31.entry.js.map} +1 -1
  302. package/dist/pine-core/p-e3d81bee.system.entry.js +2 -0
  303. package/dist/pine-core/{p-847fc77b.system.entry.js.map → p-e3d81bee.system.entry.js.map} +1 -1
  304. package/dist/pine-core/{p-94788439.system.entry.js → p-e5bc22b6.system.entry.js} +2 -2
  305. package/dist/pine-core/p-e846b67f.system.entry.js +2 -0
  306. package/dist/pine-core/p-e846b67f.system.entry.js.map +1 -0
  307. package/dist/pine-core/p-e8aad8dc.entry.js +2 -0
  308. package/dist/pine-core/p-e8aad8dc.entry.js.map +1 -0
  309. package/dist/pine-core/p-f69d3fd6.entry.js +2 -0
  310. package/dist/pine-core/p-f69d3fd6.entry.js.map +1 -0
  311. package/dist/pine-core/p-f79f6f08.system.entry.js +2 -0
  312. package/dist/pine-core/p-f79f6f08.system.entry.js.map +1 -0
  313. package/dist/pine-core/{p-7ccd2fd6.system.entry.js → p-f9ef2f74.system.entry.js} +2 -2
  314. package/dist/pine-core/p-fc0ee6da.entry.js +2 -0
  315. package/dist/pine-core/p-fc0ee6da.entry.js.map +1 -0
  316. package/dist/pine-core/{p-c08ab042.system.entry.js → p-ff182316.system.entry.js} +2 -2
  317. package/dist/pine-core/{p-c08ab042.system.entry.js.map → p-ff182316.system.entry.js.map} +1 -1
  318. package/dist/pine-core/p-jBhqNO5u.system.js.map +1 -0
  319. package/dist/pine-core/p-pw5cGGlu.system.js.map +1 -0
  320. package/dist/pine-core/p-r_cS5LMw.system.js.map +1 -0
  321. package/dist/pine-core/p-uv97KtT8.system.js.map +1 -0
  322. package/dist/pine-core/{p-CShvJnsl.js → p-xbb79yLt.js} +1 -1
  323. package/dist/pine-core/p-xbb79yLt.js.map +1 -0
  324. package/dist/pine-core/pds-alert.entry.esm.js.map +1 -1
  325. package/dist/pine-core/pds-avatar.entry.esm.js.map +1 -1
  326. package/dist/pine-core/pds-checkbox.entry.esm.js.map +1 -1
  327. package/dist/pine-core/pds-copytext.entry.esm.js.map +1 -1
  328. package/dist/pine-core/pds-input.entry.esm.js.map +1 -1
  329. package/dist/pine-core/pds-link.entry.esm.js.map +1 -1
  330. package/dist/pine-core/pds-modal-content.entry.esm.js.map +1 -1
  331. package/dist/pine-core/pds-modal.entry.esm.js.map +1 -1
  332. package/dist/pine-core/pds-radio-group.entry.esm.js.map +1 -1
  333. package/dist/pine-core/pds-radio.entry.esm.js.map +1 -1
  334. package/dist/pine-core/pds-select.entry.esm.js.map +1 -1
  335. package/dist/pine-core/pds-tab.entry.esm.js.map +1 -1
  336. package/dist/pine-core/pds-table-head-cell.entry.esm.js.map +1 -1
  337. package/dist/pine-core/pds-table-head.entry.esm.js.map +1 -1
  338. package/dist/pine-core/pds-table-row.entry.esm.js.map +1 -1
  339. package/dist/pine-core/pds-table.entry.esm.js.map +1 -1
  340. package/dist/pine-core/pds-textarea.entry.esm.js.map +1 -1
  341. package/dist/pine-core/pine-core.esm.js +1 -1
  342. package/dist/types/components/pds-modal/test/mock-pds-modal.d.ts +2 -2
  343. package/dist/types/components/pds-table/pds-table-head/pds-table-head.d.ts +10 -0
  344. package/dist/types/components/pds-table/pds-table-head-cell/pds-table-head-cell.d.ts +12 -1
  345. package/dist/types/components/pds-table/pds-table-row/pds-table-row.d.ts +19 -0
  346. package/dist/types/components/pds-table/pds-table.d.ts +5 -0
  347. package/dist/types/components/pds-tabs/pds-tab/pds-tab.d.ts +6 -0
  348. package/dist/types/components.d.ts +42 -2
  349. package/dist/vscode.html-data.json +30 -2
  350. package/hydrate/index.js +225 -62
  351. package/hydrate/index.mjs +225 -62
  352. package/package.json +9 -9
  353. package/dist/cjs/index-BIrlTMGo.js.map +0 -1
  354. package/dist/esm/index-CShvJnsl.js.map +0 -1
  355. package/dist/esm-es5/index-CShvJnsl.js.map +0 -1
  356. package/dist/pine-core/p-04f92b5a.system.entry.js +0 -2
  357. package/dist/pine-core/p-04f92b5a.system.entry.js.map +0 -1
  358. package/dist/pine-core/p-0869fe00.entry.js +0 -2
  359. package/dist/pine-core/p-1f5ed7bb.system.entry.js +0 -2
  360. package/dist/pine-core/p-1f5ed7bb.system.entry.js.map +0 -1
  361. package/dist/pine-core/p-227d5375.entry.js +0 -2
  362. package/dist/pine-core/p-227d5375.entry.js.map +0 -1
  363. package/dist/pine-core/p-2d3da08b.system.entry.js.map +0 -1
  364. package/dist/pine-core/p-372a6081.entry.js +0 -2
  365. package/dist/pine-core/p-372a6081.entry.js.map +0 -1
  366. package/dist/pine-core/p-3a231ae4.system.entry.js +0 -2
  367. package/dist/pine-core/p-3f8a5f3d.system.entry.js.map +0 -1
  368. package/dist/pine-core/p-43f1eead.entry.js.map +0 -1
  369. package/dist/pine-core/p-58fa5c8f.entry.js +0 -2
  370. package/dist/pine-core/p-5d7c4fbb.entry.js +0 -2
  371. package/dist/pine-core/p-5d7c4fbb.entry.js.map +0 -1
  372. package/dist/pine-core/p-65c566a2.system.entry.js +0 -2
  373. package/dist/pine-core/p-65c566a2.system.entry.js.map +0 -1
  374. package/dist/pine-core/p-676f1f32.system.entry.js +0 -2
  375. package/dist/pine-core/p-6de73f62.entry.js +0 -2
  376. package/dist/pine-core/p-6de73f62.entry.js.map +0 -1
  377. package/dist/pine-core/p-80017aa5.entry.js +0 -2
  378. package/dist/pine-core/p-8007f4de.entry.js +0 -2
  379. package/dist/pine-core/p-847fc77b.system.entry.js +0 -2
  380. package/dist/pine-core/p-934229d8.entry.js +0 -2
  381. package/dist/pine-core/p-934229d8.entry.js.map +0 -1
  382. package/dist/pine-core/p-B1wJrRWz.system.js.map +0 -1
  383. package/dist/pine-core/p-BUwuPP5j.system.js.map +0 -1
  384. package/dist/pine-core/p-BVjyFx0r.system.js.map +0 -1
  385. package/dist/pine-core/p-BZj284A2.system.js.map +0 -1
  386. package/dist/pine-core/p-Bp1qn6CS.system.js.map +0 -1
  387. package/dist/pine-core/p-C56crVDC.system.js.map +0 -1
  388. package/dist/pine-core/p-CJJ3xfku.system.js.map +0 -1
  389. package/dist/pine-core/p-CShvJnsl.js.map +0 -1
  390. package/dist/pine-core/p-CgF-S6vZ.system.js.map +0 -1
  391. package/dist/pine-core/p-CrjhL65U.system.js.map +0 -1
  392. package/dist/pine-core/p-CrzS8Mmy.system.js.map +0 -1
  393. package/dist/pine-core/p-D8bibuWO.system.js.map +0 -1
  394. package/dist/pine-core/p-DBdgdjLr.system.js.map +0 -1
  395. package/dist/pine-core/p-D_LvnDUT.system.js.map +0 -1
  396. package/dist/pine-core/p-DaQV83Gx.system.js.map +0 -1
  397. package/dist/pine-core/p-Drfvoxcd.system.js.map +0 -1
  398. package/dist/pine-core/p-GKNvlYGa.system.js.map +0 -1
  399. package/dist/pine-core/p-a226ecdb.system.entry.js +0 -2
  400. package/dist/pine-core/p-a54f4dfd.system.entry.js +0 -2
  401. package/dist/pine-core/p-a54f4dfd.system.entry.js.map +0 -1
  402. package/dist/pine-core/p-b59ac781.entry.js +0 -2
  403. package/dist/pine-core/p-b59ac781.entry.js.map +0 -1
  404. package/dist/pine-core/p-b6a503cc.system.entry.js +0 -2
  405. package/dist/pine-core/p-b6a503cc.system.entry.js.map +0 -1
  406. package/dist/pine-core/p-b9a14564.system.entry.js +0 -2
  407. package/dist/pine-core/p-b9a14564.system.entry.js.map +0 -1
  408. package/dist/pine-core/p-bd53ca9a.system.entry.js +0 -2
  409. package/dist/pine-core/p-be647b2a.entry.js +0 -2
  410. package/dist/pine-core/p-cf4df489.entry.js +0 -2
  411. package/dist/pine-core/p-cf4df489.entry.js.map +0 -1
  412. package/dist/pine-core/p-cf910e8b.system.entry.js +0 -2
  413. package/dist/pine-core/p-dba5ca37.system.entry.js +0 -2
  414. package/dist/pine-core/p-e50YjICS.system.js.map +0 -1
  415. package/dist/pine-core/p-e6b39ec1.entry.js +0 -2
  416. package/dist/pine-core/p-e837b577.entry.js +0 -2
  417. package/dist/pine-core/p-ejoWgOZK.system.js.map +0 -1
  418. /package/dist/pine-core/{p-b64407a4.entry.js.map → p-15202869.entry.js.map} +0 -0
  419. /package/dist/pine-core/{p-cd564179.entry.js.map → p-15650db8.entry.js.map} +0 -0
  420. /package/dist/pine-core/{p-9998c2a0.entry.js.map → p-1daf66d1.entry.js.map} +0 -0
  421. /package/dist/pine-core/{p-0398f6e3.entry.js.map → p-41cc9270.entry.js.map} +0 -0
  422. /package/dist/pine-core/{p-428a96f9.entry.js.map → p-6cba6806.entry.js.map} +0 -0
  423. /package/dist/pine-core/{p-03209958.system.entry.js.map → p-732e2564.system.entry.js.map} +0 -0
  424. /package/dist/pine-core/{p-dfcdd55d.system.entry.js.map → p-9f53eb94.system.entry.js.map} +0 -0
  425. /package/dist/pine-core/{p-5b2b3e8a.entry.js.map → p-a08b60ae.entry.js.map} +0 -0
  426. /package/dist/pine-core/{p-65db991d.entry.js.map → p-b02936d2.entry.js.map} +0 -0
  427. /package/dist/pine-core/{p-04a7b66c.system.entry.js.map → p-c03e2c5d.system.entry.js.map} +0 -0
  428. /package/dist/pine-core/{p-6ace63a3.system.entry.js.map → p-cd335ec2.system.entry.js.map} +0 -0
  429. /package/dist/pine-core/{p-c9f97ccb.system.entry.js.map → p-dad604e4.system.entry.js.map} +0 -0
  430. /package/dist/pine-core/{p-94788439.system.entry.js.map → p-e5bc22b6.system.entry.js.map} +0 -0
  431. /package/dist/pine-core/{p-7ccd2fd6.system.entry.js.map → p-f9ef2f74.system.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"pds-table-head-cell.js","sourceRoot":"","sources":["../../../../../src/components/pds-table/pds-table-head-cell/pds-table-head-cell.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Host, Prop, h, Event, EventEmitter, State } from '@stencil/core';\n\nimport { downSmall, upSmall } from '@pine-ds/icons/icons';\n\n@Component({\n tag: 'pds-table-head-cell',\n styleUrls: ['pds-table-head-cell.scss'],\n shadow: true,\n})\nexport class PdsTableHeadCell {\n @Element() hostElement: HTMLPdsTableHeadCellElement;\n private tableRef: HTMLPdsTableElement;\n private scrollContainer: HTMLElement | null = null;\n private setupTimer: number | undefined;\n private setupRetries: number = 0;\n\n /**\n * Sets the text alignment within the head cell.\n */\n @Prop() cellAlign?: 'start' | 'center' | 'end' | 'justify';\n\n /**\n * Determines whether the table column is sortable when set to `true`.\n */\n @Prop() sortable: boolean;\n\n /**\n * Event emitted to signal that a table column header has been sorted, providing information about the sorted column's name and sorting direction.\n */\n @Event() pdsTableSort: EventEmitter<{ column: string; direction: string }>;\n\n /**\n * The direction of sorting.\n */\n @State() private sortingDirection: 'asc' | 'desc' = 'asc';\n\n /**\n * Determines if the table is currently scrolling.\n * @defaultValue false\n */\n @State() private tableScrolling: boolean = false;\n\n /**\n * Determines if the table row is currently selected.\n * @defaultValue false\n */\n @State() isSelected: boolean = false;\n\n componentWillRender() {\n this.tableRef = this.hostElement.closest('pds-table') as HTMLPdsTableElement;\n }\n\n componentDidLoad() {\n if (this.tableRef && this.tableRef.responsive && this.tableRef.fixedColumn) {\n // For responsive tables with fixed columns, set up scroll detection\n // This enables the first column header to show a shadow when the table is scrolled horizontally\n this.setupScrollListener();\n }\n }\n\n disconnectedCallback() {\n this.cleanupScrollListener();\n }\n\n private setupScrollListener() {\n if (!this.tableRef) return;\n\n // Query shadowRoot once and cache the container\n const container = this.tableRef.shadowRoot?.querySelector('.pds-table-responsive-container') as HTMLElement;\n\n if (container) {\n // Container available immediately\n this.scrollContainer = container;\n this.scrollContainer.addEventListener('scroll', this.handleScroll, { passive: true });\n this.handleScroll(); // Initial check\n this.setupRetries = 0; // Reset counter on success\n } else {\n // Container not ready, set up timer for retry with bounds\n this.setupTimer = window.setTimeout(() => {\n if (this.scrollContainer) return; // Already found\n this.setupRetries = (this.setupRetries || 0) + 1;\n if (this.setupRetries <= 50) {\n this.setupScrollListener();\n } else {\n console.warn('Failed to find responsive container after 50 attempts');\n }\n }, 100);\n }\n }\n\n private cleanupScrollListener() {\n if (this.scrollContainer) {\n this.scrollContainer.removeEventListener('scroll', this.handleScroll);\n this.scrollContainer = null;\n }\n\n if (this.setupTimer !== undefined) {\n window.clearTimeout(this.setupTimer);\n this.setupTimer = undefined;\n }\n\n this.setupRetries = 0; // Reset retry counter\n }\n\n /**\n * Handles scroll events to update fixed column shadow state.\n * Updates the tableScrolling state to control CSS classes for fixed column shadows.\n * @private\n */\n private handleScroll = () => {\n if (!this.scrollContainer) {\n return;\n }\n\n try {\n this.tableScrolling = this.scrollContainer.scrollLeft > 0;\n } catch (error) {\n console.warn('Scroll handler error:', error);\n }\n };\n\n private toggleSort = () => {\n if (this.sortable) {\n const column = this.hostElement.innerText.trim();\n this.sortingDirection = this.sortingDirection === 'asc' ? 'desc' : 'asc';\n\n this.tableRef.querySelectorAll('pds-table-head-cell').forEach((headCell) => {\n headCell.classList.remove('is-active');\n });\n\n this.hostElement.classList.toggle('is-active');\n this.pdsTableSort.emit({ column, direction: this.sortingDirection });\n }\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.tableRef && this.tableRef.compact) {\n classNames.push('is-compact');\n }\n\n if (this.cellAlign) {\n classNames.push(`pds-table-head-cell--align-${this.cellAlign}`);\n }\n\n if (this.sortable) {\n classNames.push('is-sortable');\n }\n\n if (this.sortable && this.sortingDirection !== null) {\n classNames.push('sort-' + this.sortingDirection);\n }\n\n if (this.tableRef && this.tableRef.fixedColumn && this.tableScrolling) {\n classNames.push('has-scrolled');\n }\n\n return classNames.join(' ');\n }\n\n render() {\n return (\n <Host\n class={this.classNames()}\n role=\"columnheader\"\n onClick={this.toggleSort}\n part=\"head-cell\"\n style={\n this.tableRef &&\n this.tableRef.fixedColumn &&\n this.tableRef.selectable\n ? { '--fixed-cell-position': '40px' }\n : {}\n }\n >\n <slot></slot>\n {this.sortable && (\n <pds-icon icon={this.sortingDirection === 'asc' ? upSmall : downSmall} part=\"sort-icon\" />\n )}\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"pds-table-head-cell.js","sourceRoot":"","sources":["../../../../../src/components/pds-table/pds-table-head-cell/pds-table-head-cell.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Host, Prop, h, Event, EventEmitter, State } from '@stencil/core';\n\nimport { downSmall, upSmall } from '@pine-ds/icons/icons';\n\n@Component({\n tag: 'pds-table-head-cell',\n styleUrls: ['pds-table-head-cell.scss'],\n shadow: true,\n})\nexport class PdsTableHeadCell {\n @Element() hostElement: HTMLPdsTableHeadCellElement;\n private tableRef: HTMLPdsTableElement;\n private scrollContainer: HTMLElement | null = null;\n private setupTimer: number | undefined;\n private setupRetries: number = 0;\n private headObserver?: MutationObserver;\n\n /**\n * Sets the text alignment within the head cell.\n */\n @Prop() cellAlign?: 'start' | 'center' | 'end' | 'justify';\n\n /**\n * Determines whether the table column is sortable when set to `true`.\n */\n @Prop() sortable: boolean;\n\n /**\n * Event emitted to signal that a table column header has been sorted, providing information about the sorted column's name and sorting direction.\n */\n @Event() pdsTableSort: EventEmitter<{ column: string; direction: string }>;\n\n /**\n * The direction of sorting.\n */\n @State() private sortingDirection: 'asc' | 'desc' = 'asc';\n\n /**\n * Determines if the table is currently scrolling.\n * @defaultValue false\n */\n @State() private tableScrolling: boolean = false;\n\n /**\n * Determines if the table row is currently selected.\n * @defaultValue false\n */\n @State() isSelected: boolean = false;\n\n /**\n * Determines if the parent table-head has the border attribute.\n * @defaultValue false\n */\n @State() private hasHeadBorder: boolean = false;\n\n /**\n * Determines if the parent table-head has the background attribute.\n * @defaultValue false\n */\n @State() private hasHeadBackground: boolean = false;\n\n componentWillLoad() {\n // Set initial references and state before first render\n this.tableRef = this.hostElement.closest('pds-table') as HTMLPdsTableElement;\n\n const tableHead = this.hostElement.closest('pds-table-head') as HTMLElement;\n if (tableHead) {\n this.hasHeadBorder = tableHead.hasAttribute('border');\n this.hasHeadBackground = tableHead.hasAttribute('background');\n }\n }\n\n componentDidLoad() {\n if (this.tableRef && this.tableRef.responsive && this.tableRef.fixedColumn) {\n // For responsive tables with fixed columns, set up scroll detection\n // This enables the first column header to show a shadow when the table is scrolled horizontally\n this.setupScrollListener();\n }\n\n // Watch for changes to the parent table-head's border and background attributes\n const tableHead = this.hostElement.closest('pds-table-head') as HTMLElement;\n if (tableHead && typeof MutationObserver !== 'undefined') {\n // Defensive guard: disconnect existing observer before creating a new one\n if (this.headObserver) {\n this.headObserver.disconnect();\n }\n\n this.headObserver = new MutationObserver(() => {\n // Update state when border or background attributes change\n this.hasHeadBorder = tableHead.hasAttribute('border');\n this.hasHeadBackground = tableHead.hasAttribute('background');\n });\n\n this.headObserver.observe(tableHead, {\n attributes: true,\n attributeFilter: ['border', 'background']\n });\n }\n }\n\n disconnectedCallback() {\n this.cleanupScrollListener();\n\n if (this.headObserver) {\n this.headObserver.disconnect();\n }\n }\n\n\n private setupScrollListener() {\n if (!this.tableRef) return;\n\n // Query shadowRoot once and cache the container\n const container = this.tableRef.shadowRoot?.querySelector('.pds-table-responsive-container') as HTMLElement;\n\n if (container) {\n // Container available immediately\n this.scrollContainer = container;\n this.scrollContainer.addEventListener('scroll', this.handleScroll, { passive: true });\n this.handleScroll(); // Initial check\n this.setupRetries = 0; // Reset counter on success\n } else {\n // Container not ready, set up timer for retry with bounds\n this.setupTimer = window.setTimeout(() => {\n if (this.scrollContainer) return; // Already found\n this.setupRetries = (this.setupRetries || 0) + 1;\n if (this.setupRetries <= 50) {\n this.setupScrollListener();\n } else {\n console.warn('Failed to find responsive container after 50 attempts');\n }\n }, 100);\n }\n }\n\n private cleanupScrollListener() {\n if (this.scrollContainer) {\n this.scrollContainer.removeEventListener('scroll', this.handleScroll);\n this.scrollContainer = null;\n }\n\n if (this.setupTimer !== undefined) {\n window.clearTimeout(this.setupTimer);\n this.setupTimer = undefined;\n }\n\n this.setupRetries = 0; // Reset retry counter\n }\n\n /**\n * Handles scroll events to update fixed column shadow state.\n * Updates the tableScrolling state to control CSS classes for fixed column shadows.\n * @private\n */\n private handleScroll = () => {\n if (!this.scrollContainer) {\n return;\n }\n\n try {\n this.tableScrolling = this.scrollContainer.scrollLeft > 0;\n } catch (error) {\n console.warn('Scroll handler error:', error);\n }\n };\n\n private toggleSort = () => {\n if (this.sortable) {\n const column = this.hostElement.innerText.trim();\n this.sortingDirection = this.sortingDirection === 'asc' ? 'desc' : 'asc';\n\n this.tableRef.querySelectorAll('pds-table-head-cell').forEach((headCell) => {\n headCell.classList.remove('is-active');\n });\n\n this.hostElement.classList.toggle('is-active');\n this.pdsTableSort.emit({ column, direction: this.sortingDirection });\n }\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.tableRef && this.tableRef.compact) {\n classNames.push('is-compact');\n }\n\n if (this.cellAlign) {\n classNames.push(`pds-table-head-cell--align-${this.cellAlign}`);\n }\n\n if (this.sortable) {\n classNames.push('is-sortable');\n }\n\n if (this.sortable && this.sortingDirection !== null) {\n classNames.push('sort-' + this.sortingDirection);\n }\n\n if (this.tableRef && this.tableRef.fixedColumn && this.tableScrolling) {\n classNames.push('has-scrolled');\n }\n\n if (this.hasHeadBackground) {\n classNames.push('has-head-background');\n }\n\n if (this.hasHeadBorder) {\n classNames.push('has-head-border');\n }\n\n return classNames.join(' ');\n }\n\n render() {\n return (\n <Host\n class={this.classNames()}\n role=\"columnheader\"\n onClick={this.toggleSort}\n part=\"head-cell\"\n style={\n this.tableRef &&\n this.tableRef.fixedColumn &&\n this.tableRef.selectable\n ? { '--fixed-cell-position': '40px' }\n : {}\n }\n >\n <slot></slot>\n {this.sortable && (\n <pds-icon icon={this.sortingDirection === 'asc' ? upSmall : downSmall} part=\"sort-icon\" />\n )}\n </Host>\n );\n }\n}\n"]}
@@ -18,4 +18,14 @@
18
18
  :host(.is-selected)::part(checkbox-cell),
19
19
  :host(.is-selected) ::slotted(pds-table-cell) {
20
20
  background: var(--color-background-interactive);
21
+ }
22
+
23
+ :host(.has-divider) ::slotted(pds-table-cell),
24
+ :host(.has-divider) pds-table-cell {
25
+ border-block-end: var(--pine-border-width-thin) solid var(--pine-color-border-subtle);
26
+ }
27
+
28
+ :host(.has-divider.is-last-row) ::slotted(pds-table-cell),
29
+ :host(.has-divider.is-last-row) pds-table-cell {
30
+ border-block-end: 0;
21
31
  }
@@ -2,6 +2,18 @@ import { Host, h } from "@stencil/core";
2
2
  import { closest } from "../../../utils/closest";
3
3
  export class PdsTableRow {
4
4
  constructor() {
5
+ this.observer = null;
6
+ this.bodyObserver = null;
7
+ /**
8
+ * Determines if the row should have a divider border.
9
+ * @defaultValue false
10
+ */
11
+ this.hasDivider = false;
12
+ /**
13
+ * Determines if this is the last row in the table body.
14
+ * @defaultValue false
15
+ */
16
+ this.isLastRow = false;
5
17
  this.handleClick = () => {
6
18
  this.isSelected = !this.isSelected; // Toggle the selected state
7
19
  this.handleSelect(this.isSelected);
@@ -28,9 +40,17 @@ export class PdsTableRow {
28
40
  if (this.isSelected) {
29
41
  classNames.push("is-selected");
30
42
  }
31
- return classNames.join(' ');
43
+ if (this.hasDivider) {
44
+ classNames.push("has-divider");
45
+ }
46
+ if (this.isLastRow) {
47
+ classNames.push("is-last-row");
48
+ }
49
+ return classNames.join(' ');
32
50
  }
33
51
  componentWillRender() {
52
+ // Always refresh tableRef to get latest prop values
53
+ // This ensures we pick up changes to parent table props
34
54
  this.tableRef = this.hostElement.closest('pds-table');
35
55
  if (this.tableRef && this.tableRef.fixedColumn) {
36
56
  const tableCell = this.hostElement.querySelector('pds-table-cell');
@@ -38,12 +58,86 @@ export class PdsTableRow {
38
58
  }
39
59
  }
40
60
  componentWillLoad() {
61
+ // Handle initial selection state
41
62
  if (this.isSelected) {
42
63
  this.handleSelect(this.isSelected);
43
64
  }
65
+ // Note: tableRef, observers, and divider state are set up in connectedCallback
66
+ // which runs before componentWillLoad and also handles row re-attachment after sorting
67
+ }
68
+ connectedCallback() {
69
+ // When a row is re-attached to the DOM (e.g., after sorting),
70
+ // we need to re-setup the observers since disconnectedCallback cleared them
71
+ // Note: componentDidLoad only fires once, but connectedCallback fires every time
72
+ // the element is attached to the DOM (including after being moved)
73
+ this.tableRef = this.hostElement.closest('pds-table');
74
+ this.setupObservers();
75
+ this.updateDividerState();
76
+ }
77
+ disconnectedCallback() {
78
+ this.cleanupObservers();
79
+ }
80
+ cleanupObservers() {
81
+ if (this.observer) {
82
+ this.observer.disconnect();
83
+ this.observer = null;
84
+ }
85
+ if (this.bodyObserver) {
86
+ this.bodyObserver.disconnect();
87
+ this.bodyObserver = null;
88
+ }
89
+ }
90
+ setupObservers() {
91
+ // Clean up any existing observers first
92
+ this.cleanupObservers();
93
+ // Watch for changes to the parent table's row-dividers attribute
94
+ if (this.tableRef && typeof MutationObserver !== 'undefined') {
95
+ this.observer = new MutationObserver(() => {
96
+ this.updateDividerState();
97
+ });
98
+ this.observer.observe(this.tableRef, {
99
+ attributes: true,
100
+ attributeFilter: ['row-dividers']
101
+ });
102
+ }
103
+ // Watch for child list changes in table body (e.g., when rows are reordered during sorting)
104
+ const tableBody = this.hostElement.closest('pds-table-body');
105
+ if (tableBody && typeof MutationObserver !== 'undefined') {
106
+ this.bodyObserver = new MutationObserver(() => {
107
+ this.updateLastRowState();
108
+ });
109
+ this.bodyObserver.observe(tableBody, {
110
+ childList: true
111
+ });
112
+ }
113
+ }
114
+ shouldHaveDivider() {
115
+ if (!this.tableRef) {
116
+ this.tableRef = this.hostElement.closest('pds-table');
117
+ }
118
+ // Reads the parent pds-table component's rowDividers property value directly
119
+ return !!(this.tableRef && this.tableRef.rowDividers);
120
+ }
121
+ updateDividerState() {
122
+ this.hasDivider = this.shouldHaveDivider();
123
+ this.updateLastRowState();
124
+ }
125
+ updateLastRowState() {
126
+ if (!this.hasDivider) {
127
+ this.isLastRow = false;
128
+ return;
129
+ }
130
+ const tableBody = this.hostElement.closest('pds-table-body');
131
+ if (tableBody) {
132
+ const rows = Array.from(tableBody.querySelectorAll('pds-table-row'));
133
+ this.isLastRow = rows[rows.length - 1] === this.hostElement;
134
+ }
135
+ else {
136
+ this.isLastRow = false;
137
+ }
44
138
  }
45
139
  render() {
46
- return (h(Host, { key: '39f3618ec10c42f53a78f0d18f78cb7546611ba2', class: this.classNames(), role: "row", part: "row" }, this.tableRef && this.tableRef.selectable && (h("pds-table-cell", { key: '3a0c2e4bd567d352a7ac8f55e5b9480cbd80fc7e', part: this.tableRef.fixedColumn ? 'checkbox-cell' : 'checkbox-cell', class: this.tableRef.selectable ? 'has-checkbox' : '' }, h("pds-checkbox", { key: '367d3dff69053eed7285f6a8487e4ac7c1aed079', componentId: this.generateUniqueId(), onClick: this.handleClick, indeterminate: this.indeterminate, label: "Select Row", hideLabel: true, checked: this.isSelected, part: "row-checkbox" }))), h("slot", { key: '302af95c4d1fe6c7c07aaf4442b1a144753bcb2d' })));
140
+ return (h(Host, { key: 'dedf37f2841e51a325b6c414d3e7ec0072bdf78f', class: this.classNames(), role: "row", part: "row" }, this.tableRef && this.tableRef.selectable && (h("pds-table-cell", { key: '3e9295398c8f48cb7aa78d10daf5201ae8f86e9f', part: this.tableRef.fixedColumn ? 'checkbox-cell' : 'checkbox-cell', class: this.tableRef.selectable ? 'has-checkbox' : '' }, h("pds-checkbox", { key: 'b786f181988110d3e3d47928da9290dfd79f5fbd', componentId: this.generateUniqueId(), onClick: this.handleClick, indeterminate: this.indeterminate, label: "Select Row", hideLabel: true, checked: this.isSelected, part: "row-checkbox" }))), h("slot", { key: 'd37e3d44d34f81553060185d96fb44a55a40edc8' })));
47
141
  }
48
142
  static get is() { return "pds-table-row"; }
49
143
  static get encapsulation() { return "shadow"; }
@@ -99,6 +193,12 @@ export class PdsTableRow {
99
193
  }
100
194
  };
101
195
  }
196
+ static get states() {
197
+ return {
198
+ "hasDivider": {},
199
+ "isLastRow": {}
200
+ };
201
+ }
102
202
  static get events() {
103
203
  return [{
104
204
  "method": "pdsTableRowSelected",
@@ -1 +1 @@
1
- {"version":3,"file":"pds-table-row.js","sourceRoot":"","sources":["../../../../../src/components/pds-table/pds-table-row/pds-table-row.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Host, h, Event, EventEmitter, Prop } from '@stencil/core';\n\nimport { closest } from '../../../utils/closest';\n\n@Component({\n tag: 'pds-table-row',\n styleUrls: ['pds-table-row.scss'],\n shadow: true,\n})\nexport class PdsTableRow {\n @Element() hostElement: HTMLPdsTableRowElement;\n private tableRef: HTMLPdsTableElement;\n\n /**\n * Determines if the row selected is in an indeterminate state.\n */\n @Prop({ mutable: true }) indeterminate?: boolean;\n\n /**\n * Determines if the table row is currently selected.\n */\n @Prop({ mutable: true }) isSelected?: boolean;\n\n /**\n * Event that is emitted when the checkbox is clicked, carrying the selected value.\n */\n @Event() pdsTableRowSelected: EventEmitter<{ rowIndex: number; isSelected: boolean; }>;\n\n private handleClick = () => {\n this.isSelected = !this.isSelected; // Toggle the selected state\n this.handleSelect(this.isSelected);\n }\n\n private handleSelect = (isSelected: boolean) => {\n this.indeterminate = false;\n\n if (!closest('pds-table-head', this.hostElement)) {\n const rowIndex = Array.from(this.hostElement.parentNode.children).indexOf(this.hostElement)\n this.pdsTableRowSelected.emit({\n rowIndex,\n isSelected,\n })\n }\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.isSelected) {\n classNames.push(\"is-selected\");\n }\n\n return classNames.join(' ');\n }\n\n componentWillRender() {\n this.tableRef = this.hostElement.closest('pds-table') as HTMLPdsTableElement;\n\n if (this.tableRef && this.tableRef.fixedColumn) {\n const tableCell = this.hostElement.querySelector('pds-table-cell');\n tableCell?.classList.add(\"is-fixed\");\n }\n }\n\n componentWillLoad() {\n if (this.isSelected) {\n this.handleSelect(this.isSelected);\n }\n }\n\n private generateUniqueId = () => {\n const randomString = Math.random().toString(36).substring(2, 8);\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const uniqueId = `${randomString}-${timestamp}`;\n\n return uniqueId;\n }\n\n render() {\n return (\n <Host\n class={this.classNames()}\n role=\"row\"\n part=\"row\"\n >\n {this.tableRef && this.tableRef.selectable && (\n <pds-table-cell part={this.tableRef.fixedColumn ? 'checkbox-cell' : 'checkbox-cell'} class={this.tableRef.selectable ? 'has-checkbox' : ''} >\n <pds-checkbox\n componentId={this.generateUniqueId()}\n onClick={this.handleClick}\n indeterminate={this.indeterminate}\n label={\"Select Row\"}\n hideLabel={true}\n checked={this.isSelected}\n part=\"row-checkbox\"\n />\n </pds-table-cell>\n )}\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"pds-table-row.js","sourceRoot":"","sources":["../../../../../src/components/pds-table/pds-table-row/pds-table-row.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Host, h, Event, EventEmitter, Prop, State } from '@stencil/core';\n\nimport { closest } from '../../../utils/closest';\n\n@Component({\n tag: 'pds-table-row',\n styleUrls: ['pds-table-row.scss'],\n shadow: true,\n})\nexport class PdsTableRow {\n @Element() hostElement: HTMLPdsTableRowElement;\n private tableRef: HTMLPdsTableElement;\n private observer: MutationObserver | null = null;\n private bodyObserver: MutationObserver | null = null;\n\n /**\n * Determines if the row selected is in an indeterminate state.\n */\n @Prop({ mutable: true }) indeterminate?: boolean;\n\n /**\n * Determines if the table row is currently selected.\n */\n @Prop({ mutable: true }) isSelected?: boolean;\n\n /**\n * Determines if the row should have a divider border.\n * @defaultValue false\n */\n @State() private hasDivider: boolean = false;\n\n /**\n * Determines if this is the last row in the table body.\n * @defaultValue false\n */\n @State() private isLastRow: boolean = false;\n\n /**\n * Event that is emitted when the checkbox is clicked, carrying the selected value.\n */\n @Event() pdsTableRowSelected: EventEmitter<{ rowIndex: number; isSelected: boolean; }>;\n\n private handleClick = () => {\n this.isSelected = !this.isSelected; // Toggle the selected state\n this.handleSelect(this.isSelected);\n }\n\n private handleSelect = (isSelected: boolean) => {\n this.indeterminate = false;\n\n if (!closest('pds-table-head', this.hostElement)) {\n const rowIndex = Array.from(this.hostElement.parentNode.children).indexOf(this.hostElement)\n this.pdsTableRowSelected.emit({\n rowIndex,\n isSelected,\n })\n }\n }\n\n private classNames() {\n const classNames = [];\n\n if (this.isSelected) {\n classNames.push(\"is-selected\");\n }\n\n if (this.hasDivider) {\n classNames.push(\"has-divider\");\n }\n\n if (this.isLastRow) {\n classNames.push(\"is-last-row\");\n }\n\n return classNames.join(' ');\n }\n\n componentWillRender() {\n // Always refresh tableRef to get latest prop values\n // This ensures we pick up changes to parent table props\n this.tableRef = this.hostElement.closest('pds-table') as HTMLPdsTableElement;\n\n if (this.tableRef && this.tableRef.fixedColumn) {\n const tableCell = this.hostElement.querySelector('pds-table-cell');\n tableCell?.classList.add(\"is-fixed\");\n }\n }\n\n componentWillLoad() {\n // Handle initial selection state\n if (this.isSelected) {\n this.handleSelect(this.isSelected);\n }\n // Note: tableRef, observers, and divider state are set up in connectedCallback\n // which runs before componentWillLoad and also handles row re-attachment after sorting\n }\n\n connectedCallback() {\n // When a row is re-attached to the DOM (e.g., after sorting),\n // we need to re-setup the observers since disconnectedCallback cleared them\n // Note: componentDidLoad only fires once, but connectedCallback fires every time\n // the element is attached to the DOM (including after being moved)\n this.tableRef = this.hostElement.closest('pds-table') as HTMLPdsTableElement;\n this.setupObservers();\n this.updateDividerState();\n }\n\n disconnectedCallback() {\n this.cleanupObservers();\n }\n\n private cleanupObservers() {\n if (this.observer) {\n this.observer.disconnect();\n this.observer = null;\n }\n if (this.bodyObserver) {\n this.bodyObserver.disconnect();\n this.bodyObserver = null;\n }\n }\n\n private setupObservers() {\n // Clean up any existing observers first\n this.cleanupObservers();\n\n // Watch for changes to the parent table's row-dividers attribute\n if (this.tableRef && typeof MutationObserver !== 'undefined') {\n this.observer = new MutationObserver(() => {\n this.updateDividerState();\n });\n\n this.observer.observe(this.tableRef, {\n attributes: true,\n attributeFilter: ['row-dividers']\n });\n }\n\n // Watch for child list changes in table body (e.g., when rows are reordered during sorting)\n const tableBody = this.hostElement.closest('pds-table-body');\n if (tableBody && typeof MutationObserver !== 'undefined') {\n this.bodyObserver = new MutationObserver(() => {\n this.updateLastRowState();\n });\n\n this.bodyObserver.observe(tableBody, {\n childList: true\n });\n }\n }\n\n private shouldHaveDivider(): boolean {\n if (!this.tableRef) {\n this.tableRef = this.hostElement.closest('pds-table') as HTMLPdsTableElement;\n }\n // Reads the parent pds-table component's rowDividers property value directly\n return !!(this.tableRef && this.tableRef.rowDividers);\n }\n\n private updateDividerState() {\n this.hasDivider = this.shouldHaveDivider();\n this.updateLastRowState();\n }\n\n private updateLastRowState() {\n if (!this.hasDivider) {\n this.isLastRow = false;\n return;\n }\n\n const tableBody = this.hostElement.closest('pds-table-body');\n if (tableBody) {\n const rows = Array.from(tableBody.querySelectorAll('pds-table-row'));\n this.isLastRow = rows[rows.length - 1] === this.hostElement;\n } else {\n this.isLastRow = false;\n }\n }\n\n private generateUniqueId = () => {\n const randomString = Math.random().toString(36).substring(2, 8);\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const uniqueId = `${randomString}-${timestamp}`;\n\n return uniqueId;\n }\n\n render() {\n return (\n <Host\n class={this.classNames()}\n role=\"row\"\n part=\"row\"\n >\n {this.tableRef && this.tableRef.selectable && (\n <pds-table-cell part={this.tableRef.fixedColumn ? 'checkbox-cell' : 'checkbox-cell'} class={this.tableRef.selectable ? 'has-checkbox' : ''} >\n <pds-checkbox\n componentId={this.generateUniqueId()}\n onClick={this.handleClick}\n indeterminate={this.indeterminate}\n label={\"Select Row\"}\n hideLabel={true}\n checked={this.isSelected}\n part=\"row-checkbox\"\n />\n </pds-table-cell>\n )}\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
@@ -6,6 +6,11 @@ export class PdsTable {
6
6
  this._responsiveHandleResize = null;
7
7
  this._responsiveResizeObserver = null;
8
8
  this._teardownResponsive = null;
9
+ /**
10
+ * Adds divider borders between table rows. The last row will not have a bottom border.
11
+ * @defaultValue false
12
+ */
13
+ this.rowDividers = false;
9
14
  /**
10
15
  * The name of the column being sorted.
11
16
  * @defaultValue null
@@ -295,6 +300,29 @@ export class PdsTable {
295
300
  "setter": false,
296
301
  "reflect": false,
297
302
  "attribute": "selectable"
303
+ },
304
+ "rowDividers": {
305
+ "type": "boolean",
306
+ "mutable": false,
307
+ "complexType": {
308
+ "original": "boolean",
309
+ "resolved": "boolean",
310
+ "references": {}
311
+ },
312
+ "required": false,
313
+ "optional": false,
314
+ "docs": {
315
+ "tags": [{
316
+ "name": "defaultValue",
317
+ "text": "false"
318
+ }],
319
+ "text": "Adds divider borders between table rows. The last row will not have a bottom border."
320
+ },
321
+ "getter": false,
322
+ "setter": false,
323
+ "reflect": true,
324
+ "attribute": "row-dividers",
325
+ "defaultValue": "false"
298
326
  }
299
327
  };
300
328
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pds-table.js","sourceRoot":"","sources":["../../../../src/components/pds-table/pds-table.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, h, Prop, State, Listen } from '@stencil/core';\n\n@Component({\n tag: 'pds-table',\n styleUrls: ['pds-table.scss'],\n shadow: true,\n})\nexport class PdsTable {\n @Element() el: HTMLPdsTableElement;\n private scrollContainer: HTMLElement | null = null;\n private _responsiveHandleScroll: (() => void) | null = null;\n private _responsiveHandleResize: (() => void) | null = null;\n private _responsiveResizeObserver: ResizeObserver | null = null;\n private _teardownResponsive: (() => void) | null = null;\n\n /**\n * Determines if the table displays with reduced table cell padding.\n */\n @Prop() compact: boolean;\n\n /**\n * A unique identifier used for the table `id` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Enables the table to be responsive by horizontally scrolling on smaller screens.\n */\n @Prop() responsive: boolean;\n\n /**\n * Determines if the should display a fixed first column.\n */\n @Prop() fixedColumn: boolean;\n\n /**\n * Determines if the table displays checkboxes for selectable rows.\n */\n @Prop() selectable: boolean;\n\n /**\n * The name of the column being sorted.\n * @defaultValue null\n */\n @State() sortingColumn: string | null = null;\n\n /**\n * The direction of sorting.\n * @defaultValue 'asc'\n */\n @State() sortingDirection: 'asc' | 'desc' = 'asc';\n\n\n /**\n * Event that is emitted when the checkbox is clicked, carrying the rowIndex and selected value.\n */\n @Event() pdsTableSelect: EventEmitter<{ rowIndex: number; isSelected: boolean }>;\n\n /**\n * Event that is emitted when the select all checkbox is clicked, carrying the selected value.\n */\n @Event() pdsTableSelectAll: EventEmitter<{ isSelected: boolean }>;\n\n componentWillLoad() {\n this.sortingColumn = null;\n }\n\n componentDidLoad() {\n if (this.responsive) {\n this.setupResponsiveScrolling();\n }\n }\n\n disconnectedCallback() {\n if (this._teardownResponsive) {\n this._teardownResponsive();\n this._teardownResponsive = null;\n }\n }\n\n /**\n * Sets up responsive scrolling behavior for the table.\n *\n * This method creates a horizontal scrolling system where:\n * - The table content can scroll horizontally when it exceeds the container width\n * - Scroll shadows appear at the left/right edges to indicate scrollable content\n * - Fixed columns remain sticky during horizontal scrolling\n * - Shadows respect border-radius and don't appear when there's nothing to scroll\n *\n * Architecture:\n * - Host element: Contains everything, respects parent constraints\n * - Container element: Handles horizontal scrolling (overflow-x: auto)\n * - Shadow elements: Positioned fixed relative to host, show scroll indicators\n *\n * @private\n */\n private setupResponsiveScrolling() {\n const container = this.el.shadowRoot?.querySelector('.pds-table-responsive-container') as HTMLElement;\n const leftShadow = this.el.shadowRoot?.querySelector('.scroll-shadow-left') as HTMLElement;\n const rightShadow = this.el.shadowRoot?.querySelector('.scroll-shadow-right') as HTMLElement;\n\n if (!container || !leftShadow || !rightShadow) return;\n\n // Store container reference for cleanup\n this.scrollContainer = container;\n\n /**\n * Updates the visibility of scroll shadows based on current scroll position.\n * Left shadow: Shows when scrolled away from start (hidden if fixedColumn is enabled)\n * Right shadow: Shows when there's content to scroll and not at the end\n */\n this._responsiveHandleScroll = () => {\n if (!this.scrollContainer) return;\n\n const scrollLeft = this.scrollContainer.scrollLeft;\n const maxScrollLeft = this.scrollContainer.scrollWidth - this.scrollContainer.clientWidth;\n\n // Show left shadow when scrolled away from start, but not if there's a fixed column\n leftShadow.style.opacity = (scrollLeft > 0 && !this.fixedColumn) ? '1' : '0';\n\n // Show right shadow only if there's content to scroll AND not at end\n rightShadow.style.opacity = (maxScrollLeft > 0 && scrollLeft < maxScrollLeft - 1) ? '1' : '0';\n };\n\n // Add scroll event listener to container element\n this.scrollContainer.addEventListener('scroll', this._responsiveHandleScroll, { passive: true });\n\n // Add resize observer to update shadows when container size changes\n if (typeof window !== 'undefined' && window.ResizeObserver) {\n try {\n this._responsiveResizeObserver = new ResizeObserver(() => {\n this._responsiveHandleScroll?.();\n });\n this._responsiveResizeObserver.observe(this.scrollContainer);\n } catch (error) {\n // ResizeObserver not available in some environments (e.g., tests)\n // Fall back to window resize listener only\n }\n }\n\n // Listen for window resize as fallback\n if (typeof window !== 'undefined') {\n this._responsiveHandleResize = () => {\n this._responsiveHandleScroll?.();\n };\n window.addEventListener('resize', this._responsiveHandleResize);\n }\n\n // Create teardown function for cleanup\n this._teardownResponsive = () => {\n if (this.scrollContainer && this._responsiveHandleScroll) {\n this.scrollContainer.removeEventListener('scroll', this._responsiveHandleScroll);\n this.scrollContainer = null;\n }\n\n if (this._responsiveResizeObserver) {\n this._responsiveResizeObserver.disconnect();\n this._responsiveResizeObserver = null;\n }\n\n if (typeof window !== 'undefined' && this._responsiveHandleResize) {\n window.removeEventListener('resize', this._responsiveHandleResize);\n this._responsiveHandleResize = null;\n }\n\n this._responsiveHandleScroll = null;\n };\n\n // Initial check after setup\n this._responsiveHandleScroll();\n }\n\n\n private classNames() {\n const classNames = ['pds-table'];\n\n if (this.compact) {\n classNames.push('is-compact');\n }\n\n if (this.responsive) {\n classNames.push('is-responsive');\n }\n\n return classNames.join(' ');\n }\n\n private sortTable(column: string, direction: 'asc' | 'desc') {\n const tableBody = this.el.querySelector('pds-table-body');\n\n // Get the rows in the table body\n const tableRows = Array.from(tableBody.querySelectorAll('pds-table-row'));\n\n // Find the column index based on the column name\n const columnHeaderCells: HTMLElement[] = Array.from(\n this.el.querySelectorAll('pds-table-head-cell[sortable]')\n );\n\n const columnHeaderCell = columnHeaderCells.find(\n (cell) => cell.innerText.trim() === column\n );\n\n if (!columnHeaderCell) {\n console.warn(`Column \"${column}\" not found.`);\n return;\n }\n\n const columnIndex = columnHeaderCells.indexOf(columnHeaderCell);\n\n // Sort the rows based on the content of the specified column\n tableRows.sort((a, b) => {\n const valueA = a.querySelector(`pds-table-cell:nth-child(${columnIndex + 1})`).textContent.trim();\n const valueB = b.querySelector(`pds-table-cell:nth-child(${columnIndex + 1})`).textContent.trim();\n\n if (direction === 'asc') {\n return valueA.localeCompare(valueB, undefined, { sensitivity: 'base' });\n } else {\n return valueB.localeCompare(valueA, undefined, { sensitivity: 'base' });\n }\n });\n\n // Clear and append the sorted rows back to the table body\n tableBody.innerHTML = '';\n tableRows.forEach((row) => {\n tableBody.appendChild(row);\n });\n }\n\n @Listen('pdsTableSort')\n handleTableSort(event: CustomEvent<{ column: string; direction: 'asc' | 'desc' }>) {\n const { direction } = event.detail;\n this.sortTable(event.detail.column, direction);\n this.sortingColumn = event.detail.column;\n this.sortingDirection = direction;\n }\n\n @Listen('pdsTableSelectAll')\n handleTableSelectAll(event: CustomEvent<{ isSelected: boolean }>) {\n if (event.defaultPrevented) return;\n\n const pdsTableBody = this.el.querySelector('pds-table-body');\n const tableRows = Array.from(pdsTableBody.querySelectorAll('pds-table-row'));\n\n tableRows.forEach((row) => {\n row.isSelected = event.detail.isSelected;\n });\n }\n\n @Listen('pdsTableRowSelected')\n async handleTableSelect(event: CustomEvent<{ rowIndex: number; isSelected: boolean }>) {\n if (event.defaultPrevented) return;\n\n const allTableRows = this.el.querySelectorAll('pds-table-row');\n const allSelectedRows = Array.from(allTableRows).every((row) => row.isSelected);\n const noneSelectedRows = Array.from(allTableRows).every((row) => !row.isSelected);\n const pdsTableHead = this.el.querySelector('pds-table-head');\n if (!pdsTableHead) return;\n\n const headerCheckbox = pdsTableHead.shadowRoot.querySelector('pds-checkbox');\n headerCheckbox.checked = allSelectedRows;\n headerCheckbox.indeterminate = !allSelectedRows && !noneSelectedRows;\n }\n\n render() {\n if (this.responsive) {\n return (\n <Host\n class=\"pds-table is-responsive pds-table-responsive-host\"\n id={this.componentId}\n role=\"grid\"\n selectable={this.selectable}\n tabindex=\"0\"\n part=\"table responsive-table\"\n >\n <div class=\"scroll-shadow-left\" part=\"scroll-shadow-left\"></div>\n <div class=\"scroll-shadow-right\" part=\"scroll-shadow-right\"></div>\n <div class=\"pds-table-responsive-container\" part=\"responsive-container\">\n <div class=\"pds-table-responsive-wrapper\" part=\"responsive-wrapper\">\n <div class={this.classNames()} part=\"table-inner\">\n <slot></slot>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n\n return (\n <Host\n class={this.classNames()}\n id={this.componentId}\n role=\"grid\"\n selectable={this.selectable}\n tabindex=\"0\"\n part=\"table\"\n >\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"pds-table.js","sourceRoot":"","sources":["../../../../src/components/pds-table/pds-table.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, h, Prop, State, Listen } from '@stencil/core';\n\n@Component({\n tag: 'pds-table',\n styleUrls: ['pds-table.scss'],\n shadow: true,\n})\nexport class PdsTable {\n @Element() el: HTMLPdsTableElement;\n private scrollContainer: HTMLElement | null = null;\n private _responsiveHandleScroll: (() => void) | null = null;\n private _responsiveHandleResize: (() => void) | null = null;\n private _responsiveResizeObserver: ResizeObserver | null = null;\n private _teardownResponsive: (() => void) | null = null;\n\n /**\n * Determines if the table displays with reduced table cell padding.\n */\n @Prop() compact: boolean;\n\n /**\n * A unique identifier used for the table `id` attribute.\n */\n @Prop() componentId!: string;\n\n /**\n * Enables the table to be responsive by horizontally scrolling on smaller screens.\n */\n @Prop() responsive: boolean;\n\n /**\n * Determines if the should display a fixed first column.\n */\n @Prop() fixedColumn: boolean;\n\n /**\n * Determines if the table displays checkboxes for selectable rows.\n */\n @Prop() selectable: boolean;\n\n /**\n * Adds divider borders between table rows. The last row will not have a bottom border.\n * @defaultValue false\n */\n @Prop({ reflect: true }) rowDividers: boolean = false;\n\n /**\n * The name of the column being sorted.\n * @defaultValue null\n */\n @State() sortingColumn: string | null = null;\n\n /**\n * The direction of sorting.\n * @defaultValue 'asc'\n */\n @State() sortingDirection: 'asc' | 'desc' = 'asc';\n\n\n /**\n * Event that is emitted when the checkbox is clicked, carrying the rowIndex and selected value.\n */\n @Event() pdsTableSelect: EventEmitter<{ rowIndex: number; isSelected: boolean }>;\n\n /**\n * Event that is emitted when the select all checkbox is clicked, carrying the selected value.\n */\n @Event() pdsTableSelectAll: EventEmitter<{ isSelected: boolean }>;\n\n componentWillLoad() {\n this.sortingColumn = null;\n }\n\n componentDidLoad() {\n if (this.responsive) {\n this.setupResponsiveScrolling();\n }\n }\n\n disconnectedCallback() {\n if (this._teardownResponsive) {\n this._teardownResponsive();\n this._teardownResponsive = null;\n }\n }\n\n /**\n * Sets up responsive scrolling behavior for the table.\n *\n * This method creates a horizontal scrolling system where:\n * - The table content can scroll horizontally when it exceeds the container width\n * - Scroll shadows appear at the left/right edges to indicate scrollable content\n * - Fixed columns remain sticky during horizontal scrolling\n * - Shadows respect border-radius and don't appear when there's nothing to scroll\n *\n * Architecture:\n * - Host element: Contains everything, respects parent constraints\n * - Container element: Handles horizontal scrolling (overflow-x: auto)\n * - Shadow elements: Positioned fixed relative to host, show scroll indicators\n *\n * @private\n */\n private setupResponsiveScrolling() {\n const container = this.el.shadowRoot?.querySelector('.pds-table-responsive-container') as HTMLElement;\n const leftShadow = this.el.shadowRoot?.querySelector('.scroll-shadow-left') as HTMLElement;\n const rightShadow = this.el.shadowRoot?.querySelector('.scroll-shadow-right') as HTMLElement;\n\n if (!container || !leftShadow || !rightShadow) return;\n\n // Store container reference for cleanup\n this.scrollContainer = container;\n\n /**\n * Updates the visibility of scroll shadows based on current scroll position.\n * Left shadow: Shows when scrolled away from start (hidden if fixedColumn is enabled)\n * Right shadow: Shows when there's content to scroll and not at the end\n */\n this._responsiveHandleScroll = () => {\n if (!this.scrollContainer) return;\n\n const scrollLeft = this.scrollContainer.scrollLeft;\n const maxScrollLeft = this.scrollContainer.scrollWidth - this.scrollContainer.clientWidth;\n\n // Show left shadow when scrolled away from start, but not if there's a fixed column\n leftShadow.style.opacity = (scrollLeft > 0 && !this.fixedColumn) ? '1' : '0';\n\n // Show right shadow only if there's content to scroll AND not at end\n rightShadow.style.opacity = (maxScrollLeft > 0 && scrollLeft < maxScrollLeft - 1) ? '1' : '0';\n };\n\n // Add scroll event listener to container element\n this.scrollContainer.addEventListener('scroll', this._responsiveHandleScroll, { passive: true });\n\n // Add resize observer to update shadows when container size changes\n if (typeof window !== 'undefined' && window.ResizeObserver) {\n try {\n this._responsiveResizeObserver = new ResizeObserver(() => {\n this._responsiveHandleScroll?.();\n });\n this._responsiveResizeObserver.observe(this.scrollContainer);\n } catch (error) {\n // ResizeObserver not available in some environments (e.g., tests)\n // Fall back to window resize listener only\n }\n }\n\n // Listen for window resize as fallback\n if (typeof window !== 'undefined') {\n this._responsiveHandleResize = () => {\n this._responsiveHandleScroll?.();\n };\n window.addEventListener('resize', this._responsiveHandleResize);\n }\n\n // Create teardown function for cleanup\n this._teardownResponsive = () => {\n if (this.scrollContainer && this._responsiveHandleScroll) {\n this.scrollContainer.removeEventListener('scroll', this._responsiveHandleScroll);\n this.scrollContainer = null;\n }\n\n if (this._responsiveResizeObserver) {\n this._responsiveResizeObserver.disconnect();\n this._responsiveResizeObserver = null;\n }\n\n if (typeof window !== 'undefined' && this._responsiveHandleResize) {\n window.removeEventListener('resize', this._responsiveHandleResize);\n this._responsiveHandleResize = null;\n }\n\n this._responsiveHandleScroll = null;\n };\n\n // Initial check after setup\n this._responsiveHandleScroll();\n }\n\n\n private classNames() {\n const classNames = ['pds-table'];\n\n if (this.compact) {\n classNames.push('is-compact');\n }\n\n if (this.responsive) {\n classNames.push('is-responsive');\n }\n\n return classNames.join(' ');\n }\n\n private sortTable(column: string, direction: 'asc' | 'desc') {\n const tableBody = this.el.querySelector('pds-table-body');\n\n // Get the rows in the table body\n const tableRows = Array.from(tableBody.querySelectorAll('pds-table-row'));\n\n // Find the column index based on the column name\n const columnHeaderCells: HTMLElement[] = Array.from(\n this.el.querySelectorAll('pds-table-head-cell[sortable]')\n );\n\n const columnHeaderCell = columnHeaderCells.find(\n (cell) => cell.innerText.trim() === column\n );\n\n if (!columnHeaderCell) {\n console.warn(`Column \"${column}\" not found.`);\n return;\n }\n\n const columnIndex = columnHeaderCells.indexOf(columnHeaderCell);\n\n // Sort the rows based on the content of the specified column\n tableRows.sort((a, b) => {\n const valueA = a.querySelector(`pds-table-cell:nth-child(${columnIndex + 1})`).textContent.trim();\n const valueB = b.querySelector(`pds-table-cell:nth-child(${columnIndex + 1})`).textContent.trim();\n\n if (direction === 'asc') {\n return valueA.localeCompare(valueB, undefined, { sensitivity: 'base' });\n } else {\n return valueB.localeCompare(valueA, undefined, { sensitivity: 'base' });\n }\n });\n\n // Clear and append the sorted rows back to the table body\n tableBody.innerHTML = '';\n tableRows.forEach((row) => {\n tableBody.appendChild(row);\n });\n }\n\n @Listen('pdsTableSort')\n handleTableSort(event: CustomEvent<{ column: string; direction: 'asc' | 'desc' }>) {\n const { direction } = event.detail;\n this.sortTable(event.detail.column, direction);\n this.sortingColumn = event.detail.column;\n this.sortingDirection = direction;\n }\n\n @Listen('pdsTableSelectAll')\n handleTableSelectAll(event: CustomEvent<{ isSelected: boolean }>) {\n if (event.defaultPrevented) return;\n\n const pdsTableBody = this.el.querySelector('pds-table-body');\n const tableRows = Array.from(pdsTableBody.querySelectorAll('pds-table-row'));\n\n tableRows.forEach((row) => {\n row.isSelected = event.detail.isSelected;\n });\n }\n\n @Listen('pdsTableRowSelected')\n async handleTableSelect(event: CustomEvent<{ rowIndex: number; isSelected: boolean }>) {\n if (event.defaultPrevented) return;\n\n const allTableRows = this.el.querySelectorAll('pds-table-row');\n const allSelectedRows = Array.from(allTableRows).every((row) => row.isSelected);\n const noneSelectedRows = Array.from(allTableRows).every((row) => !row.isSelected);\n const pdsTableHead = this.el.querySelector('pds-table-head');\n if (!pdsTableHead) return;\n\n const headerCheckbox = pdsTableHead.shadowRoot.querySelector('pds-checkbox');\n headerCheckbox.checked = allSelectedRows;\n headerCheckbox.indeterminate = !allSelectedRows && !noneSelectedRows;\n }\n\n render() {\n if (this.responsive) {\n return (\n <Host\n class=\"pds-table is-responsive pds-table-responsive-host\"\n id={this.componentId}\n role=\"grid\"\n selectable={this.selectable}\n tabindex=\"0\"\n part=\"table responsive-table\"\n >\n <div class=\"scroll-shadow-left\" part=\"scroll-shadow-left\"></div>\n <div class=\"scroll-shadow-right\" part=\"scroll-shadow-right\"></div>\n <div class=\"pds-table-responsive-container\" part=\"responsive-container\">\n <div class=\"pds-table-responsive-wrapper\" part=\"responsive-wrapper\">\n <div class={this.classNames()} part=\"table-inner\">\n <slot></slot>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n\n return (\n <Host\n class={this.classNames()}\n id={this.componentId}\n role=\"grid\"\n selectable={this.selectable}\n tabindex=\"0\"\n part=\"table\"\n >\n <slot></slot>\n </Host>\n );\n }\n}\n"]}
@@ -2,10 +2,29 @@ import { html } from 'lit-html';
2
2
 
3
3
 
4
4
  export default {
5
-
6
5
  component: 'pds-table',
7
6
  parameters: {},
8
7
  title: 'components/Table',
8
+ argTypes: {
9
+ border: {
10
+ control: { type: 'boolean' },
11
+ description: 'Adds top and bottom borders to the table head',
12
+ table: {
13
+ category: 'Table Head',
14
+ },
15
+ },
16
+ background: {
17
+ control: { type: 'boolean' },
18
+ description: 'Adds a subtle background color to the table head',
19
+ table: {
20
+ category: 'Table Head',
21
+ },
22
+ },
23
+ rowDividers: {
24
+ control: { type: 'boolean' },
25
+ description: 'Adds divider borders between table rows. The last row will not have a bottom border',
26
+ },
27
+ },
9
28
  };
10
29
 
11
30
  const BaseTemplate = (args) => html`
@@ -14,9 +33,13 @@ const BaseTemplate = (args) => html`
14
33
  component-id="${args.componentId}"
15
34
  ?fixed-column=${args.fixedColumn}
16
35
  ?responsive=${args.responsive}
36
+ ?row-dividers=${args.rowDividers}
17
37
  ?selectable=${args.selectable}
18
38
  >
19
- <pds-table-head>
39
+ <pds-table-head
40
+ ?border=${args.border}
41
+ ?background=${args.background}
42
+ >
20
43
  <pds-table-head-cell>Column Title</pds-table-head-cell>
21
44
  <pds-table-head-cell>Column Title</pds-table-head-cell>
22
45
  <pds-table-head-cell>Column Title</pds-table-head-cell>
@@ -46,9 +69,13 @@ const AlignmentTemplate = (args) => html`
46
69
  component-id="${args.componentId}"
47
70
  ?fixed-column=${args.fixedColumn}
48
71
  ?responsive=${args.responsive}
72
+ ?row-dividers=${args.rowDividers}
49
73
  ?selectable=${args.selectable}
50
74
  >
51
- <pds-table-head>
75
+ <pds-table-head
76
+ ?border=${args.border}
77
+ ?background=${args.background}
78
+ >
52
79
  <pds-table-head-cell cell-align="start">Name</pds-table-head-cell>
53
80
  <pds-table-head-cell cell-align="center">Amount</pds-table-head-cell>
54
81
  <pds-table-head-cell cell-align="end">Status</pds-table-head-cell>
@@ -82,9 +109,13 @@ const ResponsiveTemplate = (args) => html`
82
109
  component-id="${args.componentId}"
83
110
  ?fixed-column=${args.fixedColumn}
84
111
  ?responsive=${args.responsive}
112
+ ?row-dividers=${args.rowDividers}
85
113
  ?selectable=${args.selectable}
86
114
  >
87
- <pds-table-head>
115
+ <pds-table-head
116
+ ?border=${args.border}
117
+ ?background=${args.background}
118
+ >
88
119
  <pds-table-head-cell>Column Title</pds-table-head-cell>
89
120
  <pds-table-head-cell>Column Title</pds-table-head-cell>
90
121
  <pds-table-head-cell>Column Title</pds-table-head-cell>
@@ -150,9 +181,13 @@ const SortableTemplate = (args) => html`
150
181
  component-id="${args.componentId}"
151
182
  ?fixed-column=${args.fixedColumn}
152
183
  ?responsive=${args.responsive}
184
+ ?row-dividers=${args.rowDividers}
153
185
  ?selectable=${args.selectable}
154
186
  >
155
- <pds-table-head>
187
+ <pds-table-head
188
+ ?border=${args.border}
189
+ ?background=${args.background}
190
+ >
156
191
  <pds-table-head-cell sortable=${args.sortable}>Name</pds-table-head-cell>
157
192
  <pds-table-head-cell sortable=${args.sortable}>Email</pds-table-head-cell>
158
193
  <pds-table-head-cell sortable=${args.sortable}>Email Marketing</pds-table-head-cell>
@@ -206,7 +241,10 @@ Default.args = {
206
241
  compact: false,
207
242
  componentId: 'default',
208
243
  fixedColumn: false,
244
+ border: false,
245
+ background: false,
209
246
  responsive: false,
247
+ rowDividers: false,
210
248
  selectable: false,
211
249
  };
212
250
 
@@ -215,7 +253,10 @@ Alignment.args = {
215
253
  compact: false,
216
254
  componentId: 'alignment',
217
255
  fixedColumn: false,
256
+ border: false,
257
+ background: false,
218
258
  responsive: false,
259
+ rowDividers: false,
219
260
  selectable: false,
220
261
  };
221
262
 
@@ -224,7 +265,10 @@ Compact.args = {
224
265
  compact: true,
225
266
  componentId: 'compact',
226
267
  fixedColumn: false,
268
+ border: false,
269
+ background: false,
227
270
  responsive: false,
271
+ rowDividers: false,
228
272
  selectable: false,
229
273
  };
230
274
 
@@ -233,7 +277,10 @@ Selectable.args = {
233
277
  compact: false,
234
278
  componentId: 'selectable',
235
279
  fixedColumn: false,
280
+ border: false,
281
+ background: false,
236
282
  responsive: false,
283
+ rowDividers: false,
237
284
  selectable: true,
238
285
  };
239
286
 
@@ -242,7 +289,10 @@ Responsive.args = {
242
289
  compact: false,
243
290
  componentId: 'responsive',
244
291
  fixedColumn: false,
292
+ border: false,
293
+ background: false,
245
294
  responsive: true,
295
+ rowDividers: false,
246
296
  selectable: false,
247
297
  };
248
298
 
@@ -251,7 +301,10 @@ fixedColumn.args = {
251
301
  compact: false,
252
302
  componentId: 'responsive',
253
303
  fixedColumn: true,
304
+ border: false,
305
+ background: false,
254
306
  responsive: true,
307
+ rowDividers: false,
255
308
  selectable: false,
256
309
  };
257
310
 
@@ -260,7 +313,22 @@ Sortable.args = {
260
313
  compact: false,
261
314
  componentId: 'sortable',
262
315
  fixedColumn: false,
316
+ border: false,
317
+ background: false,
263
318
  responsive: false,
319
+ rowDividers: false,
264
320
  selectable: false,
265
321
  sortable: true,
266
322
  };
323
+
324
+ export const RowDividers = BaseTemplate.bind();
325
+ RowDividers.args = {
326
+ compact: false,
327
+ componentId: 'row-dividers',
328
+ fixedColumn: false,
329
+ border: false,
330
+ background: false,
331
+ responsive: false,
332
+ rowDividers: true,
333
+ selectable: false,
334
+ };
@@ -29,7 +29,7 @@ pds-tab {
29
29
  .pds-tab.is-active .pds-tab__content::after, .pds-tab[aria-selected=true] .pds-tab__content::after {
30
30
  opacity: 1;
31
31
  }
32
- .pds-tab:hover {
32
+ .pds-tab:hover:not(:disabled) {
33
33
  color: var(--pine-color-text);
34
34
  }
35
35
  .pds-tab:focus {
@@ -39,6 +39,11 @@ pds-tab {
39
39
  outline: var(--pine-outline-focus);
40
40
  outline-offset: var(--pine-border-width);
41
41
  }
42
+ .pds-tab:disabled, .pds-tab.is-disabled {
43
+ color: var(--pine-color-text-disabled);
44
+ cursor: not-allowed;
45
+ pointer-events: none;
46
+ }
42
47
  .pds-tab .pds-tab__content {
43
48
  font-family: var(--pine-font-family-body);
44
49
  font-size: var(--pine-font-size);
@@ -81,13 +86,17 @@ pds-tab {
81
86
  .pds-tabs--availability .pds-tab.is-active .pds-tab-edge, .pds-tabs--availability .pds-tab[aria-selected=true] .pds-tab-edge {
82
87
  z-index: var(--pine-z-index-raised);
83
88
  }
84
- .pds-tabs--availability .pds-tab:hover:not(.is-active, [aria-selected=true]) {
89
+ .pds-tabs--availability .pds-tab:hover:not(.is-active, [aria-selected=true], :disabled) {
85
90
  --color-background-tab: var(--pine-color-secondary-hover);
86
91
  color: var(--pine-color-text);
87
92
  }
88
93
  .pds-tabs--availability .pds-tab:focus-visible {
89
94
  color: var(--pine-color-text-secondary);
90
95
  }
96
+ .pds-tabs--availability .pds-tab:disabled, .pds-tabs--availability .pds-tab.is-disabled {
97
+ --color-background-tab: transparent;
98
+ color: var(--pine-color-text-disabled);
99
+ }
91
100
  .pds-tabs--availability .pds-tab__content {
92
101
  padding-block-end: 7px;
93
102
  }
@@ -131,12 +140,19 @@ pds-tab {
131
140
  background-color: var(--pine-color-primary);
132
141
  color: var(--pine-color-text-primary);
133
142
  }
134
- .pds-tabs--filter .pds-tab.is-active:hover, .pds-tabs--filter .pds-tab[aria-selected=true]:hover {
143
+ .pds-tabs--filter .pds-tab.is-active:hover:not(:disabled), .pds-tabs--filter .pds-tab[aria-selected=true]:hover:not(:disabled) {
135
144
  background-color: var(--pine-color-primary-hover);
136
145
  }
137
- .pds-tabs--filter .pds-tab:hover:not(.is-active, [aria-selected=true]) {
146
+ .pds-tabs--filter .pds-tab:hover:not(.is-active, [aria-selected=true], :disabled) {
138
147
  background-color: var(--pine-color-border-disabled);
139
148
  }
149
+ .pds-tabs--filter .pds-tab:disabled, .pds-tabs--filter .pds-tab.is-disabled {
150
+ background-color: transparent;
151
+ color: var(--pine-color-text-disabled);
152
+ }
153
+ .pds-tabs--filter .pds-tab:disabled.is-active, .pds-tabs--filter .pds-tab:disabled[aria-selected=true], .pds-tabs--filter .pds-tab.is-disabled.is-active, .pds-tabs--filter .pds-tab.is-disabled[aria-selected=true] {
154
+ background-color: var(--pine-color-primary-disabled);
155
+ }
140
156
  .pds-tabs--filter .pds-tab__content {
141
157
  padding-block-end: var(--pine-dimension-none);
142
158
  }
@@ -177,4 +193,7 @@ pds-tab {
177
193
  }
178
194
  .pds-tabs--pill .pds-tab.is-active .pds-tab__content::after, .pds-tabs--pill .pds-tab[aria-selected=true] .pds-tab__content::after {
179
195
  opacity: 0;
196
+ }
197
+ .pds-tabs--pill .pds-tab:disabled, .pds-tabs--pill .pds-tab.is-disabled {
198
+ color: var(--pine-color-text-disabled);
180
199
  }