@pallasoft/ps-input-components 3.3.0 → 3.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ps-grouped-switcher.js +8 -3
- package/dist/components/ps-portable-text-editor.d.ts +2 -1
- package/dist/components/ps-portable-text-editor.js +1 -1
- package/dist/constants/ps-portable-text-editor-config.d.ts +5 -3
- package/dist/constants/ps-portable-text-editor-config.js +5 -3
- package/dist/esm/components/ps-grouped-switcher.js +8 -3
- package/dist/esm/components/ps-portable-text-editor.js +1 -1
- package/dist/esm/constants/ps-portable-text-editor-config.js +5 -3
- package/package.json +1 -1
|
@@ -32,15 +32,20 @@ const PsGroupedSwitcher = ({ allOption, ariaLabel, className, emptyText, getItem
|
|
|
32
32
|
setIsOpen(false);
|
|
33
33
|
setQuery('');
|
|
34
34
|
};
|
|
35
|
-
const
|
|
36
|
-
const
|
|
35
|
+
const onSelectionChange = (selection) => {
|
|
36
|
+
const ids = selection === 'all' ? [] : Array.from(selection);
|
|
37
|
+
if (ids.length === 0) {
|
|
38
|
+
choose(selectedKey);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const text = String(ids[0]);
|
|
37
42
|
choose(text === ps_grouped_switcher_config_1.PsGroupedSwitcherConfig.allKey ? '' : ps_grouped_switcher_service_1.PsGroupedSwitcherService.itemKey(text));
|
|
38
43
|
};
|
|
39
44
|
return ((0, jsx_runtime_1.jsxs)(react_aria_components_1.DialogTrigger, { isOpen: isOpen, onOpenChange: (next) => {
|
|
40
45
|
setIsOpen(next);
|
|
41
46
|
if (!next)
|
|
42
47
|
setQuery('');
|
|
43
|
-
}, children: [(0, jsx_runtime_1.jsxs)(react_aria_components_1.Button, { "aria-label": ariaLabel, className: ps_design_system_1.PallasoftClassNameService.merge('ps-input-control ps-focus-ring relative flex w-full min-w-0 items-center pr-10 text-left text-sm font-semibold', className), children: [(0, jsx_runtime_1.jsx)("span", { className: 'min-w-0 flex-1', children: renderSelected(isAllSelected ? null : selected) }), (0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { "aria-hidden": 'true', className: 'pointer-events-none absolute right-3 top-1/2 h-4 w-4 -translate-y-1/2 text-primary', iconKey: ps_icons_1.PsIconKey.Chevron })] }), (0, jsx_runtime_1.jsx)(react_aria_components_1.Popover, { className: 'ps-floating-panel w-[max(var(--trigger-width),min(32rem,calc(100vw-2rem)))] min-w-[var(--trigger-width)] overflow-hidden p-0 outline-none', offset: 6, placement: 'bottom start', style: { zIndex }, children: (0, jsx_runtime_1.jsx)(react_aria_components_1.Dialog, { "aria-label": ariaLabel, className: 'flex max-h-[min(34rem,75vh)] flex-col outline-none', children: (0, jsx_runtime_1.jsxs)(react_aria_components_1.Autocomplete, { filter: () => true, inputValue: query, onInputChange: setQuery, children: [(0, jsx_runtime_1.jsxs)(react_aria_components_1.SearchField, { "aria-label": searchPlaceholder, autoFocus: true, className: 'relative block border-b border-line p-2', children: [(0, jsx_runtime_1.jsx)(react_aria_components_1.Input, { className: 'ps-input-control ps-focus-ring w-full pl-10 text-sm font-semibold', placeholder: searchPlaceholder }), (0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { "aria-hidden": 'true', className: 'pointer-events-none absolute left-5 top-1/2 h-4 w-4 -translate-y-1/2 text-ink/45', iconKey: ps_icons_1.PsIconKey.Search })] }), (0, jsx_runtime_1.jsxs)(react_aria_components_1.ListBox, { "aria-label": ariaLabel, className: 'ps-scrollbar-hidden min-h-0 flex-1 overflow-y-auto p-1.5 outline-none',
|
|
48
|
+
}, children: [(0, jsx_runtime_1.jsxs)(react_aria_components_1.Button, { "aria-label": ariaLabel, className: ps_design_system_1.PallasoftClassNameService.merge('ps-input-control ps-focus-ring relative flex w-full min-w-0 items-center pr-10 text-left text-sm font-semibold', className), children: [(0, jsx_runtime_1.jsx)("span", { className: 'min-w-0 flex-1', children: renderSelected(isAllSelected ? null : selected) }), (0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { "aria-hidden": 'true', className: 'pointer-events-none absolute right-3 top-1/2 h-4 w-4 -translate-y-1/2 text-primary', iconKey: ps_icons_1.PsIconKey.Chevron })] }), (0, jsx_runtime_1.jsx)(react_aria_components_1.Popover, { className: 'ps-floating-panel w-[max(var(--trigger-width),min(32rem,calc(100vw-2rem)))] min-w-[var(--trigger-width)] overflow-hidden p-0 outline-none', offset: 6, placement: 'bottom start', style: { zIndex }, children: (0, jsx_runtime_1.jsx)(react_aria_components_1.Dialog, { "aria-label": ariaLabel, className: 'flex max-h-[min(34rem,75vh)] flex-col outline-none', children: (0, jsx_runtime_1.jsxs)(react_aria_components_1.Autocomplete, { filter: () => true, inputValue: query, onInputChange: setQuery, children: [(0, jsx_runtime_1.jsxs)(react_aria_components_1.SearchField, { "aria-label": searchPlaceholder, autoFocus: true, className: 'relative block border-b border-line p-2', children: [(0, jsx_runtime_1.jsx)(react_aria_components_1.Input, { className: 'ps-input-control ps-focus-ring w-full pl-10 text-sm font-semibold', placeholder: searchPlaceholder }), (0, jsx_runtime_1.jsx)(ps_icons_1.PsIcon, { "aria-hidden": 'true', className: 'pointer-events-none absolute left-5 top-1/2 h-4 w-4 -translate-y-1/2 text-ink/45', iconKey: ps_icons_1.PsIconKey.Search })] }), (0, jsx_runtime_1.jsxs)(react_aria_components_1.ListBox, { "aria-label": ariaLabel, className: 'ps-scrollbar-hidden min-h-0 flex-1 overflow-y-auto p-1.5 outline-none', onSelectionChange: onSelectionChange, renderEmptyState: () => ((0, jsx_runtime_1.jsx)("div", { className: 'px-3 py-6 text-center text-sm text-ink/55', children: emptyText })), selectedKeys: [
|
|
44
49
|
isAllSelected
|
|
45
50
|
? ps_grouped_switcher_config_1.PsGroupedSwitcherConfig.allKey
|
|
46
51
|
: ps_grouped_switcher_service_1.PsGroupedSwitcherService.selectedOptionId(sections, selectedKey, getItemKey),
|
|
@@ -3,10 +3,11 @@ import type { PsPortableTextEditorLabels } from '../portable-text-core/interface
|
|
|
3
3
|
export interface PsPortableTextEditorProps {
|
|
4
4
|
className?: string;
|
|
5
5
|
disabled?: boolean;
|
|
6
|
+
invalid?: boolean;
|
|
6
7
|
labels?: PsPortableTextEditorLabels;
|
|
7
8
|
minRows?: number;
|
|
8
9
|
onChange: (value: PortableTextBlock[]) => void;
|
|
9
10
|
placeholder?: string;
|
|
10
11
|
value: PortableTextBlock[];
|
|
11
12
|
}
|
|
12
|
-
export declare const PsPortableTextEditor: ({ className, disabled, labels, minRows, onChange, placeholder, value, }: PsPortableTextEditorProps) => import("react").JSX.Element;
|
|
13
|
+
export declare const PsPortableTextEditor: ({ className, disabled, invalid, labels, minRows, onChange, placeholder, value, }: PsPortableTextEditorProps) => import("react").JSX.Element;
|
|
@@ -8,5 +8,5 @@ const ps_portable_text_core_1 = require("../portable-text-core/components/ps-por
|
|
|
8
8
|
const ps_portable_text_core_config_1 = require("../portable-text-core/constants/ps-portable-text-core-config");
|
|
9
9
|
const ps_portable_text_editor_service_1 = require("../portable-text-core/services/ps-portable-text-editor-service");
|
|
10
10
|
const ps_portable_text_toolbar_1 = require("./ps-portable-text-toolbar");
|
|
11
|
-
const PsPortableTextEditor = ({ className, disabled = false, labels = ps_portable_text_core_config_1.PsPortableTextCoreConfig.labels, minRows = 4, onChange, placeholder, value, }) => ((0, jsx_runtime_1.jsx)(ps_portable_text_core_1.PsPortableTextCore, { className: ps_design_system_1.PallasoftClassNameService.merge(ps_portable_text_editor_config_1.PsPortableTextEditorConfig.classNames.root, className), classNames: ps_portable_text_editor_config_1.PsPortableTextEditorConfig.contentClassNames, disabled: disabled, editableClassName: ps_portable_text_editor_config_1.PsPortableTextEditorConfig.classNames.editable, fallback: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { "aria-hidden": 'true', className: ps_portable_text_editor_config_1.PsPortableTextEditorConfig.classNames.toolbar, children: (0, jsx_runtime_1.jsx)("span", { className: 'h-9' }) }), (0, jsx_runtime_1.jsx)("div", { "aria-hidden": 'true', className: ps_portable_text_editor_config_1.PsPortableTextEditorConfig.classNames.editable, style: { minHeight: ps_portable_text_editor_service_1.PsPortableTextEditorService.minHeight(minRows) } })] }), label: labels.editor, minRows: minRows, onChange: onChange, placeholder: placeholder, toolbar: (0, jsx_runtime_1.jsx)(ps_portable_text_toolbar_1.PsPortableTextToolbar, { disabled: disabled, labels: labels }), value: value }));
|
|
11
|
+
const PsPortableTextEditor = ({ className, disabled = false, invalid = false, labels = ps_portable_text_core_config_1.PsPortableTextCoreConfig.labels, minRows = 4, onChange, placeholder, value, }) => ((0, jsx_runtime_1.jsx)(ps_portable_text_core_1.PsPortableTextCore, { className: ps_design_system_1.PallasoftClassNameService.merge(ps_portable_text_editor_config_1.PsPortableTextEditorConfig.classNames.root, invalid && ps_portable_text_editor_config_1.PsPortableTextEditorConfig.classNames.invalid, disabled && ps_portable_text_editor_config_1.PsPortableTextEditorConfig.classNames.disabled, className), classNames: ps_portable_text_editor_config_1.PsPortableTextEditorConfig.contentClassNames, disabled: disabled, editableClassName: ps_portable_text_editor_config_1.PsPortableTextEditorConfig.classNames.editable, fallback: (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { "aria-hidden": 'true', className: ps_portable_text_editor_config_1.PsPortableTextEditorConfig.classNames.toolbar, children: (0, jsx_runtime_1.jsx)("span", { className: 'h-9' }) }), (0, jsx_runtime_1.jsx)("div", { "aria-hidden": 'true', className: ps_portable_text_editor_config_1.PsPortableTextEditorConfig.classNames.editable, style: { minHeight: ps_portable_text_editor_service_1.PsPortableTextEditorService.minHeight(minRows) } })] }), label: labels.editor, minRows: minRows, onChange: onChange, placeholder: placeholder, toolbar: (0, jsx_runtime_1.jsx)(ps_portable_text_toolbar_1.PsPortableTextToolbar, { disabled: disabled, labels: labels }), value: value }));
|
|
12
12
|
exports.PsPortableTextEditor = PsPortableTextEditor;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export declare const PsPortableTextEditorConfig: {
|
|
2
2
|
readonly classNames: {
|
|
3
|
-
readonly editable: "
|
|
4
|
-
readonly
|
|
5
|
-
readonly
|
|
3
|
+
readonly editable: "w-full resize-none overflow-y-auto border-0 bg-transparent px-3 py-2 leading-6 text-ink shadow-none outline-none focus:outline-none focus-visible:outline-none";
|
|
4
|
+
readonly disabled: "cursor-not-allowed opacity-50";
|
|
5
|
+
readonly invalid: "border-danger";
|
|
6
|
+
readonly root: "block overflow-hidden rounded-ps-control border border-line bg-white has-[:focus-visible]:outline has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary dark:bg-transparent";
|
|
7
|
+
readonly toolbar: "flex flex-wrap items-center gap-1 border-b border-line p-1";
|
|
6
8
|
readonly button: "ps-focus-ring ps-control-compact inline-flex min-w-ps-control-compact items-center justify-center rounded-ps-control px-2 text-sm text-ink/70 transition-colors hover:bg-ink/5 hover:text-ink disabled:cursor-not-allowed disabled:opacity-40";
|
|
7
9
|
readonly buttonActive: "bg-primary text-white hover:bg-primary hover:text-white";
|
|
8
10
|
readonly separator: "mx-1 h-5 w-px bg-line";
|
|
@@ -3,9 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PsPortableTextEditorConfig = void 0;
|
|
4
4
|
exports.PsPortableTextEditorConfig = {
|
|
5
5
|
classNames: {
|
|
6
|
-
editable: '
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
editable: 'w-full resize-none overflow-y-auto border-0 bg-transparent px-3 py-2 leading-6 text-ink shadow-none outline-none focus:outline-none focus-visible:outline-none',
|
|
7
|
+
disabled: 'cursor-not-allowed opacity-50',
|
|
8
|
+
invalid: 'border-danger',
|
|
9
|
+
root: 'block overflow-hidden rounded-ps-control border border-line bg-white has-[:focus-visible]:outline has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary dark:bg-transparent',
|
|
10
|
+
toolbar: 'flex flex-wrap items-center gap-1 border-b border-line p-1',
|
|
9
11
|
button: 'ps-focus-ring ps-control-compact inline-flex min-w-ps-control-compact items-center justify-center rounded-ps-control px-2 text-sm text-ink/70 transition-colors hover:bg-ink/5 hover:text-ink disabled:cursor-not-allowed disabled:opacity-40',
|
|
10
12
|
buttonActive: 'bg-primary text-white hover:bg-primary hover:text-white',
|
|
11
13
|
separator: 'mx-1 h-5 w-px bg-line',
|
|
@@ -29,15 +29,20 @@ export const PsGroupedSwitcher = ({ allOption, ariaLabel, className, emptyText,
|
|
|
29
29
|
setIsOpen(false);
|
|
30
30
|
setQuery('');
|
|
31
31
|
};
|
|
32
|
-
const
|
|
33
|
-
const
|
|
32
|
+
const onSelectionChange = (selection) => {
|
|
33
|
+
const ids = selection === 'all' ? [] : Array.from(selection);
|
|
34
|
+
if (ids.length === 0) {
|
|
35
|
+
choose(selectedKey);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const text = String(ids[0]);
|
|
34
39
|
choose(text === PsGroupedSwitcherConfig.allKey ? '' : PsGroupedSwitcherService.itemKey(text));
|
|
35
40
|
};
|
|
36
41
|
return (_jsxs(DialogTrigger, { isOpen: isOpen, onOpenChange: (next) => {
|
|
37
42
|
setIsOpen(next);
|
|
38
43
|
if (!next)
|
|
39
44
|
setQuery('');
|
|
40
|
-
}, children: [_jsxs(Button, { "aria-label": ariaLabel, className: PallasoftClassNameService.merge('ps-input-control ps-focus-ring relative flex w-full min-w-0 items-center pr-10 text-left text-sm font-semibold', className), children: [_jsx("span", { className: 'min-w-0 flex-1', children: renderSelected(isAllSelected ? null : selected) }), _jsx(PsIcon, { "aria-hidden": 'true', className: 'pointer-events-none absolute right-3 top-1/2 h-4 w-4 -translate-y-1/2 text-primary', iconKey: PsIconKey.Chevron })] }), _jsx(Popover, { className: 'ps-floating-panel w-[max(var(--trigger-width),min(32rem,calc(100vw-2rem)))] min-w-[var(--trigger-width)] overflow-hidden p-0 outline-none', offset: 6, placement: 'bottom start', style: { zIndex }, children: _jsx(Dialog, { "aria-label": ariaLabel, className: 'flex max-h-[min(34rem,75vh)] flex-col outline-none', children: _jsxs(Autocomplete, { filter: () => true, inputValue: query, onInputChange: setQuery, children: [_jsxs(SearchField, { "aria-label": searchPlaceholder, autoFocus: true, className: 'relative block border-b border-line p-2', children: [_jsx(Input, { className: 'ps-input-control ps-focus-ring w-full pl-10 text-sm font-semibold', placeholder: searchPlaceholder }), _jsx(PsIcon, { "aria-hidden": 'true', className: 'pointer-events-none absolute left-5 top-1/2 h-4 w-4 -translate-y-1/2 text-ink/45', iconKey: PsIconKey.Search })] }), _jsxs(ListBox, { "aria-label": ariaLabel, className: 'ps-scrollbar-hidden min-h-0 flex-1 overflow-y-auto p-1.5 outline-none',
|
|
45
|
+
}, children: [_jsxs(Button, { "aria-label": ariaLabel, className: PallasoftClassNameService.merge('ps-input-control ps-focus-ring relative flex w-full min-w-0 items-center pr-10 text-left text-sm font-semibold', className), children: [_jsx("span", { className: 'min-w-0 flex-1', children: renderSelected(isAllSelected ? null : selected) }), _jsx(PsIcon, { "aria-hidden": 'true', className: 'pointer-events-none absolute right-3 top-1/2 h-4 w-4 -translate-y-1/2 text-primary', iconKey: PsIconKey.Chevron })] }), _jsx(Popover, { className: 'ps-floating-panel w-[max(var(--trigger-width),min(32rem,calc(100vw-2rem)))] min-w-[var(--trigger-width)] overflow-hidden p-0 outline-none', offset: 6, placement: 'bottom start', style: { zIndex }, children: _jsx(Dialog, { "aria-label": ariaLabel, className: 'flex max-h-[min(34rem,75vh)] flex-col outline-none', children: _jsxs(Autocomplete, { filter: () => true, inputValue: query, onInputChange: setQuery, children: [_jsxs(SearchField, { "aria-label": searchPlaceholder, autoFocus: true, className: 'relative block border-b border-line p-2', children: [_jsx(Input, { className: 'ps-input-control ps-focus-ring w-full pl-10 text-sm font-semibold', placeholder: searchPlaceholder }), _jsx(PsIcon, { "aria-hidden": 'true', className: 'pointer-events-none absolute left-5 top-1/2 h-4 w-4 -translate-y-1/2 text-ink/45', iconKey: PsIconKey.Search })] }), _jsxs(ListBox, { "aria-label": ariaLabel, className: 'ps-scrollbar-hidden min-h-0 flex-1 overflow-y-auto p-1.5 outline-none', onSelectionChange: onSelectionChange, renderEmptyState: () => (_jsx("div", { className: 'px-3 py-6 text-center text-sm text-ink/55', children: emptyText })), selectedKeys: [
|
|
41
46
|
isAllSelected
|
|
42
47
|
? PsGroupedSwitcherConfig.allKey
|
|
43
48
|
: PsGroupedSwitcherService.selectedOptionId(sections, selectedKey, getItemKey),
|
|
@@ -5,4 +5,4 @@ import { PsPortableTextCore } from '../portable-text-core/components/ps-portable
|
|
|
5
5
|
import { PsPortableTextCoreConfig } from '../portable-text-core/constants/ps-portable-text-core-config';
|
|
6
6
|
import { PsPortableTextEditorService } from '../portable-text-core/services/ps-portable-text-editor-service';
|
|
7
7
|
import { PsPortableTextToolbar } from './ps-portable-text-toolbar';
|
|
8
|
-
export const PsPortableTextEditor = ({ className, disabled = false, labels = PsPortableTextCoreConfig.labels, minRows = 4, onChange, placeholder, value, }) => (_jsx(PsPortableTextCore, { className: PallasoftClassNameService.merge(PsPortableTextEditorConfig.classNames.root, className), classNames: PsPortableTextEditorConfig.contentClassNames, disabled: disabled, editableClassName: PsPortableTextEditorConfig.classNames.editable, fallback: _jsxs(_Fragment, { children: [_jsx("div", { "aria-hidden": 'true', className: PsPortableTextEditorConfig.classNames.toolbar, children: _jsx("span", { className: 'h-9' }) }), _jsx("div", { "aria-hidden": 'true', className: PsPortableTextEditorConfig.classNames.editable, style: { minHeight: PsPortableTextEditorService.minHeight(minRows) } })] }), label: labels.editor, minRows: minRows, onChange: onChange, placeholder: placeholder, toolbar: _jsx(PsPortableTextToolbar, { disabled: disabled, labels: labels }), value: value }));
|
|
8
|
+
export const PsPortableTextEditor = ({ className, disabled = false, invalid = false, labels = PsPortableTextCoreConfig.labels, minRows = 4, onChange, placeholder, value, }) => (_jsx(PsPortableTextCore, { className: PallasoftClassNameService.merge(PsPortableTextEditorConfig.classNames.root, invalid && PsPortableTextEditorConfig.classNames.invalid, disabled && PsPortableTextEditorConfig.classNames.disabled, className), classNames: PsPortableTextEditorConfig.contentClassNames, disabled: disabled, editableClassName: PsPortableTextEditorConfig.classNames.editable, fallback: _jsxs(_Fragment, { children: [_jsx("div", { "aria-hidden": 'true', className: PsPortableTextEditorConfig.classNames.toolbar, children: _jsx("span", { className: 'h-9' }) }), _jsx("div", { "aria-hidden": 'true', className: PsPortableTextEditorConfig.classNames.editable, style: { minHeight: PsPortableTextEditorService.minHeight(minRows) } })] }), label: labels.editor, minRows: minRows, onChange: onChange, placeholder: placeholder, toolbar: _jsx(PsPortableTextToolbar, { disabled: disabled, labels: labels }), value: value }));
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export const PsPortableTextEditorConfig = {
|
|
2
2
|
classNames: {
|
|
3
|
-
editable: '
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
editable: 'w-full resize-none overflow-y-auto border-0 bg-transparent px-3 py-2 leading-6 text-ink shadow-none outline-none focus:outline-none focus-visible:outline-none',
|
|
4
|
+
disabled: 'cursor-not-allowed opacity-50',
|
|
5
|
+
invalid: 'border-danger',
|
|
6
|
+
root: 'block overflow-hidden rounded-ps-control border border-line bg-white has-[:focus-visible]:outline has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary dark:bg-transparent',
|
|
7
|
+
toolbar: 'flex flex-wrap items-center gap-1 border-b border-line p-1',
|
|
6
8
|
button: 'ps-focus-ring ps-control-compact inline-flex min-w-ps-control-compact items-center justify-center rounded-ps-control px-2 text-sm text-ink/70 transition-colors hover:bg-ink/5 hover:text-ink disabled:cursor-not-allowed disabled:opacity-40',
|
|
7
9
|
buttonActive: 'bg-primary text-white hover:bg-primary hover:text-white',
|
|
8
10
|
separator: 'mx-1 h-5 w-px bg-line',
|