@govtechsg/sgds-web-component 3.1.2 → 3.2.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 (143) hide show
  1. package/base/button.js +1 -1
  2. package/base/card.js +1 -1
  3. package/components/Button/index.umd.js +1 -1
  4. package/components/Card/index.umd.js +53 -12
  5. package/components/Card/index.umd.js.map +1 -1
  6. package/components/Card/sgds-card.js +5 -3
  7. package/components/Card/sgds-card.js.map +1 -1
  8. package/components/Datepicker/index.umd.js +1 -1
  9. package/components/FileUpload/index.umd.js +1 -1
  10. package/components/IconButton/index.umd.js +1 -1
  11. package/components/Mainnav/index.umd.js +5 -5
  12. package/components/Mainnav/index.umd.js.map +1 -1
  13. package/components/Mainnav/sgds-mainnav-item.d.ts +1 -1
  14. package/components/Mainnav/sgds-mainnav-item.js +2 -2
  15. package/components/Mainnav/sgds-mainnav-item.js.map +1 -1
  16. package/components/Modal/index.umd.js +1 -1
  17. package/components/Modal/index.umd.js.map +1 -1
  18. package/components/Pagination/index.umd.js +1 -1
  19. package/components/QuantityToggle/index.umd.js +1 -1
  20. package/components/Subnav/index.umd.js +69 -97
  21. package/components/Subnav/index.umd.js.map +1 -1
  22. package/components/Subnav/sgds-subnav-item.d.ts +1 -1
  23. package/components/Subnav/sgds-subnav-item.js +2 -2
  24. package/components/Subnav/sgds-subnav-item.js.map +1 -1
  25. package/components/Subnav/sgds-subnav.d.ts +4 -3
  26. package/components/Subnav/sgds-subnav.js +66 -95
  27. package/components/Subnav/sgds-subnav.js.map +1 -1
  28. package/components/Subnav/subnav-item.js +1 -1
  29. package/components/Subnav/subnav.js +1 -1
  30. package/components/Table/index.d.ts +7 -1
  31. package/components/Table/index.js +6 -0
  32. package/components/Table/index.js.map +1 -1
  33. package/components/Table/index.umd.js +182 -16
  34. package/components/Table/index.umd.js.map +1 -1
  35. package/components/Table/sgds-table-cell.d.ts +13 -0
  36. package/components/Table/sgds-table-cell.js +22 -0
  37. package/components/Table/sgds-table-cell.js.map +1 -0
  38. package/components/Table/sgds-table-head.d.ts +18 -0
  39. package/components/Table/sgds-table-head.js +43 -0
  40. package/components/Table/sgds-table-head.js.map +1 -0
  41. package/components/Table/sgds-table-row.d.ts +13 -0
  42. package/components/Table/sgds-table-row.js +22 -0
  43. package/components/Table/sgds-table-row.js.map +1 -0
  44. package/components/Table/sgds-table.d.ts +5 -2
  45. package/components/Table/sgds-table.js +18 -13
  46. package/components/Table/sgds-table.js.map +1 -1
  47. package/components/Table/table-cell.js +6 -0
  48. package/components/Table/table-cell.js.map +1 -0
  49. package/components/Table/table-head.js +6 -0
  50. package/components/Table/table-head.js.map +1 -0
  51. package/components/Table/table-row.js +6 -0
  52. package/components/Table/table-row.js.map +1 -0
  53. package/components/Table/table.js +1 -1
  54. package/components/Toast/index.umd.js +1 -1
  55. package/components/Toast/toast.js +1 -1
  56. package/components/index.umd.js +95 -119
  57. package/components/index.umd.js.map +1 -1
  58. package/index.umd.js +297 -246
  59. package/index.umd.js.map +1 -1
  60. package/package.json +1 -1
  61. package/react/base/button.cjs.js +1 -1
  62. package/react/base/button.js +1 -1
  63. package/react/base/card.cjs.js +1 -1
  64. package/react/base/card.js +1 -1
  65. package/react/components/Card/sgds-card.cjs.js +5 -3
  66. package/react/components/Card/sgds-card.cjs.js.map +1 -1
  67. package/react/components/Card/sgds-card.js +5 -3
  68. package/react/components/Card/sgds-card.js.map +1 -1
  69. package/react/components/Mainnav/sgds-mainnav-item.cjs.js +2 -2
  70. package/react/components/Mainnav/sgds-mainnav-item.cjs.js.map +1 -1
  71. package/react/components/Mainnav/sgds-mainnav-item.js +2 -2
  72. package/react/components/Mainnav/sgds-mainnav-item.js.map +1 -1
  73. package/react/components/Subnav/sgds-subnav-item.cjs.js +2 -2
  74. package/react/components/Subnav/sgds-subnav-item.cjs.js.map +1 -1
  75. package/react/components/Subnav/sgds-subnav-item.js +2 -2
  76. package/react/components/Subnav/sgds-subnav-item.js.map +1 -1
  77. package/react/components/Subnav/sgds-subnav.cjs.js +64 -93
  78. package/react/components/Subnav/sgds-subnav.cjs.js.map +1 -1
  79. package/react/components/Subnav/sgds-subnav.js +66 -95
  80. package/react/components/Subnav/sgds-subnav.js.map +1 -1
  81. package/react/components/Subnav/subnav-item.cjs.js +1 -1
  82. package/react/components/Subnav/subnav-item.js +1 -1
  83. package/react/components/Subnav/subnav.cjs.js +1 -1
  84. package/react/components/Subnav/subnav.js +1 -1
  85. package/react/components/Table/sgds-table-cell.cjs.js +28 -0
  86. package/react/components/Table/sgds-table-cell.cjs.js.map +1 -0
  87. package/react/components/Table/sgds-table-cell.js +23 -0
  88. package/react/components/Table/sgds-table-cell.js.map +1 -0
  89. package/react/components/Table/sgds-table-head.cjs.js +49 -0
  90. package/react/components/Table/sgds-table-head.cjs.js.map +1 -0
  91. package/react/components/Table/sgds-table-head.js +44 -0
  92. package/react/components/Table/sgds-table-head.js.map +1 -0
  93. package/react/components/Table/sgds-table-row.cjs.js +28 -0
  94. package/react/components/Table/sgds-table-row.cjs.js.map +1 -0
  95. package/react/components/Table/sgds-table-row.js +23 -0
  96. package/react/components/Table/sgds-table-row.js.map +1 -0
  97. package/react/components/Table/sgds-table.cjs.js +17 -12
  98. package/react/components/Table/sgds-table.cjs.js.map +1 -1
  99. package/react/components/Table/sgds-table.js +18 -13
  100. package/react/components/Table/sgds-table.js.map +1 -1
  101. package/react/components/Table/table-cell.cjs.js +11 -0
  102. package/react/components/Table/table-cell.cjs.js.map +1 -0
  103. package/react/components/Table/table-cell.js +7 -0
  104. package/react/components/Table/table-cell.js.map +1 -0
  105. package/react/components/Table/table-head.cjs.js +11 -0
  106. package/react/components/Table/table-head.cjs.js.map +1 -0
  107. package/react/components/Table/table-head.js +7 -0
  108. package/react/components/Table/table-head.js.map +1 -0
  109. package/react/components/Table/table-row.cjs.js +11 -0
  110. package/react/components/Table/table-row.cjs.js.map +1 -0
  111. package/react/components/Table/table-row.js +7 -0
  112. package/react/components/Table/table-row.js.map +1 -0
  113. package/react/components/Table/table.cjs.js +1 -1
  114. package/react/components/Table/table.js +1 -1
  115. package/react/components/Toast/toast.cjs.js +1 -1
  116. package/react/components/Toast/toast.js +1 -1
  117. package/react/index.cjs.js +26 -20
  118. package/react/index.cjs.js.map +1 -1
  119. package/react/index.d.ts +4 -1
  120. package/react/index.js +4 -1
  121. package/react/index.js.map +1 -1
  122. package/react/table-cell/index.cjs.js +40 -0
  123. package/react/table-cell/index.cjs.js.map +1 -0
  124. package/react/table-cell/index.d.ts +2 -0
  125. package/react/table-cell/index.js +16 -0
  126. package/react/table-cell/index.js.map +1 -0
  127. package/react/table-head/index.cjs.js +40 -0
  128. package/react/table-head/index.cjs.js.map +1 -0
  129. package/react/table-head/index.d.ts +2 -0
  130. package/react/table-head/index.js +16 -0
  131. package/react/table-head/index.js.map +1 -0
  132. package/react/table-row/index.cjs.js +40 -0
  133. package/react/table-row/index.cjs.js.map +1 -0
  134. package/react/table-row/index.d.ts +2 -0
  135. package/react/table-row/index.js +16 -0
  136. package/react/table-row/index.js.map +1 -0
  137. package/react/utils/breakpoints.cjs.js +2 -2
  138. package/react/utils/breakpoints.cjs.js.map +1 -1
  139. package/react/utils/breakpoints.js +2 -2
  140. package/react/utils/breakpoints.js.map +1 -1
  141. package/utils/breakpoints.d.ts +3 -3
  142. package/utils/breakpoints.js +2 -2
  143. package/utils/breakpoints.js.map +1 -1
@@ -4233,7 +4233,7 @@
4233
4233
  */
4234
4234
  const classMap = directive(ClassMapDirective);
4235
4235
 
4236
- var css_248z$1 = css`:host{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);color:var(--sgds-body-color-default);font-family:var(--sgds-font-family-brand);font-size:var(--sgds-font-size-2);font-weight:var(--sgds-font-weight-regular);line-height:var(--sgds-line-height-body);margin:0;*,:after,:before{box-sizing:border-box}:disabled{cursor:not-allowed}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}a[target=_blank]{align-items:center;display:flex;gap:var(--sgds-gap-2-xs)}::slotted(a[target=_blank]):after,a[target=_blank]:after{background-color:currentColor;content:"/";display:inline-block;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M9.274 3.9H9.3a.6.6 0 0 1 0 1.2c-.85 0-1.451 0-1.922.039-.463.038-.745.11-.968.223A2.4 2.4 0 0 0 5.361 6.41c-.113.223-.184.505-.222.968-.039.47-.04 1.072-.04 1.922v5.4c0 .85.001 1.451.04 1.922.038.463.11.745.222.968a2.4 2.4 0 0 0 1.05 1.048c.222.114.504.185.967.223.47.038 1.072.039 1.922.039h5.4c.85 0 1.451 0 1.921-.039.464-.038.746-.11.969-.223a2.4 2.4 0 0 0 1.048-1.048c.113-.223.185-.505.223-.968.038-.47.039-1.072.039-1.922a.6.6 0 1 1 1.2 0v.026c0 .818 0 1.469-.043 1.993-.044.538-.136.996-.35 1.415a3.6 3.6 0 0 1-1.573 1.574c-.42.213-.878.305-1.415.35-.525.042-1.175.042-1.993.042H9.274c-.818 0-1.469 0-1.993-.043-.538-.044-.996-.136-1.415-.35a3.6 3.6 0 0 1-1.574-1.573c-.213-.42-.305-.877-.35-1.415-.042-.524-.042-1.175-.042-1.993V9.274c0-.818 0-1.468.043-1.993.044-.538.136-.996.35-1.415a3.6 3.6 0 0 1 1.573-1.574c.42-.213.877-.305 1.415-.35C7.805 3.9 8.456 3.9 9.274 3.9Zm3.626.6a.6.6 0 0 1 .6-.6h6a.6.6 0 0 1 .6.6v6a.6.6 0 1 1-1.2 0V5.949l-5.976 5.975a.6.6 0 0 1-.848-.848L18.05 5.1H13.5a.6.6 0 0 1-.6-.6Z' fill='%230E0E0E'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M9.274 3.9H9.3a.6.6 0 0 1 0 1.2c-.85 0-1.451 0-1.922.039-.463.038-.745.11-.968.223A2.4 2.4 0 0 0 5.361 6.41c-.113.223-.184.505-.222.968-.039.47-.04 1.072-.04 1.922v5.4c0 .85.001 1.451.04 1.922.038.463.11.745.222.968a2.4 2.4 0 0 0 1.05 1.048c.222.114.504.185.967.223.47.038 1.072.039 1.922.039h5.4c.85 0 1.451 0 1.921-.039.464-.038.746-.11.969-.223a2.4 2.4 0 0 0 1.048-1.048c.113-.223.185-.505.223-.968.038-.47.039-1.072.039-1.922a.6.6 0 1 1 1.2 0v.026c0 .818 0 1.469-.043 1.993-.044.538-.136.996-.35 1.415a3.6 3.6 0 0 1-1.573 1.574c-.42.213-.878.305-1.415.35-.525.042-1.175.042-1.993.042H9.274c-.818 0-1.469 0-1.993-.043-.538-.044-.996-.136-1.415-.35a3.6 3.6 0 0 1-1.574-1.573c-.213-.42-.305-.877-.35-1.415-.042-.524-.042-1.175-.042-1.993V9.274c0-.818 0-1.468.043-1.993.044-.538.136-.996.35-1.415a3.6 3.6 0 0 1 1.573-1.574c.42-.213.877-.305 1.415-.35C7.805 3.9 8.456 3.9 9.274 3.9Zm3.626.6a.6.6 0 0 1 .6-.6h6a.6.6 0 0 1 .6.6v6a.6.6 0 1 1-1.2 0V5.949l-5.976 5.975a.6.6 0 0 1-.848-.848L18.05 5.1H13.5a.6.6 0 0 1-.6-.6Z' fill='%230E0E0E'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;padding:0 .45em}::slotted(svg){vertical-align:middle}}`;
4236
+ var css_248z$4 = css`:host{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);color:var(--sgds-body-color-default);font-family:var(--sgds-font-family-brand);font-size:var(--sgds-font-size-2);font-weight:var(--sgds-font-weight-regular);line-height:var(--sgds-line-height-body);margin:0;*,:after,:before{box-sizing:border-box}:disabled{cursor:not-allowed}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}a[target=_blank]{align-items:center;display:flex;gap:var(--sgds-gap-2-xs)}::slotted(a[target=_blank]):after,a[target=_blank]:after{background-color:currentColor;content:"/";display:inline-block;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M9.274 3.9H9.3a.6.6 0 0 1 0 1.2c-.85 0-1.451 0-1.922.039-.463.038-.745.11-.968.223A2.4 2.4 0 0 0 5.361 6.41c-.113.223-.184.505-.222.968-.039.47-.04 1.072-.04 1.922v5.4c0 .85.001 1.451.04 1.922.038.463.11.745.222.968a2.4 2.4 0 0 0 1.05 1.048c.222.114.504.185.967.223.47.038 1.072.039 1.922.039h5.4c.85 0 1.451 0 1.921-.039.464-.038.746-.11.969-.223a2.4 2.4 0 0 0 1.048-1.048c.113-.223.185-.505.223-.968.038-.47.039-1.072.039-1.922a.6.6 0 1 1 1.2 0v.026c0 .818 0 1.469-.043 1.993-.044.538-.136.996-.35 1.415a3.6 3.6 0 0 1-1.573 1.574c-.42.213-.878.305-1.415.35-.525.042-1.175.042-1.993.042H9.274c-.818 0-1.469 0-1.993-.043-.538-.044-.996-.136-1.415-.35a3.6 3.6 0 0 1-1.574-1.573c-.213-.42-.305-.877-.35-1.415-.042-.524-.042-1.175-.042-1.993V9.274c0-.818 0-1.468.043-1.993.044-.538.136-.996.35-1.415a3.6 3.6 0 0 1 1.573-1.574c.42-.213.877-.305 1.415-.35C7.805 3.9 8.456 3.9 9.274 3.9Zm3.626.6a.6.6 0 0 1 .6-.6h6a.6.6 0 0 1 .6.6v6a.6.6 0 1 1-1.2 0V5.949l-5.976 5.975a.6.6 0 0 1-.848-.848L18.05 5.1H13.5a.6.6 0 0 1-.6-.6Z' fill='%230E0E0E'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M9.274 3.9H9.3a.6.6 0 0 1 0 1.2c-.85 0-1.451 0-1.922.039-.463.038-.745.11-.968.223A2.4 2.4 0 0 0 5.361 6.41c-.113.223-.184.505-.222.968-.039.47-.04 1.072-.04 1.922v5.4c0 .85.001 1.451.04 1.922.038.463.11.745.222.968a2.4 2.4 0 0 0 1.05 1.048c.222.114.504.185.967.223.47.038 1.072.039 1.922.039h5.4c.85 0 1.451 0 1.921-.039.464-.038.746-.11.969-.223a2.4 2.4 0 0 0 1.048-1.048c.113-.223.185-.505.223-.968.038-.47.039-1.072.039-1.922a.6.6 0 1 1 1.2 0v.026c0 .818 0 1.469-.043 1.993-.044.538-.136.996-.35 1.415a3.6 3.6 0 0 1-1.573 1.574c-.42.213-.878.305-1.415.35-.525.042-1.175.042-1.993.042H9.274c-.818 0-1.469 0-1.993-.043-.538-.044-.996-.136-1.415-.35a3.6 3.6 0 0 1-1.574-1.573c-.213-.42-.305-.877-.35-1.415-.042-.524-.042-1.175-.042-1.993V9.274c0-.818 0-1.468.043-1.993.044-.538.136-.996.35-1.415a3.6 3.6 0 0 1 1.573-1.574c.42-.213.877-.305 1.415-.35C7.805 3.9 8.456 3.9 9.274 3.9Zm3.626.6a.6.6 0 0 1 .6-.6h6a.6.6 0 0 1 .6.6v6a.6.6 0 1 1-1.2 0V5.949l-5.976 5.975a.6.6 0 0 1-.848-.848L18.05 5.1H13.5a.6.6 0 0 1-.6-.6Z' fill='%230E0E0E'/%3E%3C/svg%3E");-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;padding:0 .45em}::slotted(svg){vertical-align:middle}}`;
4237
4237
 
4238
4238
  /**
4239
4239
  * @cssprop --sgds-{stateColor} - State colors in hexadecimal value
@@ -4290,14 +4290,67 @@
4290
4290
  });
4291
4291
  }
4292
4292
  }
4293
- SgdsElement.styles = [css_248z$1];
4293
+ SgdsElement.styles = [css_248z$4];
4294
4294
  /** @internal */
4295
4295
  SgdsElement.dependencies = {};
4296
4296
 
4297
- var css_248z = css`tbody,td,th,thead,tr{border:var(--sgds-border-width-0) solid;border-color:inherit}th{text-align:-webkit-match-parent}table{border-collapse:collapse;caption-side:bottom}.table{border-color:var(--sgds-border-color-default);vertical-align:top;width:100%}.table>:not(caption) td,.table>:not(caption) th{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);padding:var(--sgds-padding-lg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>thead th{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-emphasis)}.table-group-divider{border-top:calc(var(--sgds-border-width)*2) solid}.table>:not(:first-child){border-top:var(--sgds-border-width-1) solid var(--sgds-border-color-emphasis)}.table-responsive{-webkit-overflow-scrolling:touch;overflow-x:auto}@media (max-width:575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1399.98px){.table-responsive-xxl{-webkit-overflow-scrolling:touch;overflow-x:auto}}`;
4297
+ var css_248z$3 = css`tbody,td,th,thead,tr{border:var(--sgds-border-width-0) solid;border-color:inherit}th{text-align:-webkit-match-parent}table{border-collapse:collapse;caption-side:bottom}.table{border-color:var(--sgds-border-color-default);display:table;vertical-align:top;width:100%}.table>:not(caption) td,.table>:not(caption) th{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);padding:var(--sgds-padding-lg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>thead th{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-emphasis)}.table-group-divider{border-top:calc(var(--sgds-border-width)*2) solid}.table>:not(:first-child){border-top:var(--sgds-border-width-1) solid var(--sgds-border-color-emphasis)}.table-responsive{-webkit-overflow-scrolling:touch;overflow-x:auto}@media (max-width:575.98px){.table-responsive-sm{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:767.98px){.table-responsive-md{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:991.98px){.table-responsive-lg{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1199.98px){.table-responsive-xl{-webkit-overflow-scrolling:touch;overflow-x:auto}}@media (max-width:1399.98px){.table-responsive-xxl{-webkit-overflow-scrolling:touch;overflow-x:auto}}`;
4298
+
4299
+ class HasSlotController {
4300
+ constructor(host, ...slotNames) {
4301
+ this.slotNames = [];
4302
+ (this.host = host).addController(this);
4303
+ this.slotNames = slotNames;
4304
+ this.handleSlotChange = this.handleSlotChange.bind(this);
4305
+ }
4306
+ hasDefaultSlot() {
4307
+ return [...this.host.childNodes].some(node => {
4308
+ var _a;
4309
+ if (node.nodeType === node.TEXT_NODE && ((_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim()) !== "") {
4310
+ return true;
4311
+ }
4312
+ if (node.nodeType === node.ELEMENT_NODE) {
4313
+ const el = node;
4314
+ const tagName = el.tagName.toLowerCase();
4315
+ // Ignore visually hidden elements since they aren't rendered
4316
+ if (tagName === "sl-visually-hidden") {
4317
+ return false;
4318
+ }
4319
+ // If it doesn't have a slot attribute, it's part of the default slot
4320
+ if (!el.hasAttribute("slot")) {
4321
+ return true;
4322
+ }
4323
+ }
4324
+ return false;
4325
+ });
4326
+ }
4327
+ hasNamedSlot(name) {
4328
+ return this.host.querySelector(`:scope > [slot="${name}"]`) !== null;
4329
+ }
4330
+ test(slotName) {
4331
+ return slotName === "[default]" ? this.hasDefaultSlot() : this.hasNamedSlot(slotName);
4332
+ }
4333
+ hostConnected() {
4334
+ var _a;
4335
+ (_a = this.host.shadowRoot) === null || _a === void 0 ? void 0 : _a.addEventListener("slotchange", this.handleSlotChange);
4336
+ }
4337
+ hostDisconnected() {
4338
+ var _a;
4339
+ (_a = this.host.shadowRoot) === null || _a === void 0 ? void 0 : _a.removeEventListener("slotchange", this.handleSlotChange);
4340
+ }
4341
+ handleSlotChange(event) {
4342
+ const slot = event.target;
4343
+ if ((this.slotNames.includes("[default]") && !slot.name) || (slot.name && this.slotNames.includes(slot.name))) {
4344
+ this.host.requestUpdate();
4345
+ }
4346
+ }
4347
+ }
4298
4348
 
4299
4349
  /**
4300
- * @summary The use of a table is to organise a collections of data into readable rows
4350
+ * @summary Table is used for displaying collections of data in organized rows and columns.
4351
+ * It supports two rendering methods: supply an array of data for automatic table generation, or use the slot to insert custom table elements for full structural control.
4352
+ *
4353
+ * @slot - Insert custom table elements (such as rows, headers, or cells) to define the table structure manually.
4301
4354
  */
4302
4355
  class SgdsTable extends SgdsElement {
4303
4356
  constructor() {
@@ -4319,18 +4372,17 @@
4319
4372
  */
4320
4373
  this.headerPosition = "horizontal";
4321
4374
  /** @internal */
4322
- this.originalTableData = [];
4375
+ this.hasSlotController = new HasSlotController(this, "[default]");
4323
4376
  }
4324
4377
  connectedCallback() {
4325
4378
  super.connectedCallback();
4326
- this.originalTableData = [...this.tableData];
4327
4379
  }
4328
4380
  _renderTable() {
4329
4381
  if (this.headerPosition === "horizontal") {
4330
4382
  return html `
4331
4383
  <thead>
4332
4384
  <tr>
4333
- ${this.rowHeader.map((header, index) => html ` <th>${header}</th> `)}
4385
+ ${this.rowHeader.map((header) => html ` <th>${header}</th> `)}
4334
4386
  </tr>
4335
4387
  </thead>
4336
4388
  <tbody>
@@ -4347,7 +4399,7 @@
4347
4399
  <thead>
4348
4400
  <tr>
4349
4401
  <th></th>
4350
- ${this.rowHeader.map((header, index) => html ` <th>${header}</th> `)}
4402
+ ${this.rowHeader.map((header) => html ` <th>${header}</th> `)}
4351
4403
  </tr>
4352
4404
  </thead>
4353
4405
  <tbody>
@@ -4373,6 +4425,7 @@
4373
4425
  }
4374
4426
  }
4375
4427
  render() {
4428
+ const hasDefaultSlot = this.hasSlotController.test("[default]");
4376
4429
  return html `
4377
4430
  <div
4378
4431
  class=${classMap({
@@ -4384,14 +4437,18 @@
4384
4437
  })}
4385
4438
  tabindex="0"
4386
4439
  >
4387
- <table class="table">
4388
- ${this._renderTable()}
4389
- </table>
4440
+ <slot id="table-slot" class="table"></slot>
4441
+
4442
+ ${!hasDefaultSlot
4443
+ ? html `<table class="table">
4444
+ ${this._renderTable()}
4445
+ </table>`
4446
+ : ""}
4390
4447
  </div>
4391
4448
  `;
4392
4449
  }
4393
4450
  }
4394
- SgdsTable.styles = [...SgdsElement.styles, css_248z];
4451
+ SgdsTable.styles = [...SgdsElement.styles, css_248z$3];
4395
4452
  __decorate([
4396
4453
  property({ type: String, reflect: true })
4397
4454
  ], SgdsTable.prototype, "responsive", void 0);
@@ -4405,11 +4462,8 @@
4405
4462
  property({ type: Array })
4406
4463
  ], SgdsTable.prototype, "tableData", void 0);
4407
4464
  __decorate([
4408
- property({ type: String, reflect: true })
4465
+ property({ type: String })
4409
4466
  ], SgdsTable.prototype, "headerPosition", void 0);
4410
- __decorate([
4411
- state()
4412
- ], SgdsTable.prototype, "originalTableData", void 0);
4413
4467
 
4414
4468
  /**
4415
4469
  *
@@ -4422,7 +4476,119 @@
4422
4476
  }
4423
4477
  }
4424
4478
 
4479
+ var css_248z$2 = css`:host{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-emphasis);display:table-cell;font-weight:700;padding:var(--sgds-padding-lg)}:host(:not([border])){border-color:var(--sgds-border-color-muted)}`;
4480
+
4481
+ // @watch decorator
4482
+ //
4483
+ // Runs when an observed property changes, e.g. @property or @state, but before the component updates.
4484
+ //
4485
+ // To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start
4486
+ // watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.
4487
+ //
4488
+ // Usage:
4489
+ //
4490
+ // @watch('propName')
4491
+ // handlePropChange(oldValue, newValue) {
4492
+ // ...
4493
+ // }
4494
+ function watch(propName, options) {
4495
+ const resolvedOptions = Object.assign({ waitUntilFirstUpdate: false }, options);
4496
+ return (proto, decoratedFnName) => {
4497
+ // @ts-expect-error -- update is a protected property
4498
+ const { update } = proto;
4499
+ if (propName in proto) {
4500
+ const propNameKey = propName;
4501
+ // @ts-expect-error -- update is a protected property
4502
+ proto.update = function (changedProps) {
4503
+ if (changedProps.has(propNameKey)) {
4504
+ const oldValue = changedProps.get(propNameKey);
4505
+ const newValue = this[propNameKey];
4506
+ if (oldValue !== newValue) {
4507
+ if (!resolvedOptions.waitUntilFirstUpdate || this.hasUpdated) {
4508
+ this[decoratedFnName](oldValue, newValue);
4509
+ }
4510
+ }
4511
+ }
4512
+ update.call(this, changedProps);
4513
+ };
4514
+ }
4515
+ };
4516
+ }
4517
+
4518
+ /**
4519
+ * @summary Table head represents a table header cell that identifies a group of information within the table.
4520
+ *
4521
+ * @slot - Place any elements inside to display as the header content.
4522
+ */
4523
+ class SgdsTableHead extends SgdsElement {
4524
+ constructor() {
4525
+ super(...arguments);
4526
+ /**
4527
+ * To indicate if the header will have a darker bottom border style
4528
+ */
4529
+ this.border = false;
4530
+ }
4531
+ _handleBorderChange() {
4532
+ var _a, _b;
4533
+ this.border = ((_b = (_a = this.nextElementSibling) === null || _a === void 0 ? void 0 : _a.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase()) !== "sgds-table-cell";
4534
+ this.border ? this.setAttribute("border", "true") : this.removeAttribute("border");
4535
+ }
4536
+ connectedCallback() {
4537
+ super.connectedCallback();
4538
+ this.setAttribute("role", "columnheader");
4539
+ }
4540
+ render() {
4541
+ return html `<slot></slot>`;
4542
+ }
4543
+ }
4544
+ SgdsTableHead.styles = [...SgdsElement.styles, css_248z$2];
4545
+ __decorate([
4546
+ state()
4547
+ ], SgdsTableHead.prototype, "border", void 0);
4548
+ __decorate([
4549
+ watch("border")
4550
+ ], SgdsTableHead.prototype, "_handleBorderChange", null);
4551
+
4552
+ var css_248z$1 = css`:host{display:table-row;width:100%}`;
4553
+
4554
+ /**
4555
+ * @summary Table row organizes and groups table cells or header cells into a single horizontal line within the table.
4556
+ *
4557
+ * @slot - Insert any table cell or header elements to be displayed as part of this row.
4558
+ */
4559
+ class SgdsTableRow extends SgdsElement {
4560
+ connectedCallback() {
4561
+ super.connectedCallback();
4562
+ this.setAttribute("role", "row");
4563
+ }
4564
+ render() {
4565
+ return html `<slot class="table-row"></slot>`;
4566
+ }
4567
+ }
4568
+ SgdsTableRow.styles = [...SgdsElement.styles, css_248z$1];
4569
+
4570
+ var css_248z = css`:host{border-bottom:var(--sgds-border-width-1) solid var(--sgds-border-color-muted);display:table-cell;padding:var(--sgds-padding-lg)}`;
4571
+
4572
+ /**
4573
+ * @summary Table cell is used for presenting individual data values, interactive elements, or custom content within a table row.
4574
+ *
4575
+ * @slot - Insert any elements to be rendered as the cell’s content.
4576
+ */
4577
+ class SgdsTableCell extends SgdsElement {
4578
+ connectedCallback() {
4579
+ super.connectedCallback();
4580
+ this.setAttribute("role", "cell");
4581
+ }
4582
+ render() {
4583
+ return html ` <slot class="table-cell"></slot> `;
4584
+ }
4585
+ }
4586
+ SgdsTableCell.styles = [...SgdsElement.styles, css_248z];
4587
+
4425
4588
  register("sgds-table", SgdsTable);
4589
+ register("sgds-table-head", SgdsTableHead);
4590
+ register("sgds-table-row", SgdsTableRow);
4591
+ register("sgds-table-cell", SgdsTableCell);
4426
4592
 
4427
4593
  }));
4428
4594
  //# sourceMappingURL=index.umd.js.map