@planningcenter/tapestry 4.12.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 (134) 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 +20 -18
  11. package/dist/components/DataTable/CollectionEditorsLazy.js.map +1 -1
  12. package/dist/components/DataTable/DataTable.d.ts +66 -50
  13. package/dist/components/DataTable/DataTable.d.ts.map +1 -1
  14. package/dist/components/DataTable/DataTable.js +78 -17
  15. package/dist/components/DataTable/DataTable.js.map +1 -1
  16. package/dist/components/DataTable/ManageSavedViewsModal.d.ts +18 -7
  17. package/dist/components/DataTable/ManageSavedViewsModal.d.ts.map +1 -1
  18. package/dist/components/DataTable/ManageSavedViewsModal.js +120 -104
  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 +43 -83
  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 +15 -30
  47. package/dist/components/DataTable/savedViews.d.ts.map +1 -1
  48. package/dist/components/DataTable/savedViews.js +51 -98
  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/BaseButton.d.ts +2 -0
  83. package/dist/components/button/BaseButton.d.ts.map +1 -1
  84. package/dist/components/button/BaseButton.js +8 -17
  85. package/dist/components/button/BaseButton.js.map +1 -1
  86. package/dist/components/internal/LoadingAnnouncement.d.ts +6 -0
  87. package/dist/components/internal/LoadingAnnouncement.d.ts.map +1 -1
  88. package/dist/components/internal/LoadingAnnouncement.js +12 -3
  89. package/dist/components/internal/LoadingAnnouncement.js.map +1 -1
  90. package/dist/components/internal/index.d.ts +1 -1
  91. package/dist/components/internal/index.d.ts.map +1 -1
  92. package/dist/components/internal/tooltip/useTooltipTriggerProps.d.ts +13 -0
  93. package/dist/components/internal/tooltip/useTooltipTriggerProps.d.ts.map +1 -0
  94. package/dist/components/internal/tooltip/useTooltipTriggerProps.js +24 -0
  95. package/dist/components/internal/tooltip/useTooltipTriggerProps.js.map +1 -0
  96. package/dist/components/link/BaseLink.d.ts.map +1 -1
  97. package/dist/components/link/BaseLink.js +3 -13
  98. package/dist/components/link/BaseLink.js.map +1 -1
  99. package/dist/components/segmented-control/IconSegment.d.ts +30 -8
  100. package/dist/components/segmented-control/IconSegment.d.ts.map +1 -1
  101. package/dist/components/segmented-control/IconSegment.js +10 -3
  102. package/dist/components/segmented-control/IconSegment.js.map +1 -1
  103. package/dist/components/segmented-control/SegmentBase.d.ts.map +1 -1
  104. package/dist/components/segmented-control/SegmentBase.js +4 -2
  105. package/dist/components/segmented-control/SegmentBase.js.map +1 -1
  106. package/dist/components/segmented-control/SegmentedControl.d.ts.map +1 -1
  107. package/dist/components/segmented-control/SegmentedControl.js +10 -3
  108. package/dist/components/segmented-control/SegmentedControl.js.map +1 -1
  109. package/dist/index.css +20 -5
  110. package/dist/index.css.map +1 -1
  111. package/dist/reactRender.css +1409 -1319
  112. package/dist/reactRender.css.map +1 -1
  113. package/dist/reactRender.js +1 -1
  114. package/dist/reactRenderLegacy.css +1409 -1319
  115. package/dist/reactRenderLegacy.css.map +1 -1
  116. package/dist/reactRenderLegacy.js +1 -1
  117. package/dist/tapestryMount.css +1409 -1319
  118. package/dist/tapestryMount.css.map +1 -1
  119. package/dist/tapestryMount.js +1 -1
  120. package/dist/tapestryMountLegacy.css +1409 -1319
  121. package/dist/tapestryMountLegacy.css.map +1 -1
  122. package/dist/tapestryMountLegacy.js +1 -1
  123. package/dist/tokens-dark.css +2 -2
  124. package/dist/tokens-dark.css.map +1 -1
  125. package/dist/tokens.css +3 -3
  126. package/dist/tokens.css.map +1 -1
  127. package/dist/unstable.css +385 -295
  128. package/dist/unstable.css.map +1 -1
  129. package/dist/unstable.js +1 -0
  130. package/dist/unstable.js.map +1 -1
  131. package/package.json +6 -7
  132. package/dist/components/DataTable/useFilterAnnouncement.d.ts +0 -24
  133. package/dist/components/DataTable/useFilterAnnouncement.d.ts.map +0 -1
  134. package/dist/components/DataTable/useFilterAnnouncement.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,9 +1,9 @@
1
1
  import { ComboBoxItem } from '../combo-box/ComboBox.js';
2
2
  import LoadingSpinner from '../internal/LoadingSpinner.js';
3
- import React__default, { useCallback, useState, useEffect } from 'react';
4
- import 'react-aria/private/live-announcer/LiveAnnouncer';
3
+ import { LoadingAnnouncement, SuppressLoadingAnnouncementContext } from '../internal/LoadingAnnouncement.js';
5
4
  import '../internal/tooltip/Tooltip.js';
6
5
  import { useDebouncedValue } from '../../utilities/useDebouncedValue.js';
6
+ import React__default, { useCallback, useState, useEffect } from 'react';
7
7
  import styles from './CollectionEditorsLazy.module.css.js';
8
8
  import { CollectionEditorCombobox } from './CollectionEditorsShared.js';
9
9
  import { CollectionEditorCheckboxes, CollectionEditorRadios, CollectionEditorSelect } from './CollectionEditorsStatic.js';
@@ -67,25 +67,27 @@ function CollectionEditorComboboxLazy({ error, onCommit, options, query, loading
67
67
  setLoadingState("idle");
68
68
  }
69
69
  }, [loading]);
70
- return (React__default.createElement(CollectionEditorCombobox, { ...props, loadingState: error ? "error" : loadingState, inputValue: query, onInputChange: (q) => {
71
- setLoadingState("filtering");
72
- setQuery(q);
73
- }, onChange: (value) => {
74
- if (value === null)
75
- return;
76
- const resolvedValue = Array.isArray(value)
77
- ? value.map(String)
78
- : String(value);
79
- onCommit(resolvedValue);
80
- }, items: options, renderEmptyState: error ? React__default.createElement(LoadError, null) : "No results" }, (o) => {
81
- const option = o;
82
- return (React__default.createElement(ComboBoxItem, { key: option.value, id: option.value }, option.label));
83
- }));
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
+ })));
84
85
  }
85
86
  function Loading() {
86
- return (React__default.createElement("div", { className: styles["loading"], role: "status" },
87
+ return (React__default.createElement("div", { className: styles["loading"] },
87
88
  React__default.createElement("span", null, "Loading..."),
88
- React__default.createElement(LoadingSpinner, null)));
89
+ React__default.createElement(LoadingSpinner, null),
90
+ React__default.createElement(LoadingAnnouncement, { message: "Loading" })));
89
91
  }
90
92
  function LoadError() {
91
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":";;;;;;;;;;;;;AAmCA,MAAM,WAAW,GAAG,GAAG;SAEP,0BAA0B,CAAC,EACzC,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,GACuB,EAAA;AAC5B,IAAA,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM;AACpC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,OAAgC;IAC3D,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,KAAc,KAAK,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,EAC7C,CAAC,WAAW,EAAE,KAAK,CAAC,CACrB;IACD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAsB;IACxD,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC;AAC5D,IAAA,MAAM,EACJ,KAAK,EACL,OAAO,EACP,OAAO,EAAE,eAAe,GACzB,GAAG,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC;IAC3C,6BAA6B,CAAC,OAAO,CAAC;AACtC,IAAA,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,QAA+B,KAAI;AAClC,QAAA,MAAM,QAAQ,GAAG,oBAAoB,CAAC,eAAe,EAAE,QAAQ,EAAE;YAC/D,KAAK;YACL,KAAK;AACN,SAAA,CAAC;QACF,OAAO,QAAQ,CACb,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EACpC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CACtC;IACH,CAAC,EACD,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAC1C;AACD,IAAA,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC;IAErC,QACEA,cAAA,CAAA,aAAA,CAAC,MAAM,EAAA,EACL,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,CAAC,KAAK,EACzB,UAAU,EAAE,MAAM,CAAC,IAAI,EAAA,CACvB;AAEN;AAEA,SAAS,aAAa,CAAC,OAA0B,EAAA;IAC/C,IAAI,OAAO,KAAK,UAAU;AAAE,QAAA,OAAO,4BAA4B;IAC/D,IAAI,OAAO,KAAK,YAAY;AAAE,QAAA,OAAO,8BAA8B;IACnE,IAAI,OAAO,KAAK,QAAQ;AAAE,QAAA,OAAO,0BAA0B;AAC3D,IAAA,OAAO,0BAA0B;AACnC;AAEA,SAAS,8BAA8B,CAAC,EACtC,KAAK,EACL,OAAO,EACP,GAAG,KAAK,EACkB,EAAA;AAC1B,IAAA,IAAI,OAAO;QAAE,OAAOA,cAAA,CAAA,aAAA,CAAC,OAAO,EAAA,IAAA,CAAG;AAC/B,IAAA,IAAI,KAAK;QAAE,OAAOA,cAAA,CAAA,aAAA,CAAC,SAAS,EAAA,IAAA,CAAG;AAC/B,IAAA,OAAOA,cAAA,CAAA,aAAA,CAAC,0BAA0B,EAAA,EAAA,GAAK,KAAK,GAAI;AAClD;AAEA,SAAS,0BAA0B,CAAC,EAClC,KAAK,EACL,OAAO,EACP,GAAG,KAAK,EACkB,EAAA;AAC1B,IAAA,IAAI,OAAO;QAAE,OAAOA,cAAA,CAAA,aAAA,CAAC,OAAO,EAAA,IAAA,CAAG;AAC/B,IAAA,IAAI,KAAK;QAAE,OAAOA,cAAA,CAAA,aAAA,CAAC,SAAS,EAAA,IAAA,CAAG;AAC/B,IAAA,OAAOA,cAAA,CAAA,aAAA,CAAC,sBAAsB,EAAA,EAAA,GAAK,KAAK,GAAI;AAC9C;AAEA,SAAS,0BAA0B,CAAC,EAClC,KAAK,EACL,OAAO,EACP,GAAG,KAAK,EACkB,EAAA;AAC1B,IAAA,IAAI,OAAO;QAAE,OAAOA,cAAA,CAAA,aAAA,CAAC,OAAO,EAAA,IAAA,CAAG;AAC/B,IAAA,IAAI,KAAK;QAAE,OAAOA,cAAA,CAAA,aAAA,CAAC,SAAS,EAAA,IAAA,CAAG;AAC/B,IAAA,OAAOA,cAAA,CAAA,aAAA,CAAC,sBAAsB,EAAA,EAAA,GAAK,KAAK,GAAI;AAC9C;AAEA,SAAS,4BAA4B,CAAC,EACpC,KAAK,EACL,QAAQ,EACR,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACkB,EAAA;AAC1B,IAAA,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAE9C,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,MAAK;QACb,IAAI,CAAC,OAAO,EAAE;YACZ,eAAe,CAAC,MAAM,CAAC;QACzB;AACF,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAEb,QACEA,cAAA,CAAA,aAAA,CAAC,kCAAkC,CAAC,QAAQ,IAC1C,KAAK,EAAE,YAAY,KAAK,SAAS,EAAA;QAEjCA,cAAA,CAAA,aAAA,CAAC,wBAAwB,EAAA,EAAA,GACnB,KAAK,EACT,YAAY,EAAE,KAAK,GAAG,OAAO,GAAG,YAAY,EAC5C,UAAU,EAAE,KAAK,EACjB,aAAa,EAAE,CAAC,CAAS,KAAI;gBAC3B,eAAe,CAAC,WAAW,CAAC;gBAC5B,QAAQ,CAAC,CAAC,CAAC;AACb,YAAA,CAAC,EACD,QAAQ,EAAE,CAAC,KAAyB,KAAI;gBACtC,IAAI,KAAK,KAAK,IAAI;oBAAE;AAEpB,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK;AACvC,sBAAE,KAAK,CAAC,GAAG,CAAC,MAAM;AAClB,sBAAE,MAAM,CAAC,KAAK,CAAC;gBACjB,QAAQ,CAAC,aAAa,CAAC;YACzB,CAAC,EACD,KAAK,EAAE,OAAO,EACd,gBAAgB,EAAE,KAAK,GAAGA,6BAAC,SAAS,EAAA,IAAA,CAAG,GAAG,YAAY,EAAA,EAErD,CAAC,CAAC,KAAI;YACL,MAAM,MAAM,GAAG,CAAqB;YACpC,QACEA,6BAAC,YAAY,EAAA,EAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,EAAA,EAC9C,MAAM,CAAC,KAAK,CACA;QAEnB,CAAC,CACwB,CACiB;AAElD;SAEgB,OAAO,GAAA;AACrB,IAAA,QACEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,EAAA;QAC/BA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,YAAA,CAAuB;AACvB,QAAAA,cAAA,CAAA,aAAA,CAAC,cAAc,EAAA,IAAA,CAAG;QAClBA,cAAA,CAAA,aAAA,CAAC,mBAAmB,IAAC,OAAO,EAAC,SAAS,EAAA,CAAG,CACrC;AAEV;SAEgB,SAAS,GAAA;AACvB,IAAA,QACEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAC,OAAO,EAAA,EAAA,+BAAA,CAE5C;AAEV;AAEA,SAAS,oBAAoB,CAC3B,OAA2B,EAC3B,KAA4B,EAC5B,QAAqE,EAAA;AAErE,IAAA,MAAM,oBAAoB,GAAG,yBAAyB,CAAC,QAAQ,CAAC;IAChE,MAAM,QAAQ,GAAG,CAAC,CAAS,KACzB,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK;AACnD,QAAA,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE7B,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK;AACxB,UAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,SAAS;AAC3D,UAAE,QAAQ,CAAC,KAAK,CAAC;AACrB;AAEA,SAAS,yBAAyB,CAAC,QAGlC,EAAA;IACC,MAAM,cAAc,GAAG,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC5D,MAAM,cAAc,GAAG,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC5D,OAAO,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9E;AAEA,SAAS,qBAAqB,CAAC,KAAoC,EAAA;IACjE,IAAI,KAAK,KAAK,SAAS;AAAE,QAAA,OAAO,EAAE;AAClC,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;AAC/C;;;;"}