@elliemae/ds-pagination 3.57.0-next.40 → 3.57.0-next.41

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 (56) hide show
  1. package/dist/cjs/parts/DSPageNextButton/DSPageNextButton.js +1 -1
  2. package/dist/cjs/parts/DSPageNextButton/DSPageNextButton.js.map +1 -1
  3. package/dist/cjs/parts/DSPagePrevButton/DSPagePrevButton.js +1 -1
  4. package/dist/cjs/parts/DSPagePrevButton/DSPagePrevButton.js.map +1 -1
  5. package/dist/cjs/parts/DSPaginationContainer/DSPaginationContainer.js +1 -1
  6. package/dist/cjs/parts/DSPaginationContainer/DSPaginationContainer.js.map +1 -1
  7. package/dist/cjs/parts/DSPaginator/DSPaginator.js +86 -17
  8. package/dist/cjs/parts/DSPaginator/DSPaginator.js.map +3 -3
  9. package/dist/cjs/parts/DSPaginator/config/createPaginatorHeader.js +5 -4
  10. package/dist/cjs/parts/DSPaginator/config/createPaginatorHeader.js.map +2 -2
  11. package/dist/cjs/parts/DSPaginator/config/getOptions.js +4 -4
  12. package/dist/cjs/parts/DSPaginator/config/getOptions.js.map +2 -2
  13. package/dist/cjs/parts/DSPaginator/config/usePaginator.js +17 -18
  14. package/dist/cjs/parts/DSPaginator/config/usePaginator.js.map +2 -2
  15. package/dist/cjs/parts/DSPaginator/styled.js +42 -2
  16. package/dist/cjs/parts/DSPaginator/styled.js.map +3 -3
  17. package/dist/cjs/parts/DSPerPageSelector/DSPerPageSelector.js +24 -8
  18. package/dist/cjs/parts/DSPerPageSelector/DSPerPageSelector.js.map +2 -2
  19. package/dist/cjs/parts/DSPerPageSelector/config/usePerPageSelector.js +6 -6
  20. package/dist/cjs/parts/DSPerPageSelector/config/usePerPageSelector.js.map +2 -2
  21. package/dist/cjs/parts/DSPerPageSelector/styled.js +29 -2
  22. package/dist/cjs/parts/DSPerPageSelector/styled.js.map +2 -2
  23. package/dist/cjs/parts/{DSPaginator/config → shared}/useOnElementOnResize.js.map +1 -1
  24. package/dist/esm/parts/DSPageNextButton/DSPageNextButton.js +1 -1
  25. package/dist/esm/parts/DSPageNextButton/DSPageNextButton.js.map +1 -1
  26. package/dist/esm/parts/DSPagePrevButton/DSPagePrevButton.js +1 -1
  27. package/dist/esm/parts/DSPagePrevButton/DSPagePrevButton.js.map +1 -1
  28. package/dist/esm/parts/DSPaginationContainer/DSPaginationContainer.js +1 -1
  29. package/dist/esm/parts/DSPaginationContainer/DSPaginationContainer.js.map +1 -1
  30. package/dist/esm/parts/DSPaginator/DSPaginator.js +87 -18
  31. package/dist/esm/parts/DSPaginator/DSPaginator.js.map +3 -3
  32. package/dist/esm/parts/DSPaginator/config/createPaginatorHeader.js +6 -5
  33. package/dist/esm/parts/DSPaginator/config/createPaginatorHeader.js.map +2 -2
  34. package/dist/esm/parts/DSPaginator/config/getOptions.js +4 -4
  35. package/dist/esm/parts/DSPaginator/config/getOptions.js.map +2 -2
  36. package/dist/esm/parts/DSPaginator/config/usePaginator.js +18 -19
  37. package/dist/esm/parts/DSPaginator/config/usePaginator.js.map +2 -2
  38. package/dist/esm/parts/DSPaginator/styled.js +42 -2
  39. package/dist/esm/parts/DSPaginator/styled.js.map +2 -2
  40. package/dist/esm/parts/DSPerPageSelector/DSPerPageSelector.js +26 -10
  41. package/dist/esm/parts/DSPerPageSelector/DSPerPageSelector.js.map +2 -2
  42. package/dist/esm/parts/DSPerPageSelector/config/usePerPageSelector.js +6 -6
  43. package/dist/esm/parts/DSPerPageSelector/config/usePerPageSelector.js.map +2 -2
  44. package/dist/esm/parts/DSPerPageSelector/styled.js +29 -2
  45. package/dist/esm/parts/DSPerPageSelector/styled.js.map +2 -2
  46. package/dist/esm/parts/{DSPaginator/config → shared}/useOnElementOnResize.js.map +1 -1
  47. package/dist/types/parts/DSPaginator/config/createPaginatorHeader.d.ts +2 -1
  48. package/dist/types/parts/DSPaginator/config/getOptions.d.ts +1 -0
  49. package/dist/types/parts/DSPaginator/config/usePaginator.d.ts +4 -0
  50. package/dist/types/parts/DSPaginator/styled.d.ts +2 -0
  51. package/dist/types/parts/DSPerPageSelector/config/usePerPageSelector.d.ts +2 -1
  52. package/dist/types/parts/DSPerPageSelector/styled.d.ts +1 -0
  53. package/package.json +13 -13
  54. /package/dist/cjs/parts/{DSPaginator/config → shared}/useOnElementOnResize.js +0 -0
  55. /package/dist/esm/parts/{DSPaginator/config → shared}/useOnElementOnResize.js +0 -0
  56. /package/dist/types/parts/{DSPaginator/config → shared}/useOnElementOnResize.d.ts +0 -0
@@ -46,7 +46,7 @@ const NextPageButton = (0, import_ds_system.styled)(import_ds_button_v2.DSButton
46
46
  slot: import_constants.PAGE_NEXT_BUTTON_SLOTS.PAGE_NEXT_BUTTON,
47
47
  preserveLegacyDataTestId: true
48
48
  })`
49
- height: 42px;
49
+ min-height: 42px;
50
50
  display: grid;
51
51
  place-items: center;
52
52
  position: relative;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/parts/DSPageNextButton/DSPageNextButton.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import { describe } from '@elliemae/ds-props-helpers';\nimport { styled } from '@elliemae/ds-system';\nimport React from 'react';\n\nimport { DSButtonV3 } from '@elliemae/ds-button-v2';\nimport { ChevronRight } from '@elliemae/ds-icons';\nimport { usePageNextButton } from './config/usePageNextButton.js';\nimport {\n DSPageNextButtonName,\n DSPaginationName,\n PAGE_NEXT_BUTTON_DATA_TESTID,\n PAGE_NEXT_BUTTON_SLOTS,\n} from './constants/index.js';\nimport { type DSPageNextButtonT, DSPageNextButtonPropTypesSchema } from './react-desc-prop-types.js';\n\nconst NextPageButton = styled(DSButtonV3, {\n name: DSPaginationName,\n slot: PAGE_NEXT_BUTTON_SLOTS.PAGE_NEXT_BUTTON,\n preserveLegacyDataTestId: true,\n})`\n height: 42px;\n display: grid;\n place-items: center;\n position: relative;\n padding-left: 8px;\n padding-right: 8px;\n border-radius: 0;\n :focus {\n &:after {\n display: block;\n content: ' ';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid ${({ theme }) => theme.colors.brand[700]};\n pointer-events: none;\n z-index: 7;\n }\n }\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n`;\n\nconst DSPageNextButton: React.ComponentType<DSPageNextButtonT.Props> = (props) => {\n const {\n propsWithDefault: { canNextPage, onNextPage },\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n } = usePageNextButton(props);\n\n return (\n <NextPageButton\n disabled={!canNextPage}\n buttonType=\"raw\"\n data-testid={PAGE_NEXT_BUTTON_DATA_TESTID.PAGE_NEXT_BUTTON}\n aria-label=\"Go to next page\"\n {...globalAttributes}\n {...xstyledProps}\n {...ownerPropsConfig}\n onClick={() => {\n if (canNextPage) onNextPage();\n }}\n >\n <ChevronRight color={canNextPage ? ['brand-primary', '700'] : ['neutral', '500']} />\n </NextPageButton>\n );\n};\n\nDSPageNextButton.displayName = DSPageNextButtonName;\nconst DSPageNextButtonWithSchema = describe(DSPageNextButton);\nDSPageNextButtonWithSchema.propTypes = DSPageNextButtonPropTypesSchema;\n\nexport { DSPageNextButton, DSPageNextButtonWithSchema };\n", "import * as React from 'react';\nexport { React };\n"],
4
+ "sourcesContent": ["import { describe } from '@elliemae/ds-props-helpers';\nimport { styled } from '@elliemae/ds-system';\nimport React from 'react';\n\nimport { DSButtonV3 } from '@elliemae/ds-button-v2';\nimport { ChevronRight } from '@elliemae/ds-icons';\nimport { usePageNextButton } from './config/usePageNextButton.js';\nimport {\n DSPageNextButtonName,\n DSPaginationName,\n PAGE_NEXT_BUTTON_DATA_TESTID,\n PAGE_NEXT_BUTTON_SLOTS,\n} from './constants/index.js';\nimport { type DSPageNextButtonT, DSPageNextButtonPropTypesSchema } from './react-desc-prop-types.js';\n\nconst NextPageButton = styled(DSButtonV3, {\n name: DSPaginationName,\n slot: PAGE_NEXT_BUTTON_SLOTS.PAGE_NEXT_BUTTON,\n preserveLegacyDataTestId: true,\n})`\n min-height: 42px;\n display: grid;\n place-items: center;\n position: relative;\n padding-left: 8px;\n padding-right: 8px;\n border-radius: 0;\n :focus {\n &:after {\n display: block;\n content: ' ';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid ${({ theme }) => theme.colors.brand[700]};\n pointer-events: none;\n z-index: 7;\n }\n }\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n`;\n\nconst DSPageNextButton: React.ComponentType<DSPageNextButtonT.Props> = (props) => {\n const {\n propsWithDefault: { canNextPage, onNextPage },\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n } = usePageNextButton(props);\n\n return (\n <NextPageButton\n disabled={!canNextPage}\n buttonType=\"raw\"\n data-testid={PAGE_NEXT_BUTTON_DATA_TESTID.PAGE_NEXT_BUTTON}\n aria-label=\"Go to next page\"\n {...globalAttributes}\n {...xstyledProps}\n {...ownerPropsConfig}\n onClick={() => {\n if (canNextPage) onNextPage();\n }}\n >\n <ChevronRight color={canNextPage ? ['brand-primary', '700'] : ['neutral', '500']} />\n </NextPageButton>\n );\n};\n\nDSPageNextButton.displayName = DSPageNextButtonName;\nconst DSPageNextButtonWithSchema = describe(DSPageNextButton);\nDSPageNextButtonWithSchema.propTypes = DSPageNextButtonPropTypesSchema;\n\nexport { DSPageNextButton, DSPageNextButtonWithSchema };\n", "import * as React from 'react';\nexport { React };\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADiEjB;AAjEN,8BAAyB;AACzB,uBAAuB;AAGvB,0BAA2B;AAC3B,sBAA6B;AAC7B,+BAAkC;AAClC,uBAKO;AACP,mCAAwE;AAExE,MAAM,qBAAiB,yBAAO,gCAAY;AAAA,EACxC,MAAM;AAAA,EACN,MAAM,wCAAuB;AAAA,EAC7B,0BAA0B;AAC5B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAiByB,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKpD,CAAC,UAAW,MAAM,WAAW,gBAAgB,SAAU;AAAA;AAGnE,MAAM,mBAAiE,CAAC,UAAU;AAChF,QAAM;AAAA,IACJ,kBAAkB,EAAE,aAAa,WAAW;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,4CAAkB,KAAK;AAE3B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,CAAC;AAAA,MACX,YAAW;AAAA,MACX,eAAa,8CAA6B;AAAA,MAC1C,cAAW;AAAA,MACV,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACJ,SAAS,MAAM;AACb,YAAI,YAAa,YAAW;AAAA,MAC9B;AAAA,MAEA,sDAAC,gCAAa,OAAO,cAAc,CAAC,iBAAiB,KAAK,IAAI,CAAC,WAAW,KAAK,GAAG;AAAA;AAAA,EACpF;AAEJ;AAEA,iBAAiB,cAAc;AAC/B,MAAM,iCAA6B,kCAAS,gBAAgB;AAC5D,2BAA2B,YAAY;",
6
6
  "names": []
7
7
  }
@@ -46,7 +46,7 @@ const PreviousPageButton = (0, import_ds_system.styled)(import_ds_button_v2.DSBu
46
46
  slot: import_constants.PAGE_PREV_BUTTON_SLOTS.PREVIOUS_BUTTON,
47
47
  preserveLegacyDataTestId: true
48
48
  })`
49
- height: 42px;
49
+ min-height: 42px;
50
50
  display: grid;
51
51
  place-items: center;
52
52
  position: relative;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/parts/DSPagePrevButton/DSPagePrevButton.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import { describe } from '@elliemae/ds-props-helpers';\nimport { styled } from '@elliemae/ds-system';\nimport React from 'react';\n\nimport { DSButtonV3 } from '@elliemae/ds-button-v2';\nimport { ChevronLeft } from '@elliemae/ds-icons';\nimport { usePagePrevButton } from './config/usePagePrevButton.js';\nimport {\n DSPagePrevButtonName,\n DSPaginationName,\n PAGE_PREV_BUTTON_DATA_TESTID,\n PAGE_PREV_BUTTON_SLOTS,\n} from './constants/index.js';\nimport { type DSPagePrevButtonT, DSPagePrevButtonPropTypesSchema } from './react-desc-prop-types.js';\n\nconst PreviousPageButton = styled(DSButtonV3, {\n name: DSPaginationName,\n slot: PAGE_PREV_BUTTON_SLOTS.PREVIOUS_BUTTON,\n preserveLegacyDataTestId: true,\n})`\n height: 42px;\n display: grid;\n place-items: center;\n position: relative;\n padding-left: 8px;\n padding-right: 8px;\n border-radius: 0;\n :focus {\n &:after {\n display: block;\n content: ' ';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid ${({ theme }) => theme.colors.brand[700]};\n pointer-events: none;\n z-index: 7;\n }\n }\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n`;\n\nconst DSPagePrevButton: React.ComponentType<DSPagePrevButtonT.Props> = (props) => {\n const {\n propsWithDefault: { canPreviousPage, onPreviousPage },\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n } = usePagePrevButton(props);\n\n return (\n <PreviousPageButton\n disabled={!canPreviousPage}\n buttonType=\"raw\"\n data-testid={PAGE_PREV_BUTTON_DATA_TESTID.PREVIOUS_BUTTON}\n aria-label=\"Go to previous page\"\n {...globalAttributes}\n {...xstyledProps}\n {...ownerPropsConfig}\n onClick={() => {\n if (canPreviousPage) onPreviousPage();\n }}\n >\n <ChevronLeft color={canPreviousPage ? ['brand-primary', '700'] : ['neutral', '500']} />\n </PreviousPageButton>\n );\n};\n\nDSPagePrevButton.displayName = DSPagePrevButtonName;\nconst DSPagePrevButtonWithSchema = describe(DSPagePrevButton);\nDSPagePrevButtonWithSchema.propTypes = DSPagePrevButtonPropTypesSchema;\n\nexport { DSPagePrevButton, DSPagePrevButtonWithSchema };\n", "import * as React from 'react';\nexport { React };\n"],
4
+ "sourcesContent": ["import { describe } from '@elliemae/ds-props-helpers';\nimport { styled } from '@elliemae/ds-system';\nimport React from 'react';\n\nimport { DSButtonV3 } from '@elliemae/ds-button-v2';\nimport { ChevronLeft } from '@elliemae/ds-icons';\nimport { usePagePrevButton } from './config/usePagePrevButton.js';\nimport {\n DSPagePrevButtonName,\n DSPaginationName,\n PAGE_PREV_BUTTON_DATA_TESTID,\n PAGE_PREV_BUTTON_SLOTS,\n} from './constants/index.js';\nimport { type DSPagePrevButtonT, DSPagePrevButtonPropTypesSchema } from './react-desc-prop-types.js';\n\nconst PreviousPageButton = styled(DSButtonV3, {\n name: DSPaginationName,\n slot: PAGE_PREV_BUTTON_SLOTS.PREVIOUS_BUTTON,\n preserveLegacyDataTestId: true,\n})`\n min-height: 42px;\n display: grid;\n place-items: center;\n position: relative;\n padding-left: 8px;\n padding-right: 8px;\n border-radius: 0;\n :focus {\n &:after {\n display: block;\n content: ' ';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 2px solid ${({ theme }) => theme.colors.brand[700]};\n pointer-events: none;\n z-index: 7;\n }\n }\n cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};\n`;\n\nconst DSPagePrevButton: React.ComponentType<DSPagePrevButtonT.Props> = (props) => {\n const {\n propsWithDefault: { canPreviousPage, onPreviousPage },\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n } = usePagePrevButton(props);\n\n return (\n <PreviousPageButton\n disabled={!canPreviousPage}\n buttonType=\"raw\"\n data-testid={PAGE_PREV_BUTTON_DATA_TESTID.PREVIOUS_BUTTON}\n aria-label=\"Go to previous page\"\n {...globalAttributes}\n {...xstyledProps}\n {...ownerPropsConfig}\n onClick={() => {\n if (canPreviousPage) onPreviousPage();\n }}\n >\n <ChevronLeft color={canPreviousPage ? ['brand-primary', '700'] : ['neutral', '500']} />\n </PreviousPageButton>\n );\n};\n\nDSPagePrevButton.displayName = DSPagePrevButtonName;\nconst DSPagePrevButtonWithSchema = describe(DSPagePrevButton);\nDSPagePrevButtonWithSchema.propTypes = DSPagePrevButtonPropTypesSchema;\n\nexport { DSPagePrevButton, DSPagePrevButtonWithSchema };\n", "import * as React from 'react';\nexport { React };\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADiEjB;AAjEN,8BAAyB;AACzB,uBAAuB;AAGvB,0BAA2B;AAC3B,sBAA4B;AAC5B,+BAAkC;AAClC,uBAKO;AACP,mCAAwE;AAExE,MAAM,yBAAqB,yBAAO,gCAAY;AAAA,EAC5C,MAAM;AAAA,EACN,MAAM,wCAAuB;AAAA,EAC7B,0BAA0B;AAC5B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAiByB,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKpD,CAAC,UAAW,MAAM,WAAW,gBAAgB,SAAU;AAAA;AAGnE,MAAM,mBAAiE,CAAC,UAAU;AAChF,QAAM;AAAA,IACJ,kBAAkB,EAAE,iBAAiB,eAAe;AAAA,IACpD;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,4CAAkB,KAAK;AAE3B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,CAAC;AAAA,MACX,YAAW;AAAA,MACX,eAAa,8CAA6B;AAAA,MAC1C,cAAW;AAAA,MACV,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACJ,SAAS,MAAM;AACb,YAAI,gBAAiB,gBAAe;AAAA,MACtC;AAAA,MAEA,sDAAC,+BAAY,OAAO,kBAAkB,CAAC,iBAAiB,KAAK,IAAI,CAAC,WAAW,KAAK,GAAG;AAAA;AAAA,EACvF;AAEJ;AAEA,iBAAiB,cAAc;AAC/B,MAAM,iCAA6B,kCAAS,gBAAgB;AAC5D,2BAA2B,YAAY;",
6
6
  "names": []
7
7
  }
@@ -41,7 +41,7 @@ var import_react_desc_prop_types = require("./react-desc-prop-types.js");
41
41
  var import_usePaginationContainer = require("./config/usePaginationContainer.js");
42
42
  var import_constants = require("./constants/index.js");
43
43
  const StyledPaginationContainer = (0, import_ds_system.styled)(import_ds_grid.Grid, { name: import_constants.DSPaginationName, slot: import_constants.PAGINATION_CONTAINER_SLOTS.ROOT })`
44
- height: 42px;
44
+ min-height: 42px;
45
45
  max-width: 100%;
46
46
  align-items: center;
47
47
  justify-content: center;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/parts/DSPaginationContainer/DSPaginationContainer.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import React from 'react';\nimport { describe, type XstyledProps } from '@elliemae/ds-props-helpers';\nimport { styled, xStyledCommonProps } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { type DSPaginationContainerT, DSPaginationContainerPropTypesSchema } from './react-desc-prop-types.js';\nimport { usePaginationContainer } from './config/usePaginationContainer.js';\nimport {\n DSPaginationContainerName,\n DSPaginationName,\n PAGINATION_CONTAINER_DATA_TESTID,\n PAGINATION_CONTAINER_SLOTS,\n} from './constants/index.js';\n\nconst StyledPaginationContainer = styled(Grid, { name: DSPaginationName, slot: PAGINATION_CONTAINER_SLOTS.ROOT })<\n React.ComponentProps<typeof Grid> & XstyledProps\n>`\n height: 42px;\n max-width: 100%;\n align-items: center;\n justify-content: center;\n box-shadow: 0 -1px 3px 0 rgba(0, 0, 0, 0.5);\n position: relative;\n ${xStyledCommonProps}\n`;\n\nconst StyledPaginationWrapper = styled('div', { name: DSPaginationName, slot: PAGINATION_CONTAINER_SLOTS.WRAPPER })`\n display: grid;\n grid-auto-flow: column;\n justify-content: center;\n align-items: center;\n`;\n\nconst DSPaginationContainer: React.ComponentType<DSPaginationContainerT.Props> = (props) => {\n const { xstyledProps, globalAttributes, ownerPropsConfig } = usePaginationContainer(props);\n\n return (\n <StyledPaginationContainer\n data-testid={PAGINATION_CONTAINER_DATA_TESTID.ROOT}\n {...globalAttributes}\n {...xstyledProps}\n {...ownerPropsConfig}\n cols={['minmax(auto, 80%)']}\n >\n <StyledPaginationWrapper {...ownerPropsConfig}>{props.children}</StyledPaginationWrapper>\n </StyledPaginationContainer>\n );\n};\n\nDSPaginationContainer.displayName = DSPaginationContainerName;\nconst DSPaginationContainerWithSchema = describe(DSPaginationContainer);\nDSPaginationContainerWithSchema.propTypes = DSPaginationContainerPropTypesSchema;\n\nexport { DSPaginationContainer, DSPaginationContainerWithSchema };\n", "import * as React from 'react';\nexport { React };\n"],
4
+ "sourcesContent": ["import React from 'react';\nimport { describe, type XstyledProps } from '@elliemae/ds-props-helpers';\nimport { styled, xStyledCommonProps } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { type DSPaginationContainerT, DSPaginationContainerPropTypesSchema } from './react-desc-prop-types.js';\nimport { usePaginationContainer } from './config/usePaginationContainer.js';\nimport {\n DSPaginationContainerName,\n DSPaginationName,\n PAGINATION_CONTAINER_DATA_TESTID,\n PAGINATION_CONTAINER_SLOTS,\n} from './constants/index.js';\n\nconst StyledPaginationContainer = styled(Grid, { name: DSPaginationName, slot: PAGINATION_CONTAINER_SLOTS.ROOT })<\n React.ComponentProps<typeof Grid> & XstyledProps\n>`\n min-height: 42px;\n max-width: 100%;\n align-items: center;\n justify-content: center;\n box-shadow: 0 -1px 3px 0 rgba(0, 0, 0, 0.5);\n position: relative;\n ${xStyledCommonProps}\n`;\n\nconst StyledPaginationWrapper = styled('div', { name: DSPaginationName, slot: PAGINATION_CONTAINER_SLOTS.WRAPPER })`\n display: grid;\n grid-auto-flow: column;\n justify-content: center;\n align-items: center;\n`;\n\nconst DSPaginationContainer: React.ComponentType<DSPaginationContainerT.Props> = (props) => {\n const { xstyledProps, globalAttributes, ownerPropsConfig } = usePaginationContainer(props);\n\n return (\n <StyledPaginationContainer\n data-testid={PAGINATION_CONTAINER_DATA_TESTID.ROOT}\n {...globalAttributes}\n {...xstyledProps}\n {...ownerPropsConfig}\n cols={['minmax(auto, 80%)']}\n >\n <StyledPaginationWrapper {...ownerPropsConfig}>{props.children}</StyledPaginationWrapper>\n </StyledPaginationContainer>\n );\n};\n\nDSPaginationContainer.displayName = DSPaginationContainerName;\nconst DSPaginationContainerWithSchema = describe(DSPaginationContainer);\nDSPaginationContainerWithSchema.propTypes = DSPaginationContainerPropTypesSchema;\n\nexport { DSPaginationContainer, DSPaginationContainerWithSchema };\n", "import * as React from 'react';\nexport { React };\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;AD2CjB;AA1CN,8BAA4C;AAC5C,uBAA2C;AAC3C,qBAAqB;AACrB,mCAAkF;AAClF,oCAAuC;AACvC,uBAKO;AAEP,MAAM,gCAA4B,yBAAO,qBAAM,EAAE,MAAM,mCAAkB,MAAM,4CAA2B,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAS5G,mCAAkB;AAAA;AAGtB,MAAM,8BAA0B,yBAAO,OAAO,EAAE,MAAM,mCAAkB,MAAM,4CAA2B,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAOlH,MAAM,wBAA2E,CAAC,UAAU;AAC1F,QAAM,EAAE,cAAc,kBAAkB,iBAAiB,QAAI,sDAAuB,KAAK;AAEzF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,kDAAiC;AAAA,MAC7C,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACJ,MAAM,CAAC,mBAAmB;AAAA,MAE1B,sDAAC,2BAAyB,GAAG,kBAAmB,gBAAM,UAAS;AAAA;AAAA,EACjE;AAEJ;AAEA,sBAAsB,cAAc;AACpC,MAAM,sCAAkC,kCAAS,qBAAqB;AACtE,gCAAgC,YAAY;",
6
6
  "names": []
7
7
  }
@@ -34,9 +34,8 @@ __export(DSPaginator_exports, {
34
34
  module.exports = __toCommonJS(DSPaginator_exports);
35
35
  var React = __toESM(require("react"));
36
36
  var import_jsx_runtime = require("react/jsx-runtime");
37
- var import_react = require("react");
37
+ var import_react = __toESM(require("react"));
38
38
  var import_ds_circular_progress_indicator = require("@elliemae/ds-circular-progress-indicator");
39
- var import_ds_dropdownmenu_v2 = require("@elliemae/ds-dropdownmenu-v2");
40
39
  var import_ds_grid = require("@elliemae/ds-grid");
41
40
  var import_ds_icons = require("@elliemae/ds-icons");
42
41
  var import_ds_props_helpers = require("@elliemae/ds-props-helpers");
@@ -58,21 +57,25 @@ const DSPaginator = (props) => {
58
57
  pageInfoWidth,
59
58
  options,
60
59
  isOpened,
61
- setIsOpened,
62
- detailWidth,
63
60
  actionRef,
64
- onKeyDown
61
+ widestChildRef,
62
+ pageInfoRef,
63
+ checkMarkRef,
64
+ checkMarkWidth,
65
+ onKeyDown,
66
+ setIsOpened
65
67
  } = (0, import_usePaginator.usePaginator)(props);
68
+ const widestTypographyRef = import_react.default.useRef(null);
66
69
  const Header = (0, import_react.useMemo)(
67
- () => (0, import_createPaginatorHeader.createPaginatorHeader)({ pageDetailsTitle, pageInfoWidth, ownerPropsConfig }),
68
- [pageDetailsTitle, pageInfoWidth, ownerPropsConfig]
70
+ () => (0, import_createPaginatorHeader.createPaginatorHeader)({ pageDetailsTitle, pageInfoWidth, ownerPropsConfig, checkMarkWidth }),
71
+ [pageDetailsTitle, pageInfoWidth, ownerPropsConfig, checkMarkWidth]
69
72
  );
70
73
  const buttonOnClick = (0, import_react.useMemo)(() => {
71
74
  if (globalAttributes.onClick) return globalAttributes.onClick;
72
75
  return () => setIsOpened((prev) => !prev);
73
76
  }, [globalAttributes.onClick, setIsOpened]);
74
77
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
75
- import_ds_dropdownmenu_v2.DSDropdownMenuV2,
78
+ import_styled.StyledDropdown,
76
79
  {
77
80
  isOpened,
78
81
  options,
@@ -86,11 +89,24 @@ const DSPaginator = (props) => {
86
89
  setIsOpened(false);
87
90
  btnRef.current?.focus();
88
91
  },
89
- customOffset: [-23, 2],
92
+ customOffset: [-(checkMarkWidth + 7), 2],
90
93
  startPlacementPreference: "top-start",
91
94
  actionRef,
92
95
  onKeyDown,
93
- minWidth: pageDetails.length !== 0 ? btnWidth + 23 : pageCount.toString().length * 6 + 90,
96
+ minWidth: pageDetails.length !== 0 ? btnWidth + checkMarkWidth + 7 : (
97
+ /**
98
+ * Structure of the width:
99
+ * 16px (left padding)
100
+ * + chevronWidth (size of the chevron icon)
101
+ * + 8px (spacing between chevron and text)
102
+ * + pageCount length in ch
103
+ * + 16px (right padding)
104
+ * + a small scrollbar placeholder (to avoid text wrapping when scrollbars appear)
105
+ * By using `calc()` + `ch` units, the component stays responsive to font-size changes
106
+ * without requiring an extra ref to measure the page count text width.
107
+ */
108
+ `calc(${checkMarkWidth + 60}px + ${pageCount.toString().length}ch)`
109
+ ),
94
110
  maxHeight: 300,
95
111
  HeaderComp: Header,
96
112
  children: [
@@ -108,17 +124,39 @@ const DSPaginator = (props) => {
108
124
  ...ownerPropsConfig,
109
125
  onClick: buttonOnClick,
110
126
  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,
127
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { ref: pageInfoRef, children: [
128
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
129
+ import_ds_typography.DSTypography,
130
+ {
131
+ id: "typography-page-index",
132
+ variant: "b1",
133
+ as: "span",
134
+ fontWeight: "semibold",
135
+ textAlign: "start",
136
+ children: pageIndex
137
+ }
138
+ ),
139
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
140
+ import_ds_typography.DSTypography,
141
+ {
142
+ variant: "b1",
143
+ as: "span",
144
+ className: "typography-page-info-and-detail",
145
+ children: [
146
+ "/ ",
147
+ pageCount
148
+ ]
149
+ }
150
+ )
151
+ ] }),
114
152
  isLoadingPageCount && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_circular_progress_indicator.DSCircularIndeterminateIndicator, { ml: "xxxs", mr: "xxxs", size: "xs" }),
115
153
  pageDetails.length !== 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
116
154
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DSPaginationSeparator.DSPaginationSeparator, { height: "12px", ml: "12px", mr: "xxxs", ...ownerPropsConfig }),
117
155
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
118
156
  import_ds_typography.DSTypography,
119
157
  {
120
- fontSize: "13px",
121
- w: detailWidth,
158
+ className: "typography-page-info-and-detail",
159
+ innerRef: widestTypographyRef,
122
160
  mr: "xxs",
123
161
  variant: "b1",
124
162
  as: "span",
@@ -128,11 +166,42 @@ const DSPaginator = (props) => {
128
166
  }
129
167
  )
130
168
  ] }),
131
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_icons.ChevronDown, { ml: "xxxs", color: ["brand-primary", "700"] })
169
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_icons.ChevronDown, { ml: "xxxs", color: ["brand-primary", "700"], innerRef: checkMarkRef })
132
170
  ] })
133
171
  }
134
172
  ),
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)) })
173
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_grid.Grid, { style: { position: "relative" }, children: pageDetails.map((pageDetail, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
174
+ import_styled.InvisibleDiv,
175
+ {
176
+ innerRef: (el) => {
177
+ if (!el) return;
178
+ if (!widestChildRef.current) {
179
+ widestChildRef.current = el;
180
+ return;
181
+ }
182
+ if (el.offsetWidth > widestChildRef.current.offsetWidth) {
183
+ widestChildRef.current = el;
184
+ }
185
+ if (index === pageDetails.length - 1) {
186
+ widestTypographyRef.current?.style.setProperty("min-width", `${widestChildRef.current?.offsetWidth}px`);
187
+ }
188
+ },
189
+ "data-testid": "ds-pagination-invisible-detail-for-width-calc",
190
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
191
+ import_ds_typography.DSTypography,
192
+ {
193
+ className: "typography-page-info-and-detail",
194
+ mr: "xxs",
195
+ variant: "b1",
196
+ as: "span",
197
+ fontWeight: "semibold",
198
+ textAlign: "start",
199
+ children: pageDetail
200
+ }
201
+ )
202
+ },
203
+ pageDetail
204
+ )) })
136
205
  ]
137
206
  }
138
207
  );
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/parts/DSPaginator/DSPaginator.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import React, { useMemo } from 'react';\nimport type { DSButtonT } from '@elliemae/ds-button-v2';\nimport { DSCircularIndeterminateIndicator } from '@elliemae/ds-circular-progress-indicator';\nimport { DSDropdownMenuV2, type DSDropdownMenuT } from '@elliemae/ds-dropdownmenu-v2';\nimport { Grid } from '@elliemae/ds-grid';\nimport { ChevronDown } from '@elliemae/ds-icons';\nimport { describe } from '@elliemae/ds-props-helpers';\nimport { DSTypography } from '@elliemae/ds-typography';\nimport { DSPaginationSeparator } from '../DSPaginationSeparator/index.js';\nimport { createPaginatorHeader } from './config/createPaginatorHeader.js';\nimport { usePaginator } from './config/usePaginator.js';\nimport { DSPaginatorName, PAGINATOR_DATA_TESTID } from './constants/index.js';\nimport { DSPaginatorPropTypesSchema, type DSPaginatorT } from './react-desc-prop-types.js';\nimport { PaginationDropdownButtonPaginator, InvisibleDiv } from './styled.js';\n\nconst DSPaginator: React.ComponentType<DSPaginatorT.Props> = (props) => {\n const {\n propsWithDefault: { pageIndex, pageCount, isLoadingPageCount, onPageChange, pageDetails, pageDetailsTitle },\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n btnRef,\n btnWidth,\n pageInfoWidth,\n options,\n isOpened,\n setIsOpened,\n detailWidth,\n actionRef,\n onKeyDown,\n } = usePaginator(props);\n\n const Header = useMemo(\n () => createPaginatorHeader({ pageDetailsTitle, pageInfoWidth, ownerPropsConfig }),\n [pageDetailsTitle, pageInfoWidth, ownerPropsConfig],\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 <PaginationDropdownButtonPaginator\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={PAGINATOR_DATA_TESTID.PAGINATOR}\n {...globalAttributes}\n {...xstyledProps}\n {...ownerPropsConfig}\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\" {...ownerPropsConfig} />\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 </PaginationDropdownButtonPaginator>\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.displayName = DSPaginatorName;\nconst DSPaginatorWithSchema = describe(DSPaginator);\nDSPaginatorWithSchema.propTypes = DSPaginatorPropTypesSchema;\n\nexport { DSPaginator, DSPaginatorWithSchema };\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["import React, { useMemo } from 'react';\nimport type { DSButtonT } from '@elliemae/ds-button-v2';\nimport { DSCircularIndeterminateIndicator } from '@elliemae/ds-circular-progress-indicator';\nimport { type DSDropdownMenuT } from '@elliemae/ds-dropdownmenu-v2';\nimport { Grid } from '@elliemae/ds-grid';\nimport { ChevronDown } from '@elliemae/ds-icons';\nimport { describe } from '@elliemae/ds-props-helpers';\nimport { DSTypography } from '@elliemae/ds-typography';\nimport { DSPaginationSeparator } from '../DSPaginationSeparator/index.js';\nimport { createPaginatorHeader } from './config/createPaginatorHeader.js';\nimport { usePaginator } from './config/usePaginator.js';\nimport { DSPaginatorName, PAGINATOR_DATA_TESTID } from './constants/index.js';\nimport { DSPaginatorPropTypesSchema, type DSPaginatorT } from './react-desc-prop-types.js';\nimport { InvisibleDiv, PaginationDropdownButtonPaginator, StyledDropdown } from './styled.js';\n\nconst DSPaginator: React.ComponentType<DSPaginatorT.Props> = (props) => {\n const {\n propsWithDefault: { pageIndex, pageCount, isLoadingPageCount, onPageChange, pageDetails, pageDetailsTitle },\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n btnRef,\n btnWidth,\n pageInfoWidth,\n options,\n isOpened,\n actionRef,\n widestChildRef,\n pageInfoRef,\n checkMarkRef,\n checkMarkWidth,\n onKeyDown,\n setIsOpened,\n } = usePaginator(props);\n\n const widestTypographyRef = React.useRef<HTMLDivElement>(null);\n\n const Header = useMemo(\n () => createPaginatorHeader({ pageDetailsTitle, pageInfoWidth, ownerPropsConfig, checkMarkWidth }),\n [pageDetailsTitle, pageInfoWidth, ownerPropsConfig, checkMarkWidth],\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 <StyledDropdown\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={[-(checkMarkWidth + 7), 2]}\n startPlacementPreference=\"top-start\"\n actionRef={actionRef}\n onKeyDown={onKeyDown}\n minWidth={\n pageDetails.length !== 0\n ? btnWidth + checkMarkWidth + 7\n : /**\n * Structure of the width:\n * 16px (left padding)\n * + chevronWidth (size of the chevron icon)\n * + 8px (spacing between chevron and text)\n * + pageCount length in ch\n * + 16px (right padding)\n * + a small scrollbar placeholder (to avoid text wrapping when scrollbars appear)\n * By using `calc()` + `ch` units, the component stays responsive to font-size changes\n * without requiring an extra ref to measure the page count text width.\n */\n\n `calc(${checkMarkWidth + 60}px + ${pageCount.toString().length}ch)`\n }\n maxHeight={300}\n HeaderComp={Header}\n >\n <PaginationDropdownButtonPaginator\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={PAGINATOR_DATA_TESTID.PAGINATOR}\n {...globalAttributes}\n {...xstyledProps}\n {...ownerPropsConfig}\n onClick={buttonOnClick}\n >\n <Grid gutter=\"xxxs\" alignItems=\"center\" style={{ gridAutoFlow: 'column' }}>\n <div ref={pageInfoRef}>\n <DSTypography\n /**\n * Pagination uses DSTypography internally, but each typography variant defines\n * its own font-size. When these components are placed inside a styled() wrapper,\n * trying to style them via styled(DSTypography) triggers TypeScript errors\n * because DSTypography exposes \"as\" props and variant-specific overrides.\n *\n * Instead of wrapping DSTypography directly in styled(), we target the\n * underlying rendered elements via className/id. This avoids the TS conflicts\n * while still allowing us to override their font-size reliably.\n */\n id=\"typography-page-index\"\n variant=\"b1\"\n as=\"span\"\n fontWeight=\"semibold\"\n textAlign=\"start\"\n >\n {pageIndex}\n </DSTypography>\n <DSTypography\n variant=\"b1\"\n as=\"span\"\n /**\n * Pagination uses DSTypography internally, but each typography variant defines\n * its own font-size. When these components are placed inside a styled() wrapper,\n * trying to style them via styled(DSTypography) triggers TypeScript errors\n * because DSTypography exposes \"as\" props and variant-specific overrides.\n *\n * Instead of wrapping DSTypography directly in styled(), we target the\n * underlying rendered elements via className/id. This avoids the TS conflicts\n * while still allowing us to override their font-size reliably.\n */ className=\"typography-page-info-and-detail\"\n >\n / {pageCount}\n </DSTypography>\n </div>\n {isLoadingPageCount && <DSCircularIndeterminateIndicator ml=\"xxxs\" mr=\"xxxs\" size=\"xs\" />}\n {pageDetails.length !== 0 && (\n <>\n <DSPaginationSeparator height=\"12px\" ml=\"12px\" mr=\"xxxs\" {...ownerPropsConfig} />\n <DSTypography\n className=\"typography-page-info-and-detail\"\n innerRef={widestTypographyRef}\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']} innerRef={checkMarkRef} />\n </Grid>\n </PaginationDropdownButtonPaginator>\n {/* We calculate the length of the longest detail here (this is as per specs) */}\n <Grid style={{ position: 'relative' }}>\n {pageDetails.map((pageDetail, index) => (\n <InvisibleDiv\n innerRef={(el) => {\n if (!el) return;\n if (!widestChildRef.current) {\n widestChildRef.current = el;\n return;\n }\n if (el.offsetWidth > widestChildRef.current.offsetWidth) {\n widestChildRef.current = el;\n }\n if (index === pageDetails.length - 1) {\n widestTypographyRef.current?.style.setProperty('min-width', `${widestChildRef.current?.offsetWidth}px`);\n }\n }}\n data-testid=\"ds-pagination-invisible-detail-for-width-calc\"\n key={pageDetail}\n >\n <DSTypography\n className=\"typography-page-info-and-detail\"\n mr=\"xxs\"\n variant=\"b1\"\n as=\"span\"\n fontWeight=\"semibold\"\n textAlign=\"start\"\n >\n {pageDetail}\n </DSTypography>\n </InvisibleDiv>\n ))}\n </Grid>\n </StyledDropdown>\n );\n};\n\nDSPaginator.displayName = DSPaginatorName;\nconst DSPaginatorWithSchema = describe(DSPaginator);\nDSPaginatorWithSchema.propTypes = DSPaginatorPropTypesSchema;\n\nexport { DSPaginator, DSPaginatorWithSchema };\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": "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",
6
+ "names": ["React"]
7
7
  }
@@ -33,16 +33,17 @@ __export(createPaginatorHeader_exports, {
33
33
  module.exports = __toCommonJS(createPaginatorHeader_exports);
34
34
  var React = __toESM(require("react"));
35
35
  var import_jsx_runtime = require("react/jsx-runtime");
36
- var import_ds_grid = require("@elliemae/ds-grid");
37
36
  var import_DSPaginationSeparator = require("../../DSPaginationSeparator/index.js");
37
+ var import_styled = require("../styled.js");
38
38
  const createPaginatorHeader = ({
39
39
  pageDetailsTitle,
40
40
  pageInfoWidth,
41
- ownerPropsConfig
41
+ ownerPropsConfig,
42
+ checkMarkWidth
42
43
  }) => {
43
44
  const Comp = () => {
44
- if (pageDetailsTitle === "") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: "Page" });
45
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_ds_grid.Grid, { cols: [`${pageInfoWidth + 50}px`, "8px", "auto"], children: [
45
+ if (pageDetailsTitle === "") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styled.StyledHeader, { children: "Page" });
46
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_styled.StyledHeader, { cols: [`${pageInfoWidth + checkMarkWidth + 34}px`, "8px", "auto"], children: [
46
47
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: { marginLeft: "8px" }, children: "Page" }),
47
48
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DSPaginationSeparator.DSPaginationSeparator, { height: "100%", ...ownerPropsConfig }),
48
49
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: pageDetailsTitle })
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/parts/DSPaginator/config/createPaginatorHeader.tsx", "../../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import React from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSPaginationSeparator } from '../../DSPaginationSeparator/index.js';\n\ninterface PaginatorHeaderOptions {\n pageDetailsTitle: string;\n pageInfoWidth: number;\n ownerPropsConfig: Record<string, unknown>;\n}\n\nexport const createPaginatorHeader = ({\n pageDetailsTitle,\n pageInfoWidth,\n ownerPropsConfig,\n}: PaginatorHeaderOptions) => {\n const Comp = () => {\n if (pageDetailsTitle === '') return <>Page</>;\n\n return (\n <Grid cols={[`${pageInfoWidth + 50}px`, '8px', 'auto']}>\n <span style={{ marginLeft: '8px' }}>Page</span>\n <DSPaginationSeparator height=\"100%\" {...ownerPropsConfig} />\n <span>{pageDetailsTitle}</span>\n </Grid>\n );\n };\n return Comp;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADgBiB;AAfxC,qBAAqB;AACrB,mCAAsC;AAQ/B,MAAM,wBAAwB,CAAC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,MAA8B;AAC5B,QAAM,OAAO,MAAM;AACjB,QAAI,qBAAqB,GAAI,QAAO,2EAAE,kBAAI;AAE1C,WACE,6CAAC,uBAAK,MAAM,CAAC,GAAG,gBAAgB,EAAE,MAAM,OAAO,MAAM,GACnD;AAAA,kDAAC,UAAK,OAAO,EAAE,YAAY,MAAM,GAAG,kBAAI;AAAA,MACxC,4CAAC,sDAAsB,QAAO,QAAQ,GAAG,kBAAkB;AAAA,MAC3D,4CAAC,UAAM,4BAAiB;AAAA,OAC1B;AAAA,EAEJ;AACA,SAAO;AACT;",
4
+ "sourcesContent": ["import React from 'react';\nimport { DSPaginationSeparator } from '../../DSPaginationSeparator/index.js';\nimport { StyledHeader } from '../styled.js';\n\ninterface PaginatorHeaderOptions {\n pageDetailsTitle: string;\n pageInfoWidth: number;\n ownerPropsConfig: Record<string, unknown>;\n checkMarkWidth: number;\n}\n\nexport const createPaginatorHeader = ({\n pageDetailsTitle,\n pageInfoWidth,\n ownerPropsConfig,\n checkMarkWidth,\n}: PaginatorHeaderOptions) => {\n const Comp = () => {\n if (pageDetailsTitle === '') return <StyledHeader>Page</StyledHeader>;\n\n return (\n <StyledHeader cols={[`${pageInfoWidth + checkMarkWidth + 34}px`, '8px', 'auto']}>\n <span style={{ marginLeft: '8px' }}>Page</span>\n <DSPaginationSeparator height=\"100%\" {...ownerPropsConfig} />\n <span>{pageDetailsTitle}</span>\n </StyledHeader>\n );\n };\n return Comp;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADkBiB;AAjBxC,mCAAsC;AACtC,oBAA6B;AAStB,MAAM,wBAAwB,CAAC;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA8B;AAC5B,QAAM,OAAO,MAAM;AACjB,QAAI,qBAAqB,GAAI,QAAO,4CAAC,8BAAa,kBAAI;AAEtD,WACE,6CAAC,8BAAa,MAAM,CAAC,GAAG,gBAAgB,iBAAiB,EAAE,MAAM,OAAO,MAAM,GAC5E;AAAA,kDAAC,UAAK,OAAO,EAAE,YAAY,MAAM,GAAG,kBAAI;AAAA,MACxC,4CAAC,sDAAsB,QAAO,QAAQ,GAAG,kBAAkB;AAAA,MAC3D,4CAAC,UAAM,4BAAiB;AAAA,OAC1B;AAAA,EAEJ;AACA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -37,8 +37,8 @@ var import_ds_grid = require("@elliemae/ds-grid");
37
37
  var import_ds_icons = require("@elliemae/ds-icons");
38
38
  const OptionWithDetails = (props) => {
39
39
  const Comp = () => {
40
- const { pageInfoWidth, pageIndex, index, pageDetails } = props;
41
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_ds_grid.Grid, { cols: ["16px", `${pageInfoWidth + 16}px`, "auto"], gutter: "xxs", alignItems: "center", children: [
40
+ const { pageInfoWidth, pageIndex, index, pageDetails, checkMarkWidth } = props;
41
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_ds_grid.Grid, { cols: [`${checkMarkWidth}px`, `${pageInfoWidth + 16}px`, "auto"], gutter: "xxs", alignItems: "center", children: [
42
42
  pageIndex - 1 === index ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_icons.Checkmark, { size: "s", color: ["brand-primary", "600"] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {}),
43
43
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: index + 1 }),
44
44
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -57,7 +57,7 @@ const OptionWithDetails = (props) => {
57
57
  return Comp;
58
58
  };
59
59
  const getOptions = (args) => {
60
- const { pageCount, pageIndex, pageDetails, pageInfoWidth } = args;
60
+ const { pageCount, pageIndex, pageDetails, pageInfoWidth, checkMarkWidth } = args;
61
61
  const amountOfPages = typeof pageCount === "string" ? pageIndex + 1 : pageCount;
62
62
  const options = new Array(amountOfPages).fill(0).map((_, index) => {
63
63
  const option = {
@@ -67,7 +67,7 @@ const getOptions = (args) => {
67
67
  type: "single"
68
68
  };
69
69
  if (pageDetails?.length) {
70
- option.render = OptionWithDetails({ pageInfoWidth, pageIndex, index, pageDetails });
70
+ option.render = OptionWithDetails({ pageInfoWidth, pageIndex, index, pageDetails, checkMarkWidth });
71
71
  }
72
72
  return option;
73
73
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/parts/DSPaginator/config/getOptions.tsx", "../../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import React from 'react';\nimport { Grid } from '@elliemae/ds-grid';\nimport { Checkmark } from '@elliemae/ds-icons';\nimport type { DSDropdownMenuT } from '@elliemae/ds-dropdownmenu-v2';\n\ninterface OptionWithDetailsT {\n pageInfoWidth: number;\n pageIndex: number;\n index: number;\n pageDetails: string[] | readonly string[];\n}\n\nconst OptionWithDetails = (props: OptionWithDetailsT) => {\n const Comp = () => {\n const { pageInfoWidth, pageIndex, index, pageDetails } = props;\n return (\n <Grid cols={['16px', `${pageInfoWidth + 16}px`, 'auto']} gutter=\"xxs\" alignItems=\"center\">\n {pageIndex - 1 === index ? <Checkmark size=\"s\" color={['brand-primary', '600']} /> : <div />}\n <span>{index + 1}</span>\n <span\n style={{\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n }}\n >\n {pageDetails[index]}\n </span>\n </Grid>\n );\n };\n return Comp;\n};\n\nexport const getOptions = (args: {\n pageCount: number | string;\n pageIndex: number;\n pageDetails: string[] | readonly string[];\n pageInfoWidth: number;\n}): DSDropdownMenuT.ItemSingleOptions[] => {\n const { pageCount, pageIndex, pageDetails, pageInfoWidth } = args;\n\n const amountOfPages = typeof pageCount === 'string' ? pageIndex + 1 : pageCount;\n\n const options = new Array(amountOfPages).fill(0).map((_, index) => {\n const option: DSDropdownMenuT.ItemSingleOptions = {\n dsId: (index + 1).toString(),\n label: (index + 1).toString(),\n value: index + 1,\n type: 'single',\n };\n if (pageDetails?.length) {\n option.render = OptionWithDetails({ pageInfoWidth, pageIndex, index, pageDetails });\n }\n return option;\n });\n return options;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADgBjB;AAfN,qBAAqB;AACrB,sBAA0B;AAU1B,MAAM,oBAAoB,CAAC,UAA8B;AACvD,QAAM,OAAO,MAAM;AACjB,UAAM,EAAE,eAAe,WAAW,OAAO,YAAY,IAAI;AACzD,WACE,6CAAC,uBAAK,MAAM,CAAC,QAAQ,GAAG,gBAAgB,EAAE,MAAM,MAAM,GAAG,QAAO,OAAM,YAAW,UAC9E;AAAA,kBAAY,MAAM,QAAQ,4CAAC,6BAAU,MAAK,KAAI,OAAO,CAAC,iBAAiB,KAAK,GAAG,IAAK,4CAAC,SAAI;AAAA,MAC1F,4CAAC,UAAM,kBAAQ,GAAE;AAAA,MACjB;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,YAAY;AAAA,YACZ,cAAc;AAAA,YACd,UAAU;AAAA,UACZ;AAAA,UAEC,sBAAY,KAAK;AAAA;AAAA,MACpB;AAAA,OACF;AAAA,EAEJ;AACA,SAAO;AACT;AAEO,MAAM,aAAa,CAAC,SAKgB;AACzC,QAAM,EAAE,WAAW,WAAW,aAAa,cAAc,IAAI;AAE7D,QAAM,gBAAgB,OAAO,cAAc,WAAW,YAAY,IAAI;AAEtE,QAAM,UAAU,IAAI,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,UAAU;AACjE,UAAM,SAA4C;AAAA,MAChD,OAAO,QAAQ,GAAG,SAAS;AAAA,MAC3B,QAAQ,QAAQ,GAAG,SAAS;AAAA,MAC5B,OAAO,QAAQ;AAAA,MACf,MAAM;AAAA,IACR;AACA,QAAI,aAAa,QAAQ;AACvB,aAAO,SAAS,kBAAkB,EAAE,eAAe,WAAW,OAAO,YAAY,CAAC;AAAA,IACpF;AACA,WAAO;AAAA,EACT,CAAC;AACD,SAAO;AACT;",
4
+ "sourcesContent": ["import type { DSDropdownMenuT } from '@elliemae/ds-dropdownmenu-v2';\nimport { Grid } from '@elliemae/ds-grid';\nimport { Checkmark } from '@elliemae/ds-icons';\n\ninterface OptionWithDetailsT {\n pageInfoWidth: number;\n pageIndex: number;\n index: number;\n pageDetails: string[] | readonly string[];\n checkMarkWidth: number;\n}\n\nconst OptionWithDetails = (props: OptionWithDetailsT) => {\n const Comp = () => {\n const { pageInfoWidth, pageIndex, index, pageDetails, checkMarkWidth } = props;\n\n return (\n <Grid cols={[`${checkMarkWidth}px`, `${pageInfoWidth + 16}px`, 'auto']} gutter=\"xxs\" alignItems=\"center\">\n {pageIndex - 1 === index ? <Checkmark size=\"s\" color={['brand-primary', '600']} /> : <div />}\n <span>{index + 1}</span>\n <span\n style={{\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n }}\n >\n {pageDetails[index]}\n </span>\n </Grid>\n );\n };\n return Comp;\n};\n\nexport const getOptions = (args: {\n pageCount: number | string;\n pageIndex: number;\n pageDetails: string[] | readonly string[];\n pageInfoWidth: number;\n checkMarkWidth: number;\n}): DSDropdownMenuT.ItemSingleOptions[] => {\n const { pageCount, pageIndex, pageDetails, pageInfoWidth, checkMarkWidth } = args;\n\n const amountOfPages = typeof pageCount === 'string' ? pageIndex + 1 : pageCount;\n\n const options = new Array(amountOfPages).fill(0).map((_, index) => {\n const option: DSDropdownMenuT.ItemSingleOptions = {\n dsId: (index + 1).toString(),\n label: (index + 1).toString(),\n value: index + 1,\n type: 'single',\n };\n if (pageDetails?.length) {\n option.render = OptionWithDetails({ pageInfoWidth, pageIndex, index, pageDetails, checkMarkWidth });\n }\n return option;\n });\n return options;\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADiBjB;AAhBN,qBAAqB;AACrB,sBAA0B;AAU1B,MAAM,oBAAoB,CAAC,UAA8B;AACvD,QAAM,OAAO,MAAM;AACjB,UAAM,EAAE,eAAe,WAAW,OAAO,aAAa,eAAe,IAAI;AAEzE,WACE,6CAAC,uBAAK,MAAM,CAAC,GAAG,cAAc,MAAM,GAAG,gBAAgB,EAAE,MAAM,MAAM,GAAG,QAAO,OAAM,YAAW,UAC7F;AAAA,kBAAY,MAAM,QAAQ,4CAAC,6BAAU,MAAK,KAAI,OAAO,CAAC,iBAAiB,KAAK,GAAG,IAAK,4CAAC,SAAI;AAAA,MAC1F,4CAAC,UAAM,kBAAQ,GAAE;AAAA,MACjB;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,YAAY;AAAA,YACZ,cAAc;AAAA,YACd,UAAU;AAAA,UACZ;AAAA,UAEC,sBAAY,KAAK;AAAA;AAAA,MACpB;AAAA,OACF;AAAA,EAEJ;AACA,SAAO;AACT;AAEO,MAAM,aAAa,CAAC,SAMgB;AACzC,QAAM,EAAE,WAAW,WAAW,aAAa,eAAe,eAAe,IAAI;AAE7E,QAAM,gBAAgB,OAAO,cAAc,WAAW,YAAY,IAAI;AAEtE,QAAM,UAAU,IAAI,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,UAAU;AACjE,UAAM,SAA4C;AAAA,MAChD,OAAO,QAAQ,GAAG,SAAS;AAAA,MAC3B,QAAQ,QAAQ,GAAG,SAAS;AAAA,MAC5B,OAAO,QAAQ;AAAA,MACf,MAAM;AAAA,IACR;AACA,QAAI,aAAa,QAAQ;AACvB,aAAO,SAAS,kBAAkB,EAAE,eAAe,WAAW,OAAO,aAAa,eAAe,CAAC;AAAA,IACpG;AACA,WAAO;AAAA,EACT,CAAC;AACD,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -36,7 +36,7 @@ var import_ds_props_helpers = require("@elliemae/ds-props-helpers");
36
36
  var import_react = __toESM(require("react"));
37
37
  var import_react_desc_prop_types = require("../react-desc-prop-types.js");
38
38
  var import_useValidateProps = require("./useValidateProps.js");
39
- var import_useOnElementOnResize = require("./useOnElementOnResize.js");
39
+ var import_useOnElementOnResize = require("../../shared/useOnElementOnResize.js");
40
40
  var import_getOptions = require("./getOptions.js");
41
41
  var import_usePaginationSearch = require("./usePaginationSearch.js");
42
42
  const usePaginator = (propsFromUser) => {
@@ -49,14 +49,18 @@ const usePaginator = (propsFromUser) => {
49
49
  const ownerPropsConfig = (0, import_ds_props_helpers.useOwnerProps)(propsWithDefault);
50
50
  const { pageIndex, pageCount, pageDetails } = propsWithDefault;
51
51
  const [isOpened, setIsOpened] = (0, import_react.useState)(false);
52
- const [detailWidth, setDetailWidth] = (0, import_react.useState)(0);
53
- const [pageInfoWidth, setPageInfoWidth] = (0, import_react.useState)(0);
54
52
  const btnRef = (0, import_react.useRef)(null);
55
53
  const actionRef = (0, import_react.useRef)({});
54
+ const widestChildRef = import_react.default.useRef(null);
55
+ const pageInfoRef = import_react.default.useRef(null);
56
+ const checkMarkRef = (0, import_react.useRef)(null);
56
57
  const { width: btnWidth } = (0, import_useOnElementOnResize.useOnElementResize)(btnRef);
58
+ const { width: checkMarkWidth } = (0, import_useOnElementOnResize.useOnElementResize)(checkMarkRef);
59
+ const { width: pageInfoWidth } = (0, import_useOnElementOnResize.useOnElementResize)(pageInfoRef);
60
+ const { width: detailWidth } = (0, import_useOnElementOnResize.useOnElementResize)(widestChildRef);
57
61
  const options = (0, import_react.useMemo)(
58
- () => (0, import_getOptions.getOptions)({ pageCount, pageIndex, pageDetails, pageInfoWidth }),
59
- [pageCount, pageIndex, pageDetails, pageInfoWidth]
62
+ () => (0, import_getOptions.getOptions)({ pageCount, pageIndex, pageDetails, pageInfoWidth, checkMarkWidth }),
63
+ [pageCount, pageIndex, pageDetails, pageInfoWidth, checkMarkWidth]
60
64
  );
61
65
  const onKeyDown = (0, import_usePaginationSearch.usePaginationSearch)(pageCount, actionRef);
62
66
  (0, import_react.useEffect)(() => {
@@ -65,19 +69,6 @@ const usePaginator = (propsFromUser) => {
65
69
  actionRef.current.scrollOptionIntoView(pageIndex.toString());
66
70
  }
67
71
  }, [isOpened]);
68
- (0, import_react.useLayoutEffect)(() => {
69
- const invisibleDetails = [
70
- ...document.body.querySelectorAll('[data-testid="ds-pagination-invisible-detail-for-width-calc"]')
71
- ];
72
- const maxWidth = invisibleDetails.reduce((acc, cur) => Math.max(acc, cur.getBoundingClientRect().width), 0);
73
- setDetailWidth(maxWidth);
74
- }, [pageDetails]);
75
- (0, import_react.useEffect)(() => {
76
- setPageInfoWidth(() => {
77
- if (detailWidth) return btnWidth - detailWidth - 89;
78
- return btnWidth - 56;
79
- });
80
- }, [btnWidth, detailWidth]);
81
72
  return import_react.default.useMemo(
82
73
  () => ({
83
74
  propsWithDefault,
@@ -87,10 +78,14 @@ const usePaginator = (propsFromUser) => {
87
78
  btnRef,
88
79
  btnWidth,
89
80
  pageInfoWidth,
81
+ pageInfoRef,
90
82
  options,
91
83
  isOpened,
92
84
  detailWidth,
93
85
  actionRef,
86
+ widestChildRef,
87
+ checkMarkRef,
88
+ checkMarkWidth,
94
89
  setIsOpened,
95
90
  onKeyDown
96
91
  }),
@@ -106,6 +101,10 @@ const usePaginator = (propsFromUser) => {
106
101
  isOpened,
107
102
  detailWidth,
108
103
  actionRef,
104
+ widestChildRef,
105
+ checkMarkRef,
106
+ checkMarkWidth,
107
+ pageInfoRef,
109
108
  setIsOpened,
110
109
  onKeyDown
111
110
  ]
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/parts/DSPaginator/config/usePaginator.ts", "../../../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import {\n useGetGlobalAttributes,\n useGetXstyledProps,\n useMemoMergePropsWithDefault,\n useOwnerProps,\n} from '@elliemae/ds-props-helpers';\nimport React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport type { DSButtonV3T } from '@elliemae/ds-button-v2';\nimport { type DSPaginatorT, DSPaginatorPropTypesSchema, defaultProps } from '../react-desc-prop-types.js';\nimport { useValidateProps } from './useValidateProps.js';\nimport { useOnElementResize } from './useOnElementOnResize.js';\nimport { getOptions } from './getOptions.js';\nimport { usePaginationSearch } from './usePaginationSearch.js';\n\nexport const usePaginator = (propsFromUser: DSPaginatorT.Props) => {\n // =============================================================================\n // MERGE WITH DEFAULT AND VALIDATE PROPS\n // =============================================================================\n const propsWithDefault = useMemoMergePropsWithDefault<DSPaginatorT.InternalProps>(propsFromUser, defaultProps);\n useValidateProps(propsWithDefault, DSPaginatorPropTypesSchema);\n // =============================================================================\n // XSTYLED PROPS\n // =============================================================================\n const xstyledProps = useGetXstyledProps(propsWithDefault);\n // =============================================================================\n // GLOBAL ATTRIBUTES\n // =============================================================================\n const globalAttributes = useGetGlobalAttributes<DSPaginatorT.InternalProps, HTMLButtonElement, DSButtonV3T.Props>(\n propsWithDefault,\n );\n // =============================================================================\n // OWNER PROPS\n // =============================================================================\n const ownerPropsConfig = useOwnerProps(propsWithDefault);\n // =============================================================================\n // AD HOC PER COMPONENT LOGIC\n // =============================================================================\n\n const { pageIndex, pageCount, pageDetails } = propsWithDefault;\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 // HELPERS HOOKS CONFIGS\n // =============================================================================\n // const eventHandlers = useEventHandlers({ propsWithDefault, instanceUid }); // <-- complex logic should be made atomics this way\n const onKeyDown = usePaginationSearch(pageCount, actionRef);\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 React.useMemo(\n () => ({\n propsWithDefault,\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n btnRef,\n btnWidth,\n pageInfoWidth,\n options,\n isOpened,\n detailWidth,\n actionRef,\n setIsOpened,\n onKeyDown,\n }),\n [\n propsWithDefault,\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n btnRef,\n btnWidth,\n pageInfoWidth,\n options,\n isOpened,\n detailWidth,\n actionRef,\n setIsOpened,\n onKeyDown,\n ],\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,8BAKO;AACP,mBAA6E;AAG7E,mCAA4E;AAC5E,8BAAiC;AACjC,kCAAmC;AACnC,wBAA2B;AAC3B,iCAAoC;AAE7B,MAAM,eAAe,CAAC,kBAAsC;AAIjE,QAAM,uBAAmB,sDAAyD,eAAe,yCAAY;AAC7G,gDAAiB,kBAAkB,uDAA0B;AAI7D,QAAM,mBAAe,4CAAmB,gBAAgB;AAIxD,QAAM,uBAAmB;AAAA,IACvB;AAAA,EACF;AAIA,QAAM,uBAAmB,uCAAc,gBAAgB;AAKvD,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,gDAAmB,MAAM;AAErD,QAAM,cAAU;AAAA,IACd,UAAM,8BAAW,EAAE,WAAW,WAAW,aAAa,cAAc,CAAC;AAAA,IACrE,CAAC,WAAW,WAAW,aAAa,aAAa;AAAA,EACnD;AAKA,QAAM,gBAAY,gDAAoB,WAAW,SAAS;AAC1D,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,YAAa,QAAO,WAAW,cAAc;AACjD,aAAO,WAAW;AAAA,IACpB,CAAC;AAAA,EACH,GAAG,CAAC,UAAU,WAAW,CAAC;AAE1B,SAAO,aAAAA,QAAM;AAAA,IACX,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["/* eslint-disable max-statements */\nimport {\n useGetGlobalAttributes,\n useGetXstyledProps,\n useMemoMergePropsWithDefault,\n useOwnerProps,\n} from '@elliemae/ds-props-helpers';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { DSButtonV3T } from '@elliemae/ds-button-v2';\nimport { type DSPaginatorT, DSPaginatorPropTypesSchema, defaultProps } from '../react-desc-prop-types.js';\nimport { useValidateProps } from './useValidateProps.js';\nimport { useOnElementResize } from '../../shared/useOnElementOnResize.js';\nimport { getOptions } from './getOptions.js';\nimport { usePaginationSearch } from './usePaginationSearch.js';\n\nexport const usePaginator = (propsFromUser: DSPaginatorT.Props) => {\n // =============================================================================\n // MERGE WITH DEFAULT AND VALIDATE PROPS\n // =============================================================================\n const propsWithDefault = useMemoMergePropsWithDefault<DSPaginatorT.InternalProps>(propsFromUser, defaultProps);\n useValidateProps(propsWithDefault, DSPaginatorPropTypesSchema);\n // =============================================================================\n // XSTYLED PROPS\n // =============================================================================\n const xstyledProps = useGetXstyledProps(propsWithDefault);\n // =============================================================================\n // GLOBAL ATTRIBUTES\n // =============================================================================\n const globalAttributes = useGetGlobalAttributes<DSPaginatorT.InternalProps, HTMLButtonElement, DSButtonV3T.Props>(\n propsWithDefault,\n );\n // =============================================================================\n // OWNER PROPS\n // =============================================================================\n const ownerPropsConfig = useOwnerProps(propsWithDefault);\n // =============================================================================\n // AD HOC PER COMPONENT LOGIC\n // =============================================================================\n\n const { pageIndex, pageCount, pageDetails } = propsWithDefault;\n\n const [isOpened, setIsOpened] = useState(false);\n\n const btnRef = useRef<HTMLButtonElement>(null);\n const actionRef = useRef<Record<string, (dsId: string) => void>>({});\n const widestChildRef = React.useRef<HTMLDivElement | null>(null);\n const pageInfoRef = React.useRef<HTMLDivElement | null>(null);\n const checkMarkRef = useRef<HTMLDivElement>(null);\n\n // btnWidth is used to calculate dropdown min-width when pageDetails are provided\n const { width: btnWidth } = useOnElementResize(btnRef);\n\n // checkMarkWidth is used to calculate dropdown offset so, when opening the dropdown,\n // selected page is aligned properly with the available options.\n // It is also used to calculate paginatorHeader and options custom render.\n const { width: checkMarkWidth } = useOnElementResize(checkMarkRef);\n // pageInfoWidth is used to calculate dropdown min-width when pageDetails are provided on segmented pagination\n // pageInfoWidth || detailWidth\n const { width: pageInfoWidth } = useOnElementResize(pageInfoRef);\n // detailWidth is used to calculate dropdown min-width when pageDetails are provided on segmented pagination\n // pageInfoWidth || detailWidth\n const { width: detailWidth } = useOnElementResize(widestChildRef);\n const options = useMemo(\n () => getOptions({ pageCount, pageIndex, pageDetails, pageInfoWidth, checkMarkWidth }),\n [pageCount, pageIndex, pageDetails, pageInfoWidth, checkMarkWidth],\n );\n // =============================================================================\n // HELPERS HOOKS CONFIGS\n // =============================================================================\n // const eventHandlers = useEventHandlers({ propsWithDefault, instanceUid }); // <-- complex logic should be made atomics this way\n const onKeyDown = usePaginationSearch(pageCount, actionRef);\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 return React.useMemo(\n () => ({\n propsWithDefault,\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n btnRef,\n btnWidth,\n pageInfoWidth,\n pageInfoRef,\n options,\n isOpened,\n detailWidth,\n actionRef,\n widestChildRef,\n checkMarkRef,\n checkMarkWidth,\n setIsOpened,\n onKeyDown,\n }),\n [\n propsWithDefault,\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n btnRef,\n btnWidth,\n pageInfoWidth,\n options,\n isOpened,\n detailWidth,\n actionRef,\n widestChildRef,\n checkMarkRef,\n checkMarkWidth,\n pageInfoRef,\n setIsOpened,\n onKeyDown,\n ],\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,8BAKO;AACP,mBAA4D;AAG5D,mCAA4E;AAC5E,8BAAiC;AACjC,kCAAmC;AACnC,wBAA2B;AAC3B,iCAAoC;AAE7B,MAAM,eAAe,CAAC,kBAAsC;AAIjE,QAAM,uBAAmB,sDAAyD,eAAe,yCAAY;AAC7G,gDAAiB,kBAAkB,uDAA0B;AAI7D,QAAM,mBAAe,4CAAmB,gBAAgB;AAIxD,QAAM,uBAAmB;AAAA,IACvB;AAAA,EACF;AAIA,QAAM,uBAAmB,uCAAc,gBAAgB;AAKvD,QAAM,EAAE,WAAW,WAAW,YAAY,IAAI;AAE9C,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAS,KAAK;AAE9C,QAAM,aAAS,qBAA0B,IAAI;AAC7C,QAAM,gBAAY,qBAA+C,CAAC,CAAC;AACnE,QAAM,iBAAiB,aAAAA,QAAM,OAA8B,IAAI;AAC/D,QAAM,cAAc,aAAAA,QAAM,OAA8B,IAAI;AAC5D,QAAM,mBAAe,qBAAuB,IAAI;AAGhD,QAAM,EAAE,OAAO,SAAS,QAAI,gDAAmB,MAAM;AAKrD,QAAM,EAAE,OAAO,eAAe,QAAI,gDAAmB,YAAY;AAGjE,QAAM,EAAE,OAAO,cAAc,QAAI,gDAAmB,WAAW;AAG/D,QAAM,EAAE,OAAO,YAAY,QAAI,gDAAmB,cAAc;AAChE,QAAM,cAAU;AAAA,IACd,UAAM,8BAAW,EAAE,WAAW,WAAW,aAAa,eAAe,eAAe,CAAC;AAAA,IACrF,CAAC,WAAW,WAAW,aAAa,eAAe,cAAc;AAAA,EACnE;AAKA,QAAM,gBAAY,gDAAoB,WAAW,SAAS;AAE1D,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,SAAO,aAAAA,QAAM;AAAA,IACX,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;",
6
6
  "names": ["React"]
7
7
  }
@@ -29,13 +29,23 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  var styled_exports = {};
30
30
  __export(styled_exports, {
31
31
  InvisibleDiv: () => InvisibleDiv,
32
- PaginationDropdownButtonPaginator: () => PaginationDropdownButtonPaginator
32
+ PaginationDropdownButtonPaginator: () => PaginationDropdownButtonPaginator,
33
+ StyledDropdown: () => StyledDropdown,
34
+ StyledHeader: () => StyledHeader
33
35
  });
34
36
  module.exports = __toCommonJS(styled_exports);
35
37
  var React = __toESM(require("react"));
36
38
  var import_ds_button_v2 = require("@elliemae/ds-button-v2");
39
+ var import_ds_dropdownmenu_v2 = require("@elliemae/ds-dropdownmenu-v2");
40
+ var import_ds_grid = __toESM(require("@elliemae/ds-grid"));
37
41
  var import_ds_system = require("@elliemae/ds-system");
38
42
  var import_constants = require("./constants/index.js");
43
+ const fontSize13Base13 = 13 / 13;
44
+ const fontSize13Base16 = 13 / 16;
45
+ const fontSize18Base13 = 18 / 13;
46
+ const fontSize18Base16 = 18 / 16;
47
+ const fontSize12Base13 = 12 / 13;
48
+ const fontSize12Base16 = 12 / 16;
39
49
  const styledFocusCss = import_ds_system.css`
40
50
  &:after {
41
51
  display: block;
@@ -58,7 +68,7 @@ const InvisibleDiv = import_ds_system.styled.div`
58
68
  position: absolute;
59
69
  `;
60
70
  const paginationDropdownButtonCommonStyles = import_ds_system.css`
61
- height: 42px;
71
+ min-height: 42px;
62
72
  display: grid;
63
73
  grid-auto-flow: column;
64
74
  justify-content: center;
@@ -87,4 +97,34 @@ const PaginationDropdownButtonPaginator = (0, import_ds_system.styled)(import_ds
87
97
  })`
88
98
  ${paginationDropdownButtonCommonStyles}
89
99
  `;
100
+ const StyledDropdown = (0, import_ds_system.styled)(import_ds_dropdownmenu_v2.DSDropdownMenuV2)`
101
+ /**
102
+ * Pagination uses DSTypography internally, but each typography variant defines
103
+ * its own font-size. When these components are placed inside a styled() wrapper,
104
+ * trying to style them via styled(DSTypography) triggers TypeScript errors
105
+ * because DSTypography exposes "as" props and variant-specific overrides.
106
+ *
107
+ * Instead of wrapping DSTypography directly in styled(), we target the
108
+ * underlying rendered elements via className/id. This avoids the TS conflicts
109
+ * while still allowing us to override their font-size reliably.
110
+ */
111
+ #typography-page-index {
112
+ font-size: ${fontSize18Base16}rem;
113
+ @media (min-width: ${({ theme }) => theme.breakpoints.small}) {
114
+ font-size: ${fontSize18Base13}rem;
115
+ }
116
+ }
117
+ .typography-page-info-and-detail {
118
+ font-size: ${fontSize13Base16}rem;
119
+ @media (min-width: ${({ theme }) => theme.breakpoints.small}) {
120
+ font-size: ${fontSize13Base13}rem;
121
+ }
122
+ }
123
+ `;
124
+ const StyledHeader = (0, import_ds_system.styled)(import_ds_grid.default)`
125
+ font-size: ${fontSize12Base16}rem;
126
+ @media (min-width: ${({ theme }) => theme.breakpoints.small}) {
127
+ font-size: ${fontSize12Base13}rem;
128
+ }
129
+ `;
90
130
  //# sourceMappingURL=styled.js.map