@elliemae/ds-pagination 3.57.0-next.40 → 3.57.0-next.42
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.
- package/dist/cjs/parts/DSPageNextButton/DSPageNextButton.js +1 -1
- package/dist/cjs/parts/DSPageNextButton/DSPageNextButton.js.map +1 -1
- package/dist/cjs/parts/DSPagePrevButton/DSPagePrevButton.js +1 -1
- package/dist/cjs/parts/DSPagePrevButton/DSPagePrevButton.js.map +1 -1
- package/dist/cjs/parts/DSPaginationContainer/DSPaginationContainer.js +1 -1
- package/dist/cjs/parts/DSPaginationContainer/DSPaginationContainer.js.map +1 -1
- package/dist/cjs/parts/DSPaginator/DSPaginator.js +86 -17
- package/dist/cjs/parts/DSPaginator/DSPaginator.js.map +3 -3
- package/dist/cjs/parts/DSPaginator/config/createPaginatorHeader.js +5 -4
- package/dist/cjs/parts/DSPaginator/config/createPaginatorHeader.js.map +2 -2
- package/dist/cjs/parts/DSPaginator/config/getOptions.js +4 -4
- package/dist/cjs/parts/DSPaginator/config/getOptions.js.map +2 -2
- package/dist/cjs/parts/DSPaginator/config/usePaginator.js +17 -18
- package/dist/cjs/parts/DSPaginator/config/usePaginator.js.map +2 -2
- package/dist/cjs/parts/DSPaginator/styled.js +42 -2
- package/dist/cjs/parts/DSPaginator/styled.js.map +3 -3
- package/dist/cjs/parts/DSPerPageSelector/DSPerPageSelector.js +24 -8
- package/dist/cjs/parts/DSPerPageSelector/DSPerPageSelector.js.map +2 -2
- package/dist/cjs/parts/DSPerPageSelector/config/usePerPageSelector.js +6 -6
- package/dist/cjs/parts/DSPerPageSelector/config/usePerPageSelector.js.map +2 -2
- package/dist/cjs/parts/DSPerPageSelector/styled.js +29 -2
- package/dist/cjs/parts/DSPerPageSelector/styled.js.map +2 -2
- package/dist/cjs/parts/{DSPaginator/config → shared}/useOnElementOnResize.js.map +1 -1
- package/dist/esm/parts/DSPageNextButton/DSPageNextButton.js +1 -1
- package/dist/esm/parts/DSPageNextButton/DSPageNextButton.js.map +1 -1
- package/dist/esm/parts/DSPagePrevButton/DSPagePrevButton.js +1 -1
- package/dist/esm/parts/DSPagePrevButton/DSPagePrevButton.js.map +1 -1
- package/dist/esm/parts/DSPaginationContainer/DSPaginationContainer.js +1 -1
- package/dist/esm/parts/DSPaginationContainer/DSPaginationContainer.js.map +1 -1
- package/dist/esm/parts/DSPaginator/DSPaginator.js +87 -18
- package/dist/esm/parts/DSPaginator/DSPaginator.js.map +3 -3
- package/dist/esm/parts/DSPaginator/config/createPaginatorHeader.js +6 -5
- package/dist/esm/parts/DSPaginator/config/createPaginatorHeader.js.map +2 -2
- package/dist/esm/parts/DSPaginator/config/getOptions.js +4 -4
- package/dist/esm/parts/DSPaginator/config/getOptions.js.map +2 -2
- package/dist/esm/parts/DSPaginator/config/usePaginator.js +18 -19
- package/dist/esm/parts/DSPaginator/config/usePaginator.js.map +2 -2
- package/dist/esm/parts/DSPaginator/styled.js +42 -2
- package/dist/esm/parts/DSPaginator/styled.js.map +2 -2
- package/dist/esm/parts/DSPerPageSelector/DSPerPageSelector.js +26 -10
- package/dist/esm/parts/DSPerPageSelector/DSPerPageSelector.js.map +2 -2
- package/dist/esm/parts/DSPerPageSelector/config/usePerPageSelector.js +6 -6
- package/dist/esm/parts/DSPerPageSelector/config/usePerPageSelector.js.map +2 -2
- package/dist/esm/parts/DSPerPageSelector/styled.js +29 -2
- package/dist/esm/parts/DSPerPageSelector/styled.js.map +2 -2
- package/dist/esm/parts/{DSPaginator/config → shared}/useOnElementOnResize.js.map +1 -1
- package/dist/types/parts/DSPaginator/config/createPaginatorHeader.d.ts +2 -1
- package/dist/types/parts/DSPaginator/config/getOptions.d.ts +1 -0
- package/dist/types/parts/DSPaginator/config/usePaginator.d.ts +4 -0
- package/dist/types/parts/DSPaginator/styled.d.ts +2 -0
- package/dist/types/parts/DSPerPageSelector/config/usePerPageSelector.d.ts +2 -1
- package/dist/types/parts/DSPerPageSelector/styled.d.ts +1 -0
- package/package.json +13 -13
- /package/dist/cjs/parts/{DSPaginator/config → shared}/useOnElementOnResize.js +0 -0
- /package/dist/esm/parts/{DSPaginator/config → shared}/useOnElementOnResize.js +0 -0
- /package/dist/types/parts/{DSPaginator/config → shared}/useOnElementOnResize.d.ts +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/parts/DSPaginator/styled.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["import { DSButtonV3 } from '@elliemae/ds-button-v2';\n\nimport { css, styled } from '@elliemae/ds-system';\nimport type {} from '@xstyled/system';\nimport { DSPaginationName, PAGINATOR_SLOTS } from './constants/index.js';\n\nconst styledFocusCss = css`\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\nexport const InvisibleDiv = styled.div`\n opacity: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n position: absolute;\n`;\n\nconst paginationDropdownButtonCommonStyles = css`\n height: 42px;\n display: grid;\n grid-auto-flow: column;\n justify-content: center;\n align-items: center;\n position: relative;\n padding-left: 16px;\n padding-right: 16px;\n grid-gap: 8px;\n font-size: 13px;\n color: neutral-700;\n cursor: pointer;\n border-radius: 0;\n font-weight: ${(props) => props.theme.fontWeights.regular};\n :focus {\n ${styledFocusCss}\n }\n &[aria-disabled='true'] {\n cursor: not-allowed;\n }\n white-space: nowrap;\n`;\nexport const PaginationDropdownButtonPaginator = styled(DSButtonV3, {\n name: DSPaginationName,\n slot: PAGINATOR_SLOTS.PAGINATOR,\n preserveLegacyDataTestId: true,\n})`\n ${paginationDropdownButtonCommonStyles}\n`;\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,0BAA2B;AAE3B,uBAA4B;AAE5B,uBAAkD;AAElD,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBASC,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAMvD,MAAM,eAAe,wBAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQnC,MAAM,uCAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAc5B,CAAC,UAAU,MAAM,MAAM,YAAY,OAAO;AAAA;AAAA,MAErD,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOb,MAAM,wCAAoC,yBAAO,gCAAY;AAAA,EAClE,MAAM;AAAA,EACN,MAAM,iCAAgB;AAAA,EACtB,0BAA0B;AAC5B,CAAC;AAAA,IACG,oCAAoC;AAAA;",
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import { DSButtonV3 } from '@elliemae/ds-button-v2';\n\nimport { DSDropdownMenuV2 } from '@elliemae/ds-dropdownmenu-v2';\nimport Grid from '@elliemae/ds-grid';\nimport { css, styled } from '@elliemae/ds-system';\nimport type {} from '@xstyled/system';\nimport { DSPaginationName, PAGINATOR_SLOTS } from './constants/index.js';\n\nconst fontSize13Base13 = 13 / 13;\nconst fontSize13Base16 = 13 / 16;\nconst fontSize18Base13 = 18 / 13;\nconst fontSize18Base16 = 18 / 16;\nconst fontSize12Base13 = 12 / 13;\nconst fontSize12Base16 = 12 / 16;\n\nconst styledFocusCss = css`\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\nexport const InvisibleDiv = styled.div`\n opacity: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n position: absolute;\n`;\n\nconst paginationDropdownButtonCommonStyles = css`\n min-height: 42px;\n display: grid;\n grid-auto-flow: column;\n justify-content: center;\n align-items: center;\n position: relative;\n padding-left: 16px;\n padding-right: 16px;\n grid-gap: 8px;\n font-size: 13px;\n color: neutral-700;\n cursor: pointer;\n border-radius: 0;\n font-weight: ${(props) => props.theme.fontWeights.regular};\n :focus {\n ${styledFocusCss}\n }\n &[aria-disabled='true'] {\n cursor: not-allowed;\n }\n white-space: nowrap;\n`;\nexport const PaginationDropdownButtonPaginator = styled(DSButtonV3, {\n name: DSPaginationName,\n slot: PAGINATOR_SLOTS.PAGINATOR,\n preserveLegacyDataTestId: true,\n})`\n ${paginationDropdownButtonCommonStyles}\n`;\n\nexport const StyledDropdown = styled(DSDropdownMenuV2)`\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 #typography-page-index {\n font-size: ${fontSize18Base16}rem;\n @media (min-width: ${({ theme }) => theme.breakpoints.small}) {\n font-size: ${fontSize18Base13}rem;\n }\n }\n .typography-page-info-and-detail {\n font-size: ${fontSize13Base16}rem;\n @media (min-width: ${({ theme }) => theme.breakpoints.small}) {\n font-size: ${fontSize13Base13}rem;\n }\n }\n`;\nexport const StyledHeader = styled(Grid)`\n font-size: ${fontSize12Base16}rem;\n @media (min-width: ${({ theme }) => theme.breakpoints.small}) {\n font-size: ${fontSize12Base13}rem;\n }\n`;\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,0BAA2B;AAE3B,gCAAiC;AACjC,qBAAiB;AACjB,uBAA4B;AAE5B,uBAAkD;AAElD,MAAM,mBAAmB,KAAK;AAC9B,MAAM,mBAAmB,KAAK;AAC9B,MAAM,mBAAmB,KAAK;AAC9B,MAAM,mBAAmB,KAAK;AAC9B,MAAM,mBAAmB,KAAK;AAC9B,MAAM,mBAAmB,KAAK;AAE9B,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBASC,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAMvD,MAAM,eAAe,wBAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQnC,MAAM,uCAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAc5B,CAAC,UAAU,MAAM,MAAM,YAAY,OAAO;AAAA;AAAA,MAErD,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOb,MAAM,wCAAoC,yBAAO,gCAAY;AAAA,EAClE,MAAM;AAAA,EACN,MAAM,iCAAgB;AAAA,EACtB,0BAA0B;AAC5B,CAAC;AAAA,IACG,oCAAoC;AAAA;AAGjC,MAAM,qBAAiB,yBAAO,0CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAYpC,gBAAgB;AAAA,yBACR,CAAC,EAAE,MAAM,MAAM,MAAM,YAAY,KAAK;AAAA,mBAC5C,gBAAgB;AAAA;AAAA;AAAA;AAAA,iBAIlB,gBAAgB;AAAA,yBACR,CAAC,EAAE,MAAM,MAAM,MAAM,YAAY,KAAK;AAAA,mBAC5C,gBAAgB;AAAA;AAAA;AAAA;AAI5B,MAAM,mBAAe,yBAAO,eAAAA,OAAI;AAAA,eACxB,gBAAgB;AAAA,uBACR,CAAC,EAAE,MAAM,MAAM,MAAM,YAAY,KAAK;AAAA,iBAC5C,gBAAgB;AAAA;AAAA;",
|
|
6
|
+
"names": ["Grid"]
|
|
7
7
|
}
|
|
@@ -34,15 +34,16 @@ __export(DSPerPageSelector_exports, {
|
|
|
34
34
|
module.exports = __toCommonJS(DSPerPageSelector_exports);
|
|
35
35
|
var React = __toESM(require("react"));
|
|
36
36
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
37
|
-
var import_react = require("react");
|
|
38
37
|
var import_ds_dropdownmenu_v2 = require("@elliemae/ds-dropdownmenu-v2");
|
|
39
38
|
var import_ds_icons = require("@elliemae/ds-icons");
|
|
40
39
|
var import_ds_props_helpers = require("@elliemae/ds-props-helpers");
|
|
40
|
+
var import_ds_typography = require("@elliemae/ds-typography");
|
|
41
|
+
var import_react = require("react");
|
|
41
42
|
var import_usePerPageSelector = require("./config/usePerPageSelector.js");
|
|
42
43
|
var import_constants = require("./constants/index.js");
|
|
43
44
|
var import_react_desc_prop_types = require("./react-desc-prop-types.js");
|
|
44
45
|
var import_styled = require("./styled.js");
|
|
45
|
-
const Header = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
46
|
+
const Header = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styled.StyledHeader, { children: "Per Page" });
|
|
46
47
|
const DSPerPageSelector = (props) => {
|
|
47
48
|
const {
|
|
48
49
|
propsWithDefault: { pageSize, onPageSizeChange },
|
|
@@ -51,7 +52,8 @@ const DSPerPageSelector = (props) => {
|
|
|
51
52
|
ownerPropsConfig,
|
|
52
53
|
actionRef,
|
|
53
54
|
btnRef,
|
|
54
|
-
|
|
55
|
+
chevronRef,
|
|
56
|
+
chevronWidth,
|
|
55
57
|
isOpened,
|
|
56
58
|
options,
|
|
57
59
|
setIsOpened
|
|
@@ -60,6 +62,10 @@ const DSPerPageSelector = (props) => {
|
|
|
60
62
|
if (globalAttributes.onClick) return globalAttributes.onClick;
|
|
61
63
|
return () => setIsOpened((prev) => !prev);
|
|
62
64
|
}, [globalAttributes.onClick, setIsOpened]);
|
|
65
|
+
const maxOptionsLength = (0, import_react.useMemo)(() => {
|
|
66
|
+
const maxLength = options.reduce((acc, cur) => Math.max(acc, ("label" in cur ? cur.label : "").length), 0);
|
|
67
|
+
return maxLength;
|
|
68
|
+
}, [options]);
|
|
63
69
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
64
70
|
import_ds_dropdownmenu_v2.DSDropdownMenuV2,
|
|
65
71
|
{
|
|
@@ -75,10 +81,10 @@ const DSPerPageSelector = (props) => {
|
|
|
75
81
|
setIsOpened(false);
|
|
76
82
|
btnRef.current?.focus();
|
|
77
83
|
},
|
|
78
|
-
customOffset: [-
|
|
84
|
+
customOffset: [-(chevronWidth + 7), 2],
|
|
79
85
|
startPlacementPreference: "top-start",
|
|
80
86
|
actionRef,
|
|
81
|
-
minWidth:
|
|
87
|
+
minWidth: `calc(${chevronWidth + 60}px + ${maxOptionsLength}ch)`,
|
|
82
88
|
maxHeight: 300,
|
|
83
89
|
HeaderComp: Header,
|
|
84
90
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
@@ -94,9 +100,19 @@ const DSPerPageSelector = (props) => {
|
|
|
94
100
|
...ownerPropsConfig,
|
|
95
101
|
onClick: buttonOnClick,
|
|
96
102
|
children: [
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
103
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
104
|
+
import_ds_typography.DSTypography,
|
|
105
|
+
{
|
|
106
|
+
variant: "b1",
|
|
107
|
+
as: "span",
|
|
108
|
+
className: "typography-per-page-selector",
|
|
109
|
+
children: [
|
|
110
|
+
pageSize,
|
|
111
|
+
" / page"
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
),
|
|
115
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_icons.ChevronDown, { color: ["brand-primary", "700"], innerRef: chevronRef })
|
|
100
116
|
]
|
|
101
117
|
}
|
|
102
118
|
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/parts/DSPerPageSelector/DSPerPageSelector.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["import
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;
|
|
4
|
+
"sourcesContent": ["import type { DSButtonT } from '@elliemae/ds-button-v2';\nimport { DSDropdownMenuV2, type DSDropdownMenuT } from '@elliemae/ds-dropdownmenu-v2';\nimport { ChevronDown } from '@elliemae/ds-icons';\nimport { describe } from '@elliemae/ds-props-helpers';\nimport { DSTypography } from '@elliemae/ds-typography';\nimport React, { useMemo } from 'react';\nimport { usePerPageSelector } from './config/usePerPageSelector.js';\nimport { DSPerPageSelectorName, PER_PAGE_SELECTOR_DATA_TESTID } from './constants/index.js';\nimport { DSPerPageSelectorPropTypesSchema, type DSPerPageSelectorT } from './react-desc-prop-types.js';\nimport { PaginationDropdownButtonPerPageSelector, StyledHeader } from './styled.js';\n\nconst Header = () => <StyledHeader>Per Page</StyledHeader>;\n\nconst DSPerPageSelector: React.ComponentType<DSPerPageSelectorT.Props> = (props) => {\n const {\n propsWithDefault: { pageSize, onPageSizeChange },\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n actionRef,\n btnRef,\n chevronRef,\n chevronWidth,\n isOpened,\n options,\n setIsOpened,\n } = usePerPageSelector(props);\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 const maxOptionsLength = useMemo(() => {\n const maxLength = options.reduce((acc, cur) => Math.max(acc, ('label' in cur ? cur.label : '').length), 0);\n return maxLength;\n }, [options]);\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={[-(chevronWidth + 7), 2]}\n startPlacementPreference=\"top-start\"\n actionRef={actionRef}\n /**\n * Calculate the dynamic minWidth for the Dropdown:\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 * + maxOptionsLength ch (longest option label measured in characters)\n * + 16px (right padding)\n * + a small scrollbar placeholder (to avoid text wrapping when scrollbars appear)\n *\n * Why `calc()`?\n * - When using pure px values, the initial render works correctly.\n * - But when switching between different stories in Storybook \u2014 especially those\n * that modify font-size or typography scale \u2014 the measured width from the ref\n * becomes outdated and ends up returning a smaller value than it should.\n * - That incorrect (underestimated) width causes the longest option label to wrap,\n * even though there is actually enough space.\n *\n * By using `calc()` + `ch` units, the component stays responsive to font-size changes\n * without requiring an extra ref to measure the page size text width.\n */\n minWidth={`calc(${chevronWidth + 60}px + ${maxOptionsLength}ch)`}\n maxHeight={300}\n HeaderComp={Header}\n >\n <PaginationDropdownButtonPerPageSelector\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={PER_PAGE_SELECTOR_DATA_TESTID.PER_PAGE_SELECTOR}\n {...globalAttributes}\n {...xstyledProps}\n {...ownerPropsConfig}\n onClick={buttonOnClick}\n >\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 */\n className=\"typography-per-page-selector\"\n >\n {pageSize} / page\n </DSTypography>\n\n <ChevronDown color={['brand-primary', '700']} innerRef={chevronRef} />\n </PaginationDropdownButtonPerPageSelector>\n </DSDropdownMenuV2>\n );\n};\n\nDSPerPageSelector.displayName = DSPerPageSelectorName;\nconst DSPerPageSelectorWithSchema = describe(DSPerPageSelector);\nDSPerPageSelectorWithSchema.propTypes = DSPerPageSelectorPropTypesSchema;\n\nexport { DSPerPageSelector, DSPerPageSelectorWithSchema };\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADWF;AAVrB,gCAAuD;AACvD,sBAA4B;AAC5B,8BAAyB;AACzB,2BAA6B;AAC7B,mBAA+B;AAC/B,gCAAmC;AACnC,uBAAqE;AACrE,mCAA0E;AAC1E,oBAAsE;AAEtE,MAAM,SAAS,MAAM,4CAAC,8BAAa,sBAAQ;AAE3C,MAAM,oBAAmE,CAAC,UAAU;AAClF,QAAM;AAAA,IACJ,kBAAkB,EAAE,UAAU,iBAAiB;AAAA,IAC/C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,8CAAmB,KAAK;AAC5B,QAAM,oBAA4C,sBAAQ,MAAM;AAC9D,QAAI,iBAAiB,QAAS,QAAO,iBAAiB;AACtD,WAAO,MAAM,YAAY,CAAC,SAAS,CAAC,IAAI;AAAA,EAC1C,GAAG,CAAC,iBAAiB,SAAS,WAAW,CAAC;AAE1C,QAAM,uBAAmB,sBAAQ,MAAM;AACrC,UAAM,YAAY,QAAQ,OAAO,CAAC,KAAK,QAAQ,KAAK,IAAI,MAAM,WAAW,MAAM,IAAI,QAAQ,IAAI,MAAM,GAAG,CAAC;AACzG,WAAO;AAAA,EACT,GAAG,CAAC,OAAO,CAAC;AAEZ,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,iBAAiB,EAAE,CAAC,SAAS,SAAS,CAAC,GAAG,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,EAAE,eAAe,IAAI,CAAC;AAAA,MACrC,0BAAyB;AAAA,MACzB;AAAA,MAuBA,UAAU,QAAQ,eAAe,EAAE,QAAQ,gBAAgB;AAAA,MAC3D,WAAW;AAAA,MACX,YAAY;AAAA,MAEZ;AAAA,QAAC;AAAA;AAAA,UACC,YAAW;AAAA,UACX,UAAU;AAAA,UACV,gBAAc;AAAA,UACd,cAAY,GAAG,QAAQ;AAAA,UACvB,eAAa,+CAA8B;AAAA,UAC1C,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACJ,SAAS;AAAA,UAET;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,IAAG;AAAA,gBAWH,WAAU;AAAA,gBAET;AAAA;AAAA,kBAAS;AAAA;AAAA;AAAA,YACZ;AAAA,YAEA,4CAAC,+BAAY,OAAO,CAAC,iBAAiB,KAAK,GAAG,UAAU,YAAY;AAAA;AAAA;AAAA,MACtE;AAAA;AAAA,EACF;AAEJ;AAEA,kBAAkB,cAAc;AAChC,MAAM,kCAA8B,kCAAS,iBAAiB;AAC9D,4BAA4B,YAAY;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -37,6 +37,7 @@ 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
39
|
var import_getOptions = require("./getOptions.js");
|
|
40
|
+
var import_useOnElementOnResize = require("../../shared/useOnElementOnResize.js");
|
|
40
41
|
const usePerPageSelector = (propsFromUser) => {
|
|
41
42
|
const propsWithDefault = (0, import_ds_props_helpers.useMemoMergePropsWithDefault)(propsFromUser, import_react_desc_prop_types.defaultProps);
|
|
42
43
|
(0, import_useValidateProps.useValidateProps)(propsWithDefault, import_react_desc_prop_types.DSPerPageSelectorPropTypesSchema);
|
|
@@ -51,10 +52,8 @@ const usePerPageSelector = (propsFromUser) => {
|
|
|
51
52
|
}, [maxPerPage, minPerPage, perPageOptions, perPageStep]);
|
|
52
53
|
const actionRef = (0, import_react.useRef)({});
|
|
53
54
|
const btnRef = (0, import_react.useRef)(null);
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
return maxLength * 6 + 90;
|
|
57
|
-
}, [options]);
|
|
55
|
+
const chevronRef = (0, import_react.useRef)(null);
|
|
56
|
+
const { width: chevronWidth } = (0, import_useOnElementOnResize.useOnElementResize)(chevronRef);
|
|
58
57
|
(0, import_react.useEffect)(() => {
|
|
59
58
|
if (isOpened) {
|
|
60
59
|
actionRef.current.setActiveDescendant(pageSize.toString());
|
|
@@ -69,12 +68,13 @@ const usePerPageSelector = (propsFromUser) => {
|
|
|
69
68
|
ownerPropsConfig,
|
|
70
69
|
actionRef,
|
|
71
70
|
btnRef,
|
|
72
|
-
|
|
71
|
+
chevronRef,
|
|
72
|
+
chevronWidth,
|
|
73
73
|
isOpened,
|
|
74
74
|
options,
|
|
75
75
|
setIsOpened
|
|
76
76
|
}),
|
|
77
|
-
[propsWithDefault, xstyledProps, globalAttributes, ownerPropsConfig,
|
|
77
|
+
[propsWithDefault, xstyledProps, globalAttributes, ownerPropsConfig, isOpened, options, chevronRef, chevronWidth]
|
|
78
78
|
);
|
|
79
79
|
};
|
|
80
80
|
//# sourceMappingURL=usePerPageSelector.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/parts/DSPerPageSelector/config/usePerPageSelector.ts", "../../../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["import type { DSButtonV3T } from '@elliemae/ds-button-v2';\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 DSPerPageSelectorT, DSPerPageSelectorPropTypesSchema, defaultProps } from '../react-desc-prop-types.js';\nimport { useValidateProps } from './useValidateProps.js';\nimport { generateOption, getOptions } from './getOptions.js';\n\nexport const usePerPageSelector = (propsFromUser: DSPerPageSelectorT.Props) => {\n // =============================================================================\n // MERGE WITH DEFAULT AND VALIDATE PROPS\n // =============================================================================\n const propsWithDefault = useMemoMergePropsWithDefault<DSPerPageSelectorT.InternalProps>(propsFromUser, defaultProps);\n useValidateProps(propsWithDefault, DSPerPageSelectorPropTypesSchema);\n // =============================================================================\n // XSTYLED PROPS\n // =============================================================================\n const xstyledProps = useGetXstyledProps(propsWithDefault);\n // =============================================================================\n // GLOBAL ATTRIBUTES\n // =============================================================================\n const globalAttributes = useGetGlobalAttributes<\n DSPerPageSelectorT.InternalProps,\n HTMLButtonElement,\n DSButtonV3T.Props\n >(propsWithDefault);\n // =============================================================================\n // OWNER PROPS\n // =============================================================================\n const ownerPropsConfig = useOwnerProps(propsWithDefault);\n // AD HOC PER COMPONENT LOGIC\n // =============================================================================\n // custom code goes here, this is an example\n // const instanceUid = React.useMemo(() => `ds-per-page-selector-${uid(5)}`, []);\n\n const { pageSize, perPageOptions, perPageStep, minPerPage, maxPerPage } = propsWithDefault;\n const [isOpened, setIsOpened] = useState(false);\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 const
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,8BAKO;AACP,mBAA4D;AAE5D,mCAAwF;AACxF,8BAAiC;AACjC,wBAA2C;
|
|
4
|
+
"sourcesContent": ["import type { DSButtonV3T } from '@elliemae/ds-button-v2';\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 DSPerPageSelectorT, DSPerPageSelectorPropTypesSchema, defaultProps } from '../react-desc-prop-types.js';\nimport { useValidateProps } from './useValidateProps.js';\nimport { generateOption, getOptions } from './getOptions.js';\nimport { useOnElementResize } from '../../shared/useOnElementOnResize.js';\n\nexport const usePerPageSelector = (propsFromUser: DSPerPageSelectorT.Props) => {\n // =============================================================================\n // MERGE WITH DEFAULT AND VALIDATE PROPS\n // =============================================================================\n const propsWithDefault = useMemoMergePropsWithDefault<DSPerPageSelectorT.InternalProps>(propsFromUser, defaultProps);\n useValidateProps(propsWithDefault, DSPerPageSelectorPropTypesSchema);\n // =============================================================================\n // XSTYLED PROPS\n // =============================================================================\n const xstyledProps = useGetXstyledProps(propsWithDefault);\n // =============================================================================\n // GLOBAL ATTRIBUTES\n // =============================================================================\n const globalAttributes = useGetGlobalAttributes<\n DSPerPageSelectorT.InternalProps,\n HTMLButtonElement,\n DSButtonV3T.Props\n >(propsWithDefault);\n // =============================================================================\n // OWNER PROPS\n // =============================================================================\n const ownerPropsConfig = useOwnerProps(propsWithDefault);\n // AD HOC PER COMPONENT LOGIC\n // =============================================================================\n // custom code goes here, this is an example\n // const instanceUid = React.useMemo(() => `ds-per-page-selector-${uid(5)}`, []);\n\n const { pageSize, perPageOptions, perPageStep, minPerPage, maxPerPage } = propsWithDefault;\n const [isOpened, setIsOpened] = useState(false);\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 const chevronRef = useRef<HTMLElement>(null);\n const { width: chevronWidth } = useOnElementResize(chevronRef);\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 // =============================================================================\n // HELPERS HOOKS CONFIGS\n // =============================================================================\n // const eventHandlers = useEventHandlers({ propsWithDefault, instanceUid }); // <-- complex logic should be made atomics this way\n\n return React.useMemo(\n () => ({\n propsWithDefault,\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n actionRef,\n btnRef,\n chevronRef,\n chevronWidth,\n isOpened,\n options,\n setIsOpened,\n }),\n [propsWithDefault, xstyledProps, globalAttributes, ownerPropsConfig, isOpened, options, chevronRef, chevronWidth],\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,8BAKO;AACP,mBAA4D;AAE5D,mCAAwF;AACxF,8BAAiC;AACjC,wBAA2C;AAC3C,kCAAmC;AAE5B,MAAM,qBAAqB,CAAC,kBAA4C;AAI7E,QAAM,uBAAmB,sDAA+D,eAAe,yCAAY;AACnH,gDAAiB,kBAAkB,6DAAgC;AAInE,QAAM,mBAAe,4CAAmB,gBAAgB;AAIxD,QAAM,uBAAmB,gDAIvB,gBAAgB;AAIlB,QAAM,uBAAmB,uCAAc,gBAAgB;AAMvD,QAAM,EAAE,UAAU,gBAAgB,aAAa,YAAY,WAAW,IAAI;AAC1E,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAS,KAAK;AAC9C,QAAM,cAAU,sBAAQ,MAAM;AAC5B,QAAI,eAAgB,QAAO,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,QAAM,iBAAa,qBAAoB,IAAI;AAC3C,QAAM,EAAE,OAAO,aAAa,QAAI,gDAAmB,UAAU;AAE7D,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;AAOb,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,IACF;AAAA,IACA,CAAC,kBAAkB,cAAc,kBAAkB,kBAAkB,UAAU,SAAS,YAAY,YAAY;AAAA,EAClH;AACF;",
|
|
6
6
|
"names": ["React"]
|
|
7
7
|
}
|
|
@@ -29,13 +29,18 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
29
29
|
var styled_exports = {};
|
|
30
30
|
__export(styled_exports, {
|
|
31
31
|
InvisibleDiv: () => InvisibleDiv,
|
|
32
|
-
PaginationDropdownButtonPerPageSelector: () => PaginationDropdownButtonPerPageSelector
|
|
32
|
+
PaginationDropdownButtonPerPageSelector: () => PaginationDropdownButtonPerPageSelector,
|
|
33
|
+
StyledHeader: () => StyledHeader
|
|
33
34
|
});
|
|
34
35
|
module.exports = __toCommonJS(styled_exports);
|
|
35
36
|
var React = __toESM(require("react"));
|
|
36
37
|
var import_ds_button_v2 = require("@elliemae/ds-button-v2");
|
|
37
38
|
var import_ds_system = require("@elliemae/ds-system");
|
|
38
39
|
var import_constants = require("./constants/index.js");
|
|
40
|
+
const fontSize13Base13 = 13 / 13;
|
|
41
|
+
const fontSize13Base16 = 13 / 16;
|
|
42
|
+
const fontSize12Base13 = 12 / 13;
|
|
43
|
+
const fontSize12Base16 = 12 / 16;
|
|
39
44
|
const styledFocusCss = import_ds_system.css`
|
|
40
45
|
&:after {
|
|
41
46
|
display: block;
|
|
@@ -58,7 +63,7 @@ const InvisibleDiv = import_ds_system.styled.div`
|
|
|
58
63
|
position: absolute;
|
|
59
64
|
`;
|
|
60
65
|
const paginationDropdownButtonCommonStyles = import_ds_system.css`
|
|
61
|
-
height: 42px;
|
|
66
|
+
min-height: 42px;
|
|
62
67
|
display: grid;
|
|
63
68
|
grid-auto-flow: column;
|
|
64
69
|
justify-content: center;
|
|
@@ -86,5 +91,27 @@ const PaginationDropdownButtonPerPageSelector = (0, import_ds_system.styled)(imp
|
|
|
86
91
|
preserveLegacyDataTestId: true
|
|
87
92
|
})`
|
|
88
93
|
${paginationDropdownButtonCommonStyles}
|
|
94
|
+
/**
|
|
95
|
+
* Pagination uses DSTypography internally, but each typography variant defines
|
|
96
|
+
* its own font-size. When these components are placed inside a styled() wrapper,
|
|
97
|
+
* trying to style them via styled(DSTypography) triggers TypeScript errors
|
|
98
|
+
* because DSTypography exposes "as" props and variant-specific overrides.
|
|
99
|
+
*
|
|
100
|
+
* Instead of wrapping DSTypography directly in styled(), we target the
|
|
101
|
+
* underlying rendered elements via className/id. This avoids the TS conflicts
|
|
102
|
+
* while still allowing us to override their font-size reliably.
|
|
103
|
+
*/
|
|
104
|
+
.typography-per-page-selector {
|
|
105
|
+
font-size: ${fontSize13Base16}rem;
|
|
106
|
+
@media (min-width: ${({ theme }) => theme.breakpoints.small}) {
|
|
107
|
+
font-size: ${fontSize13Base13}rem;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
`;
|
|
111
|
+
const StyledHeader = import_ds_system.styled.div`
|
|
112
|
+
font-size: ${fontSize12Base16}rem;
|
|
113
|
+
@media (min-width: ${({ theme }) => theme.breakpoints.small}) {
|
|
114
|
+
font-size: ${fontSize12Base13}rem;
|
|
115
|
+
}
|
|
89
116
|
`;
|
|
90
117
|
//# sourceMappingURL=styled.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/parts/DSPerPageSelector/styled.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["import { DSButtonV3 } from '@elliemae/ds-button-v2';\n\nimport { css, styled } from '@elliemae/ds-system';\nimport type {} from '@xstyled/system';\nimport { DSPaginationName, PER_PAGE_SELECTOR_SLOTS } from './constants/index.js';\n\nconst styledFocusCss = css`\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\nexport const InvisibleDiv = styled.div`\n opacity: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n position: absolute;\n`;\n\nconst paginationDropdownButtonCommonStyles = css`\n height: 42px;\n display: grid;\n grid-auto-flow: column;\n justify-content: center;\n align-items: center;\n position: relative;\n padding-left: 16px;\n padding-right: 16px;\n grid-gap: 8px;\n font-size: 13px;\n color: neutral-700;\n cursor: pointer;\n border-radius: 0;\n font-weight: ${(props) => props.theme.fontWeights.regular};\n :focus {\n ${styledFocusCss}\n }\n &[aria-disabled='true'] {\n cursor: not-allowed;\n }\n white-space: nowrap;\n`;\nexport const PaginationDropdownButtonPerPageSelector = styled(DSButtonV3, {\n name: DSPaginationName,\n slot: PER_PAGE_SELECTOR_SLOTS.PER_PAGE_SELECTOR,\n preserveLegacyDataTestId: true,\n})`\n ${paginationDropdownButtonCommonStyles}\n`;\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,0BAA2B;AAE3B,uBAA4B;AAE5B,uBAA0D;
|
|
4
|
+
"sourcesContent": ["import { DSButtonV3 } from '@elliemae/ds-button-v2';\n\nimport { css, styled } from '@elliemae/ds-system';\nimport type {} from '@xstyled/system';\nimport { DSPaginationName, PER_PAGE_SELECTOR_SLOTS } from './constants/index.js';\nconst fontSize13Base13 = 13 / 13;\nconst fontSize13Base16 = 13 / 16;\n\nconst fontSize12Base13 = 12 / 13;\nconst fontSize12Base16 = 12 / 16;\n\nconst styledFocusCss = css`\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\nexport const InvisibleDiv = styled.div`\n opacity: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n position: absolute;\n`;\n\nconst paginationDropdownButtonCommonStyles = css`\n min-height: 42px;\n display: grid;\n grid-auto-flow: column;\n justify-content: center;\n align-items: center;\n position: relative;\n padding-left: 16px;\n padding-right: 16px;\n grid-gap: 8px;\n font-size: 13px;\n color: neutral-700;\n cursor: pointer;\n border-radius: 0;\n font-weight: ${(props) => props.theme.fontWeights.regular};\n :focus {\n ${styledFocusCss}\n }\n &[aria-disabled='true'] {\n cursor: not-allowed;\n }\n white-space: nowrap;\n`;\nexport const PaginationDropdownButtonPerPageSelector = styled(DSButtonV3, {\n name: DSPaginationName,\n slot: PER_PAGE_SELECTOR_SLOTS.PER_PAGE_SELECTOR,\n preserveLegacyDataTestId: true,\n})`\n ${paginationDropdownButtonCommonStyles}\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 .typography-per-page-selector {\n font-size: ${fontSize13Base16}rem;\n @media (min-width: ${({ theme }) => theme.breakpoints.small}) {\n font-size: ${fontSize13Base13}rem;\n }\n }\n`;\n\nexport const StyledHeader = styled.div`\n font-size: ${fontSize12Base16}rem;\n @media (min-width: ${({ theme }) => theme.breakpoints.small}) {\n font-size: ${fontSize12Base13}rem;\n }\n`;\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,0BAA2B;AAE3B,uBAA4B;AAE5B,uBAA0D;AAC1D,MAAM,mBAAmB,KAAK;AAC9B,MAAM,mBAAmB,KAAK;AAE9B,MAAM,mBAAmB,KAAK;AAC9B,MAAM,mBAAmB,KAAK;AAE9B,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBASC,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAMvD,MAAM,eAAe,wBAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQnC,MAAM,uCAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAc5B,CAAC,UAAU,MAAM,MAAM,YAAY,OAAO;AAAA;AAAA,MAErD,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOb,MAAM,8CAA0C,yBAAO,gCAAY;AAAA,EACxE,MAAM;AAAA,EACN,MAAM,yCAAwB;AAAA,EAC9B,0BAA0B;AAC5B,CAAC;AAAA,IACG,oCAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAYvB,gBAAgB;AAAA,yBACR,CAAC,EAAE,MAAM,MAAM,MAAM,YAAY,KAAK;AAAA,mBAC5C,gBAAgB;AAAA;AAAA;AAAA;AAK5B,MAAM,eAAe,wBAAO;AAAA,eACpB,gBAAgB;AAAA,uBACR,CAAC,EAAE,MAAM,MAAM,MAAM,YAAY,KAAK;AAAA,iBAC5C,gBAAgB;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["
|
|
3
|
+
"sources": ["../../../../src/parts/shared/useOnElementOnResize.tsx", "../../../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
4
|
"sourcesContent": ["import type React from 'react';\nimport { useState, useEffect, useRef, useMemo } from 'react';\n\n// Custom hook to track dimension of a component\n// Taken and modified from https://stackoverflow.com/a/60218754\nexport const useOnElementResize = <T extends HTMLElement>(\n targetRef: React.RefObject<T>,\n): Record<'width' | 'height', number> => {\n const [width, setWidth] = useState(targetRef.current?.offsetWidth ?? 0);\n const [height, setHeight] = useState(targetRef.current?.offsetHeight ?? 0);\n const observer = useRef<ResizeObserver>();\n\n useEffect(() => {\n function outputsize() {\n setWidth(targetRef.current?.offsetWidth ?? 0);\n setHeight(targetRef.current?.offsetHeight ?? 0);\n }\n\n observer.current = new ResizeObserver(outputsize);\n const el = targetRef.current as Element | null;\n if (el) observer.current.observe(el);\n\n return () => {\n if (el) observer.current?.disconnect();\n };\n }, [targetRef]);\n\n return useMemo(\n () => ({\n width,\n height,\n }),\n [width, height],\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,mBAAqD;AAI9C,MAAM,qBAAqB,CAChC,cACuC;AACvC,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAS,UAAU,SAAS,eAAe,CAAC;AACtE,QAAM,CAAC,QAAQ,SAAS,QAAI,uBAAS,UAAU,SAAS,gBAAgB,CAAC;AACzE,QAAM,eAAW,qBAAuB;AAExC,8BAAU,MAAM;AACd,aAAS,aAAa;AACpB,eAAS,UAAU,SAAS,eAAe,CAAC;AAC5C,gBAAU,UAAU,SAAS,gBAAgB,CAAC;AAAA,IAChD;AAEA,aAAS,UAAU,IAAI,eAAe,UAAU;AAChD,UAAM,KAAK,UAAU;AACrB,QAAI,GAAI,UAAS,QAAQ,QAAQ,EAAE;AAEnC,WAAO,MAAM;AACX,UAAI,GAAI,UAAS,SAAS,WAAW;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,aAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,OAAO,MAAM;AAAA,EAChB;AACF;",
|
|
6
6
|
"names": []
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/DSPageNextButton/DSPageNextButton.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "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"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "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"],
|
|
5
5
|
"mappings": "AAAA,YAAY,WAAW;ACiEjB;AAjEN,SAAS,gBAAgB;AACzB,SAAS,cAAc;AAGvB,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAC7B,SAAS,yBAAyB;AAClC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAiC,uCAAuC;AAExE,MAAM,iBAAiB,OAAO,YAAY;AAAA,EACxC,MAAM;AAAA,EACN,MAAM,uBAAuB;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,IAAI,kBAAkB,KAAK;AAE3B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,CAAC;AAAA,MACX,YAAW;AAAA,MACX,eAAa,6BAA6B;AAAA,MAC1C,cAAW;AAAA,MACV,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACJ,SAAS,MAAM;AACb,YAAI,YAAa,YAAW;AAAA,MAC9B;AAAA,MAEA,8BAAC,gBAAa,OAAO,cAAc,CAAC,iBAAiB,KAAK,IAAI,CAAC,WAAW,KAAK,GAAG;AAAA;AAAA,EACpF;AAEJ;AAEA,iBAAiB,cAAc;AAC/B,MAAM,6BAA6B,SAAS,gBAAgB;AAC5D,2BAA2B,YAAY;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/DSPagePrevButton/DSPagePrevButton.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "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"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "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"],
|
|
5
5
|
"mappings": "AAAA,YAAY,WAAW;ACiEjB;AAjEN,SAAS,gBAAgB;AACzB,SAAS,cAAc;AAGvB,SAAS,kBAAkB;AAC3B,SAAS,mBAAmB;AAC5B,SAAS,yBAAyB;AAClC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAiC,uCAAuC;AAExE,MAAM,qBAAqB,OAAO,YAAY;AAAA,EAC5C,MAAM;AAAA,EACN,MAAM,uBAAuB;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,IAAI,kBAAkB,KAAK;AAE3B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,CAAC;AAAA,MACX,YAAW;AAAA,MACX,eAAa,6BAA6B;AAAA,MAC1C,cAAW;AAAA,MACV,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACJ,SAAS,MAAM;AACb,YAAI,gBAAiB,gBAAe;AAAA,MACtC;AAAA,MAEA,8BAAC,eAAY,OAAO,kBAAkB,CAAC,iBAAiB,KAAK,IAAI,CAAC,WAAW,KAAK,GAAG;AAAA;AAAA,EACvF;AAEJ;AAEA,iBAAiB,cAAc;AAC/B,MAAM,6BAA6B,SAAS,gBAAgB;AAC5D,2BAA2B,YAAY;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
PAGINATION_CONTAINER_SLOTS
|
|
13
13
|
} from "./constants/index.js";
|
|
14
14
|
const StyledPaginationContainer = styled(Grid, { name: DSPaginationName, slot: PAGINATION_CONTAINER_SLOTS.ROOT })`
|
|
15
|
-
height: 42px;
|
|
15
|
+
min-height: 42px;
|
|
16
16
|
max-width: 100%;
|
|
17
17
|
align-items: center;
|
|
18
18
|
justify-content: center;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/DSPaginationContainer/DSPaginationContainer.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "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"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "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"],
|
|
5
5
|
"mappings": "AAAA,YAAY,WAAW;AC2CjB;AA1CN,SAAS,gBAAmC;AAC5C,SAAS,QAAQ,0BAA0B;AAC3C,SAAS,YAAY;AACrB,SAAsC,4CAA4C;AAClF,SAAS,8BAA8B;AACvC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,MAAM,4BAA4B,OAAO,MAAM,EAAE,MAAM,kBAAkB,MAAM,2BAA2B,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAS5G,kBAAkB;AAAA;AAGtB,MAAM,0BAA0B,OAAO,OAAO,EAAE,MAAM,kBAAkB,MAAM,2BAA2B,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAOlH,MAAM,wBAA2E,CAAC,UAAU;AAC1F,QAAM,EAAE,cAAc,kBAAkB,iBAAiB,IAAI,uBAAuB,KAAK;AAEzF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,iCAAiC;AAAA,MAC7C,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACJ,MAAM,CAAC,mBAAmB;AAAA,MAE1B,8BAAC,2BAAyB,GAAG,kBAAmB,gBAAM,UAAS;AAAA;AAAA,EACjE;AAEJ;AAEA,sBAAsB,cAAc;AACpC,MAAM,kCAAkC,SAAS,qBAAqB;AACtE,gCAAgC,YAAY;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useMemo } from "react";
|
|
3
|
+
import React2, { useMemo } from "react";
|
|
4
4
|
import { DSCircularIndeterminateIndicator } from "@elliemae/ds-circular-progress-indicator";
|
|
5
|
-
import { DSDropdownMenuV2 } from "@elliemae/ds-dropdownmenu-v2";
|
|
6
5
|
import { Grid } from "@elliemae/ds-grid";
|
|
7
6
|
import { ChevronDown } from "@elliemae/ds-icons";
|
|
8
7
|
import { describe } from "@elliemae/ds-props-helpers";
|
|
@@ -12,7 +11,7 @@ import { createPaginatorHeader } from "./config/createPaginatorHeader.js";
|
|
|
12
11
|
import { usePaginator } from "./config/usePaginator.js";
|
|
13
12
|
import { DSPaginatorName, PAGINATOR_DATA_TESTID } from "./constants/index.js";
|
|
14
13
|
import { DSPaginatorPropTypesSchema } from "./react-desc-prop-types.js";
|
|
15
|
-
import { PaginationDropdownButtonPaginator,
|
|
14
|
+
import { InvisibleDiv, PaginationDropdownButtonPaginator, StyledDropdown } from "./styled.js";
|
|
16
15
|
const DSPaginator = (props) => {
|
|
17
16
|
const {
|
|
18
17
|
propsWithDefault: { pageIndex, pageCount, isLoadingPageCount, onPageChange, pageDetails, pageDetailsTitle },
|
|
@@ -24,21 +23,25 @@ const DSPaginator = (props) => {
|
|
|
24
23
|
pageInfoWidth,
|
|
25
24
|
options,
|
|
26
25
|
isOpened,
|
|
27
|
-
setIsOpened,
|
|
28
|
-
detailWidth,
|
|
29
26
|
actionRef,
|
|
30
|
-
|
|
27
|
+
widestChildRef,
|
|
28
|
+
pageInfoRef,
|
|
29
|
+
checkMarkRef,
|
|
30
|
+
checkMarkWidth,
|
|
31
|
+
onKeyDown,
|
|
32
|
+
setIsOpened
|
|
31
33
|
} = usePaginator(props);
|
|
34
|
+
const widestTypographyRef = React2.useRef(null);
|
|
32
35
|
const Header = useMemo(
|
|
33
|
-
() => createPaginatorHeader({ pageDetailsTitle, pageInfoWidth, ownerPropsConfig }),
|
|
34
|
-
[pageDetailsTitle, pageInfoWidth, ownerPropsConfig]
|
|
36
|
+
() => createPaginatorHeader({ pageDetailsTitle, pageInfoWidth, ownerPropsConfig, checkMarkWidth }),
|
|
37
|
+
[pageDetailsTitle, pageInfoWidth, ownerPropsConfig, checkMarkWidth]
|
|
35
38
|
);
|
|
36
39
|
const buttonOnClick = useMemo(() => {
|
|
37
40
|
if (globalAttributes.onClick) return globalAttributes.onClick;
|
|
38
41
|
return () => setIsOpened((prev) => !prev);
|
|
39
42
|
}, [globalAttributes.onClick, setIsOpened]);
|
|
40
43
|
return /* @__PURE__ */ jsxs(
|
|
41
|
-
|
|
44
|
+
StyledDropdown,
|
|
42
45
|
{
|
|
43
46
|
isOpened,
|
|
44
47
|
options,
|
|
@@ -52,11 +55,24 @@ const DSPaginator = (props) => {
|
|
|
52
55
|
setIsOpened(false);
|
|
53
56
|
btnRef.current?.focus();
|
|
54
57
|
},
|
|
55
|
-
customOffset: [-
|
|
58
|
+
customOffset: [-(checkMarkWidth + 7), 2],
|
|
56
59
|
startPlacementPreference: "top-start",
|
|
57
60
|
actionRef,
|
|
58
61
|
onKeyDown,
|
|
59
|
-
minWidth: pageDetails.length !== 0 ? btnWidth +
|
|
62
|
+
minWidth: pageDetails.length !== 0 ? btnWidth + checkMarkWidth + 7 : (
|
|
63
|
+
/**
|
|
64
|
+
* Structure of the width:
|
|
65
|
+
* 16px (left padding)
|
|
66
|
+
* + chevronWidth (size of the chevron icon)
|
|
67
|
+
* + 8px (spacing between chevron and text)
|
|
68
|
+
* + pageCount length in ch
|
|
69
|
+
* + 16px (right padding)
|
|
70
|
+
* + a small scrollbar placeholder (to avoid text wrapping when scrollbars appear)
|
|
71
|
+
* By using `calc()` + `ch` units, the component stays responsive to font-size changes
|
|
72
|
+
* without requiring an extra ref to measure the page count text width.
|
|
73
|
+
*/
|
|
74
|
+
`calc(${checkMarkWidth + 60}px + ${pageCount.toString().length}ch)`
|
|
75
|
+
),
|
|
60
76
|
maxHeight: 300,
|
|
61
77
|
HeaderComp: Header,
|
|
62
78
|
children: [
|
|
@@ -74,17 +90,39 @@ const DSPaginator = (props) => {
|
|
|
74
90
|
...ownerPropsConfig,
|
|
75
91
|
onClick: buttonOnClick,
|
|
76
92
|
children: /* @__PURE__ */ jsxs(Grid, { gutter: "xxxs", alignItems: "center", style: { gridAutoFlow: "column" }, children: [
|
|
77
|
-
/* @__PURE__ */
|
|
78
|
-
|
|
79
|
-
|
|
93
|
+
/* @__PURE__ */ jsxs("div", { ref: pageInfoRef, children: [
|
|
94
|
+
/* @__PURE__ */ jsx(
|
|
95
|
+
DSTypography,
|
|
96
|
+
{
|
|
97
|
+
id: "typography-page-index",
|
|
98
|
+
variant: "b1",
|
|
99
|
+
as: "span",
|
|
100
|
+
fontWeight: "semibold",
|
|
101
|
+
textAlign: "start",
|
|
102
|
+
children: pageIndex
|
|
103
|
+
}
|
|
104
|
+
),
|
|
105
|
+
/* @__PURE__ */ jsxs(
|
|
106
|
+
DSTypography,
|
|
107
|
+
{
|
|
108
|
+
variant: "b1",
|
|
109
|
+
as: "span",
|
|
110
|
+
className: "typography-page-info-and-detail",
|
|
111
|
+
children: [
|
|
112
|
+
"/ ",
|
|
113
|
+
pageCount
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
] }),
|
|
80
118
|
isLoadingPageCount && /* @__PURE__ */ jsx(DSCircularIndeterminateIndicator, { ml: "xxxs", mr: "xxxs", size: "xs" }),
|
|
81
119
|
pageDetails.length !== 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
82
120
|
/* @__PURE__ */ jsx(DSPaginationSeparator, { height: "12px", ml: "12px", mr: "xxxs", ...ownerPropsConfig }),
|
|
83
121
|
/* @__PURE__ */ jsx(
|
|
84
122
|
DSTypography,
|
|
85
123
|
{
|
|
86
|
-
|
|
87
|
-
|
|
124
|
+
className: "typography-page-info-and-detail",
|
|
125
|
+
innerRef: widestTypographyRef,
|
|
88
126
|
mr: "xxs",
|
|
89
127
|
variant: "b1",
|
|
90
128
|
as: "span",
|
|
@@ -94,11 +132,42 @@ const DSPaginator = (props) => {
|
|
|
94
132
|
}
|
|
95
133
|
)
|
|
96
134
|
] }),
|
|
97
|
-
/* @__PURE__ */ jsx(ChevronDown, { ml: "xxxs", color: ["brand-primary", "700"] })
|
|
135
|
+
/* @__PURE__ */ jsx(ChevronDown, { ml: "xxxs", color: ["brand-primary", "700"], innerRef: checkMarkRef })
|
|
98
136
|
] })
|
|
99
137
|
}
|
|
100
138
|
),
|
|
101
|
-
/* @__PURE__ */ jsx(Grid, { style: { position: "relative" }, children: pageDetails.map((pageDetail) => /* @__PURE__ */ jsx(
|
|
139
|
+
/* @__PURE__ */ jsx(Grid, { style: { position: "relative" }, children: pageDetails.map((pageDetail, index) => /* @__PURE__ */ jsx(
|
|
140
|
+
InvisibleDiv,
|
|
141
|
+
{
|
|
142
|
+
innerRef: (el) => {
|
|
143
|
+
if (!el) return;
|
|
144
|
+
if (!widestChildRef.current) {
|
|
145
|
+
widestChildRef.current = el;
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (el.offsetWidth > widestChildRef.current.offsetWidth) {
|
|
149
|
+
widestChildRef.current = el;
|
|
150
|
+
}
|
|
151
|
+
if (index === pageDetails.length - 1) {
|
|
152
|
+
widestTypographyRef.current?.style.setProperty("min-width", `${widestChildRef.current?.offsetWidth}px`);
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
"data-testid": "ds-pagination-invisible-detail-for-width-calc",
|
|
156
|
+
children: /* @__PURE__ */ jsx(
|
|
157
|
+
DSTypography,
|
|
158
|
+
{
|
|
159
|
+
className: "typography-page-info-and-detail",
|
|
160
|
+
mr: "xxs",
|
|
161
|
+
variant: "b1",
|
|
162
|
+
as: "span",
|
|
163
|
+
fontWeight: "semibold",
|
|
164
|
+
textAlign: "start",
|
|
165
|
+
children: pageDetail
|
|
166
|
+
}
|
|
167
|
+
)
|
|
168
|
+
},
|
|
169
|
+
pageDetail
|
|
170
|
+
)) })
|
|
102
171
|
]
|
|
103
172
|
}
|
|
104
173
|
);
|