@elliemae/ds-pagination 3.15.0 → 3.16.0-next.10

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/cjs/DSPaginationDefinitions.js +13 -1
  2. package/dist/cjs/DSPaginationDefinitions.js.map +2 -2
  3. package/dist/cjs/Pagination.js +7 -7
  4. package/dist/cjs/Pagination.js.map +2 -2
  5. package/dist/cjs/PaginationDataTestID.js +3 -1
  6. package/dist/cjs/PaginationDataTestID.js.map +2 -2
  7. package/dist/cjs/index.js +32 -2
  8. package/dist/cjs/index.js.map +3 -3
  9. package/dist/cjs/package.json +7 -0
  10. package/dist/cjs/parts/DSPageNextButton.js +70 -0
  11. package/dist/cjs/parts/DSPageNextButton.js.map +7 -0
  12. package/dist/cjs/parts/DSPagePrevButton.js +70 -0
  13. package/dist/cjs/parts/DSPagePrevButton.js.map +7 -0
  14. package/dist/cjs/parts/DSPaginationContainer.js +57 -0
  15. package/dist/cjs/parts/DSPaginationContainer.js.map +7 -0
  16. package/dist/cjs/parts/{PageNextButton.js → DSPaginator/createPaginatorHeader.js} +19 -25
  17. package/dist/cjs/parts/DSPaginator/createPaginatorHeader.js.map +7 -0
  18. package/dist/cjs/parts/DSPaginator/getOptions.js +72 -0
  19. package/dist/cjs/parts/DSPaginator/getOptions.js.map +7 -0
  20. package/dist/cjs/parts/DSPaginator/index.js +144 -0
  21. package/dist/cjs/parts/DSPaginator/index.js.map +7 -0
  22. package/dist/cjs/{hooks → parts/DSPaginator}/usePaginationSearch.js +5 -2
  23. package/dist/cjs/parts/DSPaginator/usePaginationSearch.js.map +7 -0
  24. package/dist/cjs/parts/DSPaginator/usePaginator.js +87 -0
  25. package/dist/cjs/parts/DSPaginator/usePaginator.js.map +7 -0
  26. package/dist/cjs/parts/{PagePrevButton.js → DSPerPageSelector/getOptions.js} +21 -22
  27. package/dist/cjs/parts/DSPerPageSelector/getOptions.js.map +7 -0
  28. package/dist/cjs/parts/{PerPageSelector.js → DSPerPageSelector/index.js} +37 -49
  29. package/dist/cjs/parts/DSPerPageSelector/index.js.map +7 -0
  30. package/dist/cjs/parts/DSPerPageSelector/usePerPageSelector.js +68 -0
  31. package/dist/cjs/parts/DSPerPageSelector/usePerPageSelector.js.map +7 -0
  32. package/dist/cjs/parts/PaginationContent.js +37 -52
  33. package/dist/cjs/parts/PaginationContent.js.map +3 -3
  34. package/dist/cjs/parts/index.js +45 -0
  35. package/dist/cjs/parts/index.js.map +7 -0
  36. package/dist/cjs/props.js +81 -0
  37. package/dist/cjs/props.js.map +7 -0
  38. package/dist/cjs/react-desc-prop-types.js +107 -33
  39. package/dist/cjs/react-desc-prop-types.js.map +2 -2
  40. package/dist/cjs/styled.js +17 -27
  41. package/dist/cjs/styled.js.map +2 -2
  42. package/dist/esm/DSPaginationDefinitions.js +13 -1
  43. package/dist/esm/DSPaginationDefinitions.js.map +2 -2
  44. package/dist/esm/Pagination.js +4 -4
  45. package/dist/esm/Pagination.js.map +1 -1
  46. package/dist/esm/PaginationDataTestID.js +3 -1
  47. package/dist/esm/PaginationDataTestID.js.map +2 -2
  48. package/dist/esm/index.js +39 -1
  49. package/dist/esm/index.js.map +3 -3
  50. package/dist/esm/package.json +7 -0
  51. package/dist/esm/parts/DSPageNextButton.js +50 -0
  52. package/dist/esm/parts/DSPageNextButton.js.map +7 -0
  53. package/dist/esm/parts/DSPagePrevButton.js +50 -0
  54. package/dist/esm/parts/DSPagePrevButton.js.map +7 -0
  55. package/dist/esm/parts/DSPaginationContainer.js +31 -0
  56. package/dist/esm/parts/DSPaginationContainer.js.map +7 -0
  57. package/dist/esm/parts/DSPaginator/createPaginatorHeader.js +20 -0
  58. package/dist/esm/parts/DSPaginator/createPaginatorHeader.js.map +7 -0
  59. package/dist/esm/parts/DSPaginator/getOptions.js +46 -0
  60. package/dist/esm/parts/DSPaginator/getOptions.js.map +7 -0
  61. package/dist/esm/parts/DSPaginator/index.js +118 -0
  62. package/dist/esm/parts/DSPaginator/index.js.map +7 -0
  63. package/dist/esm/{hooks → parts/DSPaginator}/usePaginationSearch.js +5 -2
  64. package/dist/esm/parts/DSPaginator/usePaginationSearch.js.map +7 -0
  65. package/dist/esm/parts/DSPaginator/usePaginator.js +61 -0
  66. package/dist/esm/parts/DSPaginator/usePaginator.js.map +7 -0
  67. package/dist/esm/parts/DSPerPageSelector/getOptions.js +22 -0
  68. package/dist/esm/parts/DSPerPageSelector/getOptions.js.map +7 -0
  69. package/dist/esm/parts/DSPerPageSelector/index.js +76 -0
  70. package/dist/esm/parts/DSPerPageSelector/index.js.map +7 -0
  71. package/dist/esm/parts/DSPerPageSelector/usePerPageSelector.js +42 -0
  72. package/dist/esm/parts/DSPerPageSelector/usePerPageSelector.js.map +7 -0
  73. package/dist/esm/parts/PaginationContent.js +37 -52
  74. package/dist/esm/parts/PaginationContent.js.map +2 -2
  75. package/dist/esm/parts/index.js +19 -0
  76. package/dist/esm/parts/index.js.map +7 -0
  77. package/dist/esm/props.js +55 -0
  78. package/dist/esm/props.js.map +7 -0
  79. package/dist/esm/react-desc-prop-types.js +88 -14
  80. package/dist/esm/react-desc-prop-types.js.map +2 -2
  81. package/dist/esm/styled.js +15 -25
  82. package/dist/esm/styled.js.map +2 -2
  83. package/dist/types/DSPaginationDefinitions.d.ts +6 -0
  84. package/dist/types/Pagination.d.ts +2 -2
  85. package/dist/types/PaginationDataTestID.d.ts +2 -0
  86. package/dist/types/index.d.ts +17 -1
  87. package/dist/types/parts/DSPageNextButton.d.ts +4 -0
  88. package/dist/types/parts/DSPagePrevButton.d.ts +4 -0
  89. package/dist/types/parts/DSPaginationContainer.d.ts +4 -0
  90. package/dist/types/parts/DSPaginator/createPaginatorHeader.d.ts +6 -0
  91. package/dist/types/parts/DSPaginator/getOptions.d.ts +7 -0
  92. package/dist/types/parts/DSPaginator/index.d.ts +4 -0
  93. package/dist/types/parts/DSPaginator/usePaginationSearch.d.ts +2 -0
  94. package/dist/types/parts/DSPaginator/usePaginator.d.ts +17 -0
  95. package/dist/types/parts/DSPerPageSelector/getOptions.d.ts +3 -0
  96. package/dist/types/parts/DSPerPageSelector/index.d.ts +4 -0
  97. package/dist/types/parts/DSPerPageSelector/usePerPageSelector.d.ts +13 -0
  98. package/dist/types/parts/PaginationContent.d.ts +1 -1
  99. package/dist/types/parts/index.d.ts +5 -0
  100. package/dist/types/props.d.ts +20 -0
  101. package/dist/types/react-desc-prop-types.d.ts +528 -9
  102. package/dist/types/styled.d.ts +7 -9
  103. package/dist/types/tests/a11y/axe.test.d.ts +1 -0
  104. package/dist/types/tests/callbacks/paginator.test.d.ts +1 -0
  105. package/dist/types/tests/callbacks/per-page-selector.test.d.ts +1 -0
  106. package/dist/types/tests/callbacks/prev-next-buttons.test.d.ts +1 -0
  107. package/dist/types/tests/keyboard/navigation.test.d.ts +1 -0
  108. package/dist/types/tests/keyboard/paginator-search.test.d.ts +1 -0
  109. package/dist/types/tests/render/page-count-loading.test.d.ts +1 -0
  110. package/dist/types/tests/render/paginator.test.d.ts +1 -0
  111. package/dist/types/tests/render/per-page-selector.test.d.ts +1 -0
  112. package/dist/types/tests/render/segmented-paginator.test.d.ts +1 -0
  113. package/dist/types/tests/render/simple.render.test.d.ts +1 -0
  114. package/package.json +17 -11
  115. package/dist/cjs/hooks/usePaginationSearch.js.map +0 -7
  116. package/dist/cjs/parts/PageNextButton.js.map +0 -7
  117. package/dist/cjs/parts/PagePrevButton.js.map +0 -7
  118. package/dist/cjs/parts/Paginator.js +0 -162
  119. package/dist/cjs/parts/Paginator.js.map +0 -7
  120. package/dist/cjs/parts/PerPageSelector.js.map +0 -7
  121. package/dist/esm/hooks/usePaginationSearch.js.map +0 -7
  122. package/dist/esm/parts/PageNextButton.js +0 -26
  123. package/dist/esm/parts/PageNextButton.js.map +0 -7
  124. package/dist/esm/parts/PagePrevButton.js +0 -23
  125. package/dist/esm/parts/PagePrevButton.js.map +0 -7
  126. package/dist/esm/parts/Paginator.js +0 -136
  127. package/dist/esm/parts/Paginator.js.map +0 -7
  128. package/dist/esm/parts/PerPageSelector.js +0 -88
  129. package/dist/esm/parts/PerPageSelector.js.map +0 -7
  130. package/dist/types/hooks/usePaginationSearch.d.ts +0 -1
  131. package/dist/types/parts/PageNextButton.d.ts +0 -3
  132. package/dist/types/parts/PagePrevButton.d.ts +0 -3
  133. package/dist/types/parts/Paginator.d.ts +0 -11
  134. package/dist/types/parts/PerPageSelector.d.ts +0 -4
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var DSPaginator_exports = {};
26
+ __export(DSPaginator_exports, {
27
+ DSPaginator: () => DSPaginator,
28
+ DSPaginatorWithSchema: () => DSPaginatorWithSchema
29
+ });
30
+ module.exports = __toCommonJS(DSPaginator_exports);
31
+ var React = __toESM(require("react"));
32
+ var import_jsx_runtime = require("react/jsx-runtime");
33
+ var import_react = require("react");
34
+ var import_ds_icons = require("@elliemae/ds-icons");
35
+ var import_ds_props_helpers = require("@elliemae/ds-props-helpers");
36
+ var import_ds_grid = require("@elliemae/ds-grid");
37
+ var import_ds_dropdownmenu = require("@elliemae/ds-dropdownmenu");
38
+ var import_ds_typography = require("@elliemae/ds-typography");
39
+ var import_ds_circular_progress_indicator = require("@elliemae/ds-circular-progress-indicator");
40
+ var import_styled = require("../../styled.js");
41
+ var import_react_desc_prop_types = require("../../react-desc-prop-types.js");
42
+ var import_DSPaginationDefinitions = require("../../DSPaginationDefinitions.js");
43
+ var import_usePaginator = require("./usePaginator.js");
44
+ var import_createPaginatorHeader = require("./createPaginatorHeader.js");
45
+ var import_PaginationDataTestID = require("../../PaginationDataTestID.js");
46
+ const DSPaginator = (props) => {
47
+ const propsWithDefault = (0, import_ds_props_helpers.useMemoMergePropsWithDefault)(
48
+ props,
49
+ import_react_desc_prop_types.paginatorDefaultProps
50
+ );
51
+ (0, import_ds_props_helpers.useValidateTypescriptPropTypes)(propsWithDefault, import_react_desc_prop_types.DSPaginatorPropTypesSchema, import_DSPaginationDefinitions.PaginatorName);
52
+ const { pageIndex, pageCount, isLoadingPageCount, onPageChange, pageDetails, pageDetailsTitle } = propsWithDefault;
53
+ const {
54
+ btnRef,
55
+ btnWidth,
56
+ pageInfoWidth,
57
+ options,
58
+ isOpened,
59
+ setIsOpened,
60
+ detailWidth,
61
+ globalAttributes,
62
+ xstyledAttributes,
63
+ actionRef,
64
+ onKeyDown
65
+ } = (0, import_usePaginator.usePaginator)(propsWithDefault);
66
+ const Header = (0, import_react.useMemo)(
67
+ () => (0, import_createPaginatorHeader.createPaginatorHeader)({ pageDetailsTitle, pageInfoWidth }),
68
+ [pageDetailsTitle, pageInfoWidth]
69
+ );
70
+ const buttonOnClick = (0, import_react.useMemo)(() => {
71
+ if (globalAttributes.onClick)
72
+ return globalAttributes.onClick;
73
+ return () => setIsOpened((prev) => !prev);
74
+ }, [globalAttributes.onClick, setIsOpened]);
75
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
76
+ import_ds_dropdownmenu.DSDropdownMenuV2,
77
+ {
78
+ isOpened,
79
+ options,
80
+ selectedOptions: { [pageIndex.toString()]: true },
81
+ onOptionClick: (_, clickedOption) => {
82
+ onPageChange(clickedOption.value);
83
+ setIsOpened(false);
84
+ btnRef.current?.focus();
85
+ },
86
+ onClickOutside: () => {
87
+ setIsOpened(false);
88
+ btnRef.current?.focus();
89
+ },
90
+ customOffset: [-23, 2],
91
+ startPlacementPreference: "top-start",
92
+ actionRef,
93
+ onKeyDown,
94
+ minWidth: pageDetails.length !== 0 ? btnWidth + 23 : pageCount.toString().length * 6 + 90,
95
+ maxHeight: 300,
96
+ HeaderComp: Header,
97
+ children: [
98
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
99
+ import_styled.PaginationDropdownButton,
100
+ {
101
+ buttonType: "raw",
102
+ disabled: isLoadingPageCount,
103
+ innerRef: btnRef,
104
+ "aria-pressed": isOpened,
105
+ "aria-label": `Page ${pageIndex} out of ${pageCount}, ${pageDetails.length !== 0 ? pageDetails[pageIndex - 1] : "\b\b"}. Press to change the current page`,
106
+ "data-testid": import_PaginationDataTestID.PAGINATION_DATA_TESTID.PAGINATOR,
107
+ ...globalAttributes,
108
+ ...xstyledAttributes,
109
+ onClick: buttonOnClick,
110
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_ds_grid.Grid, { gutter: "xxxs", alignItems: "center", style: { gridAutoFlow: "column" }, children: [
111
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_typography.DSTypography, { fontSize: "18px", variant: "b1", as: "span", fontWeight: "semibold", textAlign: "start", children: pageIndex }),
112
+ "/ ",
113
+ pageCount,
114
+ isLoadingPageCount && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_circular_progress_indicator.DSCircularIndeterminateIndicator, { ml: "xxxs", mr: "xxxs", size: "xs" }),
115
+ pageDetails.length !== 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
116
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styled.DSPaginationSeparator, { height: "12px", ml: "12px", mr: "xxxs" }),
117
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
118
+ import_ds_typography.DSTypography,
119
+ {
120
+ fontSize: "13px",
121
+ w: detailWidth,
122
+ mr: "xxs",
123
+ variant: "b1",
124
+ as: "span",
125
+ fontWeight: "semibold",
126
+ textAlign: "start",
127
+ children: pageDetails[pageIndex - 1]
128
+ }
129
+ )
130
+ ] }),
131
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_icons.ChevronDown, { ml: "xxxs", color: ["brand-primary", "700"] })
132
+ ] })
133
+ }
134
+ ),
135
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_grid.Grid, { style: { position: "relative" }, children: pageDetails.map((pageDetail) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styled.InvisibleDiv, { "data-testid": "ds-pagination-invisible-detail-for-width-calc", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_typography.DSTypography, { fontSize: "13px", mr: "xxs", variant: "b1", as: "span", fontWeight: "semibold", textAlign: "start", children: pageDetail }) }, pageDetail)) })
136
+ ]
137
+ }
138
+ );
139
+ };
140
+ DSPaginator.propTypes = import_react_desc_prop_types.DSPaginatorPropTypesSchema;
141
+ DSPaginator.displayName = import_DSPaginationDefinitions.PaginatorName;
142
+ const DSPaginatorWithSchema = (0, import_ds_props_helpers.describe)(DSPaginator).description("Per Page Selector");
143
+ DSPaginatorWithSchema.propTypes = import_react_desc_prop_types.DSPaginatorPropTypesSchema;
144
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/parts/DSPaginator/index.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["/* eslint-disable react/prop-types */\nimport React, { useMemo } from 'react';\nimport type { DSButtonT } from '@elliemae/ds-button-v2';\nimport { ChevronDown } from '@elliemae/ds-icons';\nimport { describe, useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSDropdownMenuV2 } from '@elliemae/ds-dropdownmenu';\nimport { DSTypography } from '@elliemae/ds-typography';\nimport { DSCircularIndeterminateIndicator } from '@elliemae/ds-circular-progress-indicator';\nimport { InvisibleDiv, PaginationDropdownButton, DSPaginationSeparator } from '../../styled.js';\nimport { paginatorDefaultProps, DSPaginatorPropTypesSchema } from '../../react-desc-prop-types.js';\nimport { PaginatorName } from '../../DSPaginationDefinitions.js';\nimport { usePaginator } from './usePaginator.js';\nimport { createPaginatorHeader } from './createPaginatorHeader.js';\nimport { PAGINATION_DATA_TESTID } from '../../PaginationDataTestID.js';\nimport type { DSDropdownMenuT } from '@elliemae/ds-dropdownmenu';\nimport type { DSPaginationT } from '../../react-desc-prop-types.js';\n\nexport const DSPaginator: React.ComponentType<DSPaginationT.PaginatorProps> = (props) => {\n const propsWithDefault = useMemoMergePropsWithDefault<DSPaginationT.PaginatorInternalProps>(\n props,\n paginatorDefaultProps,\n );\n useValidateTypescriptPropTypes(propsWithDefault, DSPaginatorPropTypesSchema, PaginatorName);\n\n const { pageIndex, pageCount, isLoadingPageCount, onPageChange, pageDetails, pageDetailsTitle } = propsWithDefault;\n\n const {\n btnRef,\n btnWidth,\n pageInfoWidth,\n options,\n isOpened,\n setIsOpened,\n detailWidth,\n globalAttributes,\n xstyledAttributes,\n actionRef,\n onKeyDown,\n } = usePaginator(propsWithDefault);\n\n const Header = useMemo(\n () => createPaginatorHeader({ pageDetailsTitle, pageInfoWidth }),\n [pageDetailsTitle, pageInfoWidth],\n );\n\n const buttonOnClick: DSButtonT.Props['onClick'] = useMemo(() => {\n if (globalAttributes.onClick) return globalAttributes.onClick as DSButtonT.Props['onClick'];\n return () => setIsOpened((prev) => !prev);\n }, [globalAttributes.onClick, setIsOpened]);\n\n return (\n <DSDropdownMenuV2\n isOpened={isOpened}\n options={options}\n selectedOptions={{ [pageIndex.toString()]: true }}\n onOptionClick={(_, clickedOption) => {\n onPageChange((clickedOption as DSDropdownMenuT.ItemSingleOptions).value as number);\n setIsOpened(false);\n btnRef.current?.focus();\n }}\n onClickOutside={() => {\n setIsOpened(false);\n btnRef.current?.focus();\n }}\n customOffset={[-23, 2]}\n startPlacementPreference=\"top-start\"\n actionRef={actionRef}\n onKeyDown={onKeyDown}\n minWidth={pageDetails.length !== 0 ? btnWidth + 23 : pageCount.toString().length * 6 + 90}\n maxHeight={300}\n HeaderComp={Header}\n >\n <PaginationDropdownButton\n buttonType=\"raw\"\n disabled={isLoadingPageCount}\n innerRef={btnRef}\n aria-pressed={isOpened}\n aria-label={`Page ${pageIndex} out of ${pageCount}, ${\n pageDetails.length !== 0 ? pageDetails[pageIndex - 1] : '\\b\\b'\n }. Press to change the current page`}\n data-testid={PAGINATION_DATA_TESTID.PAGINATOR}\n {...globalAttributes}\n {...xstyledAttributes}\n onClick={buttonOnClick}\n >\n <Grid gutter=\"xxxs\" alignItems=\"center\" style={{ gridAutoFlow: 'column' }}>\n <DSTypography fontSize=\"18px\" variant=\"b1\" as=\"span\" fontWeight=\"semibold\" textAlign=\"start\">\n {pageIndex}\n </DSTypography>\n / {pageCount}\n {isLoadingPageCount && <DSCircularIndeterminateIndicator ml=\"xxxs\" mr=\"xxxs\" size=\"xs\" />}\n {pageDetails.length !== 0 && (\n <>\n <DSPaginationSeparator height=\"12px\" ml=\"12px\" mr=\"xxxs\" />\n <DSTypography\n fontSize=\"13px\"\n w={detailWidth}\n mr=\"xxs\"\n variant=\"b1\"\n as=\"span\"\n fontWeight=\"semibold\"\n textAlign=\"start\"\n >\n {pageDetails[pageIndex - 1]}\n </DSTypography>\n </>\n )}\n <ChevronDown ml=\"xxxs\" color={['brand-primary', '700']} />\n </Grid>\n </PaginationDropdownButton>\n {/* We calculate the length of the longest detail here (this is as per specs) */}\n <Grid style={{ position: 'relative' }}>\n {pageDetails.map((pageDetail) => (\n <InvisibleDiv data-testid=\"ds-pagination-invisible-detail-for-width-calc\" key={pageDetail}>\n <DSTypography fontSize=\"13px\" mr=\"xxs\" variant=\"b1\" as=\"span\" fontWeight=\"semibold\" textAlign=\"start\">\n {pageDetail}\n </DSTypography>\n </InvisibleDiv>\n ))}\n </Grid>\n </DSDropdownMenuV2>\n );\n};\n\nDSPaginator.propTypes = DSPaginatorPropTypesSchema;\nDSPaginator.displayName = PaginatorName;\nexport const DSPaginatorWithSchema = describe(DSPaginator).description('Per Page Selector');\nDSPaginatorWithSchema.propTypes = DSPaginatorPropTypesSchema;\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -32,8 +32,10 @@ var import_react = require("react");
32
32
  const usePaginationSearch = (pageCount, actionRef) => {
33
33
  const [searchValue, setSearchValue] = (0, import_react.useState)("");
34
34
  const [shouldResetSearchValue, setShouldResetSearchValue] = (0, import_react.useState)(true);
35
- const timeoutRef = (0, import_react.useRef)(null);
35
+ const timeoutRef = (0, import_react.useRef)();
36
36
  (0, import_react.useEffect)(() => {
37
+ if (typeof pageCount === "string")
38
+ return;
37
39
  if (searchValue !== "" && Number.parseInt(searchValue, 10) <= pageCount) {
38
40
  actionRef.current.setActiveDescendant(searchValue);
39
41
  actionRef.current.scrollOptionIntoView(searchValue);
@@ -47,7 +49,8 @@ const usePaginationSearch = (pageCount, actionRef) => {
47
49
  else
48
50
  setSearchValue((prevValue) => prevValue + e.key);
49
51
  setShouldResetSearchValue(false);
50
- clearTimeout(timeoutRef.current);
52
+ if (timeoutRef.current)
53
+ clearTimeout(timeoutRef.current);
51
54
  timeoutRef.current = setTimeout(() => {
52
55
  setShouldResetSearchValue(true);
53
56
  }, 1e3);
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/parts/DSPaginator/usePaginationSearch.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport const usePaginationSearch = (\n pageCount: string | number,\n actionRef: React.MutableRefObject<Record<string, (dsId: string) => void>>,\n): React.KeyboardEventHandler => {\n const [searchValue, setSearchValue] = useState('');\n const [shouldResetSearchValue, setShouldResetSearchValue] = useState(true);\n\n const timeoutRef = useRef<NodeJS.Timeout>();\n\n useEffect(() => {\n if (typeof pageCount === 'string') return;\n\n if (searchValue !== '' && Number.parseInt(searchValue, 10) <= pageCount) {\n actionRef.current.setActiveDescendant(searchValue);\n actionRef.current.scrollOptionIntoView(searchValue);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchValue]);\n\n const onKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.code.startsWith('Digit')) {\n if (shouldResetSearchValue) setSearchValue(e.key);\n else setSearchValue((prevValue) => prevValue + e.key);\n\n setShouldResetSearchValue(false);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n setShouldResetSearchValue(true);\n }, 1000);\n }\n },\n [shouldResetSearchValue],\n );\n\n return onKeyDown;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAAyD;AAElD,MAAM,sBAAsB,CACjC,WACA,cAC+B;AAC/B,QAAM,CAAC,aAAa,cAAc,QAAI,uBAAS,EAAE;AACjD,QAAM,CAAC,wBAAwB,yBAAyB,QAAI,uBAAS,IAAI;AAEzE,QAAM,iBAAa,qBAAuB;AAE1C,8BAAU,MAAM;AACd,QAAI,OAAO,cAAc;AAAU;AAEnC,QAAI,gBAAgB,MAAM,OAAO,SAAS,aAAa,EAAE,KAAK,WAAW;AACvE,gBAAU,QAAQ,oBAAoB,WAAW;AACjD,gBAAU,QAAQ,qBAAqB,WAAW;AAAA,IACpD;AAAA,EAEF,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,gBAAY;AAAA,IAChB,CAAC,MAA2B;AAC1B,UAAI,EAAE,KAAK,WAAW,OAAO,GAAG;AAC9B,YAAI;AAAwB,yBAAe,EAAE,GAAG;AAAA;AAC3C,yBAAe,CAAC,cAAc,YAAY,EAAE,GAAG;AAEpD,kCAA0B,KAAK;AAC/B,YAAI,WAAW;AAAS,uBAAa,WAAW,OAAO;AACvD,mBAAW,UAAU,WAAW,MAAM;AACpC,oCAA0B,IAAI;AAAA,QAChC,GAAG,GAAI;AAAA,MACT;AAAA,IACF;AAAA,IACA,CAAC,sBAAsB;AAAA,EACzB;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var usePaginator_exports = {};
26
+ __export(usePaginator_exports, {
27
+ usePaginator: () => usePaginator
28
+ });
29
+ module.exports = __toCommonJS(usePaginator_exports);
30
+ var React = __toESM(require("react"));
31
+ var import_react = require("react");
32
+ var import_lodash = require("lodash");
33
+ var import_ds_props_helpers = require("@elliemae/ds-props-helpers");
34
+ var import_ds_utilities = require("@elliemae/ds-utilities");
35
+ var import_usePaginationSearch = require("./usePaginationSearch.js");
36
+ var import_getOptions = require("./getOptions.js");
37
+ const usePaginator = (props) => {
38
+ const { pageIndex, pageCount, pageDetails } = props;
39
+ const [isOpened, setIsOpened] = (0, import_react.useState)(false);
40
+ const [detailWidth, setDetailWidth] = (0, import_react.useState)(0);
41
+ const [pageInfoWidth, setPageInfoWidth] = (0, import_react.useState)(0);
42
+ const btnRef = (0, import_react.useRef)(null);
43
+ const actionRef = (0, import_react.useRef)({});
44
+ const { width: btnWidth } = (0, import_ds_utilities.useOnElementResize)(btnRef);
45
+ const options = (0, import_react.useMemo)(
46
+ () => (0, import_getOptions.getOptions)({ pageCount, pageIndex, pageDetails, pageInfoWidth }),
47
+ [pageCount, pageIndex, pageDetails, pageInfoWidth]
48
+ );
49
+ const onKeyDown = (0, import_usePaginationSearch.usePaginationSearch)(pageCount, actionRef);
50
+ const globalAttributes = (0, import_lodash.omit)((0, import_ds_props_helpers.useGetGlobalAttributes)(props), ["shape", "type", "size"]);
51
+ const xstyledAttributes = (0, import_ds_props_helpers.useGetXstyledProps)(props);
52
+ (0, import_react.useEffect)(() => {
53
+ if (isOpened) {
54
+ actionRef.current.setActiveDescendant(pageIndex.toString());
55
+ actionRef.current.scrollOptionIntoView(pageIndex.toString());
56
+ }
57
+ }, [isOpened]);
58
+ (0, import_react.useLayoutEffect)(() => {
59
+ const invisibleDetails = [
60
+ ...document.body.querySelectorAll('[data-testid="ds-pagination-invisible-detail-for-width-calc"]')
61
+ ];
62
+ const maxWidth = invisibleDetails.reduce((acc, cur) => Math.max(acc, cur.getBoundingClientRect().width), 0);
63
+ setDetailWidth(maxWidth);
64
+ }, [pageDetails]);
65
+ (0, import_react.useEffect)(() => {
66
+ setPageInfoWidth(() => {
67
+ if (detailWidth)
68
+ return btnWidth - detailWidth - 89;
69
+ return btnWidth - 56;
70
+ });
71
+ }, [btnWidth, detailWidth]);
72
+ return {
73
+ btnRef,
74
+ btnWidth,
75
+ pageInfoWidth,
76
+ options,
77
+ isOpened,
78
+ setIsOpened,
79
+ detailWidth,
80
+ setDetailWidth,
81
+ globalAttributes,
82
+ xstyledAttributes,
83
+ actionRef,
84
+ onKeyDown
85
+ };
86
+ };
87
+ //# sourceMappingURL=usePaginator.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/parts/DSPaginator/usePaginator.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { omit } from 'lodash';\nimport { useGetGlobalAttributes, useGetXstyledProps } from '@elliemae/ds-props-helpers';\nimport { useOnElementResize } from '@elliemae/ds-utilities';\nimport { usePaginationSearch } from './usePaginationSearch.js';\nimport { getOptions } from './getOptions.js';\nimport type { DSPaginationT } from '../../react-desc-prop-types.js';\n\nexport const usePaginator = (props: DSPaginationT.PaginatorInternalProps) => {\n const { pageIndex, pageCount, pageDetails } = props;\n\n const [isOpened, setIsOpened] = useState(false);\n const [detailWidth, setDetailWidth] = useState(0);\n const [pageInfoWidth, setPageInfoWidth] = useState(0);\n\n const btnRef = useRef<HTMLButtonElement>(null);\n const actionRef = useRef<Record<string, (dsId: string) => void>>({});\n\n const { width: btnWidth } = useOnElementResize(btnRef);\n\n const options = useMemo(\n () => getOptions({ pageCount, pageIndex, pageDetails, pageInfoWidth }),\n [pageCount, pageIndex, pageDetails, pageInfoWidth],\n );\n\n const onKeyDown = usePaginationSearch(pageCount, actionRef);\n\n const globalAttributes = omit(useGetGlobalAttributes(props), ['shape', 'type', 'size']);\n const xstyledAttributes = useGetXstyledProps(props);\n\n useEffect(() => {\n if (isOpened) {\n actionRef.current.setActiveDescendant(pageIndex.toString());\n actionRef.current.scrollOptionIntoView(pageIndex.toString());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpened]);\n\n useLayoutEffect(() => {\n const invisibleDetails = [\n ...document.body.querySelectorAll('[data-testid=\"ds-pagination-invisible-detail-for-width-calc\"]'),\n ] as HTMLDivElement[];\n const maxWidth = invisibleDetails.reduce((acc, cur) => Math.max(acc, cur.getBoundingClientRect().width), 0);\n setDetailWidth(maxWidth);\n }, [pageDetails]);\n\n useEffect(() => {\n setPageInfoWidth(() => {\n // Here we get the size of the page info\n // Inside of the button, we have the page info, the chevron, separators, page details and padding\n // We substract the detailWidth if present, and the padding + chevron + separators in each case\n if (detailWidth) return btnWidth - detailWidth - 89;\n return btnWidth - 56;\n });\n }, [btnWidth, detailWidth]);\n\n return {\n btnRef,\n btnWidth,\n pageInfoWidth,\n options,\n isOpened,\n setIsOpened,\n detailWidth,\n setDetailWidth,\n globalAttributes,\n xstyledAttributes,\n actionRef,\n onKeyDown,\n };\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAAsE;AACtE,oBAAqB;AACrB,8BAA2D;AAC3D,0BAAmC;AACnC,iCAAoC;AACpC,wBAA2B;AAGpB,MAAM,eAAe,CAAC,UAAgD;AAC3E,QAAM,EAAE,WAAW,WAAW,YAAY,IAAI;AAE9C,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAS,KAAK;AAC9C,QAAM,CAAC,aAAa,cAAc,QAAI,uBAAS,CAAC;AAChD,QAAM,CAAC,eAAe,gBAAgB,QAAI,uBAAS,CAAC;AAEpD,QAAM,aAAS,qBAA0B,IAAI;AAC7C,QAAM,gBAAY,qBAA+C,CAAC,CAAC;AAEnE,QAAM,EAAE,OAAO,SAAS,QAAI,wCAAmB,MAAM;AAErD,QAAM,cAAU;AAAA,IACd,UAAM,8BAAW,EAAE,WAAW,WAAW,aAAa,cAAc,CAAC;AAAA,IACrE,CAAC,WAAW,WAAW,aAAa,aAAa;AAAA,EACnD;AAEA,QAAM,gBAAY,gDAAoB,WAAW,SAAS;AAE1D,QAAM,uBAAmB,wBAAK,gDAAuB,KAAK,GAAG,CAAC,SAAS,QAAQ,MAAM,CAAC;AACtF,QAAM,wBAAoB,4CAAmB,KAAK;AAElD,8BAAU,MAAM;AACd,QAAI,UAAU;AACZ,gBAAU,QAAQ,oBAAoB,UAAU,SAAS,CAAC;AAC1D,gBAAU,QAAQ,qBAAqB,UAAU,SAAS,CAAC;AAAA,IAC7D;AAAA,EAEF,GAAG,CAAC,QAAQ,CAAC;AAEb,oCAAgB,MAAM;AACpB,UAAM,mBAAmB;AAAA,MACvB,GAAG,SAAS,KAAK,iBAAiB,+DAA+D;AAAA,IACnG;AACA,UAAM,WAAW,iBAAiB,OAAO,CAAC,KAAK,QAAQ,KAAK,IAAI,KAAK,IAAI,sBAAsB,EAAE,KAAK,GAAG,CAAC;AAC1G,mBAAe,QAAQ;AAAA,EACzB,GAAG,CAAC,WAAW,CAAC;AAEhB,8BAAU,MAAM;AACd,qBAAiB,MAAM;AAIrB,UAAI;AAAa,eAAO,WAAW,cAAc;AACjD,aAAO,WAAW;AAAA,IACpB,CAAC;AAAA,EACH,GAAG,CAAC,UAAU,WAAW,CAAC;AAE1B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -22,28 +22,27 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
22
22
  mod
23
23
  ));
24
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
- var PagePrevButton_exports = {};
26
- __export(PagePrevButton_exports, {
27
- PagePrevButton: () => PagePrevButton
25
+ var getOptions_exports = {};
26
+ __export(getOptions_exports, {
27
+ generateOption: () => generateOption,
28
+ getOptions: () => getOptions
28
29
  });
29
- module.exports = __toCommonJS(PagePrevButton_exports);
30
+ module.exports = __toCommonJS(getOptions_exports);
30
31
  var React = __toESM(require("react"));
31
- var import_jsx_runtime = require("react/jsx-runtime");
32
- var import_ds_icons = require("@elliemae/ds-icons");
33
- var import_PaginationDataTestID = require("../PaginationDataTestID");
34
- var import_styled = require("../styled");
35
- const PagePrevButton = ({ onPreviousPage, canPreviousPage }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
36
- import_styled.PreviousNextPageButton,
37
- {
38
- onClick: () => {
39
- if (canPreviousPage)
40
- onPreviousPage();
41
- },
42
- disabled: !canPreviousPage,
43
- buttonType: "raw",
44
- "data-testid": import_PaginationDataTestID.PAGINATION_DATA_TESTID.PREVIOUS_BUTTON,
45
- "aria-label": "Go to previous page",
46
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_icons.ChevronLeft, { color: canPreviousPage ? ["brand-primary", "700"] : ["neutral", "500"] })
32
+ var import_ds_utilities = require("@elliemae/ds-utilities");
33
+ const generateOption = (value) => {
34
+ if (typeof value === "object") {
35
+ return value;
47
36
  }
48
- );
49
- //# sourceMappingURL=PagePrevButton.js.map
37
+ return {
38
+ dsId: value.toString(),
39
+ value,
40
+ label: value.toString(),
41
+ type: "single"
42
+ };
43
+ };
44
+ const getOptions = (step, min, max) => {
45
+ const options = (0, import_ds_utilities.range)(min, max + step, step).map(generateOption);
46
+ return min === 0 ? options.slice(1, options.length) : options;
47
+ };
48
+ //# sourceMappingURL=getOptions.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/parts/DSPerPageSelector/getOptions.ts", "../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import { range } from '@elliemae/ds-utilities';\nimport type { DSDropdownMenuT } from '@elliemae/ds-dropdownmenu';\n\nexport const generateOption = (\n value: number | DSDropdownMenuT.ItemSingleOptions,\n): DSDropdownMenuT.ItemSingleOptions => {\n if (typeof value === 'object') {\n return value;\n }\n return {\n dsId: value.toString(),\n value,\n label: value.toString(),\n type: 'single',\n } as const;\n};\n\nexport const getOptions = (step: number, min: number, max: number) => {\n const options = range(min, max + step, step).map(generateOption);\n return min === 0 ? options.slice(1, options.length) : options;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,0BAAsB;AAGf,MAAM,iBAAiB,CAC5B,UACsC;AACtC,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,MAAM,MAAM,SAAS;AAAA,IACrB;AAAA,IACA,OAAO,MAAM,SAAS;AAAA,IACtB,MAAM;AAAA,EACR;AACF;AAEO,MAAM,aAAa,CAAC,MAAc,KAAa,QAAgB;AACpE,QAAM,cAAU,2BAAM,KAAK,MAAM,MAAM,IAAI,EAAE,IAAI,cAAc;AAC/D,SAAO,QAAQ,IAAI,QAAQ,MAAM,GAAG,QAAQ,MAAM,IAAI;AACxD;",
6
+ "names": []
7
+ }
@@ -22,55 +22,37 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
22
22
  mod
23
23
  ));
24
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
- var PerPageSelector_exports = {};
26
- __export(PerPageSelector_exports, {
27
- default: () => PerPageSelector_default
25
+ var DSPerPageSelector_exports = {};
26
+ __export(DSPerPageSelector_exports, {
27
+ DSPerPageSelector: () => DSPerPageSelector,
28
+ DSPerPageSelectorWithSchema: () => DSPerPageSelectorWithSchema
28
29
  });
29
- module.exports = __toCommonJS(PerPageSelector_exports);
30
+ module.exports = __toCommonJS(DSPerPageSelector_exports);
30
31
  var React = __toESM(require("react"));
31
32
  var import_jsx_runtime = require("react/jsx-runtime");
32
33
  var import_react = require("react");
33
- var import_memoize_one = __toESM(require("memoize-one"));
34
- var import_ds_utilities = require("@elliemae/ds-utilities");
34
+ var import_ds_props_helpers = require("@elliemae/ds-props-helpers");
35
35
  var import_ds_dropdownmenu = require("@elliemae/ds-dropdownmenu");
36
36
  var import_ds_icons = require("@elliemae/ds-icons");
37
- var import_styled = require("../styled");
38
- const generateOption = (value) => {
39
- if (typeof value === "object") {
40
- return value;
41
- }
42
- return {
43
- dsId: value.toString(),
44
- value,
45
- label: value.toString(),
46
- type: "single"
47
- };
48
- };
49
- const getOptions = (0, import_memoize_one.default)((step, min, max) => {
50
- const options = (0, import_ds_utilities.range)(min, max + step, step).map(generateOption);
51
- return min === 0 ? options.slice(1, options.length) : options;
52
- });
37
+ var import_react_desc_prop_types = require("../../react-desc-prop-types.js");
38
+ var import_styled = require("../../styled.js");
39
+ var import_DSPaginationDefinitions = require("../../DSPaginationDefinitions.js");
40
+ var import_usePerPageSelector = require("./usePerPageSelector.js");
41
+ var import_PaginationDataTestID = require("../../PaginationDataTestID.js");
53
42
  const Header = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: "Per Page" });
54
- const PerPageSelector = (props) => {
55
- const [isOpened, setIsOpened] = (0, import_react.useState)(false);
56
- const { pageSize, onPageSizeChange, perPageOptions, maxPerPage, perPageStep, minPerPage } = props;
57
- const options = (0, import_react.useMemo)(() => {
58
- if (perPageOptions)
59
- return perPageOptions.map(generateOption);
60
- return getOptions(perPageStep, minPerPage, maxPerPage);
61
- }, [maxPerPage, minPerPage, perPageOptions, perPageStep]);
62
- const actionRef = (0, import_react.useRef)({});
63
- const btnRef = (0, import_react.useRef)(null);
64
- (0, import_react.useEffect)(() => {
65
- if (isOpened) {
66
- actionRef.current.setActiveDescendant(pageSize.toString());
67
- actionRef.current.scrollOptionIntoView(pageSize.toString());
68
- }
69
- }, [isOpened]);
70
- const width = (0, import_react.useMemo)(() => {
71
- const maxLength = options.reduce((acc, cur) => Math.max(acc, cur?.label?.length ?? 0), 0);
72
- return maxLength * 6 + 90;
73
- }, [options]);
43
+ const DSPerPageSelector = (props) => {
44
+ const propsWithDefault = (0, import_ds_props_helpers.useMemoMergePropsWithDefault)(
45
+ props,
46
+ import_react_desc_prop_types.perPageSelectorDefaultProps
47
+ );
48
+ (0, import_ds_props_helpers.useValidateTypescriptPropTypes)(propsWithDefault, import_react_desc_prop_types.DSPerPageSelectorPropTypesSchema, import_DSPaginationDefinitions.PerPageSelectorName);
49
+ const { pageSize, onPageSizeChange } = propsWithDefault;
50
+ const { actionRef, btnRef, width, isOpened, setIsOpened, options, globalAttributes, xstyledAttributes } = (0, import_usePerPageSelector.usePerPageSelector)(propsWithDefault);
51
+ const buttonOnClick = (0, import_react.useMemo)(() => {
52
+ if (globalAttributes.onClick)
53
+ return globalAttributes.onClick;
54
+ return () => setIsOpened((prev) => !prev);
55
+ }, [globalAttributes.onClick, setIsOpened]);
74
56
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
75
57
  import_ds_dropdownmenu.DSDropdownMenuV2,
76
58
  {
@@ -86,29 +68,35 @@ const PerPageSelector = (props) => {
86
68
  setIsOpened(false);
87
69
  btnRef.current?.focus();
88
70
  },
89
- customOffset: [10, 2],
71
+ customOffset: [-23, 2],
90
72
  startPlacementPreference: "top-start",
91
73
  actionRef,
92
74
  minWidth: width,
93
75
  maxHeight: 300,
94
76
  HeaderComp: Header,
95
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { marginLeft: "32px" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
77
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
96
78
  import_styled.PaginationDropdownButton,
97
79
  {
98
80
  buttonType: "raw",
99
- onClick: () => setIsOpened((prev) => !prev),
100
- "aria-pressed": isOpened,
101
81
  innerRef: btnRef,
82
+ "aria-pressed": isOpened,
102
83
  "aria-label": `${pageSize} rows per page. Press to select rows per page`,
84
+ "data-testid": import_PaginationDataTestID.PAGINATION_DATA_TESTID.PER_PAGE_SELECTOR,
85
+ ...globalAttributes,
86
+ ...xstyledAttributes,
87
+ onClick: buttonOnClick,
103
88
  children: [
104
89
  pageSize,
105
90
  " / page",
106
91
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_icons.ChevronDown, { color: ["brand-primary", "700"] })
107
92
  ]
108
93
  }
109
- ) })
94
+ )
110
95
  }
111
96
  );
112
97
  };
113
- var PerPageSelector_default = PerPageSelector;
114
- //# sourceMappingURL=PerPageSelector.js.map
98
+ DSPerPageSelector.propTypes = import_react_desc_prop_types.DSPerPageSelectorPropTypesSchema;
99
+ DSPerPageSelector.displayName = import_DSPaginationDefinitions.PerPageSelectorName;
100
+ const DSPerPageSelectorWithSchema = (0, import_ds_props_helpers.describe)(DSPerPageSelector).description("Per Page Selector");
101
+ DSPerPageSelectorWithSchema.propTypes = import_react_desc_prop_types.DSPerPageSelectorPropTypesSchema;
102
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/parts/DSPerPageSelector/index.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import React, { useMemo } from 'react';\nimport { describe, useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';\nimport type { DSDropdownMenuT } from '@elliemae/ds-dropdownmenu';\nimport { DSDropdownMenuV2 } from '@elliemae/ds-dropdownmenu';\nimport { ChevronDown } from '@elliemae/ds-icons';\nimport { perPageSelectorDefaultProps, DSPerPageSelectorPropTypesSchema } from '../../react-desc-prop-types.js';\nimport { PaginationDropdownButton } from '../../styled.js';\nimport { PerPageSelectorName } from '../../DSPaginationDefinitions.js';\nimport { usePerPageSelector } from './usePerPageSelector.js';\nimport { PAGINATION_DATA_TESTID } from '../../PaginationDataTestID.js';\nimport type { DSPaginationT } from '../../react-desc-prop-types.js';\nimport type { DSButtonT } from '@elliemae/ds-button-v2';\n\nconst Header = () => <>{'Per Page'}</>;\n\nexport const DSPerPageSelector: React.ComponentType<DSPaginationT.PerPageSelectorProps> = (props) => {\n const propsWithDefault = useMemoMergePropsWithDefault<DSPaginationT.PerPageSelectorInternalProps>(\n props,\n perPageSelectorDefaultProps,\n );\n useValidateTypescriptPropTypes(propsWithDefault, DSPerPageSelectorPropTypesSchema, PerPageSelectorName);\n\n const { pageSize, onPageSizeChange } = propsWithDefault;\n\n const { actionRef, btnRef, width, isOpened, setIsOpened, options, globalAttributes, xstyledAttributes } =\n usePerPageSelector(propsWithDefault);\n\n const buttonOnClick: DSButtonT.Props['onClick'] = useMemo(() => {\n if (globalAttributes.onClick) return globalAttributes.onClick as DSButtonT.Props['onClick'];\n return () => setIsOpened((prev) => !prev);\n }, [globalAttributes.onClick, setIsOpened]);\n\n return (\n <DSDropdownMenuV2\n isOpened={isOpened}\n options={options}\n selectedOptions={{ [pageSize.toString()]: true }}\n onOptionClick={(_, clickedOption) => {\n onPageSizeChange((clickedOption as DSDropdownMenuT.ItemSingleOptions).value as number);\n setIsOpened(false);\n btnRef.current?.focus();\n }}\n onClickOutside={() => {\n setIsOpened(false);\n btnRef.current?.focus();\n }}\n customOffset={[-23, 2]}\n startPlacementPreference=\"top-start\"\n actionRef={actionRef}\n minWidth={width}\n maxHeight={300}\n HeaderComp={Header}\n >\n <PaginationDropdownButton\n buttonType=\"raw\"\n innerRef={btnRef}\n aria-pressed={isOpened}\n aria-label={`${pageSize} rows per page. Press to select rows per page`}\n data-testid={PAGINATION_DATA_TESTID.PER_PAGE_SELECTOR}\n {...globalAttributes}\n {...xstyledAttributes}\n onClick={buttonOnClick}\n >\n {pageSize} / page\n <ChevronDown color={['brand-primary', '700']} />\n </PaginationDropdownButton>\n </DSDropdownMenuV2>\n );\n};\n\nDSPerPageSelector.propTypes = DSPerPageSelectorPropTypesSchema;\nDSPerPageSelector.displayName = PerPageSelectorName;\nexport const DSPerPageSelectorWithSchema = describe(DSPerPageSelector).description('Per Page Selector');\nDSPerPageSelectorWithSchema.propTypes = DSPerPageSelectorPropTypesSchema;\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADaF;AAbrB,mBAA+B;AAC/B,8BAAuF;AAEvF,6BAAiC;AACjC,sBAA4B;AAC5B,mCAA8E;AAC9E,oBAAyC;AACzC,qCAAoC;AACpC,gCAAmC;AACnC,kCAAuC;AAIvC,MAAM,SAAS,MAAM,2EAAG,sBAAW;AAE5B,MAAM,oBAA6E,CAAC,UAAU;AACnG,QAAM,uBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AACA,8DAA+B,kBAAkB,+DAAkC,kDAAmB;AAEtG,QAAM,EAAE,UAAU,iBAAiB,IAAI;AAEvC,QAAM,EAAE,WAAW,QAAQ,OAAO,UAAU,aAAa,SAAS,kBAAkB,kBAAkB,QACpG,8CAAmB,gBAAgB;AAErC,QAAM,oBAA4C,sBAAQ,MAAM;AAC9D,QAAI,iBAAiB;AAAS,aAAO,iBAAiB;AACtD,WAAO,MAAM,YAAY,CAAC,SAAS,CAAC,IAAI;AAAA,EAC1C,GAAG,CAAC,iBAAiB,SAAS,WAAW,CAAC;AAE1C,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,iBAAiB,EAAE,CAAC,SAAS,SAAS,IAAI,KAAK;AAAA,MAC/C,eAAe,CAAC,GAAG,kBAAkB;AACnC,yBAAkB,cAAoD,KAAe;AACrF,oBAAY,KAAK;AACjB,eAAO,SAAS,MAAM;AAAA,MACxB;AAAA,MACA,gBAAgB,MAAM;AACpB,oBAAY,KAAK;AACjB,eAAO,SAAS,MAAM;AAAA,MACxB;AAAA,MACA,cAAc,CAAC,KAAK,CAAC;AAAA,MACrB,0BAAyB;AAAA,MACzB;AAAA,MACA,UAAU;AAAA,MACV,WAAW;AAAA,MACX,YAAY;AAAA,MAEZ;AAAA,QAAC;AAAA;AAAA,UACC,YAAW;AAAA,UACX,UAAU;AAAA,UACV,gBAAc;AAAA,UACd,cAAY,GAAG;AAAA,UACf,eAAa,mDAAuB;AAAA,UACnC,GAAG;AAAA,UACH,GAAG;AAAA,UACJ,SAAS;AAAA,UAER;AAAA;AAAA,YAAS;AAAA,YACV,4CAAC,+BAAY,OAAO,CAAC,iBAAiB,KAAK,GAAG;AAAA;AAAA;AAAA,MAChD;AAAA;AAAA,EACF;AAEJ;AAEA,kBAAkB,YAAY;AAC9B,kBAAkB,cAAc;AACzB,MAAM,kCAA8B,kCAAS,iBAAiB,EAAE,YAAY,mBAAmB;AACtG,4BAA4B,YAAY;",
6
+ "names": []
7
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+ var usePerPageSelector_exports = {};
26
+ __export(usePerPageSelector_exports, {
27
+ usePerPageSelector: () => usePerPageSelector
28
+ });
29
+ module.exports = __toCommonJS(usePerPageSelector_exports);
30
+ var React = __toESM(require("react"));
31
+ var import_react = require("react");
32
+ var import_lodash = require("lodash");
33
+ var import_ds_props_helpers = require("@elliemae/ds-props-helpers");
34
+ var import_getOptions = require("./getOptions.js");
35
+ const usePerPageSelector = (props) => {
36
+ const { pageSize, perPageOptions, perPageStep, minPerPage, maxPerPage } = props;
37
+ const [isOpened, setIsOpened] = (0, import_react.useState)(false);
38
+ const options = (0, import_react.useMemo)(() => {
39
+ if (perPageOptions)
40
+ return perPageOptions.map(import_getOptions.generateOption);
41
+ return (0, import_getOptions.getOptions)(perPageStep, minPerPage, maxPerPage);
42
+ }, [maxPerPage, minPerPage, perPageOptions, perPageStep]);
43
+ const actionRef = (0, import_react.useRef)({});
44
+ const btnRef = (0, import_react.useRef)(null);
45
+ (0, import_react.useEffect)(() => {
46
+ if (isOpened) {
47
+ actionRef.current.setActiveDescendant(pageSize.toString());
48
+ actionRef.current.scrollOptionIntoView(pageSize.toString());
49
+ }
50
+ }, [isOpened]);
51
+ const width = (0, import_react.useMemo)(() => {
52
+ const maxLength = options.reduce((acc, cur) => Math.max(acc, ("label" in cur ? cur.label : "").length), 0);
53
+ return maxLength * 6 + 90;
54
+ }, [options]);
55
+ const globalAttributes = (0, import_lodash.omit)((0, import_ds_props_helpers.useGetGlobalAttributes)(props), ["shape", "type", "size"]);
56
+ const xstyledAttributes = (0, import_ds_props_helpers.useGetXstyledProps)(props);
57
+ return {
58
+ actionRef,
59
+ btnRef,
60
+ width,
61
+ isOpened,
62
+ setIsOpened,
63
+ options,
64
+ globalAttributes,
65
+ xstyledAttributes
66
+ };
67
+ };
68
+ //# sourceMappingURL=usePerPageSelector.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/parts/DSPerPageSelector/usePerPageSelector.ts", "../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import { useEffect, useMemo, useRef, useState } from 'react';\nimport { omit } from 'lodash';\nimport { useGetGlobalAttributes, useGetXstyledProps } from '@elliemae/ds-props-helpers';\nimport { generateOption, getOptions } from './getOptions.js';\nimport type { DSPaginationT } from '../../react-desc-prop-types.js';\n\nexport const usePerPageSelector = (props: DSPaginationT.PerPageSelectorInternalProps) => {\n const { pageSize, perPageOptions, perPageStep, minPerPage, maxPerPage } = props;\n\n const [isOpened, setIsOpened] = useState(false);\n\n const options = useMemo(() => {\n if (perPageOptions) return perPageOptions.map(generateOption);\n return getOptions(perPageStep, minPerPage, maxPerPage);\n }, [maxPerPage, minPerPage, perPageOptions, perPageStep]);\n\n const actionRef = useRef<Record<string, (dsId: string) => void>>({});\n const btnRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (isOpened) {\n actionRef.current.setActiveDescendant(pageSize.toString());\n actionRef.current.scrollOptionIntoView(pageSize.toString());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpened]);\n\n const width = useMemo(() => {\n const maxLength = options.reduce((acc, cur) => Math.max(acc, ('label' in cur ? cur.label : '').length), 0);\n return maxLength * 6 + 90;\n }, [options]);\n\n const globalAttributes = omit(useGetGlobalAttributes(props), ['shape', 'type', 'size']);\n const xstyledAttributes = useGetXstyledProps(props);\n\n return {\n actionRef,\n btnRef,\n width,\n isOpened,\n setIsOpened,\n options,\n globalAttributes,\n xstyledAttributes,\n };\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAAqD;AACrD,oBAAqB;AACrB,8BAA2D;AAC3D,wBAA2C;AAGpC,MAAM,qBAAqB,CAAC,UAAsD;AACvF,QAAM,EAAE,UAAU,gBAAgB,aAAa,YAAY,WAAW,IAAI;AAE1E,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAS,KAAK;AAE9C,QAAM,cAAU,sBAAQ,MAAM;AAC5B,QAAI;AAAgB,aAAO,eAAe,IAAI,gCAAc;AAC5D,eAAO,8BAAW,aAAa,YAAY,UAAU;AAAA,EACvD,GAAG,CAAC,YAAY,YAAY,gBAAgB,WAAW,CAAC;AAExD,QAAM,gBAAY,qBAA+C,CAAC,CAAC;AACnE,QAAM,aAAS,qBAA0B,IAAI;AAE7C,8BAAU,MAAM;AACd,QAAI,UAAU;AACZ,gBAAU,QAAQ,oBAAoB,SAAS,SAAS,CAAC;AACzD,gBAAU,QAAQ,qBAAqB,SAAS,SAAS,CAAC;AAAA,IAC5D;AAAA,EAEF,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,YAAQ,sBAAQ,MAAM;AAC1B,UAAM,YAAY,QAAQ,OAAO,CAAC,KAAK,QAAQ,KAAK,IAAI,MAAM,WAAW,MAAM,IAAI,QAAQ,IAAI,MAAM,GAAG,CAAC;AACzG,WAAO,YAAY,IAAI;AAAA,EACzB,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,uBAAmB,wBAAK,gDAAuB,KAAK,GAAG,CAAC,SAAS,QAAQ,MAAM,CAAC;AACtF,QAAM,wBAAoB,4CAAmB,KAAK;AAElD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }