@ticatec/uniface-element 0.2.4 → 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 (176) 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/README.md +596 -0
  70. package/dist/dialog/README_CN.md +596 -0
  71. package/dist/drawer/README.md +679 -1
  72. package/dist/drawer/README_CN.md +679 -0
  73. package/dist/group-box/group-check-box/GroupCheckBox.svelte +62 -5
  74. package/dist/group-box/group-check-box/GroupCheckBox.svelte.d.ts +7 -2
  75. package/dist/group-box/group-check-box/README.md +749 -0
  76. package/dist/group-box/group-check-box/README_CN.md +750 -0
  77. package/dist/group-box/group-radio-box/GroupRadioBox.svelte +69 -4
  78. package/dist/group-box/group-radio-box/GroupRadioBox.svelte.d.ts +8 -2
  79. package/dist/group-box/group-radio-box/README.md +920 -0
  80. package/dist/group-box/group-radio-box/README_CN.md +920 -0
  81. package/dist/image-files/README.md +1346 -0
  82. package/dist/image-files/README_CN.md +1346 -0
  83. package/dist/input-options-select/InputOptionsSelect.svelte +161 -65
  84. package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +4 -1
  85. package/dist/lib/forwardAllEvents.d.ts +3 -0
  86. package/dist/lib/forwardAllEvents.js +24 -0
  87. package/dist/list-box/README.md +579 -0
  88. package/dist/list-box/README_CN.md +682 -0
  89. package/dist/lookup-editor/LookupEditor.svelte +15 -3
  90. package/dist/lookup-editor/LookupEditor.svelte.d.ts +3 -4
  91. package/dist/lookup-editor/README.md +684 -0
  92. package/dist/lookup-editor/README_CN.md +684 -0
  93. package/dist/memo-editor/MemoEditor.svelte +77 -27
  94. package/dist/memo-editor/MemoEditor.svelte.d.ts +6 -3
  95. package/dist/memo-editor/README.md +819 -0
  96. package/dist/memo-editor/README_CN.md +819 -0
  97. package/dist/message-box/README.md +398 -0
  98. package/dist/message-box/README_CN.md +398 -0
  99. package/dist/number-editor/NumberEditor.svelte +2 -2
  100. package/dist/number-editor/NumberEditor.svelte.d.ts +1 -1
  101. package/dist/number-editor/README.md +353 -22
  102. package/dist/number-editor/README_CN.md +357 -0
  103. package/dist/number-range/README.md +443 -0
  104. package/dist/number-range/README_CN.md +443 -0
  105. package/dist/options-multi-select/OptionsMultiSelect.svelte +87 -12
  106. package/dist/options-multi-select/OptionsMultiSelect.svelte.d.ts +3 -1
  107. package/dist/options-multi-select/README.md +480 -0
  108. package/dist/options-multi-select/README_CN.md +480 -0
  109. package/dist/options-select/OptionsSelect.svelte +36 -5
  110. package/dist/options-select/OptionsSelect.svelte.d.ts +3 -4
  111. package/dist/options-select/README.md +632 -0
  112. package/dist/options-select/README_CN.md +632 -0
  113. package/dist/page/README.md +605 -0
  114. package/dist/page/README_CN.md +605 -0
  115. package/dist/pagination/README.md +946 -0
  116. package/dist/pagination/README_CN.md +946 -0
  117. package/dist/pagination-panel/README.md +1075 -0
  118. package/dist/pagination-panel/README_CN.md +1075 -0
  119. package/dist/popup-hint/README.md +841 -0
  120. package/dist/popup-hint/README_CN.md +840 -0
  121. package/dist/progress-bar/README.md +242 -0
  122. package/dist/progress-bar/README_CN.md +242 -0
  123. package/dist/progress-step-bar/README.md +316 -0
  124. package/dist/progress-step-bar/README_CN.md +316 -0
  125. package/dist/prompts-text-editor/PromptsTextEditor.svelte +6 -3
  126. package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +3 -1
  127. package/dist/prompts-text-editor/README.md +329 -0
  128. package/dist/prompts-text-editor/README_CN.md +329 -0
  129. package/dist/property-editor/README.md +969 -0
  130. package/dist/property-editor/README_CN.md +969 -0
  131. package/dist/radio-button/README.md +372 -0
  132. package/dist/radio-button/README_CN.md +372 -0
  133. package/dist/radio-button/RadioButton.svelte +32 -3
  134. package/dist/radio-button/RadioButton.svelte.d.ts +12 -1
  135. package/dist/search-box/README.md +425 -0
  136. package/dist/search-box/README_CN.md +424 -0
  137. package/dist/search-box/SearchBox.svelte +22 -6
  138. package/dist/search-box/SearchBox.svelte.d.ts +4 -1
  139. package/dist/tabs/README.md +919 -0
  140. package/dist/tabs/README_CN.md +920 -0
  141. package/dist/tag/README.md +922 -0
  142. package/dist/tag/README_CN.md +922 -0
  143. package/dist/text-editor/PasswordEditor.svelte +17 -2
  144. package/dist/text-editor/PasswordEditor.svelte.d.ts +3 -3
  145. package/dist/text-editor/PasswordEditor_README.md +551 -0
  146. package/dist/text-editor/PasswordEditor_README_CN.md +551 -0
  147. package/dist/text-editor/README.md +466 -0
  148. package/dist/text-editor/README_CN.md +466 -0
  149. package/dist/text-editor/TextEditor.svelte +51 -19
  150. package/dist/text-editor/TextEditor.svelte.d.ts +0 -1
  151. package/dist/time-editor/README.md +498 -24
  152. package/dist/time-editor/README_CN.md +498 -0
  153. package/dist/time-editor/TimeEditor.svelte +7 -3
  154. package/dist/time-editor/TimeEditor.svelte.d.ts +3 -1
  155. package/dist/toast/README.md +667 -0
  156. package/dist/toast/README_CN.md +667 -0
  157. package/dist/transfer/README.md +795 -0
  158. package/dist/transfer/Transfer.svelte +6 -4
  159. package/dist/transfer/Transfer.svelte.d.ts +3 -1
  160. package/dist/tree-view/README.md +761 -0
  161. package/dist/tree-view/README_CN.md +761 -0
  162. package/dist/tree-view/TreeView.svelte +5 -3
  163. package/dist/tree-view/TreeView.svelte.d.ts +3 -1
  164. package/dist/unit-number-editor/README.md +546 -20
  165. package/dist/unit-number-editor/README_CN.md +525 -0
  166. package/dist/unit-number-editor/UnitNumberEditor.svelte +62 -8
  167. package/dist/unit-number-editor/UnitNumberEditor.svelte.d.ts +5 -1
  168. package/docs/form-field/cn/README_CN.md +364 -0
  169. package/docs/form-field/en/README.md +364 -0
  170. package/docs/form-panel/flex-form/cn/README_CN.md +586 -0
  171. package/docs/form-panel/flex-form/en/README.md +586 -0
  172. package/docs/form-panel/flex-row-form/cn/README_CN.md +787 -0
  173. package/docs/form-panel/flex-row-form/en/README.md +787 -0
  174. package/docs/form-panel/grid-form/en/README.md +744 -0
  175. package/package.json +1 -1
  176. package/dist/drawer/README-CN.md +0 -1
@@ -0,0 +1,571 @@
1
+ # TextButton Component
2
+
3
+ A minimalist text-based button component designed for subtle actions, navigation links, and secondary interactions where a full button appearance might be too prominent.
4
+
5
+ ## Features
6
+
7
+ - **Text-Focused Design**: Clean, minimal appearance emphasizing text content
8
+ - **Multiple Types**: Default, primary, secondary, third, and forth button styles
9
+ - **Size Options**: Big, medium, and mini sizes
10
+ - **Event Handling**: Click, focus, and blur event support
11
+ - **Accessibility**: Proper semantic button element with disabled state
12
+ - **Debounce Protection**: Built-in click debouncing to prevent rapid firing
13
+ - **Custom Styling**: Flexible style customization
14
+ - **Slot Support**: Custom content via slots
15
+
16
+ ## Basic Usage
17
+
18
+ ```svelte
19
+ <script>
20
+ import TextButton from '@ticatec/uniface-element/TextButton';
21
+
22
+ const handleClick = (event) => {
23
+ console.log('Text button clicked!', event);
24
+ };
25
+ </script>
26
+
27
+ <TextButton
28
+ label="Click Me"
29
+ onclick={handleClick}
30
+ />
31
+ ```
32
+
33
+ ## Props
34
+
35
+ | Prop | Type | Default | Description |
36
+ |------|------|---------|-------------|
37
+ | `disabled` | `boolean` | `false` | Whether the button is disabled |
38
+ | `size` | `'big' \| 'medium' \| 'mini'` | `'medium'` | Button size |
39
+ | `label` | `string` | `''` | Button text label |
40
+ | `type` | `'default' \| 'primary' \| 'secondary' \| 'third' \| 'forth'` | `'default'` | Button type/style |
41
+ | `onclick` | `MouseClickHandler` | - | Click event handler |
42
+ | `onfocus` | `(event: FocusEvent) => void` | `() => {}` | Focus event handler |
43
+ | `onblur` | `(event: FocusEvent) => void` | `() => {}` | Blur event handler |
44
+ | `style` | `string` | `''` | Custom CSS styles |
45
+
46
+ ## Button Types
47
+
48
+ ```svelte
49
+ <!-- Default text button -->
50
+ <TextButton label="Default" type="default" onclick={handleClick} />
51
+
52
+ <!-- Primary text button -->
53
+ <TextButton label="Primary" type="primary" onclick={handleClick} />
54
+
55
+ <!-- Secondary text button -->
56
+ <TextButton label="Secondary" type="secondary" onclick={handleClick} />
57
+
58
+ <!-- Third level text button -->
59
+ <TextButton label="Third" type="third" onclick={handleClick} />
60
+
61
+ <!-- Fourth level text button -->
62
+ <TextButton label="Fourth" type="forth" onclick={handleClick} />
63
+ ```
64
+
65
+ ## Button Sizes
66
+
67
+ ```svelte
68
+ <!-- Mini text button -->
69
+ <TextButton label="Mini" size="mini" onclick={handleClick} />
70
+
71
+ <!-- Medium text button (default) -->
72
+ <TextButton label="Medium" size="medium" onclick={handleClick} />
73
+
74
+ <!-- Big text button -->
75
+ <TextButton label="Big" size="big" onclick={handleClick} />
76
+ ```
77
+
78
+ ## Common Use Cases
79
+
80
+ ### Navigation Links
81
+
82
+ ```svelte
83
+ <nav class="breadcrumb">
84
+ <TextButton label="Home" onclick={() => goto('/')} />
85
+ <span class="separator">›</span>
86
+ <TextButton label="Products" onclick={() => goto('/products')} />
87
+ <span class="separator">›</span>
88
+ <span>Current Page</span>
89
+ </nav>
90
+ ```
91
+
92
+ ### Secondary Actions
93
+
94
+ ```svelte
95
+ <div class="action-group">
96
+ <Button label="Save" type="primary" onclick={handleSave} />
97
+ <TextButton label="Cancel" onclick={handleCancel} />
98
+ <TextButton label="Save as Draft" onclick={handleSaveDraft} />
99
+ </div>
100
+ ```
101
+
102
+ ### Tab Navigation
103
+
104
+ ```svelte
105
+ <script>
106
+ let activeTab = 'overview';
107
+
108
+ const switchTab = (tab) => (event) => {
109
+ activeTab = tab;
110
+ };
111
+ </script>
112
+
113
+ <div class="tabs">
114
+ <TextButton
115
+ label="Overview"
116
+ type={activeTab === 'overview' ? 'primary' : 'default'}
117
+ onclick={switchTab('overview')}
118
+ />
119
+ <TextButton
120
+ label="Details"
121
+ type={activeTab === 'details' ? 'primary' : 'default'}
122
+ onclick={switchTab('details')}
123
+ />
124
+ <TextButton
125
+ label="Reviews"
126
+ type={activeTab === 'reviews' ? 'primary' : 'default'}
127
+ onclick={switchTab('reviews')}
128
+ />
129
+ </div>
130
+ ```
131
+
132
+ ### Menu Items
133
+
134
+ ```svelte
135
+ <div class="menu">
136
+ <TextButton label="Profile Settings" onclick={openProfile} />
137
+ <TextButton label="Account" onclick={openAccount} />
138
+ <TextButton label="Preferences" onclick={openPreferences} />
139
+ <TextButton label="Log Out" type="secondary" onclick={logout} />
140
+ </div>
141
+ ```
142
+
143
+ ## Event Handling
144
+
145
+ ```svelte
146
+ <script>
147
+ const handleClick = (event) => {
148
+ console.log('Text button clicked:', event);
149
+ };
150
+
151
+ const handleFocus = (event) => {
152
+ console.log('Text button focused:', event);
153
+ // Show additional context or highlight
154
+ };
155
+
156
+ const handleBlur = (event) => {
157
+ console.log('Text button blurred:', event);
158
+ // Remove highlight or context
159
+ };
160
+ </script>
161
+
162
+ <TextButton
163
+ label="Interactive Text"
164
+ onclick={handleClick}
165
+ onfocus={handleFocus}
166
+ onblur={handleBlur}
167
+ />
168
+ ```
169
+
170
+ ## Disabled State
171
+
172
+ ```svelte
173
+ <TextButton
174
+ label="Disabled Action"
175
+ disabled={true}
176
+ onclick={handleClick}
177
+ />
178
+ ```
179
+
180
+ ## Custom Styling
181
+
182
+ ```svelte
183
+ <TextButton
184
+ label="Custom Styled"
185
+ style="
186
+ color: #007acc;
187
+ text-decoration: underline;
188
+ font-weight: bold;
189
+ padding: 4px 8px;
190
+ "
191
+ onclick={handleClick}
192
+ />
193
+ ```
194
+
195
+ ## Slot Usage
196
+
197
+ ```svelte
198
+ <!-- Custom content instead of label -->
199
+ <TextButton onclick={handleCustomAction}>
200
+ <span class="custom-text">
201
+ <i class="fas fa-arrow-right"></i>
202
+ Learn More
203
+ </span>
204
+ </TextButton>
205
+
206
+ <!-- Rich content -->
207
+ <TextButton onclick={handleRichAction}>
208
+ <div class="rich-content">
209
+ <strong>Advanced Options</strong>
210
+ <small>Configure detailed settings</small>
211
+ </div>
212
+ </TextButton>
213
+ ```
214
+
215
+ ## Advanced Examples
216
+
217
+ ### Conditional Text Button
218
+
219
+ ```svelte
220
+ <script>
221
+ let isEditing = false;
222
+
223
+ const toggleEdit = (event) => {
224
+ isEditing = !isEditing;
225
+ };
226
+ </script>
227
+
228
+ <TextButton
229
+ label={isEditing ? "Save Changes" : "Edit"}
230
+ type={isEditing ? "primary" : "default"}
231
+ onclick={toggleEdit}
232
+ />
233
+ ```
234
+
235
+ ### Link-Style Button
236
+
237
+ ```svelte
238
+ <TextButton
239
+ label="Visit our website"
240
+ style="
241
+ color: #007acc;
242
+ text-decoration: underline;
243
+ background: none;
244
+ border: none;
245
+ padding: 0;
246
+ "
247
+ onclick={() => window.open('https://example.com', '_blank')}
248
+ />
249
+ ```
250
+
251
+ ### Expandable Section
252
+
253
+ ```svelte
254
+ <script>
255
+ let isExpanded = false;
256
+
257
+ const toggleSection = (event) => {
258
+ isExpanded = !isExpanded;
259
+ };
260
+ </script>
261
+
262
+ <div class="expandable-section">
263
+ <TextButton
264
+ label={isExpanded ? "Show Less ▲" : "Show More ▼"}
265
+ onclick={toggleSection}
266
+ />
267
+
268
+ {#if isExpanded}
269
+ <div class="expanded-content">
270
+ <p>Additional content goes here...</p>
271
+ </div>
272
+ {/if}
273
+ </div>
274
+ ```
275
+
276
+ ### Pagination Controls
277
+
278
+ ```svelte
279
+ <script>
280
+ let currentPage = 1;
281
+ let totalPages = 10;
282
+
283
+ const goToPage = (page) => (event) => {
284
+ if (page >= 1 && page <= totalPages) {
285
+ currentPage = page;
286
+ }
287
+ };
288
+ </script>
289
+
290
+ <div class="pagination">
291
+ <TextButton
292
+ label="Previous"
293
+ disabled={currentPage === 1}
294
+ onclick={goToPage(currentPage - 1)}
295
+ />
296
+
297
+ <span class="page-info">Page {currentPage} of {totalPages}</span>
298
+
299
+ <TextButton
300
+ label="Next"
301
+ disabled={currentPage === totalPages}
302
+ onclick={goToPage(currentPage + 1)}
303
+ />
304
+ </div>
305
+ ```
306
+
307
+ ### Filter Options
308
+
309
+ ```svelte
310
+ <script>
311
+ let activeFilters = new Set();
312
+
313
+ const toggleFilter = (filter) => (event) => {
314
+ if (activeFilters.has(filter)) {
315
+ activeFilters.delete(filter);
316
+ } else {
317
+ activeFilters.add(filter);
318
+ }
319
+ activeFilters = activeFilters; // Trigger reactivity
320
+ };
321
+ </script>
322
+
323
+ <div class="filters">
324
+ <TextButton
325
+ label="All"
326
+ type={activeFilters.size === 0 ? 'primary' : 'default'}
327
+ onclick={() => activeFilters = new Set()}
328
+ />
329
+ <TextButton
330
+ label="Active"
331
+ type={activeFilters.has('active') ? 'primary' : 'default'}
332
+ onclick={toggleFilter('active')}
333
+ />
334
+ <TextButton
335
+ label="Completed"
336
+ type={activeFilters.has('completed') ? 'primary' : 'default'}
337
+ onclick={toggleFilter('completed')}
338
+ />
339
+ </div>
340
+ ```
341
+
342
+ ### Form Actions
343
+
344
+ ```svelte
345
+ <div class="form-actions">
346
+ <Button label="Submit" type="primary" onclick={handleSubmit} />
347
+
348
+ <div class="secondary-actions">
349
+ <TextButton label="Save as Draft" onclick={saveDraft} />
350
+ <TextButton label="Preview" onclick={showPreview} />
351
+ <TextButton label="Reset" type="secondary" onclick={resetForm} />
352
+ </div>
353
+ </div>
354
+
355
+ <style>
356
+ .form-actions {
357
+ display: flex;
358
+ flex-direction: column;
359
+ gap: 12px;
360
+ align-items: flex-start;
361
+ }
362
+
363
+ .secondary-actions {
364
+ display: flex;
365
+ gap: 16px;
366
+ }
367
+ </style>
368
+ ```
369
+
370
+ ### Dropdown Menu Trigger
371
+
372
+ ```svelte
373
+ <script>
374
+ let showDropdown = false;
375
+
376
+ const toggleDropdown = (event) => {
377
+ showDropdown = !showDropdown;
378
+ };
379
+ </script>
380
+
381
+ <div class="dropdown-container">
382
+ <TextButton
383
+ label="Options ▼"
384
+ type={showDropdown ? 'primary' : 'default'}
385
+ onclick={toggleDropdown}
386
+ />
387
+
388
+ {#if showDropdown}
389
+ <div class="dropdown-menu">
390
+ <TextButton label="Option 1" onclick={selectOption1} />
391
+ <TextButton label="Option 2" onclick={selectOption2} />
392
+ <TextButton label="Option 3" onclick={selectOption3} />
393
+ </div>
394
+ {/if}
395
+ </div>
396
+ ```
397
+
398
+ ## Accessibility
399
+
400
+ The TextButton component follows accessibility best practices:
401
+
402
+ - Uses semantic `<button>` element
403
+ - Supports keyboard navigation (Tab, Enter, Space)
404
+ - Proper disabled state handling
405
+ - Focus and blur events for screen readers
406
+
407
+ ### Improving Accessibility
408
+
409
+ ```svelte
410
+ <!-- Provide context for screen readers -->
411
+ <TextButton
412
+ label="Delete"
413
+ onclick={handleDelete}
414
+ style="aria-label: Delete this item permanently"
415
+ />
416
+
417
+ <!-- Add role and description -->
418
+ <TextButton
419
+ label="Learn More"
420
+ onclick={showDetails}
421
+ style="role: button; aria-describedby: help-text"
422
+ />
423
+ <div id="help-text" style="display: none;">
424
+ Opens detailed information about this feature
425
+ </div>
426
+ ```
427
+
428
+ ## Styling
429
+
430
+ The component uses the following CSS classes:
431
+
432
+ - `.uniface-button` - Base button class
433
+ - `.text-button` - Text button specific styling
434
+ - `.{size}` - Size-specific styles (big, medium, mini)
435
+ - `.{type}` - Type-specific styles (default, primary, etc.)
436
+ - `.disabled` - Disabled state styles
437
+
438
+ ### Example CSS
439
+
440
+ ```css
441
+ .uniface-button.text-button {
442
+ display: inline-flex;
443
+ align-items: center;
444
+ justify-content: center;
445
+ padding: 4px 8px;
446
+ background: transparent;
447
+ border: none;
448
+ color: #333;
449
+ font-size: 14px;
450
+ cursor: pointer;
451
+ transition: all 0.2s ease;
452
+ text-decoration: none;
453
+ }
454
+
455
+ .uniface-button.text-button:hover:not(.disabled) {
456
+ background: rgba(0, 0, 0, 0.05);
457
+ text-decoration: underline;
458
+ }
459
+
460
+ .uniface-button.text-button:focus {
461
+ outline: 2px solid #007acc;
462
+ outline-offset: 2px;
463
+ }
464
+
465
+ .uniface-button.text-button.primary {
466
+ color: #007acc;
467
+ font-weight: 500;
468
+ }
469
+
470
+ .uniface-button.text-button.secondary {
471
+ color: #666;
472
+ }
473
+
474
+ .uniface-button.text-button.big {
475
+ padding: 8px 12px;
476
+ font-size: 16px;
477
+ }
478
+
479
+ .uniface-button.text-button.mini {
480
+ padding: 2px 4px;
481
+ font-size: 12px;
482
+ }
483
+
484
+ .uniface-button.text-button.disabled {
485
+ opacity: 0.6;
486
+ cursor: not-allowed;
487
+ }
488
+ ```
489
+
490
+ ## Best Practices
491
+
492
+ 1. **Appropriate Context**: Use text buttons for secondary actions and navigation
493
+ 2. **Clear Labels**: Provide descriptive labels that clearly indicate the action
494
+ 3. **Visual Hierarchy**: Use different types to establish proper visual hierarchy
495
+ 4. **Consistent Spacing**: Maintain consistent spacing between text buttons
496
+ 5. **Hover States**: Ensure hover states provide clear feedback
497
+ 6. **Accessibility**: Always consider keyboard navigation and screen readers
498
+ 7. **Context Awareness**: Ensure text buttons work well within their surrounding context
499
+
500
+ ## Common Patterns
501
+
502
+ ### Inline Actions
503
+
504
+ ```svelte
505
+ <p>
506
+ Your changes have been saved.
507
+ <TextButton label="Undo" onclick={undoChanges} />
508
+ </p>
509
+ ```
510
+
511
+ ### Card Actions
512
+
513
+ ```svelte
514
+ <div class="card">
515
+ <h3>Article Title</h3>
516
+ <p>Article excerpt...</p>
517
+
518
+ <div class="card-actions">
519
+ <TextButton label="Read More" type="primary" onclick={readMore} />
520
+ <TextButton label="Share" onclick={shareArticle} />
521
+ <TextButton label="Save" onclick={saveArticle} />
522
+ </div>
523
+ </div>
524
+ ```
525
+
526
+ ### List Item Actions
527
+
528
+ ```svelte
529
+ <div class="list-item">
530
+ <span class="item-name">Document.pdf</span>
531
+ <div class="item-actions">
532
+ <TextButton label="Download" onclick={download} />
533
+ <TextButton label="Share" onclick={share} />
534
+ <TextButton label="Delete" type="secondary" onclick={deleteFile} />
535
+ </div>
536
+ </div>
537
+ ```
538
+
539
+ ## Integration with Other Components
540
+
541
+ ```svelte
542
+ <!-- With modals -->
543
+ <Modal bind:open={showModal}>
544
+ <h2>Confirm Action</h2>
545
+ <p>Are you sure you want to continue?</p>
546
+
547
+ <div class="modal-actions">
548
+ <Button label="Confirm" type="primary" onclick={confirm} />
549
+ <TextButton label="Cancel" onclick={() => showModal = false} />
550
+ </div>
551
+ </Modal>
552
+
553
+ <!-- With tooltips -->
554
+ <Tooltip text="This action cannot be undone">
555
+ <TextButton label="Delete All" type="secondary" onclick={deleteAll} />
556
+ </Tooltip>
557
+ ```
558
+
559
+ ## Browser Support
560
+
561
+ The TextButton component works in all modern browsers that support:
562
+ - ES6+ JavaScript
563
+ - CSS Flexbox
564
+ - Semantic button elements
565
+
566
+ ## Performance
567
+
568
+ - Minimal styling for fast rendering
569
+ - Built-in click debouncing
570
+ - Efficient event handling
571
+ - Lightweight DOM structure