@coveord/plasma-mantine 56.20.1 → 57.0.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.
- package/.turbo/turbo-build.log +4 -4
- package/.turbo/turbo-test.log +104 -115
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/components/ActionIcon/ActionIcon.js +9 -4
- package/dist/cjs/components/ActionIcon/ActionIcon.js.map +1 -1
- package/dist/cjs/components/Alert/Alert.js +4 -4
- package/dist/cjs/components/Alert/Alert.js.map +1 -1
- package/dist/cjs/components/Badge/Badge.js +1 -1
- package/dist/cjs/components/Badge/Badge.js.map +1 -1
- package/dist/cjs/components/BlankSlate/BlankSlate.js +1 -1
- package/dist/cjs/components/BrowserPreview/BrowserPreview.js +2 -2
- package/dist/cjs/components/BrowserPreview/BrowserPreview.js.map +1 -1
- package/dist/cjs/components/Button/Button.js +10 -5
- package/dist/cjs/components/Button/Button.js.map +1 -1
- package/dist/cjs/components/Button/ButtonWithDisabledTooltip.js +8 -3
- package/dist/cjs/components/Button/ButtonWithDisabledTooltip.js.map +1 -1
- package/dist/cjs/components/CheckboxIcon/CheckboxIcon.js +2 -2
- package/dist/cjs/components/CheckboxIcon/CheckboxIcon.js.map +1 -1
- package/dist/cjs/components/ChildForm/ChildForm.js.map +1 -1
- package/dist/cjs/components/Chip/Chip.js +8 -3
- package/dist/cjs/components/Chip/Chip.js.map +1 -1
- package/dist/cjs/components/CircleLoader/CircleLoader.js +8 -3
- package/dist/cjs/components/CircleLoader/CircleLoader.js.map +1 -1
- package/dist/cjs/components/CodeEditor/CodeEditor.js +9 -9
- package/dist/cjs/components/CodeEditor/CodeEditor.js.map +1 -1
- package/dist/cjs/components/CodeEditor/languages/xml.js +3 -3
- package/dist/cjs/components/CodeEditor/languages/xml.js.map +1 -1
- package/dist/cjs/components/CodeEditor/search/Search.js +3 -3
- package/dist/cjs/components/CodeEditor/search/Search.js.map +1 -1
- package/dist/cjs/components/Collection/Collection.js +12 -12
- package/dist/cjs/components/Collection/Collection.js.map +1 -1
- package/dist/cjs/components/Collection/CollectionAddButton.js +1 -1
- package/dist/cjs/components/Collection/CollectionItem.js +5 -5
- package/dist/cjs/components/Collection/CollectionItem.js.map +1 -1
- package/dist/cjs/components/Collection/enhanceWithCollectionProps.js +4 -4
- package/dist/cjs/components/Collection/enhanceWithCollectionProps.js.map +1 -1
- package/dist/cjs/components/Collection/layouts/horizontal-layout/HorizontalLayout.js +1 -1
- package/dist/cjs/components/Collection/layouts/horizontal-layout/HorizontalLayoutBody.js +2 -2
- package/dist/cjs/components/Collection/layouts/horizontal-layout/HorizontalLayoutBody.js.map +1 -1
- package/dist/cjs/components/Collection/layouts/horizontal-layout/HorizontalLayoutHeader.js +1 -1
- package/dist/cjs/components/Collection/layouts/horizontal-layout/HorizontalLayoutHeader.js.map +1 -1
- package/dist/cjs/components/Collection/layouts/shared/DragHandle.js +1 -1
- package/dist/cjs/components/Collection/layouts/shared/RemoveButton.js +1 -1
- package/dist/cjs/components/Collection/layouts/shared/columnUtils.js +2 -2
- package/dist/cjs/components/Collection/layouts/shared/columnUtils.js.map +1 -1
- package/dist/cjs/components/Collection/layouts/shared/headerUtils.js +1 -1
- package/dist/cjs/components/Collection/layouts/shared/headerUtils.js.map +1 -1
- package/dist/cjs/components/Collection/layouts/shared/itemRenderer.js +7 -7
- package/dist/cjs/components/Collection/layouts/shared/itemRenderer.js.map +1 -1
- package/dist/cjs/components/Collection/layouts/vertical-layout/VerticalLayout.js +1 -1
- package/dist/cjs/components/Collection/layouts/vertical-layout/VerticalLayoutBody.js +4 -4
- package/dist/cjs/components/Collection/layouts/vertical-layout/VerticalLayoutBody.js.map +1 -1
- package/dist/cjs/components/Collection/layouts/vertical-layout/VerticalLayoutHeader.js +1 -1
- package/dist/cjs/components/Collection/layouts/vertical-layout/VerticalLayoutHeader.js.map +1 -1
- package/dist/cjs/components/CopyToClipboard/CopyToClipboard.js +6 -6
- package/dist/cjs/components/CopyToClipboard/CopyToClipboard.js.map +1 -1
- package/dist/cjs/components/DateRangePicker/DateRangePicker.js +7 -7
- package/dist/cjs/components/DateRangePicker/DateRangePicker.js.map +1 -1
- package/dist/cjs/components/DateRangePicker/DateRangePickerInlineCalendar.js +5 -5
- package/dist/cjs/components/DateRangePicker/DateRangePickerInlineCalendar.js.map +1 -1
- package/dist/cjs/components/DateRangePicker/DateRangePickerPopoverCalendar.js +3 -3
- package/dist/cjs/components/DateRangePicker/DateRangePickerPopoverCalendar.js.map +1 -1
- package/dist/cjs/components/DateRangePicker/DateRangePickerPresetSelect.js +3 -3
- package/dist/cjs/components/DateRangePicker/DateRangePickerPresetSelect.js.map +1 -1
- package/dist/cjs/components/DateRangePicker/EditableDateRangePicker.js +3 -3
- package/dist/cjs/components/DateRangePicker/EditableDateRangePicker.js.map +1 -1
- package/dist/cjs/components/DateTimeRangePicker/DateTimeRangePicker.js +1 -1
- package/dist/cjs/components/DateTimeRangePicker/EditableDateTimeRangePicker.js +3 -3
- package/dist/cjs/components/DateTimeRangePicker/EditableDateTimeRangePicker.js.map +1 -1
- package/dist/cjs/components/EllipsisText/EllipsisText.js +3 -3
- package/dist/cjs/components/EllipsisText/EllipsisText.js.map +1 -1
- package/dist/cjs/components/Facet/DefaultFacetItem.js +3 -3
- package/dist/cjs/components/Facet/DefaultFacetItem.js.map +1 -1
- package/dist/cjs/components/Facet/Facet.js +5 -5
- package/dist/cjs/components/Facet/Facet.js.map +1 -1
- package/dist/cjs/components/Facet/FacetScrollArea.js +8 -3
- package/dist/cjs/components/Facet/FacetScrollArea.js.map +1 -1
- package/dist/cjs/components/Header/Header.js +1 -1
- package/dist/cjs/components/Header/Header.js.map +1 -1
- package/dist/cjs/components/Header/HeaderBreadcrumbs/HeaderBreadcrumbAnchor.js.map +1 -1
- package/dist/cjs/components/Header/HeaderBreadcrumbs/HeaderBreadcrumbText.js.map +1 -1
- package/dist/cjs/components/Header/HeaderBreadcrumbs/HeaderBreadcrumbs.js.map +1 -1
- package/dist/cjs/components/Header/HeaderDocAnchor/HeaderDocAnchor.js.map +1 -1
- package/dist/cjs/components/Header/HeaderRight/HeaderRight.js.map +1 -1
- package/dist/cjs/components/InfoToken/InfoToken.js +3 -3
- package/dist/cjs/components/InfoToken/InfoToken.js.map +1 -1
- package/dist/cjs/components/InlineConfirm/InlineConfirm.js +2 -2
- package/dist/cjs/components/InlineConfirm/InlineConfirm.js.map +1 -1
- package/dist/cjs/components/InlineConfirm/InlineConfirmPrompt.js +2 -2
- package/dist/cjs/components/InlineConfirm/InlineConfirmPrompt.js.map +1 -1
- package/dist/cjs/components/InlineConfirm/InlineConfirmTarget.js +9 -4
- package/dist/cjs/components/InlineConfirm/InlineConfirmTarget.js.map +1 -1
- package/dist/cjs/components/LastUpdated/LastUpdated.js +1 -1
- package/dist/cjs/components/LastUpdated/LastUpdated.js.map +1 -1
- package/dist/cjs/components/Menu/Menu.js +8 -3
- package/dist/cjs/components/Menu/Menu.js.map +1 -1
- package/dist/cjs/components/Modal/Modal.js +8 -3
- package/dist/cjs/components/Modal/Modal.js.map +1 -1
- package/dist/cjs/components/Modal/ModalFooter.js +1 -1
- package/dist/cjs/components/Modal/ModalFooter.js.map +1 -1
- package/dist/cjs/components/Prompt/Prompt.js.map +1 -1
- package/dist/cjs/components/Prompt/PromptCancelButton.js.map +1 -1
- package/dist/cjs/components/Prompt/PromptConfirmButton.js.map +1 -1
- package/dist/cjs/components/Prompt/icons/CriticalIcon.js +1 -1
- package/dist/cjs/components/Prompt/icons/InfoIcon.js +1 -1
- package/dist/cjs/components/Prompt/icons/SuccessIcon.js +1 -1
- package/dist/cjs/components/Prompt/icons/WarningIcon.js +1 -1
- package/dist/cjs/components/RadioCard/RadioCard.d.ts +4 -0
- package/dist/cjs/components/RadioCard/RadioCard.d.ts.map +1 -1
- package/dist/cjs/components/RadioCard/RadioCard.js +48 -43
- package/dist/cjs/components/RadioCard/RadioCard.js.map +1 -1
- package/dist/cjs/components/ReadOnly/ReadOnlyInputStyles.js +1 -1
- package/dist/cjs/components/ReadOnly/ReadOnlyInputStyles.js.map +1 -1
- package/dist/cjs/components/StatusToken/StatusToken.js +3 -3
- package/dist/cjs/components/StatusToken/StatusToken.js.map +1 -1
- package/dist/cjs/components/StickyFooter/StickyFooter.js.map +1 -1
- package/dist/cjs/components/Table/Table.js +6 -6
- package/dist/cjs/components/Table/Table.js.map +1 -1
- package/dist/cjs/components/Table/layouts/TableLayoutControl.js +1 -1
- package/dist/cjs/components/Table/layouts/row-layout/RowLayout.js +1 -1
- package/dist/cjs/components/Table/layouts/row-layout/RowLayout.js.map +1 -1
- package/dist/cjs/components/Table/layouts/row-layout/RowLayoutBody.js +8 -9
- package/dist/cjs/components/Table/layouts/row-layout/RowLayoutBody.js.map +1 -1
- package/dist/cjs/components/Table/layouts/row-layout/RowLayoutHeader.js +1 -1
- package/dist/cjs/components/Table/layouts/row-layout/RowLayoutHeader.js.map +1 -1
- package/dist/cjs/components/Table/table-actions/TableActionItem.js.map +1 -1
- package/dist/cjs/components/Table/table-actions/TableActionsList.js +4 -4
- package/dist/cjs/components/Table/table-actions/TableActionsList.js.map +1 -1
- package/dist/cjs/components/Table/table-actions/TableHeaderActions.js.map +1 -1
- package/dist/cjs/components/Table/table-column/TableActionsColumn.js +3 -3
- package/dist/cjs/components/Table/table-column/TableActionsColumn.js.map +1 -1
- package/dist/cjs/components/Table/table-column/TableCollapsibleColumn.js +4 -4
- package/dist/cjs/components/Table/table-column/TableCollapsibleColumn.js.map +1 -1
- package/dist/cjs/components/Table/table-column/TableSelectableColumn.js +3 -3
- package/dist/cjs/components/Table/table-column/TableSelectableColumn.js.map +1 -1
- package/dist/cjs/components/Table/table-columns-selector/TableColumnsSelector.js +3 -3
- package/dist/cjs/components/Table/table-columns-selector/TableColumnsSelector.js.map +1 -1
- package/dist/cjs/components/Table/table-date-range-picker/TableDateRangePicker.js +1 -1
- package/dist/cjs/components/Table/table-date-range-picker/TableDateRangePicker.js.map +1 -1
- package/dist/cjs/components/Table/table-filter/TableFilter.js +2 -2
- package/dist/cjs/components/Table/table-filter/TableFilter.js.map +1 -1
- package/dist/cjs/components/Table/table-footer/TableFooter.js +2 -2
- package/dist/cjs/components/Table/table-footer/TableFooter.js.map +1 -1
- package/dist/cjs/components/Table/table-header/TableHeader.js +1 -1
- package/dist/cjs/components/Table/table-header/TableHeader.js.map +1 -1
- package/dist/cjs/components/Table/table-header/Th.js +1 -1
- package/dist/cjs/components/Table/table-header/Th.js.map +1 -1
- package/dist/cjs/components/Table/table-last-updated/TableLastUpdated.js.map +1 -1
- package/dist/cjs/components/Table/table-loading/TableLoading.js +1 -1
- package/dist/cjs/components/Table/table-loading/TableLoading.js.map +1 -1
- package/dist/cjs/components/Table/table-no-data/TableNoData.js +1 -1
- package/dist/cjs/components/Table/table-pagination/TablePagination.js +3 -3
- package/dist/cjs/components/Table/table-pagination/TablePagination.js.map +1 -1
- package/dist/cjs/components/Table/table-per-page/TablePerPage.js +3 -3
- package/dist/cjs/components/Table/table-per-page/TablePerPage.js.map +1 -1
- package/dist/cjs/components/Table/table-predicate/TablePredicate.js +1 -1
- package/dist/cjs/components/Table/table-predicate/TablePredicate.js.map +1 -1
- package/dist/cjs/components/Table/use-table.js +22 -23
- package/dist/cjs/components/Table/use-table.js.map +1 -1
- package/dist/cjs/hooks/use-url-synced-state.js +6 -6
- package/dist/cjs/hooks/use-url-synced-state.js.map +1 -1
- package/dist/cjs/hooks/useClickWithLoading.js +2 -2
- package/dist/cjs/hooks/useClickWithLoading.js.map +1 -1
- package/dist/cjs/hooks/useControlledList.js +4 -4
- package/dist/cjs/hooks/useControlledList.js.map +1 -1
- package/dist/cjs/hooks/useParentHeight.js +2 -2
- package/dist/cjs/hooks/useParentHeight.js.map +1 -1
- package/dist/cjs/styles/RadioCard.module.css +1 -1
- package/dist/cjs/theme/PlasmaColors.js +1 -1
- package/dist/cjs/theme/PlasmaColors.js.map +1 -1
- package/dist/cjs/theme/Plasmantine.js +2 -2
- package/dist/cjs/theme/Plasmantine.js.map +1 -1
- package/dist/cjs/theme/Theme.js +12 -12
- package/dist/cjs/theme/Theme.js.map +1 -1
- package/dist/cjs/theme/mergeCSSVariablesResolvers.js +1 -1
- package/dist/cjs/theme/plasmaCSSVariablesResolver.js +2 -2
- package/dist/cjs/theme/plasmaCSSVariablesResolver.js.map +1 -1
- package/dist/cjs/theme/plasmaVariantColorResolver.js +1 -1
- package/dist/cjs/theme/plasmaVariantColorResolver.js.map +1 -1
- package/dist/cjs/utils/createFactoryComponent.js +1 -1
- package/dist/cjs/utils/createFactoryComponent.js.map +1 -1
- package/dist/cjs/utils/groupOptions.js +1 -1
- package/dist/cjs/utils/overrideComponent.js +2 -2
- package/dist/cjs/utils/overrideComponent.js.map +1 -1
- package/dist/esm/components/RadioCard/RadioCard.d.ts +4 -0
- package/dist/esm/components/RadioCard/RadioCard.d.ts.map +1 -1
- package/dist/esm/components/RadioCard/RadioCard.js +47 -43
- package/dist/esm/components/RadioCard/RadioCard.js.map +1 -1
- package/dist/esm/styles/RadioCard.module.css +1 -1
- package/package.json +26 -26
- package/src/components/RadioCard/RadioCard.tsx +24 -20
- package/src/components/RadioCard/__tests__/RadioCard.component.spec.tsx +34 -1
- package/src/styles/RadioCard.module.css +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CodeEditor/CodeEditor.tsx"],"sourcesContent":["import {\n Box,\n Center,\n Group,\n Input,\n InputWrapperProps,\n Loader,\n Space,\n Stack,\n StackProps,\n px,\n useMantineColorScheme,\n useMantineTheme,\n useProps,\n} from '@mantine/core';\nimport {useUncontrolled} from '@mantine/hooks';\nimport Editor, {Monaco, loader} from '@monaco-editor/react';\nimport {MarkerSeverity, editor as monacoEditor} from 'monaco-editor';\nimport {FunctionComponent, useEffect, useRef, useState} from 'react';\n\nimport cx from 'clsx';\nimport {useParentHeight} from '../../hooks/useParentHeight.js';\nimport {CopyToClipboard} from '../CopyToClipboard/CopyToClipboard.js';\nimport CodeEditorClasses from './CodeEditor.module.css';\nimport {XML} from './languages/xml.js';\nimport {Search} from './search/Search.js';\ninterface CodeEditorProps\n extends\n Omit<InputWrapperProps, 'inputContainer' | 'inputWrapperOrder' | 'classNames' | 'styles' | 'vars' | 'onChange'>,\n Omit<StackProps, 'onChange' | 'attributes'> {\n /**\n * The language syntax of the editor\n *\n * @default 'plaintext'\n */\n language?: 'plaintext' | 'json' | 'markdown' | 'python' | 'xml' | (string & unknown);\n /** Default value for uncontrolled input */\n defaultValue?: string;\n /** Value for controlled input */\n value?: string;\n /** onChange value for controlled input */\n onChange?(value: string): void;\n /** Called whenever the search icon is clicked */\n onSearch?(): void;\n /** Called whenever the copy icon is clicked */\n onCopy?(): void;\n /** Called whenever the code editor gets the focus */\n onFocus?(): void;\n /** Ref object that provides access to the editor's functionality */\n editorHandle?: React.MutableRefObject<monacoEditor.IStandaloneCodeEditor | null>;\n /**\n * The minimal height of the CodeEditor (label and description included)\n *\n * By default the CodeEditor is adjusted to fill its parent height.\n * In the case where the parent height is too short, it will use this value as minimum.\n *\n * @default 300\n */\n minHeight?: number;\n /**\n * The maximal height of the CodeEditor (label and description included)\n *\n * By default the CodeEditor is adjusted to fill its parent height.\n * In the case where the parent height would be too high for your liking, you can use this prop to set a maximum.\n */\n maxHeight?: number;\n disabled?: boolean;\n /**\n * Defines how the monaco editor files will be loaded.\n * Note that using `'local'` requires [some additional configuration](https://github.com/suren-atoyan/monaco-react#use-monaco-editor-as-an-npm-package).\n *\n * @default 'local'\n */\n monacoLoader?: 'cdn' | 'local';\n /**\n * Options to pass to the monaco editor.\n * Currently only supporting [`tabSize`](https://microsoft.github.io/monaco-editor/typedoc/interfaces/editor.IStandaloneEditorConstructionOptions.html#tabSize).\n *\n */\n options?: Pick<monacoEditor.IStandaloneEditorConstructionOptions, 'tabSize'>;\n}\n\nconst defaultProps: Partial<CodeEditorProps> = {\n language: 'plaintext',\n monacoLoader: 'local',\n defaultValue: '',\n minHeight: 300,\n};\n\nexport const CodeEditor: FunctionComponent<CodeEditorProps> = (props) => {\n const {\n language,\n defaultValue,\n onChange,\n onCopy,\n onSearch,\n onFocus,\n value,\n label,\n required,\n labelProps,\n error,\n errorProps,\n description,\n descriptionProps,\n minHeight,\n maxHeight,\n disabled,\n monacoLoader,\n options: {tabSize} = {tabSize: 2},\n editorHandle,\n ...others\n } = useProps('CodeEditor', defaultProps, props);\n const [loaded, setLoaded] = useState(false);\n const [_value, handleChange] = useUncontrolled<string>({\n value,\n defaultValue,\n onChange,\n finalValue: '',\n });\n const [parentHeight, ref] = useParentHeight();\n const editorRef = useRef(null);\n\n const loadLocalMonaco = async () => {\n const monacoInstance = await import('monaco-editor');\n loader.config({monaco: monacoInstance});\n setLoaded(true);\n };\n\n const registerLanguages = (monaco: Monaco) => {\n if (monaco && language === 'xml') {\n XML.register(monaco);\n }\n };\n\n const registerThemes = (monaco: Monaco) => {\n monaco.editor.defineTheme('light', {\n base: 'vs',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': theme.colors.gray[0],\n },\n });\n };\n\n const handleSearch = () => {\n if (editorRef.current) {\n editorRef.current.focus();\n editorRef.current.trigger('editor', 'actions.find', '');\n onSearch?.();\n }\n };\n\n const [hasMonacoError, setHasMonacoError] = useState(false);\n const hasMonacoErrorRef = useRef(false);\n\n hasMonacoErrorRef.current = hasMonacoError;\n\n const hasError = !!error || hasMonacoError;\n const theme = useMantineTheme();\n const {colorScheme} = useMantineColorScheme();\n\n useEffect(() => {\n if (monacoLoader === 'local') {\n loadLocalMonaco();\n } else {\n setLoaded(true);\n }\n }, []);\n\n const handleValidate = (markers: monacoEditor.IMarker[]) => {\n setHasMonacoError(markers.some((marker) => marker.severity === MarkerSeverity.Error));\n };\n\n const _label = label ? (\n <Input.Label required={required} {...labelProps}>\n {label}\n </Input.Label>\n ) : null;\n\n const _description = description ? (\n <Input.Description {...descriptionProps}>{description}</Input.Description>\n ) : null;\n\n const _error = error ? <Input.Error {...errorProps}>{error}</Input.Error> : <Space h=\"sm\" />;\n\n const _header =\n _label || _description ? (\n <Stack gap=\"xxs\">\n {_label}\n {_description}\n </Stack>\n ) : null;\n\n const _buttons = (\n <Group justify=\"right\" gap=\"xs\">\n <Search handleSearch={handleSearch} />\n <CopyToClipboard value={_value} onCopy={() => onCopy?.()} />\n </Group>\n );\n let editorTheme = colorScheme === 'light' ? 'light' : 'vs-dark';\n if (disabled) {\n editorTheme += '-disabled';\n }\n\n const _editor = loaded ? (\n <Box\n p=\"md\"\n pl=\"xs\"\n className={cx(\n CodeEditorClasses.root,\n {[CodeEditorClasses.error]: hasError},\n {[CodeEditorClasses.disabled]: disabled},\n )}\n data-testid=\"editor-wrapper\"\n >\n <Editor\n onValidate={handleValidate}\n defaultLanguage={language}\n theme={editorTheme}\n options={{\n minimap: {enabled: false},\n wordWrap: 'on',\n scrollBeyondLastLine: false,\n formatOnPaste: true,\n fontSize: px(theme.fontSizes.xs) as number,\n readOnly: disabled,\n stickyScroll: {enabled: false},\n tabSize,\n }}\n value={_value}\n onChange={handleChange}\n beforeMount={(monaco) => {\n registerLanguages(monaco);\n registerThemes(monaco);\n }}\n onMount={(editor) => {\n editorRef.current = editor;\n if (editorHandle) {\n editorHandle.current = editor;\n }\n editor.onDidFocusEditorText(() => onFocus?.());\n editor.onDidBlurEditorText(async () => {\n // monaco editor has a timeout of 500ms populating errors, we want to ensure that checking errors happen after that\n setTimeout(async () => {\n if (!hasMonacoErrorRef.current) {\n await editor?.getAction('editor.action.formatDocument')?.run();\n }\n }, 550);\n });\n }}\n />\n </Box>\n ) : (\n <Center className={CodeEditorClasses.editor}>\n <Loader />\n </Center>\n );\n\n const height = Math.max(Number.isNaN(parentHeight) ? 0 : parentHeight, minHeight);\n return (\n <Stack justify=\"flex-start\" gap=\"sm\" h={height} mah={maxHeight} ref={ref} {...others}>\n <Group justify=\"space-between\">\n {_header}\n {_buttons}\n </Group>\n {_editor}\n {_error}\n </Stack>\n );\n};\n\nCodeEditor.displayName = 'CodeEditor';\n"],"names":["CodeEditor","defaultProps","language","monacoLoader","defaultValue","minHeight","props","useProps","onChange","onCopy","onSearch","onFocus","value","label","required","labelProps","error","errorProps","description","descriptionProps","maxHeight","disabled","options","tabSize","editorHandle","others","useState","loaded","setLoaded","useUncontrolled","finalValue","_value","handleChange","useParentHeight","parentHeight","ref","editorRef","useRef","loadLocalMonaco","monacoInstance","loader","config","monaco","registerLanguages","XML","register","registerThemes","editor","defineTheme","base","inherit","rules","colors","theme","gray","handleSearch","current","focus","trigger","hasMonacoError","setHasMonacoError","hasMonacoErrorRef","hasError","useMantineTheme","colorScheme","useMantineColorScheme","useEffect","handleValidate","markers","some","marker","severity","MarkerSeverity","Error","_label","Input","Label","_description","Description","_error","Space","h","_header","Stack","gap","_buttons","Group","justify","Search","CopyToClipboard","editorTheme","_editor","Box","p","pl","className","cx","CodeEditorClasses","root","data-testid","Editor","onValidate","defaultLanguage","minimap","enabled","wordWrap","scrollBeyondLastLine","formatOnPaste","fontSize","px","fontSizes","xs","readOnly","stickyScroll","beforeMount","onMount","onDidFocusEditorText","onDidBlurEditorText","setTimeout","getAction","run","Center","Loader","height","Math","max","Number","isNaN","mah","displayName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CodeEditor/CodeEditor.tsx"],"sourcesContent":["import {\n Box,\n Center,\n Group,\n Input,\n InputWrapperProps,\n Loader,\n Space,\n Stack,\n StackProps,\n px,\n useMantineColorScheme,\n useMantineTheme,\n useProps,\n} from '@mantine/core';\nimport {useUncontrolled} from '@mantine/hooks';\nimport Editor, {Monaco, loader} from '@monaco-editor/react';\nimport {MarkerSeverity, editor as monacoEditor} from 'monaco-editor';\nimport {FunctionComponent, useEffect, useRef, useState} from 'react';\n\nimport cx from 'clsx';\nimport {useParentHeight} from '../../hooks/useParentHeight.js';\nimport {CopyToClipboard} from '../CopyToClipboard/CopyToClipboard.js';\nimport CodeEditorClasses from './CodeEditor.module.css';\nimport {XML} from './languages/xml.js';\nimport {Search} from './search/Search.js';\ninterface CodeEditorProps\n extends\n Omit<InputWrapperProps, 'inputContainer' | 'inputWrapperOrder' | 'classNames' | 'styles' | 'vars' | 'onChange'>,\n Omit<StackProps, 'onChange' | 'attributes'> {\n /**\n * The language syntax of the editor\n *\n * @default 'plaintext'\n */\n language?: 'plaintext' | 'json' | 'markdown' | 'python' | 'xml' | (string & unknown);\n /** Default value for uncontrolled input */\n defaultValue?: string;\n /** Value for controlled input */\n value?: string;\n /** onChange value for controlled input */\n onChange?(value: string): void;\n /** Called whenever the search icon is clicked */\n onSearch?(): void;\n /** Called whenever the copy icon is clicked */\n onCopy?(): void;\n /** Called whenever the code editor gets the focus */\n onFocus?(): void;\n /** Ref object that provides access to the editor's functionality */\n editorHandle?: React.MutableRefObject<monacoEditor.IStandaloneCodeEditor | null>;\n /**\n * The minimal height of the CodeEditor (label and description included)\n *\n * By default the CodeEditor is adjusted to fill its parent height.\n * In the case where the parent height is too short, it will use this value as minimum.\n *\n * @default 300\n */\n minHeight?: number;\n /**\n * The maximal height of the CodeEditor (label and description included)\n *\n * By default the CodeEditor is adjusted to fill its parent height.\n * In the case where the parent height would be too high for your liking, you can use this prop to set a maximum.\n */\n maxHeight?: number;\n disabled?: boolean;\n /**\n * Defines how the monaco editor files will be loaded.\n * Note that using `'local'` requires [some additional configuration](https://github.com/suren-atoyan/monaco-react#use-monaco-editor-as-an-npm-package).\n *\n * @default 'local'\n */\n monacoLoader?: 'cdn' | 'local';\n /**\n * Options to pass to the monaco editor.\n * Currently only supporting [`tabSize`](https://microsoft.github.io/monaco-editor/typedoc/interfaces/editor.IStandaloneEditorConstructionOptions.html#tabSize).\n *\n */\n options?: Pick<monacoEditor.IStandaloneEditorConstructionOptions, 'tabSize'>;\n}\n\nconst defaultProps: Partial<CodeEditorProps> = {\n language: 'plaintext',\n monacoLoader: 'local',\n defaultValue: '',\n minHeight: 300,\n};\n\nexport const CodeEditor: FunctionComponent<CodeEditorProps> = (props) => {\n const {\n language,\n defaultValue,\n onChange,\n onCopy,\n onSearch,\n onFocus,\n value,\n label,\n required,\n labelProps,\n error,\n errorProps,\n description,\n descriptionProps,\n minHeight,\n maxHeight,\n disabled,\n monacoLoader,\n options: {tabSize} = {tabSize: 2},\n editorHandle,\n ...others\n } = useProps('CodeEditor', defaultProps, props);\n const [loaded, setLoaded] = useState(false);\n const [_value, handleChange] = useUncontrolled<string>({\n value,\n defaultValue,\n onChange,\n finalValue: '',\n });\n const [parentHeight, ref] = useParentHeight();\n const editorRef = useRef(null);\n\n const loadLocalMonaco = async () => {\n const monacoInstance = await import('monaco-editor');\n loader.config({monaco: monacoInstance});\n setLoaded(true);\n };\n\n const registerLanguages = (monaco: Monaco) => {\n if (monaco && language === 'xml') {\n XML.register(monaco);\n }\n };\n\n const registerThemes = (monaco: Monaco) => {\n monaco.editor.defineTheme('light', {\n base: 'vs',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': theme.colors.gray[0],\n },\n });\n };\n\n const handleSearch = () => {\n if (editorRef.current) {\n editorRef.current.focus();\n editorRef.current.trigger('editor', 'actions.find', '');\n onSearch?.();\n }\n };\n\n const [hasMonacoError, setHasMonacoError] = useState(false);\n const hasMonacoErrorRef = useRef(false);\n\n hasMonacoErrorRef.current = hasMonacoError;\n\n const hasError = !!error || hasMonacoError;\n const theme = useMantineTheme();\n const {colorScheme} = useMantineColorScheme();\n\n useEffect(() => {\n if (monacoLoader === 'local') {\n loadLocalMonaco();\n } else {\n setLoaded(true);\n }\n }, []);\n\n const handleValidate = (markers: monacoEditor.IMarker[]) => {\n setHasMonacoError(markers.some((marker) => marker.severity === MarkerSeverity.Error));\n };\n\n const _label = label ? (\n <Input.Label required={required} {...labelProps}>\n {label}\n </Input.Label>\n ) : null;\n\n const _description = description ? (\n <Input.Description {...descriptionProps}>{description}</Input.Description>\n ) : null;\n\n const _error = error ? <Input.Error {...errorProps}>{error}</Input.Error> : <Space h=\"sm\" />;\n\n const _header =\n _label || _description ? (\n <Stack gap=\"xxs\">\n {_label}\n {_description}\n </Stack>\n ) : null;\n\n const _buttons = (\n <Group justify=\"right\" gap=\"xs\">\n <Search handleSearch={handleSearch} />\n <CopyToClipboard value={_value} onCopy={() => onCopy?.()} />\n </Group>\n );\n let editorTheme = colorScheme === 'light' ? 'light' : 'vs-dark';\n if (disabled) {\n editorTheme += '-disabled';\n }\n\n const _editor = loaded ? (\n <Box\n p=\"md\"\n pl=\"xs\"\n className={cx(\n CodeEditorClasses.root,\n {[CodeEditorClasses.error]: hasError},\n {[CodeEditorClasses.disabled]: disabled},\n )}\n data-testid=\"editor-wrapper\"\n >\n <Editor\n onValidate={handleValidate}\n defaultLanguage={language}\n theme={editorTheme}\n options={{\n minimap: {enabled: false},\n wordWrap: 'on',\n scrollBeyondLastLine: false,\n formatOnPaste: true,\n fontSize: px(theme.fontSizes.xs) as number,\n readOnly: disabled,\n stickyScroll: {enabled: false},\n tabSize,\n }}\n value={_value}\n onChange={handleChange}\n beforeMount={(monaco) => {\n registerLanguages(monaco);\n registerThemes(monaco);\n }}\n onMount={(editor) => {\n editorRef.current = editor;\n if (editorHandle) {\n editorHandle.current = editor;\n }\n editor.onDidFocusEditorText(() => onFocus?.());\n editor.onDidBlurEditorText(async () => {\n // monaco editor has a timeout of 500ms populating errors, we want to ensure that checking errors happen after that\n setTimeout(async () => {\n if (!hasMonacoErrorRef.current) {\n await editor?.getAction('editor.action.formatDocument')?.run();\n }\n }, 550);\n });\n }}\n />\n </Box>\n ) : (\n <Center className={CodeEditorClasses.editor}>\n <Loader />\n </Center>\n );\n\n const height = Math.max(Number.isNaN(parentHeight) ? 0 : parentHeight, minHeight);\n return (\n <Stack justify=\"flex-start\" gap=\"sm\" h={height} mah={maxHeight} ref={ref} {...others}>\n <Group justify=\"space-between\">\n {_header}\n {_buttons}\n </Group>\n {_editor}\n {_error}\n </Stack>\n );\n};\n\nCodeEditor.displayName = 'CodeEditor';\n"],"names":["CodeEditor","defaultProps","language","monacoLoader","defaultValue","minHeight","props","useProps","onChange","onCopy","onSearch","onFocus","value","label","required","labelProps","error","errorProps","description","descriptionProps","maxHeight","disabled","options","tabSize","editorHandle","others","useState","loaded","setLoaded","useUncontrolled","finalValue","_value","handleChange","useParentHeight","parentHeight","ref","editorRef","useRef","loadLocalMonaco","monacoInstance","loader","config","monaco","registerLanguages","XML","register","registerThemes","editor","defineTheme","base","inherit","rules","colors","theme","gray","handleSearch","current","focus","trigger","hasMonacoError","setHasMonacoError","hasMonacoErrorRef","hasError","useMantineTheme","colorScheme","useMantineColorScheme","useEffect","handleValidate","markers","some","marker","severity","MarkerSeverity","Error","_label","Input","Label","_description","Description","_error","Space","h","_header","Stack","gap","_buttons","Group","justify","Search","CopyToClipboard","editorTheme","_editor","Box","p","pl","className","cx","CodeEditorClasses","root","data-testid","Editor","onValidate","defaultLanguage","minimap","enabled","wordWrap","scrollBeyondLastLine","formatOnPaste","fontSize","px","fontSizes","xs","readOnly","stickyScroll","beforeMount","onMount","onDidFocusEditorText","onDidBlurEditorText","setTimeout","getAction","run","Center","Loader","height","Math","max","Number","isNaN","mah","displayName"],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "XML", {
|
|
|
10
10
|
});
|
|
11
11
|
var _async_to_generator = require("@swc/helpers/_/_async_to_generator");
|
|
12
12
|
var _ts_generator = require("@swc/helpers/_/_ts_generator");
|
|
13
|
-
var format = function(xml) {
|
|
13
|
+
var format = function format(xml) {
|
|
14
14
|
// https://stackoverflow.com/questions/57039218/doesnt-monaco-editor-support-xml-language-by-default
|
|
15
15
|
var PADDING = ' '.repeat(2);
|
|
16
16
|
var reg = /(>)(<)(\/*)/g;
|
|
@@ -31,9 +31,9 @@ var format = function(xml) {
|
|
|
31
31
|
return PADDING.repeat(pad - indent) + node;
|
|
32
32
|
}).join('\r\n');
|
|
33
33
|
};
|
|
34
|
-
var register = function(monaco) {
|
|
34
|
+
var register = function register(monaco) {
|
|
35
35
|
monaco.languages.registerDocumentFormattingEditProvider('xml', {
|
|
36
|
-
provideDocumentFormattingEdits: function(model) {
|
|
36
|
+
provideDocumentFormattingEdits: function provideDocumentFormattingEdits(model) {
|
|
37
37
|
return _async_to_generator._(function() {
|
|
38
38
|
return _ts_generator._(this, function(_state) {
|
|
39
39
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/CodeEditor/languages/xml.ts"],"sourcesContent":["import {Monaco} from '@monaco-editor/react';\nimport type {editor} from 'monaco-editor';\n\nconst format = (xml: string): string => {\n // https://stackoverflow.com/questions/57039218/doesnt-monaco-editor-support-xml-language-by-default\n const PADDING = ' '.repeat(2);\n const reg = /(>)(<)(\\/*)/g;\n let pad = 0;\n\n xml = xml.replace(reg, '$1\\r\\n$2$3');\n\n return xml\n .split('\\r\\n')\n .map((node) => {\n let indent = 0;\n if (node.match(/.+<\\/\\w[^>]*>$/)) {\n indent = 0;\n } else if (node.match(/^<\\/\\w/) && pad > 0) {\n pad -= 1;\n } else if (node.match(/^<\\w[^>]*[^/]>.*$/)) {\n indent = 1;\n } else {\n indent = 0;\n }\n\n pad += indent;\n\n return PADDING.repeat(pad - indent) + node;\n })\n .join('\\r\\n');\n};\n\nconst register = (monaco: Monaco): void => {\n monaco.languages.registerDocumentFormattingEditProvider('xml', {\n provideDocumentFormattingEdits: async (model: editor.ITextModel) => [\n {\n range: model.getFullModelRange(),\n text: format(model.getValue()),\n },\n ],\n });\n};\n\nexport const XML = {register};\n"],"names":["XML","format","xml","PADDING","repeat","reg","pad","replace","split","map","node","indent","match","join","register","monaco","languages","registerDocumentFormattingEditProvider","provideDocumentFormattingEdits","model","range","getFullModelRange","text","getValue"],"mappings":";;;;+BA2CaA;;;eAAAA;;;;;AAxCb,IAAMC,SAAS,
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/CodeEditor/languages/xml.ts"],"sourcesContent":["import {Monaco} from '@monaco-editor/react';\nimport type {editor} from 'monaco-editor';\n\nconst format = (xml: string): string => {\n // https://stackoverflow.com/questions/57039218/doesnt-monaco-editor-support-xml-language-by-default\n const PADDING = ' '.repeat(2);\n const reg = /(>)(<)(\\/*)/g;\n let pad = 0;\n\n xml = xml.replace(reg, '$1\\r\\n$2$3');\n\n return xml\n .split('\\r\\n')\n .map((node) => {\n let indent = 0;\n if (node.match(/.+<\\/\\w[^>]*>$/)) {\n indent = 0;\n } else if (node.match(/^<\\/\\w/) && pad > 0) {\n pad -= 1;\n } else if (node.match(/^<\\w[^>]*[^/]>.*$/)) {\n indent = 1;\n } else {\n indent = 0;\n }\n\n pad += indent;\n\n return PADDING.repeat(pad - indent) + node;\n })\n .join('\\r\\n');\n};\n\nconst register = (monaco: Monaco): void => {\n monaco.languages.registerDocumentFormattingEditProvider('xml', {\n provideDocumentFormattingEdits: async (model: editor.ITextModel) => [\n {\n range: model.getFullModelRange(),\n text: format(model.getValue()),\n },\n ],\n });\n};\n\nexport const XML = {register};\n"],"names":["XML","format","xml","PADDING","repeat","reg","pad","replace","split","map","node","indent","match","join","register","monaco","languages","registerDocumentFormattingEditProvider","provideDocumentFormattingEdits","model","range","getFullModelRange","text","getValue"],"mappings":";;;;+BA2CaA;;;eAAAA;;;;;AAxCb,IAAMC,SAAS,gBAACC;IACZ,oGAAoG;IACpG,IAAMC,UAAU,IAAIC,MAAM,CAAC;IAC3B,IAAMC,MAAM;IACZ,IAAIC,MAAM;IAEVJ,MAAMA,IAAIK,OAAO,CAACF,KAAK;IAEvB,OAAOH,IACFM,KAAK,CAAC,QACNC,GAAG,CAAC,SAACC;QACF,IAAIC,SAAS;QACb,IAAID,KAAKE,KAAK,CAAC,mBAAmB;YAC9BD,SAAS;QACb,OAAO,IAAID,KAAKE,KAAK,CAAC,aAAaN,MAAM,GAAG;YACxCA,OAAO;QACX,OAAO,IAAII,KAAKE,KAAK,CAAC,sBAAsB;YACxCD,SAAS;QACb,OAAO;YACHA,SAAS;QACb;QAEAL,OAAOK;QAEP,OAAOR,QAAQC,MAAM,CAACE,MAAMK,UAAUD;IAC1C,GACCG,IAAI,CAAC;AACd;AAEA,IAAMC,WAAW,kBAACC;IACdA,OAAOC,SAAS,CAACC,sCAAsC,CAAC,OAAO;QAC3DC,gCAAgC,SAAhCA,+BAAuCC;;;;;;4BACnC;gCACIC,OAAOD,MAAME,iBAAiB;gCAC9BC,MAAMrB,OAAOkB,MAAMI,QAAQ;4BAC/B;;;;;;IAER;AACJ;AAEO,IAAMvB,MAAM;IAACc,UAAAA;AAAQ"}
|
|
@@ -14,7 +14,7 @@ var _object_spread = require("@swc/helpers/_/_object_spread");
|
|
|
14
14
|
var _jsxruntime = require("react/jsx-runtime");
|
|
15
15
|
var _plasmareacticons = require("@coveord/plasma-react-icons");
|
|
16
16
|
var _ActionIcon = require("../../ActionIcon/ActionIcon.js");
|
|
17
|
-
var SearchButton = function(param) {
|
|
17
|
+
var SearchButton = function SearchButton(param) {
|
|
18
18
|
var handleSearch = param.handleSearch;
|
|
19
19
|
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_ActionIcon.ActionIcon.Quaternary, {
|
|
20
20
|
onClick: handleSearch,
|
|
@@ -24,8 +24,8 @@ var SearchButton = function(param) {
|
|
|
24
24
|
})
|
|
25
25
|
});
|
|
26
26
|
};
|
|
27
|
-
var Search = function(
|
|
28
|
-
var params = _extends._({},
|
|
27
|
+
var Search = function Search(_0) {
|
|
28
|
+
var ref = _object_destructuring_empty._(_0), params = _extends._({}, _0);
|
|
29
29
|
return /*#__PURE__*/ (0, _jsxruntime.jsx)(SearchButton, _object_spread._({}, params));
|
|
30
30
|
};
|
|
31
31
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/components/CodeEditor/search/Search.tsx"],"sourcesContent":["import {IconSearch} from '@coveord/plasma-react-icons';\nimport {FunctionComponent} from 'react';\nimport {ActionIcon} from '../../ActionIcon/ActionIcon.js';\n\nexport interface SearchProps {\n handleSearch: () => void;\n}\n\nconst SearchButton: FunctionComponent<SearchProps> = ({handleSearch}) => (\n <ActionIcon.Quaternary onClick={handleSearch}>\n <IconSearch aria-label=\"Search\" size={16} />\n </ActionIcon.Quaternary>\n);\n\nexport const Search: FunctionComponent<SearchProps> = ({...params}) => <SearchButton {...params} />;\n"],"names":["Search","SearchButton","handleSearch","ActionIcon","Quaternary","onClick","IconSearch","aria-label","size","params"],"mappings":";;;;+BAcaA;;;eAAAA;;;;;;;gCAdY;0BAEA;AAMzB,IAAMC,eAA+C;QAAEC,qBAAAA;yBACnD,qBAACC,sBAAU,CAACC,UAAU;QAACC,SAASH;kBAC5B,cAAA,qBAACI,4BAAU;YAACC,cAAW;YAASC,MAAM;;;;AAIvC,IAAMR,SAAyC;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/components/CodeEditor/search/Search.tsx"],"sourcesContent":["import {IconSearch} from '@coveord/plasma-react-icons';\nimport {FunctionComponent} from 'react';\nimport {ActionIcon} from '../../ActionIcon/ActionIcon.js';\n\nexport interface SearchProps {\n handleSearch: () => void;\n}\n\nconst SearchButton: FunctionComponent<SearchProps> = ({handleSearch}) => (\n <ActionIcon.Quaternary onClick={handleSearch}>\n <IconSearch aria-label=\"Search\" size={16} />\n </ActionIcon.Quaternary>\n);\n\nexport const Search: FunctionComponent<SearchProps> = ({...params}) => <SearchButton {...params} />;\n"],"names":["Search","SearchButton","handleSearch","ActionIcon","Quaternary","onClick","IconSearch","aria-label","size","params"],"mappings":";;;;+BAcaA;;;eAAAA;;;;;;;gCAdY;0BAEA;AAMzB,IAAMC,eAA+C;QAAEC,qBAAAA;yBACnD,qBAACC,sBAAU,CAACC,UAAU;QAACC,SAASH;kBAC5B,cAAA,qBAACI,4BAAU;YAACC,cAAW;YAASC,MAAM;;;;AAIvC,IAAMR,SAAyC;QAAC,yCAAIS;yBAAY,qBAACR,mCAAiBQ"}
|
|
@@ -32,12 +32,13 @@ var defaultProps = {
|
|
|
32
32
|
readOnly: false,
|
|
33
33
|
gap: 'md',
|
|
34
34
|
required: false,
|
|
35
|
-
getItemId: function(param) {
|
|
35
|
+
getItemId: function getItemId(param) {
|
|
36
36
|
var id = param.id;
|
|
37
37
|
return id;
|
|
38
38
|
}
|
|
39
39
|
};
|
|
40
|
-
var Collection = function(props) {
|
|
40
|
+
var Collection = function Collection(props) {
|
|
41
|
+
var _ref;
|
|
41
42
|
var _useProps = (0, _core1.useProps)('Collection', defaultProps, props), value = _useProps.value, onChange = _useProps.onChange, onRemoveItem = _useProps.onRemoveItem, onReorderItem = _useProps.onReorderItem, onInsertItem = _useProps.onInsertItem, disabled = _useProps.disabled, readOnly = _useProps.readOnly, draggable = _useProps.draggable, children = _useProps.children, columns = _useProps.columns, layout = _useProps.layout, gap = _useProps.gap, required = _useProps.required, newItem = _useProps.newItem, addLabel = _useProps.addLabel, addDisabledTooltip = _useProps.addDisabledTooltip, allowAdd = _useProps.allowAdd, label = _useProps.label, labelProps = _useProps.labelProps, withAsterisk = _useProps.withAsterisk, description = _useProps.description, descriptionProps = _useProps.descriptionProps, error = _useProps.error, errorProps = _useProps.errorProps, getItemId = _useProps.getItemId, ref = _useProps.ref, // Style props
|
|
42
43
|
style = _useProps.style, className = _useProps.className, classNames = _useProps.classNames, styles = _useProps.styles, unstyled = _useProps.unstyled, others = _object_without_properties._(_useProps, [
|
|
43
44
|
"value",
|
|
@@ -124,18 +125,18 @@ var Collection = function(props) {
|
|
|
124
125
|
]
|
|
125
126
|
}) : null;
|
|
126
127
|
var standardizedItems = items.map(function(item, index) {
|
|
127
|
-
var
|
|
128
|
+
var _ref;
|
|
128
129
|
return {
|
|
129
|
-
id: (
|
|
130
|
+
id: (_ref = getItemId === null || getItemId === void 0 ? void 0 : getItemId(item, index)) !== null && _ref !== void 0 ? _ref : String(index),
|
|
130
131
|
data: item
|
|
131
132
|
};
|
|
132
133
|
});
|
|
133
|
-
var getIndex = function(id) {
|
|
134
|
+
var getIndex = function getIndex(id) {
|
|
134
135
|
return standardizedItems.findIndex(function(item) {
|
|
135
136
|
return item.id === id;
|
|
136
137
|
});
|
|
137
138
|
};
|
|
138
|
-
var handleDragEnd = function(param) {
|
|
139
|
+
var handleDragEnd = function handleDragEnd(param) {
|
|
139
140
|
var over = param.over, active = param.active;
|
|
140
141
|
if (over) {
|
|
141
142
|
var activeIndex = getIndex(String(active.id));
|
|
@@ -148,12 +149,11 @@ var Collection = function(props) {
|
|
|
148
149
|
}
|
|
149
150
|
}
|
|
150
151
|
};
|
|
151
|
-
var
|
|
152
|
-
var
|
|
153
|
-
|
|
152
|
+
var addAllowed = typeof allowAdd === 'boolean' ? allowAdd : (_ref = allowAdd === null || allowAdd === void 0 ? void 0 : allowAdd(items)) !== null && _ref !== void 0 ? _ref : true;
|
|
153
|
+
var handleAdd = function handleAdd() {
|
|
154
|
+
var _ref;
|
|
154
155
|
var newItemValue = typeof newItem === 'function' ? newItem() : newItem;
|
|
155
|
-
|
|
156
|
-
onInsertItem === null || onInsertItem === void 0 ? void 0 : onInsertItem(newItemValue, (_items_length = items === null || items === void 0 ? void 0 : items.length) !== null && _items_length !== void 0 ? _items_length : 0);
|
|
156
|
+
onInsertItem === null || onInsertItem === void 0 ? void 0 : onInsertItem(newItemValue, (_ref = items === null || items === void 0 ? void 0 : items.length) !== null && _ref !== void 0 ? _ref : 0);
|
|
157
157
|
};
|
|
158
158
|
var _addButton = canEdit ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_CollectionAddButton.CollectionAddButton, {
|
|
159
159
|
addLabel: addLabel,
|
|
@@ -216,7 +216,7 @@ var Collection = function(props) {
|
|
|
216
216
|
id: item.id,
|
|
217
217
|
disabled: !canEdit,
|
|
218
218
|
draggable: draggable,
|
|
219
|
-
onRemove: function() {
|
|
219
|
+
onRemove: function onRemove() {
|
|
220
220
|
return onRemoveItem === null || onRemoveItem === void 0 ? void 0 : onRemoveItem(index);
|
|
221
221
|
},
|
|
222
222
|
removable: !(isRequired && hasOnlyOneItem),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Collection/Collection.tsx"],"sourcesContent":["import {DndContext, DragEndEvent, KeyboardSensor, PointerSensor, useSensor, useSensors} from '@dnd-kit/core';\nimport {restrictToParentElement, restrictToVerticalAxis} from '@dnd-kit/modifiers';\nimport {SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy} from '@dnd-kit/sortable';\nimport {\n __InputWrapperProps,\n Box,\n BoxProps,\n Factory,\n Input,\n MantineSpacing,\n Stack,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport {useDidUpdate} from '@mantine/hooks';\nimport {ForwardedRef, ReactNode} from 'react';\n\nimport {CustomComponentThemeExtend, identity} from '../../utils/createFactoryComponent.js';\nimport classes from './Collection.module.css';\nimport {CollectionAddButton} from './CollectionAddButton.js';\nimport {CollectionColumnDef} from './CollectionColumn.types.js';\nimport {CollectionProvider} from './CollectionContext.js';\nimport {CollectionItem} from './CollectionItem.js';\nimport {CollectionLayout} from './layouts/CollectionLayout.types.js';\nimport {CollectionLayouts} from './layouts/CollectionLayouts.js';\n\n/**\n * Base props shared by both column-based and children-based patterns\n */\ninterface BaseCollectionProps<T> extends __InputWrapperProps, BoxProps, StylesApiProps<CollectionFactory> {\n /**\n * The default value each new item should have\n */\n newItem: T | (() => T);\n /**\n * The list of items to display inside the collection\n *\n * @default []\n */\n value?: T[];\n /**\n * Defines how each item is uniquely identified. It is highly recommended that you specify this prop to an ID that makes sense.\n *\n * This method is required when using this component with ReactHookForm.\n *\n * @see {@link https://react-hook-form.com/api/usefieldarray/} for using a collection with ReactHookForm.\n *\n * @param originalItem The original item\n * @param itemIndex The index of the original item\n */\n getItemId?: (originalItem: T, itemIndex: number) => string;\n /**\n * Unused, has no effect\n */\n onFocus?: () => void;\n /**\n * Function called whenever the value needs to be updated\n *\n * @param value The whole list of items after the change\n */\n onChange?: (value: T[]) => void;\n /**\n * Function called after an item is removed from the collection using the remove button\n *\n * @param itemIndex The index of the item that was removed\n */\n onRemoveItem?: (itemIndex: number) => void;\n /**\n * Function that gets called whenever a collection item needs to be reordered\n *\n * @param payload The origin and destination index of the item to reorder\n */\n onReorderItem?: (payload: {from: number; to: number}) => void;\n /**\n * Function that gets called when a new item needs to be added to the collection\n *\n * @param value The value of the item to insert\n * @param index The index of the new item to insert\n */\n onInsertItem?: (value: T, index: number) => void;\n /**\n * Whether the collection should have drag and drop behavior enabled\n *\n * @default false\n */\n draggable?: boolean;\n /**\n * Whether the collection is disabled, or in other words in read only mode\n *\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the collection is readOnly. If true, the collection will not allow adding or removing items\n *\n * @default false\n */\n readOnly?: boolean;\n /**\n * Function that determines if the add item button should be enabled given the current items of the collection.\n * The button is always enabled if this props remains undefined\n *\n * @param values The current items of the collection\n */\n allowAdd?: boolean | ((values: T[]) => boolean);\n /**\n * The label of the add item button\n *\n * @default \"Add item\"\n */\n addLabel?: ReactNode;\n /**\n * The tooltip text displayed when hovering over the disabled add item button\n *\n * @default 'There is already an empty item'\n */\n addDisabledTooltip?: string;\n /**\n * The gap between the collection items\n *\n * @default 'md'\n */\n gap?: MantineSpacing;\n /**\n * Whether the collection is required. When required is true, the collection will hide the remove button if there is only one item\n *\n * @default false\n */\n required?: boolean;\n}\n\n/**\n * Collection with column-based layout\n */\ninterface CollectionWithColumns<T> extends BaseCollectionProps<T> {\n /**\n * Column definitions for the collection\n */\n columns: Array<CollectionColumnDef<T>>;\n\n /**\n * Layout component to use for rendering\n * @default CollectionLayouts.Horizontal\n */\n layout?: CollectionLayout;\n\n /**\n * Must not have children when using columns\n */\n children?: never;\n}\n\n/**\n * Collection with legacy children render prop\n */\ninterface CollectionWithChildren<T> extends BaseCollectionProps<T> {\n /**\n * A render function called for each item passed in the `value` prop.\n *\n * @param item The current item's value\n * @param index The current item's index\n */\n children: (item: T, index: number) => ReactNode;\n\n /**\n * Must not have columns when using children\n */\n columns?: never;\n\n /**\n * Must not have layout when using children\n */\n layout?: never;\n}\n\n/**\n * Collection props - either columns OR children, never both\n */\nexport type CollectionProps<T> = CollectionWithColumns<T> | CollectionWithChildren<T>;\n\nexport type CollectionStylesNames = 'root' | 'item' | 'items' | 'itemDragging' | 'dragHandle' | 'removeButton';\n\nexport type CollectionFactory = Factory<{\n props: CollectionProps<unknown>;\n ref: HTMLDivElement;\n stylesNames: CollectionStylesNames;\n}>;\n\nconst defaultProps: Partial<CollectionProps<unknown>> = {\n draggable: false,\n addLabel: 'Add item',\n addDisabledTooltip: 'There is already an empty item',\n disabled: false,\n readOnly: false,\n gap: 'md',\n required: false,\n getItemId: ({id}: any) => id,\n};\n\nexport const Collection = <T,>(props: CollectionProps<T> & {ref?: ForwardedRef<HTMLDivElement>}) => {\n const {\n value,\n onChange,\n onRemoveItem,\n onReorderItem,\n onInsertItem,\n disabled,\n readOnly,\n draggable,\n children,\n columns,\n layout,\n gap,\n required,\n newItem,\n addLabel,\n addDisabledTooltip,\n allowAdd,\n label,\n labelProps,\n withAsterisk,\n description,\n descriptionProps,\n error,\n errorProps,\n getItemId,\n ref,\n\n // Style props\n style,\n className,\n classNames,\n styles,\n unstyled,\n ...others\n } = useProps('Collection', defaultProps as CollectionProps<T>, props);\n\n // Runtime validation: ensure columns and children are mutually exclusive\n if (columns && children) {\n throw new Error('Collection: Cannot use both \"columns\" and \"children\" props.');\n }\n\n if (layout && !columns) {\n throw new Error('Collection: \"layout\" prop can only be used with \"columns\" prop.');\n }\n\n const getStyles = useStyles<CollectionFactory>({\n name: 'Collection',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n });\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const canEdit = !disabled && !readOnly;\n const items = value ?? [];\n const hasOnlyOneItem = items.length === 1;\n\n /**\n * Enforcing onChange when the value is modified will make sure the errors are carried through.\n */\n useDidUpdate(() => {\n onChange?.(items);\n }, [JSON.stringify(items)]);\n\n const isRequired = typeof withAsterisk === 'boolean' ? withAsterisk : required;\n const _label = label ? (\n <Input.Label required={isRequired} {...labelProps}>\n {label}\n </Input.Label>\n ) : null;\n\n const _description = description ? (\n <Input.Description {...descriptionProps}>{description}</Input.Description>\n ) : null;\n const _error = error ? (\n <Input.Error {...errorProps} pt=\"xs\">\n {error}\n </Input.Error>\n ) : null;\n const _header =\n _label || _description ? (\n <Stack gap=\"xxs\" pb=\"xs\">\n {_label}\n {_description}\n </Stack>\n ) : null;\n\n const standardizedItems = items.map((item, index) => ({id: getItemId?.(item, index) ?? String(index), data: item}));\n\n const getIndex = (id: string) => standardizedItems.findIndex((item) => item.id === id);\n\n const handleDragEnd = ({over, active}: DragEndEvent): void => {\n if (over) {\n const activeIndex = getIndex(String(active.id));\n const overIndex = getIndex(String(over.id));\n if (activeIndex !== overIndex) {\n onReorderItem?.({from: activeIndex, to: overIndex});\n }\n }\n };\n\n const addAllowed = typeof allowAdd === 'boolean' ? allowAdd : (allowAdd?.(items) ?? true);\n\n const handleAdd = () => {\n const newItemValue = typeof newItem === 'function' ? (newItem as () => T)() : newItem;\n onInsertItem?.(newItemValue, items?.length ?? 0);\n };\n\n const _addButton = canEdit ? (\n <CollectionAddButton\n addLabel={addLabel}\n addDisabledTooltip={addDisabledTooltip}\n addAllowed={addAllowed}\n onAdd={handleAdd}\n />\n ) : null;\n\n // Column-based layout pattern\n if (columns) {\n const Layout = layout || CollectionLayouts.Horizontal;\n\n return (\n <CollectionProvider value={{getStyles, columns: columns as Array<CollectionColumnDef<unknown>>}}>\n <DndContext\n onDragEnd={handleDragEnd}\n sensors={sensors}\n modifiers={[restrictToVerticalAxis, restrictToParentElement]}\n >\n <SortableContext items={standardizedItems} strategy={verticalListSortingStrategy}>\n <Box ref={ref} {...others} {...getStyles('root')}>\n {_header}\n <Layout>\n <Layout.Header\n draggable={draggable && canEdit}\n removable={canEdit && !(isRequired && hasOnlyOneItem)}\n />\n <Layout.Body\n items={items}\n onRemove={canEdit ? onRemoveItem : undefined}\n removable={canEdit && !(isRequired && hasOnlyOneItem)}\n draggable={draggable && canEdit}\n disabled={disabled}\n readOnly={readOnly}\n getItemId={getItemId}\n gap={gap}\n />\n </Layout>\n {_addButton}\n {_error}\n </Box>\n </SortableContext>\n </DndContext>\n </CollectionProvider>\n );\n }\n\n // Legacy children render prop pattern\n const renderedItems = standardizedItems.map((item, index) => (\n <CollectionItem\n key={item.id}\n id={item.id}\n disabled={!canEdit}\n draggable={draggable}\n onRemove={() => onRemoveItem?.(index)}\n removable={!(isRequired && hasOnlyOneItem)}\n >\n {children(item.data, index)}\n </CollectionItem>\n ));\n\n return (\n <CollectionProvider value={{getStyles}}>\n <DndContext\n onDragEnd={handleDragEnd}\n sensors={sensors}\n modifiers={[restrictToVerticalAxis, restrictToParentElement]}\n >\n <SortableContext items={standardizedItems} strategy={verticalListSortingStrategy}>\n <Box ref={ref} {...others} {...getStyles('root')}>\n {_header}\n <Stack gap={gap} {...getStyles('items')}>\n {renderedItems}\n {_addButton}\n </Stack>\n {_error}\n </Box>\n </SortableContext>\n </DndContext>\n </CollectionProvider>\n );\n};\n\nCollection.displayName = 'Collection';\n\nCollection.extend = identity as CustomComponentThemeExtend<CollectionFactory>;\n\nCollection.Layouts = CollectionLayouts;\n"],"names":["Collection","defaultProps","draggable","addLabel","addDisabledTooltip","disabled","readOnly","gap","required","getItemId","id","props","useProps","value","onChange","onRemoveItem","onReorderItem","onInsertItem","children","columns","layout","newItem","allowAdd","label","labelProps","withAsterisk","description","descriptionProps","error","errorProps","ref","style","className","classNames","styles","unstyled","others","Error","getStyles","useStyles","name","classes","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","coordinateGetter","sortableKeyboardCoordinates","canEdit","items","hasOnlyOneItem","length","useDidUpdate","JSON","stringify","isRequired","_label","Input","Label","_description","Description","_error","pt","_header","Stack","pb","standardizedItems","map","item","index","String","data","getIndex","findIndex","handleDragEnd","over","active","activeIndex","overIndex","from","to","addAllowed","handleAdd","newItemValue","_addButton","CollectionAddButton","onAdd","Layout","CollectionLayouts","Horizontal","CollectionProvider","DndContext","onDragEnd","modifiers","restrictToVerticalAxis","restrictToParentElement","SortableContext","strategy","verticalListSortingStrategy","Box","Header","removable","Body","onRemove","undefined","renderedItems","CollectionItem","displayName","extend","identity","Layouts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Collection/Collection.tsx"],"sourcesContent":["import {DndContext, DragEndEvent, KeyboardSensor, PointerSensor, useSensor, useSensors} from '@dnd-kit/core';\nimport {restrictToParentElement, restrictToVerticalAxis} from '@dnd-kit/modifiers';\nimport {SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy} from '@dnd-kit/sortable';\nimport {\n __InputWrapperProps,\n Box,\n BoxProps,\n Factory,\n Input,\n MantineSpacing,\n Stack,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport {useDidUpdate} from '@mantine/hooks';\nimport {ForwardedRef, ReactNode} from 'react';\n\nimport {CustomComponentThemeExtend, identity} from '../../utils/createFactoryComponent.js';\nimport classes from './Collection.module.css';\nimport {CollectionAddButton} from './CollectionAddButton.js';\nimport {CollectionColumnDef} from './CollectionColumn.types.js';\nimport {CollectionProvider} from './CollectionContext.js';\nimport {CollectionItem} from './CollectionItem.js';\nimport {CollectionLayout} from './layouts/CollectionLayout.types.js';\nimport {CollectionLayouts} from './layouts/CollectionLayouts.js';\n\n/**\n * Base props shared by both column-based and children-based patterns\n */\ninterface BaseCollectionProps<T> extends __InputWrapperProps, BoxProps, StylesApiProps<CollectionFactory> {\n /**\n * The default value each new item should have\n */\n newItem: T | (() => T);\n /**\n * The list of items to display inside the collection\n *\n * @default []\n */\n value?: T[];\n /**\n * Defines how each item is uniquely identified. It is highly recommended that you specify this prop to an ID that makes sense.\n *\n * This method is required when using this component with ReactHookForm.\n *\n * @see {@link https://react-hook-form.com/api/usefieldarray/} for using a collection with ReactHookForm.\n *\n * @param originalItem The original item\n * @param itemIndex The index of the original item\n */\n getItemId?: (originalItem: T, itemIndex: number) => string;\n /**\n * Unused, has no effect\n */\n onFocus?: () => void;\n /**\n * Function called whenever the value needs to be updated\n *\n * @param value The whole list of items after the change\n */\n onChange?: (value: T[]) => void;\n /**\n * Function called after an item is removed from the collection using the remove button\n *\n * @param itemIndex The index of the item that was removed\n */\n onRemoveItem?: (itemIndex: number) => void;\n /**\n * Function that gets called whenever a collection item needs to be reordered\n *\n * @param payload The origin and destination index of the item to reorder\n */\n onReorderItem?: (payload: {from: number; to: number}) => void;\n /**\n * Function that gets called when a new item needs to be added to the collection\n *\n * @param value The value of the item to insert\n * @param index The index of the new item to insert\n */\n onInsertItem?: (value: T, index: number) => void;\n /**\n * Whether the collection should have drag and drop behavior enabled\n *\n * @default false\n */\n draggable?: boolean;\n /**\n * Whether the collection is disabled, or in other words in read only mode\n *\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the collection is readOnly. If true, the collection will not allow adding or removing items\n *\n * @default false\n */\n readOnly?: boolean;\n /**\n * Function that determines if the add item button should be enabled given the current items of the collection.\n * The button is always enabled if this props remains undefined\n *\n * @param values The current items of the collection\n */\n allowAdd?: boolean | ((values: T[]) => boolean);\n /**\n * The label of the add item button\n *\n * @default \"Add item\"\n */\n addLabel?: ReactNode;\n /**\n * The tooltip text displayed when hovering over the disabled add item button\n *\n * @default 'There is already an empty item'\n */\n addDisabledTooltip?: string;\n /**\n * The gap between the collection items\n *\n * @default 'md'\n */\n gap?: MantineSpacing;\n /**\n * Whether the collection is required. When required is true, the collection will hide the remove button if there is only one item\n *\n * @default false\n */\n required?: boolean;\n}\n\n/**\n * Collection with column-based layout\n */\ninterface CollectionWithColumns<T> extends BaseCollectionProps<T> {\n /**\n * Column definitions for the collection\n */\n columns: Array<CollectionColumnDef<T>>;\n\n /**\n * Layout component to use for rendering\n * @default CollectionLayouts.Horizontal\n */\n layout?: CollectionLayout;\n\n /**\n * Must not have children when using columns\n */\n children?: never;\n}\n\n/**\n * Collection with legacy children render prop\n */\ninterface CollectionWithChildren<T> extends BaseCollectionProps<T> {\n /**\n * A render function called for each item passed in the `value` prop.\n *\n * @param item The current item's value\n * @param index The current item's index\n */\n children: (item: T, index: number) => ReactNode;\n\n /**\n * Must not have columns when using children\n */\n columns?: never;\n\n /**\n * Must not have layout when using children\n */\n layout?: never;\n}\n\n/**\n * Collection props - either columns OR children, never both\n */\nexport type CollectionProps<T> = CollectionWithColumns<T> | CollectionWithChildren<T>;\n\nexport type CollectionStylesNames = 'root' | 'item' | 'items' | 'itemDragging' | 'dragHandle' | 'removeButton';\n\nexport type CollectionFactory = Factory<{\n props: CollectionProps<unknown>;\n ref: HTMLDivElement;\n stylesNames: CollectionStylesNames;\n}>;\n\nconst defaultProps: Partial<CollectionProps<unknown>> = {\n draggable: false,\n addLabel: 'Add item',\n addDisabledTooltip: 'There is already an empty item',\n disabled: false,\n readOnly: false,\n gap: 'md',\n required: false,\n getItemId: ({id}: any) => id,\n};\n\nexport const Collection = <T,>(props: CollectionProps<T> & {ref?: ForwardedRef<HTMLDivElement>}) => {\n const {\n value,\n onChange,\n onRemoveItem,\n onReorderItem,\n onInsertItem,\n disabled,\n readOnly,\n draggable,\n children,\n columns,\n layout,\n gap,\n required,\n newItem,\n addLabel,\n addDisabledTooltip,\n allowAdd,\n label,\n labelProps,\n withAsterisk,\n description,\n descriptionProps,\n error,\n errorProps,\n getItemId,\n ref,\n\n // Style props\n style,\n className,\n classNames,\n styles,\n unstyled,\n ...others\n } = useProps('Collection', defaultProps as CollectionProps<T>, props);\n\n // Runtime validation: ensure columns and children are mutually exclusive\n if (columns && children) {\n throw new Error('Collection: Cannot use both \"columns\" and \"children\" props.');\n }\n\n if (layout && !columns) {\n throw new Error('Collection: \"layout\" prop can only be used with \"columns\" prop.');\n }\n\n const getStyles = useStyles<CollectionFactory>({\n name: 'Collection',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n });\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n }),\n );\n\n const canEdit = !disabled && !readOnly;\n const items = value ?? [];\n const hasOnlyOneItem = items.length === 1;\n\n /**\n * Enforcing onChange when the value is modified will make sure the errors are carried through.\n */\n useDidUpdate(() => {\n onChange?.(items);\n }, [JSON.stringify(items)]);\n\n const isRequired = typeof withAsterisk === 'boolean' ? withAsterisk : required;\n const _label = label ? (\n <Input.Label required={isRequired} {...labelProps}>\n {label}\n </Input.Label>\n ) : null;\n\n const _description = description ? (\n <Input.Description {...descriptionProps}>{description}</Input.Description>\n ) : null;\n const _error = error ? (\n <Input.Error {...errorProps} pt=\"xs\">\n {error}\n </Input.Error>\n ) : null;\n const _header =\n _label || _description ? (\n <Stack gap=\"xxs\" pb=\"xs\">\n {_label}\n {_description}\n </Stack>\n ) : null;\n\n const standardizedItems = items.map((item, index) => ({id: getItemId?.(item, index) ?? String(index), data: item}));\n\n const getIndex = (id: string) => standardizedItems.findIndex((item) => item.id === id);\n\n const handleDragEnd = ({over, active}: DragEndEvent): void => {\n if (over) {\n const activeIndex = getIndex(String(active.id));\n const overIndex = getIndex(String(over.id));\n if (activeIndex !== overIndex) {\n onReorderItem?.({from: activeIndex, to: overIndex});\n }\n }\n };\n\n const addAllowed = typeof allowAdd === 'boolean' ? allowAdd : (allowAdd?.(items) ?? true);\n\n const handleAdd = () => {\n const newItemValue = typeof newItem === 'function' ? (newItem as () => T)() : newItem;\n onInsertItem?.(newItemValue, items?.length ?? 0);\n };\n\n const _addButton = canEdit ? (\n <CollectionAddButton\n addLabel={addLabel}\n addDisabledTooltip={addDisabledTooltip}\n addAllowed={addAllowed}\n onAdd={handleAdd}\n />\n ) : null;\n\n // Column-based layout pattern\n if (columns) {\n const Layout = layout || CollectionLayouts.Horizontal;\n\n return (\n <CollectionProvider value={{getStyles, columns: columns as Array<CollectionColumnDef<unknown>>}}>\n <DndContext\n onDragEnd={handleDragEnd}\n sensors={sensors}\n modifiers={[restrictToVerticalAxis, restrictToParentElement]}\n >\n <SortableContext items={standardizedItems} strategy={verticalListSortingStrategy}>\n <Box ref={ref} {...others} {...getStyles('root')}>\n {_header}\n <Layout>\n <Layout.Header\n draggable={draggable && canEdit}\n removable={canEdit && !(isRequired && hasOnlyOneItem)}\n />\n <Layout.Body\n items={items}\n onRemove={canEdit ? onRemoveItem : undefined}\n removable={canEdit && !(isRequired && hasOnlyOneItem)}\n draggable={draggable && canEdit}\n disabled={disabled}\n readOnly={readOnly}\n getItemId={getItemId}\n gap={gap}\n />\n </Layout>\n {_addButton}\n {_error}\n </Box>\n </SortableContext>\n </DndContext>\n </CollectionProvider>\n );\n }\n\n // Legacy children render prop pattern\n const renderedItems = standardizedItems.map((item, index) => (\n <CollectionItem\n key={item.id}\n id={item.id}\n disabled={!canEdit}\n draggable={draggable}\n onRemove={() => onRemoveItem?.(index)}\n removable={!(isRequired && hasOnlyOneItem)}\n >\n {children(item.data, index)}\n </CollectionItem>\n ));\n\n return (\n <CollectionProvider value={{getStyles}}>\n <DndContext\n onDragEnd={handleDragEnd}\n sensors={sensors}\n modifiers={[restrictToVerticalAxis, restrictToParentElement]}\n >\n <SortableContext items={standardizedItems} strategy={verticalListSortingStrategy}>\n <Box ref={ref} {...others} {...getStyles('root')}>\n {_header}\n <Stack gap={gap} {...getStyles('items')}>\n {renderedItems}\n {_addButton}\n </Stack>\n {_error}\n </Box>\n </SortableContext>\n </DndContext>\n </CollectionProvider>\n );\n};\n\nCollection.displayName = 'Collection';\n\nCollection.extend = identity as CustomComponentThemeExtend<CollectionFactory>;\n\nCollection.Layouts = CollectionLayouts;\n"],"names":["Collection","defaultProps","draggable","addLabel","addDisabledTooltip","disabled","readOnly","gap","required","getItemId","id","props","useProps","value","onChange","onRemoveItem","onReorderItem","onInsertItem","children","columns","layout","newItem","allowAdd","label","labelProps","withAsterisk","description","descriptionProps","error","errorProps","ref","style","className","classNames","styles","unstyled","others","Error","getStyles","useStyles","name","classes","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","coordinateGetter","sortableKeyboardCoordinates","canEdit","items","hasOnlyOneItem","length","useDidUpdate","JSON","stringify","isRequired","_label","Input","Label","_description","Description","_error","pt","_header","Stack","pb","standardizedItems","map","item","index","String","data","getIndex","findIndex","handleDragEnd","over","active","activeIndex","overIndex","from","to","addAllowed","handleAdd","newItemValue","_addButton","CollectionAddButton","onAdd","Layout","CollectionLayouts","Horizontal","CollectionProvider","DndContext","onDragEnd","modifiers","restrictToVerticalAxis","restrictToParentElement","SortableContext","strategy","verticalListSortingStrategy","Box","Header","removable","Body","onRemove","undefined","renderedItems","CollectionItem","displayName","extend","identity","Layouts"],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ var _plasmareacticons = require("@coveord/plasma-react-icons");
|
|
|
14
14
|
var _core = require("@mantine/core");
|
|
15
15
|
var _Button = require("../Button/Button.js");
|
|
16
16
|
var _Collectionmodulecss = /*#__PURE__*/ _interop_require_default._(require("./Collection.module.css"));
|
|
17
|
-
var CollectionAddButton = function(param) {
|
|
17
|
+
var CollectionAddButton = function CollectionAddButton(param) {
|
|
18
18
|
var addLabel = param.addLabel, addDisabledTooltip = param.addDisabledTooltip, addAllowed = param.addAllowed, onAdd = param.onAdd;
|
|
19
19
|
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_core.Box, {
|
|
20
20
|
className: _Collectionmodulecss.default.addButtonContainer,
|
|
@@ -22,7 +22,7 @@ var defaultProps = {
|
|
|
22
22
|
removable: true,
|
|
23
23
|
gap: 'sm'
|
|
24
24
|
};
|
|
25
|
-
var StaticCollectionItem = function(props) {
|
|
25
|
+
var StaticCollectionItem = function StaticCollectionItem(props) {
|
|
26
26
|
var _useProps = (0, _core.useProps)('CollectionItem', defaultProps, props), children = _useProps.children, removable = _useProps.removable, onRemove = _useProps.onRemove, id = _useProps.id, // Style props
|
|
27
27
|
style = _useProps.style, className = _useProps.className, classNames = _useProps.classNames, styles = _useProps.styles, others = _object_without_properties._(_useProps, [
|
|
28
28
|
"children",
|
|
@@ -52,7 +52,7 @@ var StaticCollectionItem = function(props) {
|
|
|
52
52
|
]
|
|
53
53
|
}));
|
|
54
54
|
};
|
|
55
|
-
var DisabledCollectionItem = function(props) {
|
|
55
|
+
var DisabledCollectionItem = function DisabledCollectionItem(props) {
|
|
56
56
|
var ctx = (0, _CollectionContext.useCollectionContext)();
|
|
57
57
|
var _useProps = (0, _core.useProps)('CollectionItem', defaultProps, props), children = _useProps.children, id = _useProps.id, _removable = _useProps.removable, _onRemove = _useProps.onRemove, // Style props
|
|
58
58
|
style = _useProps.style, className = _useProps.className, classNames = _useProps.classNames, styles = _useProps.styles, others = _object_without_properties._(_useProps, [
|
|
@@ -76,7 +76,7 @@ var DisabledCollectionItem = function(props) {
|
|
|
76
76
|
children: children
|
|
77
77
|
}));
|
|
78
78
|
};
|
|
79
|
-
var DraggableCollectionItem = function(props) {
|
|
79
|
+
var DraggableCollectionItem = function DraggableCollectionItem(props) {
|
|
80
80
|
var ctx = (0, _CollectionContext.useCollectionContext)();
|
|
81
81
|
var _useProps = (0, _core.useProps)('CollectionItem', defaultProps, props), children = _useProps.children, removable = _useProps.removable, onRemove = _useProps.onRemove, id = _useProps.id, // Style props
|
|
82
82
|
className = _useProps.className, classNames = _useProps.classNames, styles = _useProps.styles, others = _object_without_properties._(_useProps, [
|
|
@@ -119,8 +119,8 @@ var DraggableCollectionItem = function(props) {
|
|
|
119
119
|
]
|
|
120
120
|
}));
|
|
121
121
|
};
|
|
122
|
-
var CollectionItem = function(
|
|
123
|
-
var draggable =
|
|
122
|
+
var CollectionItem = function CollectionItem(_0) {
|
|
123
|
+
var draggable = _0.draggable, disabled = _0.disabled, otherProps = _object_without_properties._(_0, [
|
|
124
124
|
"draggable",
|
|
125
125
|
"disabled"
|
|
126
126
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Collection/CollectionItem.tsx"],"sourcesContent":["import {useSortable} from '@dnd-kit/sortable';\nimport {CSS} from '@dnd-kit/utilities';\nimport {Group, GroupProps, useProps} from '@mantine/core';\nimport {FunctionComponent, type MouseEventHandler, PropsWithChildren} from 'react';\n\nimport {useCollectionContext} from './CollectionContext.js';\nimport {DragHandle} from './layouts/shared/DragHandle.js';\nimport {RemoveButton} from './layouts/shared/RemoveButton.js';\n\ninterface CollectionItemProps extends CollectionItemSharedProps {\n draggable?: boolean;\n disabled: boolean;\n}\n\ninterface CollectionItemSharedProps extends GroupProps {\n id: string;\n onRemove?: MouseEventHandler<HTMLButtonElement>;\n removable?: boolean;\n}\n\nconst defaultProps: Partial<CollectionItemSharedProps> = {\n removable: true,\n gap: 'sm',\n};\n\nconst StaticCollectionItem: FunctionComponent<PropsWithChildren<CollectionItemSharedProps>> = (props) => {\n const {\n children,\n removable,\n onRemove,\n id,\n\n // Style props\n style,\n className,\n classNames,\n styles,\n ...others\n } = useProps('CollectionItem', defaultProps, props);\n const ctx = useCollectionContext();\n\n return (\n <Group\n data-testid={`item-${id}`}\n {...ctx.getStyles('item', {style, className, classNames, styles})}\n {...others}\n >\n {children}\n <RemoveButton removable={removable} onRemove={onRemove} />\n </Group>\n );\n};\n\nconst DisabledCollectionItem: FunctionComponent<PropsWithChildren<CollectionItemSharedProps>> = (props) => {\n const ctx = useCollectionContext();\n const {\n children,\n id,\n removable: _removable,\n onRemove: _onRemove,\n\n // Style props\n style,\n className,\n classNames,\n styles,\n ...others\n } = useProps('CollectionItem', defaultProps, props);\n return (\n <Group\n data-testid={`item-${id}`}\n {...ctx.getStyles('item', {style, className, classNames, styles})}\n {...others}\n >\n {children}\n </Group>\n );\n};\n\nconst DraggableCollectionItem: FunctionComponent<PropsWithChildren<CollectionItemSharedProps>> = (props) => {\n const ctx = useCollectionContext();\n const {\n children,\n removable,\n onRemove,\n id,\n\n // Style props\n className,\n classNames,\n styles,\n ...others\n } = useProps('CollectionItem', defaultProps, props);\n\n const {attributes, listeners, setNodeRef, transform, transition, isDragging, setActivatorNodeRef} = useSortable({\n id,\n });\n\n return (\n <Group\n data-testid={`item-${id}`}\n ref={setNodeRef}\n {...ctx.getStyles('item', {\n style: transform\n ? {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n : undefined,\n className,\n classNames,\n styles,\n })}\n data-isdragging={isDragging}\n {...others}\n >\n <DragHandle setActivatorNodeRef={setActivatorNodeRef} listeners={listeners} attributes={attributes} />\n {children}\n <RemoveButton removable={removable} onRemove={onRemove} />\n </Group>\n );\n};\n\nexport const CollectionItem: FunctionComponent<PropsWithChildren<CollectionItemProps>> = ({\n draggable,\n disabled,\n ...otherProps\n}) => {\n if (disabled) {\n return <DisabledCollectionItem {...otherProps} />;\n }\n if (draggable) {\n return <DraggableCollectionItem {...otherProps} />;\n }\n return <StaticCollectionItem {...otherProps} />;\n};\n"],"names":["CollectionItem","defaultProps","removable","gap","StaticCollectionItem","props","useProps","children","onRemove","id","style","className","classNames","styles","others","ctx","useCollectionContext","Group","data-testid","getStyles","RemoveButton","DisabledCollectionItem","_removable","_onRemove","DraggableCollectionItem","useSortable","attributes","listeners","setNodeRef","transform","transition","isDragging","setActivatorNodeRef","ref","CSS","Transform","toString","undefined","data-isdragging","DragHandle","draggable","disabled","otherProps"],"mappings":";;;;+BA2HaA;;;eAAAA;;;;;;;wBA3Ha;yBACR;oBACwB;iCAGP;0BACV;4BACE;AAa3B,IAAMC,eAAmD;IACrDC,WAAW;IACXC,KAAK;AACT;AAEA,IAAMC,uBAAwF,
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Collection/CollectionItem.tsx"],"sourcesContent":["import {useSortable} from '@dnd-kit/sortable';\nimport {CSS} from '@dnd-kit/utilities';\nimport {Group, GroupProps, useProps} from '@mantine/core';\nimport {FunctionComponent, type MouseEventHandler, PropsWithChildren} from 'react';\n\nimport {useCollectionContext} from './CollectionContext.js';\nimport {DragHandle} from './layouts/shared/DragHandle.js';\nimport {RemoveButton} from './layouts/shared/RemoveButton.js';\n\ninterface CollectionItemProps extends CollectionItemSharedProps {\n draggable?: boolean;\n disabled: boolean;\n}\n\ninterface CollectionItemSharedProps extends GroupProps {\n id: string;\n onRemove?: MouseEventHandler<HTMLButtonElement>;\n removable?: boolean;\n}\n\nconst defaultProps: Partial<CollectionItemSharedProps> = {\n removable: true,\n gap: 'sm',\n};\n\nconst StaticCollectionItem: FunctionComponent<PropsWithChildren<CollectionItemSharedProps>> = (props) => {\n const {\n children,\n removable,\n onRemove,\n id,\n\n // Style props\n style,\n className,\n classNames,\n styles,\n ...others\n } = useProps('CollectionItem', defaultProps, props);\n const ctx = useCollectionContext();\n\n return (\n <Group\n data-testid={`item-${id}`}\n {...ctx.getStyles('item', {style, className, classNames, styles})}\n {...others}\n >\n {children}\n <RemoveButton removable={removable} onRemove={onRemove} />\n </Group>\n );\n};\n\nconst DisabledCollectionItem: FunctionComponent<PropsWithChildren<CollectionItemSharedProps>> = (props) => {\n const ctx = useCollectionContext();\n const {\n children,\n id,\n removable: _removable,\n onRemove: _onRemove,\n\n // Style props\n style,\n className,\n classNames,\n styles,\n ...others\n } = useProps('CollectionItem', defaultProps, props);\n return (\n <Group\n data-testid={`item-${id}`}\n {...ctx.getStyles('item', {style, className, classNames, styles})}\n {...others}\n >\n {children}\n </Group>\n );\n};\n\nconst DraggableCollectionItem: FunctionComponent<PropsWithChildren<CollectionItemSharedProps>> = (props) => {\n const ctx = useCollectionContext();\n const {\n children,\n removable,\n onRemove,\n id,\n\n // Style props\n className,\n classNames,\n styles,\n ...others\n } = useProps('CollectionItem', defaultProps, props);\n\n const {attributes, listeners, setNodeRef, transform, transition, isDragging, setActivatorNodeRef} = useSortable({\n id,\n });\n\n return (\n <Group\n data-testid={`item-${id}`}\n ref={setNodeRef}\n {...ctx.getStyles('item', {\n style: transform\n ? {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n : undefined,\n className,\n classNames,\n styles,\n })}\n data-isdragging={isDragging}\n {...others}\n >\n <DragHandle setActivatorNodeRef={setActivatorNodeRef} listeners={listeners} attributes={attributes} />\n {children}\n <RemoveButton removable={removable} onRemove={onRemove} />\n </Group>\n );\n};\n\nexport const CollectionItem: FunctionComponent<PropsWithChildren<CollectionItemProps>> = ({\n draggable,\n disabled,\n ...otherProps\n}) => {\n if (disabled) {\n return <DisabledCollectionItem {...otherProps} />;\n }\n if (draggable) {\n return <DraggableCollectionItem {...otherProps} />;\n }\n return <StaticCollectionItem {...otherProps} />;\n};\n"],"names":["CollectionItem","defaultProps","removable","gap","StaticCollectionItem","props","useProps","children","onRemove","id","style","className","classNames","styles","others","ctx","useCollectionContext","Group","data-testid","getStyles","RemoveButton","DisabledCollectionItem","_removable","_onRemove","DraggableCollectionItem","useSortable","attributes","listeners","setNodeRef","transform","transition","isDragging","setActivatorNodeRef","ref","CSS","Transform","toString","undefined","data-isdragging","DragHandle","draggable","disabled","otherProps"],"mappings":"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"}
|
|
@@ -8,19 +8,19 @@ Object.defineProperty(exports, "enhanceWithCollectionProps", {
|
|
|
8
8
|
return enhanceWithCollectionProps;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var enhanceWithCollectionProps = function(payload, field, options) {
|
|
11
|
+
var enhanceWithCollectionProps = function enhanceWithCollectionProps(payload, field, options) {
|
|
12
12
|
if (payload.field === field) {
|
|
13
13
|
var _ref = options || {}, _ref_validateInputOnChange = _ref.validateInputOnChange, validateInputOnChange = _ref_validateInputOnChange === void 0 ? false : _ref_validateInputOnChange;
|
|
14
14
|
return {
|
|
15
|
-
onReorderItem: function(reorderPayload) {
|
|
15
|
+
onReorderItem: function onReorderItem(reorderPayload) {
|
|
16
16
|
payload.form.reorderListItem(field, reorderPayload);
|
|
17
17
|
validateInputOnChange && payload.form.validate();
|
|
18
18
|
},
|
|
19
|
-
onRemoveItem: function(index) {
|
|
19
|
+
onRemoveItem: function onRemoveItem(index) {
|
|
20
20
|
payload.form.removeListItem(field, index);
|
|
21
21
|
validateInputOnChange && payload.form.validate();
|
|
22
22
|
},
|
|
23
|
-
onInsertItem: function(valueToInsert, index) {
|
|
23
|
+
onInsertItem: function onInsertItem(valueToInsert, index) {
|
|
24
24
|
payload.form.insertListItem(field, valueToInsert, index);
|
|
25
25
|
validateInputOnChange && payload.form.validate();
|
|
26
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Collection/enhanceWithCollectionProps.ts"],"sourcesContent":["import {UseFormInput, type FormArrayElement} from '@mantine/form';\nimport {CollectionProps} from './Collection.js';\n\nexport const enhanceWithCollectionProps = <\n FormValues,\n TransformValues extends (values: FormValues) => unknown = (values: FormValues) => FormValues,\n>(\n payload: Parameters<UseFormInput<FormValues, TransformValues>['enhanceGetInputProps']>[0],\n field: (typeof payload)['field'],\n options?: {validateInputOnChange?: boolean},\n): Pick<CollectionProps<unknown>, 'onReorderItem' | 'onInsertItem' | 'onRemoveItem'> => {\n if (payload.field === field) {\n const {validateInputOnChange = false} = options || {};\n return {\n onReorderItem: (reorderPayload: Record<'from' | 'to', number>) => {\n payload.form.reorderListItem(field, reorderPayload);\n validateInputOnChange && payload.form.validate();\n },\n onRemoveItem: (index: number) => {\n payload.form.removeListItem(field, index);\n validateInputOnChange && payload.form.validate();\n },\n onInsertItem: (valueToInsert: FormArrayElement<FormValues, (typeof payload)['field']>, index: number) => {\n payload.form.insertListItem(field, valueToInsert, index);\n validateInputOnChange && payload.form.validate();\n },\n };\n }\n\n return {};\n};\n"],"names":["enhanceWithCollectionProps","payload","field","options","validateInputOnChange","onReorderItem","reorderPayload","form","reorderListItem","validate","onRemoveItem","index","removeListItem","onInsertItem","valueToInsert","insertListItem"],"mappings":";;;;+BAGaA;;;eAAAA;;;AAAN,IAAMA,6BAA6B,
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Collection/enhanceWithCollectionProps.ts"],"sourcesContent":["import {UseFormInput, type FormArrayElement} from '@mantine/form';\nimport {CollectionProps} from './Collection.js';\n\nexport const enhanceWithCollectionProps = <\n FormValues,\n TransformValues extends (values: FormValues) => unknown = (values: FormValues) => FormValues,\n>(\n payload: Parameters<UseFormInput<FormValues, TransformValues>['enhanceGetInputProps']>[0],\n field: (typeof payload)['field'],\n options?: {validateInputOnChange?: boolean},\n): Pick<CollectionProps<unknown>, 'onReorderItem' | 'onInsertItem' | 'onRemoveItem'> => {\n if (payload.field === field) {\n const {validateInputOnChange = false} = options || {};\n return {\n onReorderItem: (reorderPayload: Record<'from' | 'to', number>) => {\n payload.form.reorderListItem(field, reorderPayload);\n validateInputOnChange && payload.form.validate();\n },\n onRemoveItem: (index: number) => {\n payload.form.removeListItem(field, index);\n validateInputOnChange && payload.form.validate();\n },\n onInsertItem: (valueToInsert: FormArrayElement<FormValues, (typeof payload)['field']>, index: number) => {\n payload.form.insertListItem(field, valueToInsert, index);\n validateInputOnChange && payload.form.validate();\n },\n };\n }\n\n return {};\n};\n"],"names":["enhanceWithCollectionProps","payload","field","options","validateInputOnChange","onReorderItem","reorderPayload","form","reorderListItem","validate","onRemoveItem","index","removeListItem","onInsertItem","valueToInsert","insertListItem"],"mappings":";;;;+BAGaA;;;eAAAA;;;AAAN,IAAMA,6BAA6B,oCAItCC,SACAC,OACAC;IAEA,IAAIF,QAAQC,KAAK,KAAKA,OAAO;QACzB,IAAwCC,OAAAA,WAAW,CAAC,gCAAZA,KAAjCC,uBAAAA,gEAAwB;QAC/B,OAAO;YACHC,eAAe,SAAfA,cAAgBC;gBACZL,QAAQM,IAAI,CAACC,eAAe,CAACN,OAAOI;gBACpCF,yBAAyBH,QAAQM,IAAI,CAACE,QAAQ;YAClD;YACAC,cAAc,SAAdA,aAAeC;gBACXV,QAAQM,IAAI,CAACK,cAAc,CAACV,OAAOS;gBACnCP,yBAAyBH,QAAQM,IAAI,CAACE,QAAQ;YAClD;YACAI,cAAc,SAAdA,aAAeC,eAAwEH;gBACnFV,QAAQM,IAAI,CAACQ,cAAc,CAACb,OAAOY,eAAeH;gBAClDP,yBAAyBH,QAAQM,IAAI,CAACE,QAAQ;YAClD;QACJ;IACJ;IAEA,OAAO,CAAC;AACZ"}
|
|
@@ -11,7 +11,7 @@ Object.defineProperty(exports, "HorizontalLayout", {
|
|
|
11
11
|
var _jsxruntime = require("react/jsx-runtime");
|
|
12
12
|
var _HorizontalLayoutBody = require("./HorizontalLayoutBody.js");
|
|
13
13
|
var _HorizontalLayoutHeader = require("./HorizontalLayoutHeader.js");
|
|
14
|
-
var HorizontalLayout = function(param) {
|
|
14
|
+
var HorizontalLayout = function HorizontalLayout(param) {
|
|
15
15
|
var children = param.children;
|
|
16
16
|
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {
|
|
17
17
|
children: children
|
|
@@ -23,7 +23,7 @@ var _HorizontalLayoutmodulecss = /*#__PURE__*/ _interop_require_default._(requir
|
|
|
23
23
|
var defaultProps = _layoutConstants.LAYOUT_BODY_DEFAULT_PROPS;
|
|
24
24
|
/**
|
|
25
25
|
* Horizontal layout specific content renderer - renders cells in a row
|
|
26
|
-
*/ var renderHorizontalContent = function(item, index, columns, cellContext, layoutClasses) {
|
|
26
|
+
*/ var renderHorizontalContent = function renderHorizontalContent(item, index, columns, cellContext, layoutClasses) {
|
|
27
27
|
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {
|
|
28
28
|
children: columns.map(function(column, colIndex) {
|
|
29
29
|
var _column_id;
|
|
@@ -38,7 +38,7 @@ var defaultProps = _layoutConstants.LAYOUT_BODY_DEFAULT_PROPS;
|
|
|
38
38
|
};
|
|
39
39
|
// Create renderers once - they are stable component references
|
|
40
40
|
var horizontalRenderers = (0, _itemRenderer.createItemRenderers)();
|
|
41
|
-
var HorizontalLayoutBody = function(props) {
|
|
41
|
+
var HorizontalLayoutBody = function HorizontalLayoutBody(props) {
|
|
42
42
|
var collectionCtx = (0, _CollectionContext.useCollectionContext)();
|
|
43
43
|
var _useProps = (0, _core.useProps)('HorizontalLayoutBody', defaultProps, props), items = _useProps.items, onRemove = _useProps.onRemove, removable = _useProps.removable, draggable = _useProps.draggable, disabled = _useProps.disabled, readOnly = _useProps.readOnly, getItemId = _useProps.getItemId, gap = _useProps.gap, ref = _useProps.ref, others = _object_without_properties._(_useProps, [
|
|
44
44
|
"items",
|
package/dist/cjs/components/Collection/layouts/horizontal-layout/HorizontalLayoutBody.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/components/Collection/layouts/horizontal-layout/HorizontalLayoutBody.tsx"],"sourcesContent":["import {Box, Stack, useProps} from '@mantine/core';\nimport {ForwardedRef, useMemo} from 'react';\nimport {useCollectionContext} from '../../CollectionContext.js';\nimport {getColumnSizeStyles} from '../shared/columnUtils.js';\nimport {createItemRenderers, ItemContentRenderer, LayoutClasses, mapItemsToComponents} from '../shared/itemRenderer.js';\nimport {LAYOUT_BODY_DEFAULT_PROPS, LayoutBodyProps} from '../shared/layoutConstants.js';\nimport classes from './HorizontalLayout.module.css';\n\nconst defaultProps: Partial<LayoutBodyProps> = LAYOUT_BODY_DEFAULT_PROPS;\n\n/**\n * Horizontal layout specific content renderer - renders cells in a row\n */\nconst renderHorizontalContent: ItemContentRenderer<unknown> = (\n item,\n index,\n columns,\n cellContext,\n layoutClasses: LayoutClasses,\n) => (\n <>\n {columns.map((column, colIndex) => {\n const columnId = column.id ?? `column-${colIndex}`;\n return (\n <Box key={columnId} className={layoutClasses.cell} style={getColumnSizeStyles(column)}>\n {column.cell(item, index, cellContext)}\n </Box>\n );\n })}\n </>\n);\n\n// Create renderers once - they are stable component references\nconst horizontalRenderers = createItemRenderers<unknown>();\n\nexport const HorizontalLayoutBody = <T,>(props: LayoutBodyProps<T> & {ref?: ForwardedRef<HTMLDivElement>}) => {\n const collectionCtx = useCollectionContext();\n const {items, onRemove, removable, draggable, disabled, readOnly, getItemId, gap, ref, ...others} = useProps(\n 'HorizontalLayoutBody',\n defaultProps as LayoutBodyProps<T>,\n props,\n );\n\n const config = useMemo(\n () => ({\n renderContent: renderHorizontalContent,\n containerSelector: 'row',\n inlineControls: true,\n }),\n [],\n );\n\n const rows = mapItemsToComponents(items, horizontalRenderers, config, classes as LayoutClasses, {\n getItemId,\n onRemove,\n removable,\n draggable,\n disabled,\n readOnly,\n columns: collectionCtx.columns,\n });\n\n return (\n <Stack ref={ref} gap={gap} {...others}>\n {rows}\n </Stack>\n );\n};\n"],"names":["HorizontalLayoutBody","defaultProps","LAYOUT_BODY_DEFAULT_PROPS","renderHorizontalContent","item","index","columns","cellContext","layoutClasses","map","column","colIndex","columnId","id","Box","className","cell","style","getColumnSizeStyles","horizontalRenderers","createItemRenderers","props","collectionCtx","useCollectionContext","useProps","items","onRemove","removable","draggable","disabled","readOnly","getItemId","gap","ref","others","config","useMemo","renderContent","containerSelector","inlineControls","rows","mapItemsToComponents","classes","Stack"],"mappings":";;;;+BAmCaA;;;eAAAA;;;;;;;;oBAnCsB;qBACC;iCACD;2BACD;4BAC0D;+BACnC;kFACrC;AAEpB,IAAMC,eAAyCC,0CAAyB;AAExE;;CAEC,GACD,IAAMC,0BAAwD,
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/components/Collection/layouts/horizontal-layout/HorizontalLayoutBody.tsx"],"sourcesContent":["import {Box, Stack, useProps} from '@mantine/core';\nimport {ForwardedRef, useMemo} from 'react';\nimport {useCollectionContext} from '../../CollectionContext.js';\nimport {getColumnSizeStyles} from '../shared/columnUtils.js';\nimport {createItemRenderers, ItemContentRenderer, LayoutClasses, mapItemsToComponents} from '../shared/itemRenderer.js';\nimport {LAYOUT_BODY_DEFAULT_PROPS, LayoutBodyProps} from '../shared/layoutConstants.js';\nimport classes from './HorizontalLayout.module.css';\n\nconst defaultProps: Partial<LayoutBodyProps> = LAYOUT_BODY_DEFAULT_PROPS;\n\n/**\n * Horizontal layout specific content renderer - renders cells in a row\n */\nconst renderHorizontalContent: ItemContentRenderer<unknown> = (\n item,\n index,\n columns,\n cellContext,\n layoutClasses: LayoutClasses,\n) => (\n <>\n {columns.map((column, colIndex) => {\n const columnId = column.id ?? `column-${colIndex}`;\n return (\n <Box key={columnId} className={layoutClasses.cell} style={getColumnSizeStyles(column)}>\n {column.cell(item, index, cellContext)}\n </Box>\n );\n })}\n </>\n);\n\n// Create renderers once - they are stable component references\nconst horizontalRenderers = createItemRenderers<unknown>();\n\nexport const HorizontalLayoutBody = <T,>(props: LayoutBodyProps<T> & {ref?: ForwardedRef<HTMLDivElement>}) => {\n const collectionCtx = useCollectionContext();\n const {items, onRemove, removable, draggable, disabled, readOnly, getItemId, gap, ref, ...others} = useProps(\n 'HorizontalLayoutBody',\n defaultProps as LayoutBodyProps<T>,\n props,\n );\n\n const config = useMemo(\n () => ({\n renderContent: renderHorizontalContent,\n containerSelector: 'row',\n inlineControls: true,\n }),\n [],\n );\n\n const rows = mapItemsToComponents(items, horizontalRenderers, config, classes as LayoutClasses, {\n getItemId,\n onRemove,\n removable,\n draggable,\n disabled,\n readOnly,\n columns: collectionCtx.columns,\n });\n\n return (\n <Stack ref={ref} gap={gap} {...others}>\n {rows}\n </Stack>\n );\n};\n"],"names":["HorizontalLayoutBody","defaultProps","LAYOUT_BODY_DEFAULT_PROPS","renderHorizontalContent","item","index","columns","cellContext","layoutClasses","map","column","colIndex","columnId","id","Box","className","cell","style","getColumnSizeStyles","horizontalRenderers","createItemRenderers","props","collectionCtx","useCollectionContext","useProps","items","onRemove","removable","draggable","disabled","readOnly","getItemId","gap","ref","others","config","useMemo","renderContent","containerSelector","inlineControls","rows","mapItemsToComponents","classes","Stack"],"mappings":";;;;+BAmCaA;;;eAAAA;;;;;;;;oBAnCsB;qBACC;iCACD;2BACD;4BAC0D;+BACnC;kFACrC;AAEpB,IAAMC,eAAyCC,0CAAyB;AAExE;;CAEC,GACD,IAAMC,0BAAwD,iCAC1DC,MACAC,OACAC,SACAC,aACAC;yBAEA;kBACKF,QAAQG,GAAG,CAAC,SAACC,QAAQC;gBACDD;YAAjB,IAAME,YAAWF,aAAAA,OAAOG,EAAE,cAATH,wBAAAA,aAAa,AAAC,UAAkB,OAATC;YACxC,qBACI,qBAACG,SAAG;gBAAgBC,WAAWP,cAAcQ,IAAI;gBAAEC,OAAOC,IAAAA,gCAAmB,EAACR;0BACzEA,OAAOM,IAAI,CAACZ,MAAMC,OAAOE;eADpBK;QAIlB;;;AAIR,+DAA+D;AAC/D,IAAMO,sBAAsBC,IAAAA,iCAAmB;AAExC,IAAMpB,uBAAuB,8BAAKqB;IACrC,IAAMC,gBAAgBC,IAAAA,uCAAoB;IAC1C,IAAoGC,YAAAA,IAAAA,cAAQ,EACxG,wBACAvB,cACAoB,QAHGI,QAA6FD,UAA7FC,OAAOC,WAAsFF,UAAtFE,UAAUC,YAA4EH,UAA5EG,WAAWC,YAAiEJ,UAAjEI,WAAWC,WAAsDL,UAAtDK,UAAUC,WAA4CN,UAA5CM,UAAUC,YAAkCP,UAAlCO,WAAWC,MAAuBR,UAAvBQ,KAAKC,MAAkBT,UAAlBS,KAAQC,sCAAUV;;;;;;;;;;;IAMpG,IAAMW,SAASC,IAAAA,cAAO,EAClB;eAAO;YACHC,eAAelC;YACfmC,mBAAmB;YACnBC,gBAAgB;QACpB;OACA,EAAE;IAGN,IAAMC,OAAOC,IAAAA,kCAAoB,EAAChB,OAAON,qBAAqBgB,QAAQO,kCAAO,EAAmB;QAC5FX,WAAAA;QACAL,UAAAA;QACAC,WAAAA;QACAC,WAAAA;QACAC,UAAAA;QACAC,UAAAA;QACAxB,SAASgB,cAAchB,OAAO;IAClC;IAEA,qBACI,qBAACqC,WAAK;QAACV,KAAKA;QAAKD,KAAKA;OAASE;kBAC1BM;;AAGb"}
|
|
@@ -20,7 +20,7 @@ var _headerUtils = require("../shared/headerUtils.js");
|
|
|
20
20
|
var _layoutConstants = require("../shared/layoutConstants.js");
|
|
21
21
|
var _HorizontalLayoutmodulecss = /*#__PURE__*/ _interop_require_default._(require("./HorizontalLayout.module.css"));
|
|
22
22
|
var defaultProps = _layoutConstants.LAYOUT_HEADER_DEFAULT_PROPS;
|
|
23
|
-
var HorizontalLayoutHeader = function(props) {
|
|
23
|
+
var HorizontalLayoutHeader = function HorizontalLayoutHeader(props) {
|
|
24
24
|
var collectionCtx = (0, _CollectionContext.useCollectionContext)();
|
|
25
25
|
var _useProps = (0, _core.useProps)('HorizontalLayoutHeader', defaultProps, props), draggable = _useProps.draggable, removable = _useProps.removable, style = _useProps.style, ref = _useProps.ref, others = _object_without_properties._(_useProps, [
|
|
26
26
|
"draggable",
|
package/dist/cjs/components/Collection/layouts/horizontal-layout/HorizontalLayoutHeader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/components/Collection/layouts/horizontal-layout/HorizontalLayoutHeader.tsx"],"sourcesContent":["import {Box, useProps} from '@mantine/core';\nimport {ForwardedRef} from 'react';\nimport {useCollectionContext} from '../../CollectionContext.js';\nimport {getColumnSizeStyles} from '../shared/columnUtils.js';\nimport {renderColumnHeader} from '../shared/headerUtils.js';\nimport {LAYOUT_HEADER_DEFAULT_PROPS, LayoutHeaderProps} from '../shared/layoutConstants.js';\nimport classes from './HorizontalLayout.module.css';\n\nconst defaultProps: Partial<LayoutHeaderProps> = LAYOUT_HEADER_DEFAULT_PROPS;\n\nexport const HorizontalLayoutHeader = (props: LayoutHeaderProps & {ref?: ForwardedRef<HTMLDivElement>}) => {\n const collectionCtx = useCollectionContext();\n const {draggable, removable, style, ref, ...others} = useProps(\n 'HorizontalLayoutHeader',\n defaultProps as LayoutHeaderProps,\n props,\n );\n\n return (\n <Box ref={ref} className={classes.headerRow} style={style} {...others}>\n {draggable && <div className={classes.dragHandleHeader} />}\n {collectionCtx.columns.map((column, index) => {\n const columnId = column.id ?? `column-${index}`;\n return (\n <Box key={columnId} className={classes.headerCell} style={getColumnSizeStyles(column)}>\n {renderColumnHeader(column.header, index)}\n </Box>\n );\n })}\n {removable && <div className={classes.removeButtonHeader} />}\n </Box>\n );\n};\n"],"names":["HorizontalLayoutHeader","defaultProps","LAYOUT_HEADER_DEFAULT_PROPS","props","collectionCtx","useCollectionContext","useProps","draggable","removable","style","ref","others","Box","className","classes","headerRow","div","dragHandleHeader","columns","map","column","index","columnId","id","headerCell","getColumnSizeStyles","renderColumnHeader","header","removeButtonHeader"],"mappings":";;;;+BAUaA;;;eAAAA;;;;;;;;oBAVe;iCAEO;2BACD;2BACD;+BAC4B;kFACzC;AAEpB,IAAMC,eAA2CC,4CAA2B;AAErE,IAAMF,yBAAyB,
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/components/Collection/layouts/horizontal-layout/HorizontalLayoutHeader.tsx"],"sourcesContent":["import {Box, useProps} from '@mantine/core';\nimport {ForwardedRef} from 'react';\nimport {useCollectionContext} from '../../CollectionContext.js';\nimport {getColumnSizeStyles} from '../shared/columnUtils.js';\nimport {renderColumnHeader} from '../shared/headerUtils.js';\nimport {LAYOUT_HEADER_DEFAULT_PROPS, LayoutHeaderProps} from '../shared/layoutConstants.js';\nimport classes from './HorizontalLayout.module.css';\n\nconst defaultProps: Partial<LayoutHeaderProps> = LAYOUT_HEADER_DEFAULT_PROPS;\n\nexport const HorizontalLayoutHeader = (props: LayoutHeaderProps & {ref?: ForwardedRef<HTMLDivElement>}) => {\n const collectionCtx = useCollectionContext();\n const {draggable, removable, style, ref, ...others} = useProps(\n 'HorizontalLayoutHeader',\n defaultProps as LayoutHeaderProps,\n props,\n );\n\n return (\n <Box ref={ref} className={classes.headerRow} style={style} {...others}>\n {draggable && <div className={classes.dragHandleHeader} />}\n {collectionCtx.columns.map((column, index) => {\n const columnId = column.id ?? `column-${index}`;\n return (\n <Box key={columnId} className={classes.headerCell} style={getColumnSizeStyles(column)}>\n {renderColumnHeader(column.header, index)}\n </Box>\n );\n })}\n {removable && <div className={classes.removeButtonHeader} />}\n </Box>\n );\n};\n"],"names":["HorizontalLayoutHeader","defaultProps","LAYOUT_HEADER_DEFAULT_PROPS","props","collectionCtx","useCollectionContext","useProps","draggable","removable","style","ref","others","Box","className","classes","headerRow","div","dragHandleHeader","columns","map","column","index","columnId","id","headerCell","getColumnSizeStyles","renderColumnHeader","header","removeButtonHeader"],"mappings":";;;;+BAUaA;;;eAAAA;;;;;;;;oBAVe;iCAEO;2BACD;2BACD;+BAC4B;kFACzC;AAEpB,IAAMC,eAA2CC,4CAA2B;AAErE,IAAMF,yBAAyB,gCAACG;IACnC,IAAMC,gBAAgBC,IAAAA,uCAAoB;IAC1C,IAAsDC,YAAAA,IAAAA,cAAQ,EAC1D,0BACAL,cACAE,QAHGI,YAA+CD,UAA/CC,WAAWC,YAAoCF,UAApCE,WAAWC,QAAyBH,UAAzBG,OAAOC,MAAkBJ,UAAlBI,KAAQC,sCAAUL;;;;;;IAMtD,qBACI,sBAACM,SAAG;QAACF,KAAKA;QAAKG,WAAWC,kCAAO,CAACC,SAAS;QAAEN,OAAOA;OAAWE;;YAC1DJ,2BAAa,qBAACS;gBAAIH,WAAWC,kCAAO,CAACG,gBAAgB;;YACrDb,cAAcc,OAAO,CAACC,GAAG,CAAC,SAACC,QAAQC;oBACfD;gBAAjB,IAAME,YAAWF,aAAAA,OAAOG,EAAE,cAATH,wBAAAA,aAAa,AAAC,UAAe,OAANC;gBACxC,qBACI,qBAACT,SAAG;oBAAgBC,WAAWC,kCAAO,CAACU,UAAU;oBAAEf,OAAOgB,IAAAA,gCAAmB,EAACL;8BACzEM,IAAAA,+BAAkB,EAACN,OAAOO,MAAM,EAAEN;mBAD7BC;YAIlB;YACCd,2BAAa,qBAACQ;gBAAIH,WAAWC,kCAAO,CAACc,kBAAkB;;;;AAGpE"}
|
|
@@ -13,7 +13,7 @@ var _object_spread_props = require("@swc/helpers/_/_object_spread_props");
|
|
|
13
13
|
var _jsxruntime = require("react/jsx-runtime");
|
|
14
14
|
var _plasmareacticons = require("@coveord/plasma-react-icons");
|
|
15
15
|
var _CollectionContext = require("../../CollectionContext.js");
|
|
16
|
-
var DragHandle = function(param) {
|
|
16
|
+
var DragHandle = function DragHandle(param) {
|
|
17
17
|
var setActivatorNodeRef = param.setActivatorNodeRef, listeners = param.listeners, attributes = param.attributes;
|
|
18
18
|
var getStyles = (0, _CollectionContext.useCollectionContext)().getStyles;
|
|
19
19
|
return /*#__PURE__*/ (0, _jsxruntime.jsx)("div", _object_spread_props._(_object_spread._({
|
|
@@ -15,7 +15,7 @@ var _plasmareacticons = require("@coveord/plasma-react-icons");
|
|
|
15
15
|
var _core = require("@mantine/core");
|
|
16
16
|
var _ActionIcon = require("../../../ActionIcon/ActionIcon.js");
|
|
17
17
|
var _CollectionContext = require("../../CollectionContext.js");
|
|
18
|
-
var RemoveButton = function(param) {
|
|
18
|
+
var RemoveButton = function RemoveButton(param) {
|
|
19
19
|
var removable = param.removable, onRemove = param.onRemove;
|
|
20
20
|
var getStyles = (0, _CollectionContext.useCollectionContext)().getStyles;
|
|
21
21
|
if (!removable || !onRemove) {
|
|
@@ -8,8 +8,8 @@ Object.defineProperty(exports, "getColumnSizeStyles", {
|
|
|
8
8
|
return getColumnSizeStyles;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var getColumnSizeStyles = function(column) {
|
|
12
|
-
var sizeToStyle = function(size) {
|
|
11
|
+
var getColumnSizeStyles = function getColumnSizeStyles(column) {
|
|
12
|
+
var sizeToStyle = function sizeToStyle(size) {
|
|
13
13
|
if (size === undefined) {
|
|
14
14
|
return undefined;
|
|
15
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/components/Collection/layouts/shared/columnUtils.ts"],"sourcesContent":["import {CSSProperties} from 'react';\nimport {CollectionColumnDef} from '../../CollectionColumn.types.js';\n\n/**\n * Converts column size configuration to CSS styles.\n * Handles both numeric (px) and string (%, fr, etc.) size values.\n */\nexport const getColumnSizeStyles = (column: CollectionColumnDef<any>): CSSProperties => {\n const sizeToStyle = (size: number | string | undefined): string | undefined => {\n if (size === undefined) {\n return undefined;\n }\n return typeof size === 'number' ? `${size}px` : size;\n };\n\n return {\n minWidth: sizeToStyle(column.minSize),\n maxWidth: sizeToStyle(column.maxSize),\n };\n};\n"],"names":["getColumnSizeStyles","column","sizeToStyle","size","undefined","minWidth","minSize","maxWidth","maxSize"],"mappings":";;;;+BAOaA;;;eAAAA;;;AAAN,IAAMA,sBAAsB,
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/components/Collection/layouts/shared/columnUtils.ts"],"sourcesContent":["import {CSSProperties} from 'react';\nimport {CollectionColumnDef} from '../../CollectionColumn.types.js';\n\n/**\n * Converts column size configuration to CSS styles.\n * Handles both numeric (px) and string (%, fr, etc.) size values.\n */\nexport const getColumnSizeStyles = (column: CollectionColumnDef<any>): CSSProperties => {\n const sizeToStyle = (size: number | string | undefined): string | undefined => {\n if (size === undefined) {\n return undefined;\n }\n return typeof size === 'number' ? `${size}px` : size;\n };\n\n return {\n minWidth: sizeToStyle(column.minSize),\n maxWidth: sizeToStyle(column.maxSize),\n };\n};\n"],"names":["getColumnSizeStyles","column","sizeToStyle","size","undefined","minWidth","minSize","maxWidth","maxSize"],"mappings":";;;;+BAOaA;;;eAAAA;;;AAAN,IAAMA,sBAAsB,6BAACC;IAChC,IAAMC,cAAc,qBAACC;QACjB,IAAIA,SAASC,WAAW;YACpB,OAAOA;QACX;QACA,OAAO,OAAOD,SAAS,WAAW,AAAC,GAAO,OAALA,MAAK,QAAMA;IACpD;IAEA,OAAO;QACHE,UAAUH,YAAYD,OAAOK,OAAO;QACpCC,UAAUL,YAAYD,OAAOO,OAAO;IACxC;AACJ"}
|
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "renderColumnHeader", {
|
|
|
8
8
|
return renderColumnHeader;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var renderColumnHeader = function(header, index) {
|
|
11
|
+
var renderColumnHeader = function renderColumnHeader(header, index) {
|
|
12
12
|
if (typeof header === 'function') {
|
|
13
13
|
var context = {
|
|
14
14
|
index: index
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/components/Collection/layouts/shared/headerUtils.ts"],"sourcesContent":["import {ReactNode} from 'react';\nimport {CollectionColumnDef, CollectionHeaderContext} from '../../CollectionColumn.types.js';\n\n/**\n * Renders a column header by invoking the header function with context if needed.\n * Handles both static headers (strings/nodes) and dynamic header functions.\n */\nexport const renderColumnHeader = (header: CollectionColumnDef<unknown>['header'], index: number): ReactNode => {\n if (typeof header === 'function') {\n const context: CollectionHeaderContext = {index};\n return header(context);\n }\n return header;\n};\n"],"names":["renderColumnHeader","header","index","context"],"mappings":";;;;+BAOaA;;;eAAAA;;;AAAN,IAAMA,qBAAqB,
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/components/Collection/layouts/shared/headerUtils.ts"],"sourcesContent":["import {ReactNode} from 'react';\nimport {CollectionColumnDef, CollectionHeaderContext} from '../../CollectionColumn.types.js';\n\n/**\n * Renders a column header by invoking the header function with context if needed.\n * Handles both static headers (strings/nodes) and dynamic header functions.\n */\nexport const renderColumnHeader = (header: CollectionColumnDef<unknown>['header'], index: number): ReactNode => {\n if (typeof header === 'function') {\n const context: CollectionHeaderContext = {index};\n return header(context);\n }\n return header;\n};\n"],"names":["renderColumnHeader","header","index","context"],"mappings":";;;;+BAOaA;;;eAAAA;;;AAAN,IAAMA,qBAAqB,4BAACC,QAAgDC;IAC/E,IAAI,OAAOD,WAAW,YAAY;QAC9B,IAAME,UAAmC;YAACD,OAAAA;QAAK;QAC/C,OAAOD,OAAOE;IAClB;IACA,OAAOF;AACX"}
|