@elliemae/ds-pagination 3.80.0-next.50 → 3.80.0-next.53
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/DSPaginator/DSPaginator.js +10 -166
- package/dist/cjs/parts/DSPaginator/DSPaginator.js.map +2 -2
- package/dist/cjs/parts/DSPaginator/{config/usePaginationSearch.js → DSPaginatorCTX.js} +7 -32
- package/dist/cjs/parts/DSPaginator/DSPaginatorCTX.js.map +7 -0
- package/dist/cjs/parts/DSPaginator/config/{createPaginatorHeader.js → getAmountOfPages.js} +8 -23
- package/dist/cjs/parts/DSPaginator/config/getAmountOfPages.js.map +7 -0
- package/dist/cjs/parts/DSPaginator/config/getInstanceIds.js +40 -0
- package/dist/cjs/parts/DSPaginator/config/getInstanceIds.js.map +7 -0
- package/dist/cjs/parts/DSPaginator/config/navigationKeys.js +44 -0
- package/dist/cjs/parts/DSPaginator/config/navigationKeys.js.map +7 -0
- package/dist/cjs/parts/DSPaginator/config/useFocusTracker.js +77 -0
- package/dist/cjs/parts/DSPaginator/config/useFocusTracker.js.map +7 -0
- package/dist/cjs/parts/DSPaginator/config/usePaginator.js +73 -49
- package/dist/cjs/parts/DSPaginator/config/usePaginator.js.map +2 -2
- package/dist/cjs/parts/DSPaginator/config/usePaginatorFloatingContext.js +86 -0
- package/dist/cjs/parts/DSPaginator/config/usePaginatorFloatingContext.js.map +7 -0
- package/dist/cjs/parts/DSPaginator/config/usePaginatorInteractions.js +170 -0
- package/dist/cjs/parts/DSPaginator/config/usePaginatorInteractions.js.map +7 -0
- package/dist/cjs/parts/DSPaginator/config/usePaginatorSizing.js +80 -0
- package/dist/cjs/parts/DSPaginator/config/usePaginatorSizing.js.map +7 -0
- package/dist/cjs/parts/DSPaginator/config/useValidateProps.js.map +2 -2
- package/dist/cjs/parts/DSPaginator/constants/index.js +49 -3
- package/dist/cjs/parts/DSPaginator/constants/index.js.map +2 -2
- package/dist/cjs/parts/DSPaginator/parts/OptionRenderer.js +98 -0
- package/dist/cjs/parts/DSPaginator/parts/OptionRenderer.js.map +7 -0
- package/dist/cjs/parts/DSPaginator/parts/Panel.js +131 -0
- package/dist/cjs/parts/DSPaginator/parts/Panel.js.map +7 -0
- package/dist/cjs/parts/DSPaginator/parts/Trigger.js +124 -0
- package/dist/cjs/parts/DSPaginator/parts/Trigger.js.map +7 -0
- package/dist/cjs/parts/DSPaginator/react-desc-prop-types.js +6 -1
- package/dist/cjs/parts/DSPaginator/react-desc-prop-types.js.map +2 -2
- package/dist/cjs/parts/DSPaginator/styled.js +113 -38
- package/dist/cjs/parts/DSPaginator/styled.js.map +3 -3
- package/dist/cjs/parts/DSPaginator/typescript-testing/slot-props.js +12 -1
- package/dist/cjs/parts/DSPaginator/typescript-testing/slot-props.js.map +2 -2
- package/dist/cjs/parts/DSPaginator/typescript-testing/typescript-testing.js +2 -1
- package/dist/cjs/parts/DSPaginator/typescript-testing/typescript-testing.js.map +2 -2
- package/dist/cjs/parts/DSPerPageSelector/DSPerPageSelector.js +10 -79
- package/dist/cjs/parts/DSPerPageSelector/DSPerPageSelector.js.map +3 -3
- package/dist/cjs/parts/DSPerPageSelector/DSPerPageSelectorCTX.js +38 -0
- package/dist/cjs/parts/DSPerPageSelector/DSPerPageSelectorCTX.js.map +7 -0
- package/dist/cjs/parts/DSPerPageSelector/config/getInstanceIds.js +40 -0
- package/dist/cjs/parts/DSPerPageSelector/config/getInstanceIds.js.map +7 -0
- package/dist/cjs/parts/DSPerPageSelector/config/getOptions.js.map +2 -2
- package/dist/cjs/parts/DSPerPageSelector/config/getSelectedOptionIndex.js +36 -0
- package/dist/cjs/parts/DSPerPageSelector/config/getSelectedOptionIndex.js.map +7 -0
- package/dist/cjs/parts/DSPerPageSelector/config/navigationKeys.js +44 -0
- package/dist/cjs/parts/DSPerPageSelector/config/navigationKeys.js.map +7 -0
- package/dist/cjs/parts/DSPerPageSelector/config/useFocusTracker.js +83 -0
- package/dist/cjs/parts/DSPerPageSelector/config/useFocusTracker.js.map +7 -0
- package/dist/cjs/parts/DSPerPageSelector/config/usePerPageSelector.js +68 -20
- package/dist/cjs/parts/DSPerPageSelector/config/usePerPageSelector.js.map +2 -2
- package/dist/cjs/parts/DSPerPageSelector/config/usePerPageSelectorFloatingContext.js +82 -0
- package/dist/cjs/parts/DSPerPageSelector/config/usePerPageSelectorFloatingContext.js.map +7 -0
- package/dist/cjs/parts/DSPerPageSelector/config/usePerPageSelectorInteractions.js +175 -0
- package/dist/cjs/parts/DSPerPageSelector/config/usePerPageSelectorInteractions.js.map +7 -0
- package/dist/cjs/parts/DSPerPageSelector/config/usePerPageSelectorSizing.js +66 -0
- package/dist/cjs/parts/DSPerPageSelector/config/usePerPageSelectorSizing.js.map +7 -0
- package/dist/cjs/parts/DSPerPageSelector/constants/index.js +47 -8
- package/dist/cjs/parts/DSPerPageSelector/constants/index.js.map +2 -2
- package/dist/cjs/parts/DSPerPageSelector/parts/OptionRenderer.js +94 -0
- package/dist/cjs/parts/DSPerPageSelector/parts/OptionRenderer.js.map +7 -0
- package/dist/cjs/parts/DSPerPageSelector/parts/Panel.js +120 -0
- package/dist/cjs/parts/DSPerPageSelector/parts/Panel.js.map +7 -0
- package/dist/cjs/parts/DSPerPageSelector/parts/Trigger.js +95 -0
- package/dist/cjs/parts/DSPerPageSelector/parts/Trigger.js.map +7 -0
- package/dist/cjs/parts/DSPerPageSelector/react-desc-prop-types.js +19 -2
- package/dist/cjs/parts/DSPerPageSelector/react-desc-prop-types.js.map +2 -2
- package/dist/cjs/parts/DSPerPageSelector/styled.js +104 -32
- package/dist/cjs/parts/DSPerPageSelector/styled.js.map +2 -2
- package/dist/cjs/parts/DSPerPageSelector/typescript-testing/slots-props.js +10 -1
- package/dist/cjs/parts/DSPerPageSelector/typescript-testing/slots-props.js.map +2 -2
- package/dist/cjs/parts/DSPerPageSelector/typescript-testing/typescript-testing.js +60 -1
- package/dist/cjs/parts/DSPerPageSelector/typescript-testing/typescript-testing.js.map +2 -2
- package/dist/cjs/react-desc-prop-types.js.map +1 -1
- package/dist/esm/parts/DSPaginator/DSPaginator.js +12 -168
- package/dist/esm/parts/DSPaginator/DSPaginator.js.map +2 -2
- package/dist/esm/parts/DSPaginator/DSPaginatorCTX.js +8 -0
- package/dist/esm/parts/DSPaginator/DSPaginatorCTX.js.map +7 -0
- package/dist/esm/parts/DSPaginator/config/getAmountOfPages.js +9 -0
- package/dist/esm/parts/DSPaginator/config/getAmountOfPages.js.map +7 -0
- package/dist/esm/parts/DSPaginator/config/getInstanceIds.js +10 -0
- package/dist/esm/parts/DSPaginator/config/getInstanceIds.js.map +7 -0
- package/dist/esm/parts/DSPaginator/config/navigationKeys.js +14 -0
- package/dist/esm/parts/DSPaginator/config/navigationKeys.js.map +7 -0
- package/dist/esm/parts/DSPaginator/config/useFocusTracker.js +47 -0
- package/dist/esm/parts/DSPaginator/config/useFocusTracker.js.map +7 -0
- package/dist/esm/parts/DSPaginator/config/usePaginator.js +74 -50
- package/dist/esm/parts/DSPaginator/config/usePaginator.js.map +2 -2
- package/dist/esm/parts/DSPaginator/config/usePaginatorFloatingContext.js +56 -0
- package/dist/esm/parts/DSPaginator/config/usePaginatorFloatingContext.js.map +7 -0
- package/dist/esm/parts/DSPaginator/config/usePaginatorInteractions.js +140 -0
- package/dist/esm/parts/DSPaginator/config/usePaginatorInteractions.js.map +7 -0
- package/dist/esm/parts/DSPaginator/config/usePaginatorSizing.js +56 -0
- package/dist/esm/parts/DSPaginator/config/usePaginatorSizing.js.map +7 -0
- package/dist/esm/parts/DSPaginator/config/useValidateProps.js.map +2 -2
- package/dist/esm/parts/DSPaginator/constants/index.js +49 -3
- package/dist/esm/parts/DSPaginator/constants/index.js.map +2 -2
- package/dist/esm/parts/DSPaginator/parts/OptionRenderer.js +68 -0
- package/dist/esm/parts/DSPaginator/parts/OptionRenderer.js.map +7 -0
- package/dist/esm/parts/DSPaginator/parts/Panel.js +101 -0
- package/dist/esm/parts/DSPaginator/parts/Panel.js.map +7 -0
- package/dist/esm/parts/DSPaginator/parts/Trigger.js +94 -0
- package/dist/esm/parts/DSPaginator/parts/Trigger.js.map +7 -0
- package/dist/esm/parts/DSPaginator/react-desc-prop-types.js +6 -1
- package/dist/esm/parts/DSPaginator/react-desc-prop-types.js.map +2 -2
- package/dist/esm/parts/DSPaginator/styled.js +120 -39
- package/dist/esm/parts/DSPaginator/styled.js.map +2 -2
- package/dist/esm/parts/DSPaginator/typescript-testing/slot-props.js +12 -1
- package/dist/esm/parts/DSPaginator/typescript-testing/slot-props.js.map +2 -2
- package/dist/esm/parts/DSPaginator/typescript-testing/typescript-testing.js +2 -1
- package/dist/esm/parts/DSPaginator/typescript-testing/typescript-testing.js.map +2 -2
- package/dist/esm/parts/DSPerPageSelector/DSPerPageSelector.js +11 -80
- package/dist/esm/parts/DSPerPageSelector/DSPerPageSelector.js.map +3 -3
- package/dist/esm/parts/DSPerPageSelector/DSPerPageSelectorCTX.js +8 -0
- package/dist/esm/parts/DSPerPageSelector/DSPerPageSelectorCTX.js.map +7 -0
- package/dist/esm/parts/DSPerPageSelector/config/getInstanceIds.js +10 -0
- package/dist/esm/parts/DSPerPageSelector/config/getInstanceIds.js.map +7 -0
- package/dist/esm/parts/DSPerPageSelector/config/getOptions.js.map +2 -2
- package/dist/esm/parts/DSPerPageSelector/config/getSelectedOptionIndex.js +6 -0
- package/dist/esm/parts/DSPerPageSelector/config/getSelectedOptionIndex.js.map +7 -0
- package/dist/esm/parts/DSPerPageSelector/config/navigationKeys.js +14 -0
- package/dist/esm/parts/DSPerPageSelector/config/navigationKeys.js.map +7 -0
- package/dist/esm/parts/DSPerPageSelector/config/useFocusTracker.js +53 -0
- package/dist/esm/parts/DSPerPageSelector/config/useFocusTracker.js.map +7 -0
- package/dist/esm/parts/DSPerPageSelector/config/usePerPageSelector.js +69 -21
- package/dist/esm/parts/DSPerPageSelector/config/usePerPageSelector.js.map +2 -2
- package/dist/esm/parts/DSPerPageSelector/config/usePerPageSelectorFloatingContext.js +52 -0
- package/dist/esm/parts/DSPerPageSelector/config/usePerPageSelectorFloatingContext.js.map +7 -0
- package/dist/esm/parts/DSPerPageSelector/config/usePerPageSelectorInteractions.js +145 -0
- package/dist/esm/parts/DSPerPageSelector/config/usePerPageSelectorInteractions.js.map +7 -0
- package/dist/esm/parts/DSPerPageSelector/config/usePerPageSelectorSizing.js +42 -0
- package/dist/esm/parts/DSPerPageSelector/config/usePerPageSelectorSizing.js.map +7 -0
- package/dist/esm/parts/DSPerPageSelector/constants/index.js +47 -8
- package/dist/esm/parts/DSPerPageSelector/constants/index.js.map +2 -2
- package/dist/esm/parts/DSPerPageSelector/parts/OptionRenderer.js +64 -0
- package/dist/esm/parts/DSPerPageSelector/parts/OptionRenderer.js.map +7 -0
- package/dist/esm/parts/DSPerPageSelector/parts/Panel.js +90 -0
- package/dist/esm/parts/DSPerPageSelector/parts/Panel.js.map +7 -0
- package/dist/esm/parts/DSPerPageSelector/parts/Trigger.js +65 -0
- package/dist/esm/parts/DSPerPageSelector/parts/Trigger.js.map +7 -0
- package/dist/esm/parts/DSPerPageSelector/react-desc-prop-types.js +19 -2
- package/dist/esm/parts/DSPerPageSelector/react-desc-prop-types.js.map +2 -2
- package/dist/esm/parts/DSPerPageSelector/styled.js +111 -33
- package/dist/esm/parts/DSPerPageSelector/styled.js.map +2 -2
- package/dist/esm/parts/DSPerPageSelector/typescript-testing/slots-props.js +10 -1
- package/dist/esm/parts/DSPerPageSelector/typescript-testing/slots-props.js.map +2 -2
- package/dist/esm/parts/DSPerPageSelector/typescript-testing/typescript-testing.js +60 -1
- package/dist/esm/parts/DSPerPageSelector/typescript-testing/typescript-testing.js.map +2 -2
- package/dist/esm/react-desc-prop-types.js.map +1 -1
- package/dist/types/parts/DSPageNextButton/config/usePageNextButton.d.ts +4 -4
- package/dist/types/parts/DSPagePrevButton/config/usePagePrevButton.d.ts +4 -4
- package/dist/types/parts/DSPaginationContainer/config/usePaginationContainer.d.ts +4 -4
- package/dist/types/parts/DSPaginationSeparator/config/usePaginationSeparator.d.ts +4 -4
- package/dist/types/parts/DSPaginator/DSPaginator.d.ts +5 -0
- package/dist/types/parts/DSPaginator/DSPaginatorCTX.d.ts +5 -0
- package/dist/types/parts/DSPaginator/config/getAmountOfPages.d.ts +1 -0
- package/dist/types/parts/DSPaginator/config/getInstanceIds.d.ts +3 -0
- package/dist/types/parts/DSPaginator/config/navigationKeys.d.ts +3 -0
- package/dist/types/parts/DSPaginator/config/useFocusTracker.d.ts +20 -0
- package/dist/types/parts/DSPaginator/config/usePaginator.d.ts +52 -18
- package/dist/types/parts/DSPaginator/config/usePaginatorFloatingContext.d.ts +31 -0
- package/dist/types/parts/DSPaginator/config/usePaginatorInteractions.d.ts +37 -0
- package/dist/types/parts/DSPaginator/config/usePaginatorSizing.d.ts +37 -0
- package/dist/types/parts/DSPaginator/constants/index.d.ts +36 -1
- package/dist/types/parts/DSPaginator/parts/OptionRenderer.d.ts +11 -0
- package/dist/types/parts/DSPaginator/parts/Panel.d.ts +5 -0
- package/dist/types/parts/DSPaginator/parts/Trigger.d.ts +5 -0
- package/dist/types/parts/DSPaginator/react-desc-prop-types.d.ts +17 -0
- package/dist/types/parts/DSPaginator/styled.d.ts +17 -4
- package/dist/types/parts/DSPerPageSelector/DSPerPageSelector.d.ts +5 -0
- package/dist/types/parts/DSPerPageSelector/DSPerPageSelectorCTX.d.ts +5 -0
- package/dist/types/parts/DSPerPageSelector/config/getInstanceIds.d.ts +3 -0
- package/dist/types/parts/DSPerPageSelector/config/getOptions.d.ts +3 -3
- package/dist/types/parts/DSPerPageSelector/config/getSelectedOptionIndex.d.ts +2 -0
- package/dist/types/parts/DSPerPageSelector/config/navigationKeys.d.ts +3 -0
- package/dist/types/parts/DSPerPageSelector/config/useFocusTracker.d.ts +22 -0
- package/dist/types/parts/DSPerPageSelector/config/usePerPageSelector.d.ts +43 -10
- package/dist/types/parts/DSPerPageSelector/config/usePerPageSelectorFloatingContext.d.ts +31 -0
- package/dist/types/parts/DSPerPageSelector/config/usePerPageSelectorInteractions.d.ts +38 -0
- package/dist/types/parts/DSPerPageSelector/config/usePerPageSelectorSizing.d.ts +25 -0
- package/dist/types/parts/DSPerPageSelector/constants/index.d.ts +32 -5
- package/dist/types/parts/DSPerPageSelector/parts/OptionRenderer.d.ts +11 -0
- package/dist/types/parts/DSPerPageSelector/parts/Panel.d.ts +5 -0
- package/dist/types/parts/DSPerPageSelector/parts/Trigger.d.ts +5 -0
- package/dist/types/parts/DSPerPageSelector/react-desc-prop-types.d.ts +27 -2
- package/dist/types/parts/DSPerPageSelector/styled.d.ts +15 -2
- package/dist/types/react-desc-prop-types.d.ts +2 -2
- package/package.json +15 -13
- package/dist/cjs/parts/DSPaginator/config/createPaginatorHeader.js.map +0 -7
- package/dist/cjs/parts/DSPaginator/config/getOptions.js +0 -76
- package/dist/cjs/parts/DSPaginator/config/getOptions.js.map +0 -7
- package/dist/cjs/parts/DSPaginator/config/usePaginationSearch.js.map +0 -7
- package/dist/esm/parts/DSPaginator/config/createPaginatorHeader.js +0 -24
- package/dist/esm/parts/DSPaginator/config/createPaginatorHeader.js.map +0 -7
- package/dist/esm/parts/DSPaginator/config/getOptions.js +0 -46
- package/dist/esm/parts/DSPaginator/config/getOptions.js.map +0 -7
- package/dist/esm/parts/DSPaginator/config/usePaginationSearch.js +0 -33
- package/dist/esm/parts/DSPaginator/config/usePaginationSearch.js.map +0 -7
- package/dist/types/parts/DSPaginator/config/createPaginatorHeader.d.ts +0 -9
- package/dist/types/parts/DSPaginator/config/getOptions.d.ts +0 -8
- package/dist/types/parts/DSPaginator/config/usePaginationSearch.d.ts +0 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/DSPerPageSelector/parts/OptionRenderer.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { Checkmark } from '@elliemae/ds-icons';\nimport React, { useCallback, useContext } from 'react';\nimport { getSelectedOptionIndex } from '../config/getSelectedOptionIndex.js';\nimport { getOptionRegionId } from '../config/useFocusTracker.js';\nimport { PER_PAGE_SELECTOR_DATA_TESTID } from '../constants/index.js';\nimport { DSPerPageSelectorContext } from '../DSPerPageSelectorCTX.js';\nimport { StyledOption, StyledOptionCheckmark, StyledOptionLabel } from '../styled.js';\n\ntype OptionRendererPropsT = { index: number };\n\n/**\n * One option of the list. Rendered by the virtual list, so only the options near the viewport are mounted:\n * every position-dependent a11y fact (`aria-posinset`, `aria-setsize`) is explicit, and the focus lands on an option by\n * its dsId identity from the ref callback (see useFocusTracker), not by its place in the DOM.\n */\nexport const OptionRenderer = ({ index }: OptionRendererPropsT) => {\n const {\n propsWithDefault: { pageSize },\n ownerPropsConfig: { getOwnerProps },\n options,\n chevronWidth,\n focusTrackers: { focusRegion, trackFocusOption },\n commitOption,\n } = useContext(DSPerPageSelectorContext);\n\n const option = options[index];\n const isSelected = getSelectedOptionIndex(options, pageSize) === index;\n const isFocusTarget = focusRegion === getOptionRegionId(option.dsId);\n\n const handleRef = useCallback(\n (node: HTMLDivElement | null) => {\n if (node && isFocusTarget) node.focus();\n },\n [isFocusTarget],\n );\n // the tracker follows the real focus, so a mouse or pointer interaction can't leave it pointing somewhere else\n const handleFocus = useCallback(() => trackFocusOption(option.dsId), [option.dsId, trackFocusOption]);\n const handleClick = useCallback(() => commitOption(option), [commitOption, option]);\n const getOwnerPropsArguments = useCallback(() => ({ option, isSelected }), [option, isSelected]);\n\n return (\n <StyledOption\n // legacy data-testid \u2014 preserved for QA/consumer compatibility, breaking change if removed\n data-testid={PER_PAGE_SELECTOR_DATA_TESTID.OPTION}\n role=\"option\"\n aria-selected={isSelected}\n aria-setsize={options.length}\n aria-posinset={index + 1}\n // roving tabindex: the option that holds the focus is the single tab stop of the list\n tabIndex={isFocusTarget ? 0 : -1}\n innerRef={handleRef}\n onFocus={handleFocus}\n onClick={handleClick}\n // same columns as the header: [checkmark] [label]\n style={{ gridTemplateColumns: `${chevronWidth}px auto` }}\n getOwnerProps={getOwnerProps}\n getOwnerPropsArguments={getOwnerPropsArguments}\n >\n {/* the selected state is conveyed by aria-selected, the icon is only visual */}\n <StyledOptionCheckmark\n aria-hidden=\"true\"\n getOwnerProps={getOwnerProps}\n getOwnerPropsArguments={getOwnerPropsArguments}\n >\n {isSelected ? <Checkmark size=\"s\" color={['brand-primary', '600']} /> : null}\n </StyledOptionCheckmark>\n <StyledOptionLabel getOwnerProps={getOwnerProps} getOwnerPropsArguments={getOwnerPropsArguments}>\n {option.label}\n </StyledOptionLabel>\n </StyledOption>\n );\n};\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACyCnB,SAuBkB,KAvBlB;AAzCJ,SAAS,iBAAiB;AAC1B,SAAgB,aAAa,kBAAkB;AAC/C,SAAS,8BAA8B;AACvC,SAAS,yBAAyB;AAClC,SAAS,qCAAqC;AAC9C,SAAS,gCAAgC;AACzC,SAAS,cAAc,uBAAuB,yBAAyB;AAShE,MAAM,iBAAiB,CAAC,EAAE,MAAM,MAA4B;AACjE,QAAM;AAAA,IACJ,kBAAkB,EAAE,SAAS;AAAA,IAC7B,kBAAkB,EAAE,cAAc;AAAA,IAClC;AAAA,IACA;AAAA,IACA,eAAe,EAAE,aAAa,iBAAiB;AAAA,IAC/C;AAAA,EACF,IAAI,WAAW,wBAAwB;AAEvC,QAAM,SAAS,QAAQ,KAAK;AAC5B,QAAM,aAAa,uBAAuB,SAAS,QAAQ,MAAM;AACjE,QAAM,gBAAgB,gBAAgB,kBAAkB,OAAO,IAAI;AAEnE,QAAM,YAAY;AAAA,IAChB,CAAC,SAAgC;AAC/B,UAAI,QAAQ,cAAe,MAAK,MAAM;AAAA,IACxC;AAAA,IACA,CAAC,aAAa;AAAA,EAChB;AAEA,QAAM,cAAc,YAAY,MAAM,iBAAiB,OAAO,IAAI,GAAG,CAAC,OAAO,MAAM,gBAAgB,CAAC;AACpG,QAAM,cAAc,YAAY,MAAM,aAAa,MAAM,GAAG,CAAC,cAAc,MAAM,CAAC;AAClF,QAAM,yBAAyB,YAAY,OAAO,EAAE,QAAQ,WAAW,IAAI,CAAC,QAAQ,UAAU,CAAC;AAE/F,SACE;AAAA,IAAC;AAAA;AAAA,MAEC,eAAa,8BAA8B;AAAA,MAC3C,MAAK;AAAA,MACL,iBAAe;AAAA,MACf,gBAAc,QAAQ;AAAA,MACtB,iBAAe,QAAQ;AAAA,MAEvB,UAAU,gBAAgB,IAAI;AAAA,MAC9B,UAAU;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,MAET,OAAO,EAAE,qBAAqB,GAAG,YAAY,UAAU;AAAA,MACvD;AAAA,MACA;AAAA,MAGA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,eAAY;AAAA,YACZ;AAAA,YACA;AAAA,YAEC,uBAAa,oBAAC,aAAU,MAAK,KAAI,OAAO,CAAC,iBAAiB,KAAK,GAAG,IAAK;AAAA;AAAA,QAC1E;AAAA,QACA,oBAAC,qBAAkB,eAA8B,wBAC9C,iBAAO,OACV;AAAA;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useContext } from "react";
|
|
4
|
+
import { PER_PAGE_SELECTOR_DATA_TESTID, PER_PAGE_SELECTOR_OPTION_HEIGHT } from "../constants/index.js";
|
|
5
|
+
import { DSPerPageSelectorContext } from "../DSPerPageSelectorCTX.js";
|
|
6
|
+
import { StyledFloatingWrapper, StyledHeader, StyledList, StyledListWrapper, StyledPanel } from "../styled.js";
|
|
7
|
+
import { OptionRenderer } from "./OptionRenderer.js";
|
|
8
|
+
const getEstimatedSize = () => PER_PAGE_SELECTOR_OPTION_HEIGHT;
|
|
9
|
+
const Panel = () => {
|
|
10
|
+
const {
|
|
11
|
+
ownerPropsConfig,
|
|
12
|
+
isOpen,
|
|
13
|
+
options,
|
|
14
|
+
panelStyle,
|
|
15
|
+
listMaxHeight,
|
|
16
|
+
floatingStyles,
|
|
17
|
+
floatingContext,
|
|
18
|
+
floatingInnerRef,
|
|
19
|
+
listActionRef,
|
|
20
|
+
handleListWrapperRef,
|
|
21
|
+
handlePanelKeyDown,
|
|
22
|
+
handlePanelKeyDownCapture,
|
|
23
|
+
handleBlurOutOfWidget,
|
|
24
|
+
headerId,
|
|
25
|
+
listId,
|
|
26
|
+
dialogId
|
|
27
|
+
} = useContext(DSPerPageSelectorContext);
|
|
28
|
+
const getOptionId = useCallback((index) => options[index].dsId, [options]);
|
|
29
|
+
return /* @__PURE__ */ jsx(
|
|
30
|
+
StyledFloatingWrapper,
|
|
31
|
+
{
|
|
32
|
+
innerRef: floatingInnerRef,
|
|
33
|
+
isOpen,
|
|
34
|
+
floatingStyles,
|
|
35
|
+
context: floatingContext,
|
|
36
|
+
id: dialogId,
|
|
37
|
+
role: "dialog",
|
|
38
|
+
"aria-labelledby": headerId,
|
|
39
|
+
...ownerPropsConfig,
|
|
40
|
+
children: /* @__PURE__ */ jsxs(
|
|
41
|
+
StyledPanel,
|
|
42
|
+
{
|
|
43
|
+
"data-testid": PER_PAGE_SELECTOR_DATA_TESTID.PANEL,
|
|
44
|
+
style: panelStyle,
|
|
45
|
+
onKeyDownCapture: handlePanelKeyDownCapture,
|
|
46
|
+
onKeyDown: handlePanelKeyDown,
|
|
47
|
+
onBlur: handleBlurOutOfWidget,
|
|
48
|
+
...ownerPropsConfig,
|
|
49
|
+
children: [
|
|
50
|
+
/* @__PURE__ */ jsx(
|
|
51
|
+
StyledHeader,
|
|
52
|
+
{
|
|
53
|
+
id: headerId,
|
|
54
|
+
"data-testid": PER_PAGE_SELECTOR_DATA_TESTID.HEADER,
|
|
55
|
+
...ownerPropsConfig,
|
|
56
|
+
children: /* @__PURE__ */ jsx("span", { children: "Per Page" })
|
|
57
|
+
}
|
|
58
|
+
),
|
|
59
|
+
/* @__PURE__ */ jsx(StyledListWrapper, { innerRef: handleListWrapperRef, ...ownerPropsConfig, children: /* @__PURE__ */ jsx(
|
|
60
|
+
StyledList,
|
|
61
|
+
{
|
|
62
|
+
dsFastlistWrapperList: {
|
|
63
|
+
role: "listbox",
|
|
64
|
+
id: listId,
|
|
65
|
+
"aria-labelledby": headerId,
|
|
66
|
+
// legacy data-testid — preserved for QA/consumer compatibility, breaking change if removed
|
|
67
|
+
"data-testid": PER_PAGE_SELECTOR_DATA_TESTID.LIST
|
|
68
|
+
},
|
|
69
|
+
dsFastlistItem: { role: "none" },
|
|
70
|
+
dsFastlistContainer: { style: { height: "auto", maxHeight: listMaxHeight } },
|
|
71
|
+
actionRef: listActionRef,
|
|
72
|
+
count: options.length,
|
|
73
|
+
ItemRenderer: OptionRenderer,
|
|
74
|
+
getId: getOptionId,
|
|
75
|
+
estimateSize: getEstimatedSize,
|
|
76
|
+
remountOnCountChange: false,
|
|
77
|
+
...ownerPropsConfig
|
|
78
|
+
}
|
|
79
|
+
) })
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
};
|
|
86
|
+
Panel.displayName = "DSPerPageSelector.Panel";
|
|
87
|
+
export {
|
|
88
|
+
Panel
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=Panel.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/DSPerPageSelector/parts/Panel.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useCallback, useContext } from 'react';\nimport { PER_PAGE_SELECTOR_DATA_TESTID, PER_PAGE_SELECTOR_OPTION_HEIGHT } from '../constants/index.js';\nimport { DSPerPageSelectorContext } from '../DSPerPageSelectorCTX.js';\nimport { StyledFloatingWrapper, StyledHeader, StyledList, StyledListWrapper, StyledPanel } from '../styled.js';\nimport { OptionRenderer } from './OptionRenderer.js';\n\n// stable reference: the virtual list reads it on every render\nconst getEstimatedSize = () => PER_PAGE_SELECTOR_OPTION_HEIGHT;\n\nexport const Panel = () => {\n const {\n ownerPropsConfig,\n isOpen,\n options,\n panelStyle,\n listMaxHeight,\n floatingStyles,\n floatingContext,\n floatingInnerRef,\n listActionRef,\n handleListWrapperRef,\n handlePanelKeyDown,\n handlePanelKeyDownCapture,\n handleBlurOutOfWidget,\n headerId,\n listId,\n dialogId,\n } = useContext(DSPerPageSelectorContext);\n\n const getOptionId = useCallback((index: number) => options[index].dsId, [options]);\n\n // the dialog (non-modal) and the list are named by the visible header, so what is announced is what is displayed\n return (\n <StyledFloatingWrapper\n innerRef={floatingInnerRef}\n isOpen={isOpen}\n floatingStyles={floatingStyles}\n context={floatingContext}\n id={dialogId}\n role=\"dialog\"\n aria-labelledby={headerId}\n {...ownerPropsConfig}\n >\n <StyledPanel\n // legacy data-testid \u2014 preserved for QA/consumer compatibility, breaking change if removed\n data-testid={PER_PAGE_SELECTOR_DATA_TESTID.PANEL}\n style={panelStyle}\n onKeyDownCapture={handlePanelKeyDownCapture}\n onKeyDown={handlePanelKeyDown}\n onBlur={handleBlurOutOfWidget}\n {...ownerPropsConfig}\n >\n <StyledHeader\n id={headerId}\n // legacy data-testid \u2014 preserved for QA/consumer compatibility, breaking change if removed\n data-testid={PER_PAGE_SELECTOR_DATA_TESTID.HEADER}\n {...ownerPropsConfig}\n >\n <span>Per Page</span>\n </StyledHeader>\n <StyledListWrapper innerRef={handleListWrapperRef} {...ownerPropsConfig}>\n <StyledList\n dsFastlistWrapperList={{\n role: 'listbox',\n id: listId,\n 'aria-labelledby': headerId,\n // legacy data-testid \u2014 preserved for QA/consumer compatibility, breaking change if removed\n 'data-testid': PER_PAGE_SELECTOR_DATA_TESTID.LIST,\n }}\n // the rows are the options themselves (they carry role=\"option\"), the wrapper of the virtual list is inert\n dsFastlistItem={{ role: 'none' }}\n // rows can wrap, so the list is as tall as its rows up to a maximum (its own default is height: 100%)\n dsFastlistContainer={{ style: { height: 'auto', maxHeight: listMaxHeight } }}\n actionRef={listActionRef}\n count={options.length}\n ItemRenderer={OptionRenderer}\n getId={getOptionId}\n estimateSize={getEstimatedSize}\n remountOnCountChange={false}\n {...ownerPropsConfig}\n />\n </StyledListWrapper>\n </StyledPanel>\n </StyledFloatingWrapper>\n );\n};\n\nPanel.displayName = 'DSPerPageSelector.Panel';\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;AC2CjB,SAeI,KAfJ;AA3CN,SAAgB,aAAa,kBAAkB;AAC/C,SAAS,+BAA+B,uCAAuC;AAC/E,SAAS,gCAAgC;AACzC,SAAS,uBAAuB,cAAc,YAAY,mBAAmB,mBAAmB;AAChG,SAAS,sBAAsB;AAG/B,MAAM,mBAAmB,MAAM;AAExB,MAAM,QAAQ,MAAM;AACzB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,wBAAwB;AAEvC,QAAM,cAAc,YAAY,CAAC,UAAkB,QAAQ,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;AAGjF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,IAAI;AAAA,MACJ,MAAK;AAAA,MACL,mBAAiB;AAAA,MAChB,GAAG;AAAA,MAEJ;AAAA,QAAC;AAAA;AAAA,UAEC,eAAa,8BAA8B;AAAA,UAC3C,OAAO;AAAA,UACP,kBAAkB;AAAA,UAClB,WAAW;AAAA,UACX,QAAQ;AAAA,UACP,GAAG;AAAA,UAEJ;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,IAAI;AAAA,gBAEJ,eAAa,8BAA8B;AAAA,gBAC1C,GAAG;AAAA,gBAEJ,8BAAC,UAAK,sBAAQ;AAAA;AAAA,YAChB;AAAA,YACA,oBAAC,qBAAkB,UAAU,sBAAuB,GAAG,kBACrD;AAAA,cAAC;AAAA;AAAA,gBACC,uBAAuB;AAAA,kBACrB,MAAM;AAAA,kBACN,IAAI;AAAA,kBACJ,mBAAmB;AAAA;AAAA,kBAEnB,eAAe,8BAA8B;AAAA,gBAC/C;AAAA,gBAEA,gBAAgB,EAAE,MAAM,OAAO;AAAA,gBAE/B,qBAAqB,EAAE,OAAO,EAAE,QAAQ,QAAQ,WAAW,cAAc,EAAE;AAAA,gBAC3E,WAAW;AAAA,gBACX,OAAO,QAAQ;AAAA,gBACf,cAAc;AAAA,gBACd,OAAO;AAAA,gBACP,cAAc;AAAA,gBACd,sBAAsB;AAAA,gBACrB,GAAG;AAAA;AAAA,YACN,GACF;AAAA;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAEA,MAAM,cAAc;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ChevronDown } from "@elliemae/ds-icons";
|
|
4
|
+
import { DSTypography } from "@elliemae/ds-typography";
|
|
5
|
+
import { useCallback, useContext } from "react";
|
|
6
|
+
import { PER_PAGE_SELECTOR_DATA_TESTID, PER_PAGE_SELECTOR_REGION_FOCUSES } from "../constants/index.js";
|
|
7
|
+
import { DSPerPageSelectorContext } from "../DSPerPageSelectorCTX.js";
|
|
8
|
+
import { StyledTrigger, StyledTriggerWrapper } from "../styled.js";
|
|
9
|
+
const Trigger = () => {
|
|
10
|
+
const {
|
|
11
|
+
propsWithDefault: { pageSize },
|
|
12
|
+
xstyledProps,
|
|
13
|
+
globalAttributes,
|
|
14
|
+
ownerPropsConfig,
|
|
15
|
+
isOpen,
|
|
16
|
+
focusTrackers: { focusRegion },
|
|
17
|
+
chevronRef,
|
|
18
|
+
handleTriggerRef,
|
|
19
|
+
handleTriggerClick,
|
|
20
|
+
handleTriggerKeyDown,
|
|
21
|
+
handleBlurOutOfWidget,
|
|
22
|
+
dialogId
|
|
23
|
+
} = useContext(DSPerPageSelectorContext);
|
|
24
|
+
const isFocusTarget = focusRegion === PER_PAGE_SELECTOR_REGION_FOCUSES.TRIGGER;
|
|
25
|
+
const handleRef = useCallback(
|
|
26
|
+
(node) => {
|
|
27
|
+
handleTriggerRef(node);
|
|
28
|
+
if (node && isFocusTarget) node.focus();
|
|
29
|
+
},
|
|
30
|
+
[handleTriggerRef, isFocusTarget]
|
|
31
|
+
);
|
|
32
|
+
return (
|
|
33
|
+
// legacy data-testid (the wrapper of the DSDropdownMenuV2 trigger) — preserved for QA/consumer compatibility, breaking change if removed
|
|
34
|
+
/* @__PURE__ */ jsx(StyledTriggerWrapper, { "data-testid": PER_PAGE_SELECTOR_DATA_TESTID.TRIGGER_WRAPPER, ...ownerPropsConfig, children: /* @__PURE__ */ jsxs(
|
|
35
|
+
StyledTrigger,
|
|
36
|
+
{
|
|
37
|
+
buttonType: "raw",
|
|
38
|
+
innerRef: handleRef,
|
|
39
|
+
"aria-haspopup": "dialog",
|
|
40
|
+
"aria-expanded": isOpen,
|
|
41
|
+
"aria-controls": isOpen ? dialogId : void 0,
|
|
42
|
+
"aria-label": `${pageSize} rows per page`,
|
|
43
|
+
"data-testid": PER_PAGE_SELECTOR_DATA_TESTID.PER_PAGE_SELECTOR,
|
|
44
|
+
...globalAttributes,
|
|
45
|
+
...xstyledProps,
|
|
46
|
+
...ownerPropsConfig,
|
|
47
|
+
onClick: handleTriggerClick,
|
|
48
|
+
onKeyDown: handleTriggerKeyDown,
|
|
49
|
+
onBlur: handleBlurOutOfWidget,
|
|
50
|
+
children: [
|
|
51
|
+
/* @__PURE__ */ jsxs(DSTypography, { variant: "b1", as: "span", className: "typography-per-page-selector", children: [
|
|
52
|
+
pageSize,
|
|
53
|
+
" / page"
|
|
54
|
+
] }),
|
|
55
|
+
/* @__PURE__ */ jsx(ChevronDown, { color: ["brand-primary", "700"], innerRef: chevronRef })
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
) })
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
Trigger.displayName = "DSPerPageSelector.Trigger";
|
|
62
|
+
export {
|
|
63
|
+
Trigger
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=Trigger.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/DSPerPageSelector/parts/Trigger.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { ChevronDown } from '@elliemae/ds-icons';\nimport { DSTypography } from '@elliemae/ds-typography';\nimport React, { useCallback, useContext } from 'react';\nimport { PER_PAGE_SELECTOR_DATA_TESTID, PER_PAGE_SELECTOR_REGION_FOCUSES } from '../constants/index.js';\nimport { DSPerPageSelectorContext } from '../DSPerPageSelectorCTX.js';\nimport { StyledTrigger, StyledTriggerWrapper } from '../styled.js';\n\nexport const Trigger = () => {\n const {\n propsWithDefault: { pageSize },\n xstyledProps,\n globalAttributes,\n ownerPropsConfig,\n isOpen,\n focusTrackers: { focusRegion },\n chevronRef,\n handleTriggerRef,\n handleTriggerClick,\n handleTriggerKeyDown,\n handleBlurOutOfWidget,\n dialogId,\n } = useContext(DSPerPageSelectorContext);\n\n // focus tracker: the trigger focuses itself when it is the declared target (e.g. after an option was activated)\n const isFocusTarget = focusRegion === PER_PAGE_SELECTOR_REGION_FOCUSES.TRIGGER;\n const handleRef = useCallback(\n (node: HTMLButtonElement | null) => {\n handleTriggerRef(node);\n if (node && isFocusTarget) node.focus();\n },\n [handleTriggerRef, isFocusTarget],\n );\n\n return (\n // legacy data-testid (the wrapper of the DSDropdownMenuV2 trigger) \u2014 preserved for QA/consumer compatibility, breaking change if removed\n <StyledTriggerWrapper data-testid={PER_PAGE_SELECTOR_DATA_TESTID.TRIGGER_WRAPPER} {...ownerPropsConfig}>\n <StyledTrigger\n buttonType=\"raw\"\n innerRef={handleRef}\n // the trigger owns a non-modal dialog (that hosts the list of options): it is not a toggle button, so no aria-pressed\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? dialogId : undefined}\n aria-label={`${pageSize} rows per page`}\n // legacy data-testid \u2014 preserved for QA/consumer compatibility, breaking change if removed\n data-testid={PER_PAGE_SELECTOR_DATA_TESTID.PER_PAGE_SELECTOR}\n {...globalAttributes}\n {...xstyledProps}\n {...ownerPropsConfig}\n onClick={handleTriggerClick}\n onKeyDown={handleTriggerKeyDown}\n onBlur={handleBlurOutOfWidget}\n >\n <DSTypography variant=\"b1\" as=\"span\" className=\"typography-per-page-selector\">\n {pageSize} / page\n </DSTypography>\n <ChevronDown color={['brand-primary', '700']} innerRef={chevronRef} />\n </StyledTrigger>\n </StyledTriggerWrapper>\n );\n};\n\nTrigger.displayName = 'DSPerPageSelector.Trigger';\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACqDf,SAGA,KAHA;AArDR,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAC7B,SAAgB,aAAa,kBAAkB;AAC/C,SAAS,+BAA+B,wCAAwC;AAChF,SAAS,gCAAgC;AACzC,SAAS,eAAe,4BAA4B;AAE7C,MAAM,UAAU,MAAM;AAC3B,QAAM;AAAA,IACJ,kBAAkB,EAAE,SAAS;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,EAAE,YAAY;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,WAAW,wBAAwB;AAGvC,QAAM,gBAAgB,gBAAgB,iCAAiC;AACvE,QAAM,YAAY;AAAA,IAChB,CAAC,SAAmC;AAClC,uBAAiB,IAAI;AACrB,UAAI,QAAQ,cAAe,MAAK,MAAM;AAAA,IACxC;AAAA,IACA,CAAC,kBAAkB,aAAa;AAAA,EAClC;AAEA;AAAA;AAAA,IAEE,oBAAC,wBAAqB,eAAa,8BAA8B,iBAAkB,GAAG,kBACpF;AAAA,MAAC;AAAA;AAAA,QACC,YAAW;AAAA,QACX,UAAU;AAAA,QAEV,iBAAc;AAAA,QACd,iBAAe;AAAA,QACf,iBAAe,SAAS,WAAW;AAAA,QACnC,cAAY,GAAG,QAAQ;AAAA,QAEvB,eAAa,8BAA8B;AAAA,QAC1C,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACJ,SAAS;AAAA,QACT,WAAW;AAAA,QACX,QAAQ;AAAA,QAER;AAAA,+BAAC,gBAAa,SAAQ,MAAK,IAAG,QAAO,WAAU,gCAC5C;AAAA;AAAA,YAAS;AAAA,aACZ;AAAA,UACA,oBAAC,eAAY,OAAO,CAAC,iBAAiB,KAAK,GAAG,UAAU,YAAY;AAAA;AAAA;AAAA,IACtE,GACF;AAAA;AAEJ;AAEA,QAAQ,cAAc;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -18,8 +18,25 @@ const DSPerPageSelectorPropTypes = {
|
|
|
18
18
|
...globalAttributesPropTypes,
|
|
19
19
|
...xstyledPropTypes,
|
|
20
20
|
pageSize: PropTypes.number.description("The current page size").defaultValue(10),
|
|
21
|
-
onPageSizeChange: PropTypes.func.description(
|
|
22
|
-
|
|
21
|
+
onPageSizeChange: PropTypes.func.description(
|
|
22
|
+
"Function invoked when the user commits a different page size (Enter, Space, click, or Tab out of the list). Moving through the options with the arrow keys does NOT invoke it"
|
|
23
|
+
).defaultValue(() => null),
|
|
24
|
+
perPageOptions: PropTypes.arrayOf(
|
|
25
|
+
PropTypes.oneOfType([
|
|
26
|
+
PropTypes.number,
|
|
27
|
+
PropTypes.shape({
|
|
28
|
+
type: PropTypes.oneOf(["single"]),
|
|
29
|
+
dsId: PropTypes.string.isRequired,
|
|
30
|
+
label: PropTypes.string.isRequired,
|
|
31
|
+
value: PropTypes.number.isRequired
|
|
32
|
+
})
|
|
33
|
+
])
|
|
34
|
+
).description(
|
|
35
|
+
'The available options for page size: a number (its own label and dsId), or an object { type?: "single", dsId, label, value }. The selected option is the one whose dsId is the page size. Nothing else of an object is read'
|
|
36
|
+
).defaultValue([10]),
|
|
37
|
+
listWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).description(
|
|
38
|
+
"Width of the open list (a number is px, a string is any CSS length). Labels wrap inside it; it is never wider than the viewport. Default: 100px"
|
|
39
|
+
),
|
|
23
40
|
minPerPage: PropTypes.number.description("Min for the per page options").defaultValue(0),
|
|
24
41
|
maxPerPage: PropTypes.number.description("Max for the per page options").defaultValue(100),
|
|
25
42
|
perPageStep: PropTypes.number.description("Step for the per page options").defaultValue(5)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/DSPerPageSelector/react-desc-prop-types.ts"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type {
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type { DSPropTypesSchema, GlobalAttributesT, ValidationMap, XstyledProps } from '@elliemae/ds-props-helpers';\nimport {\n PropTypes,\n getPropsPerSlotPropTypes,\n globalAttributesPropTypes,\n xstyledPropTypes,\n} from '@elliemae/ds-props-helpers';\nimport { type TypescriptHelpersT } from '@elliemae/ds-typescript-helpers';\nimport { DSPaginationName, PER_PAGE_SELECTOR_SLOTS } from './constants/index.js';\n\nexport declare namespace DSPerPageSelectorT {\n export type SlotFunctionArguments = {\n dsPaginationPerPageSelector: () => object;\n dsPaginationPerPageSelectorTriggerWrapper: () => object;\n dsPaginationPerPageSelectorFloatingWrapper: () => object;\n dsPaginationPerPageSelectorPanel: () => object;\n dsPaginationPerPageSelectorHeader: () => object;\n dsPaginationPerPageSelectorListWrapper: () => object;\n dsPaginationPerPageSelectorList: () => object;\n dsPaginationPerPageSelectorOption: () => object;\n dsPaginationPerPageSelectorOptionCheckmark: () => object;\n dsPaginationPerPageSelectorOptionLabel: () => object;\n };\n\n /**\n * One option of the list: what the examples use and what the list reads. It used to be typed as a `DSDropdownMenuV2`\n * single item, which handed consumers a whole contract that was never meant for them nor shown in the examples (`render`,\n * `disabled`, `onClick`, global attributes, xstyled props...). Some of it happened to work because the options were passed\n * to the dropdown unchanged; none of it is supported anymore.\n */\n export interface PerPageOption {\n type?: 'single';\n dsId: string;\n label: string;\n value: number;\n }\n export interface RequiredProps {}\n\n export interface DefaultProps {\n pageSize: number;\n onPageSizeChange: (pageSize: number) => void;\n perPageStep: number;\n minPerPage: number;\n maxPerPage: number;\n }\n\n export interface OptionalProps extends TypescriptHelpersT.PropsForGlobalOnSlots<\n typeof DSPaginationName,\n typeof PER_PAGE_SELECTOR_SLOTS\n > {\n perPageOptions?: (number | PerPageOption)[];\n /**\n * Width of the open list (a number is px, a string is any CSS length). Labels wrap inside it; the list is never wider\n * than the viewport. Default: 100px.\n */\n listWidth?: number | string;\n }\n export interface Props\n extends\n Partial<DefaultProps>,\n OptionalProps,\n Omit<GlobalAttributesT<HTMLElement>, keyof DefaultProps | keyof XstyledProps>,\n XstyledProps,\n RequiredProps {}\n\n export interface InternalProps\n extends\n DefaultProps,\n OptionalProps,\n Omit<GlobalAttributesT<HTMLElement>, keyof DefaultProps | keyof XstyledProps>,\n XstyledProps,\n RequiredProps {}\n}\n\nexport const defaultProps: DSPerPageSelectorT.DefaultProps = {\n pageSize: 10,\n onPageSizeChange: () => null,\n perPageStep: 5,\n minPerPage: 0,\n maxPerPage: 100,\n};\n\nexport const DSPerPageSelectorPropTypes: DSPropTypesSchema<DSPerPageSelectorT.Props> = {\n ...getPropsPerSlotPropTypes(DSPaginationName, PER_PAGE_SELECTOR_SLOTS),\n ...globalAttributesPropTypes,\n ...xstyledPropTypes,\n pageSize: PropTypes.number.description('The current page size').defaultValue(10),\n onPageSizeChange: PropTypes.func\n .description(\n 'Function invoked when the user commits a different page size (Enter, Space, click, or Tab out of the list). Moving through the options with the arrow keys does NOT invoke it',\n )\n .defaultValue(() => null),\n perPageOptions: PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.shape({\n type: PropTypes.oneOf(['single']),\n dsId: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n value: PropTypes.number.isRequired,\n }),\n ]),\n )\n .description(\n 'The available options for page size: a number (its own label and dsId), or an object { type?: \"single\", dsId, label, value }. The selected option is the one whose dsId is the page size. Nothing else of an object is read',\n )\n .defaultValue([10]),\n listWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).description(\n 'Width of the open list (a number is px, a string is any CSS length). Labels wrap inside it; it is never wider than the viewport. Default: 100px',\n ),\n minPerPage: PropTypes.number.description('Min for the per page options').defaultValue(0),\n maxPerPage: PropTypes.number.description('Max for the per page options').defaultValue(100),\n perPageStep: PropTypes.number.description('Step for the per page options').defaultValue(5),\n};\n\nexport const DSPerPageSelectorPropTypesSchema =\n DSPerPageSelectorPropTypes as unknown as ValidationMap<DSPerPageSelectorT.Props>;\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACCvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,kBAAkB,+BAA+B;AAkEnD,MAAM,eAAgD;AAAA,EAC3D,UAAU;AAAA,EACV,kBAAkB,MAAM;AAAA,EACxB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AACd;AAEO,MAAM,6BAA0E;AAAA,EACrF,GAAG,yBAAyB,kBAAkB,uBAAuB;AAAA,EACrE,GAAG;AAAA,EACH,GAAG;AAAA,EACH,UAAU,UAAU,OAAO,YAAY,uBAAuB,EAAE,aAAa,EAAE;AAAA,EAC/E,kBAAkB,UAAU,KACzB;AAAA,IACC;AAAA,EACF,EACC,aAAa,MAAM,IAAI;AAAA,EAC1B,gBAAgB,UAAU;AAAA,IACxB,UAAU,UAAU;AAAA,MAClB,UAAU;AAAA,MACV,UAAU,MAAM;AAAA,QACd,MAAM,UAAU,MAAM,CAAC,QAAQ,CAAC;AAAA,QAChC,MAAM,UAAU,OAAO;AAAA,QACvB,OAAO,UAAU,OAAO;AAAA,QACxB,OAAO,UAAU,OAAO;AAAA,MAC1B,CAAC;AAAA,IACH,CAAC;AAAA,EACH,EACG;AAAA,IACC;AAAA,EACF,EACC,aAAa,CAAC,EAAE,CAAC;AAAA,EACpB,WAAW,UAAU,UAAU,CAAC,UAAU,QAAQ,UAAU,MAAM,CAAC,EAAE;AAAA,IACnE;AAAA,EACF;AAAA,EACA,YAAY,UAAU,OAAO,YAAY,8BAA8B,EAAE,aAAa,CAAC;AAAA,EACvF,YAAY,UAAU,OAAO,YAAY,8BAA8B,EAAE,aAAa,GAAG;AAAA,EACzF,aAAa,UAAU,OAAO,YAAY,+BAA+B,EAAE,aAAa,CAAC;AAC3F;AAEO,MAAM,mCACX;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { DSButtonV3 } from "@elliemae/ds-button-v2";
|
|
3
|
+
import { FloatingWrapper } from "@elliemae/ds-floating-context";
|
|
4
|
+
import { DSFastList } from "@elliemae/ds-fast-list";
|
|
3
5
|
import { css, styled } from "@elliemae/ds-system";
|
|
4
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
DSPaginationName,
|
|
8
|
+
PER_PAGE_SELECTOR_HEADER_HEIGHT,
|
|
9
|
+
PER_PAGE_SELECTOR_OPTION_HEIGHT,
|
|
10
|
+
PER_PAGE_SELECTOR_PANEL_PADDING_BOTTOM,
|
|
11
|
+
PER_PAGE_SELECTOR_SLOTS
|
|
12
|
+
} from "./constants/index.js";
|
|
5
13
|
const fontSize13Base13 = 13 / 13;
|
|
6
14
|
const fontSize13Base16 = 13 / 16;
|
|
7
15
|
const fontSize12Base13 = 12 / 13;
|
|
@@ -20,14 +28,17 @@ const styledFocusCss = css`
|
|
|
20
28
|
z-index: 7;
|
|
21
29
|
}
|
|
22
30
|
`;
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
position: absolute;
|
|
31
|
+
const optionFontSizeCss = css`
|
|
32
|
+
font-size: ${fontSize13Base16}rem;
|
|
33
|
+
@media (min-width: ${({ theme }) => theme.breakpoints.small}) {
|
|
34
|
+
font-size: ${fontSize13Base13}rem;
|
|
35
|
+
}
|
|
29
36
|
`;
|
|
30
|
-
const
|
|
37
|
+
const StyledTrigger = styled(DSButtonV3, {
|
|
38
|
+
name: DSPaginationName,
|
|
39
|
+
slot: PER_PAGE_SELECTOR_SLOTS.PER_PAGE_SELECTOR,
|
|
40
|
+
preserveLegacyDataTestId: true
|
|
41
|
+
})`
|
|
31
42
|
min-height: 42px;
|
|
32
43
|
display: grid;
|
|
33
44
|
grid-auto-flow: column;
|
|
@@ -38,7 +49,9 @@ const paginationDropdownButtonCommonStyles = css`
|
|
|
38
49
|
padding-right: 16px;
|
|
39
50
|
grid-gap: 8px;
|
|
40
51
|
font-size: 13px;
|
|
41
|
-
color: neutral-700
|
|
52
|
+
/* the previous DSPerPageSelector declares color: neutral-700 here, but inside its css helper the token is never
|
|
53
|
+
resolved, so the declaration is dropped and the text renders with the browser's button color (black, greyed when
|
|
54
|
+
disabled). Not copied: the selector keeps what is rendered today (see dimsum_compliance_status_report.md) */
|
|
42
55
|
cursor: pointer;
|
|
43
56
|
border-radius: 0;
|
|
44
57
|
font-weight: ${(props) => props.theme.fontWeights.regular};
|
|
@@ -49,39 +62,104 @@ const paginationDropdownButtonCommonStyles = css`
|
|
|
49
62
|
cursor: not-allowed;
|
|
50
63
|
}
|
|
51
64
|
white-space: nowrap;
|
|
65
|
+
|
|
66
|
+
/* the typography variants own their font-size, so we target the rendered element by className instead of wrapping
|
|
67
|
+
DSTypography in styled() (same approach as the previous implementation) */
|
|
68
|
+
.typography-per-page-selector {
|
|
69
|
+
${optionFontSizeCss}
|
|
70
|
+
}
|
|
52
71
|
`;
|
|
53
|
-
const
|
|
72
|
+
const StyledTriggerWrapper = styled("div", {
|
|
54
73
|
name: DSPaginationName,
|
|
55
|
-
slot: PER_PAGE_SELECTOR_SLOTS.
|
|
56
|
-
preserveLegacyDataTestId: true
|
|
74
|
+
slot: PER_PAGE_SELECTOR_SLOTS.TRIGGER_WRAPPER
|
|
57
75
|
})`
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Pagination uses DSTypography internally, but each typography variant defines
|
|
61
|
-
* its own font-size. When these components are placed inside a styled() wrapper,
|
|
62
|
-
* trying to style them via styled(DSTypography) triggers TypeScript errors
|
|
63
|
-
* because DSTypography exposes "as" props and variant-specific overrides.
|
|
64
|
-
*
|
|
65
|
-
* Instead of wrapping DSTypography directly in styled(), we target the
|
|
66
|
-
* underlying rendered elements via className/id. This avoids the TS conflicts
|
|
67
|
-
* while still allowing us to override their font-size reliably.
|
|
68
|
-
*/
|
|
69
|
-
.typography-per-page-selector {
|
|
70
|
-
font-size: ${fontSize13Base16}rem;
|
|
71
|
-
@media (min-width: ${({ theme }) => theme.breakpoints.small}) {
|
|
72
|
-
font-size: ${fontSize13Base13}rem;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
76
|
+
display: contents;
|
|
75
77
|
`;
|
|
76
|
-
const
|
|
78
|
+
const StyledFloatingWrapper = styled(FloatingWrapper, {
|
|
79
|
+
name: DSPaginationName,
|
|
80
|
+
slot: PER_PAGE_SELECTOR_SLOTS.FLOATING_WRAPPER
|
|
81
|
+
})``;
|
|
82
|
+
const StyledPanel = styled("div", { name: DSPaginationName, slot: PER_PAGE_SELECTOR_SLOTS.PANEL })`
|
|
83
|
+
display: grid;
|
|
84
|
+
grid-template-rows: auto 1fr;
|
|
85
|
+
/* same as the previous DSDropdownMenuV2 wrapper: 4px of padding below the list */
|
|
86
|
+
padding-bottom: ${PER_PAGE_SELECTOR_PANEL_PADDING_BOTTOM}px;
|
|
87
|
+
background-color: ${({ theme }) => theme.colors.neutral["000"]};
|
|
88
|
+
`;
|
|
89
|
+
const StyledHeader = styled("div", { name: DSPaginationName, slot: PER_PAGE_SELECTOR_SLOTS.HEADER })`
|
|
90
|
+
display: grid;
|
|
91
|
+
align-items: center;
|
|
92
|
+
box-sizing: border-box;
|
|
93
|
+
min-height: ${PER_PAGE_SELECTOR_HEADER_HEIGHT}px;
|
|
94
|
+
padding: 0 0 0 4px;
|
|
95
|
+
border-bottom: 1px solid ${({ theme }) => theme.colors.neutral[300]};
|
|
77
96
|
font-size: ${fontSize12Base16}rem;
|
|
97
|
+
color: ${({ theme }) => theme.colors.neutral[500]};
|
|
78
98
|
@media (min-width: ${({ theme }) => theme.breakpoints.small}) {
|
|
79
99
|
font-size: ${fontSize12Base13}rem;
|
|
80
100
|
}
|
|
81
101
|
`;
|
|
102
|
+
const StyledListWrapper = styled("div", {
|
|
103
|
+
name: DSPaginationName,
|
|
104
|
+
slot: PER_PAGE_SELECTOR_SLOTS.LIST_WRAPPER
|
|
105
|
+
})``;
|
|
106
|
+
const StyledList = styled(DSFastList, { name: DSPaginationName, slot: PER_PAGE_SELECTOR_SLOTS.LIST })``;
|
|
107
|
+
const StyledOption = styled("div", { name: DSPaginationName, slot: PER_PAGE_SELECTOR_SLOTS.OPTION })`
|
|
108
|
+
position: relative;
|
|
109
|
+
display: grid;
|
|
110
|
+
align-items: center;
|
|
111
|
+
column-gap: 8px;
|
|
112
|
+
min-height: ${PER_PAGE_SELECTOR_OPTION_HEIGHT}px;
|
|
113
|
+
padding: 4px 16px;
|
|
114
|
+
cursor: pointer;
|
|
115
|
+
list-style: none;
|
|
116
|
+
${optionFontSizeCss}
|
|
117
|
+
background-color: ${({ theme }) => theme.colors.neutral["000"]};
|
|
118
|
+
&:hover {
|
|
119
|
+
background-color: ${({ theme }) => theme.colors.brand[200]};
|
|
120
|
+
}
|
|
121
|
+
&:focus {
|
|
122
|
+
outline: none;
|
|
123
|
+
background-color: ${({ theme }) => theme.colors.brand[200]};
|
|
124
|
+
&:after {
|
|
125
|
+
display: block;
|
|
126
|
+
content: ' ';
|
|
127
|
+
position: absolute;
|
|
128
|
+
top: 0;
|
|
129
|
+
left: 0;
|
|
130
|
+
right: 0;
|
|
131
|
+
bottom: 0;
|
|
132
|
+
border: 1px solid ${({ theme }) => theme.colors.brand[500]};
|
|
133
|
+
pointer-events: none;
|
|
134
|
+
z-index: 7;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
`;
|
|
138
|
+
const StyledOptionCheckmark = styled("span", {
|
|
139
|
+
name: DSPaginationName,
|
|
140
|
+
slot: PER_PAGE_SELECTOR_SLOTS.OPTION_CHECKMARK
|
|
141
|
+
})`
|
|
142
|
+
display: grid;
|
|
143
|
+
place-items: center;
|
|
144
|
+
`;
|
|
145
|
+
const StyledOptionLabel = styled("span", {
|
|
146
|
+
name: DSPaginationName,
|
|
147
|
+
slot: PER_PAGE_SELECTOR_SLOTS.OPTION_LABEL
|
|
148
|
+
})`
|
|
149
|
+
/* labels wrap, they are never truncated (see stories/docs/principles/a11y/TextTruncationCriticalities.md) */
|
|
150
|
+
white-space: normal;
|
|
151
|
+
overflow-wrap: anywhere;
|
|
152
|
+
`;
|
|
82
153
|
export {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
154
|
+
StyledFloatingWrapper,
|
|
155
|
+
StyledHeader,
|
|
156
|
+
StyledList,
|
|
157
|
+
StyledListWrapper,
|
|
158
|
+
StyledOption,
|
|
159
|
+
StyledOptionCheckmark,
|
|
160
|
+
StyledOptionLabel,
|
|
161
|
+
StyledPanel,
|
|
162
|
+
StyledTrigger,
|
|
163
|
+
StyledTriggerWrapper
|
|
86
164
|
};
|
|
87
165
|
//# sourceMappingURL=styled.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../scripts/build/transpile/react-shim.js", "../../../../src/parts/DSPerPageSelector/styled.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { DSButtonV3 } from '@elliemae/ds-button-v2';\
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,kBAAkB;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { DSButtonV3 } from '@elliemae/ds-button-v2';\nimport { FloatingWrapper } from '@elliemae/ds-floating-context';\nimport { DSFastList } from '@elliemae/ds-fast-list';\nimport { css, styled } from '@elliemae/ds-system';\nimport type {} from '@xstyled/system';\nimport {\n DSPaginationName,\n PER_PAGE_SELECTOR_HEADER_HEIGHT,\n PER_PAGE_SELECTOR_OPTION_HEIGHT,\n PER_PAGE_SELECTOR_PANEL_PADDING_BOTTOM,\n PER_PAGE_SELECTOR_SLOTS,\n} from './constants/index.js';\n\n// the font sizes are the ones of the previous DSPerPageSelector (same rem/px dance between the 13px and 16px base)\nconst fontSize13Base13 = 13 / 13;\nconst fontSize13Base16 = 13 / 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\nconst optionFontSizeCss = css`\n font-size: ${fontSize13Base16}rem;\n @media (min-width: ${({ theme }) => theme.breakpoints.small}) {\n font-size: ${fontSize13Base13}rem;\n }\n`;\n\nexport const StyledTrigger = styled(DSButtonV3, {\n name: DSPaginationName,\n slot: PER_PAGE_SELECTOR_SLOTS.PER_PAGE_SELECTOR,\n preserveLegacyDataTestId: true,\n})`\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 /* the previous DSPerPageSelector declares color: neutral-700 here, but inside its css helper the token is never\n resolved, so the declaration is dropped and the text renders with the browser's button color (black, greyed when\n disabled). Not copied: the selector keeps what is rendered today (see dimsum_compliance_status_report.md) */\n cursor: pointer;\n border-radius: 0;\n font-weight: ${(props) => props.theme.fontWeights.regular};\n :focus {\n ${styledFocusCss}\n }\n &:disabled {\n cursor: not-allowed;\n }\n white-space: nowrap;\n\n /* the typography variants own their font-size, so we target the rendered element by className instead of wrapping\n DSTypography in styled() (same approach as the previous implementation) */\n .typography-per-page-selector {\n ${optionFontSizeCss}\n }\n`;\n\nexport const StyledTriggerWrapper = styled('div', {\n name: DSPaginationName,\n slot: PER_PAGE_SELECTOR_SLOTS.TRIGGER_WRAPPER,\n})`\n display: contents;\n`;\n\nexport const StyledFloatingWrapper = styled(FloatingWrapper, {\n name: DSPaginationName,\n slot: PER_PAGE_SELECTOR_SLOTS.FLOATING_WRAPPER,\n})``;\n\nexport const StyledPanel = styled('div', { name: DSPaginationName, slot: PER_PAGE_SELECTOR_SLOTS.PANEL })`\n display: grid;\n grid-template-rows: auto 1fr;\n /* same as the previous DSDropdownMenuV2 wrapper: 4px of padding below the list */\n padding-bottom: ${PER_PAGE_SELECTOR_PANEL_PADDING_BOTTOM}px;\n background-color: ${({ theme }) => theme.colors.neutral['000']};\n`;\n\nexport const StyledHeader = styled('div', { name: DSPaginationName, slot: PER_PAGE_SELECTOR_SLOTS.HEADER })`\n display: grid;\n align-items: center;\n box-sizing: border-box;\n min-height: ${PER_PAGE_SELECTOR_HEADER_HEIGHT}px;\n padding: 0 0 0 4px;\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral[300]};\n font-size: ${fontSize12Base16}rem;\n color: ${({ theme }) => theme.colors.neutral[500]};\n @media (min-width: ${({ theme }) => theme.breakpoints.small}) {\n font-size: ${fontSize12Base13}rem;\n }\n`;\n\n// explicit height: the virtual list needs a constrained box to scroll (its own container is height: 100%)\nexport const StyledListWrapper = styled('div', {\n name: DSPaginationName,\n slot: PER_PAGE_SELECTOR_SLOTS.LIST_WRAPPER,\n})``;\n\nexport const StyledList = styled(DSFastList, { name: DSPaginationName, slot: PER_PAGE_SELECTOR_SLOTS.LIST })``;\n\nexport const StyledOption = styled('div', { name: DSPaginationName, slot: PER_PAGE_SELECTOR_SLOTS.OPTION })`\n position: relative;\n display: grid;\n align-items: center;\n column-gap: 8px;\n min-height: ${PER_PAGE_SELECTOR_OPTION_HEIGHT}px;\n padding: 4px 16px;\n cursor: pointer;\n list-style: none;\n ${optionFontSizeCss}\n background-color: ${({ theme }) => theme.colors.neutral['000']};\n &:hover {\n background-color: ${({ theme }) => theme.colors.brand[200]};\n }\n &:focus {\n outline: none;\n background-color: ${({ theme }) => theme.colors.brand[200]};\n &:after {\n display: block;\n content: ' ';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 1px solid ${({ theme }) => theme.colors.brand[500]};\n pointer-events: none;\n z-index: 7;\n }\n }\n`;\n\nexport const StyledOptionCheckmark = styled('span', {\n name: DSPaginationName,\n slot: PER_PAGE_SELECTOR_SLOTS.OPTION_CHECKMARK,\n})`\n display: grid;\n place-items: center;\n`;\n\nexport const StyledOptionLabel = styled('span', {\n name: DSPaginationName,\n slot: PER_PAGE_SELECTOR_SLOTS.OPTION_LABEL,\n})`\n /* labels wrap, they are never truncated (see stories/docs/principles/a11y/TextTruncationCriticalities.md) */\n white-space: normal;\n overflow-wrap: anywhere;\n`;\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACAvB,SAAS,kBAAkB;AAC3B,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAC3B,SAAS,KAAK,cAAc;AAE5B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,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;AAM9D,MAAM,oBAAoB;AAAA,eACX,gBAAgB;AAAA,uBACR,CAAC,EAAE,MAAM,MAAM,MAAM,YAAY,KAAK;AAAA,iBAC5C,gBAAgB;AAAA;AAAA;AAI1B,MAAM,gBAAgB,OAAO,YAAY;AAAA,EAC9C,MAAM;AAAA,EACN,MAAM,wBAAwB;AAAA,EAC9B,0BAA0B;AAC5B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAgBgB,CAAC,UAAU,MAAM,MAAM,YAAY,OAAO;AAAA;AAAA,MAErD,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUd,iBAAiB;AAAA;AAAA;AAIhB,MAAM,uBAAuB,OAAO,OAAO;AAAA,EAChD,MAAM;AAAA,EACN,MAAM,wBAAwB;AAChC,CAAC;AAAA;AAAA;AAIM,MAAM,wBAAwB,OAAO,iBAAiB;AAAA,EAC3D,MAAM;AAAA,EACN,MAAM,wBAAwB;AAChC,CAAC;AAEM,MAAM,cAAc,OAAO,OAAO,EAAE,MAAM,kBAAkB,MAAM,wBAAwB,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA,oBAIpF,sCAAsC;AAAA,sBACpC,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,QAAQ,KAAK,CAAC;AAAA;AAGzD,MAAM,eAAe,OAAO,OAAO,EAAE,MAAM,kBAAkB,MAAM,wBAAwB,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,gBAI1F,+BAA+B;AAAA;AAAA,6BAElB,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,QAAQ,GAAG,CAAC;AAAA,eACtD,gBAAgB;AAAA,WACpB,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,QAAQ,GAAG,CAAC;AAAA,uBAC5B,CAAC,EAAE,MAAM,MAAM,MAAM,YAAY,KAAK;AAAA,iBAC5C,gBAAgB;AAAA;AAAA;AAK1B,MAAM,oBAAoB,OAAO,OAAO;AAAA,EAC7C,MAAM;AAAA,EACN,MAAM,wBAAwB;AAChC,CAAC;AAEM,MAAM,aAAa,OAAO,YAAY,EAAE,MAAM,kBAAkB,MAAM,wBAAwB,KAAK,CAAC;AAEpG,MAAM,eAAe,OAAO,OAAO,EAAE,MAAM,kBAAkB,MAAM,wBAAwB,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,gBAK1F,+BAA+B;AAAA;AAAA;AAAA;AAAA,IAI3C,iBAAiB;AAAA,sBACC,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,QAAQ,KAAK,CAAC;AAAA;AAAA,wBAExC,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,wBAItC,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BASpC,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAOzD,MAAM,wBAAwB,OAAO,QAAQ;AAAA,EAClD,MAAM;AAAA,EACN,MAAM,wBAAwB;AAChC,CAAC;AAAA;AAAA;AAAA;AAKM,MAAM,oBAAoB,OAAO,QAAQ;AAAA,EAC9C,MAAM;AAAA,EACN,MAAM,wBAAwB;AAChC,CAAC;AAAA;AAAA;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,7 +3,16 @@ const SlotPropsAsObj = {
|
|
|
3
3
|
dsPaginationPerPageSelector: { "aria-label": "just a typescript test" }
|
|
4
4
|
};
|
|
5
5
|
const SlotPropsAsFunctions = {
|
|
6
|
-
dsPaginationPerPageSelector: () => ({ "aria-label": "just a typescript test" })
|
|
6
|
+
dsPaginationPerPageSelector: () => ({ "aria-label": "just a typescript test" }),
|
|
7
|
+
dsPaginationPerPageSelectorTriggerWrapper: () => ({ "aria-label": "just a typescript test" }),
|
|
8
|
+
dsPaginationPerPageSelectorFloatingWrapper: () => ({ "aria-label": "just a typescript test" }),
|
|
9
|
+
dsPaginationPerPageSelectorPanel: () => ({ "aria-label": "just a typescript test" }),
|
|
10
|
+
dsPaginationPerPageSelectorHeader: () => ({ "aria-label": "just a typescript test" }),
|
|
11
|
+
dsPaginationPerPageSelectorListWrapper: () => ({ "aria-label": "just a typescript test" }),
|
|
12
|
+
dsPaginationPerPageSelectorList: () => ({ "aria-label": "just a typescript test" }),
|
|
13
|
+
dsPaginationPerPageSelectorOption: () => ({ "aria-label": "just a typescript test" }),
|
|
14
|
+
dsPaginationPerPageSelectorOptionCheckmark: () => ({ "aria-label": "just a typescript test" }),
|
|
15
|
+
dsPaginationPerPageSelectorOptionLabel: () => ({ "aria-label": "just a typescript test" })
|
|
7
16
|
};
|
|
8
17
|
const EnsureAllSlotsExistInSlotFunctionArguments = SlotPropsAsFunctions;
|
|
9
18
|
//# sourceMappingURL=slots-props.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../src/parts/DSPerPageSelector/typescript-testing/slots-props.ts"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable @typescript-eslint/no-unused-vars, no-unused-vars */\n\nimport type { TypescriptHelpersT } from '@elliemae/ds-typescript-helpers';\nimport type { DSPaginationName, PER_PAGE_SELECTOR_SLOTS } from '../constants/index.js';\nimport type { DSPerPageSelectorT } from '../react-desc-prop-types.js';\n\nconst SlotPropsAsObj: Partial<DSPerPageSelectorT.Props> = {\n dsPaginationPerPageSelector: { 'aria-label': 'just a typescript test' },\n};\nconst SlotPropsAsFunctions: DSPerPageSelectorT.SlotFunctionArguments = {\n dsPaginationPerPageSelector: () => ({ 'aria-label': 'just a typescript test' }),\n};\nconst EnsureAllSlotsExistInSlotFunctionArguments: Required<\n TypescriptHelpersT.PropsForSlots<typeof DSPaginationName, typeof PER_PAGE_SELECTOR_SLOTS>\n> = SlotPropsAsFunctions;\n"],
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;ACMvB,MAAM,iBAAoD;AAAA,EACxD,6BAA6B,EAAE,cAAc,yBAAyB;AACxE;AACA,MAAM,uBAAiE;AAAA,EACrE,6BAA6B,OAAO,EAAE,cAAc,yBAAyB;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable @typescript-eslint/no-unused-vars, no-unused-vars */\n\nimport type { TypescriptHelpersT } from '@elliemae/ds-typescript-helpers';\nimport type { DSPaginationName, PER_PAGE_SELECTOR_SLOTS } from '../constants/index.js';\nimport type { DSPerPageSelectorT } from '../react-desc-prop-types.js';\n\nconst SlotPropsAsObj: Partial<DSPerPageSelectorT.Props> = {\n dsPaginationPerPageSelector: { 'aria-label': 'just a typescript test' },\n};\nconst SlotPropsAsFunctions: DSPerPageSelectorT.SlotFunctionArguments = {\n dsPaginationPerPageSelector: () => ({ 'aria-label': 'just a typescript test' }),\n dsPaginationPerPageSelectorTriggerWrapper: () => ({ 'aria-label': 'just a typescript test' }),\n dsPaginationPerPageSelectorFloatingWrapper: () => ({ 'aria-label': 'just a typescript test' }),\n dsPaginationPerPageSelectorPanel: () => ({ 'aria-label': 'just a typescript test' }),\n dsPaginationPerPageSelectorHeader: () => ({ 'aria-label': 'just a typescript test' }),\n dsPaginationPerPageSelectorListWrapper: () => ({ 'aria-label': 'just a typescript test' }),\n dsPaginationPerPageSelectorList: () => ({ 'aria-label': 'just a typescript test' }),\n dsPaginationPerPageSelectorOption: () => ({ 'aria-label': 'just a typescript test' }),\n dsPaginationPerPageSelectorOptionCheckmark: () => ({ 'aria-label': 'just a typescript test' }),\n dsPaginationPerPageSelectorOptionLabel: () => ({ 'aria-label': 'just a typescript test' }),\n};\nconst EnsureAllSlotsExistInSlotFunctionArguments: Required<\n TypescriptHelpersT.PropsForSlots<typeof DSPaginationName, typeof PER_PAGE_SELECTOR_SLOTS>\n> = SlotPropsAsFunctions;\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;ACMvB,MAAM,iBAAoD;AAAA,EACxD,6BAA6B,EAAE,cAAc,yBAAyB;AACxE;AACA,MAAM,uBAAiE;AAAA,EACrE,6BAA6B,OAAO,EAAE,cAAc,yBAAyB;AAAA,EAC7E,2CAA2C,OAAO,EAAE,cAAc,yBAAyB;AAAA,EAC3F,4CAA4C,OAAO,EAAE,cAAc,yBAAyB;AAAA,EAC5F,kCAAkC,OAAO,EAAE,cAAc,yBAAyB;AAAA,EAClF,mCAAmC,OAAO,EAAE,cAAc,yBAAyB;AAAA,EACnF,wCAAwC,OAAO,EAAE,cAAc,yBAAyB;AAAA,EACxF,iCAAiC,OAAO,EAAE,cAAc,yBAAyB;AAAA,EACjF,mCAAmC,OAAO,EAAE,cAAc,yBAAyB;AAAA,EACnF,4CAA4C,OAAO,EAAE,cAAc,yBAAyB;AAAA,EAC5F,wCAAwC,OAAO,EAAE,cAAc,yBAAyB;AAC1F;AACA,MAAM,6CAEF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,8 +3,10 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { DSPerPageSelector } from "../index.js";
|
|
4
4
|
const testRequiredProps = {};
|
|
5
5
|
const testOptionalProps = {
|
|
6
|
-
perPageOptions: [5, 10, 20]
|
|
6
|
+
perPageOptions: [5, 10, 20],
|
|
7
|
+
listWidth: 120
|
|
7
8
|
};
|
|
9
|
+
const testOptionalPropsCssLength = { listWidth: "10rem" };
|
|
8
10
|
const testPartialDefaults = {
|
|
9
11
|
onPageSizeChange: () => null,
|
|
10
12
|
perPageStep: 5
|
|
@@ -63,4 +65,61 @@ const ExampleUsageComponent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
|
63
65
|
/* @__PURE__ */ jsx(DSPerPageSelector, { ...testDefinitionAsConst }),
|
|
64
66
|
/* @__PURE__ */ jsx(DSPerPageSelector, { pageSize: 10, onPageSizeChange: () => null, perPageStep: 5, minPerPage: 0, maxPerPage: 100 })
|
|
65
67
|
] });
|
|
68
|
+
const testOptionObject = { type: "single", dsId: "all", label: "All", value: 1e3 };
|
|
69
|
+
const testOptionObjectWithoutType = { dsId: "all", label: "All", value: 1e3 };
|
|
70
|
+
const testPerPageOptions = [
|
|
71
|
+
10,
|
|
72
|
+
20,
|
|
73
|
+
testOptionObject,
|
|
74
|
+
testOptionObjectWithoutType
|
|
75
|
+
];
|
|
76
|
+
const testNoRender = {
|
|
77
|
+
dsId: "a",
|
|
78
|
+
label: "A",
|
|
79
|
+
value: 1,
|
|
80
|
+
// @ts-expect-error `render` is not part of the contract (it only worked because the dropdown got the options unchanged)
|
|
81
|
+
render: () => null
|
|
82
|
+
};
|
|
83
|
+
const testNoDisabled = {
|
|
84
|
+
dsId: "a",
|
|
85
|
+
label: "A",
|
|
86
|
+
value: 1,
|
|
87
|
+
// @ts-expect-error `disabled` is not part of the contract
|
|
88
|
+
disabled: true
|
|
89
|
+
};
|
|
90
|
+
const testNoApplyAriaDisabled = {
|
|
91
|
+
dsId: "a",
|
|
92
|
+
label: "A",
|
|
93
|
+
value: 1,
|
|
94
|
+
// @ts-expect-error `applyAriaDisabled` is not part of the contract
|
|
95
|
+
applyAriaDisabled: true
|
|
96
|
+
};
|
|
97
|
+
const testNoOnClick = {
|
|
98
|
+
dsId: "a",
|
|
99
|
+
label: "A",
|
|
100
|
+
value: 1,
|
|
101
|
+
// @ts-expect-error `onClick` is not part of the contract
|
|
102
|
+
onClick: () => null
|
|
103
|
+
};
|
|
104
|
+
const testNoGlobalAttributes = {
|
|
105
|
+
dsId: "a",
|
|
106
|
+
label: "A",
|
|
107
|
+
value: 1,
|
|
108
|
+
// @ts-expect-error global attributes are not part of the contract
|
|
109
|
+
"aria-label": "x"
|
|
110
|
+
};
|
|
111
|
+
const testNoXstyled = {
|
|
112
|
+
dsId: "a",
|
|
113
|
+
label: "A",
|
|
114
|
+
value: 1,
|
|
115
|
+
// @ts-expect-error xstyled props are not part of the contract
|
|
116
|
+
mt: "xs"
|
|
117
|
+
};
|
|
118
|
+
const testValueIsANumber = {
|
|
119
|
+
dsId: "a",
|
|
120
|
+
label: "A",
|
|
121
|
+
// @ts-expect-error the value is the number of rows
|
|
122
|
+
value: "many"
|
|
123
|
+
};
|
|
124
|
+
const testDsIdIsRequired = { label: "A", value: 1 };
|
|
66
125
|
//# sourceMappingURL=typescript-testing.js.map
|