@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
package/dist/button/README.md
CHANGED
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
# Button Component
|
|
2
|
+
|
|
3
|
+
A versatile button component with multiple variants, sizes, and types, supporting icons, custom styling, and comprehensive event handling.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Multiple Types**: Default, primary, secondary, third, and forth button styles
|
|
8
|
+
- **Size Options**: Big, medium, and mini sizes
|
|
9
|
+
- **Icon Support**: Optional icon display with flexible positioning
|
|
10
|
+
- **Variant Styles**: Plain and round variants
|
|
11
|
+
- **Event Handling**: Click, focus, and blur event support
|
|
12
|
+
- **Accessibility**: Proper semantic button element with disabled state
|
|
13
|
+
- **Debounce Protection**: Built-in click debouncing to prevent rapid firing
|
|
14
|
+
- **Custom Styling**: Flexible style customization
|
|
15
|
+
|
|
16
|
+
## Basic Usage
|
|
17
|
+
|
|
18
|
+
```svelte
|
|
19
|
+
<script>
|
|
20
|
+
import Button from '@ticatec/uniface-element/Button';
|
|
21
|
+
|
|
22
|
+
const handleClick = (event) => {
|
|
23
|
+
console.log('Button clicked!', event);
|
|
24
|
+
};
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<Button
|
|
28
|
+
label="Click Me"
|
|
29
|
+
onclick={handleClick}
|
|
30
|
+
/>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Props
|
|
34
|
+
|
|
35
|
+
| Prop | Type | Default | Description |
|
|
36
|
+
|------|------|---------|-------------|
|
|
37
|
+
| `type` | `ButtonType` | `'default'` | Button type (default, primary, secondary, third, forth) |
|
|
38
|
+
| `label` | `string` | `''` | Button text label |
|
|
39
|
+
| `variant` | `'plain' \| 'round' \| ''` | `''` | Button variant style |
|
|
40
|
+
| `disabled` | `boolean` | `false` | Whether the button is disabled |
|
|
41
|
+
| `style` | `string` | `''` | Custom CSS styles |
|
|
42
|
+
| `size` | `'big' \| 'medium' \| 'mini'` | `'medium'` | Button size |
|
|
43
|
+
| `onclick` | `(event: MouseEvent) => void` | - | Click event handler |
|
|
44
|
+
| `onfocus` | `(event: FocusEvent) => void` | `() => {}` | Focus event handler |
|
|
45
|
+
| `onblur` | `(event: FocusEvent) => void` | `() => {}` | Blur event handler |
|
|
46
|
+
| `icon` | `string \| null` | `null` | Icon class name |
|
|
47
|
+
|
|
48
|
+
## Button Types
|
|
49
|
+
|
|
50
|
+
```svelte
|
|
51
|
+
<!-- Default button -->
|
|
52
|
+
<Button label="Default" type="default" onclick={handleClick} />
|
|
53
|
+
|
|
54
|
+
<!-- Primary button -->
|
|
55
|
+
<Button label="Primary" type="primary" onclick={handleClick} />
|
|
56
|
+
|
|
57
|
+
<!-- Secondary button -->
|
|
58
|
+
<Button label="Secondary" type="secondary" onclick={handleClick} />
|
|
59
|
+
|
|
60
|
+
<!-- Third level button -->
|
|
61
|
+
<Button label="Third" type="third" onclick={handleClick} />
|
|
62
|
+
|
|
63
|
+
<!-- Fourth level button -->
|
|
64
|
+
<Button label="Fourth" type="forth" onclick={handleClick} />
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Button Sizes
|
|
68
|
+
|
|
69
|
+
```svelte
|
|
70
|
+
<!-- Mini button -->
|
|
71
|
+
<Button label="Mini" size="mini" onclick={handleClick} />
|
|
72
|
+
|
|
73
|
+
<!-- Medium button (default) -->
|
|
74
|
+
<Button label="Medium" size="medium" onclick={handleClick} />
|
|
75
|
+
|
|
76
|
+
<!-- Big button -->
|
|
77
|
+
<Button label="Big" size="big" onclick={handleClick} />
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Button Variants
|
|
81
|
+
|
|
82
|
+
```svelte
|
|
83
|
+
<!-- Plain variant -->
|
|
84
|
+
<Button label="Plain" variant="plain" onclick={handleClick} />
|
|
85
|
+
|
|
86
|
+
<!-- Round variant -->
|
|
87
|
+
<Button label="Round" variant="round" onclick={handleClick} />
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## With Icons
|
|
91
|
+
|
|
92
|
+
```svelte
|
|
93
|
+
<!-- Button with icon -->
|
|
94
|
+
<Button
|
|
95
|
+
label="Save"
|
|
96
|
+
icon="fas fa-save"
|
|
97
|
+
onclick={handleSave}
|
|
98
|
+
/>
|
|
99
|
+
|
|
100
|
+
<!-- Icon only (use empty label) -->
|
|
101
|
+
<Button
|
|
102
|
+
icon="fas fa-plus"
|
|
103
|
+
onclick={handleAdd}
|
|
104
|
+
/>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Event Handling
|
|
108
|
+
|
|
109
|
+
```svelte
|
|
110
|
+
<script>
|
|
111
|
+
const handleClick = (event) => {
|
|
112
|
+
console.log('Button clicked:', event);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const handleFocus = (event) => {
|
|
116
|
+
console.log('Button focused:', event);
|
|
117
|
+
// Show tooltip or highlight
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
const handleBlur = (event) => {
|
|
121
|
+
console.log('Button blurred:', event);
|
|
122
|
+
// Hide tooltip or remove highlight
|
|
123
|
+
};
|
|
124
|
+
</script>
|
|
125
|
+
|
|
126
|
+
<Button
|
|
127
|
+
label="Interactive Button"
|
|
128
|
+
onclick={handleClick}
|
|
129
|
+
onfocus={handleFocus}
|
|
130
|
+
onblur={handleBlur}
|
|
131
|
+
/>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Disabled State
|
|
135
|
+
|
|
136
|
+
```svelte
|
|
137
|
+
<Button
|
|
138
|
+
label="Disabled Button"
|
|
139
|
+
disabled={true}
|
|
140
|
+
onclick={handleClick}
|
|
141
|
+
/>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Custom Styling
|
|
145
|
+
|
|
146
|
+
```svelte
|
|
147
|
+
<Button
|
|
148
|
+
label="Custom Styled"
|
|
149
|
+
style="background: linear-gradient(45deg, #ff6b6b, #4ecdc4); color: white; border: none;"
|
|
150
|
+
onclick={handleClick}
|
|
151
|
+
/>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Advanced Examples
|
|
155
|
+
|
|
156
|
+
### Form Submit Button
|
|
157
|
+
|
|
158
|
+
```svelte
|
|
159
|
+
<script>
|
|
160
|
+
let isSubmitting = false;
|
|
161
|
+
|
|
162
|
+
const handleSubmit = async (event) => {
|
|
163
|
+
isSubmitting = true;
|
|
164
|
+
try {
|
|
165
|
+
await submitForm();
|
|
166
|
+
console.log('Form submitted successfully');
|
|
167
|
+
} catch (error) {
|
|
168
|
+
console.error('Submit failed:', error);
|
|
169
|
+
} finally {
|
|
170
|
+
isSubmitting = false;
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
</script>
|
|
174
|
+
|
|
175
|
+
<Button
|
|
176
|
+
label={isSubmitting ? "Submitting..." : "Submit"}
|
|
177
|
+
type="primary"
|
|
178
|
+
disabled={isSubmitting}
|
|
179
|
+
icon={isSubmitting ? "fas fa-spinner fa-spin" : "fas fa-check"}
|
|
180
|
+
onclick={handleSubmit}
|
|
181
|
+
/>
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Action Button with Confirmation
|
|
185
|
+
|
|
186
|
+
```svelte
|
|
187
|
+
<script>
|
|
188
|
+
let showConfirm = false;
|
|
189
|
+
|
|
190
|
+
const handleDelete = (event) => {
|
|
191
|
+
if (!showConfirm) {
|
|
192
|
+
showConfirm = true;
|
|
193
|
+
setTimeout(() => showConfirm = false, 3000);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Proceed with deletion
|
|
198
|
+
deleteItem();
|
|
199
|
+
showConfirm = false;
|
|
200
|
+
};
|
|
201
|
+
</script>
|
|
202
|
+
|
|
203
|
+
<Button
|
|
204
|
+
label={showConfirm ? "Confirm Delete?" : "Delete"}
|
|
205
|
+
type={showConfirm ? "primary" : "secondary"}
|
|
206
|
+
icon="fas fa-trash"
|
|
207
|
+
onclick={handleDelete}
|
|
208
|
+
style={showConfirm ? "background-color: #dc3545;" : ""}
|
|
209
|
+
/>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Navigation Button
|
|
213
|
+
|
|
214
|
+
```svelte
|
|
215
|
+
<script>
|
|
216
|
+
import { goto } from '$app/navigation';
|
|
217
|
+
|
|
218
|
+
const navigateToPage = (event) => {
|
|
219
|
+
goto('/dashboard');
|
|
220
|
+
};
|
|
221
|
+
</script>
|
|
222
|
+
|
|
223
|
+
<Button
|
|
224
|
+
label="Go to Dashboard"
|
|
225
|
+
type="primary"
|
|
226
|
+
icon="fas fa-arrow-right"
|
|
227
|
+
onclick={navigateToPage}
|
|
228
|
+
/>
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Button Group
|
|
232
|
+
|
|
233
|
+
```svelte
|
|
234
|
+
<div class="button-group">
|
|
235
|
+
<Button label="Save" type="primary" onclick={handleSave} />
|
|
236
|
+
<Button label="Cancel" type="secondary" onclick={handleCancel} />
|
|
237
|
+
<Button label="Reset" type="third" onclick={handleReset} />
|
|
238
|
+
</div>
|
|
239
|
+
|
|
240
|
+
<style>
|
|
241
|
+
.button-group {
|
|
242
|
+
display: flex;
|
|
243
|
+
gap: 8px;
|
|
244
|
+
align-items: center;
|
|
245
|
+
}
|
|
246
|
+
</style>
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Loading Button
|
|
250
|
+
|
|
251
|
+
```svelte
|
|
252
|
+
<script>
|
|
253
|
+
let loading = false;
|
|
254
|
+
|
|
255
|
+
const handleAsyncAction = async (event) => {
|
|
256
|
+
loading = true;
|
|
257
|
+
try {
|
|
258
|
+
await performAsyncOperation();
|
|
259
|
+
} finally {
|
|
260
|
+
loading = false;
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
</script>
|
|
264
|
+
|
|
265
|
+
<Button
|
|
266
|
+
label={loading ? "Loading..." : "Start Process"}
|
|
267
|
+
disabled={loading}
|
|
268
|
+
icon={loading ? "fas fa-spinner fa-spin" : "fas fa-play"}
|
|
269
|
+
onclick={handleAsyncAction}
|
|
270
|
+
/>
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Slot Usage
|
|
274
|
+
|
|
275
|
+
```svelte
|
|
276
|
+
<!-- Custom content instead of label -->
|
|
277
|
+
<Button onclick={handleClick}>
|
|
278
|
+
<div class="custom-content">
|
|
279
|
+
<i class="fas fa-star"></i>
|
|
280
|
+
<span>Custom Content</span>
|
|
281
|
+
<span class="badge">NEW</span>
|
|
282
|
+
</div>
|
|
283
|
+
</Button>
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## Accessibility
|
|
287
|
+
|
|
288
|
+
The Button component follows accessibility best practices:
|
|
289
|
+
|
|
290
|
+
- Uses semantic `<button>` element
|
|
291
|
+
- Supports keyboard navigation (Tab, Enter, Space)
|
|
292
|
+
- Proper disabled state handling
|
|
293
|
+
- Focus and blur events for screen readers
|
|
294
|
+
- ARIA attributes when needed
|
|
295
|
+
|
|
296
|
+
```svelte
|
|
297
|
+
<!-- Accessible button with ARIA label -->
|
|
298
|
+
<Button
|
|
299
|
+
icon="fas fa-search"
|
|
300
|
+
onclick={handleSearch}
|
|
301
|
+
style="aria-label: Search products"
|
|
302
|
+
/>
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Styling
|
|
306
|
+
|
|
307
|
+
The component uses the following CSS classes:
|
|
308
|
+
|
|
309
|
+
- `.uniface-button` - Base button class
|
|
310
|
+
- `.common-button` - Common button styling
|
|
311
|
+
- `.{variant}` - Variant-specific styles (plain, round)
|
|
312
|
+
- `.{size}` - Size-specific styles (big, medium, mini)
|
|
313
|
+
- `.{type}` - Type-specific styles (default, primary, etc.)
|
|
314
|
+
- `.disabled` - Disabled state styles
|
|
315
|
+
|
|
316
|
+
### Example CSS
|
|
317
|
+
|
|
318
|
+
```css
|
|
319
|
+
.uniface-button {
|
|
320
|
+
display: inline-flex;
|
|
321
|
+
align-items: center;
|
|
322
|
+
justify-content: center;
|
|
323
|
+
gap: 8px;
|
|
324
|
+
padding: 8px 16px;
|
|
325
|
+
border: 1px solid #ddd;
|
|
326
|
+
background: #fff;
|
|
327
|
+
color: #333;
|
|
328
|
+
font-size: 14px;
|
|
329
|
+
cursor: pointer;
|
|
330
|
+
transition: all 0.2s ease;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
.uniface-button:hover:not(.disabled) {
|
|
334
|
+
background: #f5f5f5;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
.uniface-button:focus {
|
|
338
|
+
outline: 2px solid #007acc;
|
|
339
|
+
outline-offset: 2px;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.uniface-button.disabled {
|
|
343
|
+
opacity: 0.6;
|
|
344
|
+
cursor: not-allowed;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.uniface-button.primary {
|
|
348
|
+
background: #007acc;
|
|
349
|
+
color: white;
|
|
350
|
+
border-color: #007acc;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
.uniface-button.round {
|
|
354
|
+
border-radius: 20px;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.uniface-button.big {
|
|
358
|
+
padding: 12px 24px;
|
|
359
|
+
font-size: 16px;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
.uniface-button.mini {
|
|
363
|
+
padding: 4px 8px;
|
|
364
|
+
font-size: 12px;
|
|
365
|
+
}
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
## Best Practices
|
|
369
|
+
|
|
370
|
+
1. **Consistent Styling**: Use the same button types consistently across your application
|
|
371
|
+
2. **Clear Labels**: Provide descriptive labels that clearly indicate the action
|
|
372
|
+
3. **Appropriate Types**: Use primary for main actions, secondary for supporting actions
|
|
373
|
+
4. **Loading States**: Show loading indicators for async operations
|
|
374
|
+
5. **Keyboard Navigation**: Ensure buttons are accessible via keyboard
|
|
375
|
+
6. **Icon Usage**: Use icons to enhance understanding, not replace clear text
|
|
376
|
+
7. **Debouncing**: The component includes built-in debouncing to prevent accidental double-clicks
|
|
377
|
+
|
|
378
|
+
## Common Patterns
|
|
379
|
+
|
|
380
|
+
### Modal Actions
|
|
381
|
+
|
|
382
|
+
```svelte
|
|
383
|
+
<div class="modal-actions">
|
|
384
|
+
<Button
|
|
385
|
+
label="Cancel"
|
|
386
|
+
type="secondary"
|
|
387
|
+
onclick={closeModal}
|
|
388
|
+
/>
|
|
389
|
+
<Button
|
|
390
|
+
label="Confirm"
|
|
391
|
+
type="primary"
|
|
392
|
+
onclick={confirmAction}
|
|
393
|
+
/>
|
|
394
|
+
</div>
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Toolbar Actions
|
|
398
|
+
|
|
399
|
+
```svelte
|
|
400
|
+
<div class="toolbar">
|
|
401
|
+
<Button icon="fas fa-bold" variant="plain" onclick={toggleBold} />
|
|
402
|
+
<Button icon="fas fa-italic" variant="plain" onclick={toggleItalic} />
|
|
403
|
+
<Button icon="fas fa-underline" variant="plain" onclick={toggleUnderline} />
|
|
404
|
+
</div>
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Form Actions
|
|
408
|
+
|
|
409
|
+
```svelte
|
|
410
|
+
<div class="form-actions">
|
|
411
|
+
<Button label="Reset" type="third" onclick={resetForm} />
|
|
412
|
+
<Button label="Save Draft" type="secondary" onclick={saveDraft} />
|
|
413
|
+
<Button label="Submit" type="primary" onclick={submitForm} />
|
|
414
|
+
</div>
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
## Browser Support
|
|
418
|
+
|
|
419
|
+
The Button component works in all modern browsers that support:
|
|
420
|
+
- ES6+ JavaScript
|
|
421
|
+
- CSS Flexbox
|
|
422
|
+
- Semantic button elements
|
|
423
|
+
|
|
424
|
+
## Performance
|
|
425
|
+
|
|
426
|
+
- Built-in click debouncing prevents performance issues from rapid clicking
|
|
427
|
+
- Lightweight implementation with minimal re-renders
|
|
428
|
+
- Efficient event handling with proper cleanup
|