@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.
Files changed (178) hide show
  1. package/dist/accordion/README.md +169 -0
  2. package/dist/accordion/README_CN.md +176 -0
  3. package/dist/action-bar/README.md +275 -0
  4. package/dist/action-bar/README_CN.md +285 -0
  5. package/dist/app-layout/README.md +374 -0
  6. package/dist/app-layout/README_CN.md +381 -0
  7. package/dist/app-top-bar/README.md +357 -0
  8. package/dist/app-top-bar/README_CN.md +365 -0
  9. package/dist/attachment-files/AttachmentFilesField.svelte +67 -1
  10. package/dist/attachment-files/AttachmentFilesField.svelte.d.ts +8 -1
  11. package/dist/base-calendar/CalendarBase.svelte +0 -3
  12. package/dist/box/README.md +385 -0
  13. package/dist/box/README_CN.md +393 -0
  14. package/dist/breadcrumbs/README.md +442 -0
  15. package/dist/breadcrumbs/README_CN.md +442 -0
  16. package/dist/button/Button.svelte +27 -7
  17. package/dist/button/Button.svelte.d.ts +3 -1
  18. package/dist/button/IconButton.svelte +26 -6
  19. package/dist/button/IconButton.svelte.d.ts +3 -1
  20. package/dist/button/IconButton_README.md +513 -0
  21. package/dist/button/IconButton_README_CN.md +513 -0
  22. package/dist/button/README.md +428 -0
  23. package/dist/button/README_CN.md +428 -0
  24. package/dist/button/TextButton.svelte +26 -6
  25. package/dist/button/TextButton.svelte.d.ts +3 -1
  26. package/dist/button/TextButton_README.md +571 -0
  27. package/dist/button/TextButton_README_CN.md +571 -0
  28. package/dist/card/README.md +666 -0
  29. package/dist/card/README_CN.md +666 -0
  30. package/dist/cascade-options-select/CascadeOptionSelect.svelte +43 -7
  31. package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +3 -4
  32. package/dist/cascade-options-select/README.md +663 -2
  33. package/dist/cascade-options-select/README_CN.md +664 -0
  34. package/dist/checkbox/CheckBox.svelte +20 -6
  35. package/dist/checkbox/CheckBox.svelte.d.ts +4 -2
  36. package/dist/checkbox/README.md +562 -0
  37. package/dist/checkbox/README_CN.md +727 -0
  38. package/dist/common-editor/NumberInput.svelte +39 -26
  39. package/dist/common-editor/NumberInput.svelte.d.ts +5 -1
  40. package/dist/concise-data-table/ConciseListTable.svelte +133 -36
  41. package/dist/concise-data-table/ConciseListTable.svelte.d.ts +8 -1
  42. package/dist/concise-data-table/DataCell.svelte +5 -6
  43. package/dist/concise-data-table/DataRow.svelte +22 -2
  44. package/dist/concise-data-table/DataRow.svelte.d.ts +1 -0
  45. package/dist/concise-data-table/README.md +606 -0
  46. package/dist/concise-data-table/README_CN.md +611 -0
  47. package/dist/context-menu/ContextMenu.svelte +138 -21
  48. package/dist/context-menu/ContextMenu.svelte.d.ts +5 -0
  49. package/dist/context-menu/ContextMenuItem.d.ts +20 -4
  50. package/dist/context-menu/README.md +551 -0
  51. package/dist/context-menu/README_CN.md +551 -0
  52. package/dist/criteria-field/CriteriaField.svelte +3 -5
  53. package/dist/criteria-field/README.md +532 -0
  54. package/dist/criteria-field/README_CN.md +532 -0
  55. package/dist/data-table/README.md +712 -0
  56. package/dist/data-table/README_CN.md +712 -0
  57. package/dist/date-picker/DatePicker.svelte +44 -7
  58. package/dist/date-picker/DatePicker.svelte.d.ts +3 -4
  59. package/dist/date-picker/DateTimePicker.svelte +32 -8
  60. package/dist/date-picker/DateTimePicker.svelte.d.ts +3 -4
  61. package/dist/date-picker/README.md +326 -0
  62. package/dist/date-picker/README_CN.md +316 -0
  63. package/dist/date-picker/ScrollBar.svelte +18 -8
  64. package/dist/date-picker/ScrollBar.svelte.d.ts +1 -1
  65. package/dist/date-picker/TimePanel.svelte +5 -5
  66. package/dist/date-picker/TimePanel.svelte.d.ts +1 -1
  67. package/dist/date-range/README.md +374 -0
  68. package/dist/date-range/README_CN.md +374 -0
  69. package/dist/dialog/DialogBoard.svelte +1 -1
  70. package/dist/dialog/README.md +596 -0
  71. package/dist/dialog/README_CN.md +596 -0
  72. package/dist/drawer/README.md +679 -1
  73. package/dist/drawer/README_CN.md +679 -0
  74. package/dist/group-box/group-check-box/GroupCheckBox.svelte +62 -5
  75. package/dist/group-box/group-check-box/GroupCheckBox.svelte.d.ts +7 -2
  76. package/dist/group-box/group-check-box/README.md +749 -0
  77. package/dist/group-box/group-check-box/README_CN.md +750 -0
  78. package/dist/group-box/group-radio-box/GroupRadioBox.svelte +69 -4
  79. package/dist/group-box/group-radio-box/GroupRadioBox.svelte.d.ts +8 -2
  80. package/dist/group-box/group-radio-box/README.md +920 -0
  81. package/dist/group-box/group-radio-box/README_CN.md +920 -0
  82. package/dist/image-files/README.md +1346 -0
  83. package/dist/image-files/README_CN.md +1346 -0
  84. package/dist/input-options-select/InputOptionsSelect.svelte +161 -65
  85. package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +4 -1
  86. package/dist/lib/forwardAllEvents.d.ts +3 -0
  87. package/dist/lib/forwardAllEvents.js +24 -0
  88. package/dist/list-box/README.md +579 -0
  89. package/dist/list-box/README_CN.md +682 -0
  90. package/dist/lookup-editor/LookupEditor.svelte +15 -3
  91. package/dist/lookup-editor/LookupEditor.svelte.d.ts +3 -4
  92. package/dist/lookup-editor/README.md +684 -0
  93. package/dist/lookup-editor/README_CN.md +684 -0
  94. package/dist/memo-editor/MemoEditor.svelte +77 -27
  95. package/dist/memo-editor/MemoEditor.svelte.d.ts +6 -3
  96. package/dist/memo-editor/README.md +819 -0
  97. package/dist/memo-editor/README_CN.md +819 -0
  98. package/dist/message-box/README.md +398 -0
  99. package/dist/message-box/README_CN.md +398 -0
  100. package/dist/number-editor/NumberEditor.svelte +2 -2
  101. package/dist/number-editor/NumberEditor.svelte.d.ts +1 -1
  102. package/dist/number-editor/README.md +353 -22
  103. package/dist/number-editor/README_CN.md +357 -0
  104. package/dist/number-range/README.md +443 -0
  105. package/dist/number-range/README_CN.md +443 -0
  106. package/dist/options-multi-select/OptionsMultiSelect.svelte +87 -12
  107. package/dist/options-multi-select/OptionsMultiSelect.svelte.d.ts +3 -1
  108. package/dist/options-multi-select/README.md +480 -0
  109. package/dist/options-multi-select/README_CN.md +480 -0
  110. package/dist/options-select/OptionsSelect.svelte +36 -5
  111. package/dist/options-select/OptionsSelect.svelte.d.ts +3 -4
  112. package/dist/options-select/README.md +632 -0
  113. package/dist/options-select/README_CN.md +632 -0
  114. package/dist/page/README.md +605 -0
  115. package/dist/page/README_CN.md +605 -0
  116. package/dist/pagination/README.md +946 -0
  117. package/dist/pagination/README_CN.md +946 -0
  118. package/dist/pagination-panel/README.md +1075 -0
  119. package/dist/pagination-panel/README_CN.md +1075 -0
  120. package/dist/popup-hint/README.md +841 -0
  121. package/dist/popup-hint/README_CN.md +840 -0
  122. package/dist/progress-bar/README.md +242 -0
  123. package/dist/progress-bar/README_CN.md +242 -0
  124. package/dist/progress-step-bar/README.md +316 -0
  125. package/dist/progress-step-bar/README_CN.md +316 -0
  126. package/dist/prompts-text-editor/PromptsTextEditor.svelte +6 -3
  127. package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +3 -1
  128. package/dist/prompts-text-editor/README.md +329 -0
  129. package/dist/prompts-text-editor/README_CN.md +329 -0
  130. package/dist/property-editor/README.md +969 -0
  131. package/dist/property-editor/README_CN.md +969 -0
  132. package/dist/radio-button/README.md +372 -0
  133. package/dist/radio-button/README_CN.md +372 -0
  134. package/dist/radio-button/RadioButton.svelte +32 -3
  135. package/dist/radio-button/RadioButton.svelte.d.ts +12 -1
  136. package/dist/search-box/README.md +425 -0
  137. package/dist/search-box/README_CN.md +424 -0
  138. package/dist/search-box/SearchBox.svelte +22 -6
  139. package/dist/search-box/SearchBox.svelte.d.ts +4 -1
  140. package/dist/tabs/README.md +919 -0
  141. package/dist/tabs/README_CN.md +920 -0
  142. package/dist/tag/README.md +922 -0
  143. package/dist/tag/README_CN.md +922 -0
  144. package/dist/text-editor/PasswordEditor.svelte +17 -2
  145. package/dist/text-editor/PasswordEditor.svelte.d.ts +3 -3
  146. package/dist/text-editor/PasswordEditor_README.md +551 -0
  147. package/dist/text-editor/PasswordEditor_README_CN.md +551 -0
  148. package/dist/text-editor/README.md +466 -0
  149. package/dist/text-editor/README_CN.md +466 -0
  150. package/dist/text-editor/TextEditor.svelte +51 -19
  151. package/dist/text-editor/TextEditor.svelte.d.ts +0 -1
  152. package/dist/ticatec-uniface-web.css +1 -0
  153. package/dist/time-editor/README.md +498 -24
  154. package/dist/time-editor/README_CN.md +498 -0
  155. package/dist/time-editor/TimeEditor.svelte +7 -3
  156. package/dist/time-editor/TimeEditor.svelte.d.ts +3 -1
  157. package/dist/toast/README.md +667 -0
  158. package/dist/toast/README_CN.md +667 -0
  159. package/dist/transfer/README.md +795 -0
  160. package/dist/transfer/Transfer.svelte +6 -4
  161. package/dist/transfer/Transfer.svelte.d.ts +3 -1
  162. package/dist/tree-view/README.md +761 -0
  163. package/dist/tree-view/README_CN.md +761 -0
  164. package/dist/tree-view/TreeView.svelte +5 -3
  165. package/dist/tree-view/TreeView.svelte.d.ts +3 -1
  166. package/dist/unit-number-editor/README.md +546 -20
  167. package/dist/unit-number-editor/README_CN.md +525 -0
  168. package/dist/unit-number-editor/UnitNumberEditor.svelte +62 -8
  169. package/dist/unit-number-editor/UnitNumberEditor.svelte.d.ts +5 -1
  170. package/docs/form-field/cn/README_CN.md +364 -0
  171. package/docs/form-field/en/README.md +364 -0
  172. package/docs/form-panel/flex-form/cn/README_CN.md +586 -0
  173. package/docs/form-panel/flex-form/en/README.md +586 -0
  174. package/docs/form-panel/flex-row-form/cn/README_CN.md +787 -0
  175. package/docs/form-panel/flex-row-form/en/README.md +787 -0
  176. package/docs/form-panel/grid-form/en/README.md +744 -0
  177. package/package.json +1 -1
  178. package/dist/drawer/README-CN.md +0 -1
@@ -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