@commercetools/nimbus 0.0.0-canary-20251010175720 → 0.0.0-canary-20251013071647

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/chunks/{localized-field-CV69UdIU.es.js → localized-field-COJ9aoma.es.js} +2 -2
  2. package/dist/chunks/{localized-field-CV69UdIU.es.js.map → localized-field-COJ9aoma.es.js.map} +1 -1
  3. package/dist/chunks/{localized-field-BqUMaU2Z.cjs.js → localized-field-DCgNEoJc.cjs.js} +2 -2
  4. package/dist/chunks/{localized-field-BqUMaU2Z.cjs.js.map → localized-field-DCgNEoJc.cjs.js.map} +1 -1
  5. package/dist/chunks/{money-input-BklJuHw0.cjs.js → money-input-CwrbJsn1.cjs.js} +2 -2
  6. package/dist/chunks/{money-input-BklJuHw0.cjs.js.map → money-input-CwrbJsn1.cjs.js.map} +1 -1
  7. package/dist/chunks/{money-input-CavdTx-o.es.js → money-input-DvR9Nnz5.es.js} +2 -2
  8. package/dist/chunks/{money-input-CavdTx-o.es.js.map → money-input-DvR9Nnz5.es.js.map} +1 -1
  9. package/dist/chunks/{pagination-CBrMi7gy.es.js → pagination-2Zl9bHfw.es.js} +2 -2
  10. package/dist/chunks/{pagination-CBrMi7gy.es.js.map → pagination-2Zl9bHfw.es.js.map} +1 -1
  11. package/dist/chunks/{pagination-DUCo0L7g.cjs.js → pagination-EVJ_rBrc.cjs.js} +2 -2
  12. package/dist/chunks/{pagination-DUCo0L7g.cjs.js.map → pagination-EVJ_rBrc.cjs.js.map} +1 -1
  13. package/dist/chunks/select-97-5UUPX.cjs.js +2 -0
  14. package/dist/chunks/{select-D_HPNSo0.cjs.js.map → select-97-5UUPX.cjs.js.map} +1 -1
  15. package/dist/chunks/select-D5QaNAMe.es.js +775 -0
  16. package/dist/chunks/{select-CWttUH5b.es.js.map → select-D5QaNAMe.es.js.map} +1 -1
  17. package/dist/components/localized-field.cjs +1 -1
  18. package/dist/components/localized-field.es.js +1 -1
  19. package/dist/components/money-input.cjs +1 -1
  20. package/dist/components/money-input.es.js +1 -1
  21. package/dist/components/pagination.cjs +1 -1
  22. package/dist/components/pagination.es.js +1 -1
  23. package/dist/components/scoped-search-input.cjs +1 -1
  24. package/dist/components/scoped-search-input.es.js +1 -1
  25. package/dist/components/select.cjs +1 -1
  26. package/dist/components/select.es.js +1 -1
  27. package/dist/index.cjs +1 -1
  28. package/dist/index.es.js +4 -4
  29. package/dist/select.d.ts +110 -7
  30. package/package.json +5 -5
  31. package/dist/chunks/select-CWttUH5b.es.js +0 -690
  32. package/dist/chunks/select-D_HPNSo0.cjs.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"pagination-CBrMi7gy.es.js","sources":["../../src/components/pagination/hooks/use-pagination.ts","../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { useState, useCallback, useMemo } from \"react\";\n\nexport interface PaginationState {\n /** Total number of items across all pages */\n totalItems: number;\n /** Current active page (1-based) */\n currentPage: number;\n /** Number of items displayed per page */\n pageSize: number;\n /** Total number of pages available */\n totalPages: number;\n /** Index of the first item on current page (1-based) */\n startItem: number;\n /** Index of the last item on current page (1-based) */\n endItem: number;\n /** Whether there is a previous page available */\n hasPreviousPage: boolean;\n /** Whether there is a next page available */\n hasNextPage: boolean;\n}\n\nexport interface UsePaginationProps {\n /** Total number of items to paginate */\n totalItems: number;\n /** Initial current page (1-based), defaults to 1 */\n currentPage?: number;\n /** Initial number of items per page, defaults to 10 */\n pageSize?: number;\n /** Callback fired when the current page changes */\n onPageChange?: (page: number) => void;\n /** Callback fired when the page size changes */\n onPageSizeChange?: (pageSize: number) => void;\n}\n\nexport interface UsePaginationReturn extends PaginationState {\n /** Navigate to a specific page number (1-based) */\n goToPage: (page: number) => void;\n /** Navigate to the previous page, if available */\n goToPreviousPage: () => void;\n /** Navigate to the next page, if available */\n goToNextPage: () => void;\n /** Change the number of items displayed per page */\n setPageSize: (pageSize: number) => void;\n}\n\n/**\n * # usePagination\n *\n * Custom hook that provides pagination state management and navigation controls.\n *\n * Supports both controlled and uncontrolled modes:\n * - Controlled: Parent component manages currentPage state via props and callbacks\n * - Uncontrolled: Hook manages internal currentPage state automatically\n *\n * @param props - Configuration object for pagination behavior\n * @param props.totalItems - Total number of items to paginate\n * @param props.currentPage - Current page number (controlled mode). If undefined, uses uncontrolled mode\n * @param props.pageSize - Number of items per page (defaults to 20)\n * @param props.onPageChange - Callback fired when page changes\n * @param props.onPageSizeChange - Callback fired when page size changes\n *\n * @returns Object containing pagination state and navigation functions:\n * - totalItems: Total number of items\n * - currentPage: Current active page number (1-based)\n * - pageSize: Number of items per page\n * - totalPages: Total number of pages\n * - startItem: First item number on current page\n * - endItem: Last item number on current page\n * - hasPreviousPage: Whether previous page exists\n * - hasNextPage: Whether next page exists\n * - goToPage: Function to navigate to specific page\n * - goToPreviousPage: Function to navigate to previous page\n * - goToNextPage: Function to navigate to next page\n * - setPageSize: Function to change page size\n *\n */\nexport function usePagination({\n totalItems,\n currentPage: controlledCurrentPage,\n pageSize: controlledPageSize = 20,\n onPageChange,\n onPageSizeChange,\n}: UsePaginationProps): UsePaginationReturn {\n // Internal state for uncontrolled mode\n const [internalCurrentPage, setInternalCurrentPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(controlledPageSize);\n\n // Determine if controlled or uncontrolled\n const isControlled = controlledCurrentPage !== undefined;\n const currentPage = isControlled\n ? controlledCurrentPage\n : internalCurrentPage;\n const pageSize = controlledPageSize ?? internalPageSize;\n\n // Calculate pagination values\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n\n // Ensure currentPage is within valid bounds\n const validCurrentPage = Math.max(1, Math.min(currentPage, totalPages));\n\n const startItem = Math.min((validCurrentPage - 1) * pageSize + 1, totalItems);\n const endItem = Math.min(validCurrentPage * pageSize, totalItems);\n\n const hasPreviousPage = validCurrentPage > 1;\n const hasNextPage = validCurrentPage < totalPages;\n\n // Page navigation functions\n const goToPage = useCallback(\n (page: number) => {\n const newPage = Math.max(1, Math.min(page, totalPages));\n\n if (!isControlled) {\n setInternalCurrentPage(newPage);\n }\n\n onPageChange?.(newPage);\n },\n [totalPages, isControlled, onPageChange]\n );\n\n const goToPreviousPage = useCallback(() => {\n if (hasPreviousPage) {\n goToPage(validCurrentPage - 1);\n }\n }, [hasPreviousPage, validCurrentPage, goToPage]);\n\n const goToNextPage = useCallback(() => {\n if (hasNextPage) {\n goToPage(validCurrentPage + 1);\n }\n }, [hasNextPage, validCurrentPage, goToPage]);\n\n const setPageSize = useCallback(\n (newPageSize: number) => {\n const newTotalPages = Math.ceil(totalItems / newPageSize);\n const newPage = Math.min(validCurrentPage, newTotalPages);\n\n setInternalPageSize(newPageSize);\n\n if (!isControlled && newPage !== validCurrentPage) {\n setInternalCurrentPage(newPage);\n }\n\n onPageSizeChange?.(newPageSize);\n\n if (newPage !== validCurrentPage) {\n onPageChange?.(newPage);\n }\n },\n [totalItems, validCurrentPage, isControlled, onPageChange, onPageSizeChange]\n );\n\n return useMemo(\n () => ({\n totalItems,\n currentPage: validCurrentPage,\n pageSize,\n totalPages,\n startItem,\n endItem,\n hasPreviousPage,\n hasNextPage,\n goToPage,\n goToPreviousPage,\n goToNextPage,\n setPageSize,\n }),\n [\n totalItems,\n validCurrentPage,\n pageSize,\n totalPages,\n startItem,\n endItem,\n hasPreviousPage,\n hasNextPage,\n goToPage,\n goToPreviousPage,\n goToNextPage,\n setPageSize,\n ]\n );\n}\n","import { useMemo } from \"react\";\nimport { ChevronLeft, ChevronRight } from \"@commercetools/nimbus-icons\";\nimport {\n Flex,\n IconButton,\n NumberInput,\n Select,\n Stack,\n Text,\n} from \"@/components\";\nimport { usePagination } from \"./hooks/use-pagination\";\nimport type { PaginationProps } from \"./pagination.types\";\n\n/**\n * # Pagination\n *\n * A component that allows users to navigate through pages and control page size.\n * Combines a page size selector and page navigator for comprehensive pagination control.\n *\n * @see {@link https://nimbus-documentation.vercel.app/components/pagination}\n */\nexport const Pagination = (props: PaginationProps) => {\n const {\n totalItems,\n currentPage,\n pageSize,\n pageSizeOptions = [10, 20, 50, 100],\n onPageChange,\n onPageSizeChange,\n \"aria-label\": ariaLabel = \"Pagination\",\n enablePageInput = true,\n enablePageSizeSelector = true,\n } = props;\n\n const pagination = usePagination({\n totalItems,\n currentPage,\n pageSize,\n onPageChange,\n onPageSizeChange,\n });\n\n // Prepare page size options for select\n const pageSizeSelectOptions = useMemo(\n () =>\n pageSizeOptions.map((size) => ({\n id: size.toString(),\n name: `${size}`,\n })),\n [pageSizeOptions]\n );\n\n const handlePageSizeChange = (key: React.Key | null) => {\n if (key) {\n const newPageSize = parseInt(key.toString(), 10);\n pagination.setPageSize(newPageSize);\n }\n };\n\n return (\n <Stack gap=\"400\" direction={{ base: \"column\", sm: \"row\" }} align=\"center\">\n {/* Page Size Selector */}\n {enablePageSizeSelector && (\n <Flex align=\"center\" gap=\"200\">\n <Select.Root\n isClearable={false}\n selectedKey={pagination.pageSize.toString()}\n onSelectionChange={handlePageSizeChange}\n aria-label=\"Items per page\"\n >\n <Select.Options>\n {pageSizeSelectOptions.map((option) => (\n <Select.Option key={option.id} id={option.id}>\n {option.name}\n </Select.Option>\n ))}\n </Select.Options>\n </Select.Root>\n <Text color=\"neutral.12\">items per page</Text>\n </Flex>\n )}\n <Flex flexGrow=\"1\" />\n {/* Page Navigator */}\n <Flex align=\"center\" gap=\"200\" role=\"navigation\" aria-label={ariaLabel}>\n <IconButton\n onClick={pagination.goToPreviousPage}\n isDisabled={!pagination.hasPreviousPage}\n variant=\"ghost\"\n tone=\"primary\"\n aria-label=\"Go to previous page\"\n >\n <ChevronLeft />\n </IconButton>\n\n <Flex align=\"center\" gap=\"200\">\n <Text color=\"neutral.12\">Page</Text>\n {enablePageInput ? (\n <NumberInput\n value={pagination.currentPage}\n onChange={(value: number | undefined) =>\n pagination.goToPage(value || 1)\n }\n minValue={1}\n maxValue={pagination.totalPages}\n step={1}\n isDisabled={false}\n width=\"9ch\"\n aria-label=\"Current page\"\n aria-current=\"page\"\n />\n ) : (\n <Text fontWeight=\"semibold\" color=\"neutral.12\" aria-current=\"page\">\n {pagination.currentPage}\n </Text>\n )}\n <Text color=\"neutral.12\">\n of {pagination.totalPages.toLocaleString()}\n </Text>\n </Flex>\n\n <IconButton\n onClick={pagination.goToNextPage}\n isDisabled={!pagination.hasNextPage}\n variant=\"ghost\"\n tone=\"primary\"\n aria-label=\"Go to next page\"\n >\n <ChevronRight />\n </IconButton>\n </Flex>\n </Stack>\n );\n};\n\n// Manually assign a displayName for debugging purposes\nPagination.displayName = \"Pagination\";\n"],"names":["usePagination","totalItems","controlledCurrentPage","controlledPageSize","onPageChange","onPageSizeChange","internalCurrentPage","setInternalCurrentPage","useState","internalPageSize","setInternalPageSize","isControlled","currentPage","pageSize","totalPages","validCurrentPage","startItem","endItem","hasPreviousPage","hasNextPage","goToPage","useCallback","page","newPage","goToPreviousPage","goToNextPage","setPageSize","newPageSize","newTotalPages","useMemo","Pagination","props","pageSizeOptions","ariaLabel","enablePageInput","enablePageSizeSelector","pagination","pageSizeSelectOptions","size","handlePageSizeChange","key","jsxs","Stack","Flex","jsx","Select","option","Text","IconButton","ChevronLeft","NumberInput","value","ChevronRight"],"mappings":"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"}
1
+ {"version":3,"file":"pagination-2Zl9bHfw.es.js","sources":["../../src/components/pagination/hooks/use-pagination.ts","../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { useState, useCallback, useMemo } from \"react\";\n\nexport interface PaginationState {\n /** Total number of items across all pages */\n totalItems: number;\n /** Current active page (1-based) */\n currentPage: number;\n /** Number of items displayed per page */\n pageSize: number;\n /** Total number of pages available */\n totalPages: number;\n /** Index of the first item on current page (1-based) */\n startItem: number;\n /** Index of the last item on current page (1-based) */\n endItem: number;\n /** Whether there is a previous page available */\n hasPreviousPage: boolean;\n /** Whether there is a next page available */\n hasNextPage: boolean;\n}\n\nexport interface UsePaginationProps {\n /** Total number of items to paginate */\n totalItems: number;\n /** Initial current page (1-based), defaults to 1 */\n currentPage?: number;\n /** Initial number of items per page, defaults to 10 */\n pageSize?: number;\n /** Callback fired when the current page changes */\n onPageChange?: (page: number) => void;\n /** Callback fired when the page size changes */\n onPageSizeChange?: (pageSize: number) => void;\n}\n\nexport interface UsePaginationReturn extends PaginationState {\n /** Navigate to a specific page number (1-based) */\n goToPage: (page: number) => void;\n /** Navigate to the previous page, if available */\n goToPreviousPage: () => void;\n /** Navigate to the next page, if available */\n goToNextPage: () => void;\n /** Change the number of items displayed per page */\n setPageSize: (pageSize: number) => void;\n}\n\n/**\n * # usePagination\n *\n * Custom hook that provides pagination state management and navigation controls.\n *\n * Supports both controlled and uncontrolled modes:\n * - Controlled: Parent component manages currentPage state via props and callbacks\n * - Uncontrolled: Hook manages internal currentPage state automatically\n *\n * @param props - Configuration object for pagination behavior\n * @param props.totalItems - Total number of items to paginate\n * @param props.currentPage - Current page number (controlled mode). If undefined, uses uncontrolled mode\n * @param props.pageSize - Number of items per page (defaults to 20)\n * @param props.onPageChange - Callback fired when page changes\n * @param props.onPageSizeChange - Callback fired when page size changes\n *\n * @returns Object containing pagination state and navigation functions:\n * - totalItems: Total number of items\n * - currentPage: Current active page number (1-based)\n * - pageSize: Number of items per page\n * - totalPages: Total number of pages\n * - startItem: First item number on current page\n * - endItem: Last item number on current page\n * - hasPreviousPage: Whether previous page exists\n * - hasNextPage: Whether next page exists\n * - goToPage: Function to navigate to specific page\n * - goToPreviousPage: Function to navigate to previous page\n * - goToNextPage: Function to navigate to next page\n * - setPageSize: Function to change page size\n *\n */\nexport function usePagination({\n totalItems,\n currentPage: controlledCurrentPage,\n pageSize: controlledPageSize = 20,\n onPageChange,\n onPageSizeChange,\n}: UsePaginationProps): UsePaginationReturn {\n // Internal state for uncontrolled mode\n const [internalCurrentPage, setInternalCurrentPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(controlledPageSize);\n\n // Determine if controlled or uncontrolled\n const isControlled = controlledCurrentPage !== undefined;\n const currentPage = isControlled\n ? controlledCurrentPage\n : internalCurrentPage;\n const pageSize = controlledPageSize ?? internalPageSize;\n\n // Calculate pagination values\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n\n // Ensure currentPage is within valid bounds\n const validCurrentPage = Math.max(1, Math.min(currentPage, totalPages));\n\n const startItem = Math.min((validCurrentPage - 1) * pageSize + 1, totalItems);\n const endItem = Math.min(validCurrentPage * pageSize, totalItems);\n\n const hasPreviousPage = validCurrentPage > 1;\n const hasNextPage = validCurrentPage < totalPages;\n\n // Page navigation functions\n const goToPage = useCallback(\n (page: number) => {\n const newPage = Math.max(1, Math.min(page, totalPages));\n\n if (!isControlled) {\n setInternalCurrentPage(newPage);\n }\n\n onPageChange?.(newPage);\n },\n [totalPages, isControlled, onPageChange]\n );\n\n const goToPreviousPage = useCallback(() => {\n if (hasPreviousPage) {\n goToPage(validCurrentPage - 1);\n }\n }, [hasPreviousPage, validCurrentPage, goToPage]);\n\n const goToNextPage = useCallback(() => {\n if (hasNextPage) {\n goToPage(validCurrentPage + 1);\n }\n }, [hasNextPage, validCurrentPage, goToPage]);\n\n const setPageSize = useCallback(\n (newPageSize: number) => {\n const newTotalPages = Math.ceil(totalItems / newPageSize);\n const newPage = Math.min(validCurrentPage, newTotalPages);\n\n setInternalPageSize(newPageSize);\n\n if (!isControlled && newPage !== validCurrentPage) {\n setInternalCurrentPage(newPage);\n }\n\n onPageSizeChange?.(newPageSize);\n\n if (newPage !== validCurrentPage) {\n onPageChange?.(newPage);\n }\n },\n [totalItems, validCurrentPage, isControlled, onPageChange, onPageSizeChange]\n );\n\n return useMemo(\n () => ({\n totalItems,\n currentPage: validCurrentPage,\n pageSize,\n totalPages,\n startItem,\n endItem,\n hasPreviousPage,\n hasNextPage,\n goToPage,\n goToPreviousPage,\n goToNextPage,\n setPageSize,\n }),\n [\n totalItems,\n validCurrentPage,\n pageSize,\n totalPages,\n startItem,\n endItem,\n hasPreviousPage,\n hasNextPage,\n goToPage,\n goToPreviousPage,\n goToNextPage,\n setPageSize,\n ]\n );\n}\n","import { useMemo } from \"react\";\nimport { ChevronLeft, ChevronRight } from \"@commercetools/nimbus-icons\";\nimport {\n Flex,\n IconButton,\n NumberInput,\n Select,\n Stack,\n Text,\n} from \"@/components\";\nimport { usePagination } from \"./hooks/use-pagination\";\nimport type { PaginationProps } from \"./pagination.types\";\n\n/**\n * # Pagination\n *\n * A component that allows users to navigate through pages and control page size.\n * Combines a page size selector and page navigator for comprehensive pagination control.\n *\n * @see {@link https://nimbus-documentation.vercel.app/components/pagination}\n */\nexport const Pagination = (props: PaginationProps) => {\n const {\n totalItems,\n currentPage,\n pageSize,\n pageSizeOptions = [10, 20, 50, 100],\n onPageChange,\n onPageSizeChange,\n \"aria-label\": ariaLabel = \"Pagination\",\n enablePageInput = true,\n enablePageSizeSelector = true,\n } = props;\n\n const pagination = usePagination({\n totalItems,\n currentPage,\n pageSize,\n onPageChange,\n onPageSizeChange,\n });\n\n // Prepare page size options for select\n const pageSizeSelectOptions = useMemo(\n () =>\n pageSizeOptions.map((size) => ({\n id: size.toString(),\n name: `${size}`,\n })),\n [pageSizeOptions]\n );\n\n const handlePageSizeChange = (key: React.Key | null) => {\n if (key) {\n const newPageSize = parseInt(key.toString(), 10);\n pagination.setPageSize(newPageSize);\n }\n };\n\n return (\n <Stack gap=\"400\" direction={{ base: \"column\", sm: \"row\" }} align=\"center\">\n {/* Page Size Selector */}\n {enablePageSizeSelector && (\n <Flex align=\"center\" gap=\"200\">\n <Select.Root\n isClearable={false}\n selectedKey={pagination.pageSize.toString()}\n onSelectionChange={handlePageSizeChange}\n aria-label=\"Items per page\"\n >\n <Select.Options>\n {pageSizeSelectOptions.map((option) => (\n <Select.Option key={option.id} id={option.id}>\n {option.name}\n </Select.Option>\n ))}\n </Select.Options>\n </Select.Root>\n <Text color=\"neutral.12\">items per page</Text>\n </Flex>\n )}\n <Flex flexGrow=\"1\" />\n {/* Page Navigator */}\n <Flex align=\"center\" gap=\"200\" role=\"navigation\" aria-label={ariaLabel}>\n <IconButton\n onClick={pagination.goToPreviousPage}\n isDisabled={!pagination.hasPreviousPage}\n variant=\"ghost\"\n tone=\"primary\"\n aria-label=\"Go to previous page\"\n >\n <ChevronLeft />\n </IconButton>\n\n <Flex align=\"center\" gap=\"200\">\n <Text color=\"neutral.12\">Page</Text>\n {enablePageInput ? (\n <NumberInput\n value={pagination.currentPage}\n onChange={(value: number | undefined) =>\n pagination.goToPage(value || 1)\n }\n minValue={1}\n maxValue={pagination.totalPages}\n step={1}\n isDisabled={false}\n width=\"9ch\"\n aria-label=\"Current page\"\n aria-current=\"page\"\n />\n ) : (\n <Text fontWeight=\"semibold\" color=\"neutral.12\" aria-current=\"page\">\n {pagination.currentPage}\n </Text>\n )}\n <Text color=\"neutral.12\">\n of {pagination.totalPages.toLocaleString()}\n </Text>\n </Flex>\n\n <IconButton\n onClick={pagination.goToNextPage}\n isDisabled={!pagination.hasNextPage}\n variant=\"ghost\"\n tone=\"primary\"\n aria-label=\"Go to next page\"\n >\n <ChevronRight />\n </IconButton>\n </Flex>\n </Stack>\n );\n};\n\n// Manually assign a displayName for debugging purposes\nPagination.displayName = \"Pagination\";\n"],"names":["usePagination","totalItems","controlledCurrentPage","controlledPageSize","onPageChange","onPageSizeChange","internalCurrentPage","setInternalCurrentPage","useState","internalPageSize","setInternalPageSize","isControlled","currentPage","pageSize","totalPages","validCurrentPage","startItem","endItem","hasPreviousPage","hasNextPage","goToPage","useCallback","page","newPage","goToPreviousPage","goToNextPage","setPageSize","newPageSize","newTotalPages","useMemo","Pagination","props","pageSizeOptions","ariaLabel","enablePageInput","enablePageSizeSelector","pagination","pageSizeSelectOptions","size","handlePageSizeChange","key","jsxs","Stack","Flex","jsx","Select","option","Text","IconButton","ChevronLeft","NumberInput","value","ChevronRight"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const a=require("react/jsx-runtime"),r=require("react"),N=require("@commercetools/nimbus-icons"),O=require("./stack-CIN13EDn.cjs.js"),j=require("@chakra-ui/react/flex"),T=require("./select-D_HPNSo0.cjs.js"),f=require("./text-CCW9kDT_.cjs.js"),w=require("./icon-button-CkjZc6Br.cjs.js"),R=require("./number-input-DA_yy5BZ.cjs.js");function y({totalItems:n,currentPage:x,pageSize:h=20,onPageChange:c,onPageSizeChange:g}){const[C,P]=r.useState(1),[v,M]=r.useState(h),s=x!==void 0,t=s?x:C,o=h??v,i=Math.max(1,Math.ceil(n/o)),e=Math.max(1,Math.min(t,i)),p=Math.min((e-1)*o+1,n),q=Math.min(e*o,n),d=e>1,m=e<i,l=r.useCallback(u=>{const S=Math.max(1,Math.min(u,i));s||P(S),c?.(S)},[i,s,c]),z=r.useCallback(()=>{d&&l(e-1)},[d,e,l]),k=r.useCallback(()=>{m&&l(e+1)},[m,e,l]),I=r.useCallback(u=>{const S=Math.ceil(n/u),b=Math.min(e,S);M(u),!s&&b!==e&&P(b),g?.(u),b!==e&&c?.(b)},[n,e,s,c,g]);return r.useMemo(()=>({totalItems:n,currentPage:e,pageSize:o,totalPages:i,startItem:p,endItem:q,hasPreviousPage:d,hasNextPage:m,goToPage:l,goToPreviousPage:z,goToNextPage:k,setPageSize:I}),[n,e,o,i,p,q,d,m,l,z,k,I])}const F=n=>{const{totalItems:x,currentPage:h,pageSize:c,pageSizeOptions:g=[10,20,50,100],onPageChange:C,onPageSizeChange:P,"aria-label":v="Pagination",enablePageInput:M=!0,enablePageSizeSelector:s=!0}=n,t=y({totalItems:x,currentPage:h,pageSize:c,onPageChange:C,onPageSizeChange:P}),o=r.useMemo(()=>g.map(e=>({id:e.toString(),name:`${e}`})),[g]),i=e=>{if(e){const p=parseInt(e.toString(),10);t.setPageSize(p)}};return a.jsxs(O.Stack,{gap:"400",direction:{base:"column",sm:"row"},align:"center",children:[s&&a.jsxs(j.Flex,{align:"center",gap:"200",children:[a.jsx(T.Select.Root,{isClearable:!1,selectedKey:t.pageSize.toString(),onSelectionChange:i,"aria-label":"Items per page",children:a.jsx(T.Select.Options,{children:o.map(e=>a.jsx(T.Select.Option,{id:e.id,children:e.name},e.id))})}),a.jsx(f.Text,{color:"neutral.12",children:"items per page"})]}),a.jsx(j.Flex,{flexGrow:"1"}),a.jsxs(j.Flex,{align:"center",gap:"200",role:"navigation","aria-label":v,children:[a.jsx(w.IconButton,{onClick:t.goToPreviousPage,isDisabled:!t.hasPreviousPage,variant:"ghost",tone:"primary","aria-label":"Go to previous page",children:a.jsx(N.ChevronLeft,{})}),a.jsxs(j.Flex,{align:"center",gap:"200",children:[a.jsx(f.Text,{color:"neutral.12",children:"Page"}),M?a.jsx(R.NumberInput,{value:t.currentPage,onChange:e=>t.goToPage(e||1),minValue:1,maxValue:t.totalPages,step:1,isDisabled:!1,width:"9ch","aria-label":"Current page","aria-current":"page"}):a.jsx(f.Text,{fontWeight:"semibold",color:"neutral.12","aria-current":"page",children:t.currentPage}),a.jsxs(f.Text,{color:"neutral.12",children:["of ",t.totalPages.toLocaleString()]})]}),a.jsx(w.IconButton,{onClick:t.goToNextPage,isDisabled:!t.hasNextPage,variant:"ghost",tone:"primary","aria-label":"Go to next page",children:a.jsx(N.ChevronRight,{})})]})]})};F.displayName="Pagination";exports.Pagination=F;
2
- //# sourceMappingURL=pagination-DUCo0L7g.cjs.js.map
1
+ "use strict";const a=require("react/jsx-runtime"),r=require("react"),N=require("@commercetools/nimbus-icons"),O=require("./stack-CIN13EDn.cjs.js"),j=require("@chakra-ui/react/flex"),T=require("./select-97-5UUPX.cjs.js"),f=require("./text-CCW9kDT_.cjs.js"),w=require("./icon-button-CkjZc6Br.cjs.js"),R=require("./number-input-DA_yy5BZ.cjs.js");function y({totalItems:n,currentPage:x,pageSize:h=20,onPageChange:c,onPageSizeChange:g}){const[C,P]=r.useState(1),[v,M]=r.useState(h),s=x!==void 0,t=s?x:C,o=h??v,i=Math.max(1,Math.ceil(n/o)),e=Math.max(1,Math.min(t,i)),p=Math.min((e-1)*o+1,n),q=Math.min(e*o,n),d=e>1,m=e<i,l=r.useCallback(u=>{const S=Math.max(1,Math.min(u,i));s||P(S),c?.(S)},[i,s,c]),z=r.useCallback(()=>{d&&l(e-1)},[d,e,l]),k=r.useCallback(()=>{m&&l(e+1)},[m,e,l]),I=r.useCallback(u=>{const S=Math.ceil(n/u),b=Math.min(e,S);M(u),!s&&b!==e&&P(b),g?.(u),b!==e&&c?.(b)},[n,e,s,c,g]);return r.useMemo(()=>({totalItems:n,currentPage:e,pageSize:o,totalPages:i,startItem:p,endItem:q,hasPreviousPage:d,hasNextPage:m,goToPage:l,goToPreviousPage:z,goToNextPage:k,setPageSize:I}),[n,e,o,i,p,q,d,m,l,z,k,I])}const F=n=>{const{totalItems:x,currentPage:h,pageSize:c,pageSizeOptions:g=[10,20,50,100],onPageChange:C,onPageSizeChange:P,"aria-label":v="Pagination",enablePageInput:M=!0,enablePageSizeSelector:s=!0}=n,t=y({totalItems:x,currentPage:h,pageSize:c,onPageChange:C,onPageSizeChange:P}),o=r.useMemo(()=>g.map(e=>({id:e.toString(),name:`${e}`})),[g]),i=e=>{if(e){const p=parseInt(e.toString(),10);t.setPageSize(p)}};return a.jsxs(O.Stack,{gap:"400",direction:{base:"column",sm:"row"},align:"center",children:[s&&a.jsxs(j.Flex,{align:"center",gap:"200",children:[a.jsx(T.Select.Root,{isClearable:!1,selectedKey:t.pageSize.toString(),onSelectionChange:i,"aria-label":"Items per page",children:a.jsx(T.Select.Options,{children:o.map(e=>a.jsx(T.Select.Option,{id:e.id,children:e.name},e.id))})}),a.jsx(f.Text,{color:"neutral.12",children:"items per page"})]}),a.jsx(j.Flex,{flexGrow:"1"}),a.jsxs(j.Flex,{align:"center",gap:"200",role:"navigation","aria-label":v,children:[a.jsx(w.IconButton,{onClick:t.goToPreviousPage,isDisabled:!t.hasPreviousPage,variant:"ghost",tone:"primary","aria-label":"Go to previous page",children:a.jsx(N.ChevronLeft,{})}),a.jsxs(j.Flex,{align:"center",gap:"200",children:[a.jsx(f.Text,{color:"neutral.12",children:"Page"}),M?a.jsx(R.NumberInput,{value:t.currentPage,onChange:e=>t.goToPage(e||1),minValue:1,maxValue:t.totalPages,step:1,isDisabled:!1,width:"9ch","aria-label":"Current page","aria-current":"page"}):a.jsx(f.Text,{fontWeight:"semibold",color:"neutral.12","aria-current":"page",children:t.currentPage}),a.jsxs(f.Text,{color:"neutral.12",children:["of ",t.totalPages.toLocaleString()]})]}),a.jsx(w.IconButton,{onClick:t.goToNextPage,isDisabled:!t.hasNextPage,variant:"ghost",tone:"primary","aria-label":"Go to next page",children:a.jsx(N.ChevronRight,{})})]})]})};F.displayName="Pagination";exports.Pagination=F;
2
+ //# sourceMappingURL=pagination-EVJ_rBrc.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pagination-DUCo0L7g.cjs.js","sources":["../../src/components/pagination/hooks/use-pagination.ts","../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { useState, useCallback, useMemo } from \"react\";\n\nexport interface PaginationState {\n /** Total number of items across all pages */\n totalItems: number;\n /** Current active page (1-based) */\n currentPage: number;\n /** Number of items displayed per page */\n pageSize: number;\n /** Total number of pages available */\n totalPages: number;\n /** Index of the first item on current page (1-based) */\n startItem: number;\n /** Index of the last item on current page (1-based) */\n endItem: number;\n /** Whether there is a previous page available */\n hasPreviousPage: boolean;\n /** Whether there is a next page available */\n hasNextPage: boolean;\n}\n\nexport interface UsePaginationProps {\n /** Total number of items to paginate */\n totalItems: number;\n /** Initial current page (1-based), defaults to 1 */\n currentPage?: number;\n /** Initial number of items per page, defaults to 10 */\n pageSize?: number;\n /** Callback fired when the current page changes */\n onPageChange?: (page: number) => void;\n /** Callback fired when the page size changes */\n onPageSizeChange?: (pageSize: number) => void;\n}\n\nexport interface UsePaginationReturn extends PaginationState {\n /** Navigate to a specific page number (1-based) */\n goToPage: (page: number) => void;\n /** Navigate to the previous page, if available */\n goToPreviousPage: () => void;\n /** Navigate to the next page, if available */\n goToNextPage: () => void;\n /** Change the number of items displayed per page */\n setPageSize: (pageSize: number) => void;\n}\n\n/**\n * # usePagination\n *\n * Custom hook that provides pagination state management and navigation controls.\n *\n * Supports both controlled and uncontrolled modes:\n * - Controlled: Parent component manages currentPage state via props and callbacks\n * - Uncontrolled: Hook manages internal currentPage state automatically\n *\n * @param props - Configuration object for pagination behavior\n * @param props.totalItems - Total number of items to paginate\n * @param props.currentPage - Current page number (controlled mode). If undefined, uses uncontrolled mode\n * @param props.pageSize - Number of items per page (defaults to 20)\n * @param props.onPageChange - Callback fired when page changes\n * @param props.onPageSizeChange - Callback fired when page size changes\n *\n * @returns Object containing pagination state and navigation functions:\n * - totalItems: Total number of items\n * - currentPage: Current active page number (1-based)\n * - pageSize: Number of items per page\n * - totalPages: Total number of pages\n * - startItem: First item number on current page\n * - endItem: Last item number on current page\n * - hasPreviousPage: Whether previous page exists\n * - hasNextPage: Whether next page exists\n * - goToPage: Function to navigate to specific page\n * - goToPreviousPage: Function to navigate to previous page\n * - goToNextPage: Function to navigate to next page\n * - setPageSize: Function to change page size\n *\n */\nexport function usePagination({\n totalItems,\n currentPage: controlledCurrentPage,\n pageSize: controlledPageSize = 20,\n onPageChange,\n onPageSizeChange,\n}: UsePaginationProps): UsePaginationReturn {\n // Internal state for uncontrolled mode\n const [internalCurrentPage, setInternalCurrentPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(controlledPageSize);\n\n // Determine if controlled or uncontrolled\n const isControlled = controlledCurrentPage !== undefined;\n const currentPage = isControlled\n ? controlledCurrentPage\n : internalCurrentPage;\n const pageSize = controlledPageSize ?? internalPageSize;\n\n // Calculate pagination values\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n\n // Ensure currentPage is within valid bounds\n const validCurrentPage = Math.max(1, Math.min(currentPage, totalPages));\n\n const startItem = Math.min((validCurrentPage - 1) * pageSize + 1, totalItems);\n const endItem = Math.min(validCurrentPage * pageSize, totalItems);\n\n const hasPreviousPage = validCurrentPage > 1;\n const hasNextPage = validCurrentPage < totalPages;\n\n // Page navigation functions\n const goToPage = useCallback(\n (page: number) => {\n const newPage = Math.max(1, Math.min(page, totalPages));\n\n if (!isControlled) {\n setInternalCurrentPage(newPage);\n }\n\n onPageChange?.(newPage);\n },\n [totalPages, isControlled, onPageChange]\n );\n\n const goToPreviousPage = useCallback(() => {\n if (hasPreviousPage) {\n goToPage(validCurrentPage - 1);\n }\n }, [hasPreviousPage, validCurrentPage, goToPage]);\n\n const goToNextPage = useCallback(() => {\n if (hasNextPage) {\n goToPage(validCurrentPage + 1);\n }\n }, [hasNextPage, validCurrentPage, goToPage]);\n\n const setPageSize = useCallback(\n (newPageSize: number) => {\n const newTotalPages = Math.ceil(totalItems / newPageSize);\n const newPage = Math.min(validCurrentPage, newTotalPages);\n\n setInternalPageSize(newPageSize);\n\n if (!isControlled && newPage !== validCurrentPage) {\n setInternalCurrentPage(newPage);\n }\n\n onPageSizeChange?.(newPageSize);\n\n if (newPage !== validCurrentPage) {\n onPageChange?.(newPage);\n }\n },\n [totalItems, validCurrentPage, isControlled, onPageChange, onPageSizeChange]\n );\n\n return useMemo(\n () => ({\n totalItems,\n currentPage: validCurrentPage,\n pageSize,\n totalPages,\n startItem,\n endItem,\n hasPreviousPage,\n hasNextPage,\n goToPage,\n goToPreviousPage,\n goToNextPage,\n setPageSize,\n }),\n [\n totalItems,\n validCurrentPage,\n pageSize,\n totalPages,\n startItem,\n endItem,\n hasPreviousPage,\n hasNextPage,\n goToPage,\n goToPreviousPage,\n goToNextPage,\n setPageSize,\n ]\n );\n}\n","import { useMemo } from \"react\";\nimport { ChevronLeft, ChevronRight } from \"@commercetools/nimbus-icons\";\nimport {\n Flex,\n IconButton,\n NumberInput,\n Select,\n Stack,\n Text,\n} from \"@/components\";\nimport { usePagination } from \"./hooks/use-pagination\";\nimport type { PaginationProps } from \"./pagination.types\";\n\n/**\n * # Pagination\n *\n * A component that allows users to navigate through pages and control page size.\n * Combines a page size selector and page navigator for comprehensive pagination control.\n *\n * @see {@link https://nimbus-documentation.vercel.app/components/pagination}\n */\nexport const Pagination = (props: PaginationProps) => {\n const {\n totalItems,\n currentPage,\n pageSize,\n pageSizeOptions = [10, 20, 50, 100],\n onPageChange,\n onPageSizeChange,\n \"aria-label\": ariaLabel = \"Pagination\",\n enablePageInput = true,\n enablePageSizeSelector = true,\n } = props;\n\n const pagination = usePagination({\n totalItems,\n currentPage,\n pageSize,\n onPageChange,\n onPageSizeChange,\n });\n\n // Prepare page size options for select\n const pageSizeSelectOptions = useMemo(\n () =>\n pageSizeOptions.map((size) => ({\n id: size.toString(),\n name: `${size}`,\n })),\n [pageSizeOptions]\n );\n\n const handlePageSizeChange = (key: React.Key | null) => {\n if (key) {\n const newPageSize = parseInt(key.toString(), 10);\n pagination.setPageSize(newPageSize);\n }\n };\n\n return (\n <Stack gap=\"400\" direction={{ base: \"column\", sm: \"row\" }} align=\"center\">\n {/* Page Size Selector */}\n {enablePageSizeSelector && (\n <Flex align=\"center\" gap=\"200\">\n <Select.Root\n isClearable={false}\n selectedKey={pagination.pageSize.toString()}\n onSelectionChange={handlePageSizeChange}\n aria-label=\"Items per page\"\n >\n <Select.Options>\n {pageSizeSelectOptions.map((option) => (\n <Select.Option key={option.id} id={option.id}>\n {option.name}\n </Select.Option>\n ))}\n </Select.Options>\n </Select.Root>\n <Text color=\"neutral.12\">items per page</Text>\n </Flex>\n )}\n <Flex flexGrow=\"1\" />\n {/* Page Navigator */}\n <Flex align=\"center\" gap=\"200\" role=\"navigation\" aria-label={ariaLabel}>\n <IconButton\n onClick={pagination.goToPreviousPage}\n isDisabled={!pagination.hasPreviousPage}\n variant=\"ghost\"\n tone=\"primary\"\n aria-label=\"Go to previous page\"\n >\n <ChevronLeft />\n </IconButton>\n\n <Flex align=\"center\" gap=\"200\">\n <Text color=\"neutral.12\">Page</Text>\n {enablePageInput ? (\n <NumberInput\n value={pagination.currentPage}\n onChange={(value: number | undefined) =>\n pagination.goToPage(value || 1)\n }\n minValue={1}\n maxValue={pagination.totalPages}\n step={1}\n isDisabled={false}\n width=\"9ch\"\n aria-label=\"Current page\"\n aria-current=\"page\"\n />\n ) : (\n <Text fontWeight=\"semibold\" color=\"neutral.12\" aria-current=\"page\">\n {pagination.currentPage}\n </Text>\n )}\n <Text color=\"neutral.12\">\n of {pagination.totalPages.toLocaleString()}\n </Text>\n </Flex>\n\n <IconButton\n onClick={pagination.goToNextPage}\n isDisabled={!pagination.hasNextPage}\n variant=\"ghost\"\n tone=\"primary\"\n aria-label=\"Go to next page\"\n >\n <ChevronRight />\n </IconButton>\n </Flex>\n </Stack>\n );\n};\n\n// Manually assign a displayName for debugging purposes\nPagination.displayName = \"Pagination\";\n"],"names":["usePagination","totalItems","controlledCurrentPage","controlledPageSize","onPageChange","onPageSizeChange","internalCurrentPage","setInternalCurrentPage","useState","internalPageSize","setInternalPageSize","isControlled","currentPage","pageSize","totalPages","validCurrentPage","startItem","endItem","hasPreviousPage","hasNextPage","goToPage","useCallback","page","newPage","goToPreviousPage","goToNextPage","setPageSize","newPageSize","newTotalPages","useMemo","Pagination","props","pageSizeOptions","ariaLabel","enablePageInput","enablePageSizeSelector","pagination","pageSizeSelectOptions","size","handlePageSizeChange","key","jsxs","Stack","Flex","jsx","Select","option","Text","IconButton","ChevronLeft","NumberInput","value","ChevronRight"],"mappings":"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"}
1
+ {"version":3,"file":"pagination-EVJ_rBrc.cjs.js","sources":["../../src/components/pagination/hooks/use-pagination.ts","../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { useState, useCallback, useMemo } from \"react\";\n\nexport interface PaginationState {\n /** Total number of items across all pages */\n totalItems: number;\n /** Current active page (1-based) */\n currentPage: number;\n /** Number of items displayed per page */\n pageSize: number;\n /** Total number of pages available */\n totalPages: number;\n /** Index of the first item on current page (1-based) */\n startItem: number;\n /** Index of the last item on current page (1-based) */\n endItem: number;\n /** Whether there is a previous page available */\n hasPreviousPage: boolean;\n /** Whether there is a next page available */\n hasNextPage: boolean;\n}\n\nexport interface UsePaginationProps {\n /** Total number of items to paginate */\n totalItems: number;\n /** Initial current page (1-based), defaults to 1 */\n currentPage?: number;\n /** Initial number of items per page, defaults to 10 */\n pageSize?: number;\n /** Callback fired when the current page changes */\n onPageChange?: (page: number) => void;\n /** Callback fired when the page size changes */\n onPageSizeChange?: (pageSize: number) => void;\n}\n\nexport interface UsePaginationReturn extends PaginationState {\n /** Navigate to a specific page number (1-based) */\n goToPage: (page: number) => void;\n /** Navigate to the previous page, if available */\n goToPreviousPage: () => void;\n /** Navigate to the next page, if available */\n goToNextPage: () => void;\n /** Change the number of items displayed per page */\n setPageSize: (pageSize: number) => void;\n}\n\n/**\n * # usePagination\n *\n * Custom hook that provides pagination state management and navigation controls.\n *\n * Supports both controlled and uncontrolled modes:\n * - Controlled: Parent component manages currentPage state via props and callbacks\n * - Uncontrolled: Hook manages internal currentPage state automatically\n *\n * @param props - Configuration object for pagination behavior\n * @param props.totalItems - Total number of items to paginate\n * @param props.currentPage - Current page number (controlled mode). If undefined, uses uncontrolled mode\n * @param props.pageSize - Number of items per page (defaults to 20)\n * @param props.onPageChange - Callback fired when page changes\n * @param props.onPageSizeChange - Callback fired when page size changes\n *\n * @returns Object containing pagination state and navigation functions:\n * - totalItems: Total number of items\n * - currentPage: Current active page number (1-based)\n * - pageSize: Number of items per page\n * - totalPages: Total number of pages\n * - startItem: First item number on current page\n * - endItem: Last item number on current page\n * - hasPreviousPage: Whether previous page exists\n * - hasNextPage: Whether next page exists\n * - goToPage: Function to navigate to specific page\n * - goToPreviousPage: Function to navigate to previous page\n * - goToNextPage: Function to navigate to next page\n * - setPageSize: Function to change page size\n *\n */\nexport function usePagination({\n totalItems,\n currentPage: controlledCurrentPage,\n pageSize: controlledPageSize = 20,\n onPageChange,\n onPageSizeChange,\n}: UsePaginationProps): UsePaginationReturn {\n // Internal state for uncontrolled mode\n const [internalCurrentPage, setInternalCurrentPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(controlledPageSize);\n\n // Determine if controlled or uncontrolled\n const isControlled = controlledCurrentPage !== undefined;\n const currentPage = isControlled\n ? controlledCurrentPage\n : internalCurrentPage;\n const pageSize = controlledPageSize ?? internalPageSize;\n\n // Calculate pagination values\n const totalPages = Math.max(1, Math.ceil(totalItems / pageSize));\n\n // Ensure currentPage is within valid bounds\n const validCurrentPage = Math.max(1, Math.min(currentPage, totalPages));\n\n const startItem = Math.min((validCurrentPage - 1) * pageSize + 1, totalItems);\n const endItem = Math.min(validCurrentPage * pageSize, totalItems);\n\n const hasPreviousPage = validCurrentPage > 1;\n const hasNextPage = validCurrentPage < totalPages;\n\n // Page navigation functions\n const goToPage = useCallback(\n (page: number) => {\n const newPage = Math.max(1, Math.min(page, totalPages));\n\n if (!isControlled) {\n setInternalCurrentPage(newPage);\n }\n\n onPageChange?.(newPage);\n },\n [totalPages, isControlled, onPageChange]\n );\n\n const goToPreviousPage = useCallback(() => {\n if (hasPreviousPage) {\n goToPage(validCurrentPage - 1);\n }\n }, [hasPreviousPage, validCurrentPage, goToPage]);\n\n const goToNextPage = useCallback(() => {\n if (hasNextPage) {\n goToPage(validCurrentPage + 1);\n }\n }, [hasNextPage, validCurrentPage, goToPage]);\n\n const setPageSize = useCallback(\n (newPageSize: number) => {\n const newTotalPages = Math.ceil(totalItems / newPageSize);\n const newPage = Math.min(validCurrentPage, newTotalPages);\n\n setInternalPageSize(newPageSize);\n\n if (!isControlled && newPage !== validCurrentPage) {\n setInternalCurrentPage(newPage);\n }\n\n onPageSizeChange?.(newPageSize);\n\n if (newPage !== validCurrentPage) {\n onPageChange?.(newPage);\n }\n },\n [totalItems, validCurrentPage, isControlled, onPageChange, onPageSizeChange]\n );\n\n return useMemo(\n () => ({\n totalItems,\n currentPage: validCurrentPage,\n pageSize,\n totalPages,\n startItem,\n endItem,\n hasPreviousPage,\n hasNextPage,\n goToPage,\n goToPreviousPage,\n goToNextPage,\n setPageSize,\n }),\n [\n totalItems,\n validCurrentPage,\n pageSize,\n totalPages,\n startItem,\n endItem,\n hasPreviousPage,\n hasNextPage,\n goToPage,\n goToPreviousPage,\n goToNextPage,\n setPageSize,\n ]\n );\n}\n","import { useMemo } from \"react\";\nimport { ChevronLeft, ChevronRight } from \"@commercetools/nimbus-icons\";\nimport {\n Flex,\n IconButton,\n NumberInput,\n Select,\n Stack,\n Text,\n} from \"@/components\";\nimport { usePagination } from \"./hooks/use-pagination\";\nimport type { PaginationProps } from \"./pagination.types\";\n\n/**\n * # Pagination\n *\n * A component that allows users to navigate through pages and control page size.\n * Combines a page size selector and page navigator for comprehensive pagination control.\n *\n * @see {@link https://nimbus-documentation.vercel.app/components/pagination}\n */\nexport const Pagination = (props: PaginationProps) => {\n const {\n totalItems,\n currentPage,\n pageSize,\n pageSizeOptions = [10, 20, 50, 100],\n onPageChange,\n onPageSizeChange,\n \"aria-label\": ariaLabel = \"Pagination\",\n enablePageInput = true,\n enablePageSizeSelector = true,\n } = props;\n\n const pagination = usePagination({\n totalItems,\n currentPage,\n pageSize,\n onPageChange,\n onPageSizeChange,\n });\n\n // Prepare page size options for select\n const pageSizeSelectOptions = useMemo(\n () =>\n pageSizeOptions.map((size) => ({\n id: size.toString(),\n name: `${size}`,\n })),\n [pageSizeOptions]\n );\n\n const handlePageSizeChange = (key: React.Key | null) => {\n if (key) {\n const newPageSize = parseInt(key.toString(), 10);\n pagination.setPageSize(newPageSize);\n }\n };\n\n return (\n <Stack gap=\"400\" direction={{ base: \"column\", sm: \"row\" }} align=\"center\">\n {/* Page Size Selector */}\n {enablePageSizeSelector && (\n <Flex align=\"center\" gap=\"200\">\n <Select.Root\n isClearable={false}\n selectedKey={pagination.pageSize.toString()}\n onSelectionChange={handlePageSizeChange}\n aria-label=\"Items per page\"\n >\n <Select.Options>\n {pageSizeSelectOptions.map((option) => (\n <Select.Option key={option.id} id={option.id}>\n {option.name}\n </Select.Option>\n ))}\n </Select.Options>\n </Select.Root>\n <Text color=\"neutral.12\">items per page</Text>\n </Flex>\n )}\n <Flex flexGrow=\"1\" />\n {/* Page Navigator */}\n <Flex align=\"center\" gap=\"200\" role=\"navigation\" aria-label={ariaLabel}>\n <IconButton\n onClick={pagination.goToPreviousPage}\n isDisabled={!pagination.hasPreviousPage}\n variant=\"ghost\"\n tone=\"primary\"\n aria-label=\"Go to previous page\"\n >\n <ChevronLeft />\n </IconButton>\n\n <Flex align=\"center\" gap=\"200\">\n <Text color=\"neutral.12\">Page</Text>\n {enablePageInput ? (\n <NumberInput\n value={pagination.currentPage}\n onChange={(value: number | undefined) =>\n pagination.goToPage(value || 1)\n }\n minValue={1}\n maxValue={pagination.totalPages}\n step={1}\n isDisabled={false}\n width=\"9ch\"\n aria-label=\"Current page\"\n aria-current=\"page\"\n />\n ) : (\n <Text fontWeight=\"semibold\" color=\"neutral.12\" aria-current=\"page\">\n {pagination.currentPage}\n </Text>\n )}\n <Text color=\"neutral.12\">\n of {pagination.totalPages.toLocaleString()}\n </Text>\n </Flex>\n\n <IconButton\n onClick={pagination.goToNextPage}\n isDisabled={!pagination.hasNextPage}\n variant=\"ghost\"\n tone=\"primary\"\n aria-label=\"Go to next page\"\n >\n <ChevronRight />\n </IconButton>\n </Flex>\n </Stack>\n );\n};\n\n// Manually assign a displayName for debugging purposes\nPagination.displayName = \"Pagination\";\n"],"names":["usePagination","totalItems","controlledCurrentPage","controlledPageSize","onPageChange","onPageSizeChange","internalCurrentPage","setInternalCurrentPage","useState","internalPageSize","setInternalPageSize","isControlled","currentPage","pageSize","totalPages","validCurrentPage","startItem","endItem","hasPreviousPage","hasNextPage","goToPage","useCallback","page","newPage","goToPreviousPage","goToNextPage","setPageSize","newPageSize","newTotalPages","useMemo","Pagination","props","pageSizeOptions","ariaLabel","enablePageInput","enablePageSizeSelector","pagination","pageSizeSelectOptions","size","handlePageSizeChange","key","jsxs","Stack","Flex","jsx","Select","option","Text","IconButton","ChevronLeft","NumberInput","value","ChevronRight"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const c=require("react/jsx-runtime"),l=require("react"),E=require("@chakra-ui/react/styled-system"),ne=require("@chakra-ui/react"),L=require("@commercetools/nimbus-icons"),z=require("./Button-CFZnLKVR.cjs.js"),V=require("./Dialog-XGXh4NXU.cjs.js"),M=require("./utils-BHdR5Nww.cjs.js"),se=require("./FieldError-DyGFfqST.cjs.js"),ce=require("./Form-BuOomA4T.cjs.js"),de=require("./intlStrings-ClBuC6xN.cjs.js"),_=require("./Label-BgrYyYXn.cjs.js"),j=require("./ListBox-CFvXqaPX.cjs.js"),N=require("./Text-BWSfeB9p.cjs.js"),ee=require("./CollectionBuilder-BiEelELF.cjs.js"),ue=require("./Hidden-CNJIJ63M.cjs.js"),K=require("./mergeProps-BA5Cwf5w.cjs.js"),G=require("./filterDOMProps-WUskt27c.cjs.js"),te=require("./OverlayArrow-CYjyBtg8.cjs.js"),fe=require("./context-OoV8SSWX.cjs.js"),be=require("./useLocalizedStringFormatter-sB0mFYtL.cjs.js"),le=require("./useFormValidation-STNSjSmx.cjs.js"),$e=require("./useListState-CyKtsfSM.cjs.js"),pe=require("./useControlledState-D0L6S_5r.cjs.js"),ve=require("./useFocusRing-BuJmrp03.cjs.js"),me=require("./ListKeyboardDelegate-CYRgZzU8.cjs.js"),xe=require("./SelectionManager-1rNaWE7D.cjs.js"),ye=require("./useFocusVisible-CN9NILN7.cjs.js"),ge=require("./useCollator-YVJAe1GI.cjs.js"),he=require("./useField-C_piDZ9g.cjs.js"),Se=require("./useFormReset--wPlnEOl.cjs.js"),Pe=require("./VisuallyHidden-C1WQXLCm.cjs.js"),re=require("./index-Bx9ez6gh.cjs.js"),oe=require("react-intl"),qe=require("./icon-button-CkjZc6Br.cjs.js"),w=require("./extractStyleProps-G58aSXl8.cjs.js"),Re=require("./useObjectRef-dXOJdONs.cjs.js"),T=require("@chakra-ui/react/flex"),Z=require("./box-CWni3A32.cjs.js"),Ce=require("./Header-BmzdY2bW.cjs.js");function Me(e={}){let{locale:t}=fe.$18f2051aff69b9bf$export$43bb16f9c6d9e3f7();return l.useMemo(()=>new Intl.ListFormat(t,e),[t,e])}const H=new WeakMap;function Fe(e,t,o){let{keyboardDelegate:a,isDisabled:r,isRequired:p,name:v,form:i,validationBehavior:d="aria"}=e,b=ge.$325a3faab7a68acd$export$a16aca283550c30d({usage:"search",sensitivity:"base"}),n=l.useMemo(()=>a||new me.$2a25aae57d74318e$export$a05409b8bb224a5a(t.collection,t.disabledKeys,o,b),[a,t.collection,t.disabledKeys,b,o]),{menuTriggerProps:u,menuProps:m}=V.$168583247155ddda$export$dc9c12ed27dd1b49({isDisabled:r,type:"listbox"},t,o),x=y=>{if(t.selectionManager.selectionMode!=="multiple")switch(y.key){case"ArrowLeft":{var F,D;y.preventDefault();let B=t.selectedKey!=null?(F=n.getKeyAbove)===null||F===void 0?void 0:F.call(n,t.selectedKey):(D=n.getFirstKey)===null||D===void 0?void 0:D.call(n);B&&t.setSelectedKey(B);break}case"ArrowRight":{var k,A;y.preventDefault();let B=t.selectedKey!=null?(k=n.getKeyBelow)===null||k===void 0?void 0:k.call(n,t.selectedKey):(A=n.getFirstKey)===null||A===void 0?void 0:A.call(n);B&&t.setSelectedKey(B);break}}},{typeSelectProps:f}=xe.$fb3050f43d946246$export$e32c88dfddc6e1d8({keyboardDelegate:n,selectionManager:t.selectionManager,onTypeSelect(y){t.setSelectedKey(y)}}),{isInvalid:S,validationErrors:q,validationDetails:$}=t.displayValidation,{labelProps:g,fieldProps:P,descriptionProps:s,errorMessageProps:R}=he.$2baaea4c71418dea$export$294aa081a6c6f55d({...e,labelElementType:"span",isInvalid:S,errorMessage:e.errorMessage||q});f.onKeyDown=f.onKeyDownCapture,delete f.onKeyDownCapture,t.selectionManager.selectionMode==="multiple"&&(f={});let C=G.$65484d02dcb7eb3e$export$457c3d6518dd4c6f(e,{labelable:!0}),h=K.$3ef42575df84b30b$export$9d1611c77c2fe928(f,u,P),O=K.$bdb11010cef70236$export$f680877a34711e37();return H.set(t,{isDisabled:r,isRequired:p,name:v,form:i,validationBehavior:d}),{labelProps:{...g,onClick:()=>{if(!e.isDisabled){var y;(y=o.current)===null||y===void 0||y.focus(),ye.$507fabe10e71c6fb$export$8397ddfc504fdb9a("keyboard")}}},triggerProps:K.$3ef42575df84b30b$export$9d1611c77c2fe928(C,{...h,isDisabled:r,onKeyDown:K.$ff5963eb1fccf552$export$e08e3b67e392101e(h.onKeyDown,x,e.onKeyDown),onKeyUp:e.onKeyUp,"aria-labelledby":[O,h["aria-labelledby"],h["aria-label"]&&!h["aria-labelledby"]?h.id:null].filter(Boolean).join(" "),onFocus(y){t.isFocused||(e.onFocus&&e.onFocus(y),e.onFocusChange&&e.onFocusChange(!0),t.setFocused(!0))},onBlur(y){t.isOpen||(e.onBlur&&e.onBlur(y),e.onFocusChange&&e.onFocusChange(!1),t.setFocused(!1))}}),valueProps:{id:O},menuProps:{...m,autoFocus:t.focusStrategy||!0,shouldSelectOnPressUp:!0,shouldFocusOnHover:!0,disallowEmptySelection:!0,linkBehavior:"selection",onBlur:y=>{y.currentTarget.contains(y.relatedTarget)||(e.onBlur&&e.onBlur(y),e.onFocusChange&&e.onFocusChange(!1),t.setFocused(!1))},"aria-labelledby":[P["aria-labelledby"],h["aria-label"]&&!P["aria-labelledby"]?h.id:null].filter(Boolean).join(" ")},descriptionProps:s,errorMessageProps:R,isInvalid:S,validationErrors:q,validationDetails:$,hiddenSelectProps:{isDisabled:r,name:v,label:e.label,state:t,triggerRef:o,form:i}}}function De(e,t,o){let a=H.get(t)||{},{autoComplete:r,name:p=a.name,form:v=a.form,isDisabled:i=a.isDisabled}=e,{validationBehavior:d,isRequired:b}=a,{visuallyHiddenProps:n}=Pe.$5c3e21d68f1c4674$export$a966af930f325cab({style:{position:"fixed",top:0,left:0}});Se.$99facab73266f662$export$5add1d006293d136(e.selectRef,t.defaultValue,t.setValue),le.$e93e671b31057976$export$b8473d3665f3a75a({validationBehavior:d,focus:()=>{var f;return(f=o.current)===null||f===void 0?void 0:f.focus()}},t,e.selectRef);let u=t.setValue,m=l.useCallback(f=>{f.target.multiple?u(Array.from(f.target.selectedOptions,S=>S.value)):u(f.currentTarget.value)},[u]);var x;return{containerProps:{...n,"aria-hidden":!0,"data-react-aria-prevent-focus":!0,"data-a11y-ignore":"aria-hidden-focus"},inputProps:{style:{display:"none"}},selectProps:{tabIndex:-1,autoComplete:r,disabled:i,multiple:t.selectionManager.selectionMode==="multiple",required:d==="native"&&b,name:p,form:v,value:(x=t.value)!==null&&x!==void 0?x:"",onChange:m,onInput:m}}}function Ie(e){let{state:t,triggerRef:o,label:a,name:r,form:p,isDisabled:v}=e,i=l.useRef(null),d=l.useRef(null),{containerProps:b,selectProps:n}=De({...e,selectRef:t.collection.size<=300?i:d},t,o);if(t.collection.size<=300)return l.createElement("div",{...b,"data-testid":"hidden-select-container"},l.createElement("label",null,a,l.createElement("select",{...n,ref:i},l.createElement("option",null),[...t.collection.getKeys()].map(u=>{let m=t.collection.getItem(u);if(m&&m.type==="item")return l.createElement("option",{key:m.key,value:m.key},m.textValue)}))));if(r){let u=H.get(t)||{},{validationBehavior:m}=u,x=Array.isArray(t.value)?t.value:[t.value];x.length===0&&(x=[null]);let f=x.map((S,q)=>{let $={type:"hidden",autoComplete:n.autoComplete,name:r,form:p,disabled:v,value:S??""};return m==="native"?l.createElement("input",{key:q,...$,ref:q===0?d:null,style:{display:"none"},type:"text",required:q===0?n.required:!1,onChange:()=>{}}):l.createElement("input",{key:q,...$,ref:q===0?d:null})});return l.createElement(l.Fragment,null,f)}return null}function Be(e){let{selectionMode:t="single"}=e,o=te.$fc909762b330b746$export$61c6a8c84e605fb6(e),[a,r]=l.useState(null),p=l.useMemo(()=>{var s;return e.defaultValue!==void 0?e.defaultValue:t==="single"?(s=e.defaultSelectedKey)!==null&&s!==void 0?s:null:[]},[e.defaultValue,e.defaultSelectedKey,t]),v=l.useMemo(()=>e.value!==void 0?e.value:t==="single"?e.selectedKey:void 0,[e.value,e.selectedKey,t]),[i,d]=pe.$458b0a5536c1a7cf$export$40bfa8c7b0832715(v,p,e.onChange),b=t==="single"&&Array.isArray(i)?i[0]:i,n=s=>{if(t==="single"){var R,C;let h=Array.isArray(s)?(C=s[0])!==null&&C!==void 0?C:null:s;d(h),h!==b&&((R=e.onSelectionChange)===null||R===void 0||R.call(e,h))}else{let h=[];Array.isArray(s)?h=s:s!=null&&(h=[s]),d(h)}},u=$e.$e72dd72e1c76a225$export$2f645645f7bca764({...e,selectionMode:t,disallowEmptySelection:t==="single",allowDuplicateSelectionEvents:!0,selectedKeys:l.useMemo(()=>Ke(b),[b]),onSelectionChange:s=>{if(s!=="all"){if(t==="single"){var R;let C=(R=s.values().next().value)!==null&&R!==void 0?R:null;n(C),o.close()}else n([...s]);f.commitValidation()}}}),m=u.selectionManager.firstSelectedKey,x=l.useMemo(()=>[...u.selectionManager.selectedKeys].map(s=>u.collection.getItem(s)).filter(s=>s!=null),[u.selectionManager.selectedKeys,u.collection]),f=le.$e5be200c675c3b3a$export$fc1a364ae1f3ff10({...e,value:Array.isArray(b)&&b.length===0?null:b}),[S,q]=l.useState(!1),[$]=l.useState(b);var g,P;return{...f,...u,...o,value:b,defaultValue:p??$,setValue:n,selectedKey:m,setSelectedKey:n,selectedItem:(g=x[0])!==null&&g!==void 0?g:null,selectedItems:x,defaultSelectedKey:(P=e.defaultSelectedKey)!==null&&P!==void 0?P:e.selectionMode==="single"?$:null,focusStrategy:a,open(s=null){u.collection.size!==0&&(r(s),o.open())},toggle(s=null){u.collection.size!==0&&(r(s),o.toggle())},isFocused:S,setFocused:q}}function Ke(e){if(e!==void 0)return e===null?[]:Array.isArray(e)?e:[e]}function Ve(e){return e&&e.__esModule?e.default:e}const W=l.createContext(null),U=l.createContext(null),je=l.forwardRef(function(t,o){[t,o]=M.$64fa3d84918910a7$export$29f1550f4b0d4415(t,o,W);let{children:a,isDisabled:r=!1,isInvalid:p=!1,isRequired:v=!1}=t,i=l.useMemo(()=>typeof a=="function"?a({isOpen:!1,isDisabled:r,isInvalid:p,isRequired:v,isFocused:!1,isFocusVisible:!1,defaultChildren:null}):a,[a,r,p,v]);return l.createElement(ee.$e1995378a142960e$export$bf788dd355e3a401,{content:i},d=>l.createElement(Ee,{props:t,collection:d,selectRef:o}))}),Oe=[_.$01b77f81d0f07f68$export$75b6ee27786ba447,z.$d2b4bc8c273e7be6$export$24d547caef80ccd1,N.$514c0188e459b4c0$export$9afb8bc826b033ea];function Ee({props:e,selectRef:t,collection:o}){let{validationBehavior:a}=M.$64fa3d84918910a7$export$fabf2dc03a41866e(ce.$d3e0e05bdfcf66bd$export$c24727297075ec6a)||{};var r,p;let v=(p=(r=e.validationBehavior)!==null&&r!==void 0?r:a)!==null&&p!==void 0?p:"native",i=Be({...e,collection:o,children:void 0,validationBehavior:v}),{isFocusVisible:d,focusProps:b}=ve.$f7dceffc5ad7768b$export$4e328f61c538687f({within:!0}),n=l.useRef(null),[u,m]=M.$64fa3d84918910a7$export$9d4c57ee4c6ffdd8(!e["aria-label"]&&!e["aria-labelledby"]),{labelProps:x,triggerProps:f,valueProps:S,menuProps:q,descriptionProps:$,errorMessageProps:g,hiddenSelectProps:P,...s}=Fe({...M.$64fa3d84918910a7$export$ef03459518577ad4(e),label:m,validationBehavior:v},i,n),[R,C]=l.useState(null),h=l.useCallback(()=>{n.current&&C(n.current.offsetWidth+"px")},[n]);te.$9daab02d461809db$export$683480f191c0e3ea({ref:n,onResize:h});let O=l.useMemo(()=>({isOpen:i.isOpen,isFocused:i.isFocused,isFocusVisible:d,isDisabled:e.isDisabled||!1,isInvalid:s.isInvalid||!1,isRequired:e.isRequired||!1}),[i.isOpen,i.isFocused,d,e.isDisabled,s.isInvalid,e.isRequired]),y=M.$64fa3d84918910a7$export$4d86445c2cf5e3({...e,values:O,defaultClassName:"react-aria-Select"}),F=G.$65484d02dcb7eb3e$export$457c3d6518dd4c6f(e,{global:!0});delete F.id;let D=l.useRef(null);return l.createElement(M.$64fa3d84918910a7$export$2881499e37b75b9a,{values:[[W,e],[U,i],[ie,S],[_.$01b77f81d0f07f68$export$75b6ee27786ba447,{...x,ref:u,elementType:"span"}],[z.$d2b4bc8c273e7be6$export$24d547caef80ccd1,{...f,ref:n,isPressed:i.isOpen,autoFocus:e.autoFocus}],[V.$de32f1b87079253c$export$d2f961adcb0afbe,i],[V.$07b14b47974efb58$export$9b9a0cd73afb7ca4,{trigger:"Select",triggerRef:n,scrollRef:D,placement:"bottom start",style:{"--trigger-width":R},"aria-labelledby":q["aria-labelledby"],clearContexts:Oe}],[j.$eed445e0843c11d0$export$7ff8f37d2d81a48d,{...q,ref:D}],[j.$eed445e0843c11d0$export$7c5906fe4f1f2af2,i],[N.$514c0188e459b4c0$export$9afb8bc826b033ea,{slots:{description:$,errorMessage:g}}],[se.$ee014567cb39d3f0$export$ff05c3ac10437e03,s]]},l.createElement("div",{...K.$3ef42575df84b30b$export$9d1611c77c2fe928(F,y,b),ref:t,slot:e.slot||void 0,"data-focused":i.isFocused||void 0,"data-focus-visible":d||void 0,"data-open":i.isOpen||void 0,"data-disabled":e.isDisabled||void 0,"data-invalid":s.isInvalid||void 0,"data-required":e.isRequired||void 0},y.children,l.createElement(Ie,{...P,autoComplete:e.autoComplete})))}const ie=l.createContext(null),we=ue.$f39a9eba43920ace$export$86427a43e3e48ebb(function(t,o){var a;[t,o]=M.$64fa3d84918910a7$export$29f1550f4b0d4415(t,o,ie);let r=l.useContext(U),{placeholder:p}=M.$64fa3d84918910a7$export$fabf2dc03a41866e(W),v=r.selectedItems.map($=>{var g;let P=(g=$.props)===null||g===void 0?void 0:g.children;return typeof P=="function"&&(P=P({isHovered:!1,isPressed:!1,isSelected:!1,isFocused:!1,isFocusVisible:!1,isDisabled:!1,selectionMode:"single",selectionBehavior:"toggle"})),P}),i=Me(),d=l.useMemo(()=>r.selectedItems.map($=>$?.textValue),[r.selectedItems]),b=r.selectionManager.selectionMode,n=l.useMemo(()=>{var $;return b==="single"?($=d[0])!==null&&$!==void 0?$:"":i.format(d)},[b,i,d]),u=l.useMemo(()=>{if(b==="single")return v[0];let $=i.formatToParts(d);if($.length===0)return null;let g=0;return $.map(P=>P.type==="element"?l.createElement(l.Fragment,{key:g},v[g++]):P.value)},[b,i,d,v]),m=be.$fca6afa0e843324b$export$f12b703ca79dfbb1(Ve(de.$df39c1238ae2b5f3$exports),"react-aria-components");var x,f;let S=M.$64fa3d84918910a7$export$4d86445c2cf5e3({...t,defaultChildren:(x=u??p)!==null&&x!==void 0?x:m.format("selectPlaceholder"),defaultClassName:"react-aria-SelectValue",values:{selectedItem:(f=(a=r.selectedItems[0])===null||a===void 0?void 0:a.value)!==null&&f!==void 0?f:null,selectedItems:l.useMemo(()=>r.selectedItems.map($=>{var g;return(g=$.value)!==null&&g!==void 0?g:null}),[r.selectedItems]),selectedText:n,isPlaceholder:r.selectedItems.length===0,state:r}}),q=G.$65484d02dcb7eb3e$export$457c3d6518dd4c6f(t,{global:!0});return l.createElement("span",{ref:o,...q,...S,"data-placeholder":r.selectedItems.length===0||void 0},l.createElement(N.$514c0188e459b4c0$export$9afb8bc826b033ea.Provider,{value:void 0},S.children))}),{withProvider:ke,withContext:I}=E.createSlotRecipeContext({recipe:re.selectSlotRecipe}),Ae=ke("div","root"),Te=I("div","leadingElement"),Le=I("button","trigger"),ze=I("span","triggerLabel"),Ne=I("div","options"),Ge=I("div","option"),He=I("div","optionGroup"),We=oe.defineMessages({clearSelection:{id:"Nimbus.Select.clearSelection",description:"aria-label for select clear button",defaultMessage:"Clear selection"}}),ae=()=>{const e=l.useContext(U),t=oe.useIntl();if(!e?.selectedKey)return null;const o=()=>{e?.setSelectedKey(null)};return c.jsx(V.$f1ab8c75478c6f73$export$cf75428e0b9ed1ea,{children:c.jsx(qe.IconButton,{pointerEvents:"all",size:"2xs",variant:"ghost","aria-label":t.formatMessage(We.clearSelection),"aria-labelledby":"",onPress:o,slot:null,children:c.jsx(L.Close,{})})})};ae.displayName="Select.ClearButton";const X=function({ref:t,children:o,leadingElement:a,isLoading:r,isDisabled:p,isClearable:v=!0,...i}){const d=l.useRef(null),b=Re.$df56164dff5785e2$export$4338b53315abf666(ne.mergeRefs(d,t)),n=E.useSlotRecipe({recipe:re.selectSlotRecipe}),[u,m]=n.splitVariantProps(i),[x,f]=w.extractStyleProps(m),S={...f,isDisabled:r||p};return c.jsx(Ae,{asChild:!0,ref:b,...u,...x,children:c.jsxs(je,{...S,children:[c.jsxs(E.chakra.div,{position:"relative",children:[c.jsx(Le,{zIndex:0,asChild:!0,children:c.jsxs(z.$d2b4bc8c273e7be6$export$353f5b6fc5456de1,{children:[a&&c.jsx(Te,{asChild:!0,children:a}),c.jsx(ze,{asChild:!0,children:c.jsx(we,{})})]})}),c.jsxs(T.Flex,{position:"absolute",top:"0",bottom:"0",zIndex:1,right:"400",pointerEvents:"none",children:[v&&c.jsx(T.Flex,{width:"600",my:"auto",children:c.jsx(ae,{})}),c.jsx(T.Flex,{my:"auto",w:"600",h:"600",children:c.jsx(Z.Box,{color:"neutral.9",asChild:!0,m:"auto",w:"400",h:"400",children:r?c.jsx(Z.Box,{asChild:!0,animation:"spin",animationDuration:"slowest",children:c.jsx(L.Loop,{})}):c.jsx(L.KeyboardArrowDown,{})})})]})]}),c.jsx(V.$07b14b47974efb58$export$5b6b19405a83ff9d,{children:o})]})})};X.displayName="Select.Root";const J=e=>{const{ref:t,...o}=e,[a,r]=w.extractStyleProps(o);return c.jsx(Ne,{asChild:!0,...a,children:c.jsx(j.$eed445e0843c11d0$export$41f133550aa26f48,{ref:t,...r})})};J.displayName="Select.Options";const Q=e=>{const{ref:t,...o}=e,[a,r]=w.extractStyleProps(o);return c.jsx(Ge,{asChild:!0,...a,children:c.jsx(j.$eed445e0843c11d0$export$a11e76429ed99b4,{ref:t,...r})})};Q.displayName="Select.Option";const Y=e=>{const{ref:t,label:o,items:a,children:r,...p}=e,[v,i]=w.extractStyleProps(p);if(a&&typeof r!="function")throw new Error('SelectOptionGroup: When "items" is provided, "children" must be a function');return c.jsx(E.chakra.section,{...v,asChild:!0,children:c.jsxs(j.$eed445e0843c11d0$export$dca12b0bb56e4fc,{ref:t,...i,children:[c.jsx(He,{asChild:!0,children:c.jsx(Ce.$72a5793c14baf454$export$8b251419efc915eb,{children:o})}),a?c.jsx(ee.$e1995378a142960e$export$fb8073518f34e6ec,{items:a,children:d=>typeof r=="function"?r(d):null}):r]})})};Y.displayName="Select.OptionGroup";const Ue={Root:X,Options:J,Option:Q,OptionGroup:Y};exports.Select=Ue;exports.SelectOption=Q;exports.SelectOptionGroup=Y;exports.SelectOptions=J;exports.SelectRoot=X;
2
+ //# sourceMappingURL=select-97-5UUPX.cjs.js.map