@clickhouse/click-ui 0.10.0 → 0.11.0

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 (75) hide show
  1. package/dist/cjs/click-ui.css +67 -10
  2. package/dist/cjs/components/CodeBlock/CodeBlock.css +35 -2
  3. package/dist/cjs/components/CodeBlock/index.cjs +27 -22
  4. package/dist/cjs/components/CodeBlock/index.cjs.map +1 -1
  5. package/dist/cjs/components/DateDetails/index.cjs +8 -5
  6. package/dist/cjs/components/DateDetails/index.cjs.map +1 -1
  7. package/dist/cjs/components/Dropdown/index.cjs +4 -1
  8. package/dist/cjs/components/Dropdown/index.cjs.map +1 -1
  9. package/dist/cjs/components/EllipsisContent/index.cjs +3 -2
  10. package/dist/cjs/components/EllipsisContent/index.cjs.map +1 -1
  11. package/dist/cjs/components/IconButton/IconButton.css +5 -0
  12. package/dist/cjs/components/IconButton/index.cjs +12 -2
  13. package/dist/cjs/components/IconButton/index.cjs.map +1 -1
  14. package/dist/cjs/components/IconWrapper/index.cjs +6 -5
  15. package/dist/cjs/components/IconWrapper/index.cjs.map +1 -1
  16. package/dist/cjs/components/Link/Link.css +0 -1
  17. package/dist/cjs/components/Link/index.cjs.map +1 -1
  18. package/dist/cjs/components/Pagination/index.cjs +3 -3
  19. package/dist/cjs/components/Pagination/index.cjs.map +1 -1
  20. package/dist/cjs/components/Popover/Popover.css +7 -6
  21. package/dist/cjs/components/Popover/index.cjs +12 -10
  22. package/dist/cjs/components/Popover/index.cjs.map +1 -1
  23. package/dist/cjs/components/ProgressBar/index.cjs +6 -3
  24. package/dist/cjs/components/ProgressBar/index.cjs.map +1 -1
  25. package/dist/cjs/components/Text/Text.css +20 -0
  26. package/dist/cjs/components/Text/Text.module.css.cjs +8 -0
  27. package/dist/cjs/components/Text/Text.module.css.cjs.map +1 -1
  28. package/dist/cjs/components/Text/index.cjs +11 -1
  29. package/dist/cjs/components/Text/index.cjs.map +1 -1
  30. package/dist/cjs/components/Toast/index.cjs +7 -1
  31. package/dist/cjs/components/Toast/index.cjs.map +1 -1
  32. package/dist/esm/click-ui.css +67 -10
  33. package/dist/esm/components/CodeBlock/CodeBlock.css +35 -2
  34. package/dist/esm/components/CodeBlock/index.js +27 -22
  35. package/dist/esm/components/CodeBlock/index.js.map +1 -1
  36. package/dist/esm/components/DateDetails/index.js +8 -5
  37. package/dist/esm/components/DateDetails/index.js.map +1 -1
  38. package/dist/esm/components/Dropdown/index.js +4 -1
  39. package/dist/esm/components/Dropdown/index.js.map +1 -1
  40. package/dist/esm/components/EllipsisContent/index.js +3 -2
  41. package/dist/esm/components/EllipsisContent/index.js.map +1 -1
  42. package/dist/esm/components/IconButton/IconButton.css +5 -0
  43. package/dist/esm/components/IconButton/index.js +12 -2
  44. package/dist/esm/components/IconButton/index.js.map +1 -1
  45. package/dist/esm/components/IconWrapper/index.js +6 -5
  46. package/dist/esm/components/IconWrapper/index.js.map +1 -1
  47. package/dist/esm/components/Link/Link.css +0 -1
  48. package/dist/esm/components/Link/index.js.map +1 -1
  49. package/dist/esm/components/Pagination/index.js +3 -3
  50. package/dist/esm/components/Pagination/index.js.map +1 -1
  51. package/dist/esm/components/Popover/Popover.css +7 -6
  52. package/dist/esm/components/Popover/index.js +12 -10
  53. package/dist/esm/components/Popover/index.js.map +1 -1
  54. package/dist/esm/components/ProgressBar/index.js +6 -3
  55. package/dist/esm/components/ProgressBar/index.js.map +1 -1
  56. package/dist/esm/components/Text/Text.css +20 -0
  57. package/dist/esm/components/Text/Text.module.css.js +7 -1
  58. package/dist/esm/components/Text/Text.module.css.js.map +1 -1
  59. package/dist/esm/components/Text/index.js +11 -1
  60. package/dist/esm/components/Text/index.js.map +1 -1
  61. package/dist/esm/components/Toast/index.js +7 -1
  62. package/dist/esm/components/Toast/index.js.map +1 -1
  63. package/dist/types/components/CodeBlock/CodeBlock.d.ts +1 -1
  64. package/dist/types/components/CodeBlock/CodeBlock.types.d.ts +8 -0
  65. package/dist/types/components/Dropdown/Dropdown.d.ts +13 -16
  66. package/dist/types/components/Dropdown/Dropdown.types.d.ts +10 -0
  67. package/dist/types/components/EllipsisContent/EllipsisContent.d.ts +1 -3
  68. package/dist/types/components/EllipsisContent/EllipsisContent.types.d.ts +6 -0
  69. package/dist/types/components/IconWrapper/IconWrapper.d.ts +1 -1
  70. package/dist/types/components/IconWrapper/IconWrapper.types.d.ts +3 -0
  71. package/dist/types/components/ProgressBar/ProgressBar.d.ts +1 -1
  72. package/dist/types/components/Text/Text.d.ts +3 -0
  73. package/dist/types/components/Tooltip/index.d.ts +1 -1
  74. package/dist/types/index.d.ts +3 -1
  75. package/package.json +17 -19
@@ -1,7 +1,6 @@
1
1
  @layer clickui {.link__Ly-e3 {
2
2
  display: inline-flex;
3
3
  margin: 0;
4
- margin-right: var(--link-gap);
5
4
  align-items: center;
6
5
  gap: var(--link-gap);
7
6
  color: var(--click-global-color-text-link-default);
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/Link/Link.tsx"],"sourcesContent":["import {\n ComponentProps,\n ComponentPropsWithRef,\n ElementType,\n ReactEventHandler,\n ReactNode,\n forwardRef,\n} from 'react';\nimport { Icon } from '@/components/Icon';\nimport type { IconName } from '@/components/Icon/Icon.types';\nimport { cn, cva } from '@/lib/cva';\nimport styles from './Link.module.css';\nimport type { TextSize, TextWeight } from '@/components/Text';\n\nexport interface LinkProps<T extends ElementType = 'a'> {\n /** The font size of the link text */\n size?: TextSize;\n /** The font weight of the link text */\n weight?: TextWeight;\n /** Click event handler */\n onClick?: ReactEventHandler;\n /** The content to display inside the link */\n children?: React.ReactNode;\n /** Optional icon to display after the link text */\n icon?: IconName;\n /** Custom component to render as the link element */\n component?: T;\n}\n\nconst linkVariants = cva(styles.link, {\n variants: {\n size: {\n xs: styles['link_size_xs'],\n sm: styles['link_size_sm'],\n md: styles['link_size_md'],\n lg: styles['link_size_lg'],\n },\n weight: {\n normal: styles['link_weight_normal'],\n medium: styles['link_weight_medium'],\n semibold: styles['link_weight_semibold'],\n bold: styles['link_weight_bold'],\n mono: styles['link_weight_mono'],\n },\n },\n defaultVariants: {\n size: 'md',\n weight: 'normal',\n },\n});\n\nconst iconVariants = cva(styles['link__icon'], {\n variants: {\n size: {\n xs: styles['link__icon_size_xs'],\n sm: styles['link__icon_size_sm'],\n md: styles['link__icon_size_md'],\n lg: styles['link__icon_size_lg'],\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\ntype LinkPolymorphicComponent = <T extends ElementType = 'a'>(\n props: Omit<ComponentProps<T>, keyof LinkProps<T>> & LinkProps<T>\n) => ReactNode;\n\n/** Component for linking to other pages or sections from with body text */\nconst _Link = <T extends ElementType = 'a'>(\n {\n size = 'md',\n weight = 'normal',\n onClick,\n icon,\n children,\n component,\n className,\n ...props\n }: Omit<ComponentProps<T>, keyof LinkProps<T>> & LinkProps<T> & { className?: string },\n ref: ComponentPropsWithRef<T>['ref']\n) => {\n const Component = component ?? 'a';\n return (\n <Component\n ref={ref}\n onClick={onClick}\n {...props}\n className={cn(linkVariants({ size, weight }), className)}\n >\n {children}\n {icon && (\n <span>\n <Icon\n name={icon}\n className={cn(iconVariants({ size }))}\n data-testid={icon}\n />\n </span>\n )}\n </Component>\n );\n};\nexport const Link: LinkPolymorphicComponent = forwardRef(_Link);\n"],"names":["cva","styles","jsxs","cn","jsx","Icon","forwardRef"],"mappings":";;;;;;;;;;;AA6BA,MAAM,YAAA,GAAeA,0BAAA,CAAIC,mBAAA,CAAO,IAAA,EAAM;AAAA,EACpC,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAIA,oBAAO,cAAc,CAAA;AAAA,MACzB,EAAA,EAAIA,oBAAO,cAAc,CAAA;AAAA,MACzB,EAAA,EAAIA,oBAAO,cAAc,CAAA;AAAA,MACzB,EAAA,EAAIA,oBAAO,cAAc;AAAA,KAC3B;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQA,oBAAO,oBAAoB,CAAA;AAAA,MACnC,MAAA,EAAQA,oBAAO,oBAAoB,CAAA;AAAA,MACnC,QAAA,EAAUA,oBAAO,sBAAsB,CAAA;AAAA,MACvC,IAAA,EAAMA,oBAAO,kBAAkB,CAAA;AAAA,MAC/B,IAAA,EAAMA,oBAAO,kBAAkB;AAAA;AACjC,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAQ;AAAA;AAEZ,CAAC,CAAA;AAED,MAAM,YAAA,GAAeD,0BAAA,CAAIC,mBAAA,CAAO,YAAY,CAAA,EAAG;AAAA,EAC7C,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAIA,oBAAO,oBAAoB,CAAA;AAAA,MAC/B,EAAA,EAAIA,oBAAO,oBAAoB,CAAA;AAAA,MAC/B,EAAA,EAAIA,oBAAO,oBAAoB,CAAA;AAAA,MAC/B,EAAA,EAAIA,oBAAO,oBAAoB;AAAA;AACjC,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;AAOD,MAAM,QAAQ,CACZ;AAAA,EACE,IAAA,GAAO,IAAA;AAAA,EACP,MAAA,GAAS,QAAA;AAAA,EACT,OAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,KACG;AACH,EAAA,MAAM,YAAY,SAAA,IAAa,GAAA;AAC/B,EAAA,uBACEC,eAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,OAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,SAAA,EAAWC,OAAG,YAAA,CAAa,EAAE,MAAM,MAAA,EAAQ,GAAG,SAAS,CAAA;AAAA,MAEtD,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,IAAA,mCACE,MAAA,EAAA,EACC,QAAA,kBAAAC,cAAA;AAAA,UAACC,SAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,IAAA;AAAA,YACN,WAAWF,MAAA,CAAG,YAAA,CAAa,EAAE,IAAA,EAAM,CAAC,CAAA;AAAA,YACpC,aAAA,EAAa;AAAA;AAAA,SACf,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AACO,MAAM,IAAA,GAAiCG,iBAAW,KAAK;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/components/Link/Link.tsx"],"sourcesContent":["import {\n ComponentProps,\n ComponentPropsWithRef,\n ElementType,\n ReactEventHandler,\n ReactNode,\n forwardRef,\n} from 'react';\nimport { Icon } from '@/components/Icon';\nimport { cn, cva } from '@/lib/cva';\n\nimport type { IconName } from '@/components/Icon/Icon.types';\nimport type { TextSize, TextWeight } from '@/components/Text';\n\nimport styles from './Link.module.css';\n\nexport interface LinkProps<T extends ElementType = 'a'> {\n /** The font size of the link text */\n size?: TextSize;\n /** The font weight of the link text */\n weight?: TextWeight;\n /** Click event handler */\n onClick?: ReactEventHandler;\n /** The content to display inside the link */\n children?: React.ReactNode;\n /** Optional icon to display after the link text */\n icon?: IconName;\n /** Custom component to render as the link element */\n component?: T;\n}\n\nconst linkVariants = cva(styles.link, {\n variants: {\n size: {\n xs: styles['link_size_xs'],\n sm: styles['link_size_sm'],\n md: styles['link_size_md'],\n lg: styles['link_size_lg'],\n },\n weight: {\n normal: styles['link_weight_normal'],\n medium: styles['link_weight_medium'],\n semibold: styles['link_weight_semibold'],\n bold: styles['link_weight_bold'],\n mono: styles['link_weight_mono'],\n },\n },\n defaultVariants: {\n size: 'md',\n weight: 'normal',\n },\n});\n\nconst iconVariants = cva(styles['link__icon'], {\n variants: {\n size: {\n xs: styles['link__icon_size_xs'],\n sm: styles['link__icon_size_sm'],\n md: styles['link__icon_size_md'],\n lg: styles['link__icon_size_lg'],\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\ntype LinkPolymorphicComponent = <T extends ElementType = 'a'>(\n props: Omit<ComponentProps<T>, keyof LinkProps<T>> & LinkProps<T>\n) => ReactNode;\n\n/** Component for linking to other pages or sections from with body text */\nconst _Link = <T extends ElementType = 'a'>(\n {\n size = 'md',\n weight = 'normal',\n onClick,\n icon,\n children,\n component,\n className,\n ...props\n }: Omit<ComponentProps<T>, keyof LinkProps<T>> & LinkProps<T> & { className?: string },\n ref: ComponentPropsWithRef<T>['ref']\n) => {\n const Component = component ?? 'a';\n return (\n <Component\n ref={ref}\n onClick={onClick}\n {...props}\n className={cn(linkVariants({ size, weight }), className)}\n >\n {children}\n {icon && (\n <span>\n <Icon\n name={icon}\n className={cn(iconVariants({ size }))}\n data-testid={icon}\n />\n </span>\n )}\n </Component>\n );\n};\nexport const Link: LinkPolymorphicComponent = forwardRef(_Link);\n"],"names":["cva","styles","jsxs","cn","jsx","Icon","forwardRef"],"mappings":";;;;;;;;;;;AA+BA,MAAM,YAAA,GAAeA,0BAAA,CAAIC,mBAAA,CAAO,IAAA,EAAM;AAAA,EACpC,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAIA,oBAAO,cAAc,CAAA;AAAA,MACzB,EAAA,EAAIA,oBAAO,cAAc,CAAA;AAAA,MACzB,EAAA,EAAIA,oBAAO,cAAc,CAAA;AAAA,MACzB,EAAA,EAAIA,oBAAO,cAAc;AAAA,KAC3B;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQA,oBAAO,oBAAoB,CAAA;AAAA,MACnC,MAAA,EAAQA,oBAAO,oBAAoB,CAAA;AAAA,MACnC,QAAA,EAAUA,oBAAO,sBAAsB,CAAA;AAAA,MACvC,IAAA,EAAMA,oBAAO,kBAAkB,CAAA;AAAA,MAC/B,IAAA,EAAMA,oBAAO,kBAAkB;AAAA;AACjC,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAQ;AAAA;AAEZ,CAAC,CAAA;AAED,MAAM,YAAA,GAAeD,0BAAA,CAAIC,mBAAA,CAAO,YAAY,CAAA,EAAG;AAAA,EAC7C,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,EAAA,EAAIA,oBAAO,oBAAoB,CAAA;AAAA,MAC/B,EAAA,EAAIA,oBAAO,oBAAoB,CAAA;AAAA,MAC/B,EAAA,EAAIA,oBAAO,oBAAoB,CAAA;AAAA,MAC/B,EAAA,EAAIA,oBAAO,oBAAoB;AAAA;AACjC,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;AAOD,MAAM,QAAQ,CACZ;AAAA,EACE,IAAA,GAAO,IAAA;AAAA,EACP,MAAA,GAAS,QAAA;AAAA,EACT,OAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,KACG;AACH,EAAA,MAAM,YAAY,SAAA,IAAa,GAAA;AAC/B,EAAA,uBACEC,eAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,OAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,SAAA,EAAWC,OAAG,YAAA,CAAa,EAAE,MAAM,MAAA,EAAQ,GAAG,SAAS,CAAA;AAAA,MAEtD,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,IAAA,mCACE,MAAA,EAAA,EACC,QAAA,kBAAAC,cAAA;AAAA,UAACC,SAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAM,IAAA;AAAA,YACN,WAAWF,MAAA,CAAG,YAAA,CAAa,EAAE,IAAA,EAAM,CAAC,CAAA;AAAA,YACpC,aAAA,EAAa;AAAA;AAAA,SACf,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AACO,MAAM,IAAA,GAAiCG,iBAAW,KAAK;;;;"}
@@ -39,11 +39,11 @@ const Pagination = ({
39
39
  const leftButtonDisabled = currentPage <= 1;
40
40
  const rightButtonDisabled = !!totalPages && currentPage === totalPages || disableNextButton;
41
41
  const onChange = (value) => {
42
- const sanitizedValue = parseInt(value, 10);
43
- if (sanitizedValue < 1 || inputRef.current?.disabled || (typeof totalPages !== "undefined" ? sanitizedValue > totalPages : false)) {
42
+ const pageNumber = parseInt(value, 10);
43
+ if (Number.isNaN(pageNumber) || pageNumber < 1 || inputRef.current?.disabled || (typeof totalPages !== "undefined" ? pageNumber > totalPages : false)) {
44
44
  return;
45
45
  }
46
- onChangeProp(sanitizedValue);
46
+ onChangeProp(pageNumber);
47
47
  };
48
48
  const onPageSizeChange = (value) => {
49
49
  if (typeof onPageSizeChangeProp === "function") {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/Pagination/Pagination.tsx"],"sourcesContent":["import {\n FocusEventHandler,\n MouseEventHandler,\n ReactElement,\n useCallback,\n useRef,\n} from 'react';\nimport { Container, type ContainerProps } from '@/components/Container';\nimport { IconButton } from '@/components/IconButton';\nimport { NumberField } from '@/components/NumberField';\nimport { Select } from '@/components/Select';\nimport { Text } from '@/components/Text';\nimport styles from './Pagination.module.css';\n\nexport interface PaginationProps extends Omit<\n ContainerProps<'div'>,\n 'children' | 'onChange'\n> {\n /** Total number of pages available */\n totalPages?: number;\n /** The currently selected page number */\n currentPage: number;\n /** List of options for rows per page dropdown */\n maxRowsPerPageList?: number[];\n /** Total row count to display */\n rowCount?: number | string;\n /** Callback when page number changes */\n onChange: (pageNumber: number) => void;\n /** Callback when page size changes */\n onPageSizeChange?: (pageNumber: number) => void;\n /** Current page size/rows per page */\n pageSize?: number;\n /** Callback when next page button is clicked */\n onNextPageClick?: MouseEventHandler<HTMLButtonElement>;\n /** Callback when previous page button is clicked */\n onPrevPageClick?: MouseEventHandler<HTMLButtonElement>;\n /** Callback when page number input receives focus */\n onPageNumberFocus?: FocusEventHandler<HTMLInputElement>;\n /** Callback when page number input loses focus */\n onPageNumberBlur?: FocusEventHandler<HTMLInputElement>;\n /** Whether to disable the next page button */\n disableNextButton?: boolean;\n /** Whether to show \"All rows\" option in the dropdown */\n allowAllRows?: boolean;\n}\n\nexport const Pagination = ({\n totalPages,\n currentPage,\n maxRowsPerPageList = [],\n rowCount,\n onChange: onChangeProp,\n onPageSizeChange: onPageSizeChangeProp,\n pageSize = -1,\n fillWidth = true,\n gap = 'md',\n justifyContent,\n onNextPageClick,\n onPrevPageClick,\n onPageNumberFocus,\n onPageNumberBlur,\n disableNextButton,\n allowAllRows = true,\n ...props\n}: PaginationProps): ReactElement => {\n const hasRowCount = ['number', 'string'].includes(typeof rowCount);\n const inputRef = useRef<HTMLInputElement>(null);\n const formatNumber = (value: number) => {\n return new Intl.NumberFormat('en').format(value);\n };\n const leftButtonDisabled = currentPage <= 1;\n const rightButtonDisabled =\n (!!totalPages && currentPage === totalPages) || disableNextButton;\n\n const onChange = (value: string) => {\n const sanitizedValue = parseInt(value, 10);\n if (\n sanitizedValue < 1 ||\n inputRef.current?.disabled ||\n (typeof totalPages !== 'undefined' ? sanitizedValue > totalPages : false)\n ) {\n return;\n }\n\n onChangeProp(sanitizedValue);\n };\n\n const onPageSizeChange = (value: string) => {\n if (typeof onPageSizeChangeProp === 'function') {\n onPageSizeChangeProp(Number(value));\n }\n };\n\n const onPrevClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n e => {\n if (leftButtonDisabled) {\n return;\n }\n\n onChangeProp(currentPage - 1);\n if (typeof onPrevPageClick === 'function') {\n onPrevPageClick(e);\n }\n },\n [currentPage, leftButtonDisabled, onChangeProp, onPrevPageClick]\n );\n\n const onNextClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n e => {\n if (rightButtonDisabled) {\n return;\n }\n\n onChangeProp(currentPage + 1);\n if (typeof onNextPageClick === 'function') {\n onNextPageClick(e);\n }\n },\n [currentPage, onChangeProp, onNextPageClick, rightButtonDisabled]\n );\n\n // if `allowAllRows` is false we need to switch to the first option in the list\n if (pageSize === -1 && !allowAllRows && maxRowsPerPageList.length > 0) {\n pageSize = maxRowsPerPageList[0];\n }\n\n return (\n <Container\n gap={gap}\n justifyContent={\n justifyContent ??\n (rowCount || maxRowsPerPageList.length > 0 ? 'space-between' : 'center')\n }\n fillWidth={fillWidth}\n {...props}\n >\n {hasRowCount && (\n <Text\n component=\"div\"\n color=\"muted\"\n size=\"sm\"\n >\n {typeof rowCount === 'number' ? formatNumber(rowCount) : rowCount} rows\n </Text>\n )}\n <Container\n gap=\"xxs\"\n fillWidth={false}\n >\n <IconButton\n icon=\"chevron-left\"\n type=\"ghost\"\n disabled={leftButtonDisabled}\n onClick={onPrevClick}\n data-testid=\"prev-btn\"\n />\n <Container\n maxWidth=\"50px\"\n fillWidth={false}\n >\n <NumberField\n ref={inputRef}\n onChange={onChange}\n value={currentPage}\n loading={false}\n aria-label={currentPage.toString()}\n min={1}\n max={totalPages}\n onFocus={onPageNumberFocus}\n hideControls\n onBlur={onPageNumberBlur}\n disabled={leftButtonDisabled && rightButtonDisabled}\n />\n </Container>\n {!!totalPages && (\n <Text\n component=\"div\"\n color=\"muted\"\n size=\"sm\"\n >\n of {formatNumber(totalPages)}\n </Text>\n )}\n <IconButton\n icon=\"chevron-right\"\n type=\"ghost\"\n disabled={rightButtonDisabled}\n onClick={onNextClick}\n data-testid=\"next-btn\"\n />\n </Container>\n {maxRowsPerPageList.length > 0 && (\n <Select\n className={styles['custom-select']}\n onSelect={onPageSizeChange}\n value={pageSize.toString()}\n >\n {allowAllRows && <Select.Item value=\"-1\">All rows</Select.Item>}\n {maxRowsPerPageList.map(option => (\n <Select.Item\n key={option}\n value={option.toString()}\n >\n {option} rows\n </Select.Item>\n ))}\n </Select>\n )}\n </Container>\n );\n};\n"],"names":["useRef","useCallback","jsxs","Container","Text","jsx","IconButton","NumberField","Select","styles"],"mappings":";;;;;;;;;;;;;AA8CO,MAAM,aAAa,CAAC;AAAA,EACzB,UAAA;AAAA,EACA,WAAA;AAAA,EACA,qBAAqB,EAAC;AAAA,EACtB,QAAA;AAAA,EACA,QAAA,EAAU,YAAA;AAAA,EACV,gBAAA,EAAkB,oBAAA;AAAA,EAClB,QAAA,GAAW,EAAA;AAAA,EACX,SAAA,GAAY,IAAA;AAAA,EACZ,GAAA,GAAM,IAAA;AAAA,EACN,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA,GAAe,IAAA;AAAA,EACf,GAAG;AACL,CAAA,KAAqC;AACnC,EAAA,MAAM,cAAc,CAAC,QAAA,EAAU,QAAQ,CAAA,CAAE,QAAA,CAAS,OAAO,QAAQ,CAAA;AACjE,EAAA,MAAM,QAAA,GAAWA,aAAyB,IAAI,CAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAkB;AACtC,IAAA,OAAO,IAAI,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,EACjD,CAAA;AACA,EAAA,MAAM,qBAAqB,WAAA,IAAe,CAAA;AAC1C,EAAA,MAAM,mBAAA,GACH,CAAC,CAAC,UAAA,IAAc,gBAAgB,UAAA,IAAe,iBAAA;AAElD,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAAkB;AAClC,IAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,KAAA,EAAO,EAAE,CAAA;AACzC,IAAA,IACE,cAAA,GAAiB,CAAA,IACjB,QAAA,CAAS,OAAA,EAAS,QAAA,KACjB,OAAO,UAAA,KAAe,WAAA,GAAc,cAAA,GAAiB,UAAA,GAAa,KAAA,CAAA,EACnE;AACA,MAAA;AAAA,IACF;AAEA,IAAA,YAAA,CAAa,cAAc,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAAkB;AAC1C,IAAA,IAAI,OAAO,yBAAyB,UAAA,EAAY;AAC9C,MAAA,oBAAA,CAAqB,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACpC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAoDC,iBAAA;AAAA,IACxD,CAAA,CAAA,KAAK;AACH,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA;AAAA,MACF;AAEA,MAAA,YAAA,CAAa,cAAc,CAAC,CAAA;AAC5B,MAAA,IAAI,OAAO,oBAAoB,UAAA,EAAY;AACzC,QAAA,eAAA,CAAgB,CAAC,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,WAAA,EAAa,kBAAA,EAAoB,YAAA,EAAc,eAAe;AAAA,GACjE;AAEA,EAAA,MAAM,WAAA,GAAoDA,iBAAA;AAAA,IACxD,CAAA,CAAA,KAAK;AACH,MAAA,IAAI,mBAAA,EAAqB;AACvB,QAAA;AAAA,MACF;AAEA,MAAA,YAAA,CAAa,cAAc,CAAC,CAAA;AAC5B,MAAA,IAAI,OAAO,oBAAoB,UAAA,EAAY;AACzC,QAAA,eAAA,CAAgB,CAAC,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,WAAA,EAAa,YAAA,EAAc,eAAA,EAAiB,mBAAmB;AAAA,GAClE;AAGA,EAAA,IAAI,aAAa,EAAA,IAAM,CAAC,YAAA,IAAgB,kBAAA,CAAmB,SAAS,CAAA,EAAG;AACrE,IAAA,QAAA,GAAW,mBAAmB,CAAC,CAAA;AAAA,EACjC;AAEA,EAAA,uBACEC,eAAA;AAAA,IAACC,mBAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,gBACE,cAAA,KACC,QAAA,IAAY,kBAAA,CAAmB,MAAA,GAAS,IAAI,eAAA,GAAkB,QAAA,CAAA;AAAA,MAEjE,SAAA;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,WAAA,oBACCD,eAAA;AAAA,UAACE,SAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,KAAA;AAAA,YACV,KAAA,EAAM,OAAA;AAAA,YACN,IAAA,EAAK,IAAA;AAAA,YAEJ,QAAA,EAAA;AAAA,cAAA,OAAO,QAAA,KAAa,QAAA,GAAW,YAAA,CAAa,QAAQ,CAAA,GAAI,QAAA;AAAA,cAAS;AAAA;AAAA;AAAA,SACpE;AAAA,wBAEFF,eAAA;AAAA,UAACC,mBAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAI,KAAA;AAAA,YACJ,SAAA,EAAW,KAAA;AAAA,YAEX,QAAA,EAAA;AAAA,8BAAAE,cAAA;AAAA,gBAACC,qBAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,cAAA;AAAA,kBACL,IAAA,EAAK,OAAA;AAAA,kBACL,QAAA,EAAU,kBAAA;AAAA,kBACV,OAAA,EAAS,WAAA;AAAA,kBACT,aAAA,EAAY;AAAA;AAAA,eACd;AAAA,8BACAD,cAAA;AAAA,gBAACF,mBAAA;AAAA,gBAAA;AAAA,kBACC,QAAA,EAAS,MAAA;AAAA,kBACT,SAAA,EAAW,KAAA;AAAA,kBAEX,QAAA,kBAAAE,cAAA;AAAA,oBAACE,uBAAA;AAAA,oBAAA;AAAA,sBACC,GAAA,EAAK,QAAA;AAAA,sBACL,QAAA;AAAA,sBACA,KAAA,EAAO,WAAA;AAAA,sBACP,OAAA,EAAS,KAAA;AAAA,sBACT,YAAA,EAAY,YAAY,QAAA,EAAS;AAAA,sBACjC,GAAA,EAAK,CAAA;AAAA,sBACL,GAAA,EAAK,UAAA;AAAA,sBACL,OAAA,EAAS,iBAAA;AAAA,sBACT,YAAA,EAAY,IAAA;AAAA,sBACZ,MAAA,EAAQ,gBAAA;AAAA,sBACR,UAAU,kBAAA,IAAsB;AAAA;AAAA;AAClC;AAAA,eACF;AAAA,cACC,CAAC,CAAC,UAAA,oBACDL,eAAA;AAAA,gBAACE,SAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,KAAA;AAAA,kBACV,KAAA,EAAM,OAAA;AAAA,kBACN,IAAA,EAAK,IAAA;AAAA,kBACN,QAAA,EAAA;AAAA,oBAAA,KAAA;AAAA,oBACK,aAAa,UAAU;AAAA;AAAA;AAAA,eAC7B;AAAA,8BAEFC,cAAA;AAAA,gBAACC,qBAAA;AAAA,gBAAA;AAAA,kBACC,IAAA,EAAK,eAAA;AAAA,kBACL,IAAA,EAAK,OAAA;AAAA,kBACL,QAAA,EAAU,mBAAA;AAAA,kBACV,OAAA,EAAS,WAAA;AAAA,kBACT,aAAA,EAAY;AAAA;AAAA;AACd;AAAA;AAAA,SACF;AAAA,QACC,kBAAA,CAAmB,SAAS,CAAA,oBAC3BJ,eAAA;AAAA,UAACM,aAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWC,0BAAO,eAAe,CAAA;AAAA,YACjC,QAAA,EAAU,gBAAA;AAAA,YACV,KAAA,EAAO,SAAS,QAAA,EAAS;AAAA,YAExB,QAAA,EAAA;AAAA,cAAA,YAAA,mCAAiBD,aAAA,CAAO,IAAA,EAAP,EAAY,KAAA,EAAM,MAAK,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,cAChD,kBAAA,CAAmB,IAAI,CAAA,MAAA,qBACtBN,eAAA;AAAA,gBAACM,aAAA,CAAO,IAAA;AAAA,gBAAP;AAAA,kBAEC,KAAA,EAAO,OAAO,QAAA,EAAS;AAAA,kBAEtB,QAAA,EAAA;AAAA,oBAAA,MAAA;AAAA,oBAAO;AAAA;AAAA,iBAAA;AAAA,gBAHH;AAAA,eAKR;AAAA;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/components/Pagination/Pagination.tsx"],"sourcesContent":["import {\n FocusEventHandler,\n MouseEventHandler,\n ReactElement,\n useCallback,\n useRef,\n} from 'react';\nimport { Container, type ContainerProps } from '@/components/Container';\nimport { IconButton } from '@/components/IconButton';\nimport { NumberField } from '@/components/NumberField';\nimport { Select } from '@/components/Select';\nimport { Text } from '@/components/Text';\nimport styles from './Pagination.module.css';\n\nexport interface PaginationProps extends Omit<\n ContainerProps<'div'>,\n 'children' | 'onChange'\n> {\n /** Total number of pages available */\n totalPages?: number;\n /** The currently selected page number */\n currentPage: number;\n /** List of options for rows per page dropdown */\n maxRowsPerPageList?: number[];\n /** Total row count to display */\n rowCount?: number | string;\n /** Callback when page number changes */\n onChange: (pageNumber: number) => void;\n /** Callback when page size changes */\n onPageSizeChange?: (pageNumber: number) => void;\n /** Current page size/rows per page */\n pageSize?: number;\n /** Callback when next page button is clicked */\n onNextPageClick?: MouseEventHandler<HTMLButtonElement>;\n /** Callback when previous page button is clicked */\n onPrevPageClick?: MouseEventHandler<HTMLButtonElement>;\n /** Callback when page number input receives focus */\n onPageNumberFocus?: FocusEventHandler<HTMLInputElement>;\n /** Callback when page number input loses focus */\n onPageNumberBlur?: FocusEventHandler<HTMLInputElement>;\n /** Whether to disable the next page button */\n disableNextButton?: boolean;\n /** Whether to show \"All rows\" option in the dropdown */\n allowAllRows?: boolean;\n}\n\nexport const Pagination = ({\n totalPages,\n currentPage,\n maxRowsPerPageList = [],\n rowCount,\n onChange: onChangeProp,\n onPageSizeChange: onPageSizeChangeProp,\n pageSize = -1,\n fillWidth = true,\n gap = 'md',\n justifyContent,\n onNextPageClick,\n onPrevPageClick,\n onPageNumberFocus,\n onPageNumberBlur,\n disableNextButton,\n allowAllRows = true,\n ...props\n}: PaginationProps): ReactElement => {\n const hasRowCount = ['number', 'string'].includes(typeof rowCount);\n const inputRef = useRef<HTMLInputElement>(null);\n const formatNumber = (value: number) => {\n return new Intl.NumberFormat('en').format(value);\n };\n const leftButtonDisabled = currentPage <= 1;\n const rightButtonDisabled =\n (!!totalPages && currentPage === totalPages) || disableNextButton;\n\n const onChange = (value: string) => {\n const pageNumber = parseInt(value, 10);\n if (\n Number.isNaN(pageNumber) ||\n pageNumber < 1 ||\n inputRef.current?.disabled ||\n (typeof totalPages !== 'undefined' ? pageNumber > totalPages : false)\n ) {\n return;\n }\n\n onChangeProp(pageNumber);\n };\n\n const onPageSizeChange = (value: string) => {\n if (typeof onPageSizeChangeProp === 'function') {\n onPageSizeChangeProp(Number(value));\n }\n };\n\n const onPrevClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n e => {\n if (leftButtonDisabled) {\n return;\n }\n\n onChangeProp(currentPage - 1);\n if (typeof onPrevPageClick === 'function') {\n onPrevPageClick(e);\n }\n },\n [currentPage, leftButtonDisabled, onChangeProp, onPrevPageClick]\n );\n\n const onNextClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n e => {\n if (rightButtonDisabled) {\n return;\n }\n\n onChangeProp(currentPage + 1);\n if (typeof onNextPageClick === 'function') {\n onNextPageClick(e);\n }\n },\n [currentPage, onChangeProp, onNextPageClick, rightButtonDisabled]\n );\n\n // if `allowAllRows` is false we need to switch to the first option in the list\n if (pageSize === -1 && !allowAllRows && maxRowsPerPageList.length > 0) {\n pageSize = maxRowsPerPageList[0];\n }\n\n return (\n <Container\n gap={gap}\n justifyContent={\n justifyContent ??\n (rowCount || maxRowsPerPageList.length > 0 ? 'space-between' : 'center')\n }\n fillWidth={fillWidth}\n {...props}\n >\n {hasRowCount && (\n <Text\n component=\"div\"\n color=\"muted\"\n size=\"sm\"\n >\n {typeof rowCount === 'number' ? formatNumber(rowCount) : rowCount} rows\n </Text>\n )}\n <Container\n gap=\"xxs\"\n fillWidth={false}\n >\n <IconButton\n icon=\"chevron-left\"\n type=\"ghost\"\n disabled={leftButtonDisabled}\n onClick={onPrevClick}\n data-testid=\"prev-btn\"\n />\n <Container\n maxWidth=\"50px\"\n fillWidth={false}\n >\n <NumberField\n ref={inputRef}\n onChange={onChange}\n value={currentPage}\n loading={false}\n aria-label={currentPage.toString()}\n min={1}\n max={totalPages}\n onFocus={onPageNumberFocus}\n hideControls\n onBlur={onPageNumberBlur}\n disabled={leftButtonDisabled && rightButtonDisabled}\n />\n </Container>\n {!!totalPages && (\n <Text\n component=\"div\"\n color=\"muted\"\n size=\"sm\"\n >\n of {formatNumber(totalPages)}\n </Text>\n )}\n <IconButton\n icon=\"chevron-right\"\n type=\"ghost\"\n disabled={rightButtonDisabled}\n onClick={onNextClick}\n data-testid=\"next-btn\"\n />\n </Container>\n {maxRowsPerPageList.length > 0 && (\n <Select\n className={styles['custom-select']}\n onSelect={onPageSizeChange}\n value={pageSize.toString()}\n >\n {allowAllRows && <Select.Item value=\"-1\">All rows</Select.Item>}\n {maxRowsPerPageList.map(option => (\n <Select.Item\n key={option}\n value={option.toString()}\n >\n {option} rows\n </Select.Item>\n ))}\n </Select>\n )}\n </Container>\n );\n};\n"],"names":["useRef","useCallback","jsxs","Container","Text","jsx","IconButton","NumberField","Select","styles"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- @layer clickui {.menu-panel__-IeVm {
1
+ @layer clickui {/* stylelint-disable custom-property-pattern -- design tokens use camelCase (e.g. iconButton) */
2
+
3
+ .menu-panel__-IeVm {
2
4
  display: block;
3
5
  padding: var(--click-popover-space-y) var(--click-popover-space-x);
4
6
  border: 1px solid var(--click-popover-color-panel-stroke-default);
@@ -23,11 +25,10 @@
23
25
  cursor: pointer;
24
26
  }
25
27
 
26
- .close-button__fpjhc {
28
+ .menu-panel__-IeVm .close-button__fpjhc {
29
+ /* Offset by the button's own padding so the cross sits at the panel inset */
27
30
  position: absolute;
28
- top: var(--click-popover-space-y);
29
- right: var(--click-popover-space-x);
30
- width: var(--click-popover-icon-size-width);
31
- height: var(--click-popover-icon-size-height);
31
+ top: calc(var(--click-popover-space-y) - var(--click-button-iconButton-sm-space-y));
32
+ right: calc(var(--click-popover-space-x) - var(--click-button-iconButton-sm-space-x));
32
33
  }
33
34
  }
@@ -11,7 +11,7 @@ const cva = require('../../lib/cva.cjs');
11
11
  const PopoverArrow = require('../Assets/Icons/Popover-Arrow.cjs');
12
12
  const PortalContext = require('../../providers/PortalContext.cjs');
13
13
  const Popover_module = require('./Popover.module.css.cjs');
14
- const Icon = require('../Icon/index.cjs');
14
+ const IconButton = require('../IconButton/index.cjs');
15
15
  const classVarianceAuthority = require('class-variance-authority');
16
16
 
17
17
  function _interopNamespace(e) {
@@ -100,14 +100,6 @@ const PopoverContent = ({
100
100
  sideOffset: 4,
101
101
  ...props,
102
102
  children: [
103
- showClose && /* @__PURE__ */ jsxRuntime.jsx(
104
- RadixPopover__namespace.Close,
105
- {
106
- asChild: true,
107
- className: Popover_module.default["close-button"],
108
- children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { name: "cross" })
109
- }
110
- ),
111
103
  showArrow && /* @__PURE__ */ jsxRuntime.jsx(
112
104
  GenericMenu.Arrow,
113
105
  {
@@ -118,7 +110,17 @@ const PopoverContent = ({
118
110
  children: /* @__PURE__ */ jsxRuntime.jsx(PopoverArrow.default, {})
119
111
  }
120
112
  ),
121
- children
113
+ children,
114
+ showClose && /* @__PURE__ */ jsxRuntime.jsx(RadixPopover__namespace.Close, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
115
+ IconButton.IconButton,
116
+ {
117
+ className: Popover_module.default["close-button"],
118
+ icon: "cross",
119
+ type: "ghost",
120
+ size: "sm",
121
+ "aria-label": "Close"
122
+ }
123
+ ) })
122
124
  ]
123
125
  }
124
126
  )
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import * as RadixPopover from '@radix-ui/react-popover';\nimport { Arrow, GenericMenuPanel } from '@/components/GenericMenu';\nimport {\n ComponentProps,\n ComponentPropsWithRef,\n ElementType,\n ReactNode,\n forwardRef,\n} from 'react';\nimport { cn, cva } from '@/lib/cva';\nimport { Icon } from '@/components/Icon';\nimport Popover_Arrow from '@/components/Assets/Icons/Popover-Arrow';\nimport { useResolvedPortalContainer } from '@/providers/PortalContext';\nimport styles from './Popover.module.css';\n\nexport const Popover = ({ children, ...props }: RadixPopover.PopoverProps) => {\n return <RadixPopover.Root {...props}>{children}</RadixPopover.Root>;\n};\n\ninterface TriggerProps extends RadixPopover.PopoverTriggerProps {\n anchor?: ReactNode;\n}\n\nconst PopoverTrigger = ({ anchor, children, ...props }: TriggerProps) => {\n return (\n <>\n <RadixPopover.Trigger\n asChild\n {...props}\n >\n <div className={styles.trigger}>{children}</div>\n </RadixPopover.Trigger>\n {anchor && <RadixPopover.Anchor asChild>{anchor}</RadixPopover.Anchor>}\n </>\n );\n};\nPopoverTrigger.displayName = 'PopoverTrigger';\nPopover.Trigger = PopoverTrigger;\n\ninterface PopoverContentProps extends RadixPopover.PopoverContentProps {\n /** Whether to show an arrow pointing to the trigger element */\n showArrow?: boolean;\n /** Whether to show a close button in the popover */\n showClose?: boolean;\n /** Forces the popover to mount in the DOM even when closed */\n forceMount?: true;\n /** Custom container element for the popover portal */\n container?: HTMLElement | null;\n}\n\nconst menuPanelVariants = cva(styles['menu-panel'], {\n variants: {\n showClose: {\n true: styles['menu-panel_show-close'],\n false: '',\n },\n },\n defaultVariants: {\n showClose: false,\n },\n});\n\ntype MenuPanelComponent = <T extends ElementType = 'div'>(\n props: ComponentProps<typeof GenericMenuPanel<T>> & { showClose?: boolean }\n) => ReactNode;\n\nconst _MenuPanel = <T extends ElementType = 'div'>(\n {\n showClose,\n className,\n ...props\n }: ComponentProps<typeof GenericMenuPanel<T>> & { showClose?: boolean },\n ref: ComponentPropsWithRef<T>['ref']\n) => (\n <GenericMenuPanel\n ref={ref}\n {...(props as ComponentProps<typeof GenericMenuPanel>)}\n className={cn(menuPanelVariants({ showClose }), className)}\n />\n);\n\nconst MenuPanel: MenuPanelComponent = forwardRef(_MenuPanel);\n\nconst PopoverContent = ({\n children,\n showArrow,\n showClose,\n forceMount,\n container,\n ...props\n}: PopoverContentProps) => {\n const portalContainer = useResolvedPortalContainer(container);\n\n return (\n <RadixPopover.Portal\n forceMount={forceMount}\n container={portalContainer}\n >\n <MenuPanel\n as={RadixPopover.Content}\n type=\"popover\"\n showClose={showClose}\n showArrow={showArrow}\n sideOffset={4}\n {...props}\n >\n {showClose && (\n <RadixPopover.Close\n asChild\n className={styles['close-button']}\n >\n <Icon name=\"cross\" />\n </RadixPopover.Close>\n )}\n {showArrow && (\n <Arrow\n asChild\n as={RadixPopover.Arrow}\n width={20}\n height={10}\n >\n <Popover_Arrow />\n </Arrow>\n )}\n {children}\n </MenuPanel>\n </RadixPopover.Portal>\n );\n};\nPopoverContent.displayName = 'PopoverContent';\nPopover.Content = PopoverContent;\n"],"names":["RadixPopover","jsxs","Fragment","jsx","styles","cva","GenericMenuPanel","cn","forwardRef","useResolvedPortalContainer","Icon","Arrow","Popover_Arrow"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeO,MAAM,UAAU,CAAC,EAAE,QAAA,EAAU,GAAG,OAAM,KAAiC;AAC5E,EAAA,sCAAQA,uBAAA,CAAa,IAAA,EAAb,EAAmB,GAAG,OAAQ,QAAA,EAAS,CAAA;AACjD;AAMA,MAAM,iBAAiB,CAAC,EAAE,QAAQ,QAAA,EAAU,GAAG,OAAM,KAAoB;AACvE,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAACH,uBAAA,CAAa,OAAA;AAAA,MAAb;AAAA,QACC,OAAA,EAAO,IAAA;AAAA,QACN,GAAG,KAAA;AAAA,QAEJ,QAAA,kBAAAG,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,sBAAA,CAAO,SAAU,QAAA,EAAS;AAAA;AAAA,KAC5C;AAAA,IACC,0BAAUD,cAAA,CAACH,uBAAA,CAAa,QAAb,EAAoB,OAAA,EAAO,MAAE,QAAA,EAAA,MAAA,EAAO;AAAA,GAAA,EAClD,CAAA;AAEJ,CAAA;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;AAC7B,OAAA,CAAQ,OAAA,GAAU,cAAA;AAalB,MAAM,iBAAA,GAAoBK,0BAAA,CAAID,sBAAA,CAAO,YAAY,CAAA,EAAG;AAAA,EAClD,QAAA,EAAU;AAAA,IACR,SAAA,EAAW;AAAA,MACT,IAAA,EAAMA,uBAAO,uBAAuB,CAAA;AAAA,MACpC,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,SAAA,EAAW;AAAA;AAEf,CAAC,CAAA;AAMD,MAAM,aAAa,CACjB;AAAA,EACE,SAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,qBAEAD,cAAA;AAAA,EAACG,4BAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACC,GAAI,KAAA;AAAA,IACL,WAAWC,MAAA,CAAG,iBAAA,CAAkB,EAAE,SAAA,EAAW,GAAG,SAAS;AAAA;AAC3D,CAAA;AAGF,MAAM,SAAA,GAAgCC,iBAAW,UAAU,CAAA;AAE3D,MAAM,iBAAiB,CAAC;AAAA,EACtB,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA2B;AACzB,EAAA,MAAM,eAAA,GAAkBC,yCAA2B,SAAS,CAAA;AAE5D,EAAA,uBACEN,cAAA;AAAA,IAACH,uBAAA,CAAa,MAAA;AAAA,IAAb;AAAA,MACC,UAAA;AAAA,MACA,SAAA,EAAW,eAAA;AAAA,MAEX,QAAA,kBAAAC,eAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,IAAID,uBAAA,CAAa,OAAA;AAAA,UACjB,IAAA,EAAK,SAAA;AAAA,UACL,SAAA;AAAA,UACA,SAAA;AAAA,UACA,UAAA,EAAY,CAAA;AAAA,UACX,GAAG,KAAA;AAAA,UAEH,QAAA,EAAA;AAAA,YAAA,SAAA,oBACCG,cAAA;AAAA,cAACH,uBAAA,CAAa,KAAA;AAAA,cAAb;AAAA,gBACC,OAAA,EAAO,IAAA;AAAA,gBACP,SAAA,EAAWI,uBAAO,cAAc,CAAA;AAAA,gBAEhC,QAAA,kBAAAD,cAAA,CAACO,SAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ;AAAA;AAAA,aACrB;AAAA,YAED,SAAA,oBACCP,cAAA;AAAA,cAACQ,iBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAO,IAAA;AAAA,gBACP,IAAIX,uBAAA,CAAa,KAAA;AAAA,gBACjB,KAAA,EAAO,EAAA;AAAA,gBACP,MAAA,EAAQ,EAAA;AAAA,gBAER,yCAACY,oBAAA,EAAA,EAAc;AAAA;AAAA,aACjB;AAAA,YAED;AAAA;AAAA;AAAA;AACH;AAAA,GACF;AAEJ,CAAA;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;AAC7B,OAAA,CAAQ,OAAA,GAAU,cAAA;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import * as RadixPopover from '@radix-ui/react-popover';\nimport { Arrow, GenericMenuPanel } from '@/components/GenericMenu';\nimport {\n ComponentProps,\n ComponentPropsWithRef,\n ElementType,\n ReactNode,\n forwardRef,\n} from 'react';\nimport { cn, cva } from '@/lib/cva';\nimport { IconButton } from '@/components/IconButton';\nimport Popover_Arrow from '@/components/Assets/Icons/Popover-Arrow';\nimport { useResolvedPortalContainer } from '@/providers/PortalContext';\nimport styles from './Popover.module.css';\n\nexport const Popover = ({ children, ...props }: RadixPopover.PopoverProps) => {\n return <RadixPopover.Root {...props}>{children}</RadixPopover.Root>;\n};\n\ninterface TriggerProps extends RadixPopover.PopoverTriggerProps {\n anchor?: ReactNode;\n}\n\nconst PopoverTrigger = ({ anchor, children, ...props }: TriggerProps) => {\n return (\n <>\n <RadixPopover.Trigger\n asChild\n {...props}\n >\n <div className={styles.trigger}>{children}</div>\n </RadixPopover.Trigger>\n {anchor && <RadixPopover.Anchor asChild>{anchor}</RadixPopover.Anchor>}\n </>\n );\n};\nPopoverTrigger.displayName = 'PopoverTrigger';\nPopover.Trigger = PopoverTrigger;\n\ninterface PopoverContentProps extends RadixPopover.PopoverContentProps {\n /** Whether to show an arrow pointing to the trigger element */\n showArrow?: boolean;\n /** Whether to show a close button in the popover */\n showClose?: boolean;\n /** Forces the popover to mount in the DOM even when closed */\n forceMount?: true;\n /** Custom container element for the popover portal */\n container?: HTMLElement | null;\n}\n\nconst menuPanelVariants = cva(styles['menu-panel'], {\n variants: {\n showClose: {\n true: styles['menu-panel_show-close'],\n false: '',\n },\n },\n defaultVariants: {\n showClose: false,\n },\n});\n\ntype MenuPanelComponent = <T extends ElementType = 'div'>(\n props: ComponentProps<typeof GenericMenuPanel<T>> & { showClose?: boolean }\n) => ReactNode;\n\nconst _MenuPanel = <T extends ElementType = 'div'>(\n {\n showClose,\n className,\n ...props\n }: ComponentProps<typeof GenericMenuPanel<T>> & { showClose?: boolean },\n ref: ComponentPropsWithRef<T>['ref']\n) => (\n <GenericMenuPanel\n ref={ref}\n {...(props as ComponentProps<typeof GenericMenuPanel>)}\n className={cn(menuPanelVariants({ showClose }), className)}\n />\n);\n\nconst MenuPanel: MenuPanelComponent = forwardRef(_MenuPanel);\n\nconst PopoverContent = ({\n children,\n showArrow,\n showClose,\n forceMount,\n container,\n ...props\n}: PopoverContentProps) => {\n const portalContainer = useResolvedPortalContainer(container);\n\n return (\n <RadixPopover.Portal\n forceMount={forceMount}\n container={portalContainer}\n >\n <MenuPanel\n as={RadixPopover.Content}\n type=\"popover\"\n showClose={showClose}\n showArrow={showArrow}\n sideOffset={4}\n {...props}\n >\n {showArrow && (\n <Arrow\n asChild\n as={RadixPopover.Arrow}\n width={20}\n height={10}\n >\n <Popover_Arrow />\n </Arrow>\n )}\n {children}\n {/* Rendered last so it takes focus after the panel's interactive elements */}\n {showClose && (\n <RadixPopover.Close asChild>\n <IconButton\n className={styles['close-button']}\n icon=\"cross\"\n type=\"ghost\"\n size=\"sm\"\n aria-label=\"Close\"\n />\n </RadixPopover.Close>\n )}\n </MenuPanel>\n </RadixPopover.Portal>\n );\n};\nPopoverContent.displayName = 'PopoverContent';\nPopover.Content = PopoverContent;\n"],"names":["RadixPopover","jsxs","Fragment","jsx","styles","cva","GenericMenuPanel","cn","forwardRef","useResolvedPortalContainer","Arrow","Popover_Arrow","IconButton"],"mappings":"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"}
@@ -49,15 +49,18 @@ const ProgressBar = ({
49
49
  orientation = "horizontal",
50
50
  dir = "start",
51
51
  className,
52
+ style,
52
53
  ...props
53
54
  }) => {
54
55
  const completed = progress === 100;
56
+ const mergedStyle = {
57
+ "--progress": `${progress}%`,
58
+ ...style
59
+ };
55
60
  return /* @__PURE__ */ jsxRuntime.jsx(
56
61
  "div",
57
62
  {
58
- style: {
59
- "--progress": `${progress}%`
60
- },
63
+ style: mergedStyle,
61
64
  ...props,
62
65
  className: cva.cn(
63
66
  progressBarVariants({ type, orientation, dir, completed }),
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/ProgressBar/ProgressBar.tsx"],"sourcesContent":["import type { CSSProperties } from 'react';\nimport { ProgressBarProps } from './ProgressBar.types';\nimport { IconButton } from '@/components/IconButton';\nimport { cn, cva } from '@/lib/cva';\nimport styles from './ProgressBar.module.css';\n\nconst progressBarVariants = cva(styles.progressbar, {\n variants: {\n type: {\n default: styles['progressbar_type_default'],\n small: styles['progressbar_type_small'],\n },\n orientation: {\n horizontal: styles['progressbar_orientation_horizontal'],\n vertical: styles['progressbar_orientation_vertical'],\n },\n dir: {\n start: styles['progressbar_dir_start'],\n end: styles['progressbar_dir_end'],\n },\n completed: {\n true: styles['progressbar_completed'],\n },\n },\n defaultVariants: {\n type: 'default',\n orientation: 'horizontal',\n dir: 'start',\n },\n});\n\nconst closeButtonVariants = cva(styles.progressclosebutton, {\n variants: {\n dismissable: {\n true: styles['progressclosebutton_dismissable'],\n },\n },\n});\n\nexport const ProgressBar = ({\n progress,\n type = 'default',\n dismissable = false,\n onCancel,\n successMessage,\n orientation = 'horizontal',\n dir = 'start',\n className,\n ...props\n}: ProgressBarProps) => {\n const completed = progress === 100;\n\n return (\n <div\n // Using a CSS variable avoids generating a new class per progress value.\n style={\n {\n '--progress': `${progress}%`,\n } as CSSProperties\n }\n {...props}\n className={cn(\n progressBarVariants({ type, orientation, dir, completed }),\n className\n )}\n >\n {type === 'default' && (\n <>\n <span className={styles.progresstext}>\n {successMessage && completed ? successMessage : `${progress}%`}\n </span>\n <IconButton\n size=\"sm\"\n type=\"ghost\"\n icon=\"cross\"\n onClick={onCancel}\n data-testid=\"progressbar-close\"\n className={closeButtonVariants({ dismissable })}\n />\n </>\n )}\n </div>\n );\n};\n"],"names":["cva","styles","jsx","cn","jsxs","Fragment","IconButton"],"mappings":";;;;;;;;;;AAMA,MAAM,mBAAA,GAAsBA,0BAAA,CAAIC,0BAAA,CAAO,WAAA,EAAa;AAAA,EAClD,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,OAAA,EAASA,2BAAO,0BAA0B,CAAA;AAAA,MAC1C,KAAA,EAAOA,2BAAO,wBAAwB;AAAA,KACxC;AAAA,IACA,WAAA,EAAa;AAAA,MACX,UAAA,EAAYA,2BAAO,oCAAoC,CAAA;AAAA,MACvD,QAAA,EAAUA,2BAAO,kCAAkC;AAAA,KACrD;AAAA,IACA,GAAA,EAAK;AAAA,MACH,KAAA,EAAOA,2BAAO,uBAAuB,CAAA;AAAA,MACrC,GAAA,EAAKA,2BAAO,qBAAqB;AAAA,KACnC;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAMA,2BAAO,uBAAuB;AAAA;AACtC,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,YAAA;AAAA,IACb,GAAA,EAAK;AAAA;AAET,CAAC,CAAA;AAED,MAAM,mBAAA,GAAsBD,0BAAA,CAAIC,0BAAA,CAAO,mBAAA,EAAqB;AAAA,EAC1D,QAAA,EAAU;AAAA,IACR,WAAA,EAAa;AAAA,MACX,IAAA,EAAMA,2BAAO,iCAAiC;AAAA;AAChD;AAEJ,CAAC,CAAA;AAEM,MAAM,cAAc,CAAC;AAAA,EAC1B,QAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,WAAA,GAAc,KAAA;AAAA,EACd,QAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,GAAA,GAAM,OAAA;AAAA,EACN,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAwB;AACtB,EAAA,MAAM,YAAY,QAAA,KAAa,GAAA;AAE/B,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MAEC,KAAA,EACE;AAAA,QACE,YAAA,EAAc,GAAG,QAAQ,CAAA,CAAA;AAAA,OAC3B;AAAA,MAED,GAAG,KAAA;AAAA,MACJ,SAAA,EAAWC,MAAA;AAAA,QACT,oBAAoB,EAAE,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,WAAW,CAAA;AAAA,QACzD;AAAA,OACF;AAAA,MAEC,QAAA,EAAA,IAAA,KAAS,6BACRC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAH,cAAA,CAAC,MAAA,EAAA,EAAK,WAAWD,0BAAA,CAAO,YAAA,EACrB,4BAAkB,SAAA,GAAY,cAAA,GAAiB,CAAA,EAAG,QAAQ,CAAA,CAAA,CAAA,EAC7D,CAAA;AAAA,wBACAC,cAAA;AAAA,UAACI,qBAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,OAAA,EAAS,QAAA;AAAA,YACT,aAAA,EAAY,mBAAA;AAAA,YACZ,SAAA,EAAW,mBAAA,CAAoB,EAAE,WAAA,EAAa;AAAA;AAAA;AAChD,OAAA,EACF;AAAA;AAAA,GAEJ;AAEJ;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/components/ProgressBar/ProgressBar.tsx"],"sourcesContent":["import type { CSSProperties } from 'react';\nimport { ProgressBarProps } from './ProgressBar.types';\nimport { IconButton } from '@/components/IconButton';\nimport { cn, cva } from '@/lib/cva';\nimport styles from './ProgressBar.module.css';\n\nconst progressBarVariants = cva(styles.progressbar, {\n variants: {\n type: {\n default: styles['progressbar_type_default'],\n small: styles['progressbar_type_small'],\n },\n orientation: {\n horizontal: styles['progressbar_orientation_horizontal'],\n vertical: styles['progressbar_orientation_vertical'],\n },\n dir: {\n start: styles['progressbar_dir_start'],\n end: styles['progressbar_dir_end'],\n },\n completed: {\n true: styles['progressbar_completed'],\n },\n },\n defaultVariants: {\n type: 'default',\n orientation: 'horizontal',\n dir: 'start',\n },\n});\n\nconst closeButtonVariants = cva(styles.progressclosebutton, {\n variants: {\n dismissable: {\n true: styles['progressclosebutton_dismissable'],\n },\n },\n});\n\nexport const ProgressBar = ({\n progress,\n type = 'default',\n dismissable = false,\n onCancel,\n successMessage,\n orientation = 'horizontal',\n dir = 'start',\n className,\n style,\n ...props\n}: ProgressBarProps) => {\n const completed = progress === 100;\n const mergedStyle = {\n '--progress': `${progress}%`,\n ...style,\n } as CSSProperties;\n\n return (\n <div\n // Using a CSS variable avoids generating a new class per progress value.\n style={mergedStyle}\n {...props}\n className={cn(\n progressBarVariants({ type, orientation, dir, completed }),\n className\n )}\n >\n {type === 'default' && (\n <>\n <span className={styles.progresstext}>\n {successMessage && completed ? successMessage : `${progress}%`}\n </span>\n <IconButton\n size=\"sm\"\n type=\"ghost\"\n icon=\"cross\"\n onClick={onCancel}\n data-testid=\"progressbar-close\"\n className={closeButtonVariants({ dismissable })}\n />\n </>\n )}\n </div>\n );\n};\n"],"names":["cva","styles","jsx","cn","jsxs","Fragment","IconButton"],"mappings":";;;;;;;;;;AAMA,MAAM,mBAAA,GAAsBA,0BAAA,CAAIC,0BAAA,CAAO,WAAA,EAAa;AAAA,EAClD,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,MACJ,OAAA,EAASA,2BAAO,0BAA0B,CAAA;AAAA,MAC1C,KAAA,EAAOA,2BAAO,wBAAwB;AAAA,KACxC;AAAA,IACA,WAAA,EAAa;AAAA,MACX,UAAA,EAAYA,2BAAO,oCAAoC,CAAA;AAAA,MACvD,QAAA,EAAUA,2BAAO,kCAAkC;AAAA,KACrD;AAAA,IACA,GAAA,EAAK;AAAA,MACH,KAAA,EAAOA,2BAAO,uBAAuB,CAAA;AAAA,MACrC,GAAA,EAAKA,2BAAO,qBAAqB;AAAA,KACnC;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAMA,2BAAO,uBAAuB;AAAA;AACtC,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,YAAA;AAAA,IACb,GAAA,EAAK;AAAA;AAET,CAAC,CAAA;AAED,MAAM,mBAAA,GAAsBD,0BAAA,CAAIC,0BAAA,CAAO,mBAAA,EAAqB;AAAA,EAC1D,QAAA,EAAU;AAAA,IACR,WAAA,EAAa;AAAA,MACX,IAAA,EAAMA,2BAAO,iCAAiC;AAAA;AAChD;AAEJ,CAAC,CAAA;AAEM,MAAM,cAAc,CAAC;AAAA,EAC1B,QAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,WAAA,GAAc,KAAA;AAAA,EACd,QAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA,GAAc,YAAA;AAAA,EACd,GAAA,GAAM,OAAA;AAAA,EACN,SAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAwB;AACtB,EAAA,MAAM,YAAY,QAAA,KAAa,GAAA;AAC/B,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,YAAA,EAAc,GAAG,QAAQ,CAAA,CAAA,CAAA;AAAA,IACzB,GAAG;AAAA,GACL;AAEA,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MAEC,KAAA,EAAO,WAAA;AAAA,MACN,GAAG,KAAA;AAAA,MACJ,SAAA,EAAWC,MAAA;AAAA,QACT,oBAAoB,EAAE,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,WAAW,CAAA;AAAA,QACzD;AAAA,OACF;AAAA,MAEC,QAAA,EAAA,IAAA,KAAS,6BACRC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAH,cAAA,CAAC,MAAA,EAAA,EAAK,WAAWD,0BAAA,CAAO,YAAA,EACrB,4BAAkB,SAAA,GAAY,cAAA,GAAiB,CAAA,EAAG,QAAQ,CAAA,CAAA,CAAA,EAC7D,CAAA;AAAA,wBACAC,cAAA;AAAA,UAACI,qBAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,IAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,OAAA,EAAS,QAAA;AAAA,YACT,aAAA,EAAY,mBAAA;AAAA,YACZ,SAAA,EAAW,mBAAA,CAAoB,EAAE,WAAA,EAAa;AAAA;AAAA;AAChD,OAAA,EACF;AAAA;AAAA,GAEJ;AAEJ;;;;"}
@@ -9,6 +9,26 @@
9
9
  width: 100%;
10
10
  }
11
11
 
12
+ .text_wrap_wrap__RR--m {
13
+ white-space: normal;
14
+ }
15
+
16
+ .text_wrap_nowrap__DCK82 {
17
+ white-space: nowrap;
18
+ }
19
+
20
+ .text_wrap_break-word__Oc5qD {
21
+ white-space: normal;
22
+ /* `anywhere` rather than `break-word` so long words also shrink the
23
+ min-content width, which is what flex and table layouts measure. */
24
+ overflow-wrap: anywhere;
25
+ }
26
+
27
+ .text_wrap_break-all__EdYJs {
28
+ white-space: normal;
29
+ word-break: break-all;
30
+ }
31
+
12
32
  /* font shorthand depends on both size and weight; one class per pairing
13
33
  emits a single `font:` declaration. */
14
34
 
@@ -3,6 +3,8 @@
3
3
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
4
 
5
5
  const text = "text__78lq0";
6
+ const text_wrap_wrap = "text_wrap_wrap__RR--m";
7
+ const text_wrap_nowrap = "text_wrap_nowrap__DCK82";
6
8
  const text_color_default = "text_color_default__225Wd";
7
9
  const text_color_muted = "text_color_muted__DpcbG";
8
10
  const text_color_danger = "text_color_danger__hphaQ";
@@ -14,6 +16,10 @@ const text_align_right = "text_align_right__azLA3";
14
16
  const styles = {
15
17
  text: text,
16
18
  "text_fill-width": "text_fill-width__zRuxC",
19
+ text_wrap_wrap: text_wrap_wrap,
20
+ text_wrap_nowrap: text_wrap_nowrap,
21
+ "text_wrap_break-word": "text_wrap_break-word__Oc5qD",
22
+ "text_wrap_break-all": "text_wrap_break-all__EdYJs",
17
23
  "text_font_normal-xs": "text_font_normal-xs__78uM-",
18
24
  "text_font_normal-sm": "text_font_normal-sm__nFGGC",
19
25
  "text_font_normal-md": "text_font_normal-md__In-T2",
@@ -54,4 +60,6 @@ exports.text_color_default = text_color_default;
54
60
  exports.text_color_disabled = text_color_disabled;
55
61
  exports.text_color_muted = text_color_muted;
56
62
  exports.text_color_warning = text_color_warning;
63
+ exports.text_wrap_nowrap = text_wrap_nowrap;
64
+ exports.text_wrap_wrap = text_wrap_wrap;
57
65
  //# sourceMappingURL=Text.module.css.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Text.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Text.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -26,6 +26,12 @@ const textVariants = classVarianceAuthority.cva(Text_module.default.text, {
26
26
  fillWidth: {
27
27
  true: Text_module.default["text_fill-width"]
28
28
  },
29
+ wrap: {
30
+ wrap: Text_module.default["text_wrap_wrap"],
31
+ nowrap: Text_module.default["text_wrap_nowrap"],
32
+ "break-word": Text_module.default["text_wrap_break-word"],
33
+ "break-all": Text_module.default["text_wrap_break-all"]
34
+ },
29
35
  size: {
30
36
  xs: "",
31
37
  sm: "",
@@ -78,6 +84,7 @@ const _Text = ({
78
84
  children,
79
85
  component,
80
86
  fillWidth,
87
+ wrap,
81
88
  ...props
82
89
  }, ref) => {
83
90
  const Component = component ?? "p";
@@ -86,7 +93,10 @@ const _Text = ({
86
93
  {
87
94
  ref,
88
95
  ...props,
89
- className: cva.cn(textVariants({ color, align, size, weight, fillWidth }), className),
96
+ className: cva.cn(
97
+ textVariants({ color, align, size, weight, fillWidth, wrap }),
98
+ className
99
+ ),
90
100
  children
91
101
  }
92
102
  );
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/Text/Text.tsx"],"sourcesContent":["import {\n ComponentProps,\n ComponentPropsWithRef,\n ElementType,\n ReactNode,\n forwardRef,\n} from 'react';\nimport { cn, cva } from '@/lib/cva';\nimport styles from './Text.module.css';\n\nexport type TextSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type TextWeight = 'normal' | 'medium' | 'semibold' | 'bold' | 'mono';\nexport type TextAlignment = 'left' | 'center' | 'right';\nexport type TextColor = 'default' | 'muted' | 'danger' | 'disabled' | 'warning';\n\nexport interface TextProps<T extends ElementType = 'p'> {\n /** The text content to display */\n children: ReactNode;\n /** The text alignment */\n align?: TextAlignment;\n /** The text color variant */\n color?: TextColor;\n /** The font size of the text */\n size?: TextSize;\n /** The font weight of the text */\n weight?: TextWeight;\n /** Additional CSS class name */\n className?: string;\n /** Custom component to render as */\n component?: T;\n /** Whether the text should fill the full width of its container */\n fillWidth?: boolean;\n}\n\ntype TextPolymorphicComponent = <T extends ElementType = 'p'>(\n props: Omit<ComponentProps<T>, keyof TextProps<T>> & TextProps<T>\n) => ReactNode;\n\nconst textVariants = cva(styles.text, {\n variants: {\n color: {\n default: styles['text_color_default'],\n muted: styles['text_color_muted'],\n danger: styles['text_color_danger'],\n disabled: styles['text_color_disabled'],\n warning: styles['text_color_warning'],\n },\n align: {\n left: styles['text_align_left'],\n center: styles['text_align_center'],\n right: styles['text_align_right'],\n },\n fillWidth: {\n true: styles['text_fill-width'],\n },\n size: {\n xs: '',\n sm: '',\n md: '',\n lg: '',\n },\n weight: {\n normal: '',\n medium: '',\n semibold: '',\n bold: '',\n mono: '',\n },\n },\n compoundVariants: [\n { weight: 'normal', size: 'xs', class: styles['text_font_normal-xs'] },\n { weight: 'normal', size: 'sm', class: styles['text_font_normal-sm'] },\n { weight: 'normal', size: 'md', class: styles['text_font_normal-md'] },\n { weight: 'normal', size: 'lg', class: styles['text_font_normal-lg'] },\n { weight: 'medium', size: 'xs', class: styles['text_font_medium-xs'] },\n { weight: 'medium', size: 'sm', class: styles['text_font_medium-sm'] },\n { weight: 'medium', size: 'md', class: styles['text_font_medium-md'] },\n { weight: 'medium', size: 'lg', class: styles['text_font_medium-lg'] },\n { weight: 'semibold', size: 'xs', class: styles['text_font_semibold-xs'] },\n { weight: 'semibold', size: 'sm', class: styles['text_font_semibold-sm'] },\n { weight: 'semibold', size: 'md', class: styles['text_font_semibold-md'] },\n { weight: 'semibold', size: 'lg', class: styles['text_font_semibold-lg'] },\n { weight: 'bold', size: 'xs', class: styles['text_font_bold-xs'] },\n { weight: 'bold', size: 'sm', class: styles['text_font_bold-sm'] },\n { weight: 'bold', size: 'md', class: styles['text_font_bold-md'] },\n { weight: 'bold', size: 'lg', class: styles['text_font_bold-lg'] },\n { weight: 'mono', size: 'xs', class: styles['text_font_mono-xs'] },\n { weight: 'mono', size: 'sm', class: styles['text_font_mono-sm'] },\n { weight: 'mono', size: 'md', class: styles['text_font_mono-md'] },\n { weight: 'mono', size: 'lg', class: styles['text_font_mono-lg'] },\n ],\n defaultVariants: {\n color: 'default',\n align: 'left',\n size: 'md',\n weight: 'normal',\n },\n});\n\nconst _Text = <T extends ElementType = 'p'>(\n {\n align,\n color,\n size,\n weight,\n className,\n children,\n component,\n fillWidth,\n ...props\n }: Omit<ComponentProps<T>, keyof TextProps<T>> & TextProps<T>,\n ref: ComponentPropsWithRef<T>['ref']\n) => {\n const Component = component ?? 'p';\n return (\n <Component\n ref={ref}\n {...props}\n className={cn(textVariants({ color, align, size, weight, fillWidth }), className)}\n >\n {children}\n </Component>\n );\n};\n\n_Text.displayName = 'Text';\n\nexport const Text: TextPolymorphicComponent = forwardRef(_Text);\n"],"names":["cva","styles","jsx","cn","forwardRef"],"mappings":";;;;;;;;;;AAsCA,MAAM,YAAA,GAAeA,0BAAA,CAAIC,mBAAA,CAAO,IAAA,EAAM;AAAA,EACpC,QAAA,EAAU;AAAA,IACR,KAAA,EAAO;AAAA,MACL,OAAA,EAASA,oBAAO,oBAAoB,CAAA;AAAA,MACpC,KAAA,EAAOA,oBAAO,kBAAkB,CAAA;AAAA,MAChC,MAAA,EAAQA,oBAAO,mBAAmB,CAAA;AAAA,MAClC,QAAA,EAAUA,oBAAO,qBAAqB,CAAA;AAAA,MACtC,OAAA,EAASA,oBAAO,oBAAoB;AAAA,KACtC;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAMA,oBAAO,iBAAiB,CAAA;AAAA,MAC9B,MAAA,EAAQA,oBAAO,mBAAmB,CAAA;AAAA,MAClC,KAAA,EAAOA,oBAAO,kBAAkB;AAAA,KAClC;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAMA,oBAAO,iBAAiB;AAAA,KAChC;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,EAAA,EAAI,EAAA;AAAA,MACJ,EAAA,EAAI,EAAA;AAAA,MACJ,EAAA,EAAI,EAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,EAAA;AAAA,MACR,MAAA,EAAQ,EAAA;AAAA,MACR,QAAA,EAAU,EAAA;AAAA,MACV,IAAA,EAAM,EAAA;AAAA,MACN,IAAA,EAAM;AAAA;AACR,GACF;AAAA,EACA,gBAAA,EAAkB;AAAA,IAChB,EAAE,QAAQ,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,qBAAqB,CAAA,EAAE;AAAA,IACrE,EAAE,QAAQ,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,qBAAqB,CAAA,EAAE;AAAA,IACrE,EAAE,QAAQ,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,qBAAqB,CAAA,EAAE;AAAA,IACrE,EAAE,QAAQ,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,qBAAqB,CAAA,EAAE;AAAA,IACrE,EAAE,QAAQ,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,qBAAqB,CAAA,EAAE;AAAA,IACrE,EAAE,QAAQ,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,qBAAqB,CAAA,EAAE;AAAA,IACrE,EAAE,QAAQ,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,qBAAqB,CAAA,EAAE;AAAA,IACrE,EAAE,QAAQ,QAAA,EAAU,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,qBAAqB,CAAA,EAAE;AAAA,IACrE,EAAE,QAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,uBAAuB,CAAA,EAAE;AAAA,IACzE,EAAE,QAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,uBAAuB,CAAA,EAAE;AAAA,IACzE,EAAE,QAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,uBAAuB,CAAA,EAAE;AAAA,IACzE,EAAE,QAAQ,UAAA,EAAY,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,uBAAuB,CAAA,EAAE;AAAA,IACzE,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,mBAAmB,CAAA,EAAE;AAAA,IACjE,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,mBAAmB,CAAA,EAAE;AAAA,IACjE,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,mBAAmB,CAAA,EAAE;AAAA,IACjE,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,mBAAmB,CAAA,EAAE;AAAA,IACjE,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,mBAAmB,CAAA,EAAE;AAAA,IACjE,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,mBAAmB,CAAA,EAAE;AAAA,IACjE,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,mBAAmB,CAAA,EAAE;AAAA,IACjE,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,MAAM,KAAA,EAAOA,mBAAA,CAAO,mBAAmB,CAAA;AAAE,GACnE;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO,MAAA;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAQ;AAAA;AAEZ,CAAC,CAAA;AAED,MAAM,QAAQ,CACZ;AAAA,EACE,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EACA,GAAA,KACG;AACH,EAAA,MAAM,YAAY,SAAA,IAAa,GAAA;AAC/B,EAAA,uBACEC,cAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACC,GAAG,KAAA;AAAA,MACJ,SAAA,EAAWC,MAAA,CAAG,YAAA,CAAa,EAAE,KAAA,EAAO,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,CAAA,EAAG,SAAS,CAAA;AAAA,MAE/E;AAAA;AAAA,GACH;AAEJ,CAAA;AAEA,KAAA,CAAM,WAAA,GAAc,MAAA;AAEb,MAAM,IAAA,GAAiCC,iBAAW,KAAK;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/components/Text/Text.tsx"],"sourcesContent":["import {\n ComponentProps,\n ComponentPropsWithRef,\n ElementType,\n ReactNode,\n forwardRef,\n} from 'react';\nimport { cn, cva } from '@/lib/cva';\nimport styles from './Text.module.css';\n\nexport type TextSize = 'xs' | 'sm' | 'md' | 'lg';\nexport type TextWeight = 'normal' | 'medium' | 'semibold' | 'bold' | 'mono';\nexport type TextAlignment = 'left' | 'center' | 'right';\nexport type TextColor = 'default' | 'muted' | 'danger' | 'disabled' | 'warning';\nexport type TextWrap = 'wrap' | 'nowrap' | 'break-word' | 'break-all';\n\nexport interface TextProps<T extends ElementType = 'p'> {\n /** The text content to display */\n children: ReactNode;\n /** The text alignment */\n align?: TextAlignment;\n /** The text color variant */\n color?: TextColor;\n /** The font size of the text */\n size?: TextSize;\n /** The font weight of the text */\n weight?: TextWeight;\n /** Additional CSS class name */\n className?: string;\n /** Custom component to render as */\n component?: T;\n /** Whether the text should fill the full width of its container */\n fillWidth?: boolean;\n /** Text wrapping, unset by default - inherits from parent */\n wrap?: TextWrap;\n}\n\ntype TextPolymorphicComponent = <T extends ElementType = 'p'>(\n props: Omit<ComponentProps<T>, keyof TextProps<T>> & TextProps<T>\n) => ReactNode;\n\nconst textVariants = cva(styles.text, {\n variants: {\n color: {\n default: styles['text_color_default'],\n muted: styles['text_color_muted'],\n danger: styles['text_color_danger'],\n disabled: styles['text_color_disabled'],\n warning: styles['text_color_warning'],\n },\n align: {\n left: styles['text_align_left'],\n center: styles['text_align_center'],\n right: styles['text_align_right'],\n },\n fillWidth: {\n true: styles['text_fill-width'],\n },\n wrap: {\n wrap: styles['text_wrap_wrap'],\n nowrap: styles['text_wrap_nowrap'],\n 'break-word': styles['text_wrap_break-word'],\n 'break-all': styles['text_wrap_break-all'],\n },\n size: {\n xs: '',\n sm: '',\n md: '',\n lg: '',\n },\n weight: {\n normal: '',\n medium: '',\n semibold: '',\n bold: '',\n mono: '',\n },\n },\n compoundVariants: [\n { weight: 'normal', size: 'xs', class: styles['text_font_normal-xs'] },\n { weight: 'normal', size: 'sm', class: styles['text_font_normal-sm'] },\n { weight: 'normal', size: 'md', class: styles['text_font_normal-md'] },\n { weight: 'normal', size: 'lg', class: styles['text_font_normal-lg'] },\n { weight: 'medium', size: 'xs', class: styles['text_font_medium-xs'] },\n { weight: 'medium', size: 'sm', class: styles['text_font_medium-sm'] },\n { weight: 'medium', size: 'md', class: styles['text_font_medium-md'] },\n { weight: 'medium', size: 'lg', class: styles['text_font_medium-lg'] },\n { weight: 'semibold', size: 'xs', class: styles['text_font_semibold-xs'] },\n { weight: 'semibold', size: 'sm', class: styles['text_font_semibold-sm'] },\n { weight: 'semibold', size: 'md', class: styles['text_font_semibold-md'] },\n { weight: 'semibold', size: 'lg', class: styles['text_font_semibold-lg'] },\n { weight: 'bold', size: 'xs', class: styles['text_font_bold-xs'] },\n { weight: 'bold', size: 'sm', class: styles['text_font_bold-sm'] },\n { weight: 'bold', size: 'md', class: styles['text_font_bold-md'] },\n { weight: 'bold', size: 'lg', class: styles['text_font_bold-lg'] },\n { weight: 'mono', size: 'xs', class: styles['text_font_mono-xs'] },\n { weight: 'mono', size: 'sm', class: styles['text_font_mono-sm'] },\n { weight: 'mono', size: 'md', class: styles['text_font_mono-md'] },\n { weight: 'mono', size: 'lg', class: styles['text_font_mono-lg'] },\n ],\n defaultVariants: {\n color: 'default',\n align: 'left',\n size: 'md',\n weight: 'normal',\n },\n});\n\nconst _Text = <T extends ElementType = 'p'>(\n {\n align,\n color,\n size,\n weight,\n className,\n children,\n component,\n fillWidth,\n wrap,\n ...props\n }: Omit<ComponentProps<T>, keyof TextProps<T>> & TextProps<T>,\n ref: ComponentPropsWithRef<T>['ref']\n) => {\n const Component = component ?? 'p';\n return (\n <Component\n ref={ref}\n {...props}\n className={cn(\n textVariants({ color, align, size, weight, fillWidth, wrap }),\n className\n )}\n >\n {children}\n </Component>\n );\n};\n\n_Text.displayName = 'Text';\n\nexport const Text: TextPolymorphicComponent = forwardRef(_Text);\n"],"names":["cva","styles","jsx","cn","forwardRef"],"mappings":"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"}
@@ -195,7 +195,13 @@ const ToastProvider = ({
195
195
  id
196
196
  ))
197
197
  ] }),
198
- /* @__PURE__ */ jsxRuntime.jsx(RadixUIToast__namespace.Viewport, { className: cva.cn(viewportVariants({ align })) })
198
+ /* @__PURE__ */ jsxRuntime.jsx(
199
+ RadixUIToast__namespace.Viewport,
200
+ {
201
+ "aria-live": "off",
202
+ className: cva.cn(viewportVariants({ align }))
203
+ }
204
+ )
199
205
  ]
200
206
  },
201
207
  `toast-provider-${align}`
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/components/Toast/Toast.tsx"],"sourcesContent":["import { createContext, useEffect, useState } from 'react';\nimport * as RadixUIToast from '@radix-ui/react-toast';\nimport { cn, cva } from '@/lib/cva';\nimport { toastsEventEmitter } from './toastEmitter';\nimport { Icon, type IconName, type IconProps } from '@/components/Icon';\nimport { IconButton } from '@/components/IconButton';\nimport { Button } from '@/components/Button';\nimport { ToastContextProps, ToastProps, ToastAlignment, ToastType } from './Toast.types';\nimport styles from './Toast.module.css';\n\nexport const ToastContext = createContext<ToastContextProps>({\n createToast: () => null,\n});\n\nconst toastIconVariants = cva(styles.toast__icon, {\n variants: {\n type: {\n default: styles['toast__icon_type_default'],\n success: styles['toast__icon_type_success'],\n warning: styles['toast__icon_type_warning'],\n danger: styles['toast__icon_type_danger'],\n },\n },\n defaultVariants: {\n type: 'default',\n },\n});\n\n// Lazy wrapper to avoid circular dependency issues at module load time\nconst ToastIcon = ({\n $type = 'default',\n className,\n ...props\n}: IconProps & { $type?: ToastType }) => (\n <Icon\n {...props}\n className={cn(toastIconVariants({ type: $type }), className)}\n />\n);\n\nconst viewportVariants = cva(styles['toast-viewport'], {\n variants: {\n align: {\n start: styles['toast-viewport_align_start'],\n end: styles['toast-viewport_align_end'],\n },\n },\n defaultVariants: {\n align: 'end',\n },\n});\n\nexport const Toast = ({\n type,\n toastType = 'foreground',\n title,\n description,\n actions = [],\n duration,\n onClose,\n className,\n ...props\n}: ToastProps & { onClose: (open: boolean) => void }) => {\n let iconName = '';\n if (type === 'default') {\n iconName = 'info-in-circle';\n } else if (type === 'success') {\n iconName = 'check';\n } else if (type && ['danger', 'warning'].includes(type)) {\n iconName = 'warning';\n }\n return (\n <RadixUIToast.Root\n onOpenChange={onClose}\n duration={duration}\n type={toastType}\n {...props}\n className={cn(styles.toast, className)}\n >\n <RadixUIToast.Title className={styles.toast__header}>\n {iconName.length > 0 && (\n <ToastIcon\n name={iconName as IconName}\n $type={type}\n />\n )}\n <div className={styles.toast__title}>{title}</div>\n <RadixUIToast.Close asChild>\n <IconButton\n icon=\"cross\"\n type=\"ghost\"\n />\n </RadixUIToast.Close>\n </RadixUIToast.Title>\n {(description || actions.length > 0) && (\n <div className={styles['toast__description-container']}>\n <RadixUIToast.Description className={styles['toast__description-content']}>\n {description}\n </RadixUIToast.Description>\n {actions.length > 0 && (\n <div className={styles['toast__description-content']}>\n {actions.map(({ altText, ...btnProps }) => (\n <RadixUIToast.Action\n altText={altText}\n asChild\n key={altText}\n >\n <div>\n <Button {...btnProps} />\n </div>\n </RadixUIToast.Action>\n ))}\n </div>\n )}\n </div>\n )}\n </RadixUIToast.Root>\n );\n};\n\nexport interface ToastProviderProps extends RadixUIToast.ToastProviderProps {\n align?: ToastAlignment;\n}\n\nexport const ToastProvider = ({\n children,\n align = 'end',\n ...props\n}: ToastProviderProps) => {\n const [toasts, setToasts] = useState<Record<ToastAlignment, Map<string, ToastProps>>>({\n start: new Map(),\n end: new Map(),\n });\n\n useEffect(() => {\n const listener = (toast: ToastProps) => {\n setToasts(currentToasts => {\n const alignment = toast.align ?? 'end';\n const newToasts = { ...currentToasts };\n const map = new Map(newToasts[alignment]);\n map.set(toast?.id ?? String(Date.now()), toast);\n newToasts[alignment] = map;\n return newToasts;\n });\n };\n\n toastsEventEmitter.on(listener);\n\n return () => toastsEventEmitter.off(listener);\n }, []);\n\n const onClose = (id: string) => (open: boolean) => {\n if (!open) {\n setToasts(currentToasts => {\n const newToasts = { ...currentToasts };\n const map = new Map(newToasts[align]);\n map.delete(id);\n newToasts[align] = map;\n return newToasts;\n });\n }\n };\n\n const value = {\n createToast: (toast: ToastProps, toastAlign: ToastAlignment = align) => {\n setToasts(currentToasts => {\n const newToasts = { ...currentToasts };\n const map = new Map(newToasts[toastAlign]);\n map.set(toast?.id ?? String(Date.now()), toast);\n newToasts[toastAlign] = map;\n return newToasts;\n });\n },\n };\n\n return (\n <RadixUIToast.Provider\n swipeDirection={align === 'start' ? 'left' : 'right'}\n key={`toast-provider-${align}`}\n {...props}\n >\n <ToastContext.Provider value={value}>\n {children}\n {Array.from(toasts[align]).map(([id, toast]) => (\n <Toast\n key={id}\n {...toast}\n onClose={onClose(id)}\n />\n ))}\n </ToastContext.Provider>\n <RadixUIToast.Viewport className={cn(viewportVariants({ align }))} />\n </RadixUIToast.Provider>\n );\n};\n"],"names":["createContext","cva","styles","jsx","Icon","cn","jsxs","RadixUIToast","IconButton","Button","useState","useEffect","toastsEventEmitter"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/components/Toast/Toast.tsx"],"sourcesContent":["import { createContext, useEffect, useState } from 'react';\nimport * as RadixUIToast from '@radix-ui/react-toast';\nimport { cn, cva } from '@/lib/cva';\nimport { toastsEventEmitter } from './toastEmitter';\nimport { Icon, type IconName, type IconProps } from '@/components/Icon';\nimport { IconButton } from '@/components/IconButton';\nimport { Button } from '@/components/Button';\nimport { ToastContextProps, ToastProps, ToastAlignment, ToastType } from './Toast.types';\nimport styles from './Toast.module.css';\n\nexport const ToastContext = createContext<ToastContextProps>({\n createToast: () => null,\n});\n\nconst toastIconVariants = cva(styles.toast__icon, {\n variants: {\n type: {\n default: styles['toast__icon_type_default'],\n success: styles['toast__icon_type_success'],\n warning: styles['toast__icon_type_warning'],\n danger: styles['toast__icon_type_danger'],\n },\n },\n defaultVariants: {\n type: 'default',\n },\n});\n\n// Lazy wrapper to avoid circular dependency issues at module load time\nconst ToastIcon = ({\n $type = 'default',\n className,\n ...props\n}: IconProps & { $type?: ToastType }) => (\n <Icon\n {...props}\n className={cn(toastIconVariants({ type: $type }), className)}\n />\n);\n\nconst viewportVariants = cva(styles['toast-viewport'], {\n variants: {\n align: {\n start: styles['toast-viewport_align_start'],\n end: styles['toast-viewport_align_end'],\n },\n },\n defaultVariants: {\n align: 'end',\n },\n});\n\nexport const Toast = ({\n type,\n toastType = 'foreground',\n title,\n description,\n actions = [],\n duration,\n onClose,\n className,\n ...props\n}: ToastProps & { onClose: (open: boolean) => void }) => {\n let iconName = '';\n if (type === 'default') {\n iconName = 'info-in-circle';\n } else if (type === 'success') {\n iconName = 'check';\n } else if (type && ['danger', 'warning'].includes(type)) {\n iconName = 'warning';\n }\n return (\n <RadixUIToast.Root\n onOpenChange={onClose}\n duration={duration}\n type={toastType}\n {...props}\n className={cn(styles.toast, className)}\n >\n <RadixUIToast.Title className={styles.toast__header}>\n {iconName.length > 0 && (\n <ToastIcon\n name={iconName as IconName}\n $type={type}\n />\n )}\n <div className={styles.toast__title}>{title}</div>\n <RadixUIToast.Close asChild>\n <IconButton\n icon=\"cross\"\n type=\"ghost\"\n />\n </RadixUIToast.Close>\n </RadixUIToast.Title>\n {(description || actions.length > 0) && (\n <div className={styles['toast__description-container']}>\n <RadixUIToast.Description className={styles['toast__description-content']}>\n {description}\n </RadixUIToast.Description>\n {actions.length > 0 && (\n <div className={styles['toast__description-content']}>\n {actions.map(({ altText, ...btnProps }) => (\n <RadixUIToast.Action\n altText={altText}\n asChild\n key={altText}\n >\n <div>\n <Button {...btnProps} />\n </div>\n </RadixUIToast.Action>\n ))}\n </div>\n )}\n </div>\n )}\n </RadixUIToast.Root>\n );\n};\n\nexport interface ToastProviderProps extends RadixUIToast.ToastProviderProps {\n align?: ToastAlignment;\n}\n\nexport const ToastProvider = ({\n children,\n align = 'end',\n ...props\n}: ToastProviderProps) => {\n const [toasts, setToasts] = useState<Record<ToastAlignment, Map<string, ToastProps>>>({\n start: new Map(),\n end: new Map(),\n });\n\n useEffect(() => {\n const listener = (toast: ToastProps) => {\n setToasts(currentToasts => {\n const alignment = toast.align ?? 'end';\n const newToasts = { ...currentToasts };\n const map = new Map(newToasts[alignment]);\n map.set(toast?.id ?? String(Date.now()), toast);\n newToasts[alignment] = map;\n return newToasts;\n });\n };\n\n toastsEventEmitter.on(listener);\n\n return () => toastsEventEmitter.off(listener);\n }, []);\n\n const onClose = (id: string) => (open: boolean) => {\n if (!open) {\n setToasts(currentToasts => {\n const newToasts = { ...currentToasts };\n const map = new Map(newToasts[align]);\n map.delete(id);\n newToasts[align] = map;\n return newToasts;\n });\n }\n };\n\n const value = {\n createToast: (toast: ToastProps, toastAlign: ToastAlignment = align) => {\n setToasts(currentToasts => {\n const newToasts = { ...currentToasts };\n const map = new Map(newToasts[toastAlign]);\n map.set(toast?.id ?? String(Date.now()), toast);\n newToasts[toastAlign] = map;\n return newToasts;\n });\n },\n };\n\n return (\n <RadixUIToast.Provider\n swipeDirection={align === 'start' ? 'left' : 'right'}\n key={`toast-provider-${align}`}\n {...props}\n >\n <ToastContext.Provider value={value}>\n {children}\n {Array.from(toasts[align]).map(([id, toast]) => (\n <Toast\n key={id}\n {...toast}\n onClose={onClose(id)}\n />\n ))}\n </ToastContext.Provider>\n {/* aria-live exempts the viewport from the aria-hidden sweep modal layers\n run, keeping toasts over a Dialog or Select in the accessibility tree. */}\n <RadixUIToast.Viewport\n aria-live=\"off\"\n className={cn(viewportVariants({ align }))}\n />\n </RadixUIToast.Provider>\n );\n};\n"],"names":["createContext","cva","styles","jsx","Icon","cn","jsxs","RadixUIToast","IconButton","Button","useState","useEffect","toastsEventEmitter"],"mappings":"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"}
@@ -972,6 +972,26 @@
972
972
  width: 100%;
973
973
  }
974
974
 
975
+ .text_wrap_wrap__RR--m {
976
+ white-space: normal;
977
+ }
978
+
979
+ .text_wrap_nowrap__DCK82 {
980
+ white-space: nowrap;
981
+ }
982
+
983
+ .text_wrap_break-word__Oc5qD {
984
+ white-space: normal;
985
+ /* `anywhere` rather than `break-word` so long words also shrink the
986
+ min-content width, which is what flex and table layouts measure. */
987
+ overflow-wrap: anywhere;
988
+ }
989
+
990
+ .text_wrap_break-all__EdYJs {
991
+ white-space: normal;
992
+ word-break: break-all;
993
+ }
994
+
975
995
  /* font shorthand depends on both size and weight; one class per pairing
976
996
  emits a single `font:` declaration. */
977
997
 
@@ -1356,6 +1376,11 @@
1356
1376
  cursor: pointer;
1357
1377
  }
1358
1378
 
1379
+ .iconbutton__G-cEu:focus-visible {
1380
+ outline: 2px solid var(--click-global-color-outline-default);
1381
+ outline-offset: 2px;
1382
+ }
1383
+
1359
1384
  .iconbutton_size_sm__tT3BV {
1360
1385
  padding: var(--click-button-iconButton-sm-space-y)
1361
1386
  var(--click-button-iconButton-sm-space-x);
@@ -4208,9 +4233,12 @@ div:active + .topbadge__E79OZ {
4208
4233
  colors are set inline per state via --codeblock-button, matching the
4209
4234
  --codeblock-numbers pattern so both track the ThemeProvider runtime. */
4210
4235
  --codeblock-button: initial;
4236
+ /* assign context to be above pseudo-element
4237
+ can be cleaned up when background is a regular color variable with alpha */
4238
+ z-index: 1;
4211
4239
  padding: 0;
4212
4240
  border: 0;
4213
- color: var(--codeblock-button, inherit);
4241
+ color: var(--codeblock-button, inherit);
4214
4242
  }
4215
4243
 
4216
4244
  .codeblock__highlighter__t4Xol {
@@ -4226,13 +4254,42 @@ div:active + .topbadge__E79OZ {
4226
4254
 
4227
4255
  .codeblock__button-container__D6yob {
4228
4256
  display: flex;
4257
+ opacity: 0;
4229
4258
  position: absolute;
4230
4259
  top: var(--click-codeblock-space-y);
4231
4260
  right: var(--click-codeblock-space-x);
4232
- gap: 0.625rem;
4261
+ padding: var(--spaces-1);
4262
+ gap: var(--spaces-1);
4263
+ pointer-events: none;
4264
+ transition: opacity 200ms ease-in-out;
4233
4265
  }
4266
+
4267
+ .codeblock__pRWOC:hover .codeblock__button-container__D6yob,
4268
+ .codeblock__pRWOC:focus-within .codeblock__button-container__D6yob {
4269
+ opacity: 1;
4270
+ pointer-events: auto;
4271
+ transition-duration: 150ms;
4234
4272
  }
4235
- @layer clickui {.content__fI-1- {
4273
+
4274
+ /* this element can be refactored to a color var with alpha when available */
4275
+ .codeblock__button-container__D6yob::before {
4276
+ content: "";
4277
+ opacity: 0.85;
4278
+ position: absolute;
4279
+ z-index: 0;
4280
+ inset: 0;
4281
+ border-radius: var(--spaces-1);
4282
+ }
4283
+
4284
+ /* custom conditional theming can be later replaced with semantic color tokens */
4285
+ [data-cui-theme="light"] .codeblock__button-container__D6yob::before {
4286
+ background: var(--palette-indigo-100);
4287
+ }
4288
+
4289
+ [data-cui-theme="dark"] .codeblock__button-container__D6yob::before {
4290
+ background: var(--palette-neutral-900);
4291
+ }
4292
+ }@layer clickui {.content__fI-1- {
4236
4293
  display: flex;
4237
4294
  overflow: hidden;
4238
4295
  flex-direction: column;
@@ -4772,7 +4829,9 @@ div:active + .topbadge__E79OZ {
4772
4829
  }
4773
4830
  }
4774
4831
  }
4775
- @layer clickui {.menu-panel__-IeVm {
4832
+ @layer clickui {/* stylelint-disable custom-property-pattern -- design tokens use camelCase (e.g. iconButton) */
4833
+
4834
+ .menu-panel__-IeVm {
4776
4835
  display: block;
4777
4836
  padding: var(--click-popover-space-y) var(--click-popover-space-x);
4778
4837
  border: 1px solid var(--click-popover-color-panel-stroke-default);
@@ -4797,18 +4856,16 @@ div:active + .topbadge__E79OZ {
4797
4856
  cursor: pointer;
4798
4857
  }
4799
4858
 
4800
- .close-button__fpjhc {
4859
+ .menu-panel__-IeVm .close-button__fpjhc {
4860
+ /* Offset by the button's own padding so the cross sits at the panel inset */
4801
4861
  position: absolute;
4802
- top: var(--click-popover-space-y);
4803
- right: var(--click-popover-space-x);
4804
- width: var(--click-popover-icon-size-width);
4805
- height: var(--click-popover-icon-size-height);
4862
+ top: calc(var(--click-popover-space-y) - var(--click-button-iconButton-sm-space-y));
4863
+ right: calc(var(--click-popover-space-x) - var(--click-button-iconButton-sm-space-x));
4806
4864
  }
4807
4865
  }
4808
4866
  @layer clickui {.link__Ly-e3 {
4809
4867
  display: inline-flex;
4810
4868
  margin: 0;
4811
- margin-right: var(--link-gap);
4812
4869
  align-items: center;
4813
4870
  gap: var(--link-gap);
4814
4871
  color: var(--click-global-color-text-link-default);