@planningcenter/tapestry 4.12.0-rc.0 → 4.13.0-rc.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 (233) hide show
  1. package/dist/componentRegistrars.d.ts +1 -0
  2. package/dist/componentRegistrars.d.ts.map +1 -1
  3. package/dist/componentRegistrars.js +6 -2
  4. package/dist/componentRegistrars.js.map +1 -1
  5. package/dist/components/DataTable/ActiveFilters.d.ts +23 -1
  6. package/dist/components/DataTable/ActiveFilters.d.ts.map +1 -1
  7. package/dist/components/DataTable/ActiveFilters.js +49 -4
  8. package/dist/components/DataTable/ActiveFilters.js.map +1 -1
  9. package/dist/components/DataTable/CollectionEditorsLazy.d.ts.map +1 -1
  10. package/dist/components/DataTable/CollectionEditorsLazy.js +19 -16
  11. package/dist/components/DataTable/CollectionEditorsLazy.js.map +1 -1
  12. package/dist/components/DataTable/DataTable.d.ts +66 -49
  13. package/dist/components/DataTable/DataTable.d.ts.map +1 -1
  14. package/dist/components/DataTable/DataTable.js +77 -14
  15. package/dist/components/DataTable/DataTable.js.map +1 -1
  16. package/dist/components/DataTable/ManageSavedViewsModal.d.ts +20 -6
  17. package/dist/components/DataTable/ManageSavedViewsModal.d.ts.map +1 -1
  18. package/dist/components/DataTable/ManageSavedViewsModal.js +234 -69
  19. package/dist/components/DataTable/ManageSavedViewsModal.js.map +1 -1
  20. package/dist/components/DataTable/ManageSavedViewsModal.module.css.js +1 -1
  21. package/dist/components/DataTable/NewSavedViewButton.d.ts.map +1 -1
  22. package/dist/components/DataTable/NewSavedViewButton.js +1 -1
  23. package/dist/components/DataTable/NewSavedViewButton.js.map +1 -1
  24. package/dist/components/DataTable/SavedViewActions.d.ts +19 -0
  25. package/dist/components/DataTable/SavedViewActions.d.ts.map +1 -0
  26. package/dist/components/DataTable/SavedViewActions.js +34 -0
  27. package/dist/components/DataTable/SavedViewActions.js.map +1 -0
  28. package/dist/components/DataTable/SavedViewMenu.d.ts +18 -0
  29. package/dist/components/DataTable/SavedViewMenu.d.ts.map +1 -0
  30. package/dist/components/DataTable/SavedViewMenu.js +25 -0
  31. package/dist/components/DataTable/SavedViewMenu.js.map +1 -0
  32. package/dist/components/DataTable/SavedViewsBar.d.ts +25 -13
  33. package/dist/components/DataTable/SavedViewsBar.d.ts.map +1 -1
  34. package/dist/components/DataTable/SavedViewsBar.js +55 -81
  35. package/dist/components/DataTable/SavedViewsBar.js.map +1 -1
  36. package/dist/components/DataTable/TableActions.d.ts +4 -2
  37. package/dist/components/DataTable/TableActions.d.ts.map +1 -1
  38. package/dist/components/DataTable/TableActions.js +11 -14
  39. package/dist/components/DataTable/TableActions.js.map +1 -1
  40. package/dist/components/DataTable/index.d.ts +2 -0
  41. package/dist/components/DataTable/index.d.ts.map +1 -1
  42. package/dist/components/DataTable/saveErrorMessage.d.ts +3 -0
  43. package/dist/components/DataTable/saveErrorMessage.d.ts.map +1 -0
  44. package/dist/components/DataTable/saveErrorMessage.js +9 -0
  45. package/dist/components/DataTable/saveErrorMessage.js.map +1 -0
  46. package/dist/components/DataTable/savedViews.d.ts +21 -12
  47. package/dist/components/DataTable/savedViews.d.ts.map +1 -1
  48. package/dist/components/DataTable/savedViews.js +58 -48
  49. package/dist/components/DataTable/savedViews.js.map +1 -1
  50. package/dist/components/DataTable/useActiveSavedView.d.ts +1 -1
  51. package/dist/components/DataTable/useActiveSavedView.d.ts.map +1 -1
  52. package/dist/components/DataTable/useActiveSavedView.js +5 -4
  53. package/dist/components/DataTable/useActiveSavedView.js.map +1 -1
  54. package/dist/components/DataTable/useColumnVisibility.d.ts +7 -7
  55. package/dist/components/DataTable/useColumnVisibility.d.ts.map +1 -1
  56. package/dist/components/DataTable/useColumnVisibility.js +14 -14
  57. package/dist/components/DataTable/useColumnVisibility.js.map +1 -1
  58. package/dist/components/DataTable/useResultsAnnouncement.d.ts +26 -0
  59. package/dist/components/DataTable/useResultsAnnouncement.d.ts.map +1 -0
  60. package/dist/components/DataTable/{useFilterAnnouncement.js → useResultsAnnouncement.js} +16 -12
  61. package/dist/components/DataTable/useResultsAnnouncement.js.map +1 -0
  62. package/dist/components/DataTable/useSaveStatus.d.ts +32 -0
  63. package/dist/components/DataTable/useSaveStatus.d.ts.map +1 -0
  64. package/dist/components/DataTable/useSaveStatus.js +80 -0
  65. package/dist/components/DataTable/useSaveStatus.js.map +1 -0
  66. package/dist/components/DataTable/useSavedViewNameModal.d.ts +14 -0
  67. package/dist/components/DataTable/useSavedViewNameModal.d.ts.map +1 -0
  68. package/dist/components/DataTable/useSavedViewNameModal.js +43 -0
  69. package/dist/components/DataTable/useSavedViewNameModal.js.map +1 -0
  70. package/dist/components/DataTable/useSavedViewsClient.d.ts +58 -0
  71. package/dist/components/DataTable/useSavedViewsClient.d.ts.map +1 -0
  72. package/dist/components/DataTable/useSavedViewsClient.js +87 -0
  73. package/dist/components/DataTable/useSavedViewsClient.js.map +1 -0
  74. package/dist/components/DataTable/useSavedViewsState.d.ts +35 -0
  75. package/dist/components/DataTable/useSavedViewsState.d.ts.map +1 -0
  76. package/dist/components/DataTable/useSavedViewsState.js +192 -0
  77. package/dist/components/DataTable/useSavedViewsState.js.map +1 -0
  78. package/dist/components/DataTable/useUpdateSavedViewName.d.ts +2 -3
  79. package/dist/components/DataTable/useUpdateSavedViewName.d.ts.map +1 -1
  80. package/dist/components/DataTable/useUpdateSavedViewName.js +1 -2
  81. package/dist/components/DataTable/useUpdateSavedViewName.js.map +1 -1
  82. package/dist/components/button/ActionsDropdownIconButton.d.ts +3 -2
  83. package/dist/components/button/ActionsDropdownIconButton.d.ts.map +1 -1
  84. package/dist/components/button/ActionsDropdownIconButton.js.map +1 -1
  85. package/dist/components/button/BaseButton.d.ts +2 -0
  86. package/dist/components/button/BaseButton.d.ts.map +1 -1
  87. package/dist/components/button/BaseButton.js +8 -16
  88. package/dist/components/button/BaseButton.js.map +1 -1
  89. package/dist/components/button/IconButton.d.ts +1 -3
  90. package/dist/components/button/IconButton.d.ts.map +1 -1
  91. package/dist/components/button/IconButton.js.map +1 -1
  92. package/dist/components/button/ToggleIconButton.d.ts +5 -2
  93. package/dist/components/button/ToggleIconButton.d.ts.map +1 -1
  94. package/dist/components/button/ToggleIconButton.js +1 -0
  95. package/dist/components/button/ToggleIconButton.js.map +1 -1
  96. package/dist/components/button/index.d.ts +1 -1
  97. package/dist/components/button/index.d.ts.map +1 -1
  98. package/dist/components/combo-box/ComboBox.d.ts +2 -0
  99. package/dist/components/combo-box/ComboBox.d.ts.map +1 -1
  100. package/dist/components/combo-box/ComboBox.js +31 -5
  101. package/dist/components/combo-box/ComboBox.js.map +1 -1
  102. package/dist/components/date-picker/DatePicker.d.ts.map +1 -1
  103. package/dist/components/date-picker/DatePicker.js +18 -14
  104. package/dist/components/date-picker/DatePicker.js.map +1 -1
  105. package/dist/components/internal/LoadingAnnouncement.d.ts +17 -0
  106. package/dist/components/internal/LoadingAnnouncement.d.ts.map +1 -0
  107. package/dist/components/internal/LoadingAnnouncement.js +30 -0
  108. package/dist/components/internal/LoadingAnnouncement.js.map +1 -0
  109. package/dist/components/internal/index.d.ts +1 -0
  110. package/dist/components/internal/index.d.ts.map +1 -1
  111. package/dist/components/internal/tooltip/Tooltip.d.ts +4 -2
  112. package/dist/components/internal/tooltip/Tooltip.d.ts.map +1 -1
  113. package/dist/components/internal/tooltip/Tooltip.js.map +1 -1
  114. package/dist/components/internal/tooltip/TooltipTriggerContext.d.ts +3 -3
  115. package/dist/components/internal/tooltip/TooltipTriggerContext.d.ts.map +1 -1
  116. package/dist/components/internal/tooltip/TooltipTriggerContext.js +1 -1
  117. package/dist/components/internal/tooltip/TooltipTriggerContext.js.map +1 -1
  118. package/dist/components/internal/tooltip/index.d.ts +1 -1
  119. package/dist/components/internal/tooltip/index.d.ts.map +1 -1
  120. package/dist/components/internal/tooltip/useTooltipTriggerProps.d.ts +13 -0
  121. package/dist/components/internal/tooltip/useTooltipTriggerProps.d.ts.map +1 -0
  122. package/dist/components/internal/tooltip/useTooltipTriggerProps.js +24 -0
  123. package/dist/components/internal/tooltip/useTooltipTriggerProps.js.map +1 -0
  124. package/dist/components/link/BaseLink.d.ts.map +1 -1
  125. package/dist/components/link/BaseLink.js +4 -2
  126. package/dist/components/link/BaseLink.js.map +1 -1
  127. package/dist/components/link/IconLink.d.ts +28 -290
  128. package/dist/components/link/IconLink.d.ts.map +1 -1
  129. package/dist/components/link/IconLink.js +9 -2
  130. package/dist/components/link/IconLink.js.map +1 -1
  131. package/dist/components/page-header/defineElements.js +1 -1
  132. package/dist/components/pane/Pane.d.ts +1 -1
  133. package/dist/components/pane/Pane.js +1 -1
  134. package/dist/components/pane/Pane.js.map +1 -1
  135. package/dist/components/pane/PaneBody.d.ts +1 -1
  136. package/dist/components/pane/PaneBody.js +1 -1
  137. package/dist/components/pane/PaneBody.js.map +1 -1
  138. package/dist/components/pane/PaneDivider.d.ts +1 -1
  139. package/dist/components/pane/PaneDivider.js +1 -1
  140. package/dist/components/pane/PaneDivider.js.map +1 -1
  141. package/dist/components/pane/PaneFooter.d.ts +1 -1
  142. package/dist/components/pane/PaneFooter.js +1 -1
  143. package/dist/components/pane/PaneFooter.js.map +1 -1
  144. package/dist/components/pane/PaneHeader.d.ts +1 -1
  145. package/dist/components/pane/PaneHeader.js +1 -1
  146. package/dist/components/pane/PaneHeader.js.map +1 -1
  147. package/dist/components/pane/PaneHeaderActions.d.ts +1 -1
  148. package/dist/components/pane/PaneHeaderActions.js +1 -1
  149. package/dist/components/pane/PaneHeaderActions.js.map +1 -1
  150. package/dist/components/segmented-control/IconSegment.d.ts +30 -8
  151. package/dist/components/segmented-control/IconSegment.d.ts.map +1 -1
  152. package/dist/components/segmented-control/IconSegment.js +10 -3
  153. package/dist/components/segmented-control/IconSegment.js.map +1 -1
  154. package/dist/components/segmented-control/SegmentBase.d.ts.map +1 -1
  155. package/dist/components/segmented-control/SegmentBase.js +4 -2
  156. package/dist/components/segmented-control/SegmentBase.js.map +1 -1
  157. package/dist/components/segmented-control/SegmentedControl.d.ts.map +1 -1
  158. package/dist/components/segmented-control/SegmentedControl.js +10 -3
  159. package/dist/components/segmented-control/SegmentedControl.js.map +1 -1
  160. package/dist/components/sidenav/defineElements.js +1 -1
  161. package/dist/components/time-field/TimeField.d.ts.map +1 -1
  162. package/dist/components/time-field/TimeField.js +7 -3
  163. package/dist/components/time-field/TimeField.js.map +1 -1
  164. package/dist/index.css +161 -4
  165. package/dist/index.css.map +1 -1
  166. package/dist/index.d.ts +1 -0
  167. package/dist/index.d.ts.map +1 -1
  168. package/dist/index.js +6 -0
  169. package/dist/index.js.map +1 -1
  170. package/dist/packages/tapestry-wc/dist/components/{p-np7vhMVg.js → p-A1JK45WV.js} +3 -3
  171. package/dist/packages/tapestry-wc/dist/components/p-A1JK45WV.js.map +1 -0
  172. package/dist/packages/tapestry-wc/dist/components/{p-BVvtAaVT.js → p-BbuNAv9q.js} +3 -3
  173. package/dist/packages/tapestry-wc/dist/components/p-BbuNAv9q.js.map +1 -0
  174. package/dist/packages/tapestry-wc/dist/components/{p-B2xqMgNQ.js → p-CBFtMIxJ.js} +2 -2
  175. package/dist/packages/tapestry-wc/dist/components/p-CBFtMIxJ.js.map +1 -0
  176. package/dist/packages/tapestry-wc/dist/components/{p-Rn6lOB18.js → p-CY_DC4d_.js} +3 -3
  177. package/dist/packages/tapestry-wc/dist/components/p-CY_DC4d_.js.map +1 -0
  178. package/dist/packages/tapestry-wc/dist/components/{p-6NO22Vi_.js → p-DNHgMtxw.js} +2 -2
  179. package/dist/packages/tapestry-wc/dist/components/p-DNHgMtxw.js.map +1 -0
  180. package/dist/packages/tapestry-wc/dist/components/tds-page-header-nav.js +2 -2
  181. package/dist/packages/tapestry-wc/dist/components/tds-page-header-nav.js.map +1 -1
  182. package/dist/packages/tapestry-wc/dist/components/tds-page-header.js +3 -3
  183. package/dist/packages/tapestry-wc/dist/components/tds-page-header.js.map +1 -1
  184. package/dist/packages/tapestry-wc/dist/components/tds-sidenav-item.js +3 -3
  185. package/dist/packages/tapestry-wc/dist/components/tds-sidenav-item.js.map +1 -1
  186. package/dist/packages/tapestry-wc/dist/components/tds-sidenav-responsive-header.js +2 -2
  187. package/dist/packages/tapestry-wc/dist/components/tds-sidenav-responsive-header.js.map +1 -1
  188. package/dist/packages/tapestry-wc/dist/components/tds-sidenav-section.js +3 -3
  189. package/dist/packages/tapestry-wc/dist/components/tds-sidenav-section.js.map +1 -1
  190. package/dist/packages/tapestry-wc/dist/components/tds-sidenav.js +5 -5
  191. package/dist/packages/tapestry-wc/dist/components/tds-sidenav.js.map +1 -1
  192. package/dist/reactRender.css +1468 -1308
  193. package/dist/reactRender.css.map +1 -1
  194. package/dist/reactRender.js +1 -1
  195. package/dist/reactRenderLegacy.css +1468 -1308
  196. package/dist/reactRenderLegacy.css.map +1 -1
  197. package/dist/reactRenderLegacy.js +1 -1
  198. package/dist/tapestryMount.css +1468 -1308
  199. package/dist/tapestryMount.css.map +1 -1
  200. package/dist/tapestryMount.js +1 -1
  201. package/dist/tapestryMountLegacy.css +1468 -1308
  202. package/dist/tapestryMountLegacy.css.map +1 -1
  203. package/dist/tapestryMountLegacy.js +1 -1
  204. package/dist/tokens-dark.css +2 -2
  205. package/dist/tokens-dark.css.map +1 -1
  206. package/dist/tokens.css +3 -3
  207. package/dist/tokens.css.map +1 -1
  208. package/dist/unstable.css +700 -540
  209. package/dist/unstable.css.map +1 -1
  210. package/dist/unstable.d.ts +0 -1
  211. package/dist/unstable.d.ts.map +1 -1
  212. package/dist/unstable.js +7 -6
  213. package/dist/unstable.js.map +1 -1
  214. package/dist/utilities/dateFieldLocale.d.ts +2 -0
  215. package/dist/utilities/dateFieldLocale.d.ts.map +1 -0
  216. package/dist/utilities/dateFieldLocale.js +32 -0
  217. package/dist/utilities/dateFieldLocale.js.map +1 -0
  218. package/dist/utilities/useAnnounce.d.ts +8 -1
  219. package/dist/utilities/useAnnounce.d.ts.map +1 -1
  220. package/dist/utilities/useAnnounce.js.map +1 -1
  221. package/dist/utilities/useDateFieldLocale.d.ts +2 -0
  222. package/dist/utilities/useDateFieldLocale.d.ts.map +1 -0
  223. package/dist/utilities/useDateFieldLocale.js +11 -0
  224. package/dist/utilities/useDateFieldLocale.js.map +1 -0
  225. package/package.json +7 -7
  226. package/dist/components/DataTable/useFilterAnnouncement.d.ts +0 -24
  227. package/dist/components/DataTable/useFilterAnnouncement.d.ts.map +0 -1
  228. package/dist/components/DataTable/useFilterAnnouncement.js.map +0 -1
  229. package/dist/packages/tapestry-wc/dist/components/p-6NO22Vi_.js.map +0 -1
  230. package/dist/packages/tapestry-wc/dist/components/p-B2xqMgNQ.js.map +0 -1
  231. package/dist/packages/tapestry-wc/dist/components/p-BVvtAaVT.js.map +0 -1
  232. package/dist/packages/tapestry-wc/dist/components/p-Rn6lOB18.js.map +0 -1
  233. package/dist/packages/tapestry-wc/dist/components/p-np7vhMVg.js.map +0 -1
@@ -1,6 +1,7 @@
1
1
  export declare function registerComboBox(): void;
2
2
  export declare function registerDatePicker(): void;
3
3
  export declare function registerDropdown(): void;
4
+ export declare function registerIconButton(): void;
4
5
  export declare function registerNumberStepper(): void;
5
6
  export declare function registerPageHeader(): void;
6
7
  export declare function registerSearchInput(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"componentRegistrars.d.ts","sourceRoot":"","sources":["../src/componentRegistrars.ts"],"names":[],"mappings":"AA4BA,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAUvC;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAUlC"}
1
+ {"version":3,"file":"componentRegistrars.d.ts","sourceRoot":"","sources":["../src/componentRegistrars.ts"],"names":[],"mappings":"AA6BA,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAUvC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAWlC"}
@@ -2,7 +2,7 @@ import './components/button/ActionsDropdownIconButton.js';
2
2
  import './components/button/Button.js';
3
3
  import { DropdownButton } from './components/button/DropdownButton.js';
4
4
  import { DropdownIconButton } from './components/button/DropdownIconButton.js';
5
- import './components/button/IconButton.js';
5
+ import { IconButton } from './components/button/IconButton.js';
6
6
  import './components/button/LoadingButton.js';
7
7
  import { PageHeaderActionsDropdownButton } from './components/button/PageHeaderActionsDropdownButton.js';
8
8
  import { ComboBox, ComboBoxItem, ComboBoxSection } from './components/combo-box/ComboBox.js';
@@ -39,6 +39,9 @@ function registerDropdown() {
39
39
  r("DropdownSeparator", DropdownSeparator);
40
40
  r("DropdownTrigger", DropdownTrigger);
41
41
  }
42
+ function registerIconButton() {
43
+ r("IconButton", IconButton);
44
+ }
42
45
  function registerNumberStepper() {
43
46
  r("NumberStepper", NumberStepper);
44
47
  }
@@ -66,6 +69,7 @@ function registerAll() {
66
69
  registerComboBox();
67
70
  registerDatePicker();
68
71
  registerDropdown();
72
+ registerIconButton();
69
73
  registerNumberStepper();
70
74
  registerPageHeader();
71
75
  registerSearchInput();
@@ -74,5 +78,5 @@ function registerAll() {
74
78
  registerTimeField();
75
79
  }
76
80
 
77
- export { registerAll, registerComboBox, registerDatePicker, registerDropdown, registerNumberStepper, registerPageHeader, registerSearchInput, registerSelect, registerSidenav, registerTimeField };
81
+ export { registerAll, registerComboBox, registerDatePicker, registerDropdown, registerIconButton, registerNumberStepper, registerPageHeader, registerSearchInput, registerSelect, registerSidenav, registerTimeField };
78
82
  //# sourceMappingURL=componentRegistrars.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"componentRegistrars.js","sources":["../src/componentRegistrars.ts"],"sourcesContent":["import {\n DropdownButton,\n DropdownIconButton,\n PageHeaderActionsDropdownButton,\n} from \"@components/button\"\nimport { ComboBox, ComboBoxItem, ComboBoxSection } from \"@components/combo-box\"\nimport { DatePicker } from \"@components/date-picker\"\nimport {\n Dropdown,\n DropdownAction,\n DropdownLink,\n DropdownMenu,\n DropdownSection,\n DropdownSeparator,\n DropdownTrigger,\n} from \"@components/dropdown\"\nimport { NumberStepper } from \"@components/number-stepper\"\nimport { definePageHeaderElements } from \"@components/page-header/defineElements\"\nimport { PageHeader } from \"@components/page-header/PageHeader\"\nimport { SearchInput } from \"@components/search-input\"\nimport { Select } from \"@components/select\"\nimport { defineSidenavElements } from \"@components/sidenav/defineElements\"\nimport { Sidenav } from \"@components/sidenav/Sidenav\"\nimport { SidenavItem } from \"@components/sidenav/SidenavItem\"\nimport { SidenavSection } from \"@components/sidenav/SidenavSection\"\nimport { TimeField } from \"@components/time-field\"\nimport { register } from \"@planningcenter/tapestry-render/registry\"\n\nexport function registerComboBox(): void {\n register(\"ComboBox\", ComboBox)\n register(\"ComboBoxItem\", ComboBoxItem)\n register(\"ComboBoxSection\", ComboBoxSection)\n}\n\nexport function registerDatePicker(): void {\n register(\"DatePicker\", DatePicker)\n}\n\nexport function registerDropdown(): void {\n register(\"Dropdown\", Dropdown)\n register(\"DropdownAction\", DropdownAction)\n register(\"DropdownButton\", DropdownButton)\n register(\"DropdownIconButton\", DropdownIconButton)\n register(\"DropdownLink\", DropdownLink)\n register(\"DropdownMenu\", DropdownMenu)\n register(\"DropdownSection\", DropdownSection)\n register(\"DropdownSeparator\", DropdownSeparator)\n register(\"DropdownTrigger\", DropdownTrigger)\n}\n\nexport function registerNumberStepper(): void {\n register(\"NumberStepper\", NumberStepper)\n}\n\nexport function registerPageHeader(): void {\n definePageHeaderElements()\n register(\"PageHeader\", PageHeader)\n register(\"PageHeaderActionsDropdownButton\", PageHeaderActionsDropdownButton)\n}\n\nexport function registerSearchInput(): void {\n register(\"SearchInput\", SearchInput)\n}\n\nexport function registerSelect(): void {\n register(\"Select\", Select)\n}\n\nexport function registerSidenav(): void {\n defineSidenavElements()\n register(\"Sidenav\", Sidenav)\n register(\"SidenavItem\", SidenavItem)\n register(\"SidenavSection\", SidenavSection)\n}\n\nexport function registerTimeField(): void {\n register(\"TimeField\", TimeField)\n}\n\nexport function registerAll(): void {\n registerComboBox()\n registerDatePicker()\n registerDropdown()\n registerNumberStepper()\n registerPageHeader()\n registerSearchInput()\n registerSelect()\n registerSidenav()\n registerTimeField()\n}\n"],"names":["register"],"mappings":";;;;;;;;;;;;;;;;;;;;;;SA4BgB,gBAAgB,GAAA;AAC9B,IAAAA,CAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC9B,IAAAA,CAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;AACtC,IAAAA,CAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC;AAC9C;SAEgB,kBAAkB,GAAA;AAChC,IAAAA,CAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;AACpC;SAEgB,gBAAgB,GAAA;AAC9B,IAAAA,CAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC9B,IAAAA,CAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC;AAC1C,IAAAA,CAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC;AAC1C,IAAAA,CAAQ,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;AAClD,IAAAA,CAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;AACtC,IAAAA,CAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;AACtC,IAAAA,CAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC;AAC5C,IAAAA,CAAQ,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;AAChD,IAAAA,CAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC;AAC9C;SAEgB,qBAAqB,GAAA;AACnC,IAAAA,CAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;AAC1C;SAEgB,kBAAkB,GAAA;AAChC,IAAA,wBAAwB,EAAE;AAC1B,IAAAA,CAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;AAClC,IAAAA,CAAQ,CAAC,iCAAiC,EAAE,+BAA+B,CAAC;AAC9E;SAEgB,mBAAmB,GAAA;AACjC,IAAAA,CAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;AACtC;SAEgB,cAAc,GAAA;AAC5B,IAAAA,CAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC5B;SAEgB,eAAe,GAAA;AAC7B,IAAA,qBAAqB,EAAE;AACvB,IAAAA,CAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;AAC5B,IAAAA,CAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;AACpC,IAAAA,CAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC;AAC5C;SAEgB,iBAAiB,GAAA;AAC/B,IAAAA,CAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AAClC;SAEgB,WAAW,GAAA;AACzB,IAAA,gBAAgB,EAAE;AAClB,IAAA,kBAAkB,EAAE;AACpB,IAAA,gBAAgB,EAAE;AAClB,IAAA,qBAAqB,EAAE;AACvB,IAAA,kBAAkB,EAAE;AACpB,IAAA,mBAAmB,EAAE;AACrB,IAAA,cAAc,EAAE;AAChB,IAAA,eAAe,EAAE;AACjB,IAAA,iBAAiB,EAAE;AACrB;;;;"}
1
+ {"version":3,"file":"componentRegistrars.js","sources":["../src/componentRegistrars.ts"],"sourcesContent":["import {\n DropdownButton,\n DropdownIconButton,\n IconButton,\n PageHeaderActionsDropdownButton,\n} from \"@components/button\"\nimport { ComboBox, ComboBoxItem, ComboBoxSection } from \"@components/combo-box\"\nimport { DatePicker } from \"@components/date-picker\"\nimport {\n Dropdown,\n DropdownAction,\n DropdownLink,\n DropdownMenu,\n DropdownSection,\n DropdownSeparator,\n DropdownTrigger,\n} from \"@components/dropdown\"\nimport { NumberStepper } from \"@components/number-stepper\"\nimport { definePageHeaderElements } from \"@components/page-header/defineElements\"\nimport { PageHeader } from \"@components/page-header/PageHeader\"\nimport { SearchInput } from \"@components/search-input\"\nimport { Select } from \"@components/select\"\nimport { defineSidenavElements } from \"@components/sidenav/defineElements\"\nimport { Sidenav } from \"@components/sidenav/Sidenav\"\nimport { SidenavItem } from \"@components/sidenav/SidenavItem\"\nimport { SidenavSection } from \"@components/sidenav/SidenavSection\"\nimport { TimeField } from \"@components/time-field\"\nimport { register } from \"@planningcenter/tapestry-render/registry\"\n\nexport function registerComboBox(): void {\n register(\"ComboBox\", ComboBox)\n register(\"ComboBoxItem\", ComboBoxItem)\n register(\"ComboBoxSection\", ComboBoxSection)\n}\n\nexport function registerDatePicker(): void {\n register(\"DatePicker\", DatePicker)\n}\n\nexport function registerDropdown(): void {\n register(\"Dropdown\", Dropdown)\n register(\"DropdownAction\", DropdownAction)\n register(\"DropdownButton\", DropdownButton)\n register(\"DropdownIconButton\", DropdownIconButton)\n register(\"DropdownLink\", DropdownLink)\n register(\"DropdownMenu\", DropdownMenu)\n register(\"DropdownSection\", DropdownSection)\n register(\"DropdownSeparator\", DropdownSeparator)\n register(\"DropdownTrigger\", DropdownTrigger)\n}\n\nexport function registerIconButton(): void {\n register(\"IconButton\", IconButton)\n}\n\nexport function registerNumberStepper(): void {\n register(\"NumberStepper\", NumberStepper)\n}\n\nexport function registerPageHeader(): void {\n definePageHeaderElements()\n register(\"PageHeader\", PageHeader)\n register(\"PageHeaderActionsDropdownButton\", PageHeaderActionsDropdownButton)\n}\n\nexport function registerSearchInput(): void {\n register(\"SearchInput\", SearchInput)\n}\n\nexport function registerSelect(): void {\n register(\"Select\", Select)\n}\n\nexport function registerSidenav(): void {\n defineSidenavElements()\n register(\"Sidenav\", Sidenav)\n register(\"SidenavItem\", SidenavItem)\n register(\"SidenavSection\", SidenavSection)\n}\n\nexport function registerTimeField(): void {\n register(\"TimeField\", TimeField)\n}\n\nexport function registerAll(): void {\n registerComboBox()\n registerDatePicker()\n registerDropdown()\n registerIconButton()\n registerNumberStepper()\n registerPageHeader()\n registerSearchInput()\n registerSelect()\n registerSidenav()\n registerTimeField()\n}\n"],"names":["register"],"mappings":";;;;;;;;;;;;;;;;;;;;;;SA6BgB,gBAAgB,GAAA;AAC9B,IAAAA,CAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC9B,IAAAA,CAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;AACtC,IAAAA,CAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC;AAC9C;SAEgB,kBAAkB,GAAA;AAChC,IAAAA,CAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;AACpC;SAEgB,gBAAgB,GAAA;AAC9B,IAAAA,CAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC9B,IAAAA,CAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC;AAC1C,IAAAA,CAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC;AAC1C,IAAAA,CAAQ,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;AAClD,IAAAA,CAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;AACtC,IAAAA,CAAQ,CAAC,cAAc,EAAE,YAAY,CAAC;AACtC,IAAAA,CAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC;AAC5C,IAAAA,CAAQ,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;AAChD,IAAAA,CAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC;AAC9C;SAEgB,kBAAkB,GAAA;AAChC,IAAAA,CAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;AACpC;SAEgB,qBAAqB,GAAA;AACnC,IAAAA,CAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;AAC1C;SAEgB,kBAAkB,GAAA;AAChC,IAAA,wBAAwB,EAAE;AAC1B,IAAAA,CAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;AAClC,IAAAA,CAAQ,CAAC,iCAAiC,EAAE,+BAA+B,CAAC;AAC9E;SAEgB,mBAAmB,GAAA;AACjC,IAAAA,CAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;AACtC;SAEgB,cAAc,GAAA;AAC5B,IAAAA,CAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC5B;SAEgB,eAAe,GAAA;AAC7B,IAAA,qBAAqB,EAAE;AACvB,IAAAA,CAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;AAC5B,IAAAA,CAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;AACpC,IAAAA,CAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC;AAC5C;SAEgB,iBAAiB,GAAA;AAC/B,IAAAA,CAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AAClC;SAEgB,WAAW,GAAA;AACzB,IAAA,gBAAgB,EAAE;AAClB,IAAA,kBAAkB,EAAE;AACpB,IAAA,gBAAgB,EAAE;AAClB,IAAA,kBAAkB,EAAE;AACpB,IAAA,qBAAqB,EAAE;AACvB,IAAA,kBAAkB,EAAE;AACpB,IAAA,mBAAmB,EAAE;AACrB,IAAA,cAAc,EAAE;AAChB,IAAA,eAAe,EAAE;AACjB,IAAA,iBAAiB,EAAE;AACrB;;;;"}
@@ -1,12 +1,34 @@
1
1
  import React from "react";
2
2
  import type { ActiveFilter, FilterChange } from "./FilterTypes";
3
- export declare function ActiveFilters({ activeFilters, hasFilters, onActiveFiltersChange, onClear, }: {
3
+ import { type SavedView } from "./savedViews";
4
+ import { type useSaveStatus } from "./useSaveStatus";
5
+ export declare function ActiveFilters({ activeFilters, activeSavedView, currentState, hasFilters, onActiveFiltersChange, onClear, onSavedViewApply, onSavedViewCreate, onSavedViewUpdate, saveStatus, selectSavedViewWhenSaved, }: {
4
6
  activeFilters: ActiveFilter[];
7
+ /**
8
+ * The selected view, while it has changes. Shows the actions to update the
9
+ * view, save the changes as a new one, or discard them.
10
+ */
11
+ activeSavedView?: SavedView;
12
+ /** What Update view and Save as new view save. */
13
+ currentState?: Omit<SavedView, "id" | "name">;
5
14
  /** Whether the filter schema has loaded. */
6
15
  hasFilters: boolean;
7
16
  onActiveFiltersChange: (activeFilters: ActiveFilter[]) => void;
8
17
  /** Called by the Clear button. Defaults to `onActiveFiltersChange([])`. */
9
18
  onClear?: () => void;
19
+ /** Discard changes applies the view again. */
20
+ onSavedViewApply?: (savedView: SavedView) => void;
21
+ /** Omit to leave out Save as new view. */
22
+ onSavedViewCreate?: (savedView: Omit<SavedView, "id">) => Promise<SavedView> | SavedView;
23
+ /** Omit to disable Update view. */
24
+ onSavedViewUpdate?: (savedView: SavedView) => Promise<SavedView> | SavedView;
25
+ /**
26
+ * Tracks Update view and Save as new view saves, so their status shows in
27
+ * the saved views bar.
28
+ */
29
+ saveStatus?: ReturnType<typeof useSaveStatus>;
30
+ /** Selects a view made with Save as new view once it's saved. */
31
+ selectSavedViewWhenSaved?: (savedView: Promise<SavedView | undefined> | SavedView) => Promise<SavedView | undefined>;
10
32
  }): React.JSX.Element;
11
33
  declare function ActiveFilter({ activeFilter, onChange, onOpened, removeActiveFilter, pending, shouldOpen, }: {
12
34
  activeFilter: ActiveFilter;
@@ -1 +1 @@
1
- {"version":3,"file":"ActiveFilters.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/ActiveFilters.tsx"],"names":[],"mappings":"AAMA,OAAO,KAMN,MAAM,OAAO,CAAA;AAad,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAQ/D,wBAAgB,aAAa,CAAC,EAC5B,aAAa,EACb,UAAU,EACV,qBAAqB,EACrB,OAAyC,GAC1C,EAAE;IACD,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAA;IACnB,qBAAqB,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,KAAK,IAAI,CAAA;IAC9D,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB,qBAgKA;AAsBD,iBAAS,YAAY,CAAC,EACpB,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,OAAe,EACf,UAAkB,GACnB,EAAE;IACD,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,EAAE,YAAY,CAAA;IACtB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,qBA4FA"}
1
+ {"version":3,"file":"ActiveFilters.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/ActiveFilters.tsx"],"names":[],"mappings":"AAMA,OAAO,KAMN,MAAM,OAAO,CAAA;AAad,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAK/D,OAAO,EAAE,KAAK,SAAS,EAAsB,MAAM,cAAc,CAAA;AACjE,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAK9D,wBAAgB,aAAa,CAAC,EAC5B,aAAa,EACb,eAAe,EACf,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,OAAyC,EACzC,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,wBAAwB,GACzB,EAAE;IACD,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,CAAA;IAC3B,kDAAkD;IAClD,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC,CAAA;IAC7C,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAA;IACnB,qBAAqB,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,KAAK,IAAI,CAAA;IAC9D,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAA;IACjD,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,CAClB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAC7B,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;IACnC,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;IAC5E;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAA;IAC7C,iEAAiE;IACjE,wBAAwB,CAAC,EAAE,CACzB,SAAS,EAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS,KAClD,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAA;CACpC,qBA+NA;AAsBD,iBAAS,YAAY,CAAC,EACpB,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,kBAAkB,EAClB,OAAe,EACf,UAAkB,GACnB,EAAE;IACD,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,EAAE,YAAY,CAAA;IACtB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,qBA4FA"}
@@ -6,7 +6,7 @@ import '../button/IconButton.js';
6
6
  import '../button/LoadingButton.js';
7
7
  import '../button/PageHeaderActionsDropdownButton.js';
8
8
  import { Popover, PopoverTrigger, PopoverContent } from '../popover/Popover.js';
9
- import React__default, { useState, useMemo, useLayoutEffect, useRef, useEffect } from 'react';
9
+ import React__default, { useState, useRef, useLayoutEffect, useMemo, useEffect } from 'react';
10
10
  import { FilterChip, FilterChipSegments, FilterChipStaticSegments } from './FilterChip.js';
11
11
  import { useRestoreFilterFocus, useRelatedFilterOperator } from './FilterContext.js';
12
12
  import { getFilterKey, keepFilterKey, getFilterSequence } from './filterKeys.js';
@@ -14,12 +14,51 @@ import { useFilterOpenRequest, useRequestedOpen } from './FilterOpenRequest.js';
14
14
  import { FocusFirstControl } from './FocusFirstControl.js';
15
15
  import { OperatorSelect } from './OperatorSelect.js';
16
16
  import { usePendingFilters } from './PendingFilterContext.js';
17
+ import { SavedViewActions } from './SavedViewActions.js';
18
+ import { savedViewDuplicate } from './savedViews.js';
19
+ import { NEW_VIEW } from './useSaveStatus.js';
17
20
 
18
- function ActiveFilters({ activeFilters, hasFilters, onActiveFiltersChange, onClear = () => onActiveFiltersChange([]), }) {
21
+ function ActiveFilters({ activeFilters, activeSavedView, currentState, hasFilters, onActiveFiltersChange, onClear = () => onActiveFiltersChange([]), onSavedViewApply, onSavedViewCreate, onSavedViewUpdate, saveStatus, selectSavedViewWhenSaved, }) {
19
22
  const { pendingFilters, removePendingFilter, updatePendingFilter } = usePendingFilters();
20
23
  const restoreFilterFocus = useRestoreFilterFocus();
21
24
  const { clearFilterOpenRequest, filterOpenRequest } = useFilterOpenRequest();
22
25
  const [promotions, setPromotions] = useState([]);
26
+ const clearButtonRef = useRef(null);
27
+ // Includes a menu or modal the actions opened, since React events reach
28
+ // here through their portals.
29
+ const hasActionsFocus = useRef(false);
30
+ // The selected view with its changes, which Update view saves over it and
31
+ // Save as new view saves as a copy.
32
+ const modifiedView = activeSavedView &&
33
+ currentState && { ...activeSavedView, ...currentState };
34
+ const savedViewActions = activeSavedView &&
35
+ modifiedView &&
36
+ onSavedViewApply &&
37
+ saveStatus && {
38
+ onDiscard: () => onSavedViewApply(activeSavedView),
39
+ onSaveAsNew: onSavedViewCreate &&
40
+ selectSavedViewWhenSaved &&
41
+ ((name) => saveStatus.track(NEW_VIEW, selectSavedViewWhenSaved(onSavedViewCreate(savedViewDuplicate(modifiedView, name))), name)),
42
+ onUpdate: onSavedViewUpdate &&
43
+ (() => saveStatus.track(modifiedView.id, onSavedViewUpdate(modifiedView), modifiedView.name)),
44
+ savedViewName: activeSavedView.name,
45
+ };
46
+ const hasSavedViewActions = Boolean(savedViewActions);
47
+ // Saving or discarding removes the actions, so focus moves to Clear
48
+ // instead of being lost.
49
+ useLayoutEffect(() => {
50
+ if (hasSavedViewActions || !hasActionsFocus.current)
51
+ return;
52
+ hasActionsFocus.current = false;
53
+ clearButtonRef.current?.focus();
54
+ }, [hasSavedViewActions]);
55
+ // Discarding changes to a view without filters empties the shelf, which
56
+ // removes Clear too, so focus moves to Add filter. It waits for the open
57
+ // menu to unmount, since the menu keeps focus inside it until then.
58
+ useLayoutEffect(() => () => {
59
+ if (hasActionsFocus.current)
60
+ queueMicrotask(restoreFilterFocus);
61
+ }, [restoreFilterFocus]);
23
62
  // Keep each pending chip, and its open popover, mounted until the host
24
63
  // applies its promotion.
25
64
  const confirmed = useMemo(() => promotions.flatMap((promotion) => {
@@ -123,8 +162,14 @@ function ActiveFilters({ activeFilters, hasFilters, onActiveFiltersChange, onCle
123
162
  }
124
163
  sendWithout(index);
125
164
  } })))),
126
- React__default.createElement("div", { className: "tds-data-table-filters-active-actions" },
127
- React__default.createElement(Button, { "aria-label": "Clear filters", disabled: !hasFilters, kind: "secondary", label: "Clear", size: "sm", onClick: () => {
165
+ React__default.createElement("div", { className: "tds-data-table-filters-active-actions", onBlur: (event) => {
166
+ if (!event.currentTarget.contains(event.relatedTarget))
167
+ hasActionsFocus.current = false;
168
+ }, onFocus: () => {
169
+ hasActionsFocus.current = true;
170
+ } },
171
+ savedViewActions && React__default.createElement(SavedViewActions, { ...savedViewActions }),
172
+ React__default.createElement(Button, { ref: clearButtonRef, "aria-label": "Clear filters", disabled: !hasFilters, kind: "secondary", label: "Clear", size: "sm", onClick: () => {
128
173
  setPromotions([]);
129
174
  onClear();
130
175
  restoreFilterFocus();
@@ -1 +1 @@
1
- {"version":3,"file":"ActiveFilters.js","sources":["../../../src/components/DataTable/ActiveFilters.tsx"],"sourcesContent":["import { Button } from \"@components/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@components/popover/Popover\"\nimport React, {\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\"\n\nimport {\n FilterChip,\n FilterChipSegments,\n FilterChipStaticSegments,\n} from \"./FilterChip\"\nimport {\n useRelatedFilterOperator,\n useRestoreFilterFocus,\n} from \"./FilterContext\"\nimport { getFilterKey, getFilterSequence, keepFilterKey } from \"./filterKeys\"\nimport { useFilterOpenRequest, useRequestedOpen } from \"./FilterOpenRequest\"\nimport type { ActiveFilter, FilterChange } from \"./FilterTypes\"\nimport { FocusFirstControl } from \"./FocusFirstControl\"\nimport { OperatorSelect } from \"./OperatorSelect\"\nimport { usePendingFilters } from \"./PendingFilterContext\"\n\n/** A promoted filter the host may not have applied yet. */\ntype Promotion = { filter: ActiveFilter; index: number; key?: string }\n\nexport function ActiveFilters({\n activeFilters,\n hasFilters,\n onActiveFiltersChange,\n onClear = () => onActiveFiltersChange([]),\n}: {\n activeFilters: ActiveFilter[]\n /** Whether the filter schema has loaded. */\n hasFilters: boolean\n onActiveFiltersChange: (activeFilters: ActiveFilter[]) => void\n /** Called by the Clear button. Defaults to `onActiveFiltersChange([])`. */\n onClear?: () => void\n}) {\n const { pendingFilters, removePendingFilter, updatePendingFilter } =\n usePendingFilters()\n const restoreFilterFocus = useRestoreFilterFocus()\n const { clearFilterOpenRequest, filterOpenRequest } = useFilterOpenRequest()\n const [promotions, setPromotions] = useState<Promotion[]>([])\n\n // Keep each pending chip, and its open popover, mounted until the host\n // applies its promotion.\n const confirmed = useMemo(\n () =>\n promotions.flatMap((promotion) => {\n const promotedFilter = activeFilters[promotion.index]\n const pendingCopy =\n promotedFilter &&\n pendingFilters.find(\n (filter) => getFilterKey(filter) === promotion.key\n )\n if (!pendingCopy) return []\n keepFilterKey(pendingCopy, promotedFilter)\n return [{ pendingCopy, promotion }]\n }),\n [activeFilters, pendingFilters, promotions]\n )\n const pendingCopies = confirmed.map(({ pendingCopy }) => pendingCopy)\n\n useLayoutEffect(() => {\n if (confirmed.length === 0) return\n confirmed.forEach(({ pendingCopy }) => removePendingFilter(pendingCopy))\n const done = confirmed.map(({ promotion }) => promotion)\n setPromotions((prev) => prev.filter((p) => !done.includes(p)))\n }, [confirmed, removePendingFilter])\n\n // Hosts apply updates in order, so build each one on top of promotions they\n // haven't applied yet. A list without an entry supersedes one that had it.\n const inFlight = promotions.filter((p) => p.index >= activeFilters.length)\n const optimisticFilters = [...activeFilters, ...inFlight.map((p) => p.filter)]\n\n function sendWithout(index: number) {\n setPromotions((prev) =>\n prev\n .filter((p) => p.index !== index)\n .map((p) => (p.index > index ? { ...p, index: p.index - 1 } : p))\n )\n onActiveFiltersChange(optimisticFilters.filter((_, i) => i !== index))\n }\n\n function retractPromotion(filter: ActiveFilter) {\n const promotion = inFlight.find((p) => p.key === getFilterKey(filter))\n if (promotion) sendWithout(promotion.index)\n }\n\n function promote(filter: ActiveFilter, promoted: ActiveFilter) {\n const key = getFilterKey(filter)\n const existing = inFlight.find((p) => p.key === key)\n const index = existing?.index ?? optimisticFilters.length\n const next = [...optimisticFilters]\n next[index] = promoted\n setPromotions((prev) =>\n existing\n ? prev.map((p) => (p.key === key ? { ...p, filter: promoted } : p))\n : [...prev, { filter: promoted, index, key }]\n )\n onActiveFiltersChange(next)\n }\n\n // Hosts may return rebuilt, keyless filters (e.g. a JSON round trip). An\n // unchanged length means an edit, so carry keys over by position.\n const previousActiveFilters = useRef(activeFilters)\n if (activeFilters.length === previousActiveFilters.current.length) {\n activeFilters.forEach((filter, index) => {\n if (!getFilterKey(filter)) {\n keepFilterKey(previousActiveFilters.current[index], filter)\n }\n })\n }\n useLayoutEffect(() => {\n previousActiveFilters.current = activeFilters\n })\n\n // One list: React matches keys only within a list, so separate lists would\n // remount a promoted chip despite its stable key.\n const entries = inCreationOrder([\n ...activeFilters.map((filter, index) => ({\n filter,\n index,\n pending: false as const,\n })),\n ...pendingFilters\n .filter((filter) => !pendingCopies.includes(filter))\n .map((filter, index) => ({\n filter,\n index,\n pending: true as const,\n })),\n ])\n\n // Several chips can answer one request, but only one may act on it. A\n // request without a scope takes the first chip carrying the filter name.\n const openRequestSlot = filterOpenRequest\n ? entries.findIndex(\n ({ filter }) =>\n filter.name === filterOpenRequest.name &&\n (filterOpenRequest.scope === undefined ||\n filter.scope === filterOpenRequest.scope)\n )\n : -1\n\n return (\n <div className=\"tds-data-table-filters-active\">\n <div className=\"tds-data-table-filters-active-list\">\n {entries.map(({ filter, index, pending }, slot) => (\n <ActiveFilter\n key={\n getFilterKey(filter) ??\n `${pending ? \"pending\" : \"active\"}-${index}`\n }\n activeFilter={filter}\n onOpened={clearFilterOpenRequest}\n pending={pending}\n shouldOpen={slot === openRequestSlot}\n onChange={(updates, { complete = true } = {}) => {\n if (pending) {\n updatePendingFilter(filter, updates)\n if (complete) promote(filter, { ...filter, ...updates })\n else retractPromotion(filter)\n return\n }\n const next = [...optimisticFilters]\n next[index] = keepFilterKey(filter, { ...filter, ...updates })\n onActiveFiltersChange(next)\n }}\n removeActiveFilter={() => {\n if (pending) {\n removePendingFilter(filter)\n retractPromotion(filter)\n return\n }\n sendWithout(index)\n }}\n />\n ))}\n </div>\n <div className=\"tds-data-table-filters-active-actions\">\n {/* TODO: SavedViewActions, once \"modified\" is defined. */}\n <Button\n aria-label=\"Clear filters\"\n disabled={!hasFilters}\n kind=\"secondary\"\n label=\"Clear\"\n size=\"sm\"\n onClick={() => {\n setPromotions([])\n onClear()\n restoreFilterFocus()\n }}\n />\n </div>\n </div>\n )\n}\n\n// A promoted filter is appended to `activeFilters`, ahead of every pending\n// chip. Sorting keyed chips by creation order keeps it in place, so its open\n// popover stays anchored under it.\nfunction inCreationOrder<T extends { filter: ActiveFilter }>(entries: T[]) {\n const keyedSlots = entries.flatMap((entry, slot) =>\n getFilterSequence(entry.filter) === undefined ? [] : [slot]\n )\n const keyedEntries = keyedSlots\n .map((slot) => entries[slot])\n .sort(\n (a, b) =>\n (getFilterSequence(a.filter) ?? 0) - (getFilterSequence(b.filter) ?? 0)\n )\n const sorted = [...entries]\n keyedSlots.forEach((slot, i) => {\n sorted[slot] = keyedEntries[i]\n })\n return sorted\n}\n\nfunction ActiveFilter({\n activeFilter,\n onChange,\n onOpened,\n removeActiveFilter,\n pending = false,\n shouldOpen = false,\n}: {\n activeFilter: ActiveFilter\n onChange: FilterChange\n /** Called once this chip has acted on `shouldOpen`. */\n onOpened: () => void\n pending?: boolean\n removeActiveFilter: () => void\n /** Whether the add-filter menu asked this chip to open its popover. */\n shouldOpen?: boolean\n}) {\n const { relatedFilter, operator } = useRelatedFilterOperator(activeFilter)\n const activeFilterInstance =\n relatedFilter &&\n operator &&\n relatedFilter.createActiveFilterInstance(activeFilter, operator)\n const [isOpen, setIsOpen] = useRequestedOpen({\n initiallyOpen: pending,\n onOpened,\n shouldOpen,\n })\n\n const autoPromoted = useRef(false)\n useEffect(() => {\n if (\n !pending ||\n !activeFilterInstance?.isCompleteWithoutInput ||\n autoPromoted.current\n )\n return\n autoPromoted.current = true\n onChange({}, { complete: true })\n })\n\n if (!relatedFilter || !operator || !activeFilterInstance)\n return (\n <FilterChip\n label=\"Unrecognized filter\"\n onRemove={removeActiveFilter}\n status=\"invalid\"\n >\n <FilterChipSegments segments={[\"Unrecognized filter\"]} />\n </FilterChip>\n )\n\n const editor = activeFilterInstance.renderEditor(onChange)\n const segments = activeFilterInstance.toSegments()\n\n const isEditable = relatedFilter.operators.length > 1 || editor != null\n\n return (\n <FilterChip\n label={`${relatedFilter.label} filter${pending ? \" (pending)\" : \"\"}`}\n onRemove={removeActiveFilter}\n status={pending ? \"inactive\" : undefined}\n >\n {!isEditable ? (\n <FilterChipStaticSegments segments={segments} />\n ) : (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger>\n <FilterChipSegments segments={segments} />\n </PopoverTrigger>\n <PopoverContent\n className=\"tds-popover--data-table-filters-popover\"\n modal={false}\n >\n <h2 className=\"tds-data-table-filters-popover-label\">\n {relatedFilter.label}\n {relatedFilter.operators.length === 1 && (\n <span className=\"tds-data-table-filters-popover-label-operator\">\n {\" \"}\n {operator.label}\n </span>\n )}\n </h2>\n {relatedFilter.description && (\n <p className=\"tds-data-table-filters-popover-description\">\n {relatedFilter.description}\n </p>\n )}\n <OperatorSelect\n operator={operator}\n relatedFilter={relatedFilter}\n updateActiveFilter={(updates) =>\n onChange(updates, {\n complete: relatedFilter.createActiveFilterInstance(\n { ...activeFilter, ...updates },\n relatedFilter.operators.find(\n ({ name }) => name === updates.operator\n ) ?? operator\n ).isCompleteWithoutInput,\n })\n }\n />\n {editor}\n <FocusFirstControl />\n </PopoverContent>\n </Popover>\n )}\n </FilterChip>\n )\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"ActiveFilters.js","sources":["../../../src/components/DataTable/ActiveFilters.tsx"],"sourcesContent":["import { Button } from \"@components/button\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"@components/popover/Popover\"\nimport React, {\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\"\n\nimport {\n FilterChip,\n FilterChipSegments,\n FilterChipStaticSegments,\n} from \"./FilterChip\"\nimport {\n useRelatedFilterOperator,\n useRestoreFilterFocus,\n} from \"./FilterContext\"\nimport { getFilterKey, getFilterSequence, keepFilterKey } from \"./filterKeys\"\nimport { useFilterOpenRequest, useRequestedOpen } from \"./FilterOpenRequest\"\nimport type { ActiveFilter, FilterChange } from \"./FilterTypes\"\nimport { FocusFirstControl } from \"./FocusFirstControl\"\nimport { OperatorSelect } from \"./OperatorSelect\"\nimport { usePendingFilters } from \"./PendingFilterContext\"\nimport { SavedViewActions } from \"./SavedViewActions\"\nimport { type SavedView, savedViewDuplicate } from \"./savedViews\"\nimport { NEW_VIEW, type useSaveStatus } from \"./useSaveStatus\"\n\n/** A promoted filter the host may not have applied yet. */\ntype Promotion = { filter: ActiveFilter; index: number; key?: string }\n\nexport function ActiveFilters({\n activeFilters,\n activeSavedView,\n currentState,\n hasFilters,\n onActiveFiltersChange,\n onClear = () => onActiveFiltersChange([]),\n onSavedViewApply,\n onSavedViewCreate,\n onSavedViewUpdate,\n saveStatus,\n selectSavedViewWhenSaved,\n}: {\n activeFilters: ActiveFilter[]\n /**\n * The selected view, while it has changes. Shows the actions to update the\n * view, save the changes as a new one, or discard them.\n */\n activeSavedView?: SavedView\n /** What Update view and Save as new view save. */\n currentState?: Omit<SavedView, \"id\" | \"name\">\n /** Whether the filter schema has loaded. */\n hasFilters: boolean\n onActiveFiltersChange: (activeFilters: ActiveFilter[]) => void\n /** Called by the Clear button. Defaults to `onActiveFiltersChange([])`. */\n onClear?: () => void\n /** Discard changes applies the view again. */\n onSavedViewApply?: (savedView: SavedView) => void\n /** Omit to leave out Save as new view. */\n onSavedViewCreate?: (\n savedView: Omit<SavedView, \"id\">\n ) => Promise<SavedView> | SavedView\n /** Omit to disable Update view. */\n onSavedViewUpdate?: (savedView: SavedView) => Promise<SavedView> | SavedView\n /**\n * Tracks Update view and Save as new view saves, so their status shows in\n * the saved views bar.\n */\n saveStatus?: ReturnType<typeof useSaveStatus>\n /** Selects a view made with Save as new view once it's saved. */\n selectSavedViewWhenSaved?: (\n savedView: Promise<SavedView | undefined> | SavedView\n ) => Promise<SavedView | undefined>\n}) {\n const { pendingFilters, removePendingFilter, updatePendingFilter } =\n usePendingFilters()\n const restoreFilterFocus = useRestoreFilterFocus()\n const { clearFilterOpenRequest, filterOpenRequest } = useFilterOpenRequest()\n const [promotions, setPromotions] = useState<Promotion[]>([])\n const clearButtonRef = useRef<HTMLButtonElement>(null)\n // Includes a menu or modal the actions opened, since React events reach\n // here through their portals.\n const hasActionsFocus = useRef(false)\n // The selected view with its changes, which Update view saves over it and\n // Save as new view saves as a copy.\n const modifiedView = activeSavedView &&\n currentState && { ...activeSavedView, ...currentState }\n const savedViewActions = activeSavedView &&\n modifiedView &&\n onSavedViewApply &&\n saveStatus && {\n onDiscard: () => onSavedViewApply(activeSavedView),\n onSaveAsNew:\n onSavedViewCreate &&\n selectSavedViewWhenSaved &&\n ((name: string) =>\n saveStatus.track(\n NEW_VIEW,\n selectSavedViewWhenSaved(\n onSavedViewCreate(savedViewDuplicate(modifiedView, name))\n ),\n name\n )),\n onUpdate:\n onSavedViewUpdate &&\n (() =>\n saveStatus.track(\n modifiedView.id,\n onSavedViewUpdate(modifiedView),\n modifiedView.name\n )),\n savedViewName: activeSavedView.name,\n }\n const hasSavedViewActions = Boolean(savedViewActions)\n\n // Saving or discarding removes the actions, so focus moves to Clear\n // instead of being lost.\n useLayoutEffect(() => {\n if (hasSavedViewActions || !hasActionsFocus.current) return\n hasActionsFocus.current = false\n clearButtonRef.current?.focus()\n }, [hasSavedViewActions])\n\n // Discarding changes to a view without filters empties the shelf, which\n // removes Clear too, so focus moves to Add filter. It waits for the open\n // menu to unmount, since the menu keeps focus inside it until then.\n useLayoutEffect(\n () => () => {\n if (hasActionsFocus.current) queueMicrotask(restoreFilterFocus)\n },\n [restoreFilterFocus]\n )\n\n // Keep each pending chip, and its open popover, mounted until the host\n // applies its promotion.\n const confirmed = useMemo(\n () =>\n promotions.flatMap((promotion) => {\n const promotedFilter = activeFilters[promotion.index]\n const pendingCopy =\n promotedFilter &&\n pendingFilters.find(\n (filter) => getFilterKey(filter) === promotion.key\n )\n if (!pendingCopy) return []\n keepFilterKey(pendingCopy, promotedFilter)\n return [{ pendingCopy, promotion }]\n }),\n [activeFilters, pendingFilters, promotions]\n )\n const pendingCopies = confirmed.map(({ pendingCopy }) => pendingCopy)\n\n useLayoutEffect(() => {\n if (confirmed.length === 0) return\n confirmed.forEach(({ pendingCopy }) => removePendingFilter(pendingCopy))\n const done = confirmed.map(({ promotion }) => promotion)\n setPromotions((prev) => prev.filter((p) => !done.includes(p)))\n }, [confirmed, removePendingFilter])\n\n // Hosts apply updates in order, so build each one on top of promotions they\n // haven't applied yet. A list without an entry supersedes one that had it.\n const inFlight = promotions.filter((p) => p.index >= activeFilters.length)\n const optimisticFilters = [...activeFilters, ...inFlight.map((p) => p.filter)]\n\n function sendWithout(index: number) {\n setPromotions((prev) =>\n prev\n .filter((p) => p.index !== index)\n .map((p) => (p.index > index ? { ...p, index: p.index - 1 } : p))\n )\n onActiveFiltersChange(optimisticFilters.filter((_, i) => i !== index))\n }\n\n function retractPromotion(filter: ActiveFilter) {\n const promotion = inFlight.find((p) => p.key === getFilterKey(filter))\n if (promotion) sendWithout(promotion.index)\n }\n\n function promote(filter: ActiveFilter, promoted: ActiveFilter) {\n const key = getFilterKey(filter)\n const existing = inFlight.find((p) => p.key === key)\n const index = existing?.index ?? optimisticFilters.length\n const next = [...optimisticFilters]\n next[index] = promoted\n setPromotions((prev) =>\n existing\n ? prev.map((p) => (p.key === key ? { ...p, filter: promoted } : p))\n : [...prev, { filter: promoted, index, key }]\n )\n onActiveFiltersChange(next)\n }\n\n // Hosts may return rebuilt, keyless filters (e.g. a JSON round trip). An\n // unchanged length means an edit, so carry keys over by position.\n const previousActiveFilters = useRef(activeFilters)\n if (activeFilters.length === previousActiveFilters.current.length) {\n activeFilters.forEach((filter, index) => {\n if (!getFilterKey(filter)) {\n keepFilterKey(previousActiveFilters.current[index], filter)\n }\n })\n }\n useLayoutEffect(() => {\n previousActiveFilters.current = activeFilters\n })\n\n // One list: React matches keys only within a list, so separate lists would\n // remount a promoted chip despite its stable key.\n const entries = inCreationOrder([\n ...activeFilters.map((filter, index) => ({\n filter,\n index,\n pending: false as const,\n })),\n ...pendingFilters\n .filter((filter) => !pendingCopies.includes(filter))\n .map((filter, index) => ({\n filter,\n index,\n pending: true as const,\n })),\n ])\n\n // Several chips can answer one request, but only one may act on it. A\n // request without a scope takes the first chip carrying the filter name.\n const openRequestSlot = filterOpenRequest\n ? entries.findIndex(\n ({ filter }) =>\n filter.name === filterOpenRequest.name &&\n (filterOpenRequest.scope === undefined ||\n filter.scope === filterOpenRequest.scope)\n )\n : -1\n\n return (\n <div className=\"tds-data-table-filters-active\">\n <div className=\"tds-data-table-filters-active-list\">\n {entries.map(({ filter, index, pending }, slot) => (\n <ActiveFilter\n key={\n getFilterKey(filter) ??\n `${pending ? \"pending\" : \"active\"}-${index}`\n }\n activeFilter={filter}\n onOpened={clearFilterOpenRequest}\n pending={pending}\n shouldOpen={slot === openRequestSlot}\n onChange={(updates, { complete = true } = {}) => {\n if (pending) {\n updatePendingFilter(filter, updates)\n if (complete) promote(filter, { ...filter, ...updates })\n else retractPromotion(filter)\n return\n }\n const next = [...optimisticFilters]\n next[index] = keepFilterKey(filter, { ...filter, ...updates })\n onActiveFiltersChange(next)\n }}\n removeActiveFilter={() => {\n if (pending) {\n removePendingFilter(filter)\n retractPromotion(filter)\n return\n }\n sendWithout(index)\n }}\n />\n ))}\n </div>\n <div\n className=\"tds-data-table-filters-active-actions\"\n onBlur={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget))\n hasActionsFocus.current = false\n }}\n onFocus={() => {\n hasActionsFocus.current = true\n }}\n >\n {savedViewActions && <SavedViewActions {...savedViewActions} />}\n <Button\n ref={clearButtonRef}\n aria-label=\"Clear filters\"\n disabled={!hasFilters}\n kind=\"secondary\"\n label=\"Clear\"\n size=\"sm\"\n onClick={() => {\n setPromotions([])\n onClear()\n restoreFilterFocus()\n }}\n />\n </div>\n </div>\n )\n}\n\n// A promoted filter is appended to `activeFilters`, ahead of every pending\n// chip. Sorting keyed chips by creation order keeps it in place, so its open\n// popover stays anchored under it.\nfunction inCreationOrder<T extends { filter: ActiveFilter }>(entries: T[]) {\n const keyedSlots = entries.flatMap((entry, slot) =>\n getFilterSequence(entry.filter) === undefined ? [] : [slot]\n )\n const keyedEntries = keyedSlots\n .map((slot) => entries[slot])\n .sort(\n (a, b) =>\n (getFilterSequence(a.filter) ?? 0) - (getFilterSequence(b.filter) ?? 0)\n )\n const sorted = [...entries]\n keyedSlots.forEach((slot, i) => {\n sorted[slot] = keyedEntries[i]\n })\n return sorted\n}\n\nfunction ActiveFilter({\n activeFilter,\n onChange,\n onOpened,\n removeActiveFilter,\n pending = false,\n shouldOpen = false,\n}: {\n activeFilter: ActiveFilter\n onChange: FilterChange\n /** Called once this chip has acted on `shouldOpen`. */\n onOpened: () => void\n pending?: boolean\n removeActiveFilter: () => void\n /** Whether the add-filter menu asked this chip to open its popover. */\n shouldOpen?: boolean\n}) {\n const { relatedFilter, operator } = useRelatedFilterOperator(activeFilter)\n const activeFilterInstance =\n relatedFilter &&\n operator &&\n relatedFilter.createActiveFilterInstance(activeFilter, operator)\n const [isOpen, setIsOpen] = useRequestedOpen({\n initiallyOpen: pending,\n onOpened,\n shouldOpen,\n })\n\n const autoPromoted = useRef(false)\n useEffect(() => {\n if (\n !pending ||\n !activeFilterInstance?.isCompleteWithoutInput ||\n autoPromoted.current\n )\n return\n autoPromoted.current = true\n onChange({}, { complete: true })\n })\n\n if (!relatedFilter || !operator || !activeFilterInstance)\n return (\n <FilterChip\n label=\"Unrecognized filter\"\n onRemove={removeActiveFilter}\n status=\"invalid\"\n >\n <FilterChipSegments segments={[\"Unrecognized filter\"]} />\n </FilterChip>\n )\n\n const editor = activeFilterInstance.renderEditor(onChange)\n const segments = activeFilterInstance.toSegments()\n\n const isEditable = relatedFilter.operators.length > 1 || editor != null\n\n return (\n <FilterChip\n label={`${relatedFilter.label} filter${pending ? \" (pending)\" : \"\"}`}\n onRemove={removeActiveFilter}\n status={pending ? \"inactive\" : undefined}\n >\n {!isEditable ? (\n <FilterChipStaticSegments segments={segments} />\n ) : (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger>\n <FilterChipSegments segments={segments} />\n </PopoverTrigger>\n <PopoverContent\n className=\"tds-popover--data-table-filters-popover\"\n modal={false}\n >\n <h2 className=\"tds-data-table-filters-popover-label\">\n {relatedFilter.label}\n {relatedFilter.operators.length === 1 && (\n <span className=\"tds-data-table-filters-popover-label-operator\">\n {\" \"}\n {operator.label}\n </span>\n )}\n </h2>\n {relatedFilter.description && (\n <p className=\"tds-data-table-filters-popover-description\">\n {relatedFilter.description}\n </p>\n )}\n <OperatorSelect\n operator={operator}\n relatedFilter={relatedFilter}\n updateActiveFilter={(updates) =>\n onChange(updates, {\n complete: relatedFilter.createActiveFilterInstance(\n { ...activeFilter, ...updates },\n relatedFilter.operators.find(\n ({ name }) => name === updates.operator\n ) ?? operator\n ).isCompleteWithoutInput,\n })\n }\n />\n {editor}\n <FocusFirstControl />\n </PopoverContent>\n </Popover>\n )}\n </FilterChip>\n )\n}\n"],"names":["React"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CollectionEditorsLazy.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/CollectionEditorsLazy.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAgD,MAAM,OAAO,CAAA;AAGpE,OAAO,KAAK,EACV,2BAA2B,EAG5B,MAAM,2BAA2B,CAAA;AAuBlC,wBAAgB,0BAA0B,CAAC,EACzC,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,GACN,EAAE,2BAA2B,qBA6C7B;AAyFD,wBAAgB,OAAO,sBAOtB;AAED,wBAAgB,SAAS,sBAMxB"}
1
+ {"version":3,"file":"CollectionEditorsLazy.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/CollectionEditorsLazy.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAgD,MAAM,OAAO,CAAA;AAGpE,OAAO,KAAK,EACV,2BAA2B,EAG5B,MAAM,2BAA2B,CAAA;AAuBlC,wBAAgB,0BAA0B,CAAC,EACzC,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,GACN,EAAE,2BAA2B,qBA6C7B;AA6FD,wBAAgB,OAAO,sBAQtB;AAED,wBAAgB,SAAS,sBAMxB"}
@@ -1,5 +1,6 @@
1
1
  import { ComboBoxItem } from '../combo-box/ComboBox.js';
2
2
  import LoadingSpinner from '../internal/LoadingSpinner.js';
3
+ import { LoadingAnnouncement, SuppressLoadingAnnouncementContext } from '../internal/LoadingAnnouncement.js';
3
4
  import '../internal/tooltip/Tooltip.js';
4
5
  import { useDebouncedValue } from '../../utilities/useDebouncedValue.js';
5
6
  import React__default, { useCallback, useState, useEffect } from 'react';
@@ -66,25 +67,27 @@ function CollectionEditorComboboxLazy({ error, onCommit, options, query, loading
66
67
  setLoadingState("idle");
67
68
  }
68
69
  }, [loading]);
69
- return (React__default.createElement(CollectionEditorCombobox, { ...props, loadingState: error ? "error" : loadingState, inputValue: query, onInputChange: (q) => {
70
- setLoadingState("filtering");
71
- setQuery(q);
72
- }, onChange: (value) => {
73
- if (value === null)
74
- return;
75
- const resolvedValue = Array.isArray(value)
76
- ? value.map(String)
77
- : String(value);
78
- onCommit(resolvedValue);
79
- }, items: options, renderEmptyState: error ? React__default.createElement(LoadError, null) : "No results" }, (o) => {
80
- const option = o;
81
- return (React__default.createElement(ComboBoxItem, { key: option.value, id: option.value }, option.label));
82
- }));
70
+ return (React__default.createElement(SuppressLoadingAnnouncementContext.Provider, { value: loadingState === "loading" },
71
+ React__default.createElement(CollectionEditorCombobox, { ...props, loadingState: error ? "error" : loadingState, inputValue: query, onInputChange: (q) => {
72
+ setLoadingState("filtering");
73
+ setQuery(q);
74
+ }, onChange: (value) => {
75
+ if (value === null)
76
+ return;
77
+ const resolvedValue = Array.isArray(value)
78
+ ? value.map(String)
79
+ : String(value);
80
+ onCommit(resolvedValue);
81
+ }, items: options, renderEmptyState: error ? React__default.createElement(LoadError, null) : "No results" }, (o) => {
82
+ const option = o;
83
+ return (React__default.createElement(ComboBoxItem, { key: option.value, id: option.value }, option.label));
84
+ })));
83
85
  }
84
86
  function Loading() {
85
- return (React__default.createElement("div", { className: styles["loading"], role: "status" },
87
+ return (React__default.createElement("div", { className: styles["loading"] },
86
88
  React__default.createElement("span", null, "Loading..."),
87
- React__default.createElement(LoadingSpinner, null)));
89
+ React__default.createElement(LoadingSpinner, null),
90
+ React__default.createElement(LoadingAnnouncement, { message: "Loading" })));
88
91
  }
89
92
  function LoadError() {
90
93
  return (React__default.createElement("div", { className: styles["load-error"], role: "alert" }, "Error: Failed to load options"));
@@ -1 +1 @@
1
- {"version":3,"file":"CollectionEditorsLazy.js","sources":["../../../src/components/DataTable/CollectionEditorsLazy.tsx"],"sourcesContent":["import { ComboBoxItem } from \"@components/combo-box\"\nimport { LoadingSpinner } from \"@components/internal\"\nimport { useDebouncedValue } from \"@utilities/useDebouncedValue\"\nimport React, { Key, useCallback, useEffect, useState } from \"react\"\n\nimport styles from \"./CollectionEditorsLazy.module.css\"\nimport type {\n CollectionFilterEditorProps,\n CollectionFilterValue,\n CollectionOptionsLazy,\n} from \"./CollectionEditorsShared\"\nimport { CollectionEditorCombobox } from \"./CollectionEditorsShared\"\nimport {\n CollectionEditorCheckboxes,\n CollectionEditorRadios,\n CollectionEditorSelect,\n CollectionEditorStaticProps,\n} from \"./CollectionEditorsStatic\"\nimport type { CollectionDisplay, CollectionOption } from \"./collectionFilter\"\nimport type { ActiveFilterLabel } from \"./FilterTypes\"\nimport { useFocusFirstControlAfterLoad } from \"./FocusFirstControl\"\nimport { useLazyOptions } from \"./useLazyOptions\"\nimport { isEmptyValue } from \"./utils\"\n\ntype CollectionEditorLazyProps = CollectionEditorStaticProps & {\n error: unknown\n loading: boolean\n query: string | undefined\n setQuery: (query: string | undefined) => void\n}\n\nconst DEBOUNCE_MS = 300\n\nexport function CollectionFilterEditorLazy({\n config,\n onChange,\n operator,\n value,\n filter,\n label,\n scope,\n}: CollectionFilterEditorProps) {\n const { display, multiple } = config\n const loadOptions = config.options as CollectionOptionsLazy\n const options = useCallback(\n (query?: string) => loadOptions(query, scope),\n [loadOptions, scope]\n )\n const [query, setQuery] = useState<string | undefined>()\n const debouncedQuery = useDebouncedValue(query, DEBOUNCE_MS)\n const {\n error,\n loading,\n options: resolvedOptions,\n } = useLazyOptions(options, debouncedQuery)\n useFocusFirstControlAfterLoad(loading)\n const onCommit = useCallback(\n (newValue: CollectionFilterValue) => {\n const newLabel = findLabelFromOptions(resolvedOptions, newValue, {\n label,\n value,\n })\n return onChange(\n { label: newLabel, value: newValue },\n { complete: !isEmptyValue(newValue) }\n )\n },\n [resolvedOptions, onChange, value, label]\n )\n const Editor = getLazyEditor(display)\n\n return (\n <Editor\n error={error}\n loading={loading}\n query={query}\n setQuery={setQuery}\n value={value}\n onCommit={onCommit}\n options={resolvedOptions}\n multiple={multiple}\n operator={operator}\n filterLabel={filter.label}\n filterName={filter.name}\n />\n )\n}\n\nfunction getLazyEditor(display: CollectionDisplay) {\n if (display === \"combobox\") return CollectionEditorComboboxLazy\n if (display === \"checkboxes\") return CollectionEditorCheckboxesLazy\n if (display === \"radios\") return CollectionEditorRadiosLazy\n return CollectionEditorSelectLazy\n}\n\nfunction CollectionEditorCheckboxesLazy({\n error,\n loading,\n ...props\n}: CollectionEditorLazyProps) {\n if (loading) return <Loading />\n if (error) return <LoadError />\n return <CollectionEditorCheckboxes {...props} />\n}\n\nfunction CollectionEditorRadiosLazy({\n error,\n loading,\n ...props\n}: CollectionEditorLazyProps) {\n if (loading) return <Loading />\n if (error) return <LoadError />\n return <CollectionEditorRadios {...props} />\n}\n\nfunction CollectionEditorSelectLazy({\n error,\n loading,\n ...props\n}: CollectionEditorLazyProps) {\n if (loading) return <Loading />\n if (error) return <LoadError />\n return <CollectionEditorSelect {...props} />\n}\n\nfunction CollectionEditorComboboxLazy({\n error,\n onCommit,\n options,\n query,\n loading,\n setQuery,\n ...props\n}: CollectionEditorLazyProps) {\n const [loadingState, setLoadingState] = useState<\n \"loading\" | \"filtering\" | \"idle\"\n >(loading ? \"loading\" : \"idle\")\n useEffect(() => {\n if (!loading) {\n setLoadingState(\"idle\")\n }\n }, [loading])\n\n return (\n <CollectionEditorCombobox\n {...props}\n loadingState={error ? \"error\" : loadingState}\n inputValue={query}\n onInputChange={(q: string) => {\n setLoadingState(\"filtering\")\n setQuery(q)\n }}\n onChange={(value: Key | Key[] | null) => {\n if (value === null) return\n\n const resolvedValue = Array.isArray(value)\n ? value.map(String)\n : String(value)\n onCommit(resolvedValue)\n }}\n items={options}\n renderEmptyState={error ? <LoadError /> : \"No results\"}\n >\n {(o) => {\n const option = o as CollectionOption\n return (\n <ComboBoxItem key={option.value} id={option.value}>\n {option.label}\n </ComboBoxItem>\n )\n }}\n </CollectionEditorCombobox>\n )\n}\n\nexport function Loading() {\n return (\n <div className={styles[\"loading\"]} role=\"status\">\n <span>Loading...</span>\n <LoadingSpinner />\n </div>\n )\n}\n\nexport function LoadError() {\n return (\n <div className={styles[\"load-error\"]} role=\"alert\">\n Error: Failed to load options\n </div>\n )\n}\n\nfunction findLabelFromOptions(\n options: CollectionOption[],\n value: CollectionFilterValue,\n previous: { label?: ActiveFilterLabel; value: CollectionFilterValue }\n) {\n const previousLabelByValue = buildPreviousLabelByValue(previous)\n const labelFor = (v: string) =>\n options.find((option) => option.value === v)?.label ??\n previousLabelByValue.get(v)\n\n return Array.isArray(value)\n ? value.map(labelFor).filter((label) => label !== undefined)\n : labelFor(value)\n}\n\nfunction buildPreviousLabelByValue(previous: {\n label?: ActiveFilterLabel\n value: CollectionFilterValue\n}): Map<string, string | undefined> {\n const previousValues = normalizeValueToArray(previous.value)\n const previousLabels = normalizeValueToArray(previous.label)\n return new Map(previousValues.map((v, index) => [v, previousLabels[index]]))\n}\n\nfunction normalizeValueToArray(value: string | string[] | undefined): string[] {\n if (value === undefined) return []\n return Array.isArray(value) ? value : [value]\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"CollectionEditorsLazy.js","sources":["../../../src/components/DataTable/CollectionEditorsLazy.tsx"],"sourcesContent":["import { ComboBoxItem } from \"@components/combo-box\"\nimport {\n LoadingAnnouncement,\n LoadingSpinner,\n SuppressLoadingAnnouncementContext,\n} from \"@components/internal\"\nimport { useDebouncedValue } from \"@utilities/useDebouncedValue\"\nimport React, { Key, useCallback, useEffect, useState } from \"react\"\n\nimport styles from \"./CollectionEditorsLazy.module.css\"\nimport type {\n CollectionFilterEditorProps,\n CollectionFilterValue,\n CollectionOptionsLazy,\n} from \"./CollectionEditorsShared\"\nimport { CollectionEditorCombobox } from \"./CollectionEditorsShared\"\nimport {\n CollectionEditorCheckboxes,\n CollectionEditorRadios,\n CollectionEditorSelect,\n CollectionEditorStaticProps,\n} from \"./CollectionEditorsStatic\"\nimport type { CollectionDisplay, CollectionOption } from \"./collectionFilter\"\nimport type { ActiveFilterLabel } from \"./FilterTypes\"\nimport { useFocusFirstControlAfterLoad } from \"./FocusFirstControl\"\nimport { useLazyOptions } from \"./useLazyOptions\"\nimport { isEmptyValue } from \"./utils\"\n\ntype CollectionEditorLazyProps = CollectionEditorStaticProps & {\n error: unknown\n loading: boolean\n query: string | undefined\n setQuery: (query: string | undefined) => void\n}\n\nconst DEBOUNCE_MS = 300\n\nexport function CollectionFilterEditorLazy({\n config,\n onChange,\n operator,\n value,\n filter,\n label,\n scope,\n}: CollectionFilterEditorProps) {\n const { display, multiple } = config\n const loadOptions = config.options as CollectionOptionsLazy\n const options = useCallback(\n (query?: string) => loadOptions(query, scope),\n [loadOptions, scope]\n )\n const [query, setQuery] = useState<string | undefined>()\n const debouncedQuery = useDebouncedValue(query, DEBOUNCE_MS)\n const {\n error,\n loading,\n options: resolvedOptions,\n } = useLazyOptions(options, debouncedQuery)\n useFocusFirstControlAfterLoad(loading)\n const onCommit = useCallback(\n (newValue: CollectionFilterValue) => {\n const newLabel = findLabelFromOptions(resolvedOptions, newValue, {\n label,\n value,\n })\n return onChange(\n { label: newLabel, value: newValue },\n { complete: !isEmptyValue(newValue) }\n )\n },\n [resolvedOptions, onChange, value, label]\n )\n const Editor = getLazyEditor(display)\n\n return (\n <Editor\n error={error}\n loading={loading}\n query={query}\n setQuery={setQuery}\n value={value}\n onCommit={onCommit}\n options={resolvedOptions}\n multiple={multiple}\n operator={operator}\n filterLabel={filter.label}\n filterName={filter.name}\n />\n )\n}\n\nfunction getLazyEditor(display: CollectionDisplay) {\n if (display === \"combobox\") return CollectionEditorComboboxLazy\n if (display === \"checkboxes\") return CollectionEditorCheckboxesLazy\n if (display === \"radios\") return CollectionEditorRadiosLazy\n return CollectionEditorSelectLazy\n}\n\nfunction CollectionEditorCheckboxesLazy({\n error,\n loading,\n ...props\n}: CollectionEditorLazyProps) {\n if (loading) return <Loading />\n if (error) return <LoadError />\n return <CollectionEditorCheckboxes {...props} />\n}\n\nfunction CollectionEditorRadiosLazy({\n error,\n loading,\n ...props\n}: CollectionEditorLazyProps) {\n if (loading) return <Loading />\n if (error) return <LoadError />\n return <CollectionEditorRadios {...props} />\n}\n\nfunction CollectionEditorSelectLazy({\n error,\n loading,\n ...props\n}: CollectionEditorLazyProps) {\n if (loading) return <Loading />\n if (error) return <LoadError />\n return <CollectionEditorSelect {...props} />\n}\n\nfunction CollectionEditorComboboxLazy({\n error,\n onCommit,\n options,\n query,\n loading,\n setQuery,\n ...props\n}: CollectionEditorLazyProps) {\n const [loadingState, setLoadingState] = useState<\n \"loading\" | \"filtering\" | \"idle\"\n >(loading ? \"loading\" : \"idle\")\n useEffect(() => {\n if (!loading) {\n setLoadingState(\"idle\")\n }\n }, [loading])\n\n return (\n <SuppressLoadingAnnouncementContext.Provider\n value={loadingState === \"loading\"}\n >\n <CollectionEditorCombobox\n {...props}\n loadingState={error ? \"error\" : loadingState}\n inputValue={query}\n onInputChange={(q: string) => {\n setLoadingState(\"filtering\")\n setQuery(q)\n }}\n onChange={(value: Key | Key[] | null) => {\n if (value === null) return\n\n const resolvedValue = Array.isArray(value)\n ? value.map(String)\n : String(value)\n onCommit(resolvedValue)\n }}\n items={options}\n renderEmptyState={error ? <LoadError /> : \"No results\"}\n >\n {(o) => {\n const option = o as CollectionOption\n return (\n <ComboBoxItem key={option.value} id={option.value}>\n {option.label}\n </ComboBoxItem>\n )\n }}\n </CollectionEditorCombobox>\n </SuppressLoadingAnnouncementContext.Provider>\n )\n}\n\nexport function Loading() {\n return (\n <div className={styles[\"loading\"]}>\n <span>Loading...</span>\n <LoadingSpinner />\n <LoadingAnnouncement message=\"Loading\" />\n </div>\n )\n}\n\nexport function LoadError() {\n return (\n <div className={styles[\"load-error\"]} role=\"alert\">\n Error: Failed to load options\n </div>\n )\n}\n\nfunction findLabelFromOptions(\n options: CollectionOption[],\n value: CollectionFilterValue,\n previous: { label?: ActiveFilterLabel; value: CollectionFilterValue }\n) {\n const previousLabelByValue = buildPreviousLabelByValue(previous)\n const labelFor = (v: string) =>\n options.find((option) => option.value === v)?.label ??\n previousLabelByValue.get(v)\n\n return Array.isArray(value)\n ? value.map(labelFor).filter((label) => label !== undefined)\n : labelFor(value)\n}\n\nfunction buildPreviousLabelByValue(previous: {\n label?: ActiveFilterLabel\n value: CollectionFilterValue\n}): Map<string, string | undefined> {\n const previousValues = normalizeValueToArray(previous.value)\n const previousLabels = normalizeValueToArray(previous.label)\n return new Map(previousValues.map((v, index) => [v, previousLabels[index]]))\n}\n\nfunction normalizeValueToArray(value: string | string[] | undefined): string[] {\n if (value === undefined) return []\n return Array.isArray(value) ? value : [value]\n}\n"],"names":["React"],"mappings":"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"}