@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,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
|