@ticatec/uniface-element 5.0.0 → 5.0.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/README.md +29 -54
- package/README_CN.md +37 -57
- package/dist/app_layout/ClassicLayout.svelte +8 -40
- package/dist/app_layout/ColumnsLayout.svelte +3 -3
- package/dist/app_layout/HeaderLayout.svelte +4 -20
- package/dist/app_layout/RowsLayout.svelte +3 -3
- package/dist/app_layout/SidebarLayout.svelte +4 -20
- package/dist/base-calendar/CalendarBase.svelte +29 -6
- package/dist/base-calendar/CalendarBase.svelte.d.ts +4 -0
- package/dist/base-calendar/MonthPickupPanel.svelte +19 -6
- package/dist/base-calendar/MonthPickupPanel.svelte.d.ts +1 -1
- package/dist/base-calendar/MonthlyCalendar.svelte +18 -2
- package/dist/base-calendar/YearPickupPanel.svelte +24 -6
- package/dist/base-calendar/YearPickupPanel.svelte.d.ts +1 -1
- package/dist/composite/pagination_panel/PaginationPanel.svelte +2 -0
- package/dist/composite/transfer/Transfer.svelte +12 -6
- package/dist/data_display/accordion/Accordion.svelte +1 -4
- package/dist/data_display/card/CommonCardActionBar.svelte +31 -37
- package/dist/data_display/concise_data_table/Column.d.ts +6 -0
- package/dist/data_display/concise_data_table/ConciseListTable.svelte +4 -3
- package/dist/data_display/concise_data_table/DataCell.svelte +3 -3
- package/dist/data_display/list_box/ListBox.svelte +96 -23
- package/dist/data_display/list_box/ListBox.svelte.d.ts +4 -0
- package/dist/data_display/tree_view/TreeNodeView.svelte +25 -4
- package/dist/data_table/DataTable.svelte +5 -5
- package/dist/data_table/DataTable.svelte.d.ts +36 -16
- package/dist/data_table/lib/ActionsColumn.d.ts +2 -2
- package/dist/data_table/lib/DataColumn.d.ts +7 -1
- package/dist/data_table/lib/RowAction.d.ts +5 -5
- package/dist/data_table/lib/clickOutSide.js +6 -5
- package/dist/data_table/parts/FixedHeaderPanel.svelte +18 -3
- package/dist/data_table/parts/FixedRow.svelte +10 -1
- package/dist/data_table/parts/HrefCell.svelte +1 -1
- package/dist/data_table/parts/TableHeaderPanel.svelte +18 -2
- package/dist/data_table/parts/TextCell.svelte +2 -2
- package/dist/form/attachment_files/AttachmentEditor.svelte +20 -15
- package/dist/form/attachment_files/FileRender.svelte +1 -1
- package/dist/form/attachment_files/FileUploadBar.svelte +5 -2
- package/dist/form/attachment_files/FileUploadPanel.svelte +11 -73
- package/dist/form/cascade_options_select/CascadeOptionSelect.svelte +10 -2
- package/dist/form/cascade_options_select/OptionsBox.svelte +48 -2
- package/dist/form/checkbox/CheckBox.svelte +2 -7
- package/dist/form/color_picker/ColorPicker.svelte +150 -35
- package/dist/form/color_picker/ColorPicker.svelte.d.ts +7 -25
- package/dist/form/color_picker/ColorPickerPanel.svelte +23 -20
- package/dist/form/color_picker/ColorPickerPanel.svelte.d.ts +5 -18
- package/dist/form/color_picker/README.md +14 -7
- package/dist/form/color_picker/README_CN.md +14 -7
- package/dist/form/common_editor/CommonEditor.svelte +18 -4
- package/dist/form/common_editor/CommonPicker.svelte +14 -10
- package/dist/form/common_editor/CommonPopupEditor.svelte +8 -1
- package/dist/form/common_range_editor/CommonRangeEditor.svelte +11 -2
- package/dist/form/date_picker/DatePicker.svelte +1 -1
- package/dist/form/date_picker/DateTimePicker.svelte +1 -1
- package/dist/form/date_picker/ScrollBar.svelte +20 -12
- package/dist/form/date_picker/ScrollBar.svelte.d.ts +4 -18
- package/dist/form/date_range/DateRangeEditor.svelte +11 -3
- package/dist/form/group_box/group-check-box/GroupCheckBox.svelte +6 -1
- package/dist/form/group_box/group-radio-box/GroupRadioBox.svelte +6 -1
- package/dist/form/image-files/ImageFilesField.svelte +51 -7
- package/dist/form/image-files/ImagePreview.svelte +23 -9
- package/dist/form/image-files/ImageRender.svelte +69 -11
- package/dist/form/input_options_select/InputOptionsSelect.svelte +10 -2
- package/dist/form/lookup_editor/LookupEditor.svelte +9 -2
- package/dist/form/memo_editor/MemoEditor.svelte +2 -2
- package/dist/form/number_editor/NumberEditor.svelte +2 -2
- package/dist/form/options_multi_select/OptionsMultiSelect.svelte +20 -12
- package/dist/form/options_select/OptionsSelect.svelte +15 -6
- package/dist/form/options_select/OptionsSelect.svelte.d.ts +39 -17
- package/dist/form/prompts_text_editor/PromptsTextEditor.svelte +10 -2
- package/dist/form/radio_button/RadioButton.svelte +2 -8
- package/dist/form/switch/Switch.svelte +4 -4
- package/dist/form/text_editor/TextEditor.svelte +2 -2
- package/dist/form/unit-number-editor/UnitNumberEditor.svelte +10 -2
- package/dist/general/button/Button.svelte +5 -0
- package/dist/general/button/Button.svelte.d.ts +1 -0
- package/dist/general/button/IconButton.svelte +3 -1
- package/dist/general/button/IconButton.svelte.d.ts +1 -0
- package/dist/general/button/TextButton.svelte +3 -0
- package/dist/general/button/TextButton.svelte.d.ts +1 -0
- package/dist/general/icon/Icon.svelte +18 -1
- package/dist/general/split/Split.svelte +24 -4
- package/dist/general/tag/Tag.svelte +9 -1
- package/dist/navigation/nav_menu/MenuItem.d.ts +4 -2
- package/dist/navigation/nav_menu/NavigatorMenu.svelte +157 -34
- package/dist/navigation/nav_menu/NavigatorMenu.svelte.d.ts +2 -3
- package/dist/navigation/nav_menu/NavigatorMenuItem.svelte +25 -13
- package/dist/navigation/nav_menu/NavigatorMenuItem.svelte.d.ts +3 -3
- package/dist/navigation/navigator/Navigator.svelte +17 -17
- package/dist/navigation/page-stack/PageStack.svelte +160 -0
- package/dist/navigation/page-stack/PageStack.svelte.d.ts +24 -0
- package/dist/navigation/page-stack/PageStackContext.d.ts +25 -0
- package/dist/navigation/page-stack/PageStackContext.js +12 -0
- package/dist/navigation/page-stack/PageStackFrame.svelte +24 -0
- package/dist/navigation/page-stack/PageStackFrame.svelte.d.ts +11 -0
- package/dist/navigation/page-stack/README.md +154 -0
- package/dist/navigation/page-stack/README_CN.md +154 -0
- package/dist/navigation/page-stack/index.d.ts +6 -0
- package/dist/navigation/page-stack/index.js +4 -0
- package/dist/navigation/pagination/Pagination.svelte +114 -14
- package/dist/navigation/progress_step_bar/ProgressStepBlock.svelte +1 -5
- package/dist/navigation/tabs/Tabs.svelte +42 -10
- package/dist/navigation/tabs/Tabs.svelte.d.ts +2 -2
- package/dist/overlay/common/FloatingPanel.svelte +3 -17
- package/dist/overlay/common/FullscreenOverlay.svelte +27 -3
- package/dist/overlay/common/FullscreenOverlay.svelte.d.ts +6 -27
- package/dist/overlay/common/ModalPopover.svelte +18 -2
- package/dist/overlay/common/Popover.svelte +61 -57
- package/dist/overlay/common/Popover.svelte.d.ts +1 -5
- package/dist/overlay/common/escapeClose.d.ts +28 -0
- package/dist/overlay/common/escapeClose.js +47 -0
- package/dist/overlay/common/focusTrap.d.ts +8 -0
- package/dist/overlay/common/focusTrap.js +83 -0
- package/dist/overlay/common/mountSingleton.d.ts +27 -0
- package/dist/overlay/common/mountSingleton.js +45 -0
- package/dist/overlay/common/outsideClick.d.ts +28 -0
- package/dist/overlay/common/outsideClick.js +20 -0
- package/dist/overlay/common/scrollLock.d.ts +8 -0
- package/dist/overlay/common/scrollLock.js +49 -0
- package/dist/overlay/common/uniface-utils.js +0 -1
- package/dist/overlay/context-menu/ContextMenu.svelte.js +2 -15
- package/dist/overlay/context-menu/ContextMenuPanel.svelte +27 -3
- package/dist/overlay/dialog/Dialog.svelte +48 -32
- package/dist/overlay/dialog/DialogManager.svelte.js +7 -9
- package/dist/overlay/dialog/DialogWrapper.svelte +5 -2
- package/dist/overlay/drawer/Drawer.svelte +30 -3
- package/dist/overlay/indicator/Indicator.svelte.js +2 -15
- package/dist/overlay/indicator/IndicatorPanel.svelte +4 -1
- package/dist/overlay/message-box/MessageBox.svelte.js +2 -15
- package/dist/overlay/message-box/MessageBoxPanel.svelte +19 -3
- package/dist/overlay/toast/Toast.svelte.js +2 -15
- package/dist/overlay/toast/ToastPanel.svelte +1 -1
- package/dist/overlay/tooltip/Tooltip.svelte +1 -1
- package/dist/ticatec-uniface-web.css +128 -13
- package/dist/types.d.ts +4 -3
- package/dist/utils/prefixFilter.d.ts +3 -3
- package/dist/utils/prefixFilter.js +3 -5
- package/docs/components/README.md +133 -0
- package/docs/components/accordion/README.md +60 -0
- package/docs/components/accordion/example.svelte +7 -0
- package/docs/components/action-bar/README.md +114 -0
- package/docs/components/action-bar/example.svelte +7 -0
- package/docs/components/app-top-bar/README.md +60 -0
- package/docs/components/app-top-bar/example.svelte +9 -0
- package/docs/components/attachment-files/README.md +332 -0
- package/docs/components/attachment-files/example.svelte +16 -0
- package/docs/components/box/README.md +63 -0
- package/docs/components/box/example.svelte +10 -0
- package/docs/components/breadcrumbs/README.md +86 -0
- package/docs/components/breadcrumbs/example.svelte +11 -0
- package/docs/components/button/README.md +103 -0
- package/docs/components/button/example.svelte +10 -0
- package/docs/components/card/README.md +113 -0
- package/docs/components/card/example.svelte +10 -0
- package/docs/components/cascade-options-select/README.md +162 -0
- package/docs/components/cascade-options-select/example.svelte +18 -0
- package/docs/components/checkbox/README.md +103 -0
- package/docs/components/checkbox/example.svelte +15 -0
- package/docs/components/classic-layout/README.md +76 -0
- package/docs/components/classic-layout/example.svelte +16 -0
- package/docs/components/color-picker/README.md +132 -0
- package/docs/components/color-picker/example.svelte +16 -0
- package/docs/components/columns-layout/README.md +70 -0
- package/docs/components/columns-layout/example.svelte +12 -0
- package/docs/components/common-dialog/README.md +109 -0
- package/docs/components/common-dialog/example.svelte +12 -0
- package/docs/components/concise-data-table/README.md +307 -0
- package/docs/components/concise-data-table/example.svelte +16 -0
- package/docs/components/context-menu/README.md +99 -0
- package/docs/components/context-menu/example.svelte +10 -0
- package/docs/components/criteria-field/README.md +69 -0
- package/docs/components/criteria-field/example.svelte +9 -0
- package/docs/components/data-table/README.md +365 -0
- package/docs/components/data-table/example.svelte +23 -0
- package/docs/components/date-picker/README.md +136 -0
- package/docs/components/date-picker/example.svelte +16 -0
- package/docs/components/date-range/README.md +122 -0
- package/docs/components/date-range/example.svelte +15 -0
- package/docs/components/date-time-picker/README.md +142 -0
- package/docs/components/date-time-picker/example.svelte +16 -0
- package/docs/components/dialog/README.md +174 -0
- package/docs/components/dialog/example.svelte +13 -0
- package/docs/components/dialog-board/README.md +41 -0
- package/docs/components/dialog-board/example.svelte +5 -0
- package/docs/components/drawer/README.md +70 -0
- package/docs/components/drawer/example.svelte +12 -0
- package/docs/components/flex-form/README.md +55 -0
- package/docs/components/flex-form/example.svelte +7 -0
- package/docs/components/flex-row-form/README.md +56 -0
- package/docs/components/flex-row-form/example.svelte +7 -0
- package/docs/components/form-field/README.md +84 -0
- package/docs/components/form-field/example.svelte +10 -0
- package/docs/components/full-screen-overlay/README.md +66 -0
- package/docs/components/full-screen-overlay/example.svelte +11 -0
- package/docs/components/grid-form/README.md +75 -0
- package/docs/components/grid-form/example.svelte +9 -0
- package/docs/components/group-check-box/README.md +147 -0
- package/docs/components/group-check-box/example.svelte +21 -0
- package/docs/components/group-radio-box/README.md +144 -0
- package/docs/components/group-radio-box/example.svelte +21 -0
- package/docs/components/header-layout/README.md +65 -0
- package/docs/components/header-layout/example.svelte +12 -0
- package/docs/components/icon/README.md +87 -0
- package/docs/components/icon/example.svelte +9 -0
- package/docs/components/icon-button/README.md +91 -0
- package/docs/components/icon-button/example.svelte +10 -0
- package/docs/components/image-files/README.md +174 -0
- package/docs/components/image-files/example.svelte +19 -0
- package/docs/components/indicator/README.md +53 -0
- package/docs/components/indicator/example.svelte +14 -0
- package/docs/components/input-options-select/README.md +163 -0
- package/docs/components/input-options-select/example.svelte +16 -0
- package/docs/components/list-box/ListItem.svelte +14 -0
- package/docs/components/list-box/README.md +221 -0
- package/docs/components/list-box/example.svelte +61 -0
- package/docs/components/lookup-editor/README.md +137 -0
- package/docs/components/lookup-editor/example.svelte +16 -0
- package/docs/components/memo-editor/README.md +143 -0
- package/docs/components/memo-editor/example.svelte +16 -0
- package/docs/components/message-box/README.md +68 -0
- package/docs/components/message-box/example.svelte +10 -0
- package/docs/components/navigator/README.md +75 -0
- package/docs/components/navigator/example.svelte +13 -0
- package/docs/components/navigator-menu/README.md +113 -0
- package/docs/components/navigator-menu/example.svelte +10 -0
- package/docs/components/number-editor/README.md +144 -0
- package/docs/components/number-editor/example.svelte +16 -0
- package/docs/components/number-range/README.md +116 -0
- package/docs/components/number-range/example.svelte +15 -0
- package/docs/components/options-multi-select/README.md +161 -0
- package/docs/components/options-multi-select/example.svelte +20 -0
- package/docs/components/options-select/README.md +160 -0
- package/docs/components/options-select/example.svelte +21 -0
- package/docs/components/page/README.md +77 -0
- package/docs/components/page/example.svelte +10 -0
- package/docs/components/pagination/README.md +88 -0
- package/docs/components/pagination/example.svelte +10 -0
- package/docs/components/pagination-panel/README.md +120 -0
- package/docs/components/pagination-panel/example.svelte +16 -0
- package/docs/components/popup-hint/README.md +44 -0
- package/docs/components/popup-hint/example.svelte +5 -0
- package/docs/components/progress-bar/README.md +64 -0
- package/docs/components/progress-bar/example.svelte +8 -0
- package/docs/components/progress-step-bar/README.md +93 -0
- package/docs/components/progress-step-bar/example.svelte +7 -0
- package/docs/components/prompts-text-editor/README.md +146 -0
- package/docs/components/prompts-text-editor/example.svelte +17 -0
- package/docs/components/radio-button/README.md +121 -0
- package/docs/components/radio-button/example.svelte +18 -0
- package/docs/components/rows-layout/README.md +70 -0
- package/docs/components/rows-layout/example.svelte +12 -0
- package/docs/components/search-box/README.md +136 -0
- package/docs/components/search-box/example.svelte +16 -0
- package/docs/components/separator/README.md +44 -0
- package/docs/components/separator/example.svelte +7 -0
- package/docs/components/sidebar-layout/README.md +65 -0
- package/docs/components/sidebar-layout/example.svelte +12 -0
- package/docs/components/split/README.md +48 -0
- package/docs/components/split/example.svelte +8 -0
- package/docs/components/switch/README.md +77 -0
- package/docs/components/switch/example.svelte +11 -0
- package/docs/components/tabs/README.md +127 -0
- package/docs/components/tabs/example.svelte +22 -0
- package/docs/components/tag/README.md +63 -0
- package/docs/components/tag/example.svelte +8 -0
- package/docs/components/text-button/README.md +90 -0
- package/docs/components/text-button/example.svelte +9 -0
- package/docs/components/text-editor/README.md +147 -0
- package/docs/components/text-editor/example.svelte +16 -0
- package/docs/components/time-editor/README.md +130 -0
- package/docs/components/time-editor/example.svelte +16 -0
- package/docs/components/toast/README.md +52 -0
- package/docs/components/toast/example.svelte +9 -0
- package/docs/components/tooltip/README.md +44 -0
- package/docs/components/tooltip/example.svelte +5 -0
- package/docs/components/transfer/README.md +109 -0
- package/docs/components/transfer/example.svelte +13 -0
- package/docs/components/tree-view/README.md +163 -0
- package/docs/components/tree-view/example.svelte +26 -0
- package/docs/components/unit-number-editor/README.md +192 -0
- package/docs/components/unit-number-editor/example.svelte +18 -0
- package/package.json +15 -7
|
@@ -40,6 +40,13 @@
|
|
|
40
40
|
toChild,
|
|
41
41
|
actionIcon
|
|
42
42
|
}: Props = $props();
|
|
43
|
+
|
|
44
|
+
const handleCleanKeyDown = (handler: () => void) => (e: KeyboardEvent) => {
|
|
45
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
handler();
|
|
48
|
+
}
|
|
49
|
+
};
|
|
43
50
|
</script>
|
|
44
51
|
|
|
45
52
|
<FormEditor {variant} {compact} {disabled} {readonly} {error} {tooltip} {theme} {style} {className}>
|
|
@@ -48,14 +55,16 @@
|
|
|
48
55
|
<div class="range-cell">
|
|
49
56
|
{@render fromChild()}
|
|
50
57
|
<div class="clean-icon" class:visible={showFromClean}>
|
|
51
|
-
<i class="icon_google_clear"
|
|
58
|
+
<i class="icon_google_clear" role="button" tabindex={showFromClean ? 0 : -1} aria-label="Clear"
|
|
59
|
+
onclick={cleanFrom} onkeydown={handleCleanKeyDown(cleanFrom)}></i>
|
|
52
60
|
</div>
|
|
53
61
|
</div>
|
|
54
62
|
<div class="divider"></div>
|
|
55
63
|
<div class="range-cell">
|
|
56
64
|
{@render toChild()}
|
|
57
65
|
<div class="clean-icon" class:visible={showToClean}>
|
|
58
|
-
<i class="icon_google_clear"
|
|
66
|
+
<i class="icon_google_clear" role="button" tabindex={showToClean ? 0 : -1} aria-label="Clear"
|
|
67
|
+
onclick={cleanTo} onkeydown={handleCleanKeyDown(cleanTo)}></i>
|
|
59
68
|
</div>
|
|
60
69
|
</div>
|
|
61
70
|
</div>
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
bind:isOpen autoFit={false} {textValue} {readonly} {disabled}>
|
|
60
60
|
{#snippet popupLayer()}
|
|
61
61
|
<div class="date-popover">
|
|
62
|
-
<Calendar value={value} {min} {max}
|
|
62
|
+
<Calendar value={value} {min} {max} onchange={handleCalendarSelect}/>
|
|
63
63
|
</div>
|
|
64
64
|
{/snippet}
|
|
65
65
|
</CommonPicker>
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
<Calendar
|
|
124
124
|
style="border-right: 1px solid var(--uniface-inside-border-color, #f0f0f0)"
|
|
125
125
|
value={currentValue}
|
|
126
|
-
|
|
126
|
+
onchange={handleCalendarSelect}
|
|
127
127
|
{min} {max}/>
|
|
128
128
|
<TimePanel style="width: 120px" value={currentValue} {precision} onchange={handleTimeChange}/>
|
|
129
129
|
</div>
|
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
import type {OnChangeHandler} from "../../types";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
interface Props {
|
|
6
|
+
value: number;
|
|
7
|
+
mode?: 24 | 60;
|
|
8
|
+
enable?: boolean;
|
|
9
|
+
onchange?: OnChangeHandler<number>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let {value = $bindable(), mode = 60, enable = true, onchange}: Props = $props();
|
|
9
13
|
|
|
10
|
-
let list: Array<any> = [];
|
|
14
|
+
let list: Array<any> = $state([]);
|
|
11
15
|
|
|
12
16
|
const decValue = () => {
|
|
13
17
|
if (enable) {
|
|
@@ -75,25 +79,29 @@
|
|
|
75
79
|
|
|
76
80
|
let timer: any;
|
|
77
81
|
|
|
78
|
-
|
|
82
|
+
$effect(() => {
|
|
83
|
+
void value;
|
|
84
|
+
void mode;
|
|
85
|
+
resetList();
|
|
86
|
+
});
|
|
79
87
|
|
|
80
88
|
</script>
|
|
81
|
-
<div class="scroll-bar"
|
|
89
|
+
<div class="scroll-bar" onwheel={handleMouseWheel}>
|
|
82
90
|
<div class="action-bar">
|
|
83
91
|
<div class="arrow-up" class:disabled={!enable}>
|
|
84
|
-
<i class="icon_google_keyboard_arrow_up"
|
|
85
|
-
|
|
92
|
+
<i class="icon_google_keyboard_arrow_up" onclick={decValue} onkeydown={handleKeyDown(decValue)} ondragstart={(e)=>{e.preventDefault()}}
|
|
93
|
+
onmousedown={handleMouseDown(-1)} onmouseup={handleMouseUp} onmouseleave={handleMouseUp}
|
|
86
94
|
role="button" tabindex="0" aria-label="Decrease value"></i>
|
|
87
95
|
</div>
|
|
88
96
|
</div>
|
|
89
97
|
{#each list as v}
|
|
90
|
-
<div style={!enable && v!= value ? "visibility: hidden; " : ""} class="digital-block"
|
|
98
|
+
<div style={!enable && v!= value ? "visibility: hidden; " : ""} class="digital-block" onclick={()=>{handleDigitalClick(v)}} onkeydown={handleKeyDown(() => handleDigitalClick(v))} class:inactive={v!=value}
|
|
91
99
|
role="button" tabindex="0" aria-label="Select {v}"><span>{v}</span></div>
|
|
92
100
|
{/each}
|
|
93
101
|
<div class="action-bar">
|
|
94
102
|
<div class="arrow-down" class:disabled={!enable}>
|
|
95
|
-
<i class="icon_google_keyboard_arrow_down"
|
|
96
|
-
|
|
103
|
+
<i class="icon_google_keyboard_arrow_down" onclick={incValue} onkeydown={handleKeyDown(incValue)} ondragstart={(e)=>{e.preventDefault()}}
|
|
104
|
+
onmousedown={handleMouseDown(1)} onmouseup={handleMouseUp} onmouseleave={handleMouseUp}
|
|
97
105
|
role="button" tabindex="0" aria-label="Increase value"></i>
|
|
98
106
|
</div>
|
|
99
107
|
</div>
|
|
@@ -1,24 +1,10 @@
|
|
|
1
1
|
import type { OnChangeHandler } from "../../types";
|
|
2
|
-
interface
|
|
3
|
-
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
-
$$bindings?: Bindings;
|
|
5
|
-
} & Exports;
|
|
6
|
-
(internal: unknown, props: Props & {
|
|
7
|
-
$$events?: Events;
|
|
8
|
-
$$slots?: Slots;
|
|
9
|
-
}): Exports & {
|
|
10
|
-
$set?: any;
|
|
11
|
-
$on?: any;
|
|
12
|
-
};
|
|
13
|
-
z_$$bindings?: Bindings;
|
|
14
|
-
}
|
|
15
|
-
declare const ScrollBar: $$__sveltets_2_IsomorphicComponent<{
|
|
2
|
+
interface Props {
|
|
16
3
|
value: number;
|
|
17
4
|
mode?: 24 | 60;
|
|
18
5
|
enable?: boolean;
|
|
19
6
|
onchange?: OnChangeHandler<number>;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
type ScrollBar = InstanceType<typeof ScrollBar>;
|
|
7
|
+
}
|
|
8
|
+
declare const ScrollBar: import("svelte").Component<Props, {}, "value">;
|
|
9
|
+
type ScrollBar = ReturnType<typeof ScrollBar>;
|
|
24
10
|
export default ScrollBar;
|
|
@@ -80,6 +80,13 @@
|
|
|
80
80
|
toValue = normalizeValue(value.toDate(), false);
|
|
81
81
|
isOpen = false;
|
|
82
82
|
};
|
|
83
|
+
|
|
84
|
+
const handleIconKeyDown = (e: KeyboardEvent) => {
|
|
85
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
86
|
+
e.preventDefault();
|
|
87
|
+
showPopover();
|
|
88
|
+
}
|
|
89
|
+
};
|
|
83
90
|
</script>
|
|
84
91
|
|
|
85
92
|
<div bind:this={rootElement}>
|
|
@@ -91,7 +98,8 @@
|
|
|
91
98
|
<input style="width: 100%; text-align: center" readonly onclick={showPopover} value={textTo}/>
|
|
92
99
|
{/snippet}
|
|
93
100
|
{#snippet actionIcon()}
|
|
94
|
-
<i class="icon_google_event_note action-icon" aria-
|
|
101
|
+
<i class="icon_google_event_note action-icon" role="button" tabindex="0" aria-label="Open date range picker"
|
|
102
|
+
onclick={showPopover} onkeydown={handleIconKeyDown}></i>
|
|
95
103
|
{/snippet}
|
|
96
104
|
</CommonRangeEditor>
|
|
97
105
|
|
|
@@ -101,12 +109,12 @@
|
|
|
101
109
|
<Calendar
|
|
102
110
|
style="border-right: 1px solid #f0f0f0"
|
|
103
111
|
value={fromValue}
|
|
104
|
-
|
|
112
|
+
onchange={handleFormCalendarSelect}
|
|
105
113
|
{min}
|
|
106
114
|
max={maxFrom}/>
|
|
107
115
|
<Calendar
|
|
108
116
|
value={toValue}
|
|
109
|
-
|
|
117
|
+
onchange={handleToCalendarSelect}
|
|
110
118
|
min={minTo}
|
|
111
119
|
{max}/>
|
|
112
120
|
</div>
|
|
@@ -168,8 +168,13 @@
|
|
|
168
168
|
{style}
|
|
169
169
|
className={className}
|
|
170
170
|
>
|
|
171
|
+
<!-- onclick only forwards focus to the first checkbox when the container's
|
|
172
|
+
own background is clicked; each CheckBox inside is independently
|
|
173
|
+
focusable/keyboard-operable, so this isn't an additional action. -->
|
|
174
|
+
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
175
|
+
<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
|
|
171
176
|
<div bind:this={groupContainer} class="group-check-box" class:compact onfocusout={handleContainerBlur} onclick={handleContainerClick}
|
|
172
|
-
|
|
177
|
+
role="group">
|
|
173
178
|
{#each options as op}
|
|
174
179
|
{#if (hideOptions ?? []).indexOf(op[keyField]) === -1}
|
|
175
180
|
<CheckBox
|
|
@@ -118,7 +118,12 @@
|
|
|
118
118
|
{style}
|
|
119
119
|
className={className}
|
|
120
120
|
>
|
|
121
|
-
|
|
121
|
+
<!-- onclick only forwards focus to the first radio when the container's own
|
|
122
|
+
background is clicked; each RadioButton inside is independently
|
|
123
|
+
focusable/keyboard-operable, so this isn't an additional action. -->
|
|
124
|
+
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
125
|
+
<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
|
|
126
|
+
<div bind:this={groupContainer} class="group-radio-box" class:compact onfocusout={handleContainerBlur} onclick={handleContainerClick} role="group">
|
|
122
127
|
{#each options as op}
|
|
123
128
|
<RadioButton
|
|
124
129
|
{compact}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import FileUploadPanel from "../attachment_files/FileUploadPanel.svelte";
|
|
7
7
|
import ImageRender from "./ImageRender.svelte";
|
|
8
8
|
import ImagePreview from "./ImagePreview.svelte";
|
|
9
|
+
import FormEditor from "../FormEditor.svelte";
|
|
9
10
|
import {getEditorVariant} from "../../unifaceContext";
|
|
10
11
|
import type {EditorVariant} from "../types";
|
|
11
12
|
|
|
@@ -61,24 +62,67 @@
|
|
|
61
62
|
$effect(() => {
|
|
62
63
|
text = '<div>' + files.map(item => (item.name)).join("</div><div>") + '</div>';
|
|
63
64
|
});
|
|
65
|
+
|
|
66
|
+
const handleUploadKeyDown = (e: KeyboardEvent) => {
|
|
67
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
68
|
+
e.preventDefault();
|
|
69
|
+
showDialog();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
64
72
|
</script>
|
|
65
73
|
|
|
66
74
|
<div class="uniface-images-field" {style}>
|
|
67
|
-
<
|
|
75
|
+
<FormEditor {variant} {readonly} {disabled}>
|
|
68
76
|
<div class="files-field">
|
|
69
77
|
{#each files as file}
|
|
70
78
|
<ImageRender {file} {readonly} onRemove={removeFile}
|
|
71
79
|
onPreview={(file: ImageFile) => {showPreview = true; previewImgSrc = file.uri}}/>
|
|
72
80
|
{/each}
|
|
81
|
+
{#if !disabled && !readonly}
|
|
82
|
+
<div class="editor-action-icon">
|
|
83
|
+
<i class="icon_google_file_upload" role="button" tabindex="0" aria-label="Upload image"
|
|
84
|
+
onclick={showDialog} onkeydown={handleUploadKeyDown}></i>
|
|
85
|
+
</div>
|
|
86
|
+
{/if}
|
|
73
87
|
</div>
|
|
74
|
-
|
|
75
|
-
<div class="editor-action-icon">
|
|
76
|
-
<i class="icon_google_file_upload" aria-hidden="true" onclick={showDialog}></i>
|
|
77
|
-
</div>
|
|
78
|
-
{/if}
|
|
79
|
-
</div>
|
|
88
|
+
</FormEditor>
|
|
80
89
|
{#if showUpload}
|
|
81
90
|
<FileUploadPanel bind:visible={showUpload} accept="image/*" {maxFiles} onFileUploaded={appendNewFile} {uploadFile}/>
|
|
82
91
|
{/if}
|
|
83
92
|
<ImagePreview bind:visible={showPreview} src={previewImgSrc}/>
|
|
84
93
|
</div>
|
|
94
|
+
|
|
95
|
+
<style>
|
|
96
|
+
.uniface-images-field {
|
|
97
|
+
width: 100%;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.files-field {
|
|
101
|
+
display: flex;
|
|
102
|
+
align-items: center;
|
|
103
|
+
width: 100%;
|
|
104
|
+
height: 52px;
|
|
105
|
+
min-width: 0;
|
|
106
|
+
overflow-x: auto;
|
|
107
|
+
overflow-y: hidden;
|
|
108
|
+
box-sizing: border-box;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.editor-action-icon {
|
|
112
|
+
flex: 0 0 auto;
|
|
113
|
+
cursor: pointer;
|
|
114
|
+
padding: 4px;
|
|
115
|
+
border-radius: 4px;
|
|
116
|
+
display: flex;
|
|
117
|
+
align-items: center;
|
|
118
|
+
color: inherit;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.editor-action-icon:hover {
|
|
122
|
+
background-color: rgba(0, 0, 0, 0.05);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.editor-action-icon i {
|
|
126
|
+
font-size: 22px;
|
|
127
|
+
}
|
|
128
|
+
</style>
|
|
@@ -60,20 +60,27 @@
|
|
|
60
60
|
</script>
|
|
61
61
|
|
|
62
62
|
{#if visible}
|
|
63
|
-
|
|
63
|
+
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
64
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
65
|
+
<div class="uniface-image-preview-overlay" onclick={() => visible = false}>
|
|
64
66
|
<div>
|
|
65
67
|
<div style="width: 100%; height: 100%; overflow: auto">
|
|
66
68
|
<div class="image-container"
|
|
67
69
|
style="width: {containerWidth}px; height: {containerHeight}px; {imgStyle}">
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
<button type="button" class="image-content" aria-label="Preview image" onclick={(e: Event) => e.stopPropagation()}>
|
|
71
|
+
<img src={src}
|
|
72
|
+
alt="Preview"
|
|
73
|
+
onload={handleImageLoad}
|
|
74
|
+
style="width: {imgPanelWidth}px; height: {imgPanelHeight}px;"
|
|
75
|
+
/>
|
|
76
|
+
</button>
|
|
74
77
|
</div>
|
|
75
78
|
</div>
|
|
76
|
-
|
|
79
|
+
<!-- onclick here only stops propagation to the backdrop's close handler;
|
|
80
|
+
the real controls are the IconButtons inside. -->
|
|
81
|
+
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
82
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
83
|
+
<div class="toolbar" onclick={(e: Event) => e.stopPropagation()}>
|
|
77
84
|
<IconButton icon="icon_google_zoom_in" type="default" onclick={zoomIn}></IconButton>
|
|
78
85
|
<IconButton icon="icon_google_zoom_out" type="default" onclick={zoomOut}></IconButton>
|
|
79
86
|
<IconButton icon="icon_google_cancel" type="default" onclick={() => visible = false}></IconButton>
|
|
@@ -120,10 +127,17 @@
|
|
|
120
127
|
img {
|
|
121
128
|
transition: transform 0.3s ease;
|
|
122
129
|
}
|
|
130
|
+
|
|
131
|
+
.image-content {
|
|
132
|
+
display: inline-flex;
|
|
133
|
+
padding: 0;
|
|
134
|
+
border: 0;
|
|
135
|
+
background: transparent;
|
|
136
|
+
}
|
|
123
137
|
}
|
|
124
138
|
|
|
125
139
|
&:hover .toolbar {
|
|
126
140
|
display: flex;
|
|
127
141
|
}
|
|
128
142
|
}
|
|
129
|
-
</style>
|
|
143
|
+
</style>
|
|
@@ -16,22 +16,80 @@
|
|
|
16
16
|
const removeFile = () => {
|
|
17
17
|
onRemove?.(file);
|
|
18
18
|
}
|
|
19
|
+
|
|
20
|
+
const handleActionKeyDown = (handler: () => void) => (e: KeyboardEvent) => {
|
|
21
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
22
|
+
e.preventDefault();
|
|
23
|
+
handler();
|
|
24
|
+
}
|
|
25
|
+
};
|
|
19
26
|
</script>
|
|
20
27
|
|
|
21
|
-
<div
|
|
28
|
+
<div class="uniface-image-render">
|
|
22
29
|
<div class="file-icon">
|
|
23
30
|
<img src={file.thumbnail ?? file.uri} alt="" width="40px" height="40px"/>
|
|
24
31
|
<div class="img-overlay">
|
|
25
|
-
<div>
|
|
26
|
-
<
|
|
27
|
-
|
|
28
|
-
</div>
|
|
29
|
-
{#if !readonly}
|
|
30
|
-
<div class="action-icon" style="top: 35px;">
|
|
31
|
-
<i class="icon_google_delete" aria-hidden="true" onclick={removeFile}></i>
|
|
32
|
-
</div>
|
|
33
|
-
{/if}
|
|
32
|
+
<div class="action-icon">
|
|
33
|
+
<i class="icon_google_remove_red_eye" role="button" tabindex="0" aria-label="Preview image"
|
|
34
|
+
onclick={() => onPreview?.(file)} onkeydown={handleActionKeyDown(() => onPreview?.(file))}></i>
|
|
34
35
|
</div>
|
|
36
|
+
{#if !readonly}
|
|
37
|
+
<div class="action-icon">
|
|
38
|
+
<i class="icon_google_delete" role="button" tabindex="0" aria-label="Remove image"
|
|
39
|
+
onclick={removeFile} onkeydown={handleActionKeyDown(removeFile)}></i>
|
|
40
|
+
</div>
|
|
41
|
+
{/if}
|
|
35
42
|
</div>
|
|
36
43
|
</div>
|
|
37
|
-
</div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<style>
|
|
47
|
+
.uniface-image-render {
|
|
48
|
+
width: 80px;
|
|
49
|
+
box-sizing: border-box;
|
|
50
|
+
padding: 6px 8px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.file-icon {
|
|
54
|
+
position: relative;
|
|
55
|
+
width: 40px;
|
|
56
|
+
height: 40px;
|
|
57
|
+
border-radius: 4px;
|
|
58
|
+
overflow: hidden;
|
|
59
|
+
background-color: rgba(0, 0, 0, 0.04);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.file-icon img {
|
|
63
|
+
display: block;
|
|
64
|
+
width: 100%;
|
|
65
|
+
height: 100%;
|
|
66
|
+
object-fit: cover;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.img-overlay {
|
|
70
|
+
position: absolute;
|
|
71
|
+
inset: 0;
|
|
72
|
+
display: flex;
|
|
73
|
+
align-items: center;
|
|
74
|
+
justify-content: center;
|
|
75
|
+
gap: 6px;
|
|
76
|
+
background-color: rgba(0, 0, 0, 0.45);
|
|
77
|
+
opacity: 0;
|
|
78
|
+
transition: opacity 0.15s ease;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.file-icon:hover .img-overlay,
|
|
82
|
+
.file-icon:focus-within .img-overlay {
|
|
83
|
+
opacity: 1;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.action-icon {
|
|
87
|
+
display: flex;
|
|
88
|
+
cursor: pointer;
|
|
89
|
+
color: #fff;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.action-icon i {
|
|
93
|
+
font-size: 16px;
|
|
94
|
+
}
|
|
95
|
+
</style>
|
|
@@ -163,6 +163,13 @@
|
|
|
163
163
|
isOpen = false;
|
|
164
164
|
};
|
|
165
165
|
|
|
166
|
+
const handleItemKeyDown = (data: any) => (e: KeyboardEvent) => {
|
|
167
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
168
|
+
e.preventDefault();
|
|
169
|
+
handleItemClick(data)();
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
|
|
166
173
|
const oninput = (event: Event) => {
|
|
167
174
|
isUserTyping = true;
|
|
168
175
|
if (!composing) {
|
|
@@ -211,9 +218,10 @@
|
|
|
211
218
|
{/if}
|
|
212
219
|
</div>
|
|
213
220
|
{#snippet popupLayer()}
|
|
214
|
-
<div class="options-popover" bind:this={scrollElement} style={mh} onscroll={handleScroll}>
|
|
221
|
+
<div class="options-popover" bind:this={scrollElement} style={mh} onscroll={handleScroll} role="listbox">
|
|
215
222
|
{#each options as op (op[keyField])}
|
|
216
|
-
<div class="option-item" onclick={handleItemClick(op)}
|
|
223
|
+
<div class="option-item" onclick={handleItemClick(op)} onkeydown={handleItemKeyDown(op)}
|
|
224
|
+
role="option" tabindex="0" aria-selected={op[keyField] === value}>
|
|
217
225
|
{#if ItemRender}
|
|
218
226
|
<ItemRender item={op}/>
|
|
219
227
|
{:else}
|
|
@@ -50,15 +50,22 @@
|
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
+
const handleActionKeyDown = (e: KeyboardEvent) => {
|
|
54
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
55
|
+
e.preventDefault();
|
|
56
|
+
handleActionClick();
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
53
60
|
</script>
|
|
54
61
|
|
|
55
62
|
<CommonEditor {theme} {clear} {style} {tooltip} {error} {readonly} {disabled} {compact} {variant} textValue={text??''} canClean={!mandatory}>
|
|
56
63
|
<input bind:this={editor} {placeholder} readonly value={text ?? ''} {onfocus} {onblur}/>
|
|
57
64
|
{#snippet trailingIcon()}
|
|
58
65
|
{#if !disabled && !readonly}
|
|
59
|
-
<i class="icon_google_arrow_drop_down action_icon" role="
|
|
66
|
+
<i class="icon_google_arrow_drop_down action_icon" role="button" tabindex="0" aria-label="Lookup"
|
|
60
67
|
onmousedown={(event: MouseEvent)=> {event.preventDefault()}}
|
|
61
|
-
onclick={handleActionClick}></i>
|
|
68
|
+
onclick={handleActionClick} onkeydown={handleActionKeyDown}></i>
|
|
62
69
|
{/if}
|
|
63
70
|
{/snippet}
|
|
64
71
|
</CommonEditor>
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
...restProps
|
|
46
46
|
}: Props = $props();
|
|
47
47
|
|
|
48
|
-
let numberInput
|
|
48
|
+
let numberInput = $state<NumberInput>();
|
|
49
49
|
|
|
50
50
|
export function focus() {
|
|
51
51
|
numberInput?.focus();
|
|
@@ -94,4 +94,4 @@
|
|
|
94
94
|
{...input$}
|
|
95
95
|
/>
|
|
96
96
|
{/if}
|
|
97
|
-
</CommonEditor>
|
|
97
|
+
</CommonEditor>
|
|
@@ -138,6 +138,20 @@
|
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
+
const handleEditorKeyDown = (e: KeyboardEvent) => {
|
|
142
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
143
|
+
e.preventDefault();
|
|
144
|
+
openPopupLayer();
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
const handleOptionKeyDown = (key: string, itemDisabled: boolean) => (e: KeyboardEvent) => {
|
|
149
|
+
if (!itemDisabled && (e.key === 'Enter' || e.key === ' ')) {
|
|
150
|
+
e.preventDefault();
|
|
151
|
+
toggleOption(key)(e as unknown as MouseEvent);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
|
|
141
155
|
const input$style = "position: absolute; left: 0; top: 0; width: 1px; height: 1px; opacity: 0; pointer-events: none";
|
|
142
156
|
|
|
143
157
|
</script>
|
|
@@ -145,7 +159,7 @@
|
|
|
145
159
|
<CommonPicker {variant} {style} {compact} {tooltip} {error} {readonly} {disabled} {theme} {placeholder} {value} {mandatory} {clear}
|
|
146
160
|
bind:isOpen {onblur} {onfocus} autoFit {input$style}>
|
|
147
161
|
<div class="option-field">
|
|
148
|
-
<div class="options-editor" onclick={openPopupLayer} aria-
|
|
162
|
+
<div class="options-editor" onclick={openPopupLayer} onkeydown={handleEditorKeyDown} tabindex="0" role="button" aria-haspopup="listbox" aria-expanded={isOpen}>
|
|
149
163
|
{#if selectedList.length > 0 }
|
|
150
164
|
{#each selectedList as code}
|
|
151
165
|
<Tag style="flex-shrink: 0" size={compact ? 'small' : 'middle'} color={tagColor} variant={tagVariant}
|
|
@@ -164,12 +178,14 @@
|
|
|
164
178
|
</div>
|
|
165
179
|
</div>
|
|
166
180
|
{#snippet popupLayer()}
|
|
167
|
-
<div class="options-popover" style={mh}>
|
|
181
|
+
<div class="options-popover" style={mh} role="listbox" aria-multiselectable="true">
|
|
168
182
|
{#each options as op}
|
|
169
183
|
{#if hideOptions.indexOf(op[keyField]) < 0}
|
|
170
184
|
{@const itemDisabled = disableOptions.indexOf(op[keyField]) > -1}
|
|
171
185
|
<div class="option-item" class:disabled={itemDisabled} onclick={itemDisabled ? null : toggleOption(op[keyField])}
|
|
172
|
-
|
|
186
|
+
onkeydown={handleOptionKeyDown(op[keyField], itemDisabled)}
|
|
187
|
+
role="option" tabindex={itemDisabled ? -1 : 0}
|
|
188
|
+
aria-selected={selectedList.indexOf(op[keyField])>-1} aria-disabled={itemDisabled}>
|
|
173
189
|
<CheckBox style="width: 100%; pointer-events: none" {theme} value={selectedList.indexOf(op[keyField])>-1} disabled={itemDisabled}
|
|
174
190
|
label={op[textField]}/>
|
|
175
191
|
</div>
|
|
@@ -214,16 +230,8 @@
|
|
|
214
230
|
outline: none;
|
|
215
231
|
}
|
|
216
232
|
|
|
217
|
-
.options-editor.disabled {
|
|
218
|
-
filter: grayscale(1);
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
.options-editor.disabled * {
|
|
222
|
-
cursor: not-allowed;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
233
|
.options-editor .placeholder {
|
|
226
234
|
color: var(--uniface-editor-color-placeholder);
|
|
227
235
|
}
|
|
228
236
|
|
|
229
|
-
</style>
|
|
237
|
+
</style>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script lang="ts">
|
|
1
|
+
<script lang="ts" generics="Option extends Record<string, any> = any">
|
|
2
2
|
|
|
3
3
|
import CommonPicker from "../common_editor/CommonPicker.svelte";
|
|
4
4
|
import SearchBox from "../search_box/SearchBox.svelte";
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
interface Props extends CommonPickerProps {
|
|
9
9
|
emptyText?: string;
|
|
10
10
|
value: any;
|
|
11
|
-
options: Array<
|
|
11
|
+
options: Array<Option>;
|
|
12
12
|
keyField?: string;
|
|
13
13
|
textField?: string;
|
|
14
14
|
menu$height?: number;
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
hideOptions?: Array<string>;
|
|
17
17
|
itemRender?: any;
|
|
18
18
|
filterPlaceholder?: string;
|
|
19
|
-
filterFunction?: (option:
|
|
19
|
+
filterFunction?: (option: Option, keyword: string) => boolean;
|
|
20
20
|
noResultsText?: string;
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -130,6 +130,13 @@
|
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
+
const handleItemKeyDown = (data: any) => (e: KeyboardEvent) => {
|
|
134
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
135
|
+
e.preventDefault();
|
|
136
|
+
handleItemClick(data)();
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
|
|
133
140
|
|
|
134
141
|
let picker: CommonPicker;
|
|
135
142
|
|
|
@@ -138,7 +145,7 @@
|
|
|
138
145
|
<CommonPicker bind:this={picker} {error} {tooltip} {variant} {style} {compact} {textValue} {readonly} {placeholder} {disabled} bind:isOpen
|
|
139
146
|
{theme} {value} clear={()=> {value = undefined}} {mandatory} {onfocus} {onblur}>
|
|
140
147
|
{#snippet popupLayer()}
|
|
141
|
-
<div class="uniface-options-popover" style={mh}>
|
|
148
|
+
<div class="uniface-options-popover" style={mh} role="listbox">
|
|
142
149
|
{#if filterFunction != null}
|
|
143
150
|
<div class="quick-filter-box">
|
|
144
151
|
<SearchBox
|
|
@@ -163,8 +170,10 @@
|
|
|
163
170
|
disabled={disableOptions.indexOf(op[keyField])>-1}
|
|
164
171
|
onclick={handleItemClick(op)}/>
|
|
165
172
|
{:else}
|
|
166
|
-
<div class="option-item" class:disabled={disableOptions.indexOf(op[keyField])>-1}
|
|
167
|
-
|
|
173
|
+
<div class="option-item" class:disabled={disableOptions.indexOf(op[keyField])>-1}
|
|
174
|
+
role="option" tabindex={disableOptions.indexOf(op[keyField])>-1 ? -1 : 0}
|
|
175
|
+
aria-selected={String(op[keyField]) === String(value)}
|
|
176
|
+
onclick={handleItemClick(op)} onkeydown={handleItemKeyDown(op)}>
|
|
168
177
|
<span>{op[textField]}</span>
|
|
169
178
|
</div>
|
|
170
179
|
{/if}
|