@j2-health/design-system 0.3.2 → 0.5.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 (138) hide show
  1. package/README.md +84 -31
  2. package/dist/index.cjs +4 -0
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.js +4 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/src/components/alert/Alert.cjs +12 -2
  8. package/dist/src/components/alert/Alert.cjs.map +1 -1
  9. package/dist/src/components/alert/Alert.d.ts +1 -1
  10. package/dist/src/components/alert/Alert.js +12 -2
  11. package/dist/src/components/alert/Alert.js.map +1 -1
  12. package/dist/src/components/alert/Alert.module.css.cjs +1 -1
  13. package/dist/src/components/alert/Alert.module.css.js +1 -1
  14. package/dist/src/components/barchart/BarChart.cjs +2 -2
  15. package/dist/src/components/barchart/BarChart.cjs.map +1 -1
  16. package/dist/src/components/barchart/BarChart.js +2 -2
  17. package/dist/src/components/barchart/BarChart.js.map +1 -1
  18. package/dist/src/components/card/Card.cjs +1 -1
  19. package/dist/src/components/card/Card.cjs.map +1 -1
  20. package/dist/src/components/card/Card.js +1 -1
  21. package/dist/src/components/card/Card.js.map +1 -1
  22. package/dist/src/components/collapse/Collapse.module.css.cjs +3 -3
  23. package/dist/src/components/collapse/Collapse.module.css.js +3 -3
  24. package/dist/src/components/drawer/Drawer.cjs +3 -1
  25. package/dist/src/components/drawer/Drawer.cjs.map +1 -1
  26. package/dist/src/components/drawer/Drawer.js +3 -1
  27. package/dist/src/components/drawer/Drawer.js.map +1 -1
  28. package/dist/src/components/form/Form.cjs +21 -4
  29. package/dist/src/components/form/Form.cjs.map +1 -1
  30. package/dist/src/components/form/Form.d.ts +10 -3
  31. package/dist/src/components/form/Form.js +20 -3
  32. package/dist/src/components/form/Form.js.map +1 -1
  33. package/dist/src/components/form/FormItem.cjs +42 -0
  34. package/dist/src/components/form/FormItem.cjs.map +1 -0
  35. package/dist/src/components/form/FormItem.d.ts +10 -0
  36. package/dist/src/components/form/FormItem.js +42 -0
  37. package/dist/src/components/form/FormItem.js.map +1 -0
  38. package/dist/src/components/form/FormItemFieldContext.cjs +8 -0
  39. package/dist/src/components/form/FormItemFieldContext.cjs.map +1 -0
  40. package/dist/src/components/form/FormItemFieldContext.d.ts +2 -0
  41. package/dist/src/components/form/FormItemFieldContext.js +8 -0
  42. package/dist/src/components/form/FormItemFieldContext.js.map +1 -0
  43. package/dist/src/components/form/FormikField.cjs +20 -0
  44. package/dist/src/components/form/FormikField.cjs.map +1 -0
  45. package/dist/src/components/form/FormikField.d.ts +8 -0
  46. package/dist/src/components/form/FormikField.js +20 -0
  47. package/dist/src/components/form/FormikField.js.map +1 -0
  48. package/dist/src/components/input/AntdInput.d.ts +77 -31
  49. package/dist/src/components/input/AntdSearchInput.d.ts +82 -30
  50. package/dist/src/components/input/Input.cjs +29 -3
  51. package/dist/src/components/input/Input.cjs.map +1 -1
  52. package/dist/src/components/input/Input.d.ts +4 -3
  53. package/dist/src/components/input/Input.js +29 -3
  54. package/dist/src/components/input/Input.js.map +1 -1
  55. package/dist/src/components/inputnumber/InputNumber.cjs +20 -5
  56. package/dist/src/components/inputnumber/InputNumber.cjs.map +1 -1
  57. package/dist/src/components/inputnumber/InputNumber.d.ts +4 -3
  58. package/dist/src/components/inputnumber/InputNumber.js +19 -4
  59. package/dist/src/components/inputnumber/InputNumber.js.map +1 -1
  60. package/dist/src/components/inputnumber/InputNumber.module.css.cjs +1 -1
  61. package/dist/src/components/inputnumber/InputNumber.module.css.js +1 -1
  62. package/dist/src/components/manageColumns/ManageColumnsItem.cjs +76 -0
  63. package/dist/src/components/manageColumns/ManageColumnsItem.cjs.map +1 -0
  64. package/dist/src/components/manageColumns/ManageColumnsItem.d.ts +7 -0
  65. package/dist/src/components/manageColumns/ManageColumnsItem.js +76 -0
  66. package/dist/src/components/manageColumns/ManageColumnsItem.js.map +1 -0
  67. package/dist/src/components/manageColumns/ManageColumnsPanel.cjs +79 -0
  68. package/dist/src/components/manageColumns/ManageColumnsPanel.cjs.map +1 -0
  69. package/dist/src/components/manageColumns/ManageColumnsPanel.d.ts +18 -0
  70. package/dist/src/components/manageColumns/ManageColumnsPanel.js +79 -0
  71. package/dist/src/components/manageColumns/ManageColumnsPanel.js.map +1 -0
  72. package/dist/src/components/manageColumns/SelectAll.cjs +27 -0
  73. package/dist/src/components/manageColumns/SelectAll.cjs.map +1 -0
  74. package/dist/src/components/manageColumns/SelectAll.d.ts +15 -0
  75. package/dist/src/components/manageColumns/SelectAll.js +27 -0
  76. package/dist/src/components/manageColumns/SelectAll.js.map +1 -0
  77. package/dist/src/components/manageColumns/index.d.ts +4 -0
  78. package/dist/src/components/modal/Modal.cjs +0 -1
  79. package/dist/src/components/modal/Modal.cjs.map +1 -1
  80. package/dist/src/components/modal/Modal.js +0 -1
  81. package/dist/src/components/modal/Modal.js.map +1 -1
  82. package/dist/src/components/notification/Notification.module.css.cjs +1 -1
  83. package/dist/src/components/notification/Notification.module.css.js +1 -1
  84. package/dist/src/components/notification/useNotification.cjs +5 -2
  85. package/dist/src/components/notification/useNotification.cjs.map +1 -1
  86. package/dist/src/components/notification/useNotification.js +5 -2
  87. package/dist/src/components/notification/useNotification.js.map +1 -1
  88. package/dist/src/components/pagination/Pagination.cjs +2 -0
  89. package/dist/src/components/pagination/Pagination.cjs.map +1 -1
  90. package/dist/src/components/pagination/Pagination.js +2 -0
  91. package/dist/src/components/pagination/Pagination.js.map +1 -1
  92. package/dist/src/components/popover/Popover.cjs +3 -1
  93. package/dist/src/components/popover/Popover.cjs.map +1 -1
  94. package/dist/src/components/popover/Popover.d.ts +1 -1
  95. package/dist/src/components/popover/Popover.js +3 -1
  96. package/dist/src/components/popover/Popover.js.map +1 -1
  97. package/dist/src/components/popover/Popover.module.css.cjs +9 -9
  98. package/dist/src/components/popover/Popover.module.css.js +9 -9
  99. package/dist/src/components/select/Select.cjs +29 -13
  100. package/dist/src/components/select/Select.cjs.map +1 -1
  101. package/dist/src/components/select/Select.js +29 -13
  102. package/dist/src/components/select/Select.js.map +1 -1
  103. package/dist/src/components/select/SummarizedSelect.cjs.map +1 -1
  104. package/dist/src/components/select/SummarizedSelect.js.map +1 -1
  105. package/dist/src/components/select/SummarizedSelect.module.css.cjs +8 -8
  106. package/dist/src/components/select/SummarizedSelect.module.css.js +8 -8
  107. package/dist/src/components/steps/Steps.cjs +14 -4
  108. package/dist/src/components/steps/Steps.cjs.map +1 -1
  109. package/dist/src/components/steps/Steps.d.ts +3 -3
  110. package/dist/src/components/steps/Steps.js +14 -4
  111. package/dist/src/components/steps/Steps.js.map +1 -1
  112. package/dist/src/components/table/Table.cjs +1 -1
  113. package/dist/src/components/table/Table.cjs.map +1 -1
  114. package/dist/src/components/table/Table.d.ts +4 -1
  115. package/dist/src/components/table/Table.js +1 -1
  116. package/dist/src/components/table/Table.js.map +1 -1
  117. package/dist/src/components/tag/Tag.cjs +4 -0
  118. package/dist/src/components/tag/Tag.cjs.map +1 -1
  119. package/dist/src/components/tag/Tag.d.ts +1 -1
  120. package/dist/src/components/tag/Tag.js +4 -0
  121. package/dist/src/components/tag/Tag.js.map +1 -1
  122. package/dist/src/components/vennDiagram/VennDiagram.cjs +1 -1
  123. package/dist/src/components/vennDiagram/VennDiagram.cjs.map +1 -1
  124. package/dist/src/components/vennDiagram/VennDiagram.js +1 -1
  125. package/dist/src/components/vennDiagram/VennDiagram.js.map +1 -1
  126. package/dist/src/index.d.ts +1 -1
  127. package/dist/style.css +92 -78
  128. package/dist/tailwind.cjs +4 -0
  129. package/dist/tailwind.cjs.map +1 -1
  130. package/dist/tailwind.config.d.ts +6 -0
  131. package/dist/tailwind.js +4 -0
  132. package/dist/tailwind.js.map +1 -1
  133. package/package.json +38 -26
  134. package/src/stylesheets/base.css +322 -0
  135. package/src/stylesheets/fonts.css +1 -0
  136. package/src/stylesheets/index.css +3 -327
  137. package/src/stylesheets/tailwind-v3.css +3 -0
  138. package/src/stylesheets/tailwind.css +4 -0
@@ -1 +1 @@
1
- {"version":3,"file":"SummarizedSelect.js","sources":["../../../../src/components/select/SummarizedSelect.tsx"],"sourcesContent":["import {\n Dropdown as AntdDropdown,\n Select,\n Spin,\n Input,\n SelectProps,\n InputRef,\n Typography,\n} from 'antd'\nimport { DefaultOptionType } from 'antd/es/select'\nimport { useState, useMemo, useRef, useEffect } from 'react'\nimport { LoadingOutlined } from '@ant-design/icons'\nimport type { FlattenOptionData } from 'rc-select/lib/interface'\nimport * as icons from '../icons'\nimport { Tag } from '../tag'\nimport cx from 'classnames'\n\nimport styles from './SummarizedSelect.module.css'\n\ntype Option = DefaultOptionType\ntype OptionWithLogo = Option & {\n logo: React.ReactNode\n}\n\ntype GroupOption = {\n label: string\n options: Option[]\n}\n\nexport type SelectOption = Option | GroupOption | OptionWithLogo\n\nexport type SummarizedSelectVariant = SelectProps['variant'] | 'headlined'\n\nexport type SummarizedSelectTrigger = 'select' | 'dropdown'\n\ntype BaseProps = Omit<\n SelectProps<string | string[], SelectOption>,\n 'mode' | 'value' | 'onChange' | 'variant'\n> & {\n searchPlaceholder?: string\n formControlPlaceholder?: string\n rootClassName?: string\n popupClassName?: string\n variant?: SummarizedSelectVariant\n /**\n * Shape of the control that opens the popup.\n * - `'select'` (default): antd Select, styled by `variant`.\n * - `'dropdown'`: antd Dropdown with a `Typography.Link` target (label + caret).\n * Ignores `variant` — the trigger is always a link.\n */\n trigger?: SummarizedSelectTrigger\n defaultOpen?: boolean\n\n loading?: boolean\n}\n\ntype SingleProps = {\n multiple?: false\n renderLabel?: undefined\n value: string | undefined\n onChange: (newValue: string) => void\n}\n\ntype MultiProps = {\n multiple: true\n renderLabel: (count: number) => string\n value: string[]\n onChange: (newValue: string[]) => void\n}\n\nexport type Props = BaseProps & (SingleProps | MultiProps)\n\nconst isGroupOption = (option: SelectOption): option is GroupOption => {\n return 'options' in option\n}\n\nconst getAllOptions = (options: SelectOption[] | undefined): Option[] => {\n if (!options) return []\n\n return options.flatMap((option) =>\n isGroupOption(option) ? option.options : [option]\n )\n}\n\nconst filterOptions = (\n options: SelectOption[] | undefined,\n searchValue: string\n): SelectOption[] => {\n if (!options) return []\n if (!searchValue) return options\n\n return options\n .map((option) => {\n if (isGroupOption(option)) {\n const filteredSubOptions = option.options.filter((subOption) =>\n subOption.label\n ?.toString()\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n )\n return filteredSubOptions.length > 0\n ? { ...option, options: filteredSubOptions }\n : null\n } else {\n return option.label\n ?.toString()\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n ? option\n : null\n }\n })\n .filter((option): option is SelectOption => option !== null)\n}\n\nexport function SummarizedSelect({\n searchPlaceholder,\n formControlPlaceholder,\n loading,\n multiple,\n value,\n onChange,\n options,\n renderLabel,\n rootClassName,\n popupClassName,\n variant,\n trigger = 'select',\n defaultOpen = false,\n ...props\n}: Props) {\n const isHeadline = variant === 'headlined'\n const antVariant = isHeadline ? 'borderless' : variant\n const [searchValue, setSearchValue] = useState('')\n const [focusTrigger, setFocusTrigger] = useState(defaultOpen ? 1 : 0)\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const inputRef = useRef<InputRef>(null)\n const measureSpanRef = useRef<HTMLSpanElement>(null)\n const [measuredWidth, setMeasuredWidth] = useState<number>()\n\n const displayText = useMemo(() => {\n if (multiple && value.length > 0) {\n return renderLabel(value.length)\n }\n if (!multiple && value) {\n const option = getAllOptions(options).find((opt) => opt.value === value)\n return option ? String(option.label) : String(value)\n }\n return formControlPlaceholder ?? ''\n }, [multiple, value, options, renderLabel, formControlPlaceholder])\n\n useEffect(() => {\n if (!measureSpanRef.current) return\n // padding (22px = 11px each side) + arrow (18px) + border (6px)\n setMeasuredWidth(Math.ceil(measureSpanRef.current.offsetWidth) + 46)\n }, [displayText])\n\n useEffect(() => {\n if (focusTrigger > 0) {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setTimeout(() => {\n inputRef.current?.focus({ cursor: 'end' })\n }, 100)\n })\n })\n }\n }, [focusTrigger])\n\n const filteredOptions = useMemo(() => {\n return filterOptions(options, searchValue)\n }, [searchValue, options])\n\n const flatFilteredOptions = useMemo(() => {\n return getAllOptions(filteredOptions)\n }, [filteredOptions])\n\n const allFlatOptions = useMemo(() => {\n return getAllOptions(options)\n }, [options])\n\n const handleTagClose = (removedValue: string) => {\n if (!multiple) return\n\n onChange(value.filter((x) => x !== removedValue))\n }\n\n const handleToggleAll = () => {\n if (!multiple) return\n\n const allFilteredValues = getAllOptions(filteredOptions).map(\n (opt) => opt.value as string\n )\n const someSelected = allFilteredValues.some((val) => value.includes(val))\n\n if (someSelected) {\n onChange(value.filter((val) => !allFilteredValues.includes(val)))\n }\n }\n\n const handleSelectFirstOption = () => {\n if (flatFilteredOptions.length === 0) return\n\n const firstOption = flatFilteredOptions[0]\n if (!firstOption) return\n\n const optionValue = firstOption.value as string\n\n if (multiple) {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue))\n } else {\n onChange([...value, optionValue])\n }\n } else {\n onChange(optionValue)\n setIsOpen(false)\n }\n }\n\n const handleOptionClick = (optionValue: string) => {\n if (multiple) {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue))\n } else {\n onChange([...value, optionValue])\n }\n } else {\n onChange(optionValue)\n setIsOpen(false)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n // Allow these navigation keys to bubble up to Select's native keyboard handler\n const navigationKeys = ['ArrowUp', 'ArrowDown']\n\n // Handle Enter - select first filtered option (custom behavior)\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n handleSelectFirstOption()\n return\n }\n\n // Handle Escape - close dropdown (custom behavior)\n if (e.key === 'Escape') {\n e.preventDefault()\n e.stopPropagation()\n setIsOpen(false)\n return\n }\n\n // For arrow keys, prevent cursor movement but allow propagation to Select\n if (navigationKeys.includes(e.key)) {\n e.preventDefault() // Prevents cursor from moving to start/end of input text\n // Do NOT call stopPropagation() - let event bubble to Select component\n return\n }\n\n // For all other keys (including Backspace), stop propagation\n // This prevents backspace from removing tags in multiple mode\n e.stopPropagation()\n }\n\n const optionRender = (option: FlattenOptionData<SelectOption>) => {\n if ('logo' in option.data && option.data.logo) {\n return (\n <div className=\"flex items-center gap-2\">\n <div className=\"h-4 shrink-0\">{option.data.logo}</div>\n <span className=\"overflow-ellipsis overflow-hidden\">\n {option.label}\n </span>\n </div>\n )\n }\n return <div>{option.label}</div>\n }\n\n const popupRender = (menu: React.ReactElement) => {\n const valueToLabel = (val: string) => {\n const option = allFlatOptions.find((opt) => opt.value === val)\n return option ? (option.label as string) : val\n }\n\n return (\n <div>\n <div className=\"mb-2 px-2 pb-2 border-b -mx-1 mt-1\">\n <Input\n ref={inputRef}\n key={focusTrigger}\n autoFocus\n placeholder={searchPlaceholder || 'Search...'}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value)\n e.stopPropagation()\n e.preventDefault()\n }}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n prefix={\n <icons.MagnifyingGlassIcon\n size={16}\n className=\"text-j2-text-placeholder\"\n />\n }\n allowClear\n />\n </div>\n {multiple && value.length > 0 ? (\n <div className=\"px-2 pb-2\">\n <div className=\"flex flex-wrap gap-y-1\">\n {(value as string[]).map((value) => (\n <Tag\n className=\"opacity-100 z-10 flex max-w-full\"\n key={value}\n status=\"default\"\n closable\n onClose={() => handleTagClose(value)}\n >\n <span\n className=\"overflow-ellipsis overflow-hidden\"\n title={valueToLabel(value)}\n >\n {valueToLabel(value)}\n </span>\n </Tag>\n ))}\n </div>\n </div>\n ) : null}\n <div\n className={cx(styles.menuContainer, 'rounded-lg', {\n [styles.headlinedMenuContainer]: isHeadline,\n [styles.menuContainerMultiple]: multiple,\n })}\n >\n {menu}\n </div>\n <div className=\"flex justify-between items-center\">\n {multiple && (\n <div className=\"w-full mt-1 pt-1 border-t border-j2-border-secondary\">\n <div\n aria-selected=\"false\"\n className={cx(\n 'ant-select-item ant-select-item-option w-full',\n styles.clearAllButton\n )}\n title=\"Clear all\"\n onClick={handleToggleAll}\n >\n <div className=\"ant-select-item-option-content text-center font-semibold\">\n Clear all\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n }\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open)\n if (open) {\n // Trigger focus by updating the counter\n setFocusTrigger((prev) => prev + 1)\n } else {\n setSearchValue('')\n }\n }\n\n const renderDropdownOptionRow = (option: Option) => {\n const optionValue = option.value as string\n const isSelected = multiple\n ? value.includes(optionValue)\n : value === optionValue\n const hasLogo = 'logo' in option && (option as OptionWithLogo).logo\n return (\n <div\n key={optionValue}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => handleOptionClick(optionValue)}\n className={cx(\n 'px-3 py-1.5 rounded cursor-pointer text-sm',\n isSelected\n ? 'bg-[var(--j2-color-primary)] text-white hover:bg-[var(--j2-color-primary)]'\n : 'hover:bg-[var(--j2-color-bg-hover)]'\n )}\n >\n {hasLogo ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"h-4 shrink-0\">\n {(option as OptionWithLogo).logo}\n </div>\n <span className=\"overflow-hidden overflow-ellipsis\">\n {option.label}\n </span>\n </div>\n ) : (\n option.label\n )}\n </div>\n )\n }\n\n const dropdownPopupRender = () => {\n const valueToLabel = (val: string) => {\n const option = allFlatOptions.find((opt) => opt.value === val)\n return option ? (option.label as string) : val\n }\n\n return (\n <div className=\"bg-white rounded-lg shadow-md p-2 min-w-[240px]\">\n <div className=\"pb-2 border-b border-j2-border-secondary\">\n <Input\n ref={inputRef}\n key={focusTrigger}\n autoFocus\n placeholder={searchPlaceholder || 'Search...'}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value)\n e.stopPropagation()\n }}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n prefix={\n <icons.MagnifyingGlassIcon\n size={16}\n className=\"text-j2-text-placeholder\"\n />\n }\n allowClear\n />\n </div>\n {multiple && value.length > 0 && (\n <div className=\"px-1 pt-2\">\n <div className=\"flex flex-wrap gap-y-1\">\n {(value as string[]).map((v) => (\n <Tag\n className=\"opacity-100 z-10 flex max-w-full\"\n key={v}\n status=\"default\"\n closable\n onClose={() => handleTagClose(v)}\n >\n <span\n className=\"overflow-ellipsis overflow-hidden\"\n title={valueToLabel(v)}\n >\n {valueToLabel(v)}\n </span>\n </Tag>\n ))}\n </div>\n </div>\n )}\n <div\n className=\"max-h-72 overflow-y-auto py-1\"\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n >\n {filteredOptions.length === 0 ? (\n <div className=\"px-3 py-2 text-sm text-[var(--j2-color-text-secondary)]\">\n No options found\n </div>\n ) : (\n filteredOptions.map((opt) => {\n if (isGroupOption(opt)) {\n return (\n <div key={`group-${opt.label}`}>\n <div className=\"px-3 pt-2 pb-1 text-xs font-semibold uppercase tracking-wide text-[var(--j2-color-text-tertiary)]\">\n {opt.label}\n </div>\n {opt.options.map(renderDropdownOptionRow)}\n </div>\n )\n }\n return renderDropdownOptionRow(opt)\n })\n )}\n </div>\n {multiple && value.length > 0 && (\n <div className=\"mt-1 pt-1 border-t border-j2-border-secondary\">\n <div\n role=\"button\"\n aria-label=\"Clear all\"\n title=\"Clear all\"\n onClick={handleToggleAll}\n className={cx(\n 'text-center font-semibold text-sm py-1.5 rounded cursor-pointer',\n styles.clearAllButton\n )}\n >\n Clear all\n </div>\n </div>\n )}\n </div>\n )\n }\n\n if (trigger === 'dropdown') {\n const hasSelection = multiple ? value.length > 0 : Boolean(value)\n const triggerContent = (\n <span className=\"inline-flex items-center gap-1\">\n {hasSelection ? displayText : (formControlPlaceholder ?? 'Select')}\n {loading ? (\n <Spin\n indicator={<LoadingOutlined spin />}\n size=\"small\"\n data-testid=\"loading-spinner\"\n />\n ) : (\n <icons.CaretDownIcon weight=\"regular\" data-testid=\"caret-down\" />\n )}\n </span>\n )\n\n return (\n <AntdDropdown\n open={isOpen}\n onOpenChange={handleOpenChange}\n trigger={['click']}\n disabled={props.disabled}\n popupRender={dropdownPopupRender}\n >\n <Typography.Link\n disabled={props.disabled}\n className={cx('inline-flex', rootClassName)}\n >\n {triggerContent}\n </Typography.Link>\n </AntdDropdown>\n )\n }\n\n return (\n <>\n <span\n ref={measureSpanRef}\n aria-hidden\n style={{\n position: 'absolute',\n visibility: 'hidden',\n whiteSpace: 'nowrap',\n fontSize: 'inherit',\n }}\n >\n {displayText}\n </span>\n <Select<string | string[], SelectOption>\n open={isOpen}\n showSearch={false}\n style={{ width: measuredWidth }}\n suffixIcon={\n loading ? (\n <Spin\n indicator={<LoadingOutlined spin />}\n size=\"small\"\n data-testid=\"loading-spinner\"\n />\n ) : (\n <icons.CaretDownIcon size={14} data-testid=\"caret-down\" />\n )\n }\n placeholder={formControlPlaceholder}\n mode={multiple ? 'multiple' : undefined}\n value={value}\n maxTagCount={0}\n maxTagPlaceholder={multiple ? () => renderLabel(value.length) : value}\n options={filteredOptions}\n onChange={(val) => {\n if (multiple) {\n if (Array.isArray(val)) {\n onChange(val)\n } else {\n throw new Error('Value should be an array in multiple mode')\n }\n } else {\n if (typeof val === 'string') {\n onChange(val)\n } else {\n throw new Error(\n 'Value should be a string in single selection mode'\n )\n }\n }\n }}\n popupRender={popupRender}\n optionRender={optionRender}\n onOpenChange={handleOpenChange}\n classNames={{\n root: cx(rootClassName, styles.summarizedSelect, {\n [styles.hemisphericSelect]:\n variant !== 'underlined' && variant !== 'headlined',\n [styles.isActive]:\n multiple &&\n value.length > 0 &&\n variant !== 'underlined' &&\n variant !== 'headlined',\n [styles.headlinedSelect]: isHeadline,\n }),\n popup: { root: popupClassName },\n }}\n variant={antVariant}\n {...props}\n />\n </>\n )\n}\n"],"names":["_a","icons.MagnifyingGlassIcon","value","icons.CaretDownIcon","AntdDropdown"],"mappings":"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"}
1
+ {"version":3,"file":"SummarizedSelect.js","sources":["../../../../src/components/select/SummarizedSelect.tsx"],"sourcesContent":["import {\n Dropdown as AntdDropdown,\n Select,\n Spin,\n Input,\n SelectProps,\n InputRef,\n Typography,\n} from 'antd'\nimport { DefaultOptionType } from 'antd/es/select'\nimport { useState, useMemo, useRef, useEffect } from 'react'\nimport { LoadingOutlined } from '@ant-design/icons'\nimport * as icons from '../icons'\nimport { Tag } from '../tag'\nimport cx from 'classnames'\n\nimport styles from './SummarizedSelect.module.css'\n\ntype Option = DefaultOptionType\ntype OptionWithLogo = Option & {\n logo: React.ReactNode\n}\n\ntype GroupOption = {\n label: string\n options: Option[]\n}\n\nexport type SelectOption = Option | GroupOption | OptionWithLogo\n\nexport type SummarizedSelectVariant = SelectProps['variant'] | 'headlined'\n\nexport type SummarizedSelectTrigger = 'select' | 'dropdown'\n\ntype BaseProps = Omit<\n SelectProps<string | string[], SelectOption>,\n 'mode' | 'value' | 'onChange' | 'variant'\n> & {\n searchPlaceholder?: string\n formControlPlaceholder?: string\n rootClassName?: string\n popupClassName?: string\n variant?: SummarizedSelectVariant\n /**\n * Shape of the control that opens the popup.\n * - `'select'` (default): antd Select, styled by `variant`.\n * - `'dropdown'`: antd Dropdown with a `Typography.Link` target (label + caret).\n * Ignores `variant` — the trigger is always a link.\n */\n trigger?: SummarizedSelectTrigger\n defaultOpen?: boolean\n\n loading?: boolean\n}\n\ntype SingleProps = {\n multiple?: false\n renderLabel?: undefined\n value: string | undefined\n onChange: (newValue: string) => void\n}\n\ntype MultiProps = {\n multiple: true\n renderLabel: (count: number) => string\n value: string[]\n onChange: (newValue: string[]) => void\n}\n\nexport type Props = BaseProps & (SingleProps | MultiProps)\n\nconst isGroupOption = (option: SelectOption): option is GroupOption => {\n return 'options' in option\n}\n\nconst getAllOptions = (options: SelectOption[] | undefined): Option[] => {\n if (!options) return []\n\n return options.flatMap((option) =>\n isGroupOption(option) ? option.options : [option]\n )\n}\n\nconst filterOptions = (\n options: SelectOption[] | undefined,\n searchValue: string\n): SelectOption[] => {\n if (!options) return []\n if (!searchValue) return options\n\n return options\n .map((option) => {\n if (isGroupOption(option)) {\n const filteredSubOptions = option.options.filter((subOption) =>\n subOption.label\n ?.toString()\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n )\n return filteredSubOptions.length > 0\n ? { ...option, options: filteredSubOptions }\n : null\n } else {\n return option.label\n ?.toString()\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n ? option\n : null\n }\n })\n .filter((option): option is SelectOption => option !== null)\n}\n\nexport function SummarizedSelect({\n searchPlaceholder,\n formControlPlaceholder,\n loading,\n multiple,\n value,\n onChange,\n options,\n renderLabel,\n rootClassName,\n popupClassName,\n variant,\n trigger = 'select',\n defaultOpen = false,\n ...props\n}: Props) {\n const isHeadline = variant === 'headlined'\n const antVariant = isHeadline ? 'borderless' : variant\n const [searchValue, setSearchValue] = useState('')\n const [focusTrigger, setFocusTrigger] = useState(defaultOpen ? 1 : 0)\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const inputRef = useRef<InputRef>(null)\n const measureSpanRef = useRef<HTMLSpanElement>(null)\n const [measuredWidth, setMeasuredWidth] = useState<number>()\n\n const displayText = useMemo(() => {\n if (multiple && value.length > 0) {\n return renderLabel(value.length)\n }\n if (!multiple && value) {\n const option = getAllOptions(options).find((opt) => opt.value === value)\n return option ? String(option.label) : String(value)\n }\n return formControlPlaceholder ?? ''\n }, [multiple, value, options, renderLabel, formControlPlaceholder])\n\n useEffect(() => {\n if (!measureSpanRef.current) return\n // padding (22px = 11px each side) + arrow (18px) + border (6px)\n setMeasuredWidth(Math.ceil(measureSpanRef.current.offsetWidth) + 46)\n }, [displayText])\n\n useEffect(() => {\n if (focusTrigger > 0) {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setTimeout(() => {\n inputRef.current?.focus({ cursor: 'end' })\n }, 100)\n })\n })\n }\n }, [focusTrigger])\n\n const filteredOptions = useMemo(() => {\n return filterOptions(options, searchValue)\n }, [searchValue, options])\n\n const flatFilteredOptions = useMemo(() => {\n return getAllOptions(filteredOptions)\n }, [filteredOptions])\n\n const allFlatOptions = useMemo(() => {\n return getAllOptions(options)\n }, [options])\n\n const handleTagClose = (removedValue: string) => {\n if (!multiple) return\n\n onChange(value.filter((x) => x !== removedValue))\n }\n\n const handleToggleAll = () => {\n if (!multiple) return\n\n const allFilteredValues = getAllOptions(filteredOptions).map(\n (opt) => opt.value as string\n )\n const someSelected = allFilteredValues.some((val) => value.includes(val))\n\n if (someSelected) {\n onChange(value.filter((val) => !allFilteredValues.includes(val)))\n }\n }\n\n const handleSelectFirstOption = () => {\n if (flatFilteredOptions.length === 0) return\n\n const firstOption = flatFilteredOptions[0]\n if (!firstOption) return\n\n const optionValue = firstOption.value as string\n\n if (multiple) {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue))\n } else {\n onChange([...value, optionValue])\n }\n } else {\n onChange(optionValue)\n setIsOpen(false)\n }\n }\n\n const handleOptionClick = (optionValue: string) => {\n if (multiple) {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue))\n } else {\n onChange([...value, optionValue])\n }\n } else {\n onChange(optionValue)\n setIsOpen(false)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n // Allow these navigation keys to bubble up to Select's native keyboard handler\n const navigationKeys = ['ArrowUp', 'ArrowDown']\n\n // Handle Enter - select first filtered option (custom behavior)\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n handleSelectFirstOption()\n return\n }\n\n // Handle Escape - close dropdown (custom behavior)\n if (e.key === 'Escape') {\n e.preventDefault()\n e.stopPropagation()\n setIsOpen(false)\n return\n }\n\n // For arrow keys, prevent cursor movement but allow propagation to Select\n if (navigationKeys.includes(e.key)) {\n e.preventDefault() // Prevents cursor from moving to start/end of input text\n // Do NOT call stopPropagation() - let event bubble to Select component\n return\n }\n\n // For all other keys (including Backspace), stop propagation\n // This prevents backspace from removing tags in multiple mode\n e.stopPropagation()\n }\n\n const optionRender: NonNullable<\n SelectProps<string | string[], SelectOption>['optionRender']\n > = (option) => {\n if ('logo' in option.data && option.data.logo) {\n return (\n <div className=\"flex items-center gap-2\">\n <div className=\"h-4 shrink-0\">{option.data.logo}</div>\n <span className=\"overflow-ellipsis overflow-hidden\">\n {option.label}\n </span>\n </div>\n )\n }\n return <div>{option.label}</div>\n }\n\n const popupRender = (menu: React.ReactElement) => {\n const valueToLabel = (val: string) => {\n const option = allFlatOptions.find((opt) => opt.value === val)\n return option ? (option.label as string) : val\n }\n\n return (\n <div>\n <div className=\"mb-2 px-2 pb-2 border-b -mx-1 mt-1\">\n <Input\n ref={inputRef}\n key={focusTrigger}\n autoFocus\n placeholder={searchPlaceholder || 'Search...'}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value)\n e.stopPropagation()\n e.preventDefault()\n }}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n prefix={\n <icons.MagnifyingGlassIcon\n size={16}\n className=\"text-j2-text-placeholder\"\n />\n }\n allowClear\n />\n </div>\n {multiple && value.length > 0 ? (\n <div className=\"px-2 pb-2\">\n <div className=\"flex flex-wrap gap-y-1\">\n {(value as string[]).map((value) => (\n <Tag\n className=\"opacity-100 z-10 flex max-w-full\"\n key={value}\n status=\"default\"\n closable\n onClose={() => handleTagClose(value)}\n >\n <span\n className=\"overflow-ellipsis overflow-hidden\"\n title={valueToLabel(value)}\n >\n {valueToLabel(value)}\n </span>\n </Tag>\n ))}\n </div>\n </div>\n ) : null}\n <div\n className={cx(styles.menuContainer, 'rounded-lg', {\n [styles.headlinedMenuContainer]: isHeadline,\n [styles.menuContainerMultiple]: multiple,\n })}\n >\n {menu}\n </div>\n <div className=\"flex justify-between items-center\">\n {multiple && (\n <div className=\"w-full mt-1 pt-1 border-t border-j2-border-secondary\">\n <div\n aria-selected=\"false\"\n className={cx(\n 'ant-select-item ant-select-item-option w-full',\n styles.clearAllButton\n )}\n title=\"Clear all\"\n onClick={handleToggleAll}\n >\n <div className=\"ant-select-item-option-content text-center font-semibold\">\n Clear all\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n }\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open)\n if (open) {\n // Trigger focus by updating the counter\n setFocusTrigger((prev) => prev + 1)\n } else {\n setSearchValue('')\n }\n }\n\n const renderDropdownOptionRow = (option: Option) => {\n const optionValue = option.value as string\n const isSelected = multiple\n ? value.includes(optionValue)\n : value === optionValue\n const hasLogo = 'logo' in option && (option as OptionWithLogo).logo\n return (\n <div\n key={optionValue}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => handleOptionClick(optionValue)}\n className={cx(\n 'px-3 py-1.5 rounded cursor-pointer text-sm',\n isSelected\n ? 'bg-[var(--j2-color-primary)] text-white hover:bg-[var(--j2-color-primary)]'\n : 'hover:bg-[var(--j2-color-bg-hover)]'\n )}\n >\n {hasLogo ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"h-4 shrink-0\">\n {(option as OptionWithLogo).logo}\n </div>\n <span className=\"overflow-hidden overflow-ellipsis\">\n {option.label}\n </span>\n </div>\n ) : (\n option.label\n )}\n </div>\n )\n }\n\n const dropdownPopupRender = () => {\n const valueToLabel = (val: string) => {\n const option = allFlatOptions.find((opt) => opt.value === val)\n return option ? (option.label as string) : val\n }\n\n return (\n <div className=\"bg-white rounded-lg shadow-md p-2 min-w-[240px]\">\n <div className=\"pb-2 border-b border-j2-border-secondary\">\n <Input\n ref={inputRef}\n key={focusTrigger}\n autoFocus\n placeholder={searchPlaceholder || 'Search...'}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value)\n e.stopPropagation()\n }}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n prefix={\n <icons.MagnifyingGlassIcon\n size={16}\n className=\"text-j2-text-placeholder\"\n />\n }\n allowClear\n />\n </div>\n {multiple && value.length > 0 && (\n <div className=\"px-1 pt-2\">\n <div className=\"flex flex-wrap gap-y-1\">\n {(value as string[]).map((v) => (\n <Tag\n className=\"opacity-100 z-10 flex max-w-full\"\n key={v}\n status=\"default\"\n closable\n onClose={() => handleTagClose(v)}\n >\n <span\n className=\"overflow-ellipsis overflow-hidden\"\n title={valueToLabel(v)}\n >\n {valueToLabel(v)}\n </span>\n </Tag>\n ))}\n </div>\n </div>\n )}\n <div\n className=\"max-h-72 overflow-y-auto py-1\"\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n >\n {filteredOptions.length === 0 ? (\n <div className=\"px-3 py-2 text-sm text-[var(--j2-color-text-secondary)]\">\n No options found\n </div>\n ) : (\n filteredOptions.map((opt) => {\n if (isGroupOption(opt)) {\n return (\n <div key={`group-${opt.label}`}>\n <div className=\"px-3 pt-2 pb-1 text-xs font-semibold uppercase tracking-wide text-[var(--j2-color-text-tertiary)]\">\n {opt.label}\n </div>\n {opt.options.map(renderDropdownOptionRow)}\n </div>\n )\n }\n return renderDropdownOptionRow(opt)\n })\n )}\n </div>\n {multiple && value.length > 0 && (\n <div className=\"mt-1 pt-1 border-t border-j2-border-secondary\">\n <div\n role=\"button\"\n aria-label=\"Clear all\"\n title=\"Clear all\"\n onClick={handleToggleAll}\n className={cx(\n 'text-center font-semibold text-sm py-1.5 rounded cursor-pointer',\n styles.clearAllButton\n )}\n >\n Clear all\n </div>\n </div>\n )}\n </div>\n )\n }\n\n if (trigger === 'dropdown') {\n const hasSelection = multiple ? value.length > 0 : Boolean(value)\n const triggerContent = (\n <span className=\"inline-flex items-center gap-1\">\n {hasSelection ? displayText : (formControlPlaceholder ?? 'Select')}\n {loading ? (\n <Spin\n indicator={<LoadingOutlined spin />}\n size=\"small\"\n data-testid=\"loading-spinner\"\n />\n ) : (\n <icons.CaretDownIcon weight=\"regular\" data-testid=\"caret-down\" />\n )}\n </span>\n )\n\n return (\n <AntdDropdown\n open={isOpen}\n onOpenChange={handleOpenChange}\n trigger={['click']}\n disabled={props.disabled}\n popupRender={dropdownPopupRender}\n >\n <Typography.Link\n disabled={props.disabled}\n className={cx('inline-flex', rootClassName)}\n >\n {triggerContent}\n </Typography.Link>\n </AntdDropdown>\n )\n }\n\n return (\n <>\n <span\n ref={measureSpanRef}\n aria-hidden\n style={{\n position: 'absolute',\n visibility: 'hidden',\n whiteSpace: 'nowrap',\n fontSize: 'inherit',\n }}\n >\n {displayText}\n </span>\n <Select<string | string[], SelectOption>\n open={isOpen}\n showSearch={false}\n style={{ width: measuredWidth }}\n suffixIcon={\n loading ? (\n <Spin\n indicator={<LoadingOutlined spin />}\n size=\"small\"\n data-testid=\"loading-spinner\"\n />\n ) : (\n <icons.CaretDownIcon size={14} data-testid=\"caret-down\" />\n )\n }\n placeholder={formControlPlaceholder}\n mode={multiple ? 'multiple' : undefined}\n value={value}\n maxTagCount={0}\n maxTagPlaceholder={multiple ? () => renderLabel(value.length) : value}\n options={filteredOptions}\n onChange={(val) => {\n if (multiple) {\n if (Array.isArray(val)) {\n onChange(val)\n } else {\n throw new Error('Value should be an array in multiple mode')\n }\n } else {\n if (typeof val === 'string') {\n onChange(val)\n } else {\n throw new Error(\n 'Value should be a string in single selection mode'\n )\n }\n }\n }}\n popupRender={popupRender}\n optionRender={optionRender}\n onOpenChange={handleOpenChange}\n classNames={{\n root: cx(rootClassName, styles.summarizedSelect, {\n [styles.hemisphericSelect]:\n variant !== 'underlined' && variant !== 'headlined',\n [styles.isActive]:\n multiple &&\n value.length > 0 &&\n variant !== 'underlined' &&\n variant !== 'headlined',\n [styles.headlinedSelect]: isHeadline,\n }),\n popup: { root: popupClassName },\n }}\n variant={antVariant}\n {...props}\n />\n </>\n )\n}\n"],"names":["_a","icons.MagnifyingGlassIcon","value","icons.CaretDownIcon","AntdDropdown"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const hemisphericSelect = "_hemisphericSelect_2ivoh_1";
4
- const summarizedSelect = "_summarizedSelect_2ivoh_11";
5
- const isActive = "_isActive_2ivoh_22";
6
- const menuContainer = "_menuContainer_2ivoh_36";
7
- const menuContainerMultiple = "_menuContainerMultiple_2ivoh_46";
8
- const headlinedSelect = "_headlinedSelect_2ivoh_61";
9
- const headlinedMenuContainer = "_headlinedMenuContainer_2ivoh_105";
10
- const clearAllButton = "_clearAllButton_2ivoh_116";
3
+ const hemisphericSelect = "_hemisphericSelect_1g8eb_1";
4
+ const summarizedSelect = "_summarizedSelect_1g8eb_9";
5
+ const isActive = "_isActive_1g8eb_35";
6
+ const menuContainer = "_menuContainer_1g8eb_47";
7
+ const menuContainerMultiple = "_menuContainerMultiple_1g8eb_57";
8
+ const headlinedSelect = "_headlinedSelect_1g8eb_72";
9
+ const headlinedMenuContainer = "_headlinedMenuContainer_1g8eb_115";
10
+ const clearAllButton = "_clearAllButton_1g8eb_126";
11
11
  const styles = {
12
12
  hemisphericSelect,
13
13
  summarizedSelect,
@@ -1,11 +1,11 @@
1
- const hemisphericSelect = "_hemisphericSelect_2ivoh_1";
2
- const summarizedSelect = "_summarizedSelect_2ivoh_11";
3
- const isActive = "_isActive_2ivoh_22";
4
- const menuContainer = "_menuContainer_2ivoh_36";
5
- const menuContainerMultiple = "_menuContainerMultiple_2ivoh_46";
6
- const headlinedSelect = "_headlinedSelect_2ivoh_61";
7
- const headlinedMenuContainer = "_headlinedMenuContainer_2ivoh_105";
8
- const clearAllButton = "_clearAllButton_2ivoh_116";
1
+ const hemisphericSelect = "_hemisphericSelect_1g8eb_1";
2
+ const summarizedSelect = "_summarizedSelect_1g8eb_9";
3
+ const isActive = "_isActive_1g8eb_35";
4
+ const menuContainer = "_menuContainer_1g8eb_47";
5
+ const menuContainerMultiple = "_menuContainerMultiple_1g8eb_57";
6
+ const headlinedSelect = "_headlinedSelect_1g8eb_72";
7
+ const headlinedMenuContainer = "_headlinedMenuContainer_1g8eb_115";
8
+ const clearAllButton = "_clearAllButton_1g8eb_126";
9
9
  const styles = {
10
10
  hemisphericSelect,
11
11
  summarizedSelect,
@@ -11,9 +11,14 @@ const Steps = ({
11
11
  current,
12
12
  setCurrent,
13
13
  dot = false,
14
+ direction,
15
+ orientation,
16
+ size,
17
+ labelPlacement,
18
+ titlePlacement,
14
19
  ...props
15
20
  }) => {
16
- const isVertical = props.direction === "vertical";
21
+ const isVertical = (orientation ?? direction) === "vertical";
17
22
  const totalSteps = (items == null ? void 0 : items.length) || 0;
18
23
  const { current: currentStep, setCurrent: setCurrentStep } = useSteps.useSteps({
19
24
  current,
@@ -25,17 +30,22 @@ const Steps = ({
25
30
  {
26
31
  className: "j2Steps",
27
32
  ...props,
33
+ orientation: orientation ?? direction,
34
+ titlePlacement: titlePlacement ?? labelPlacement,
35
+ size: size === "default" ? "medium" : size,
28
36
  current: currentStep,
29
37
  onChange: (curr) => setCurrentStep(curr),
30
- ...dot && { progressDot: true },
38
+ ...dot && { type: "dot" },
31
39
  items: items == null ? void 0 : items.map((item, index) => {
40
+ const { description, ...restItem } = item;
32
41
  return {
33
- ...item,
42
+ ...restItem,
43
+ content: item.content ?? description,
34
44
  icon: !dot && currentStep > index ? /* @__PURE__ */ jsxRuntime.jsx(
35
45
  "div",
36
46
  {
37
47
  className: cx(
38
- `check-${props.size}`,
48
+ `check-${size === "small" ? "small" : "medium"}`,
39
49
  isVertical ? `vertical-check-icon` : `check-icon`
40
50
  ),
41
51
  children: /* @__PURE__ */ jsxRuntime.jsx(react.CheckIcon, { size: 16 })
@@ -1 +1 @@
1
- {"version":3,"file":"Steps.cjs","sources":["../../../../src/components/steps/Steps.tsx"],"sourcesContent":["import { Steps as AntdSteps, StepsProps, StepProps } from 'antd'\nimport './Steps.css'\nimport { CheckIcon } from '@phosphor-icons/react'\nimport cx from 'classnames'\nimport { useSteps } from './useSteps'\n\ntype AllProps = StepsProps & {\n items: StepProps[]\n dot?: boolean\n current?: number\n setCurrent?: (current: number) => void\n}\n\ntype Props = Expand<AllProps>\n\nexport const Steps = ({\n items,\n current,\n setCurrent,\n dot = false,\n ...props\n}: Props) => {\n const isVertical = props.direction === 'vertical'\n const totalSteps = items?.length || 0\n\n const { current: currentStep, setCurrent: setCurrentStep } = useSteps({\n current,\n setCurrent,\n totalSteps,\n })\n\n return (\n <AntdSteps\n className=\"j2Steps\"\n {...props}\n current={currentStep}\n onChange={(curr) => setCurrentStep(curr)}\n {...(dot && { progressDot: true })}\n items={items?.map((item, index) => {\n return {\n ...item,\n icon:\n !dot && currentStep > index ? (\n <div\n className={cx(\n `check-${props.size}`,\n isVertical ? `vertical-check-icon` : `check-icon`\n )}\n >\n <CheckIcon size={16} />\n </div>\n ) : (\n item.icon\n ),\n }\n })}\n />\n )\n}\n"],"names":["useSteps","jsx","AntdSteps","CheckIcon"],"mappings":";;;;;;;;AAeO,MAAM,QAAQ,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EACN,GAAG;AACL,MAAa;AACX,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,cAAa,+BAAO,WAAU;AAEpC,QAAM,EAAE,SAAS,aAAa,YAAY,eAAA,IAAmBA,SAAAA,SAAS;AAAA,IACpE;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAED,SACEC,2BAAAA;AAAAA,IAACC,KAAAA;AAAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACT,GAAG;AAAA,MACJ,SAAS;AAAA,MACT,UAAU,CAAC,SAAS,eAAe,IAAI;AAAA,MACtC,GAAI,OAAO,EAAE,aAAa,KAAA;AAAA,MAC3B,OAAO,+BAAO,IAAI,CAAC,MAAM,UAAU;AACjC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,MACE,CAAC,OAAO,cAAc,QACpBD,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT,SAAS,MAAM,IAAI;AAAA,gBACnB,aAAa,wBAAwB;AAAA,cAAA;AAAA,cAGvC,UAAAA,2BAAAA,IAACE,MAAAA,WAAA,EAAU,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA,IAGvB,KAAK;AAAA,QAAA;AAAA,MAGb;AAAA,IAAC;AAAA,EAAA;AAGP;;"}
1
+ {"version":3,"file":"Steps.cjs","sources":["../../../../src/components/steps/Steps.tsx"],"sourcesContent":["import { Steps as AntdSteps, StepsProps } from 'antd'\nimport './Steps.css'\nimport { CheckIcon } from '@phosphor-icons/react'\nimport cx from 'classnames'\nimport { useSteps } from './useSteps'\n\ntype AllProps = StepsProps & {\n items: NonNullable<StepsProps['items']>\n dot?: boolean\n current?: number\n setCurrent?: (current: number) => void\n}\n\ntype Props = Expand<AllProps>\n\nexport const Steps = ({\n items,\n current,\n setCurrent,\n dot = false,\n direction,\n orientation,\n size,\n labelPlacement,\n titlePlacement,\n ...props\n}: Props) => {\n const isVertical = (orientation ?? direction) === 'vertical'\n const totalSteps = items?.length || 0\n\n const { current: currentStep, setCurrent: setCurrentStep } = useSteps({\n current,\n setCurrent,\n totalSteps,\n })\n\n return (\n <AntdSteps\n className=\"j2Steps\"\n {...props}\n orientation={orientation ?? direction}\n titlePlacement={titlePlacement ?? labelPlacement}\n size={size === 'default' ? 'medium' : size}\n current={currentStep}\n onChange={(curr) => setCurrentStep(curr)}\n {...(dot && { type: 'dot' })}\n items={items?.map((item, index) => {\n const { description, ...restItem } = item\n return {\n ...restItem,\n content: item.content ?? description,\n icon:\n !dot && currentStep > index ? (\n <div\n className={cx(\n `check-${size === 'small' ? 'small' : 'medium'}`,\n isVertical ? `vertical-check-icon` : `check-icon`\n )}\n >\n <CheckIcon size={16} />\n </div>\n ) : (\n item.icon\n ),\n }\n })}\n />\n )\n}\n"],"names":["useSteps","jsx","AntdSteps","CheckIcon"],"mappings":";;;;;;;;AAeO,MAAM,QAAQ,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAa;AACX,QAAM,cAAc,eAAe,eAAe;AAClD,QAAM,cAAa,+BAAO,WAAU;AAEpC,QAAM,EAAE,SAAS,aAAa,YAAY,eAAA,IAAmBA,SAAAA,SAAS;AAAA,IACpE;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAED,SACEC,2BAAAA;AAAAA,IAACC,KAAAA;AAAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACT,GAAG;AAAA,MACJ,aAAa,eAAe;AAAA,MAC5B,gBAAgB,kBAAkB;AAAA,MAClC,MAAM,SAAS,YAAY,WAAW;AAAA,MACtC,SAAS;AAAA,MACT,UAAU,CAAC,SAAS,eAAe,IAAI;AAAA,MACtC,GAAI,OAAO,EAAE,MAAM,MAAA;AAAA,MACpB,OAAO,+BAAO,IAAI,CAAC,MAAM,UAAU;AACjC,cAAM,EAAE,aAAa,GAAG,SAAA,IAAa;AACrC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS,KAAK,WAAW;AAAA,UACzB,MACE,CAAC,OAAO,cAAc,QACpBD,2BAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT,SAAS,SAAS,UAAU,UAAU,QAAQ;AAAA,gBAC9C,aAAa,wBAAwB;AAAA,cAAA;AAAA,cAGvC,UAAAA,2BAAAA,IAACE,MAAAA,WAAA,EAAU,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA,IAGvB,KAAK;AAAA,QAAA;AAAA,MAGb;AAAA,IAAC;AAAA,EAAA;AAGP;;"}
@@ -1,10 +1,10 @@
1
- import { StepsProps, StepProps } from 'antd';
1
+ import { StepsProps } from 'antd';
2
2
  type AllProps = StepsProps & {
3
- items: StepProps[];
3
+ items: NonNullable<StepsProps['items']>;
4
4
  dot?: boolean;
5
5
  current?: number;
6
6
  setCurrent?: (current: number) => void;
7
7
  };
8
8
  type Props = Expand<AllProps>;
9
- export declare const Steps: ({ items, current, setCurrent, dot, ...props }: Props) => import("react").JSX.Element;
9
+ export declare const Steps: ({ items, current, setCurrent, dot, direction, orientation, size, labelPlacement, titlePlacement, ...props }: Props) => import("react").JSX.Element;
10
10
  export {};
@@ -9,9 +9,14 @@ const Steps = ({
9
9
  current,
10
10
  setCurrent,
11
11
  dot = false,
12
+ direction,
13
+ orientation,
14
+ size,
15
+ labelPlacement,
16
+ titlePlacement,
12
17
  ...props
13
18
  }) => {
14
- const isVertical = props.direction === "vertical";
19
+ const isVertical = (orientation ?? direction) === "vertical";
15
20
  const totalSteps = (items == null ? void 0 : items.length) || 0;
16
21
  const { current: currentStep, setCurrent: setCurrentStep } = useSteps({
17
22
  current,
@@ -23,17 +28,22 @@ const Steps = ({
23
28
  {
24
29
  className: "j2Steps",
25
30
  ...props,
31
+ orientation: orientation ?? direction,
32
+ titlePlacement: titlePlacement ?? labelPlacement,
33
+ size: size === "default" ? "medium" : size,
26
34
  current: currentStep,
27
35
  onChange: (curr) => setCurrentStep(curr),
28
- ...dot && { progressDot: true },
36
+ ...dot && { type: "dot" },
29
37
  items: items == null ? void 0 : items.map((item, index) => {
38
+ const { description, ...restItem } = item;
30
39
  return {
31
- ...item,
40
+ ...restItem,
41
+ content: item.content ?? description,
32
42
  icon: !dot && currentStep > index ? /* @__PURE__ */ jsx(
33
43
  "div",
34
44
  {
35
45
  className: cx(
36
- `check-${props.size}`,
46
+ `check-${size === "small" ? "small" : "medium"}`,
37
47
  isVertical ? `vertical-check-icon` : `check-icon`
38
48
  ),
39
49
  children: /* @__PURE__ */ jsx(CheckIcon, { size: 16 })
@@ -1 +1 @@
1
- {"version":3,"file":"Steps.js","sources":["../../../../src/components/steps/Steps.tsx"],"sourcesContent":["import { Steps as AntdSteps, StepsProps, StepProps } from 'antd'\nimport './Steps.css'\nimport { CheckIcon } from '@phosphor-icons/react'\nimport cx from 'classnames'\nimport { useSteps } from './useSteps'\n\ntype AllProps = StepsProps & {\n items: StepProps[]\n dot?: boolean\n current?: number\n setCurrent?: (current: number) => void\n}\n\ntype Props = Expand<AllProps>\n\nexport const Steps = ({\n items,\n current,\n setCurrent,\n dot = false,\n ...props\n}: Props) => {\n const isVertical = props.direction === 'vertical'\n const totalSteps = items?.length || 0\n\n const { current: currentStep, setCurrent: setCurrentStep } = useSteps({\n current,\n setCurrent,\n totalSteps,\n })\n\n return (\n <AntdSteps\n className=\"j2Steps\"\n {...props}\n current={currentStep}\n onChange={(curr) => setCurrentStep(curr)}\n {...(dot && { progressDot: true })}\n items={items?.map((item, index) => {\n return {\n ...item,\n icon:\n !dot && currentStep > index ? (\n <div\n className={cx(\n `check-${props.size}`,\n isVertical ? `vertical-check-icon` : `check-icon`\n )}\n >\n <CheckIcon size={16} />\n </div>\n ) : (\n item.icon\n ),\n }\n })}\n />\n )\n}\n"],"names":["AntdSteps"],"mappings":";;;;;;AAeO,MAAM,QAAQ,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EACN,GAAG;AACL,MAAa;AACX,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,cAAa,+BAAO,WAAU;AAEpC,QAAM,EAAE,SAAS,aAAa,YAAY,eAAA,IAAmB,SAAS;AAAA,IACpE;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAED,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACT,GAAG;AAAA,MACJ,SAAS;AAAA,MACT,UAAU,CAAC,SAAS,eAAe,IAAI;AAAA,MACtC,GAAI,OAAO,EAAE,aAAa,KAAA;AAAA,MAC3B,OAAO,+BAAO,IAAI,CAAC,MAAM,UAAU;AACjC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,MACE,CAAC,OAAO,cAAc,QACpB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT,SAAS,MAAM,IAAI;AAAA,gBACnB,aAAa,wBAAwB;AAAA,cAAA;AAAA,cAGvC,UAAA,oBAAC,WAAA,EAAU,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA,IAGvB,KAAK;AAAA,QAAA;AAAA,MAGb;AAAA,IAAC;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"Steps.js","sources":["../../../../src/components/steps/Steps.tsx"],"sourcesContent":["import { Steps as AntdSteps, StepsProps } from 'antd'\nimport './Steps.css'\nimport { CheckIcon } from '@phosphor-icons/react'\nimport cx from 'classnames'\nimport { useSteps } from './useSteps'\n\ntype AllProps = StepsProps & {\n items: NonNullable<StepsProps['items']>\n dot?: boolean\n current?: number\n setCurrent?: (current: number) => void\n}\n\ntype Props = Expand<AllProps>\n\nexport const Steps = ({\n items,\n current,\n setCurrent,\n dot = false,\n direction,\n orientation,\n size,\n labelPlacement,\n titlePlacement,\n ...props\n}: Props) => {\n const isVertical = (orientation ?? direction) === 'vertical'\n const totalSteps = items?.length || 0\n\n const { current: currentStep, setCurrent: setCurrentStep } = useSteps({\n current,\n setCurrent,\n totalSteps,\n })\n\n return (\n <AntdSteps\n className=\"j2Steps\"\n {...props}\n orientation={orientation ?? direction}\n titlePlacement={titlePlacement ?? labelPlacement}\n size={size === 'default' ? 'medium' : size}\n current={currentStep}\n onChange={(curr) => setCurrentStep(curr)}\n {...(dot && { type: 'dot' })}\n items={items?.map((item, index) => {\n const { description, ...restItem } = item\n return {\n ...restItem,\n content: item.content ?? description,\n icon:\n !dot && currentStep > index ? (\n <div\n className={cx(\n `check-${size === 'small' ? 'small' : 'medium'}`,\n isVertical ? `vertical-check-icon` : `check-icon`\n )}\n >\n <CheckIcon size={16} />\n </div>\n ) : (\n item.icon\n ),\n }\n })}\n />\n )\n}\n"],"names":["AntdSteps"],"mappings":";;;;;;AAeO,MAAM,QAAQ,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAa;AACX,QAAM,cAAc,eAAe,eAAe;AAClD,QAAM,cAAa,+BAAO,WAAU;AAEpC,QAAM,EAAE,SAAS,aAAa,YAAY,eAAA,IAAmB,SAAS;AAAA,IACpE;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAED,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACT,GAAG;AAAA,MACJ,aAAa,eAAe;AAAA,MAC5B,gBAAgB,kBAAkB;AAAA,MAClC,MAAM,SAAS,YAAY,WAAW;AAAA,MACtC,SAAS;AAAA,MACT,UAAU,CAAC,SAAS,eAAe,IAAI;AAAA,MACtC,GAAI,OAAO,EAAE,MAAM,MAAA;AAAA,MACpB,OAAO,+BAAO,IAAI,CAAC,MAAM,UAAU;AACjC,cAAM,EAAE,aAAa,GAAG,SAAA,IAAa;AACrC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS,KAAK,WAAW;AAAA,UACzB,MACE,CAAC,OAAO,cAAc,QACpB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAW;AAAA,gBACT,SAAS,SAAS,UAAU,UAAU,QAAQ;AAAA,gBAC9C,aAAa,wBAAwB;AAAA,cAAA;AAAA,cAGvC,UAAA,oBAAC,WAAA,EAAU,MAAM,GAAA,CAAI;AAAA,YAAA;AAAA,UAAA,IAGvB,KAAK;AAAA,QAAA;AAAA,MAGb;AAAA,IAAC;AAAA,EAAA;AAGP;"}
@@ -23,7 +23,7 @@ const Table = ({
23
23
  var _a, _b;
24
24
  const defaultLoadingProps = {
25
25
  indicator: /* @__PURE__ */ jsxRuntime.jsx(Spinner.Spinner, { className: "!w-fit !h-fit !mx-0 translate-x-[-50%]" }),
26
- tip: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-20", children: [
26
+ description: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-20", children: [
27
27
  /* @__PURE__ */ jsxRuntime.jsx("h4", { children: "Loading this chart" }),
28
28
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg", children: "Please wait a moment" })
29
29
  ] })
@@ -1 +1 @@
1
- {"version":3,"file":"Table.cjs","sources":["../../../../src/components/table/Table.tsx"],"sourcesContent":["import { Table as AntdTable, SpinProps, TableProps, Tooltip } from 'antd'\nimport cx from 'classnames'\nimport s from './Table.module.css'\nimport { Spinner } from '../spinner'\nimport { withDesignSystemPaginationOverrides } from '../pagination/Pagination'\nimport {\n CaretDownIcon,\n CaretUpIcon,\n CaretUpDownIcon,\n} from '@phosphor-icons/react'\nimport { ComponentProps, ReactNode } from 'react'\nimport { AnyObject } from 'antd/es/_util/type'\n\ntype MergedProps<T> = TableProps<T> & {\n verticalBorders?: boolean\n alternatingRows?: boolean\n columns?: TableProps<T>['columns']\n paginationTextLabels?: boolean\n}\n\ntype Props<T> = Expand<MergedProps<T>>\n\nexport const defaultSortIcon = ({\n sortOrder,\n}: {\n sortOrder: 'ascend' | 'descend' | null\n}) => {\n if (sortOrder == 'ascend') return <CaretUpIcon />\n if (sortOrder == 'descend') return <CaretDownIcon />\n return <CaretUpDownIcon />\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unnecessary-type-constraint\nconst Table = <T extends unknown = any>({\n verticalBorders,\n alternatingRows,\n paginationTextLabels = false,\n ...props\n}: Props<T>) => {\n const defaultLoadingProps: SpinProps = {\n indicator: <Spinner className=\"!w-fit !h-fit !mx-0 translate-x-[-50%]\" />,\n tip: (\n <div className=\"mt-20\">\n <h4>Loading this chart</h4>\n <span className=\"text-lg\">Please wait a moment</span>\n </div>\n ),\n }\n\n const loading: SpinProps | boolean | undefined =\n typeof props.loading == 'object'\n ? { ...props.loading, ...defaultLoadingProps }\n : props.loading && defaultLoadingProps\n\n const isSimpleValue = (\n value: unknown\n ): value is string | number | boolean => {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n )\n }\n\n // Helper to extract text content from React elements\n const extractTextContent = (node: unknown): string | null => {\n if (isSimpleValue(node)) {\n return String(node)\n }\n\n // Check if it's a React element with simple text children\n if (\n node &&\n typeof node === 'object' &&\n 'props' in node &&\n node.props &&\n typeof node.props === 'object' &&\n 'children' in node.props\n ) {\n const children = node.props.children\n if (isSimpleValue(children)) {\n return String(children)\n }\n }\n\n return null\n }\n\n const columns = props.columns?.map((column) => {\n const hasEllipsis =\n column.ellipsis === true ||\n (typeof column.ellipsis === 'object' && column.ellipsis)\n\n const originalRender = column.render\n\n return {\n ...column,\n sortIcon: column.sortIcon ?? defaultSortIcon,\n ellipsis: hasEllipsis\n ? {\n showTitle: false, // Disable default browser tooltip\n }\n : column.ellipsis,\n render: (value: unknown, record: T, index: number): ReactNode => {\n const renderedContent = originalRender\n ? originalRender(value, record, index)\n : value\n\n // Render null/undefined as dashes with no tooltip\n if (renderedContent == null) {\n return <span className=\"text-j2-text-secondary\">--</span>\n }\n\n // Try to extract text content for tooltip\n const tooltipText = extractTextContent(renderedContent)\n\n // If we can extract text content, wrap with tooltip\n if (tooltipText) {\n // For simple values, wrap in a span\n if (isSimpleValue(renderedContent)) {\n return (\n <Tooltip title={tooltipText} arrow={false}>\n <span className={hasEllipsis ? 'block truncate' : undefined}>\n {renderedContent}\n </span>\n </Tooltip>\n )\n }\n\n // For React elements, wrap the element itself\n return (\n <Tooltip title={tooltipText} arrow={false}>\n <div>{renderedContent as ReactNode}</div>\n </Tooltip>\n )\n }\n\n // Complex components without extractable text - return as is\n return renderedContent as ReactNode\n },\n }\n })\n\n const paginationConfig = props.pagination\n ? withDesignSystemPaginationOverrides(\n typeof props.pagination === 'object' ? props.pagination : {},\n {\n paginationTextLabels,\n isSmall:\n (typeof props.pagination === 'object' &&\n props.pagination.size === 'small') ||\n props.size === 'small',\n }\n )\n : false\n\n return (\n <div\n className={cx(props.className, {\n [s.bordered]: props.bordered && !verticalBorders,\n [s.alternatingRows]: alternatingRows,\n })}\n >\n <AntdTable<T>\n showSorterTooltip={{ target: 'sorter-icon' }}\n {...props}\n loading={loading}\n columns={columns}\n pagination={paginationConfig}\n rowKey={(record) => JSON.stringify(record)}\n locale={{\n emptyText: (\n <div\n style={{ height: props.scroll?.y || 400, width: 'content-fit' }}\n />\n ),\n }}\n />\n </div>\n )\n}\n\ntype ColumnProps<T extends AnyObject> = Expand<\n ComponentProps<typeof AntdTable.Column<T>>\n>\n\nconst TableColumn = <T extends AnyObject>(props: ColumnProps<T>) => {\n return <AntdTable.Column<T> {...props} sortIcon={defaultSortIcon} />\n}\nTableColumn.displayName = 'Table.Column'\n\nTable.Column = TableColumn\nTable.Summary = AntdTable.Summary\n\nexport type { TableColumnType } from 'antd'\nexport { Table }\n"],"names":["jsx","CaretUpIcon","CaretDownIcon","CaretUpDownIcon","Spinner","jsxs","Tooltip","withDesignSystemPaginationOverrides","s","AntdTable"],"mappings":";;;;;;;;;AAsBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AACF,MAEM;AACJ,MAAI,aAAa,SAAU,QAAOA,2BAAAA,IAACC,MAAAA,aAAA,CAAA,CAAY;AAC/C,MAAI,aAAa,UAAW,QAAOD,2BAAAA,IAACE,MAAAA,eAAA,CAAA,CAAc;AAClD,wCAAQC,MAAAA,iBAAA,EAAgB;AAC1B;AAGA,MAAM,QAAQ,CAA0B;AAAA,EACtC;AAAA,EACA;AAAA,EACA,uBAAuB;AAAA,EACvB,GAAG;AACL,MAAgB;;AACd,QAAM,sBAAiC;AAAA,IACrC,WAAWH,2BAAAA,IAACI,QAAAA,SAAA,EAAQ,WAAU,yCAAA,CAAyC;AAAA,IACvE,KACEC,2BAAAA,KAAC,OAAA,EAAI,WAAU,SACb,UAAA;AAAA,MAAAL,2BAAAA,IAAC,QAAG,UAAA,qBAAA,CAAkB;AAAA,MACtBA,2BAAAA,IAAC,QAAA,EAAK,WAAU,WAAU,UAAA,uBAAA,CAAoB;AAAA,IAAA,EAAA,CAChD;AAAA,EAAA;AAIJ,QAAM,UACJ,OAAO,MAAM,WAAW,WACpB,EAAE,GAAG,MAAM,SAAS,GAAG,oBAAA,IACvB,MAAM,WAAW;AAEvB,QAAM,gBAAgB,CACpB,UACuC;AACvC,WACE,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,OAAO,UAAU;AAAA,EAErB;AAGA,QAAM,qBAAqB,CAAC,SAAiC;AAC3D,QAAI,cAAc,IAAI,GAAG;AACvB,aAAO,OAAO,IAAI;AAAA,IACpB;AAGA,QACE,QACA,OAAO,SAAS,YAChB,WAAW,QACX,KAAK,SACL,OAAO,KAAK,UAAU,YACtB,cAAc,KAAK,OACnB;AACA,YAAM,WAAW,KAAK,MAAM;AAC5B,UAAI,cAAc,QAAQ,GAAG;AAC3B,eAAO,OAAO,QAAQ;AAAA,MACxB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,WAAU,WAAM,YAAN,mBAAe,IAAI,CAAC,WAAW;AAC7C,UAAM,cACJ,OAAO,aAAa,QACnB,OAAO,OAAO,aAAa,YAAY,OAAO;AAEjD,UAAM,iBAAiB,OAAO;AAE9B,WAAO;AAAA,MACL,GAAG;AAAA,MACH,UAAU,OAAO,YAAY;AAAA,MAC7B,UAAU,cACN;AAAA,QACE,WAAW;AAAA;AAAA,MAAA,IAEb,OAAO;AAAA,MACX,QAAQ,CAAC,OAAgB,QAAW,UAA6B;AAC/D,cAAM,kBAAkB,iBACpB,eAAe,OAAO,QAAQ,KAAK,IACnC;AAGJ,YAAI,mBAAmB,MAAM;AAC3B,iBAAOA,2BAAAA,IAAC,QAAA,EAAK,WAAU,0BAAyB,UAAA,MAAE;AAAA,QACpD;AAGA,cAAM,cAAc,mBAAmB,eAAe;AAGtD,YAAI,aAAa;AAEf,cAAI,cAAc,eAAe,GAAG;AAClC,mBACEA,2BAAAA,IAACM,KAAAA,SAAA,EAAQ,OAAO,aAAa,OAAO,OAClC,UAAAN,2BAAAA,IAAC,QAAA,EAAK,WAAW,cAAc,mBAAmB,QAC/C,2BACH,GACF;AAAA,UAEJ;AAGA,iBACEA,2BAAAA,IAACM,KAAAA,WAAQ,OAAO,aAAa,OAAO,OAClC,UAAAN,2BAAAA,IAAC,OAAA,EAAK,UAAA,gBAAA,CAA6B,EAAA,CACrC;AAAA,QAEJ;AAGA,eAAO;AAAA,MACT;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,mBAAmB,MAAM,aAC3BO,WAAAA;AAAAA,IACE,OAAO,MAAM,eAAe,WAAW,MAAM,aAAa,CAAA;AAAA,IAC1D;AAAA,MACE;AAAA,MACA,SACG,OAAO,MAAM,eAAe,YAC3B,MAAM,WAAW,SAAS,WAC5B,MAAM,SAAS;AAAA,IAAA;AAAA,EACnB,IAEF;AAEJ,SACEP,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,GAAG,MAAM,WAAW;AAAA,QAC7B,CAACQ,aAAAA,QAAE,QAAQ,GAAG,MAAM,YAAY,CAAC;AAAA,QACjC,CAACA,aAAAA,QAAE,eAAe,GAAG;AAAA,MAAA,CACtB;AAAA,MAED,UAAAR,2BAAAA;AAAAA,QAACS,KAAAA;AAAAA,QAAA;AAAA,UACC,mBAAmB,EAAE,QAAQ,cAAA;AAAA,UAC5B,GAAG;AAAA,UACJ;AAAA,UACA;AAAA,UACA,YAAY;AAAA,UACZ,QAAQ,CAAC,WAAW,KAAK,UAAU,MAAM;AAAA,UACzC,QAAQ;AAAA,YACN,WACET,2BAAAA;AAAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,UAAQ,WAAM,WAAN,mBAAc,MAAK,KAAK,OAAO,cAAA;AAAA,cAAc;AAAA,YAAA;AAAA,UAChE;AAAA,QAEJ;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;AAMA,MAAM,cAAc,CAAsB,UAA0B;AAClE,wCAAQS,KAAAA,MAAU,QAAV,EAAqB,GAAG,OAAO,UAAU,iBAAiB;AACpE;AACA,YAAY,cAAc;AAE1B,MAAM,SAAS;AACf,MAAM,UAAUA,KAAAA,MAAU;;;"}
1
+ {"version":3,"file":"Table.cjs","sources":["../../../../src/components/table/Table.tsx"],"sourcesContent":["import { Table as AntdTable, SpinProps, TableProps, Tooltip } from 'antd'\nimport cx from 'classnames'\nimport s from './Table.module.css'\nimport { Spinner } from '../spinner'\nimport { withDesignSystemPaginationOverrides } from '../pagination/Pagination'\nimport {\n CaretDownIcon,\n CaretUpIcon,\n CaretUpDownIcon,\n} from '@phosphor-icons/react'\nimport { ComponentProps, ReactNode } from 'react'\nimport { AnyObject } from 'antd/es/_util/type'\n\ntype MergedProps<T> = TableProps<T> & {\n verticalBorders?: boolean\n alternatingRows?: boolean\n columns?: TableProps<T>['columns']\n paginationTextLabels?: boolean\n}\n\ntype Props<T> = Expand<MergedProps<T>>\n\nexport const defaultSortIcon = ({\n sortOrder,\n}: {\n sortOrder: 'ascend' | 'descend' | null\n}) => {\n if (sortOrder == 'ascend') return <CaretUpIcon />\n if (sortOrder == 'descend') return <CaretDownIcon />\n return <CaretUpDownIcon />\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unnecessary-type-constraint\nconst Table = <T extends unknown = any>({\n verticalBorders,\n alternatingRows,\n paginationTextLabels = false,\n ...props\n}: Props<T>) => {\n const defaultLoadingProps: SpinProps = {\n indicator: <Spinner className=\"!w-fit !h-fit !mx-0 translate-x-[-50%]\" />,\n description: (\n <div className=\"mt-20\">\n <h4>Loading this chart</h4>\n <span className=\"text-lg\">Please wait a moment</span>\n </div>\n ),\n }\n\n const loading: SpinProps | boolean | undefined =\n typeof props.loading == 'object'\n ? { ...props.loading, ...defaultLoadingProps }\n : props.loading && defaultLoadingProps\n\n const isSimpleValue = (\n value: unknown\n ): value is string | number | boolean => {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n )\n }\n\n // Helper to extract text content from React elements\n const extractTextContent = (node: unknown): string | null => {\n if (isSimpleValue(node)) {\n return String(node)\n }\n\n // Check if it's a React element with simple text children\n if (\n node &&\n typeof node === 'object' &&\n 'props' in node &&\n node.props &&\n typeof node.props === 'object' &&\n 'children' in node.props\n ) {\n const children = node.props.children\n if (isSimpleValue(children)) {\n return String(children)\n }\n }\n\n return null\n }\n\n const columns = props.columns?.map((column) => {\n const hasEllipsis =\n column.ellipsis === true ||\n (typeof column.ellipsis === 'object' && column.ellipsis)\n\n const originalRender = column.render\n\n return {\n ...column,\n sortIcon: column.sortIcon ?? defaultSortIcon,\n ellipsis: hasEllipsis\n ? {\n showTitle: false, // Disable default browser tooltip\n }\n : column.ellipsis,\n render: (value: unknown, record: T, index: number): ReactNode => {\n const renderedContent = originalRender\n ? originalRender(value, record, index)\n : value\n\n // Render null/undefined as dashes with no tooltip\n if (renderedContent == null) {\n return <span className=\"text-j2-text-secondary\">--</span>\n }\n\n // Try to extract text content for tooltip\n const tooltipText = extractTextContent(renderedContent)\n\n // If we can extract text content, wrap with tooltip\n if (tooltipText) {\n // For simple values, wrap in a span\n if (isSimpleValue(renderedContent)) {\n return (\n <Tooltip title={tooltipText} arrow={false}>\n <span className={hasEllipsis ? 'block truncate' : undefined}>\n {renderedContent}\n </span>\n </Tooltip>\n )\n }\n\n // For React elements, wrap the element itself\n return (\n <Tooltip title={tooltipText} arrow={false}>\n <div>{renderedContent as ReactNode}</div>\n </Tooltip>\n )\n }\n\n // Complex components without extractable text - return as is\n return renderedContent as ReactNode\n },\n }\n })\n\n const paginationConfig = props.pagination\n ? withDesignSystemPaginationOverrides(\n typeof props.pagination === 'object' ? props.pagination : {},\n {\n paginationTextLabels,\n isSmall:\n (typeof props.pagination === 'object' &&\n props.pagination.size === 'small') ||\n props.size === 'small',\n }\n )\n : false\n\n return (\n <div\n className={cx(props.className, {\n [s.bordered]: props.bordered && !verticalBorders,\n [s.alternatingRows]: alternatingRows,\n })}\n >\n <AntdTable<T>\n showSorterTooltip={{ target: 'sorter-icon' }}\n {...props}\n loading={loading}\n columns={columns}\n pagination={paginationConfig}\n rowKey={(record) => JSON.stringify(record)}\n locale={{\n emptyText: (\n <div\n style={{ height: props.scroll?.y || 400, width: 'content-fit' }}\n />\n ),\n }}\n />\n </div>\n )\n}\n\ntype ColumnProps<T extends AnyObject> = Expand<\n ComponentProps<typeof AntdTable.Column<T>>\n>\n\nconst TableColumn = <T extends AnyObject>(props: ColumnProps<T>) => {\n return <AntdTable.Column<T> {...props} sortIcon={defaultSortIcon} />\n}\nTableColumn.displayName = 'Table.Column'\n\nTable.Column = TableColumn\nTable.Summary = AntdTable.Summary\n\nexport type { TableColumnType } from 'antd'\nexport { Table }\n"],"names":["jsx","CaretUpIcon","CaretDownIcon","CaretUpDownIcon","Spinner","jsxs","Tooltip","withDesignSystemPaginationOverrides","s","AntdTable"],"mappings":"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"}
@@ -17,7 +17,10 @@ declare const Table: {
17
17
  <T extends AnyObject>(props: ColumnProps<T>): import("react").JSX.Element;
18
18
  displayName: string;
19
19
  };
20
- Summary: typeof import('rc-table/lib/Footer/Summary').default;
20
+ Summary: import('react').FC<import('react').PropsWithChildren<import('@rc-component/table/es/Footer/Summary').SummaryProps>> & {
21
+ Row: React.FC<React.PropsWithChildren<import('@rc-component/table/es/Footer/Row').FooterRowProps>>;
22
+ Cell: React.FC<React.PropsWithChildren<import('@rc-component/table/es/Footer/Cell').SummaryCellProps>>;
23
+ };
21
24
  };
22
25
  type ColumnProps<T extends AnyObject> = Expand<ComponentProps<typeof AntdTable.Column<T>>>;
23
26
  export type { TableColumnType } from 'antd';
@@ -21,7 +21,7 @@ const Table = ({
21
21
  var _a, _b;
22
22
  const defaultLoadingProps = {
23
23
  indicator: /* @__PURE__ */ jsx(Spinner, { className: "!w-fit !h-fit !mx-0 translate-x-[-50%]" }),
24
- tip: /* @__PURE__ */ jsxs("div", { className: "mt-20", children: [
24
+ description: /* @__PURE__ */ jsxs("div", { className: "mt-20", children: [
25
25
  /* @__PURE__ */ jsx("h4", { children: "Loading this chart" }),
26
26
  /* @__PURE__ */ jsx("span", { className: "text-lg", children: "Please wait a moment" })
27
27
  ] })
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sources":["../../../../src/components/table/Table.tsx"],"sourcesContent":["import { Table as AntdTable, SpinProps, TableProps, Tooltip } from 'antd'\nimport cx from 'classnames'\nimport s from './Table.module.css'\nimport { Spinner } from '../spinner'\nimport { withDesignSystemPaginationOverrides } from '../pagination/Pagination'\nimport {\n CaretDownIcon,\n CaretUpIcon,\n CaretUpDownIcon,\n} from '@phosphor-icons/react'\nimport { ComponentProps, ReactNode } from 'react'\nimport { AnyObject } from 'antd/es/_util/type'\n\ntype MergedProps<T> = TableProps<T> & {\n verticalBorders?: boolean\n alternatingRows?: boolean\n columns?: TableProps<T>['columns']\n paginationTextLabels?: boolean\n}\n\ntype Props<T> = Expand<MergedProps<T>>\n\nexport const defaultSortIcon = ({\n sortOrder,\n}: {\n sortOrder: 'ascend' | 'descend' | null\n}) => {\n if (sortOrder == 'ascend') return <CaretUpIcon />\n if (sortOrder == 'descend') return <CaretDownIcon />\n return <CaretUpDownIcon />\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unnecessary-type-constraint\nconst Table = <T extends unknown = any>({\n verticalBorders,\n alternatingRows,\n paginationTextLabels = false,\n ...props\n}: Props<T>) => {\n const defaultLoadingProps: SpinProps = {\n indicator: <Spinner className=\"!w-fit !h-fit !mx-0 translate-x-[-50%]\" />,\n tip: (\n <div className=\"mt-20\">\n <h4>Loading this chart</h4>\n <span className=\"text-lg\">Please wait a moment</span>\n </div>\n ),\n }\n\n const loading: SpinProps | boolean | undefined =\n typeof props.loading == 'object'\n ? { ...props.loading, ...defaultLoadingProps }\n : props.loading && defaultLoadingProps\n\n const isSimpleValue = (\n value: unknown\n ): value is string | number | boolean => {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n )\n }\n\n // Helper to extract text content from React elements\n const extractTextContent = (node: unknown): string | null => {\n if (isSimpleValue(node)) {\n return String(node)\n }\n\n // Check if it's a React element with simple text children\n if (\n node &&\n typeof node === 'object' &&\n 'props' in node &&\n node.props &&\n typeof node.props === 'object' &&\n 'children' in node.props\n ) {\n const children = node.props.children\n if (isSimpleValue(children)) {\n return String(children)\n }\n }\n\n return null\n }\n\n const columns = props.columns?.map((column) => {\n const hasEllipsis =\n column.ellipsis === true ||\n (typeof column.ellipsis === 'object' && column.ellipsis)\n\n const originalRender = column.render\n\n return {\n ...column,\n sortIcon: column.sortIcon ?? defaultSortIcon,\n ellipsis: hasEllipsis\n ? {\n showTitle: false, // Disable default browser tooltip\n }\n : column.ellipsis,\n render: (value: unknown, record: T, index: number): ReactNode => {\n const renderedContent = originalRender\n ? originalRender(value, record, index)\n : value\n\n // Render null/undefined as dashes with no tooltip\n if (renderedContent == null) {\n return <span className=\"text-j2-text-secondary\">--</span>\n }\n\n // Try to extract text content for tooltip\n const tooltipText = extractTextContent(renderedContent)\n\n // If we can extract text content, wrap with tooltip\n if (tooltipText) {\n // For simple values, wrap in a span\n if (isSimpleValue(renderedContent)) {\n return (\n <Tooltip title={tooltipText} arrow={false}>\n <span className={hasEllipsis ? 'block truncate' : undefined}>\n {renderedContent}\n </span>\n </Tooltip>\n )\n }\n\n // For React elements, wrap the element itself\n return (\n <Tooltip title={tooltipText} arrow={false}>\n <div>{renderedContent as ReactNode}</div>\n </Tooltip>\n )\n }\n\n // Complex components without extractable text - return as is\n return renderedContent as ReactNode\n },\n }\n })\n\n const paginationConfig = props.pagination\n ? withDesignSystemPaginationOverrides(\n typeof props.pagination === 'object' ? props.pagination : {},\n {\n paginationTextLabels,\n isSmall:\n (typeof props.pagination === 'object' &&\n props.pagination.size === 'small') ||\n props.size === 'small',\n }\n )\n : false\n\n return (\n <div\n className={cx(props.className, {\n [s.bordered]: props.bordered && !verticalBorders,\n [s.alternatingRows]: alternatingRows,\n })}\n >\n <AntdTable<T>\n showSorterTooltip={{ target: 'sorter-icon' }}\n {...props}\n loading={loading}\n columns={columns}\n pagination={paginationConfig}\n rowKey={(record) => JSON.stringify(record)}\n locale={{\n emptyText: (\n <div\n style={{ height: props.scroll?.y || 400, width: 'content-fit' }}\n />\n ),\n }}\n />\n </div>\n )\n}\n\ntype ColumnProps<T extends AnyObject> = Expand<\n ComponentProps<typeof AntdTable.Column<T>>\n>\n\nconst TableColumn = <T extends AnyObject>(props: ColumnProps<T>) => {\n return <AntdTable.Column<T> {...props} sortIcon={defaultSortIcon} />\n}\nTableColumn.displayName = 'Table.Column'\n\nTable.Column = TableColumn\nTable.Summary = AntdTable.Summary\n\nexport type { TableColumnType } from 'antd'\nexport { Table }\n"],"names":["AntdTable"],"mappings":"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"}
1
+ {"version":3,"file":"Table.js","sources":["../../../../src/components/table/Table.tsx"],"sourcesContent":["import { Table as AntdTable, SpinProps, TableProps, Tooltip } from 'antd'\nimport cx from 'classnames'\nimport s from './Table.module.css'\nimport { Spinner } from '../spinner'\nimport { withDesignSystemPaginationOverrides } from '../pagination/Pagination'\nimport {\n CaretDownIcon,\n CaretUpIcon,\n CaretUpDownIcon,\n} from '@phosphor-icons/react'\nimport { ComponentProps, ReactNode } from 'react'\nimport { AnyObject } from 'antd/es/_util/type'\n\ntype MergedProps<T> = TableProps<T> & {\n verticalBorders?: boolean\n alternatingRows?: boolean\n columns?: TableProps<T>['columns']\n paginationTextLabels?: boolean\n}\n\ntype Props<T> = Expand<MergedProps<T>>\n\nexport const defaultSortIcon = ({\n sortOrder,\n}: {\n sortOrder: 'ascend' | 'descend' | null\n}) => {\n if (sortOrder == 'ascend') return <CaretUpIcon />\n if (sortOrder == 'descend') return <CaretDownIcon />\n return <CaretUpDownIcon />\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unnecessary-type-constraint\nconst Table = <T extends unknown = any>({\n verticalBorders,\n alternatingRows,\n paginationTextLabels = false,\n ...props\n}: Props<T>) => {\n const defaultLoadingProps: SpinProps = {\n indicator: <Spinner className=\"!w-fit !h-fit !mx-0 translate-x-[-50%]\" />,\n description: (\n <div className=\"mt-20\">\n <h4>Loading this chart</h4>\n <span className=\"text-lg\">Please wait a moment</span>\n </div>\n ),\n }\n\n const loading: SpinProps | boolean | undefined =\n typeof props.loading == 'object'\n ? { ...props.loading, ...defaultLoadingProps }\n : props.loading && defaultLoadingProps\n\n const isSimpleValue = (\n value: unknown\n ): value is string | number | boolean => {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n )\n }\n\n // Helper to extract text content from React elements\n const extractTextContent = (node: unknown): string | null => {\n if (isSimpleValue(node)) {\n return String(node)\n }\n\n // Check if it's a React element with simple text children\n if (\n node &&\n typeof node === 'object' &&\n 'props' in node &&\n node.props &&\n typeof node.props === 'object' &&\n 'children' in node.props\n ) {\n const children = node.props.children\n if (isSimpleValue(children)) {\n return String(children)\n }\n }\n\n return null\n }\n\n const columns = props.columns?.map((column) => {\n const hasEllipsis =\n column.ellipsis === true ||\n (typeof column.ellipsis === 'object' && column.ellipsis)\n\n const originalRender = column.render\n\n return {\n ...column,\n sortIcon: column.sortIcon ?? defaultSortIcon,\n ellipsis: hasEllipsis\n ? {\n showTitle: false, // Disable default browser tooltip\n }\n : column.ellipsis,\n render: (value: unknown, record: T, index: number): ReactNode => {\n const renderedContent = originalRender\n ? originalRender(value, record, index)\n : value\n\n // Render null/undefined as dashes with no tooltip\n if (renderedContent == null) {\n return <span className=\"text-j2-text-secondary\">--</span>\n }\n\n // Try to extract text content for tooltip\n const tooltipText = extractTextContent(renderedContent)\n\n // If we can extract text content, wrap with tooltip\n if (tooltipText) {\n // For simple values, wrap in a span\n if (isSimpleValue(renderedContent)) {\n return (\n <Tooltip title={tooltipText} arrow={false}>\n <span className={hasEllipsis ? 'block truncate' : undefined}>\n {renderedContent}\n </span>\n </Tooltip>\n )\n }\n\n // For React elements, wrap the element itself\n return (\n <Tooltip title={tooltipText} arrow={false}>\n <div>{renderedContent as ReactNode}</div>\n </Tooltip>\n )\n }\n\n // Complex components without extractable text - return as is\n return renderedContent as ReactNode\n },\n }\n })\n\n const paginationConfig = props.pagination\n ? withDesignSystemPaginationOverrides(\n typeof props.pagination === 'object' ? props.pagination : {},\n {\n paginationTextLabels,\n isSmall:\n (typeof props.pagination === 'object' &&\n props.pagination.size === 'small') ||\n props.size === 'small',\n }\n )\n : false\n\n return (\n <div\n className={cx(props.className, {\n [s.bordered]: props.bordered && !verticalBorders,\n [s.alternatingRows]: alternatingRows,\n })}\n >\n <AntdTable<T>\n showSorterTooltip={{ target: 'sorter-icon' }}\n {...props}\n loading={loading}\n columns={columns}\n pagination={paginationConfig}\n rowKey={(record) => JSON.stringify(record)}\n locale={{\n emptyText: (\n <div\n style={{ height: props.scroll?.y || 400, width: 'content-fit' }}\n />\n ),\n }}\n />\n </div>\n )\n}\n\ntype ColumnProps<T extends AnyObject> = Expand<\n ComponentProps<typeof AntdTable.Column<T>>\n>\n\nconst TableColumn = <T extends AnyObject>(props: ColumnProps<T>) => {\n return <AntdTable.Column<T> {...props} sortIcon={defaultSortIcon} />\n}\nTableColumn.displayName = 'Table.Column'\n\nTable.Column = TableColumn\nTable.Summary = AntdTable.Summary\n\nexport type { TableColumnType } from 'antd'\nexport { Table }\n"],"names":["AntdTable"],"mappings":"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"}
@@ -42,6 +42,8 @@ const Tag = ({
42
42
  showIcon = false,
43
43
  icon,
44
44
  size = "default",
45
+ bordered,
46
+ variant,
45
47
  ...props
46
48
  }) => {
47
49
  const iconComponent = React__namespace.useMemo(() => {
@@ -60,9 +62,11 @@ const Tag = ({
60
62
  antd.Tag,
61
63
  {
62
64
  ...props,
65
+ variant: variant ?? (bordered === false ? "filled" : "outlined"),
63
66
  color: status,
64
67
  icon: iconComponent,
65
68
  className: cx(
69
+ "j2-tag",
66
70
  props.className,
67
71
  statusToClassName[status],
68
72
  size === "small" && "!px-1 !py-0 !h-auto !text-j2-xs !rounded-j2-sm"
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.cjs","sources":["../../../../src/components/tag/Tag.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Tag as AntdTag, TagProps } from 'antd'\nimport {\n ArrowsClockwiseIcon,\n CheckCircleIcon,\n GearIcon,\n Icon,\n WarningCircleIcon,\n XCircleIcon,\n} from '@phosphor-icons/react'\nimport cx from 'classnames'\nimport './Tag.css'\n\ntype BaseProps = Expand<Omit<TagProps, 'icon'>> & {\n status: 'default' | 'error' | 'success' | 'warning' | 'processing'\n}\n\ntype DefaultSizeProps = BaseProps & {\n size?: 'default'\n icon?: Icon\n showIcon?: boolean\n}\n\ntype SmallSizeProps = BaseProps & {\n size: 'small'\n /** Icons are not supported on the small variant — omit this prop. */\n icon?: never\n showIcon?: never\n}\n\ntype Props = DefaultSizeProps | SmallSizeProps\n\nconst colorToIcon = {\n error: XCircleIcon,\n success: CheckCircleIcon,\n warning: WarningCircleIcon,\n processing: ArrowsClockwiseIcon,\n default: GearIcon,\n}\n\nconst statusToColor = {\n error: 'var(--j2-color-error-text)',\n success: 'var(--j2-color-success)',\n warning: 'var(--j2-color-warning-text)',\n processing: 'var(--j2-color-primary)',\n default: 'var(--j2-color-text)',\n}\n\nexport const Tag = ({\n status,\n showIcon = false,\n icon,\n size = 'default',\n ...props\n}: Props) => {\n const iconComponent = React.useMemo(() => {\n if (!showIcon || size === 'small') return null\n\n const baseProps = {\n size: 12,\n }\n\n const iconName: Icon = icon ?? colorToIcon[status]\n const color: string = statusToColor[status]\n\n return (\n <span role=\"img\" className=\"anticon\" aria-label={`${status} icon`}>\n {React.createElement(iconName, { color, ...baseProps })}\n </span>\n )\n }, [status, showIcon, icon])\n\n const statusToClassName: Partial<Record<keyof typeof statusToColor, string>> =\n {\n default: 'bg-[var(--j2-color-fill-quaternary)]',\n }\n\n return (\n <AntdTag\n {...props}\n color={status}\n icon={iconComponent}\n className={cx(\n props.className,\n statusToClassName[status],\n size === 'small' && '!px-1 !py-0 !h-auto !text-j2-xs !rounded-j2-sm'\n )}\n />\n )\n}\n"],"names":["XCircleIcon","CheckCircleIcon","WarningCircleIcon","ArrowsClockwiseIcon","GearIcon","React","jsx","AntdTag"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,MAAM,cAAc;AAAA,EAClB,OAAOA,MAAAA;AAAAA,EACP,SAASC,MAAAA;AAAAA,EACT,SAASC,MAAAA;AAAAA,EACT,YAAYC,MAAAA;AAAAA,EACZ,SAASC,MAAAA;AACX;AAEA,MAAM,gBAAgB;AAAA,EACpB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AACX;AAEO,MAAM,MAAM,CAAC;AAAA,EAClB;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,MAAa;AACX,QAAM,gBAAgBC,iBAAM,QAAQ,MAAM;AACxC,QAAI,CAAC,YAAY,SAAS,QAAS,QAAO;AAE1C,UAAM,YAAY;AAAA,MAChB,MAAM;AAAA,IAAA;AAGR,UAAM,WAAiB,QAAQ,YAAY,MAAM;AACjD,UAAM,QAAgB,cAAc,MAAM;AAE1C,0CACG,QAAA,EAAK,MAAK,OAAM,WAAU,WAAU,cAAY,GAAG,MAAM,SACvD,UAAAA,iBAAM,cAAc,UAAU,EAAE,OAAO,GAAG,UAAA,CAAW,GACxD;AAAA,EAEJ,GAAG,CAAC,QAAQ,UAAU,IAAI,CAAC;AAE3B,QAAM,oBACJ;AAAA,IACE,SAAS;AAAA,EAAA;AAGb,SACEC,2BAAAA;AAAAA,IAACC,KAAAA;AAAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,WAAW;AAAA,QACT,MAAM;AAAA,QACN,kBAAkB,MAAM;AAAA,QACxB,SAAS,WAAW;AAAA,MAAA;AAAA,IACtB;AAAA,EAAA;AAGN;;"}
1
+ {"version":3,"file":"Tag.cjs","sources":["../../../../src/components/tag/Tag.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Tag as AntdTag, TagProps } from 'antd'\nimport {\n ArrowsClockwiseIcon,\n CheckCircleIcon,\n GearIcon,\n Icon,\n WarningCircleIcon,\n XCircleIcon,\n} from '@phosphor-icons/react'\nimport cx from 'classnames'\nimport './Tag.css'\n\ntype BaseProps = Expand<Omit<TagProps, 'icon'>> & {\n status: 'default' | 'error' | 'success' | 'warning' | 'processing'\n}\n\ntype DefaultSizeProps = BaseProps & {\n size?: 'default'\n icon?: Icon\n showIcon?: boolean\n}\n\ntype SmallSizeProps = BaseProps & {\n size: 'small'\n /** Icons are not supported on the small variant — omit this prop. */\n icon?: never\n showIcon?: never\n}\n\ntype Props = DefaultSizeProps | SmallSizeProps\n\nconst colorToIcon = {\n error: XCircleIcon,\n success: CheckCircleIcon,\n warning: WarningCircleIcon,\n processing: ArrowsClockwiseIcon,\n default: GearIcon,\n}\n\nconst statusToColor = {\n error: 'var(--j2-color-error-text)',\n success: 'var(--j2-color-success)',\n warning: 'var(--j2-color-warning-text)',\n processing: 'var(--j2-color-primary)',\n default: 'var(--j2-color-text)',\n}\n\nexport const Tag = ({\n status,\n showIcon = false,\n icon,\n size = 'default',\n bordered,\n variant,\n ...props\n}: Props) => {\n const iconComponent = React.useMemo(() => {\n if (!showIcon || size === 'small') return null\n\n const baseProps = {\n size: 12,\n }\n\n const iconName: Icon = icon ?? colorToIcon[status]\n const color: string = statusToColor[status]\n\n return (\n <span role=\"img\" className=\"anticon\" aria-label={`${status} icon`}>\n {React.createElement(iconName, { color, ...baseProps })}\n </span>\n )\n }, [status, showIcon, icon])\n\n const statusToClassName: Partial<Record<keyof typeof statusToColor, string>> =\n {\n default: 'bg-[var(--j2-color-fill-quaternary)]',\n }\n\n return (\n <AntdTag\n {...props}\n variant={variant ?? (bordered === false ? 'filled' : 'outlined')}\n color={status}\n icon={iconComponent}\n className={cx(\n 'j2-tag',\n props.className,\n statusToClassName[status],\n size === 'small' && '!px-1 !py-0 !h-auto !text-j2-xs !rounded-j2-sm'\n )}\n />\n )\n}\n"],"names":["XCircleIcon","CheckCircleIcon","WarningCircleIcon","ArrowsClockwiseIcon","GearIcon","React","jsx","AntdTag"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,MAAM,cAAc;AAAA,EAClB,OAAOA,MAAAA;AAAAA,EACP,SAASC,MAAAA;AAAAA,EACT,SAASC,MAAAA;AAAAA,EACT,YAAYC,MAAAA;AAAAA,EACZ,SAASC,MAAAA;AACX;AAEA,MAAM,gBAAgB;AAAA,EACpB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AACX;AAEO,MAAM,MAAM,CAAC;AAAA,EAClB;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAa;AACX,QAAM,gBAAgBC,iBAAM,QAAQ,MAAM;AACxC,QAAI,CAAC,YAAY,SAAS,QAAS,QAAO;AAE1C,UAAM,YAAY;AAAA,MAChB,MAAM;AAAA,IAAA;AAGR,UAAM,WAAiB,QAAQ,YAAY,MAAM;AACjD,UAAM,QAAgB,cAAc,MAAM;AAE1C,0CACG,QAAA,EAAK,MAAK,OAAM,WAAU,WAAU,cAAY,GAAG,MAAM,SACvD,UAAAA,iBAAM,cAAc,UAAU,EAAE,OAAO,GAAG,UAAA,CAAW,GACxD;AAAA,EAEJ,GAAG,CAAC,QAAQ,UAAU,IAAI,CAAC;AAE3B,QAAM,oBACJ;AAAA,IACE,SAAS;AAAA,EAAA;AAGb,SACEC,2BAAAA;AAAAA,IAACC,KAAAA;AAAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,SAAS,YAAY,aAAa,QAAQ,WAAW;AAAA,MACrD,OAAO;AAAA,MACP,MAAM;AAAA,MACN,WAAW;AAAA,QACT;AAAA,QACA,MAAM;AAAA,QACN,kBAAkB,MAAM;AAAA,QACxB,SAAS,WAAW;AAAA,MAAA;AAAA,IACtB;AAAA,EAAA;AAGN;;"}
@@ -16,5 +16,5 @@ type SmallSizeProps = BaseProps & {
16
16
  showIcon?: never;
17
17
  };
18
18
  type Props = DefaultSizeProps | SmallSizeProps;
19
- export declare const Tag: ({ status, showIcon, icon, size, ...props }: Props) => React.JSX.Element;
19
+ export declare const Tag: ({ status, showIcon, icon, size, bordered, variant, ...props }: Props) => React.JSX.Element;
20
20
  export {};
@@ -23,6 +23,8 @@ const Tag = ({
23
23
  showIcon = false,
24
24
  icon,
25
25
  size = "default",
26
+ bordered,
27
+ variant,
26
28
  ...props
27
29
  }) => {
28
30
  const iconComponent = React.useMemo(() => {
@@ -41,9 +43,11 @@ const Tag = ({
41
43
  Tag$1,
42
44
  {
43
45
  ...props,
46
+ variant: variant ?? (bordered === false ? "filled" : "outlined"),
44
47
  color: status,
45
48
  icon: iconComponent,
46
49
  className: cx(
50
+ "j2-tag",
47
51
  props.className,
48
52
  statusToClassName[status],
49
53
  size === "small" && "!px-1 !py-0 !h-auto !text-j2-xs !rounded-j2-sm"
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.js","sources":["../../../../src/components/tag/Tag.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Tag as AntdTag, TagProps } from 'antd'\nimport {\n ArrowsClockwiseIcon,\n CheckCircleIcon,\n GearIcon,\n Icon,\n WarningCircleIcon,\n XCircleIcon,\n} from '@phosphor-icons/react'\nimport cx from 'classnames'\nimport './Tag.css'\n\ntype BaseProps = Expand<Omit<TagProps, 'icon'>> & {\n status: 'default' | 'error' | 'success' | 'warning' | 'processing'\n}\n\ntype DefaultSizeProps = BaseProps & {\n size?: 'default'\n icon?: Icon\n showIcon?: boolean\n}\n\ntype SmallSizeProps = BaseProps & {\n size: 'small'\n /** Icons are not supported on the small variant — omit this prop. */\n icon?: never\n showIcon?: never\n}\n\ntype Props = DefaultSizeProps | SmallSizeProps\n\nconst colorToIcon = {\n error: XCircleIcon,\n success: CheckCircleIcon,\n warning: WarningCircleIcon,\n processing: ArrowsClockwiseIcon,\n default: GearIcon,\n}\n\nconst statusToColor = {\n error: 'var(--j2-color-error-text)',\n success: 'var(--j2-color-success)',\n warning: 'var(--j2-color-warning-text)',\n processing: 'var(--j2-color-primary)',\n default: 'var(--j2-color-text)',\n}\n\nexport const Tag = ({\n status,\n showIcon = false,\n icon,\n size = 'default',\n ...props\n}: Props) => {\n const iconComponent = React.useMemo(() => {\n if (!showIcon || size === 'small') return null\n\n const baseProps = {\n size: 12,\n }\n\n const iconName: Icon = icon ?? colorToIcon[status]\n const color: string = statusToColor[status]\n\n return (\n <span role=\"img\" className=\"anticon\" aria-label={`${status} icon`}>\n {React.createElement(iconName, { color, ...baseProps })}\n </span>\n )\n }, [status, showIcon, icon])\n\n const statusToClassName: Partial<Record<keyof typeof statusToColor, string>> =\n {\n default: 'bg-[var(--j2-color-fill-quaternary)]',\n }\n\n return (\n <AntdTag\n {...props}\n color={status}\n icon={iconComponent}\n className={cx(\n props.className,\n statusToClassName[status],\n size === 'small' && '!px-1 !py-0 !h-auto !text-j2-xs !rounded-j2-sm'\n )}\n />\n )\n}\n"],"names":["AntdTag"],"mappings":";;;;;;AAgCA,MAAM,cAAc;AAAA,EAClB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AACX;AAEA,MAAM,gBAAgB;AAAA,EACpB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AACX;AAEO,MAAM,MAAM,CAAC;AAAA,EAClB;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,MAAa;AACX,QAAM,gBAAgB,MAAM,QAAQ,MAAM;AACxC,QAAI,CAAC,YAAY,SAAS,QAAS,QAAO;AAE1C,UAAM,YAAY;AAAA,MAChB,MAAM;AAAA,IAAA;AAGR,UAAM,WAAiB,QAAQ,YAAY,MAAM;AACjD,UAAM,QAAgB,cAAc,MAAM;AAE1C,+BACG,QAAA,EAAK,MAAK,OAAM,WAAU,WAAU,cAAY,GAAG,MAAM,SACvD,UAAA,MAAM,cAAc,UAAU,EAAE,OAAO,GAAG,UAAA,CAAW,GACxD;AAAA,EAEJ,GAAG,CAAC,QAAQ,UAAU,IAAI,CAAC;AAE3B,QAAM,oBACJ;AAAA,IACE,SAAS;AAAA,EAAA;AAGb,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,OAAO;AAAA,MACP,MAAM;AAAA,MACN,WAAW;AAAA,QACT,MAAM;AAAA,QACN,kBAAkB,MAAM;AAAA,QACxB,SAAS,WAAW;AAAA,MAAA;AAAA,IACtB;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"Tag.js","sources":["../../../../src/components/tag/Tag.tsx"],"sourcesContent":["import * as React from 'react'\nimport { Tag as AntdTag, TagProps } from 'antd'\nimport {\n ArrowsClockwiseIcon,\n CheckCircleIcon,\n GearIcon,\n Icon,\n WarningCircleIcon,\n XCircleIcon,\n} from '@phosphor-icons/react'\nimport cx from 'classnames'\nimport './Tag.css'\n\ntype BaseProps = Expand<Omit<TagProps, 'icon'>> & {\n status: 'default' | 'error' | 'success' | 'warning' | 'processing'\n}\n\ntype DefaultSizeProps = BaseProps & {\n size?: 'default'\n icon?: Icon\n showIcon?: boolean\n}\n\ntype SmallSizeProps = BaseProps & {\n size: 'small'\n /** Icons are not supported on the small variant — omit this prop. */\n icon?: never\n showIcon?: never\n}\n\ntype Props = DefaultSizeProps | SmallSizeProps\n\nconst colorToIcon = {\n error: XCircleIcon,\n success: CheckCircleIcon,\n warning: WarningCircleIcon,\n processing: ArrowsClockwiseIcon,\n default: GearIcon,\n}\n\nconst statusToColor = {\n error: 'var(--j2-color-error-text)',\n success: 'var(--j2-color-success)',\n warning: 'var(--j2-color-warning-text)',\n processing: 'var(--j2-color-primary)',\n default: 'var(--j2-color-text)',\n}\n\nexport const Tag = ({\n status,\n showIcon = false,\n icon,\n size = 'default',\n bordered,\n variant,\n ...props\n}: Props) => {\n const iconComponent = React.useMemo(() => {\n if (!showIcon || size === 'small') return null\n\n const baseProps = {\n size: 12,\n }\n\n const iconName: Icon = icon ?? colorToIcon[status]\n const color: string = statusToColor[status]\n\n return (\n <span role=\"img\" className=\"anticon\" aria-label={`${status} icon`}>\n {React.createElement(iconName, { color, ...baseProps })}\n </span>\n )\n }, [status, showIcon, icon])\n\n const statusToClassName: Partial<Record<keyof typeof statusToColor, string>> =\n {\n default: 'bg-[var(--j2-color-fill-quaternary)]',\n }\n\n return (\n <AntdTag\n {...props}\n variant={variant ?? (bordered === false ? 'filled' : 'outlined')}\n color={status}\n icon={iconComponent}\n className={cx(\n 'j2-tag',\n props.className,\n statusToClassName[status],\n size === 'small' && '!px-1 !py-0 !h-auto !text-j2-xs !rounded-j2-sm'\n )}\n />\n )\n}\n"],"names":["AntdTag"],"mappings":";;;;;;AAgCA,MAAM,cAAc;AAAA,EAClB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AACX;AAEA,MAAM,gBAAgB;AAAA,EACpB,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AACX;AAEO,MAAM,MAAM,CAAC;AAAA,EAClB;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAa;AACX,QAAM,gBAAgB,MAAM,QAAQ,MAAM;AACxC,QAAI,CAAC,YAAY,SAAS,QAAS,QAAO;AAE1C,UAAM,YAAY;AAAA,MAChB,MAAM;AAAA,IAAA;AAGR,UAAM,WAAiB,QAAQ,YAAY,MAAM;AACjD,UAAM,QAAgB,cAAc,MAAM;AAE1C,+BACG,QAAA,EAAK,MAAK,OAAM,WAAU,WAAU,cAAY,GAAG,MAAM,SACvD,UAAA,MAAM,cAAc,UAAU,EAAE,OAAO,GAAG,UAAA,CAAW,GACxD;AAAA,EAEJ,GAAG,CAAC,QAAQ,UAAU,IAAI,CAAC;AAE3B,QAAM,oBACJ;AAAA,IACE,SAAS;AAAA,EAAA;AAGb,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,SAAS,YAAY,aAAa,QAAQ,WAAW;AAAA,MACrD,OAAO;AAAA,MACP,MAAM;AAAA,MACN,WAAW;AAAA,QACT;AAAA,QACA,MAAM;AAAA,QACN,kBAAkB,MAAM;AAAA,QACxB,SAAS,WAAW;AAAA,MAAA;AAAA,IACtB;AAAA,EAAA;AAGN;"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("@highcharts/react");
5
5
  require("@highcharts/react/series/Venn.js");
6
- require("@highcharts/react/options/Accessibility.js");
6
+ require("@highcharts/react/modules/Accessibility.js");
7
7
  const antd = require("antd");
8
8
  const VennDiagram = ({ data, title, tooltip, onClick }) => {
9
9
  const { token } = antd.theme.useToken();
@@ -1 +1 @@
1
- {"version":3,"file":"VennDiagram.cjs","sources":["../../../../src/components/vennDiagram/VennDiagram.tsx"],"sourcesContent":["import type * as Highcharts from 'highcharts'\nimport { Chart as HighchartsReact } from '@highcharts/react'\nimport '@highcharts/react/series/Venn.js'\nimport '@highcharts/react/options/Accessibility.js'\nimport { theme } from 'antd'\n\ntype Props = {\n data: Highcharts.PointOptionsObject[]\n title?: string\n tooltip?: Highcharts.TooltipOptions\n onClick?: Highcharts.SeriesClickCallbackFunction\n}\n\nexport const VennDiagram = ({ data, title, tooltip, onClick }: Props) => {\n const { token } = theme.useToken()\n\n const baseFont: Highcharts.CSSObject = {\n fontSize: `${token.fontSize}px`,\n fontFamily: token.fontFamily,\n color: token.colorText,\n textOutline: 'none',\n opacity: 1,\n }\n\n const options: Highcharts.Options = {\n title: {\n text: title,\n },\n ...(tooltip ? { tooltip } : {}),\n chart: {\n spacing: [36, 36, 36, 36],\n },\n series: [\n {\n type: 'venn',\n data,\n events: {\n click: onClick,\n },\n cursor: onClick ? 'pointer' : undefined,\n dataLabels: {\n style: baseFont,\n },\n states: {\n inactive: {\n opacity: 0.3,\n },\n },\n },\n ],\n }\n\n return (\n <HighchartsReact\n options={options}\n containerProps={{ className: 'highcharts-light' }}\n />\n )\n}\n"],"names":["theme","jsx","HighchartsReact"],"mappings":";;;;;;;AAaO,MAAM,cAAc,CAAC,EAAE,MAAM,OAAO,SAAS,cAAqB;AACvE,QAAM,EAAE,MAAA,IAAUA,KAAAA,MAAM,SAAA;AAExB,QAAM,WAAiC;AAAA,IACrC,UAAU,GAAG,MAAM,QAAQ;AAAA,IAC3B,YAAY,MAAM;AAAA,IAClB,OAAO,MAAM;AAAA,IACb,aAAa;AAAA,IACb,SAAS;AAAA,EAAA;AAGX,QAAM,UAA8B;AAAA,IAClC,OAAO;AAAA,MACL,MAAM;AAAA,IAAA;AAAA,IAER,GAAI,UAAU,EAAE,QAAA,IAAY,CAAA;AAAA,IAC5B,OAAO;AAAA,MACL,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE;AAAA,IAAA;AAAA,IAE1B,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,UACN,OAAO;AAAA,QAAA;AAAA,QAET,QAAQ,UAAU,YAAY;AAAA,QAC9B,YAAY;AAAA,UACV,OAAO;AAAA,QAAA;AAAA,QAET,QAAQ;AAAA,UACN,UAAU;AAAA,YACR,SAAS;AAAA,UAAA;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGF,SACEC,2BAAAA;AAAAA,IAACC,MAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,gBAAgB,EAAE,WAAW,mBAAA;AAAA,IAAmB;AAAA,EAAA;AAGtD;;"}
1
+ {"version":3,"file":"VennDiagram.cjs","sources":["../../../../src/components/vennDiagram/VennDiagram.tsx"],"sourcesContent":["import type * as Highcharts from 'highcharts'\nimport { Chart as HighchartsReact } from '@highcharts/react'\nimport '@highcharts/react/series/Venn.js'\n// `modules/`, not `options/` — see the note in BarChart.tsx. `series/` was not\n// moved and already resolves to the instance the chart uses.\nimport '@highcharts/react/modules/Accessibility.js'\nimport { theme } from 'antd'\n\ntype Props = {\n data: Highcharts.PointOptionsObject[]\n title?: string\n tooltip?: Highcharts.TooltipOptions\n onClick?: Highcharts.SeriesClickCallbackFunction\n}\n\nexport const VennDiagram = ({ data, title, tooltip, onClick }: Props) => {\n const { token } = theme.useToken()\n\n const baseFont: Highcharts.CSSObject = {\n fontSize: `${token.fontSize}px`,\n fontFamily: token.fontFamily,\n color: token.colorText,\n textOutline: 'none',\n opacity: 1,\n }\n\n const options: Highcharts.Options = {\n title: {\n text: title,\n },\n ...(tooltip ? { tooltip } : {}),\n chart: {\n spacing: [36, 36, 36, 36],\n },\n series: [\n {\n type: 'venn',\n data,\n events: {\n click: onClick,\n },\n cursor: onClick ? 'pointer' : undefined,\n dataLabels: {\n style: baseFont,\n },\n states: {\n inactive: {\n opacity: 0.3,\n },\n },\n },\n ],\n }\n\n return (\n <HighchartsReact\n options={options}\n containerProps={{ className: 'highcharts-light' }}\n />\n )\n}\n"],"names":["theme","jsx","HighchartsReact"],"mappings":";;;;;;;AAeO,MAAM,cAAc,CAAC,EAAE,MAAM,OAAO,SAAS,cAAqB;AACvE,QAAM,EAAE,MAAA,IAAUA,KAAAA,MAAM,SAAA;AAExB,QAAM,WAAiC;AAAA,IACrC,UAAU,GAAG,MAAM,QAAQ;AAAA,IAC3B,YAAY,MAAM;AAAA,IAClB,OAAO,MAAM;AAAA,IACb,aAAa;AAAA,IACb,SAAS;AAAA,EAAA;AAGX,QAAM,UAA8B;AAAA,IAClC,OAAO;AAAA,MACL,MAAM;AAAA,IAAA;AAAA,IAER,GAAI,UAAU,EAAE,QAAA,IAAY,CAAA;AAAA,IAC5B,OAAO;AAAA,MACL,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE;AAAA,IAAA;AAAA,IAE1B,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,UACN,OAAO;AAAA,QAAA;AAAA,QAET,QAAQ,UAAU,YAAY;AAAA,QAC9B,YAAY;AAAA,UACV,OAAO;AAAA,QAAA;AAAA,QAET,QAAQ;AAAA,UACN,UAAU;AAAA,YACR,SAAS;AAAA,UAAA;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGF,SACEC,2BAAAA;AAAAA,IAACC,MAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,gBAAgB,EAAE,WAAW,mBAAA;AAAA,IAAmB;AAAA,EAAA;AAGtD;;"}
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { Chart } from "@highcharts/react";
3
3
  import "@highcharts/react/series/Venn.js";
4
- import "@highcharts/react/options/Accessibility.js";
4
+ import "@highcharts/react/modules/Accessibility.js";
5
5
  import { theme } from "antd";
6
6
  const VennDiagram = ({ data, title, tooltip, onClick }) => {
7
7
  const { token } = theme.useToken();
@@ -1 +1 @@
1
- {"version":3,"file":"VennDiagram.js","sources":["../../../../src/components/vennDiagram/VennDiagram.tsx"],"sourcesContent":["import type * as Highcharts from 'highcharts'\nimport { Chart as HighchartsReact } from '@highcharts/react'\nimport '@highcharts/react/series/Venn.js'\nimport '@highcharts/react/options/Accessibility.js'\nimport { theme } from 'antd'\n\ntype Props = {\n data: Highcharts.PointOptionsObject[]\n title?: string\n tooltip?: Highcharts.TooltipOptions\n onClick?: Highcharts.SeriesClickCallbackFunction\n}\n\nexport const VennDiagram = ({ data, title, tooltip, onClick }: Props) => {\n const { token } = theme.useToken()\n\n const baseFont: Highcharts.CSSObject = {\n fontSize: `${token.fontSize}px`,\n fontFamily: token.fontFamily,\n color: token.colorText,\n textOutline: 'none',\n opacity: 1,\n }\n\n const options: Highcharts.Options = {\n title: {\n text: title,\n },\n ...(tooltip ? { tooltip } : {}),\n chart: {\n spacing: [36, 36, 36, 36],\n },\n series: [\n {\n type: 'venn',\n data,\n events: {\n click: onClick,\n },\n cursor: onClick ? 'pointer' : undefined,\n dataLabels: {\n style: baseFont,\n },\n states: {\n inactive: {\n opacity: 0.3,\n },\n },\n },\n ],\n }\n\n return (\n <HighchartsReact\n options={options}\n containerProps={{ className: 'highcharts-light' }}\n />\n )\n}\n"],"names":["HighchartsReact"],"mappings":";;;;;AAaO,MAAM,cAAc,CAAC,EAAE,MAAM,OAAO,SAAS,cAAqB;AACvE,QAAM,EAAE,MAAA,IAAU,MAAM,SAAA;AAExB,QAAM,WAAiC;AAAA,IACrC,UAAU,GAAG,MAAM,QAAQ;AAAA,IAC3B,YAAY,MAAM;AAAA,IAClB,OAAO,MAAM;AAAA,IACb,aAAa;AAAA,IACb,SAAS;AAAA,EAAA;AAGX,QAAM,UAA8B;AAAA,IAClC,OAAO;AAAA,MACL,MAAM;AAAA,IAAA;AAAA,IAER,GAAI,UAAU,EAAE,QAAA,IAAY,CAAA;AAAA,IAC5B,OAAO;AAAA,MACL,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE;AAAA,IAAA;AAAA,IAE1B,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,UACN,OAAO;AAAA,QAAA;AAAA,QAET,QAAQ,UAAU,YAAY;AAAA,QAC9B,YAAY;AAAA,UACV,OAAO;AAAA,QAAA;AAAA,QAET,QAAQ;AAAA,UACN,UAAU;AAAA,YACR,SAAS;AAAA,UAAA;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGF,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,gBAAgB,EAAE,WAAW,mBAAA;AAAA,IAAmB;AAAA,EAAA;AAGtD;"}
1
+ {"version":3,"file":"VennDiagram.js","sources":["../../../../src/components/vennDiagram/VennDiagram.tsx"],"sourcesContent":["import type * as Highcharts from 'highcharts'\nimport { Chart as HighchartsReact } from '@highcharts/react'\nimport '@highcharts/react/series/Venn.js'\n// `modules/`, not `options/` — see the note in BarChart.tsx. `series/` was not\n// moved and already resolves to the instance the chart uses.\nimport '@highcharts/react/modules/Accessibility.js'\nimport { theme } from 'antd'\n\ntype Props = {\n data: Highcharts.PointOptionsObject[]\n title?: string\n tooltip?: Highcharts.TooltipOptions\n onClick?: Highcharts.SeriesClickCallbackFunction\n}\n\nexport const VennDiagram = ({ data, title, tooltip, onClick }: Props) => {\n const { token } = theme.useToken()\n\n const baseFont: Highcharts.CSSObject = {\n fontSize: `${token.fontSize}px`,\n fontFamily: token.fontFamily,\n color: token.colorText,\n textOutline: 'none',\n opacity: 1,\n }\n\n const options: Highcharts.Options = {\n title: {\n text: title,\n },\n ...(tooltip ? { tooltip } : {}),\n chart: {\n spacing: [36, 36, 36, 36],\n },\n series: [\n {\n type: 'venn',\n data,\n events: {\n click: onClick,\n },\n cursor: onClick ? 'pointer' : undefined,\n dataLabels: {\n style: baseFont,\n },\n states: {\n inactive: {\n opacity: 0.3,\n },\n },\n },\n ],\n }\n\n return (\n <HighchartsReact\n options={options}\n containerProps={{ className: 'highcharts-light' }}\n />\n )\n}\n"],"names":["HighchartsReact"],"mappings":";;;;;AAeO,MAAM,cAAc,CAAC,EAAE,MAAM,OAAO,SAAS,cAAqB;AACvE,QAAM,EAAE,MAAA,IAAU,MAAM,SAAA;AAExB,QAAM,WAAiC;AAAA,IACrC,UAAU,GAAG,MAAM,QAAQ;AAAA,IAC3B,YAAY,MAAM;AAAA,IAClB,OAAO,MAAM;AAAA,IACb,aAAa;AAAA,IACb,SAAS;AAAA,EAAA;AAGX,QAAM,UAA8B;AAAA,IAClC,OAAO;AAAA,MACL,MAAM;AAAA,IAAA;AAAA,IAER,GAAI,UAAU,EAAE,QAAA,IAAY,CAAA;AAAA,IAC5B,OAAO;AAAA,MACL,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE;AAAA,IAAA;AAAA,IAE1B,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,UACN,OAAO;AAAA,QAAA;AAAA,QAET,QAAQ,UAAU,YAAY;AAAA,QAC9B,YAAY;AAAA,UACV,OAAO;AAAA,QAAA;AAAA,QAET,QAAQ;AAAA,UACN,UAAU;AAAA,YACR,SAAS;AAAA,UAAA;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGF,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,gBAAgB,EAAE,WAAW,mBAAA;AAAA,IAAmB;AAAA,EAAA;AAGtD;"}