@ds-mo/ui 14.34.0 → 14.35.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 (285) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +310 -23
  4. package/dist/angular/ds-filter-menu.d.ts +1 -1
  5. package/dist/angular/ds-filter-menu.js +3 -3
  6. package/dist/angular/ds-menu.d.ts +1 -1
  7. package/dist/angular/ds-menu.js +3 -3
  8. package/dist/angular/ds-select.d.ts +1 -1
  9. package/dist/angular/ds-select.js +3 -3
  10. package/dist/angular/ds-tab-group.d.ts +1 -1
  11. package/dist/angular/ds-tab-group.js +3 -3
  12. package/dist/angular/ds-table-filter.d.ts +1 -1
  13. package/dist/angular/ds-table-filter.js +3 -3
  14. package/dist/angular/ds-table-group.d.ts +1 -1
  15. package/dist/angular/ds-table-group.js +3 -3
  16. package/dist/angular/ds-table-preferences.d.ts +39 -0
  17. package/dist/angular/ds-table-preferences.js +69 -0
  18. package/dist/angular/ds-table-saved-views.d.ts +1 -1
  19. package/dist/angular/ds-table-saved-views.js +3 -3
  20. package/dist/angular/ds-table-search.d.ts +1 -1
  21. package/dist/angular/ds-table-search.js +3 -3
  22. package/dist/angular/ds-table-sort.d.ts +1 -1
  23. package/dist/angular/ds-table-sort.js +3 -3
  24. package/dist/angular/ds-table-toolbar.d.ts +1 -1
  25. package/dist/angular/ds-table-toolbar.js +3 -3
  26. package/dist/angular/ds-table.d.ts +3 -1
  27. package/dist/angular/ds-table.js +8 -5
  28. package/dist/angular/index.d.ts +1 -1
  29. package/dist/angular/index.js +1 -0
  30. package/dist/angular/proxies.d.ts +1 -0
  31. package/dist/angular/proxies.js +1 -0
  32. package/dist/components/ds-agent-activity.js +1 -1
  33. package/dist/components/ds-agent-questionnaire.js +1 -1
  34. package/dist/components/ds-agent-response.js +1 -1
  35. package/dist/components/ds-agent-source-list.js +1 -1
  36. package/dist/components/ds-agent-tool-call.js +1 -1
  37. package/dist/components/ds-attachment-list.js +1 -1
  38. package/dist/components/ds-badge.js +1 -1
  39. package/dist/components/ds-banner.js +1 -1
  40. package/dist/components/ds-bar-action.js +1 -1
  41. package/dist/components/ds-bar-nav.js +1 -1
  42. package/dist/components/ds-bar-page-title.js +1 -1
  43. package/dist/components/ds-bar-title.js +1 -1
  44. package/dist/components/ds-bar-workflow.js +1 -1
  45. package/dist/components/ds-breadcrumb.js +1 -1
  46. package/dist/components/ds-button-filled.js +1 -1
  47. package/dist/components/ds-button-unfilled.js +1 -1
  48. package/dist/components/ds-card-action-center.js +1 -1
  49. package/dist/components/ds-card-chart.js +1 -1
  50. package/dist/components/ds-card-navigation.js +1 -1
  51. package/dist/components/ds-card-overview.js +1 -1
  52. package/dist/components/ds-card-setting.js +1 -1
  53. package/dist/components/ds-card-settings-scope.js +1 -1
  54. package/dist/components/ds-chart-legend.js +1 -1
  55. package/dist/components/ds-chart.js +1 -1
  56. package/dist/components/ds-checkbox.js +1 -1
  57. package/dist/components/ds-chip.js +1 -1
  58. package/dist/components/ds-code-block.js +1 -1
  59. package/dist/components/ds-conversation-list-item.js +1 -1
  60. package/dist/components/ds-conversation-list-section.js +1 -1
  61. package/dist/components/ds-empty-state.js +1 -1
  62. package/dist/components/ds-field.js +1 -1
  63. package/dist/components/ds-filter-menu.js +1 -1
  64. package/dist/components/ds-input.js +1 -1
  65. package/dist/components/ds-markdown.js +1 -1
  66. package/dist/components/ds-menu.js +1 -1
  67. package/dist/components/ds-message-actions.js +1 -1
  68. package/dist/components/ds-message-bubble.js +1 -1
  69. package/dist/components/ds-message-bubble.js.map +1 -1
  70. package/dist/components/ds-message-composer.js +1 -1
  71. package/dist/components/ds-message-scroller.js +1 -1
  72. package/dist/components/ds-message.js +1 -1
  73. package/dist/components/ds-mobile-bar-nav.js +1 -1
  74. package/dist/components/ds-mobile-header.js +1 -1
  75. package/dist/components/ds-mobile-section-switcher.js +1 -1
  76. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  77. package/dist/components/ds-modal.js +1 -1
  78. package/dist/components/ds-pagination.js +1 -1
  79. package/dist/components/ds-panel-nav.js +1 -1
  80. package/dist/components/ds-panel-sub-nav.js +1 -1
  81. package/dist/components/ds-panel-tool-header.js +1 -1
  82. package/dist/components/ds-panel-tool-search.js +1 -1
  83. package/dist/components/ds-panel-tools.js +1 -1
  84. package/dist/components/ds-paper-texture.js +1 -1
  85. package/dist/components/ds-radio.js +1 -1
  86. package/dist/components/ds-score.js +1 -1
  87. package/dist/components/ds-scroll-overlay.js +1 -1
  88. package/dist/components/ds-select.js +1 -1
  89. package/dist/components/ds-shell-app.js +1 -1
  90. package/dist/components/ds-shell-app.js.map +1 -1
  91. package/dist/components/ds-shell-page.js +1 -1
  92. package/dist/components/ds-shell-tools.js +1 -1
  93. package/dist/components/ds-skeleton.js +1 -1
  94. package/dist/components/ds-slider.js +1 -1
  95. package/dist/components/ds-swatch-picker.js +1 -1
  96. package/dist/components/ds-switch.js +1 -1
  97. package/dist/components/ds-tab-group.js +1 -1
  98. package/dist/components/ds-table-filter.js +1 -1
  99. package/dist/components/ds-table-filter.js.map +1 -1
  100. package/dist/components/ds-table-group.js +1 -1
  101. package/dist/components/ds-table-group.js.map +1 -1
  102. package/dist/components/ds-table-preferences.d.ts +11 -0
  103. package/dist/components/ds-table-preferences.js +2 -0
  104. package/dist/components/ds-table-preferences.js.map +1 -0
  105. package/dist/components/ds-table-saved-views.js +1 -1
  106. package/dist/components/ds-table-saved-views.js.map +1 -1
  107. package/dist/components/ds-table-search.js +1 -1
  108. package/dist/components/ds-table-search.js.map +1 -1
  109. package/dist/components/ds-table-sort.js +1 -1
  110. package/dist/components/ds-table-sort.js.map +1 -1
  111. package/dist/components/ds-table-toolbar.js +1 -1
  112. package/dist/components/ds-table-toolbar.js.map +1 -1
  113. package/dist/components/ds-table.js +1 -1
  114. package/dist/components/ds-table.js.map +1 -1
  115. package/dist/components/ds-tag.js +1 -1
  116. package/dist/components/ds-text.js +1 -1
  117. package/dist/components/ds-textarea.js +1 -1
  118. package/dist/components/ds-toast.js +1 -1
  119. package/dist/components/ds-tooltip-chart.js +1 -1
  120. package/dist/components/ds-tooltip.js +1 -1
  121. package/dist/components/ds-typing-indicator.js +1 -1
  122. package/dist/components/{p-ByoywoBH.js → p-B-9fdIWv.js} +2 -2
  123. package/dist/components/{p-CnK36Be0.js → p-BINSI_KF.js} +2 -2
  124. package/dist/components/{p-CK2S28gU.js → p-BPhbwXOv.js} +2 -2
  125. package/dist/components/{p-CMq-jKEI.js → p-BPlWEidl.js} +2 -2
  126. package/dist/components/{p-DyyfWSLB.js → p-BQaO7cg_.js} +2 -2
  127. package/dist/components/{p-Br0dx2uP.js → p-BQsVI_vO.js} +2 -2
  128. package/dist/components/{p-B_nPct4G.js → p-BbfBvMRR.js} +2 -2
  129. package/dist/components/p-BcdHgPi5.js +2 -0
  130. package/dist/components/p-BcdHgPi5.js.map +1 -0
  131. package/dist/components/{p-D_QtZZR8.js → p-BmFeeR4q.js} +2 -2
  132. package/dist/components/{p-CXAa9TUM.js → p-BnWxbhFP.js} +2 -2
  133. package/dist/components/{p-CvplapTD.js → p-BnzsBNUY.js} +2 -2
  134. package/dist/components/{p-BlWNMytv.js → p-C1_3CVma.js} +2 -2
  135. package/dist/components/p-C1_3CVma.js.map +1 -0
  136. package/dist/components/{p-DjCnGxSd.js → p-C7CZ9pnP.js} +2 -2
  137. package/dist/components/{p-DBZwI7HY.js → p-C8ek-1SP.js} +2 -2
  138. package/dist/components/{p-BEttT0UB.js → p-CAxDdYjh.js} +2 -2
  139. package/dist/components/{p-BqGdNrVl.js → p-CE540WZ7.js} +2 -2
  140. package/dist/components/{p-B5QVra1K.js → p-CI7VfYC3.js} +2 -2
  141. package/dist/components/p-CKarsuR2.js +2 -0
  142. package/dist/components/p-CKarsuR2.js.map +1 -0
  143. package/dist/components/{p-AkSwrAKR.js → p-CLGtPE0K.js} +2 -2
  144. package/dist/components/{p-C51ytXM6.js → p-CSnsz3Eb.js} +2 -2
  145. package/dist/components/{p-Dx7WcWW1.js → p-CZOiTaNa.js} +2 -2
  146. package/dist/components/{p-xxuHxP3u.js → p-Cmj04E5Q.js} +2 -2
  147. package/dist/components/p-Cmj04E5Q.js.map +1 -0
  148. package/dist/components/{p-zZuAAiiI.js → p-Cq_Qpe_C.js} +2 -2
  149. package/dist/components/{p-CweS0FfJ.js → p-CqlBlv55.js} +2 -2
  150. package/dist/components/p-CwqFJMvP.js +2 -0
  151. package/dist/components/{p-DEyvEIYL.js.map → p-CwqFJMvP.js.map} +1 -1
  152. package/dist/components/{p-C8XJgV1n.js → p-Cwz9TPVS.js} +2 -2
  153. package/dist/components/{p-C1QHxVvP.js → p-D44g2Kw1.js} +2 -2
  154. package/dist/components/{p-CKo2nySr.js → p-DC69DgAR.js} +2 -2
  155. package/dist/components/{p-CQqZgTYk.js → p-DEGNrPLe.js} +2 -2
  156. package/dist/components/{p-OxdAzO4v.js → p-DFjIBS5B.js} +2 -2
  157. package/dist/components/{p-BwsS_Hyr.js → p-DGzn4k4h.js} +2 -2
  158. package/dist/components/{p-Dj296RmE.js → p-DQQFN2sw.js} +2 -2
  159. package/dist/components/{p-CIoeHcCk.js → p-DTDLlinw.js} +2 -2
  160. package/dist/components/p-D_u8WhlU.js +2 -0
  161. package/dist/components/{p-CHBuzAYH.js.map → p-D_u8WhlU.js.map} +1 -1
  162. package/dist/components/{p-CqeMumqy.js → p-DdspY23v.js} +2 -2
  163. package/dist/components/{p-DzbEJN1A.js → p-Dk-8Ju0Q.js} +2 -2
  164. package/dist/components/{p-Da9VpZX2.js → p-DtLQIMsa.js} +2 -2
  165. package/dist/components/{p-Cw_npFwN.js → p-FPZbS19l.js} +2 -2
  166. package/dist/components/{p-BMERUCe1.js → p-KBrC9IG4.js} +2 -2
  167. package/dist/components/p-N5SHSVo2.js +2 -0
  168. package/dist/components/{p-CHUdAW1Q.js.map → p-N5SHSVo2.js.map} +1 -1
  169. package/dist/components/p-QjkufCcn.js +2 -0
  170. package/dist/components/p-QjkufCcn.js.map +1 -0
  171. package/dist/components/p-UAIxh67Q.js +2 -0
  172. package/dist/components/p-UAIxh67Q.js.map +1 -0
  173. package/dist/components/{p-CIYJhyKt.js → p-beCz9OnD.js} +2 -2
  174. package/dist/components/{p-LZ8F08Fj.js → p-beRFLHbB.js} +2 -2
  175. package/dist/components/p-beRFLHbB.js.map +1 -0
  176. package/dist/components/{p-4DNyCYKM.js → p-mpk_Mm8_.js} +2 -2
  177. package/dist/components/{p-DrjY8Mpy.js → p-n68x-ZKp.js} +2 -2
  178. package/dist/components/{p-CNDTHTf6.js → p-omPm8_vx.js} +2 -2
  179. package/dist/components/{p-lv4YQEsa.js → p-umAf0fBn.js} +2 -2
  180. package/dist/components/{p-ya8A_SMw.js → p-xHGqrz_p.js} +2 -2
  181. package/dist/components/{p-ya8A_SMw.js.map → p-xHGqrz_p.js.map} +1 -1
  182. package/dist/components/{p-CBQzTgvI.js → p-y06IxxoN.js} +2 -2
  183. package/dist/components/{p-CoE7yza3.js → p-yZRXPHDe.js} +2 -2
  184. package/dist/docs/components.json +2242 -720
  185. package/dist/lib/components/ShellApp/shell-app-types.d.ts +3 -1
  186. package/dist/mcp-data/registry/filter-menu.json +102 -15
  187. package/dist/mcp-data/registry/menu.json +22 -3
  188. package/dist/mcp-data/registry/registry.json +312 -22
  189. package/dist/mcp-data/registry/select.json +43 -8
  190. package/dist/mcp-data/registry/shell-app.json +4 -3
  191. package/dist/mcp-data/registry/tab-group.json +20 -3
  192. package/dist/mcp-data/registry/table-filter.json +26 -6
  193. package/dist/mcp-data/registry/table-group.json +59 -7
  194. package/dist/mcp-data/registry/table-preferences.json +511 -0
  195. package/dist/mcp-data/registry/table-saved-views.json +45 -7
  196. package/dist/mcp-data/registry/table-search.json +24 -6
  197. package/dist/mcp-data/registry/table-sort.json +22 -4
  198. package/dist/mcp-data/registry/table-toolbar.json +26 -6
  199. package/dist/mcp-data/registry/table.json +70 -4
  200. package/dist/react/components.d.ts +1 -0
  201. package/dist/react/components.js +1 -0
  202. package/dist/react/ds-table-preferences.d.ts +21 -0
  203. package/dist/react/ds-table-preferences.js +23 -0
  204. package/dist/react/ds-table.d.ts +1 -0
  205. package/dist/react/ds-table.js +1 -0
  206. package/dist/types/components/FilterMenu/FilterMenu.d.ts +16 -0
  207. package/dist/types/components/Menu/Menu.d.ts +2 -0
  208. package/dist/types/components/Select/Select.d.ts +5 -1
  209. package/dist/types/components/ShellApp/shell-app-types.d.ts +3 -1
  210. package/dist/types/components/TabGroup/TabGroup.d.ts +1 -0
  211. package/dist/types/components/Table/Table.d.ts +8 -0
  212. package/dist/types/components/TableFilter/TableFilter.d.ts +2 -0
  213. package/dist/types/components/TableGroup/TableGroup.d.ts +5 -0
  214. package/dist/types/components/TablePreferences/TablePreferences.d.ts +56 -0
  215. package/dist/types/components/TableSavedViews/TableSavedViews.d.ts +4 -0
  216. package/dist/types/components/TableSearch/TableSearch.d.ts +2 -0
  217. package/dist/types/components/TableSort/TableSort.d.ts +2 -0
  218. package/dist/types/components/TableToolbar/TableToolbar.d.ts +2 -0
  219. package/dist/types/components.d.ts +420 -18
  220. package/dist/vue/components.d.ts +1 -0
  221. package/dist/vue/components.js +1 -0
  222. package/dist/vue/ds-filter-menu.js +5 -0
  223. package/dist/vue/ds-menu.js +1 -0
  224. package/dist/vue/ds-select.js +2 -0
  225. package/dist/vue/ds-tab-group.js +1 -0
  226. package/dist/vue/ds-table-filter.js +1 -0
  227. package/dist/vue/ds-table-group.js +3 -0
  228. package/dist/vue/ds-table-preferences.d.ts +3 -0
  229. package/dist/vue/ds-table-preferences.js +45 -0
  230. package/dist/vue/ds-table-saved-views.js +2 -0
  231. package/dist/vue/ds-table-search.js +1 -0
  232. package/dist/vue/ds-table-sort.js +1 -0
  233. package/dist/vue/ds-table-toolbar.js +2 -1
  234. package/dist/vue/ds-table.js +5 -0
  235. package/package.json +1 -1
  236. package/dist/components/p-BlWNMytv.js.map +0 -1
  237. package/dist/components/p-CHBuzAYH.js +0 -2
  238. package/dist/components/p-CHUdAW1Q.js +0 -2
  239. package/dist/components/p-CUL5_8JM.js +0 -2
  240. package/dist/components/p-CUL5_8JM.js.map +0 -1
  241. package/dist/components/p-DEyvEIYL.js +0 -2
  242. package/dist/components/p-DVWOUQfT.js +0 -2
  243. package/dist/components/p-DVWOUQfT.js.map +0 -1
  244. package/dist/components/p-LZ8F08Fj.js.map +0 -1
  245. package/dist/components/p-xxuHxP3u.js.map +0 -1
  246. /package/dist/components/{p-ByoywoBH.js.map → p-B-9fdIWv.js.map} +0 -0
  247. /package/dist/components/{p-CnK36Be0.js.map → p-BINSI_KF.js.map} +0 -0
  248. /package/dist/components/{p-CK2S28gU.js.map → p-BPhbwXOv.js.map} +0 -0
  249. /package/dist/components/{p-CMq-jKEI.js.map → p-BPlWEidl.js.map} +0 -0
  250. /package/dist/components/{p-DyyfWSLB.js.map → p-BQaO7cg_.js.map} +0 -0
  251. /package/dist/components/{p-Br0dx2uP.js.map → p-BQsVI_vO.js.map} +0 -0
  252. /package/dist/components/{p-B_nPct4G.js.map → p-BbfBvMRR.js.map} +0 -0
  253. /package/dist/components/{p-D_QtZZR8.js.map → p-BmFeeR4q.js.map} +0 -0
  254. /package/dist/components/{p-CXAa9TUM.js.map → p-BnWxbhFP.js.map} +0 -0
  255. /package/dist/components/{p-CvplapTD.js.map → p-BnzsBNUY.js.map} +0 -0
  256. /package/dist/components/{p-DjCnGxSd.js.map → p-C7CZ9pnP.js.map} +0 -0
  257. /package/dist/components/{p-DBZwI7HY.js.map → p-C8ek-1SP.js.map} +0 -0
  258. /package/dist/components/{p-BEttT0UB.js.map → p-CAxDdYjh.js.map} +0 -0
  259. /package/dist/components/{p-BqGdNrVl.js.map → p-CE540WZ7.js.map} +0 -0
  260. /package/dist/components/{p-B5QVra1K.js.map → p-CI7VfYC3.js.map} +0 -0
  261. /package/dist/components/{p-AkSwrAKR.js.map → p-CLGtPE0K.js.map} +0 -0
  262. /package/dist/components/{p-C51ytXM6.js.map → p-CSnsz3Eb.js.map} +0 -0
  263. /package/dist/components/{p-Dx7WcWW1.js.map → p-CZOiTaNa.js.map} +0 -0
  264. /package/dist/components/{p-zZuAAiiI.js.map → p-Cq_Qpe_C.js.map} +0 -0
  265. /package/dist/components/{p-CweS0FfJ.js.map → p-CqlBlv55.js.map} +0 -0
  266. /package/dist/components/{p-C8XJgV1n.js.map → p-Cwz9TPVS.js.map} +0 -0
  267. /package/dist/components/{p-C1QHxVvP.js.map → p-D44g2Kw1.js.map} +0 -0
  268. /package/dist/components/{p-CKo2nySr.js.map → p-DC69DgAR.js.map} +0 -0
  269. /package/dist/components/{p-CQqZgTYk.js.map → p-DEGNrPLe.js.map} +0 -0
  270. /package/dist/components/{p-OxdAzO4v.js.map → p-DFjIBS5B.js.map} +0 -0
  271. /package/dist/components/{p-BwsS_Hyr.js.map → p-DGzn4k4h.js.map} +0 -0
  272. /package/dist/components/{p-Dj296RmE.js.map → p-DQQFN2sw.js.map} +0 -0
  273. /package/dist/components/{p-CIoeHcCk.js.map → p-DTDLlinw.js.map} +0 -0
  274. /package/dist/components/{p-CqeMumqy.js.map → p-DdspY23v.js.map} +0 -0
  275. /package/dist/components/{p-DzbEJN1A.js.map → p-Dk-8Ju0Q.js.map} +0 -0
  276. /package/dist/components/{p-Da9VpZX2.js.map → p-DtLQIMsa.js.map} +0 -0
  277. /package/dist/components/{p-Cw_npFwN.js.map → p-FPZbS19l.js.map} +0 -0
  278. /package/dist/components/{p-BMERUCe1.js.map → p-KBrC9IG4.js.map} +0 -0
  279. /package/dist/components/{p-CIYJhyKt.js.map → p-beCz9OnD.js.map} +0 -0
  280. /package/dist/components/{p-4DNyCYKM.js.map → p-mpk_Mm8_.js.map} +0 -0
  281. /package/dist/components/{p-DrjY8Mpy.js.map → p-n68x-ZKp.js.map} +0 -0
  282. /package/dist/components/{p-CNDTHTf6.js.map → p-omPm8_vx.js.map} +0 -0
  283. /package/dist/components/{p-lv4YQEsa.js.map → p-umAf0fBn.js.map} +0 -0
  284. /package/dist/components/{p-CBQzTgvI.js.map → p-y06IxxoN.js.map} +0 -0
  285. /package/dist/components/{p-CoE7yza3.js.map → p-yZRXPHDe.js.map} +0 -0
@@ -0,0 +1,511 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "table-preferences",
4
+ "title": "TablePreferences",
5
+ "description": "Compact table preferences dialog with Filters, Sort, Group, and Customize tabs.",
6
+ "type": "registry:ui",
7
+ "meta": {
8
+ "library": "@ds-mo/ui",
9
+ "distribution": "npm",
10
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/table-preferences",
11
+ "source": "src/wc/components/TablePreferences/TablePreferences.tsx",
12
+ "intentStatus": "complete",
13
+ "intent": {
14
+ "audience": "general",
15
+ "status": "experimental",
16
+ "summary": "Compact table preferences dialog with Filters, Sort, Group, and Customize tabs.",
17
+ "useWhen": [
18
+ "A narrow table toolbar or a user preference calls for one result-shaping control."
19
+ ],
20
+ "avoidWhen": [
21
+ "The application needs unrelated actions or a submitted form."
22
+ ],
23
+ "states": [
24
+ "The application owns all filter, sort, grouping, and column configuration values. Apply emitted changes to the table and replace the matching preferences inputs.",
25
+ "The component owns popup visibility, active tab, positioning, and dismissal; embedded controls reuse the same content as their standalone popups.",
26
+ "Borderless toolbar compositions omit resting control borders while retaining focus and interaction feedback.",
27
+ "Apply-required filtering stages edits locally, including match mode. Clear immediately clears all filters and discards pending edits. The footer appears when filters are selected or applied; Apply stays in place and inactive without pending changes; applying emits controlled changes. Closing discards unapplied edits.",
28
+ "Embedded presentation delegates its active tab, draft state, Apply, Reset, and dismissal to the owning panel; it renders vertical filter and grouping content without a popup trigger."
29
+ ],
30
+ "accessibility": [
31
+ "An icon-only Preferences trigger opens a named dialog. TabGroup owns section keyboard navigation; Escape and outside activation dismiss, returning focus to the trigger."
32
+ ],
33
+ "responsiveBehavior": [
34
+ "The popup fits the viewport and scrolls internally. The application chooses whether to show it instead of separate controls. Hide the table-owned Customize trigger while retaining column customization."
35
+ ],
36
+ "patterns": [],
37
+ "commonlyComposedWith": [
38
+ "component:ds-table",
39
+ "component:ds-table-toolbar",
40
+ "component:ds-filter-menu",
41
+ "component:ds-menu",
42
+ "component:ds-table-group",
43
+ "component:ds-tab-group"
44
+ ]
45
+ },
46
+ "api": {
47
+ "props": {
48
+ "activeFilterId": {
49
+ "type": "string | undefined",
50
+ "resolvedType": "string | undefined",
51
+ "attribute": "active-filter-id",
52
+ "required": false,
53
+ "mutable": false
54
+ },
55
+ "activeTab": {
56
+ "type": "PreferencesTab",
57
+ "resolvedType": "\"customize\" | \"filters\" | \"group\" | \"sort\"",
58
+ "attribute": "active-tab",
59
+ "default": "'filters'",
60
+ "required": false,
61
+ "mutable": false
62
+ },
63
+ "columnOrder": {
64
+ "type": "string[]",
65
+ "resolvedType": "string[]",
66
+ "default": "[]",
67
+ "required": false,
68
+ "mutable": false
69
+ },
70
+ "columns": {
71
+ "type": "TableColumn[]",
72
+ "resolvedType": "TableColumn[]",
73
+ "default": "[]",
74
+ "required": false,
75
+ "mutable": false
76
+ },
77
+ "customizeOptions": {
78
+ "type": "MenuItemData[]",
79
+ "resolvedType": "MenuItemData[]",
80
+ "default": "[]",
81
+ "required": false,
82
+ "mutable": false,
83
+ "description": "Additional toggle options in the column customizer."
84
+ },
85
+ "customizeSections": {
86
+ "type": "MenuSection[]",
87
+ "resolvedType": "MenuSection[]",
88
+ "default": "[]",
89
+ "required": false,
90
+ "mutable": false
91
+ },
92
+ "embedded": {
93
+ "type": "boolean",
94
+ "resolvedType": "boolean",
95
+ "attribute": "embedded",
96
+ "default": "false",
97
+ "required": false,
98
+ "mutable": false,
99
+ "description": "Render shared content without its popup or trigger."
100
+ },
101
+ "filters": {
102
+ "type": "FilterMenuFilter[]",
103
+ "resolvedType": "FilterMenuFilter[]",
104
+ "default": "[]",
105
+ "required": false,
106
+ "mutable": false
107
+ },
108
+ "grouping": {
109
+ "type": "TableGroupingState | null",
110
+ "resolvedType": "TableGroupingState | null",
111
+ "default": "null",
112
+ "required": false,
113
+ "mutable": false
114
+ },
115
+ "groupingOptions": {
116
+ "type": "TableGroupOption[]",
117
+ "resolvedType": "TableGroupOption[]",
118
+ "default": "[]",
119
+ "required": false,
120
+ "mutable": false
121
+ },
122
+ "hasBorder": {
123
+ "type": "boolean",
124
+ "resolvedType": "boolean",
125
+ "attribute": "has-border",
126
+ "default": "true",
127
+ "required": false,
128
+ "mutable": false,
129
+ "description": "Show the trigger border."
130
+ },
131
+ "hiddenColumnIds": {
132
+ "type": "string[]",
133
+ "resolvedType": "string[]",
134
+ "default": "[]",
135
+ "required": false,
136
+ "mutable": false
137
+ },
138
+ "label": {
139
+ "type": "string",
140
+ "resolvedType": "string",
141
+ "attribute": "label",
142
+ "default": "'Configure view'",
143
+ "required": false,
144
+ "mutable": false
145
+ },
146
+ "matchModes": {
147
+ "type": "FilterMenuMatchModes",
148
+ "resolvedType": "{ [x: string]: FilterMenuMatchMode | undefined; }",
149
+ "default": "{}",
150
+ "required": false,
151
+ "mutable": false
152
+ },
153
+ "sort": {
154
+ "type": "TableSortState | null",
155
+ "resolvedType": "TableSortState | null",
156
+ "default": "null",
157
+ "required": false,
158
+ "mutable": false
159
+ },
160
+ "sortColumns": {
161
+ "type": "TableColumn[]",
162
+ "resolvedType": "TableColumn[] | undefined",
163
+ "required": false,
164
+ "mutable": false,
165
+ "description": "Optional sort fields when they differ from customizable content."
166
+ },
167
+ "values": {
168
+ "type": "FilterMenuValues",
169
+ "resolvedType": "{ [x: string]: FilterMenuValue | undefined; }",
170
+ "default": "{}",
171
+ "required": false,
172
+ "mutable": false
173
+ }
174
+ },
175
+ "events": [
176
+ {
177
+ "name": "dsActiveFilterChange",
178
+ "detail": "string",
179
+ "bubbles": true,
180
+ "cancelable": true,
181
+ "composed": true
182
+ },
183
+ {
184
+ "name": "dsColumnsConfigChange",
185
+ "detail": "TableColumnsConfigChangeDetail",
186
+ "bubbles": true,
187
+ "cancelable": true,
188
+ "composed": true
189
+ },
190
+ {
191
+ "name": "dsCustomizeOptionChange",
192
+ "detail": "string",
193
+ "bubbles": true,
194
+ "cancelable": true,
195
+ "composed": true
196
+ },
197
+ {
198
+ "name": "dsFilterChange",
199
+ "detail": "FilterMenuChangeDetail",
200
+ "bubbles": true,
201
+ "cancelable": true,
202
+ "composed": true
203
+ },
204
+ {
205
+ "name": "dsFilterMatchModeChange",
206
+ "detail": "FilterMenuMatchModeChangeDetail",
207
+ "bubbles": true,
208
+ "cancelable": true,
209
+ "composed": true
210
+ },
211
+ {
212
+ "name": "dsFiltersClear",
213
+ "detail": "void",
214
+ "bubbles": true,
215
+ "cancelable": true,
216
+ "composed": true
217
+ },
218
+ {
219
+ "name": "dsGroupChange",
220
+ "detail": "TableGroupingState",
221
+ "bubbles": true,
222
+ "cancelable": true,
223
+ "composed": true
224
+ },
225
+ {
226
+ "name": "dsGroupClear",
227
+ "detail": "void",
228
+ "bubbles": true,
229
+ "cancelable": true,
230
+ "composed": true
231
+ },
232
+ {
233
+ "name": "dsPreferencesTabChange",
234
+ "detail": "PreferencesTab",
235
+ "bubbles": true,
236
+ "cancelable": true,
237
+ "composed": true
238
+ },
239
+ {
240
+ "name": "dsSortChange",
241
+ "detail": "TableSortChangeDetail",
242
+ "bubbles": true,
243
+ "cancelable": true,
244
+ "composed": true
245
+ }
246
+ ],
247
+ "methods": [],
248
+ "slots": []
249
+ },
250
+ "props": {
251
+ "activeFilterId": {
252
+ "type": "string | undefined",
253
+ "resolvedType": "string | undefined",
254
+ "attribute": "active-filter-id",
255
+ "required": false,
256
+ "mutable": false
257
+ },
258
+ "activeTab": {
259
+ "type": "PreferencesTab",
260
+ "resolvedType": "\"customize\" | \"filters\" | \"group\" | \"sort\"",
261
+ "attribute": "active-tab",
262
+ "default": "'filters'",
263
+ "required": false,
264
+ "mutable": false
265
+ },
266
+ "columnOrder": {
267
+ "type": "string[]",
268
+ "resolvedType": "string[]",
269
+ "default": "[]",
270
+ "required": false,
271
+ "mutable": false
272
+ },
273
+ "columns": {
274
+ "type": "TableColumn[]",
275
+ "resolvedType": "TableColumn[]",
276
+ "default": "[]",
277
+ "required": false,
278
+ "mutable": false
279
+ },
280
+ "customizeOptions": {
281
+ "type": "MenuItemData[]",
282
+ "resolvedType": "MenuItemData[]",
283
+ "default": "[]",
284
+ "required": false,
285
+ "mutable": false,
286
+ "description": "Additional toggle options in the column customizer."
287
+ },
288
+ "customizeSections": {
289
+ "type": "MenuSection[]",
290
+ "resolvedType": "MenuSection[]",
291
+ "default": "[]",
292
+ "required": false,
293
+ "mutable": false
294
+ },
295
+ "embedded": {
296
+ "type": "boolean",
297
+ "resolvedType": "boolean",
298
+ "attribute": "embedded",
299
+ "default": "false",
300
+ "required": false,
301
+ "mutable": false,
302
+ "description": "Render shared content without its popup or trigger."
303
+ },
304
+ "filters": {
305
+ "type": "FilterMenuFilter[]",
306
+ "resolvedType": "FilterMenuFilter[]",
307
+ "default": "[]",
308
+ "required": false,
309
+ "mutable": false
310
+ },
311
+ "grouping": {
312
+ "type": "TableGroupingState | null",
313
+ "resolvedType": "TableGroupingState | null",
314
+ "default": "null",
315
+ "required": false,
316
+ "mutable": false
317
+ },
318
+ "groupingOptions": {
319
+ "type": "TableGroupOption[]",
320
+ "resolvedType": "TableGroupOption[]",
321
+ "default": "[]",
322
+ "required": false,
323
+ "mutable": false
324
+ },
325
+ "hasBorder": {
326
+ "type": "boolean",
327
+ "resolvedType": "boolean",
328
+ "attribute": "has-border",
329
+ "default": "true",
330
+ "required": false,
331
+ "mutable": false,
332
+ "description": "Show the trigger border."
333
+ },
334
+ "hiddenColumnIds": {
335
+ "type": "string[]",
336
+ "resolvedType": "string[]",
337
+ "default": "[]",
338
+ "required": false,
339
+ "mutable": false
340
+ },
341
+ "label": {
342
+ "type": "string",
343
+ "resolvedType": "string",
344
+ "attribute": "label",
345
+ "default": "'Configure view'",
346
+ "required": false,
347
+ "mutable": false
348
+ },
349
+ "matchModes": {
350
+ "type": "FilterMenuMatchModes",
351
+ "resolvedType": "{ [x: string]: FilterMenuMatchMode | undefined; }",
352
+ "default": "{}",
353
+ "required": false,
354
+ "mutable": false
355
+ },
356
+ "sort": {
357
+ "type": "TableSortState | null",
358
+ "resolvedType": "TableSortState | null",
359
+ "default": "null",
360
+ "required": false,
361
+ "mutable": false
362
+ },
363
+ "sortColumns": {
364
+ "type": "TableColumn[]",
365
+ "resolvedType": "TableColumn[] | undefined",
366
+ "required": false,
367
+ "mutable": false,
368
+ "description": "Optional sort fields when they differ from customizable content."
369
+ },
370
+ "values": {
371
+ "type": "FilterMenuValues",
372
+ "resolvedType": "{ [x: string]: FilterMenuValue | undefined; }",
373
+ "default": "{}",
374
+ "required": false,
375
+ "mutable": false
376
+ }
377
+ },
378
+ "events": [
379
+ {
380
+ "name": "dsActiveFilterChange",
381
+ "detail": "string",
382
+ "bubbles": true,
383
+ "cancelable": true,
384
+ "composed": true
385
+ },
386
+ {
387
+ "name": "dsColumnsConfigChange",
388
+ "detail": "TableColumnsConfigChangeDetail",
389
+ "bubbles": true,
390
+ "cancelable": true,
391
+ "composed": true
392
+ },
393
+ {
394
+ "name": "dsCustomizeOptionChange",
395
+ "detail": "string",
396
+ "bubbles": true,
397
+ "cancelable": true,
398
+ "composed": true
399
+ },
400
+ {
401
+ "name": "dsFilterChange",
402
+ "detail": "FilterMenuChangeDetail",
403
+ "bubbles": true,
404
+ "cancelable": true,
405
+ "composed": true
406
+ },
407
+ {
408
+ "name": "dsFilterMatchModeChange",
409
+ "detail": "FilterMenuMatchModeChangeDetail",
410
+ "bubbles": true,
411
+ "cancelable": true,
412
+ "composed": true
413
+ },
414
+ {
415
+ "name": "dsFiltersClear",
416
+ "detail": "void",
417
+ "bubbles": true,
418
+ "cancelable": true,
419
+ "composed": true
420
+ },
421
+ {
422
+ "name": "dsGroupChange",
423
+ "detail": "TableGroupingState",
424
+ "bubbles": true,
425
+ "cancelable": true,
426
+ "composed": true
427
+ },
428
+ {
429
+ "name": "dsGroupClear",
430
+ "detail": "void",
431
+ "bubbles": true,
432
+ "cancelable": true,
433
+ "composed": true
434
+ },
435
+ {
436
+ "name": "dsPreferencesTabChange",
437
+ "detail": "PreferencesTab",
438
+ "bubbles": true,
439
+ "cancelable": true,
440
+ "composed": true
441
+ },
442
+ {
443
+ "name": "dsSortChange",
444
+ "detail": "TableSortChangeDetail",
445
+ "bubbles": true,
446
+ "cancelable": true,
447
+ "composed": true
448
+ }
449
+ ],
450
+ "methods": [],
451
+ "slots": [],
452
+ "exports": {
453
+ "customElement": "ds-table-preferences",
454
+ "react": "DsTablePreferences",
455
+ "vue": "DsTablePreferences",
456
+ "angular": "DsTablePreferences"
457
+ },
458
+ "consumption": {
459
+ "install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
460
+ "cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
461
+ "customElements": {
462
+ "import": "import '@ds-mo/ui/dist/components/ds-table-preferences.js';",
463
+ "example": "<ds-table-preferences></ds-table-preferences>"
464
+ },
465
+ "react": {
466
+ "import": "import { DsTablePreferences } from '@ds-mo/ui/react';",
467
+ "example": "<DsTablePreferences />"
468
+ },
469
+ "vue": {
470
+ "import": "import { DsTablePreferences } from '@ds-mo/ui/vue';",
471
+ "example": "<DsTablePreferences />"
472
+ },
473
+ "angular": {
474
+ "import": "import { DsTablePreferences } from '@ds-mo/ui/angular/ds-table-preferences';",
475
+ "example": "<ds-table-preferences></ds-table-preferences>"
476
+ },
477
+ "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: columnOrder, columns, customizeOptions, customizeSections, filters, grouping, groupingOptions, hiddenColumnIds, matchModes, sort, sortColumns, values.",
478
+ "peerDependencies": {
479
+ "required": [
480
+ "@ds-mo/tokens ^6.5.1",
481
+ "@ds-mo/icons ^7.0.0"
482
+ ],
483
+ "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
484
+ }
485
+ }
486
+ },
487
+ "dependencies": [
488
+ "@ds-mo/ui",
489
+ "@ds-mo/tokens"
490
+ ],
491
+ "registryDependencies": [
492
+ "button-unfilled",
493
+ "filter-menu",
494
+ "menu",
495
+ "tab-group",
496
+ "table-group",
497
+ "tooltip"
498
+ ],
499
+ "files": [
500
+ {
501
+ "path": "src/wc/components/TablePreferences/TablePreferences.css",
502
+ "content": "@import '../../utils/radius.css';\n\n:host {\n display: inline-flex;\n}\n\n.table-preferences {\n position: fixed;\n margin: 0;\n padding: 0;\n border: 0;\n border-radius: var(--ds-radius-menu);\n width: min(var(--dimension-menu-width-lg), calc(100vw - var(--dimension-space-200)));\n max-height: calc(100dvh - var(--dimension-space-400));\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--color-background-primary);\n color: var(--color-foreground-secondary);\n box-shadow: var(--effect-shadow-elevated-floating);\n}\n\n.table-preferences::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n box-shadow: var(--effect-highlight-elevated-floating);\n pointer-events: none;\n z-index: 4;\n}\n\n.table-preferences__tabs {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n box-sizing: border-box;\n flex: 0 0 var(--dimension-size-500);\n min-block-size: var(--dimension-size-500);\n padding: var(--dimension-space-050);\n background: var(--color-background-primary);\n border-bottom: var(--dimension-stroke-width-012) solid var(--color-border-tertiary);\n}\n\n.table-preferences__body {\n min-height: 0;\n overflow: auto;\n overscroll-behavior: contain;\n}\n\n:host:has(.table-preferences-panel) {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.table-preferences-panel {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n min-width: 0;\n}\n.table-preferences-panel .table-preferences__tabs {\n flex: 0 0 auto;\n padding: var(--dimension-space-200);\n}\n",
503
+ "type": "registry:ui"
504
+ },
505
+ {
506
+ "path": "src/wc/components/TablePreferences/TablePreferences.tsx",
507
+ "content": "import type { MenuItemData, MenuSection } from '../Menu/menu-types';\nimport { resolveAnchoredOverlayBoundaryRect } from '../../utils/anchored-overlay-boundary';\nimport {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport type {\n FilterMenuFilter,\n FilterMenuValues,\n FilterMenuMatchModes,\n FilterMenuChangeDetail,\n FilterMenuMatchModeChangeDetail,\n} from '../FilterMenu/FilterMenu';\nimport type {\n TableColumn,\n TableSortState,\n TableSortChangeDetail,\n TableGroupingState,\n TableColumnsConfigChangeDetail,\n} from '../Table/table-types';\nimport type { TableGroupOption } from '../TableGroup/TableGroup';\nimport {\n tableSortMenuSections,\n nextTableSortStateFromMenuItem,\n} from '../TableSort/table-sort-menu';\nimport {\n tableColumnCustomizerMenuItems,\n toggleTableColumnHidden,\n resolveTableColumnOrder,\n} from '../Table/table-column-customizer';\nimport { AnchoredPositionController } from '../../utils/anchored-position-controller';\nimport { AnchoredOverlayInteractionController } from '../../utils/anchored-overlay-interaction-controller';\nimport { resolveCssLengthPx } from '../../utils/resolve-css-length-px';\nimport { TOKEN_DEFAULTS } from '../../utils/token-defaults';\n\nexport type PreferencesTab = 'filters' | 'sort' | 'group' | 'customize';\nlet preferencesSequence = 0;\n\n@Component({ tag: 'ds-table-preferences', styleUrl: 'TablePreferences.css', scoped: true })\nexport class TablePreferences {\n @Element() el!: HTMLElement;\n /** Show the trigger border. */\n @Prop() hasBorder: boolean = true;\n @Prop() filters: FilterMenuFilter[] = [];\n @Prop() values: FilterMenuValues = {};\n @Prop() matchModes: FilterMenuMatchModes = {};\n @Prop() activeFilterId: string | undefined;\n @Prop() columns: TableColumn[] = [];\n /** Additional toggle options in the column customizer. */\n @Prop() customizeOptions: MenuItemData[] = [];\n @Prop() customizeSections: MenuSection[] = [];\n @Event() dsCustomizeOptionChange!: EventEmitter<string>;\n /** Optional sort fields when they differ from customizable content. */\n @Prop() sortColumns?: TableColumn[];\n @Prop() sort: TableSortState | null = null;\n @Prop() groupingOptions: TableGroupOption[] = [];\n @Prop() grouping: TableGroupingState | null = null;\n @Prop() hiddenColumnIds: string[] = [];\n @Prop() columnOrder: string[] = [];\n /** Render shared content without its popup or trigger. */\n @Prop() embedded = false;\n @Prop() activeTab: PreferencesTab = 'filters';\n @Event() dsPreferencesTabChange!: EventEmitter<PreferencesTab>;\n @Prop() label = 'Configure view';\n @Event() dsFilterChange!: EventEmitter<FilterMenuChangeDetail>;\n @Event() dsFilterMatchModeChange!: EventEmitter<FilterMenuMatchModeChangeDetail>;\n @Event() dsActiveFilterChange!: EventEmitter<string>;\n @Event() dsFiltersClear!: EventEmitter<void>;\n @Event() dsSortChange!: EventEmitter<TableSortChangeDetail>;\n @Event() dsGroupChange!: EventEmitter<TableGroupingState>;\n @Event() dsGroupClear!: EventEmitter<void>;\n @Event() dsColumnsConfigChange!: EventEmitter<TableColumnsConfigChangeDetail>;\n @State() private open = false;\n @State() private tab: PreferencesTab = 'filters';\n @State() private pos = { x: 0, y: 0 };\n @State() private ready = false;\n private readonly popupId = `ds-table-preferences-${++preferencesSequence}`;\n private trigger?: HTMLDsButtonUnfilledElement;\n private popup?: HTMLElement;\n private readonly position = new AnchoredPositionController({\n getAnchor: () => this.trigger ?? null,\n getPopup: () => this.popup ?? null,\n getOwnerDocument: () => this.el.ownerDocument,\n measure: (anchor, popup) => {\n const collisionRect = resolveAnchoredOverlayBoundaryRect(anchor);\n const pad = resolveCssLengthPx(TOKEN_DEFAULTS.space100, 8);\n popup.style.maxWidth = `${Math.max(0, Math.min(window.innerWidth, collisionRect?.width ?? window.innerWidth) - pad * 2)}px`;\n popup.style.maxHeight = `${Math.max(0, Math.min(window.innerHeight, collisionRect?.height ?? window.innerHeight) - pad * 2)}px`;\n return {\n anchorRect: anchor.getBoundingClientRect(),\n popupWidth: popup.offsetWidth,\n popupHeight: popup.offsetHeight,\n side: 'bottom',\n align: 'end',\n sideOffsetPx: resolveCssLengthPx(TOKEN_DEFAULTS.space050, 4),\n alignOffsetPx: 0,\n viewportPadPx: resolveCssLengthPx(TOKEN_DEFAULTS.space100, 8),\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n collisionRect,\n };\n },\n apply: ({ x, y }) => {\n this.pos = { x, y };\n },\n onReady: () => {\n this.ready = true;\n },\n topLayer: true,\n observeResize: true,\n observeAnchorMotion: true,\n liveUpdate: 'double-frame',\n });\n private readonly interaction = new AnchoredOverlayInteractionController({\n getAnchor: () => this.trigger ?? null,\n getPopup: () => this.popup ?? null,\n getOwnerDocument: () => this.el.ownerDocument,\n onOutsideActivation: () => this.close(),\n });\n disconnectedCallback() {\n this.position.unobserve();\n this.interaction.disconnect();\n }\n private close() {\n this.position.unobserve();\n this.interaction.disconnect();\n if (this.popup?.matches(':popover-open')) this.popup.hidePopover();\n this.open = false;\n void this.trigger?.setFocus();\n }\n private toggle() {\n if (this.open) {\n this.close();\n return;\n }\n this.open = true;\n this.ready = false;\n this.position.observe();\n this.interaction.connect();\n this.position.schedule(async () => {\n await this.popup?.querySelector('ds-tab-group')?.componentOnReady?.();\n requestAnimationFrame(() => {\n if (this.open)\n this.popup?.querySelector<HTMLElement>('[role=\"tab\"][aria-selected=\"true\"]')?.focus();\n });\n });\n }\n @Listen('keydown')\n onKeydown(event: KeyboardEvent) {\n if (this.embedded || !this.open || event.defaultPrevented) return;\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n } else if (event.key === 'Tab' && this.interaction.tabLeavesPopup(event)) {\n event.preventDefault();\n this.close();\n this.interaction.moveFocusAfterTab(event.shiftKey);\n }\n }\n private forward<T>(event: CustomEvent<T>, emitter: EventEmitter<T>) {\n event.stopPropagation();\n emitter.emit(event.detail);\n }\n render() {\n const currentTab = this.embedded ? this.activeTab : this.tab;\n const tabs = ['filters', 'sort', 'group', 'customize'].map(id => ({\n id,\n label: id === 'filters' ? 'Filters' : id[0].toUpperCase() + id.slice(1),\n panelId: `${this.popupId}-${id}`,\n }));\n return (\n <Host>\n {!this.embedded && (\n <ds-tooltip label={this.label} side=\"bottom\" size=\"sm\">\n <ds-button-unfilled\n hasBorder={this.hasBorder}\n ref={el => {\n this.trigger = el;\n }}\n variant=\"icon\"\n icon=\"Preferences\"\n size=\"md\"\n ariaLabel={this.label}\n haspopup=\"dialog\"\n expanded={this.open}\n surfaceOpen={this.open}\n controls={this.popupId}\n onDsClick={() => this.toggle()}\n />\n </ds-tooltip>\n )}\n {(this.open || this.embedded) && (\n <div\n ref={el => {\n this.popup = el;\n }}\n id={this.popupId}\n popover={this.embedded ? undefined : 'manual'}\n role={this.embedded ? undefined : 'dialog'}\n aria-label={this.label}\n class={{\n 'table-preferences': !this.embedded,\n 'table-preferences-panel': this.embedded,\n }}\n style={\n this.embedded\n ? undefined\n : {\n left: `${this.pos.x}px`,\n top: `${this.pos.y}px`,\n visibility: this.ready ? 'visible' : 'hidden',\n }\n }\n >\n <div class=\"table-preferences__tabs\">\n <ds-tab-group\n ariaLabel=\"Table preference sections\"\n size=\"md\"\n presentation={this.embedded ? 'segmented' : 'tabs'}\n width={this.embedded ? 'fill' : 'hug'}\n tabs={tabs}\n value={currentTab}\n onDsChange={event => {\n event.stopPropagation();\n this.tab = event.detail as PreferencesTab;\n this.dsPreferencesTabChange.emit(this.tab);\n }}\n />\n </div>\n <div\n class=\"table-preferences__body\"\n id={`${this.popupId}-${currentTab}`}\n role=\"tabpanel\"\n aria-label={tabs.find(tab => tab.id === currentTab)?.label}\n >\n <div hidden={currentTab !== 'filters'}>\n <ds-filter-menu\n embedded\n vertical={this.embedded}\n applyRequired={!this.embedded}\n filters={this.filters}\n values={this.values}\n matchModes={this.matchModes}\n activeFilterId={this.activeFilterId}\n footerLayout=\"categories-clear\"\n onDsChange={e => this.forward(e, this.dsFilterChange)}\n onDsMatchModeChange={e => this.forward(e, this.dsFilterMatchModeChange)}\n onDsActiveFilterChange={e => this.forward(e, this.dsActiveFilterChange)}\n onDsClear={e => this.forward(e, this.dsFiltersClear)}\n />\n </div>\n {currentTab === 'sort' && (\n <ds-menu\n embedded\n menuLabel=\"Sort table\"\n sections={tableSortMenuSections(this.sortColumns ?? this.columns, this.sort)}\n onDsSelect={e => {\n e.stopPropagation();\n this.dsSortChange.emit({\n sort: nextTableSortStateFromMenuItem(\n this.sortColumns ?? this.columns,\n this.sort,\n e.detail\n ),\n });\n }}\n />\n )}\n {currentTab === 'group' && (\n <ds-table-group\n embedded\n vertical={this.embedded}\n options={this.groupingOptions}\n grouping={this.grouping}\n onDsGroupChange={e => this.forward(e, this.dsGroupChange)}\n onDsClear={e => this.forward(e, this.dsGroupClear)}\n />\n )}\n {currentTab === 'customize' && (\n <ds-menu\n embedded\n menuLabel=\"Customize table\"\n sections={[\n ...(this.columns.length\n ? [\n {\n header: this.customizeOptions.length ? 'Columns' : undefined,\n items: tableColumnCustomizerMenuItems(\n this.columns,\n this.hiddenColumnIds,\n this.columnOrder\n ),\n },\n ]\n : []),\n ...this.customizeSections,\n ...(this.customizeOptions.length\n ? [{ header: 'Options', items: this.customizeOptions }]\n : []),\n ]}\n onDsSelect={e => {\n e.stopPropagation();\n if (!e.detail.value || e.detail.isInactive) return;\n if (\n [\n ...this.customizeOptions,\n ...this.customizeSections.flatMap(section =>\n 'items' in section ? section.items : []\n ),\n ].some(option => option.value === e.detail.value)\n ) {\n this.dsCustomizeOptionChange.emit(e.detail.value);\n return;\n }\n this.dsColumnsConfigChange.emit({\n hiddenColumnIds: toggleTableColumnHidden(\n this.columns,\n this.hiddenColumnIds,\n e.detail.value\n ),\n columnOrder: resolveTableColumnOrder(this.columns, this.columnOrder),\n });\n }}\n onDsReorder={e => {\n e.stopPropagation();\n this.dsColumnsConfigChange.emit({\n hiddenColumnIds: this.hiddenColumnIds,\n columnOrder: e.detail.items\n .filter(item => item.reorderable)\n .map(item => item.value!)\n .filter(Boolean),\n });\n }}\n />\n )}\n </div>\n </div>\n )}\n </Host>\n );\n }\n}\n",
508
+ "type": "registry:ui"
509
+ }
510
+ ]
511
+ }