@ticatec/uniface-element 0.2.3 → 0.3.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/dist/accordion/README.md +169 -0
- package/dist/accordion/README_CN.md +176 -0
- package/dist/action-bar/README.md +275 -0
- package/dist/action-bar/README_CN.md +285 -0
- package/dist/app-layout/README.md +374 -0
- package/dist/app-layout/README_CN.md +381 -0
- package/dist/app-top-bar/README.md +357 -0
- package/dist/app-top-bar/README_CN.md +365 -0
- package/dist/attachment-files/AttachmentFilesField.svelte +67 -1
- package/dist/attachment-files/AttachmentFilesField.svelte.d.ts +8 -1
- package/dist/base-calendar/CalendarBase.svelte +0 -3
- package/dist/box/README.md +385 -0
- package/dist/box/README_CN.md +393 -0
- package/dist/breadcrumbs/README.md +442 -0
- package/dist/breadcrumbs/README_CN.md +442 -0
- package/dist/button/Button.svelte +27 -7
- package/dist/button/Button.svelte.d.ts +3 -1
- package/dist/button/IconButton.svelte +26 -6
- package/dist/button/IconButton.svelte.d.ts +3 -1
- package/dist/button/IconButton_README.md +513 -0
- package/dist/button/IconButton_README_CN.md +513 -0
- package/dist/button/README.md +428 -0
- package/dist/button/README_CN.md +428 -0
- package/dist/button/TextButton.svelte +26 -6
- package/dist/button/TextButton.svelte.d.ts +3 -1
- package/dist/button/TextButton_README.md +571 -0
- package/dist/button/TextButton_README_CN.md +571 -0
- package/dist/card/README.md +666 -0
- package/dist/card/README_CN.md +666 -0
- package/dist/cascade-options-select/CascadeOptionSelect.svelte +43 -7
- package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +3 -4
- package/dist/cascade-options-select/README.md +663 -2
- package/dist/cascade-options-select/README_CN.md +664 -0
- package/dist/checkbox/CheckBox.svelte +20 -6
- package/dist/checkbox/CheckBox.svelte.d.ts +4 -2
- package/dist/checkbox/README.md +562 -0
- package/dist/checkbox/README_CN.md +727 -0
- package/dist/common-editor/NumberInput.svelte +39 -26
- package/dist/common-editor/NumberInput.svelte.d.ts +5 -1
- package/dist/concise-data-table/ConciseListTable.svelte +133 -36
- package/dist/concise-data-table/ConciseListTable.svelte.d.ts +8 -1
- package/dist/concise-data-table/DataCell.svelte +5 -6
- package/dist/concise-data-table/DataRow.svelte +22 -2
- package/dist/concise-data-table/DataRow.svelte.d.ts +1 -0
- package/dist/concise-data-table/README.md +606 -0
- package/dist/concise-data-table/README_CN.md +611 -0
- package/dist/context-menu/ContextMenu.svelte +138 -21
- package/dist/context-menu/ContextMenu.svelte.d.ts +5 -0
- package/dist/context-menu/ContextMenuItem.d.ts +20 -4
- package/dist/context-menu/README.md +551 -0
- package/dist/context-menu/README_CN.md +551 -0
- package/dist/criteria-field/CriteriaField.svelte +3 -5
- package/dist/criteria-field/README.md +532 -0
- package/dist/criteria-field/README_CN.md +532 -0
- package/dist/data-table/README.md +712 -0
- package/dist/data-table/README_CN.md +712 -0
- package/dist/date-picker/DatePicker.svelte +44 -7
- package/dist/date-picker/DatePicker.svelte.d.ts +3 -4
- package/dist/date-picker/DateTimePicker.svelte +32 -8
- package/dist/date-picker/DateTimePicker.svelte.d.ts +3 -4
- package/dist/date-picker/README.md +326 -0
- package/dist/date-picker/README_CN.md +316 -0
- package/dist/date-picker/ScrollBar.svelte +18 -8
- package/dist/date-picker/ScrollBar.svelte.d.ts +1 -1
- package/dist/date-picker/TimePanel.svelte +5 -5
- package/dist/date-picker/TimePanel.svelte.d.ts +1 -1
- package/dist/date-range/README.md +374 -0
- package/dist/date-range/README_CN.md +374 -0
- package/dist/dialog/DialogBoard.svelte +1 -1
- package/dist/dialog/README.md +596 -0
- package/dist/dialog/README_CN.md +596 -0
- package/dist/drawer/README.md +679 -1
- package/dist/drawer/README_CN.md +679 -0
- package/dist/group-box/group-check-box/GroupCheckBox.svelte +62 -5
- package/dist/group-box/group-check-box/GroupCheckBox.svelte.d.ts +7 -2
- package/dist/group-box/group-check-box/README.md +749 -0
- package/dist/group-box/group-check-box/README_CN.md +750 -0
- package/dist/group-box/group-radio-box/GroupRadioBox.svelte +69 -4
- package/dist/group-box/group-radio-box/GroupRadioBox.svelte.d.ts +8 -2
- package/dist/group-box/group-radio-box/README.md +920 -0
- package/dist/group-box/group-radio-box/README_CN.md +920 -0
- package/dist/image-files/README.md +1346 -0
- package/dist/image-files/README_CN.md +1346 -0
- package/dist/input-options-select/InputOptionsSelect.svelte +161 -65
- package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +4 -1
- package/dist/lib/forwardAllEvents.d.ts +3 -0
- package/dist/lib/forwardAllEvents.js +24 -0
- package/dist/list-box/README.md +579 -0
- package/dist/list-box/README_CN.md +682 -0
- package/dist/lookup-editor/LookupEditor.svelte +15 -3
- package/dist/lookup-editor/LookupEditor.svelte.d.ts +3 -4
- package/dist/lookup-editor/README.md +684 -0
- package/dist/lookup-editor/README_CN.md +684 -0
- package/dist/memo-editor/MemoEditor.svelte +77 -27
- package/dist/memo-editor/MemoEditor.svelte.d.ts +6 -3
- package/dist/memo-editor/README.md +819 -0
- package/dist/memo-editor/README_CN.md +819 -0
- package/dist/message-box/README.md +398 -0
- package/dist/message-box/README_CN.md +398 -0
- package/dist/number-editor/NumberEditor.svelte +2 -2
- package/dist/number-editor/NumberEditor.svelte.d.ts +1 -1
- package/dist/number-editor/README.md +353 -22
- package/dist/number-editor/README_CN.md +357 -0
- package/dist/number-range/README.md +443 -0
- package/dist/number-range/README_CN.md +443 -0
- package/dist/options-multi-select/OptionsMultiSelect.svelte +87 -12
- package/dist/options-multi-select/OptionsMultiSelect.svelte.d.ts +3 -1
- package/dist/options-multi-select/README.md +480 -0
- package/dist/options-multi-select/README_CN.md +480 -0
- package/dist/options-select/OptionsSelect.svelte +36 -5
- package/dist/options-select/OptionsSelect.svelte.d.ts +3 -4
- package/dist/options-select/README.md +632 -0
- package/dist/options-select/README_CN.md +632 -0
- package/dist/page/README.md +605 -0
- package/dist/page/README_CN.md +605 -0
- package/dist/pagination/README.md +946 -0
- package/dist/pagination/README_CN.md +946 -0
- package/dist/pagination-panel/README.md +1075 -0
- package/dist/pagination-panel/README_CN.md +1075 -0
- package/dist/popup-hint/README.md +841 -0
- package/dist/popup-hint/README_CN.md +840 -0
- package/dist/progress-bar/README.md +242 -0
- package/dist/progress-bar/README_CN.md +242 -0
- package/dist/progress-step-bar/README.md +316 -0
- package/dist/progress-step-bar/README_CN.md +316 -0
- package/dist/prompts-text-editor/PromptsTextEditor.svelte +6 -3
- package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +3 -1
- package/dist/prompts-text-editor/README.md +329 -0
- package/dist/prompts-text-editor/README_CN.md +329 -0
- package/dist/property-editor/README.md +969 -0
- package/dist/property-editor/README_CN.md +969 -0
- package/dist/radio-button/README.md +372 -0
- package/dist/radio-button/README_CN.md +372 -0
- package/dist/radio-button/RadioButton.svelte +32 -3
- package/dist/radio-button/RadioButton.svelte.d.ts +12 -1
- package/dist/search-box/README.md +425 -0
- package/dist/search-box/README_CN.md +424 -0
- package/dist/search-box/SearchBox.svelte +22 -6
- package/dist/search-box/SearchBox.svelte.d.ts +4 -1
- package/dist/tabs/README.md +919 -0
- package/dist/tabs/README_CN.md +920 -0
- package/dist/tag/README.md +922 -0
- package/dist/tag/README_CN.md +922 -0
- package/dist/text-editor/PasswordEditor.svelte +17 -2
- package/dist/text-editor/PasswordEditor.svelte.d.ts +3 -3
- package/dist/text-editor/PasswordEditor_README.md +551 -0
- package/dist/text-editor/PasswordEditor_README_CN.md +551 -0
- package/dist/text-editor/README.md +466 -0
- package/dist/text-editor/README_CN.md +466 -0
- package/dist/text-editor/TextEditor.svelte +51 -19
- package/dist/text-editor/TextEditor.svelte.d.ts +0 -1
- package/dist/ticatec-uniface-web.css +1 -0
- package/dist/time-editor/README.md +498 -24
- package/dist/time-editor/README_CN.md +498 -0
- package/dist/time-editor/TimeEditor.svelte +7 -3
- package/dist/time-editor/TimeEditor.svelte.d.ts +3 -1
- package/dist/toast/README.md +667 -0
- package/dist/toast/README_CN.md +667 -0
- package/dist/transfer/README.md +795 -0
- package/dist/transfer/Transfer.svelte +6 -4
- package/dist/transfer/Transfer.svelte.d.ts +3 -1
- package/dist/tree-view/README.md +761 -0
- package/dist/tree-view/README_CN.md +761 -0
- package/dist/tree-view/TreeView.svelte +5 -3
- package/dist/tree-view/TreeView.svelte.d.ts +3 -1
- package/dist/unit-number-editor/README.md +546 -20
- package/dist/unit-number-editor/README_CN.md +525 -0
- package/dist/unit-number-editor/UnitNumberEditor.svelte +62 -8
- package/dist/unit-number-editor/UnitNumberEditor.svelte.d.ts +5 -1
- package/docs/form-field/cn/README_CN.md +364 -0
- package/docs/form-field/en/README.md +364 -0
- package/docs/form-panel/flex-form/cn/README_CN.md +586 -0
- package/docs/form-panel/flex-form/en/README.md +586 -0
- package/docs/form-panel/flex-row-form/cn/README_CN.md +787 -0
- package/docs/form-panel/flex-row-form/en/README.md +787 -0
- package/docs/form-panel/grid-form/en/README.md +744 -0
- package/package.json +1 -1
- package/dist/drawer/README-CN.md +0 -1
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Accordion Component
|
|
2
|
+
|
|
3
|
+
A flexible and customizable accordion component for collapsible content sections.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Collapsible Sections**: Expandable and collapsible content panels
|
|
8
|
+
- **Two Modes**:
|
|
9
|
+
- **Multiple Mode**: Multiple panels can be open simultaneously
|
|
10
|
+
- **Exclusive Mode**: Only one panel can be open at a time
|
|
11
|
+
- **Dynamic Content**: Support for any Svelte component as panel content
|
|
12
|
+
- **Custom Headers**: Optional custom header components
|
|
13
|
+
- **Responsive Design**: Compact mode for smaller screens
|
|
14
|
+
- **Accessible**: Built with accessibility best practices
|
|
15
|
+
|
|
16
|
+
## Basic Usage
|
|
17
|
+
|
|
18
|
+
```svelte
|
|
19
|
+
<script>
|
|
20
|
+
import Accordion, { type AccordionItem } from '@ticatec/uniface-element/Accordion';
|
|
21
|
+
import MyComponent from './MyComponent.svelte';
|
|
22
|
+
|
|
23
|
+
const accordionItems: AccordionItem[] = [
|
|
24
|
+
{
|
|
25
|
+
title: 'Section 1',
|
|
26
|
+
component: MyComponent,
|
|
27
|
+
params: { data: 'example' }
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
title: 'Section 2',
|
|
31
|
+
component: MyComponent,
|
|
32
|
+
params: { data: 'another example' }
|
|
33
|
+
}
|
|
34
|
+
];
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<Accordion accordions={accordionItems} />
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Props
|
|
41
|
+
|
|
42
|
+
| Prop | Type | Default | Description |
|
|
43
|
+
|------|------|---------|-------------|
|
|
44
|
+
| `accordions` | `AccordionItem[]` | `[]` | Array of accordion items to display |
|
|
45
|
+
| `exclusive` | `boolean` | `false` | Whether only one panel can be open at a time |
|
|
46
|
+
| `activeItem` | `AccordionItem` | `null` | Currently active item (used in exclusive mode) |
|
|
47
|
+
| `compact` | `boolean` | `false` | Enable compact styling for smaller screens |
|
|
48
|
+
| `style` | `string` | `''` | Custom CSS styles |
|
|
49
|
+
| `class` | `string` | `''` | Additional CSS classes |
|
|
50
|
+
|
|
51
|
+
## AccordionItem Interface
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
interface AccordionItem {
|
|
55
|
+
title: string; // Display title for the accordion header
|
|
56
|
+
component: any; // Svelte component to render in the panel
|
|
57
|
+
params?: any; // Props to pass to the component
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Examples
|
|
62
|
+
|
|
63
|
+
### Multiple Open Panels (Default)
|
|
64
|
+
|
|
65
|
+
```svelte
|
|
66
|
+
<Accordion accordions={items} />
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Exclusive Mode (Only One Open)
|
|
70
|
+
|
|
71
|
+
```svelte
|
|
72
|
+
<Accordion
|
|
73
|
+
accordions={items}
|
|
74
|
+
exclusive={true}
|
|
75
|
+
bind:activeItem={currentActive}
|
|
76
|
+
/>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Compact Mode
|
|
80
|
+
|
|
81
|
+
```svelte
|
|
82
|
+
<Accordion
|
|
83
|
+
accordions={items}
|
|
84
|
+
compact={true}
|
|
85
|
+
/>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Custom Styling
|
|
89
|
+
|
|
90
|
+
```svelte
|
|
91
|
+
<Accordion
|
|
92
|
+
accordions={items}
|
|
93
|
+
style="border: 1px solid #ccc; border-radius: 8px;"
|
|
94
|
+
class="my-custom-accordion"
|
|
95
|
+
/>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Behavior
|
|
99
|
+
|
|
100
|
+
### Multiple Mode
|
|
101
|
+
- Users can expand/collapse any number of panels
|
|
102
|
+
- Clicking a panel header toggles its open/closed state
|
|
103
|
+
- No automatic closing of other panels
|
|
104
|
+
|
|
105
|
+
### Exclusive Mode
|
|
106
|
+
- Only one panel can be open at a time
|
|
107
|
+
- Opening a new panel automatically closes the previously open panel
|
|
108
|
+
- First panel opens automatically on mount if no `activeItem` is specified
|
|
109
|
+
- Shows folder icon for the currently open panel
|
|
110
|
+
|
|
111
|
+
## Styling
|
|
112
|
+
|
|
113
|
+
The component uses the following CSS classes:
|
|
114
|
+
|
|
115
|
+
- `.uniface-accordion-panel` - Main container
|
|
116
|
+
- `.accordion` - Individual accordion item
|
|
117
|
+
- `.header` - Accordion header (clickable)
|
|
118
|
+
- `.content` - Accordion content area
|
|
119
|
+
- `.compact` - Applied when compact mode is enabled
|
|
120
|
+
|
|
121
|
+
## Accessibility
|
|
122
|
+
|
|
123
|
+
- Headers are clickable for keyboard navigation
|
|
124
|
+
- Proper ARIA attributes for screen readers
|
|
125
|
+
- Visual indicators for open/closed states
|
|
126
|
+
- Focus management for keyboard users
|
|
127
|
+
|
|
128
|
+
## Icon Usage
|
|
129
|
+
|
|
130
|
+
The component uses Google Material Icons:
|
|
131
|
+
- `icon_google_keyboard_arrow_down` - Collapsed state (multiple mode)
|
|
132
|
+
- `icon_google_keyboard_arrow_up` - Expanded state (multiple mode)
|
|
133
|
+
- `icon_google_folder_open` - Active state (exclusive mode)
|
|
134
|
+
|
|
135
|
+
## Advanced Usage
|
|
136
|
+
|
|
137
|
+
### Custom Header Component
|
|
138
|
+
|
|
139
|
+
You can provide a custom header component by setting the `header` prop on AccordionItemView:
|
|
140
|
+
|
|
141
|
+
```svelte
|
|
142
|
+
<AccordionItemView
|
|
143
|
+
title={item.title}
|
|
144
|
+
isOpen={isOpen}
|
|
145
|
+
header={CustomHeaderComponent}
|
|
146
|
+
onClick={handleClick}
|
|
147
|
+
>
|
|
148
|
+
<!-- content -->
|
|
149
|
+
</AccordionItemView>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Dynamic Content
|
|
153
|
+
|
|
154
|
+
Accordion items can contain any Svelte component with dynamic parameters:
|
|
155
|
+
|
|
156
|
+
```javascript
|
|
157
|
+
const dynamicItems = [
|
|
158
|
+
{
|
|
159
|
+
title: 'User Profile',
|
|
160
|
+
component: UserProfile,
|
|
161
|
+
params: { userId: 123, editable: true }
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
title: 'Settings',
|
|
165
|
+
component: SettingsPanel,
|
|
166
|
+
params: { theme: 'dark', language: 'en' }
|
|
167
|
+
}
|
|
168
|
+
];
|
|
169
|
+
```
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# 手风琴组件
|
|
2
|
+
|
|
3
|
+
一个灵活且可定制的手风琴组件,用于可折叠的内容区域。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- **可折叠区域**: 可展开和折叠的内容面板
|
|
8
|
+
- **两种模式**:
|
|
9
|
+
- **多选模式**: 多个面板可以同时打开
|
|
10
|
+
- **独占模式**: 同时只能打开一个面板
|
|
11
|
+
- **动态内容**: 支持任何Svelte组件作为面板内容
|
|
12
|
+
- **自定义标题**: 可选的自定义标题组件
|
|
13
|
+
- **响应式设计**: 紧凑模式适配小屏幕
|
|
14
|
+
- **无障碍访问**: 基于无障碍最佳实践构建
|
|
15
|
+
|
|
16
|
+
## 基本用法
|
|
17
|
+
|
|
18
|
+
```svelte
|
|
19
|
+
<script>
|
|
20
|
+
import Accordion, { type AccordionItem } from '@ticatec/uniface-element/Accordion';
|
|
21
|
+
import MyComponent from './MyComponent.svelte';
|
|
22
|
+
|
|
23
|
+
const accordionItems: AccordionItem[] = [
|
|
24
|
+
{
|
|
25
|
+
title: '第一部分',
|
|
26
|
+
component: MyComponent,
|
|
27
|
+
params: { data: '示例数据' }
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
title: '第二部分',
|
|
31
|
+
component: MyComponent,
|
|
32
|
+
params: { data: '另一个示例' }
|
|
33
|
+
}
|
|
34
|
+
];
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<Accordion accordions={accordionItems} />
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 属性参数
|
|
41
|
+
|
|
42
|
+
| 属性 | 类型 | 默认值 | 描述 |
|
|
43
|
+
|------|------|---------|-------------|
|
|
44
|
+
| `accordions` | `AccordionItem[]` | `[]` | 要显示的手风琴项目数组 |
|
|
45
|
+
| `exclusive` | `boolean` | `false` | 是否同时只能打开一个面板 |
|
|
46
|
+
| `activeItem` | `AccordionItem` | `null` | 当前激活的项目(在独占模式下使用) |
|
|
47
|
+
| `compact` | `boolean` | `false` | 启用紧凑样式以适配小屏幕 |
|
|
48
|
+
| `style` | `string` | `''` | 自定义CSS样式 |
|
|
49
|
+
| `class` | `string` | `''` | 额外的CSS类名 |
|
|
50
|
+
|
|
51
|
+
## AccordionItem 接口
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
interface AccordionItem {
|
|
55
|
+
title: string; // 手风琴标题的显示文本
|
|
56
|
+
component: any; // 要在面板中渲染的Svelte组件
|
|
57
|
+
params?: any; // 传递给组件的属性参数
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## 使用示例
|
|
62
|
+
|
|
63
|
+
### 多面板模式(默认)
|
|
64
|
+
|
|
65
|
+
```svelte
|
|
66
|
+
<Accordion accordions={items} />
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 独占模式(只能打开一个)
|
|
70
|
+
|
|
71
|
+
```svelte
|
|
72
|
+
<Accordion
|
|
73
|
+
accordions={items}
|
|
74
|
+
exclusive={true}
|
|
75
|
+
bind:activeItem={currentActive}
|
|
76
|
+
/>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 紧凑模式
|
|
80
|
+
|
|
81
|
+
```svelte
|
|
82
|
+
<Accordion
|
|
83
|
+
accordions={items}
|
|
84
|
+
compact={true}
|
|
85
|
+
/>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 自定义样式
|
|
89
|
+
|
|
90
|
+
```svelte
|
|
91
|
+
<Accordion
|
|
92
|
+
accordions={items}
|
|
93
|
+
style="border: 1px solid #ccc; border-radius: 8px;"
|
|
94
|
+
class="my-custom-accordion"
|
|
95
|
+
/>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## 行为特性
|
|
99
|
+
|
|
100
|
+
### 多选模式
|
|
101
|
+
- 用户可以展开/折叠任意数量的面板
|
|
102
|
+
- 点击面板标题切换其打开/关闭状态
|
|
103
|
+
- 不会自动关闭其他面板
|
|
104
|
+
|
|
105
|
+
### 独占模式
|
|
106
|
+
- 同时只能打开一个面板
|
|
107
|
+
- 打开新面板会自动关闭之前打开的面板
|
|
108
|
+
- 如果没有指定`activeItem`,首个面板会在挂载时自动打开
|
|
109
|
+
- 为当前打开的面板显示文件夹图标
|
|
110
|
+
|
|
111
|
+
## 样式定制
|
|
112
|
+
|
|
113
|
+
组件使用以下CSS类名:
|
|
114
|
+
|
|
115
|
+
- `.uniface-accordion-panel` - 主容器
|
|
116
|
+
- `.accordion` - 单个手风琴项目
|
|
117
|
+
- `.header` - 手风琴标题(可点击)
|
|
118
|
+
- `.content` - 手风琴内容区域
|
|
119
|
+
- `.compact` - 启用紧凑模式时应用
|
|
120
|
+
|
|
121
|
+
## 无障碍访问
|
|
122
|
+
|
|
123
|
+
- 标题可点击,支持键盘导航
|
|
124
|
+
- 为屏幕阅读器提供适当的ARIA属性
|
|
125
|
+
- 为打开/关闭状态提供视觉指示器
|
|
126
|
+
- 为键盘用户提供焦点管理
|
|
127
|
+
|
|
128
|
+
## 图标使用
|
|
129
|
+
|
|
130
|
+
组件使用Google Material图标:
|
|
131
|
+
- `icon_google_keyboard_arrow_down` - 折叠状态(多选模式)
|
|
132
|
+
- `icon_google_keyboard_arrow_up` - 展开状态(多选模式)
|
|
133
|
+
- `icon_google_folder_open` - 激活状态(独占模式)
|
|
134
|
+
|
|
135
|
+
## 高级用法
|
|
136
|
+
|
|
137
|
+
### 自定义标题组件
|
|
138
|
+
|
|
139
|
+
你可以通过在AccordionItemView上设置`header`属性来提供自定义标题组件:
|
|
140
|
+
|
|
141
|
+
```svelte
|
|
142
|
+
<AccordionItemView
|
|
143
|
+
title={item.title}
|
|
144
|
+
isOpen={isOpen}
|
|
145
|
+
header={CustomHeaderComponent}
|
|
146
|
+
onClick={handleClick}
|
|
147
|
+
>
|
|
148
|
+
<!-- 内容 -->
|
|
149
|
+
</AccordionItemView>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### 动态内容
|
|
153
|
+
|
|
154
|
+
手风琴项目可以包含任何带有动态参数的Svelte组件:
|
|
155
|
+
|
|
156
|
+
```javascript
|
|
157
|
+
const dynamicItems = [
|
|
158
|
+
{
|
|
159
|
+
title: '用户资料',
|
|
160
|
+
component: UserProfile,
|
|
161
|
+
params: { userId: 123, editable: true }
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
title: '设置',
|
|
165
|
+
component: SettingsPanel,
|
|
166
|
+
params: { theme: 'dark', language: 'zh-CN' }
|
|
167
|
+
}
|
|
168
|
+
];
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## 注意事项
|
|
172
|
+
|
|
173
|
+
- 确保传递给组件的参数与目标组件的属性接口匹配
|
|
174
|
+
- 在独占模式下,建议监听`activeItem`的变化以响应用户交互
|
|
175
|
+
- 组件内容会在面板展开时渲染,折叠时从DOM中移除
|
|
176
|
+
- 适合用于FAQ、设置面板、内容分类等场景
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
# ActionBar Component
|
|
2
|
+
|
|
3
|
+
A flexible action bar component for organizing and displaying action buttons with optional separators.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Button Organization**: Display multiple action buttons in a horizontal layout
|
|
8
|
+
- **Flexible Configuration**: Define buttons through data or use slot content
|
|
9
|
+
- **Separators**: Add visual separators between button groups using `null` values
|
|
10
|
+
- **Customizable Styling**: Control gap spacing and apply custom styles
|
|
11
|
+
- **Button Types**: Support all button types (primary, secondary, danger, etc.)
|
|
12
|
+
- **Icon Support**: Display icons alongside button labels
|
|
13
|
+
- **Disabled State**: Individual button disable functionality
|
|
14
|
+
- **Responsive**: Adapts to container width
|
|
15
|
+
|
|
16
|
+
## Basic Usage
|
|
17
|
+
|
|
18
|
+
```svelte
|
|
19
|
+
<script>
|
|
20
|
+
import ActionBar, { type ButtonAction } from '@ticatec/uniface-element/ActionBar';
|
|
21
|
+
|
|
22
|
+
const actions: ButtonAction[] = [
|
|
23
|
+
{
|
|
24
|
+
label: 'Save',
|
|
25
|
+
type: 'primary',
|
|
26
|
+
icon: 'icon_google_save',
|
|
27
|
+
handler: () => console.log('Save clicked')
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
label: 'Cancel',
|
|
31
|
+
type: 'secondary',
|
|
32
|
+
handler: () => console.log('Cancel clicked')
|
|
33
|
+
}
|
|
34
|
+
];
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<ActionBar buttons={actions} />
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Props
|
|
41
|
+
|
|
42
|
+
| Prop | Type | Default | Description |
|
|
43
|
+
|------|------|---------|-------------|
|
|
44
|
+
| `buttons` | `ButtonActions` | `[]` | Array of button actions or null for separators |
|
|
45
|
+
| `style` | `string` | `''` | Custom CSS styles for the action bar |
|
|
46
|
+
| `gap` | `number` | `8` | Gap spacing between buttons in pixels |
|
|
47
|
+
|
|
48
|
+
## ButtonAction Interface
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
interface ButtonAction {
|
|
52
|
+
label: string; // Button text
|
|
53
|
+
disabled?: boolean; // Whether the button is disabled
|
|
54
|
+
icon?: string; // Icon class name (optional)
|
|
55
|
+
type?: ButtonType; // Button style type
|
|
56
|
+
handler?: MouseClickHandler; // Click event handler
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
type ButtonActions = Array<ButtonAction | null>;
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## ButtonType Options
|
|
63
|
+
|
|
64
|
+
The component supports all standard button types:
|
|
65
|
+
- `'primary'` - Primary action button
|
|
66
|
+
- `'secondary'` - Secondary action button
|
|
67
|
+
- `'danger'` - Destructive action button
|
|
68
|
+
- `'success'` - Success/confirmation button
|
|
69
|
+
- `'warning'` - Warning button
|
|
70
|
+
- `'info'` - Informational button
|
|
71
|
+
|
|
72
|
+
## Examples
|
|
73
|
+
|
|
74
|
+
### Basic Action Bar
|
|
75
|
+
|
|
76
|
+
```svelte
|
|
77
|
+
<script>
|
|
78
|
+
const basicActions = [
|
|
79
|
+
{ label: 'New', handler: createNew },
|
|
80
|
+
{ label: 'Edit', handler: editItem },
|
|
81
|
+
{ label: 'Delete', type: 'danger', handler: deleteItem }
|
|
82
|
+
];
|
|
83
|
+
</script>
|
|
84
|
+
|
|
85
|
+
<ActionBar buttons={basicActions} />
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### With Icons
|
|
89
|
+
|
|
90
|
+
```svelte
|
|
91
|
+
<script>
|
|
92
|
+
const iconActions = [
|
|
93
|
+
{
|
|
94
|
+
label: 'Save',
|
|
95
|
+
icon: 'icon_google_save',
|
|
96
|
+
type: 'primary',
|
|
97
|
+
handler: save
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
label: 'Print',
|
|
101
|
+
icon: 'icon_google_print',
|
|
102
|
+
handler: print
|
|
103
|
+
}
|
|
104
|
+
];
|
|
105
|
+
</script>
|
|
106
|
+
|
|
107
|
+
<ActionBar buttons={iconActions} />
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### With Separators
|
|
111
|
+
|
|
112
|
+
```svelte
|
|
113
|
+
<script>
|
|
114
|
+
const actionsWithSeparators = [
|
|
115
|
+
{ label: 'Copy', handler: copy },
|
|
116
|
+
{ label: 'Paste', handler: paste },
|
|
117
|
+
null, // Separator
|
|
118
|
+
{ label: 'Delete', type: 'danger', handler: remove }
|
|
119
|
+
];
|
|
120
|
+
</script>
|
|
121
|
+
|
|
122
|
+
<ActionBar buttons={actionsWithSeparators} />
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Custom Spacing
|
|
126
|
+
|
|
127
|
+
```svelte
|
|
128
|
+
<ActionBar
|
|
129
|
+
buttons={actions}
|
|
130
|
+
gap={16}
|
|
131
|
+
style="padding: 12px; background: #f5f5f5;"
|
|
132
|
+
/>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Using Slot Content
|
|
136
|
+
|
|
137
|
+
```svelte
|
|
138
|
+
<ActionBar>
|
|
139
|
+
<Button label="Custom" type="primary" />
|
|
140
|
+
<Button label="Actions" type="secondary" />
|
|
141
|
+
</ActionBar>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Dynamic Actions
|
|
145
|
+
|
|
146
|
+
```svelte
|
|
147
|
+
<script>
|
|
148
|
+
let isEditing = false;
|
|
149
|
+
|
|
150
|
+
$: actions = isEditing ? [
|
|
151
|
+
{ label: 'Save', type: 'primary', handler: save },
|
|
152
|
+
{ label: 'Cancel', handler: cancel }
|
|
153
|
+
] : [
|
|
154
|
+
{ label: 'Edit', handler: startEdit },
|
|
155
|
+
{ label: 'Delete', type: 'danger', handler: remove }
|
|
156
|
+
];
|
|
157
|
+
</script>
|
|
158
|
+
|
|
159
|
+
<ActionBar buttons={actions} />
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Conditional Buttons
|
|
163
|
+
|
|
164
|
+
```svelte
|
|
165
|
+
<script>
|
|
166
|
+
let hasPermission = true;
|
|
167
|
+
let isLoading = false;
|
|
168
|
+
|
|
169
|
+
$: actions = [
|
|
170
|
+
{ label: 'Refresh', handler: refresh },
|
|
171
|
+
hasPermission ? {
|
|
172
|
+
label: 'Save',
|
|
173
|
+
type: 'primary',
|
|
174
|
+
disabled: isLoading,
|
|
175
|
+
handler: save
|
|
176
|
+
} : null,
|
|
177
|
+
hasPermission ? {
|
|
178
|
+
label: 'Delete',
|
|
179
|
+
type: 'danger',
|
|
180
|
+
disabled: isLoading,
|
|
181
|
+
handler: remove
|
|
182
|
+
} : null
|
|
183
|
+
].filter(Boolean); // Remove null values
|
|
184
|
+
</script>
|
|
185
|
+
|
|
186
|
+
<ActionBar buttons={actions} />
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Behavior
|
|
190
|
+
|
|
191
|
+
### Button Rendering
|
|
192
|
+
- Buttons are rendered using the internal Button component
|
|
193
|
+
- Each button receives the configured label, icon, type, and disabled state
|
|
194
|
+
- Click handlers are automatically bound to the button events
|
|
195
|
+
|
|
196
|
+
### Separators
|
|
197
|
+
- Use `null` values in the buttons array to insert visual separators
|
|
198
|
+
- Separators appear as vertical lines with 24px height
|
|
199
|
+
- Useful for grouping related actions
|
|
200
|
+
|
|
201
|
+
### Fallback Content
|
|
202
|
+
- If no buttons are provided or the array is empty, slot content is displayed
|
|
203
|
+
- Allows for completely custom action bar layouts
|
|
204
|
+
|
|
205
|
+
## Styling
|
|
206
|
+
|
|
207
|
+
The component uses the following CSS classes:
|
|
208
|
+
|
|
209
|
+
- `.uniface-action-bar` - Main container with flexbox layout
|
|
210
|
+
|
|
211
|
+
### CSS Variables
|
|
212
|
+
|
|
213
|
+
You can customize the appearance using CSS:
|
|
214
|
+
|
|
215
|
+
```css
|
|
216
|
+
.uniface-action-bar {
|
|
217
|
+
/* Custom styling */
|
|
218
|
+
background: #ffffff;
|
|
219
|
+
border: 1px solid #e0e0e0;
|
|
220
|
+
border-radius: 4px;
|
|
221
|
+
padding: 8px;
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Accessibility
|
|
226
|
+
|
|
227
|
+
- Uses semantic button elements for proper keyboard navigation
|
|
228
|
+
- Disabled buttons are properly marked and non-interactive
|
|
229
|
+
- Focus management follows standard button behavior
|
|
230
|
+
- Screen readers can properly identify action buttons
|
|
231
|
+
|
|
232
|
+
## Common Use Cases
|
|
233
|
+
|
|
234
|
+
### Toolbar Actions
|
|
235
|
+
```svelte
|
|
236
|
+
<ActionBar buttons={[
|
|
237
|
+
{ label: 'New', icon: 'icon_google_add' },
|
|
238
|
+
{ label: 'Open', icon: 'icon_google_folder_open' },
|
|
239
|
+
{ label: 'Save', icon: 'icon_google_save' },
|
|
240
|
+
null,
|
|
241
|
+
{ label: 'Cut', icon: 'icon_google_content_cut' },
|
|
242
|
+
{ label: 'Copy', icon: 'icon_google_content_copy' },
|
|
243
|
+
{ label: 'Paste', icon: 'icon_google_content_paste' }
|
|
244
|
+
]} />
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Form Actions
|
|
248
|
+
```svelte
|
|
249
|
+
<ActionBar
|
|
250
|
+
buttons={[
|
|
251
|
+
{ label: 'Save', type: 'primary', handler: submit },
|
|
252
|
+
{ label: 'Cancel', handler: cancel }
|
|
253
|
+
]}
|
|
254
|
+
style="justify-content: flex-end; margin-top: 16px;"
|
|
255
|
+
/>
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### CRUD Operations
|
|
259
|
+
```svelte
|
|
260
|
+
<ActionBar buttons={[
|
|
261
|
+
{ label: 'Create', type: 'primary', handler: create },
|
|
262
|
+
{ label: 'Edit', handler: edit },
|
|
263
|
+
{ label: 'Delete', type: 'danger', handler: remove },
|
|
264
|
+
null,
|
|
265
|
+
{ label: 'Refresh', handler: refresh }
|
|
266
|
+
]} />
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## Best Practices
|
|
270
|
+
|
|
271
|
+
1. **Group Related Actions**: Use separators to group related functionality
|
|
272
|
+
2. **Consistent Icons**: Use consistent icon styles throughout your application
|
|
273
|
+
3. **Button Types**: Use appropriate button types (primary for main actions, danger for destructive actions)
|
|
274
|
+
4. **Disable States**: Disable buttons when actions are not available or during loading
|
|
275
|
+
5. **Responsive Design**: Consider button labels and spacing for mobile devices
|