@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.
- 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/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/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,532 @@
|
|
|
1
|
+
# CriteriaField Component
|
|
2
|
+
|
|
3
|
+
A simple layout component for creating consistent criteria and filter form fields with proper labeling and sizing. Perfect for search forms, filter panels, and criteria-based interfaces.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Consistent Layout**: Standardized label and field arrangement
|
|
8
|
+
- **Flexible Sizing**: Multiple predefined size options
|
|
9
|
+
- **Custom Styling**: Flexible label and container styling
|
|
10
|
+
- **Clean Structure**: Simple and lightweight component design
|
|
11
|
+
|
|
12
|
+
## Basic Usage
|
|
13
|
+
|
|
14
|
+
```svelte
|
|
15
|
+
<script>
|
|
16
|
+
import CriteriaField from '@ticatec/uniface-element/CriteriaField';
|
|
17
|
+
import TextEditor from '@ticatec/uniface-element/TextEditor';
|
|
18
|
+
|
|
19
|
+
let searchName = '';
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<CriteriaField label="Name" size="x25">
|
|
23
|
+
<TextEditor
|
|
24
|
+
variant="outlined"
|
|
25
|
+
bind:value={searchName}
|
|
26
|
+
placeholder="Enter name to search"
|
|
27
|
+
/>
|
|
28
|
+
</CriteriaField>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Props
|
|
32
|
+
|
|
33
|
+
| Prop | Type | Default | Description |
|
|
34
|
+
|------|------|---------|-------------|
|
|
35
|
+
| `label` | `string` | `"Label"` | Label text for the field |
|
|
36
|
+
| `style` | `string` | `''` | Custom CSS styles for the container |
|
|
37
|
+
| `label$style` | `string` | `''` | Custom CSS styles for the label |
|
|
38
|
+
| `size` | `'' \| 'x15' \| 'x20' \| 'x25' \| 'x30' \| 'x35' \| 'x40'` | `''` | Predefined size for the field |
|
|
39
|
+
| `labelSuffix` | `string` | `':'` | Suffix text after the label |
|
|
40
|
+
| `class` | `string` | `''` | Additional CSS classes |
|
|
41
|
+
|
|
42
|
+
## Size Options
|
|
43
|
+
|
|
44
|
+
The `size` prop provides consistent widths for different layout needs:
|
|
45
|
+
|
|
46
|
+
- `x15`: Extra small width
|
|
47
|
+
- `x20`: Small width
|
|
48
|
+
- `x25`: Medium-small width
|
|
49
|
+
- `x30`: Medium width
|
|
50
|
+
- `x35`: Medium-large width
|
|
51
|
+
- `x40`: Large width
|
|
52
|
+
|
|
53
|
+
## Basic Examples
|
|
54
|
+
|
|
55
|
+
### Simple Text Search Field
|
|
56
|
+
|
|
57
|
+
```svelte
|
|
58
|
+
<script>
|
|
59
|
+
import CriteriaField from '@ticatec/uniface-element/CriteriaField';
|
|
60
|
+
import TextEditor from '@ticatec/uniface-element/TextEditor';
|
|
61
|
+
|
|
62
|
+
let searchText = '';
|
|
63
|
+
</script>
|
|
64
|
+
|
|
65
|
+
<CriteriaField label="Search" size="x30">
|
|
66
|
+
<TextEditor
|
|
67
|
+
variant="outlined"
|
|
68
|
+
bind:value={searchText}
|
|
69
|
+
placeholder="* is a wildcard character"
|
|
70
|
+
/>
|
|
71
|
+
</CriteriaField>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Date Range Filter
|
|
75
|
+
|
|
76
|
+
```svelte
|
|
77
|
+
<script>
|
|
78
|
+
import CriteriaField from '@ticatec/uniface-element/CriteriaField';
|
|
79
|
+
import DateRange from '@ticatec/uniface-element/DateRange';
|
|
80
|
+
|
|
81
|
+
let dateFrom = '';
|
|
82
|
+
let dateTo = '';
|
|
83
|
+
</script>
|
|
84
|
+
|
|
85
|
+
<CriteriaField label="Date Range" size="x35">
|
|
86
|
+
<DateRange
|
|
87
|
+
variant="outlined"
|
|
88
|
+
bind:fromValue={dateFrom}
|
|
89
|
+
bind:toValue={dateTo}
|
|
90
|
+
/>
|
|
91
|
+
</CriteriaField>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Number Range Filter
|
|
95
|
+
|
|
96
|
+
```svelte
|
|
97
|
+
<script>
|
|
98
|
+
import CriteriaField from '@ticatec/uniface-element/CriteriaField';
|
|
99
|
+
import NumberRange from '@ticatec/uniface-element/NumberRange';
|
|
100
|
+
|
|
101
|
+
let priceFrom = null;
|
|
102
|
+
let priceTo = null;
|
|
103
|
+
</script>
|
|
104
|
+
|
|
105
|
+
<CriteriaField label="Price Range" size="x30">
|
|
106
|
+
<NumberRange
|
|
107
|
+
variant="outlined"
|
|
108
|
+
bind:fromValue={priceFrom}
|
|
109
|
+
bind:toValue={priceTo}
|
|
110
|
+
placeholder="0.00"
|
|
111
|
+
/>
|
|
112
|
+
</CriteriaField>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Custom Styled Label
|
|
116
|
+
|
|
117
|
+
```svelte
|
|
118
|
+
<script>
|
|
119
|
+
import CriteriaField from '@ticatec/uniface-element/CriteriaField';
|
|
120
|
+
import SearchBox from '@ticatec/uniface-element/SearchBox';
|
|
121
|
+
|
|
122
|
+
let query = '';
|
|
123
|
+
</script>
|
|
124
|
+
|
|
125
|
+
<CriteriaField
|
|
126
|
+
label="Advanced Search"
|
|
127
|
+
size="x40"
|
|
128
|
+
label$style="color: #2563eb; font-weight: 600; font-size: 14px;"
|
|
129
|
+
labelSuffix=""
|
|
130
|
+
>
|
|
131
|
+
<SearchBox
|
|
132
|
+
bind:value={query}
|
|
133
|
+
placeholder="Enter search terms..."
|
|
134
|
+
/>
|
|
135
|
+
</CriteriaField>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Advanced Examples
|
|
139
|
+
|
|
140
|
+
### Search Form with Multiple Criteria
|
|
141
|
+
|
|
142
|
+
```svelte
|
|
143
|
+
<script>
|
|
144
|
+
import CriteriaField from '@ticatec/uniface-element/CriteriaField';
|
|
145
|
+
import TextEditor from '@ticatec/uniface-element/TextEditor';
|
|
146
|
+
import DateRange from '@ticatec/uniface-element/DateRange';
|
|
147
|
+
import OptionsSelect from '@ticatec/uniface-element/OptionsSelect';
|
|
148
|
+
import CheckBox from '@ticatec/uniface-element/CheckBox';
|
|
149
|
+
|
|
150
|
+
let criteria = {
|
|
151
|
+
name: '',
|
|
152
|
+
email: '',
|
|
153
|
+
dateFrom: '',
|
|
154
|
+
dateTo: '',
|
|
155
|
+
status: '',
|
|
156
|
+
includeInactive: false
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
const statusOptions = [
|
|
160
|
+
{ code: 'active', text: 'Active' },
|
|
161
|
+
{ code: 'inactive', text: 'Inactive' },
|
|
162
|
+
{ code: 'pending', text: 'Pending' }
|
|
163
|
+
];
|
|
164
|
+
|
|
165
|
+
const handleSearch = () => {
|
|
166
|
+
console.log('Searching with criteria:', criteria);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const clearCriteria = () => {
|
|
170
|
+
criteria = {
|
|
171
|
+
name: '',
|
|
172
|
+
email: '',
|
|
173
|
+
dateFrom: '',
|
|
174
|
+
dateTo: '',
|
|
175
|
+
status: '',
|
|
176
|
+
includeInactive: false
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
</script>
|
|
180
|
+
|
|
181
|
+
<div class="search-form">
|
|
182
|
+
<h3>Customer Search</h3>
|
|
183
|
+
|
|
184
|
+
<div class="criteria-row">
|
|
185
|
+
<CriteriaField label="Name" size="x25">
|
|
186
|
+
<TextEditor
|
|
187
|
+
variant="outlined"
|
|
188
|
+
bind:value={criteria.name}
|
|
189
|
+
placeholder="Customer name (* for wildcard)"
|
|
190
|
+
/>
|
|
191
|
+
</CriteriaField>
|
|
192
|
+
|
|
193
|
+
<CriteriaField label="Email" size="x30">
|
|
194
|
+
<TextEditor
|
|
195
|
+
variant="outlined"
|
|
196
|
+
bind:value={criteria.email}
|
|
197
|
+
placeholder="email@domain.com"
|
|
198
|
+
/>
|
|
199
|
+
</CriteriaField>
|
|
200
|
+
|
|
201
|
+
<CriteriaField label="Status" size="x20">
|
|
202
|
+
<OptionsSelect
|
|
203
|
+
variant="outlined"
|
|
204
|
+
bind:value={criteria.status}
|
|
205
|
+
options={statusOptions}
|
|
206
|
+
placeholder="All statuses"
|
|
207
|
+
/>
|
|
208
|
+
</CriteriaField>
|
|
209
|
+
</div>
|
|
210
|
+
|
|
211
|
+
<div class="criteria-row">
|
|
212
|
+
<CriteriaField label="Registration Date" size="x35">
|
|
213
|
+
<DateRange
|
|
214
|
+
variant="outlined"
|
|
215
|
+
bind:fromValue={criteria.dateFrom}
|
|
216
|
+
bind:toValue={criteria.dateTo}
|
|
217
|
+
/>
|
|
218
|
+
</CriteriaField>
|
|
219
|
+
|
|
220
|
+
<CriteriaField label="Options" size="x25" labelSuffix="">
|
|
221
|
+
<CheckBox
|
|
222
|
+
label="Include inactive customers"
|
|
223
|
+
bind:value={criteria.includeInactive}
|
|
224
|
+
/>
|
|
225
|
+
</CriteriaField>
|
|
226
|
+
</div>
|
|
227
|
+
|
|
228
|
+
<div class="form-actions">
|
|
229
|
+
<button class="btn-primary" on:click={handleSearch}>Search</button>
|
|
230
|
+
<button class="btn-secondary" on:click={clearCriteria}>Clear</button>
|
|
231
|
+
</div>
|
|
232
|
+
</div>
|
|
233
|
+
|
|
234
|
+
<style>
|
|
235
|
+
.search-form {
|
|
236
|
+
padding: 24px;
|
|
237
|
+
border: 1px solid #e5e7eb;
|
|
238
|
+
border-radius: 8px;
|
|
239
|
+
background: #f9fafb;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.criteria-row {
|
|
243
|
+
display: flex;
|
|
244
|
+
gap: 16px;
|
|
245
|
+
margin: 16px 0;
|
|
246
|
+
flex-wrap: wrap;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.form-actions {
|
|
250
|
+
margin-top: 24px;
|
|
251
|
+
display: flex;
|
|
252
|
+
gap: 12px;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.btn-primary, .btn-secondary {
|
|
256
|
+
padding: 8px 16px;
|
|
257
|
+
border-radius: 4px;
|
|
258
|
+
border: 1px solid;
|
|
259
|
+
cursor: pointer;
|
|
260
|
+
font-weight: 500;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.btn-primary {
|
|
264
|
+
background: #2563eb;
|
|
265
|
+
color: white;
|
|
266
|
+
border-color: #2563eb;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.btn-secondary {
|
|
270
|
+
background: white;
|
|
271
|
+
color: #374151;
|
|
272
|
+
border-color: #d1d5db;
|
|
273
|
+
}
|
|
274
|
+
</style>
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Filter Panel Layout
|
|
278
|
+
|
|
279
|
+
```svelte
|
|
280
|
+
<script>
|
|
281
|
+
import CriteriaField from '@ticatec/uniface-element/CriteriaField';
|
|
282
|
+
import TextEditor from '@ticatec/uniface-element/TextEditor';
|
|
283
|
+
import NumberRange from '@ticatec/uniface-element/NumberRange';
|
|
284
|
+
import OptionsSelect from '@ticatec/uniface-element/OptionsSelect';
|
|
285
|
+
import OptionsMultiSelect from '@ticatec/uniface-element/OptionsMultiSelect';
|
|
286
|
+
|
|
287
|
+
let filters = {
|
|
288
|
+
productName: '',
|
|
289
|
+
priceFrom: null,
|
|
290
|
+
priceTo: null,
|
|
291
|
+
category: '',
|
|
292
|
+
tags: '',
|
|
293
|
+
availability: ''
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
const categories = [
|
|
297
|
+
{ code: 'electronics', text: 'Electronics' },
|
|
298
|
+
{ code: 'clothing', text: 'Clothing' },
|
|
299
|
+
{ code: 'books', text: 'Books' },
|
|
300
|
+
{ code: 'home', text: 'Home & Garden' }
|
|
301
|
+
];
|
|
302
|
+
|
|
303
|
+
const availabilityOptions = [
|
|
304
|
+
{ code: 'in-stock', text: 'In Stock' },
|
|
305
|
+
{ code: 'out-of-stock', text: 'Out of Stock' },
|
|
306
|
+
{ code: 'pre-order', text: 'Pre-order' }
|
|
307
|
+
];
|
|
308
|
+
|
|
309
|
+
const applyFilters = () => {
|
|
310
|
+
console.log('Applying filters:', filters);
|
|
311
|
+
};
|
|
312
|
+
</script>
|
|
313
|
+
|
|
314
|
+
<div class="filter-panel">
|
|
315
|
+
<h3>Product Filters</h3>
|
|
316
|
+
|
|
317
|
+
<div class="filter-group">
|
|
318
|
+
<h4>Basic</h4>
|
|
319
|
+
<CriteriaField label="Product Name" size="x35">
|
|
320
|
+
<TextEditor
|
|
321
|
+
variant="outlined"
|
|
322
|
+
bind:value={filters.productName}
|
|
323
|
+
placeholder="Search by product name"
|
|
324
|
+
/>
|
|
325
|
+
</CriteriaField>
|
|
326
|
+
|
|
327
|
+
<CriteriaField label="Category" size="x25">
|
|
328
|
+
<OptionsSelect
|
|
329
|
+
variant="outlined"
|
|
330
|
+
bind:value={filters.category}
|
|
331
|
+
options={categories}
|
|
332
|
+
placeholder="Select category"
|
|
333
|
+
/>
|
|
334
|
+
</CriteriaField>
|
|
335
|
+
</div>
|
|
336
|
+
|
|
337
|
+
<div class="filter-group">
|
|
338
|
+
<h4>Pricing</h4>
|
|
339
|
+
<CriteriaField label="Price Range" size="x30">
|
|
340
|
+
<NumberRange
|
|
341
|
+
variant="outlined"
|
|
342
|
+
bind:fromValue={filters.priceFrom}
|
|
343
|
+
bind:toValue={filters.priceTo}
|
|
344
|
+
placeholder="0.00"
|
|
345
|
+
/>
|
|
346
|
+
</CriteriaField>
|
|
347
|
+
</div>
|
|
348
|
+
|
|
349
|
+
<div class="filter-group">
|
|
350
|
+
<h4>Advanced</h4>
|
|
351
|
+
<CriteriaField label="Tags" size="x35">
|
|
352
|
+
<OptionsMultiSelect
|
|
353
|
+
variant="outlined"
|
|
354
|
+
bind:value={filters.tags}
|
|
355
|
+
options={[
|
|
356
|
+
{ code: 'new', text: 'New' },
|
|
357
|
+
{ code: 'sale', text: 'On Sale' },
|
|
358
|
+
{ code: 'featured', text: 'Featured' },
|
|
359
|
+
{ code: 'bestseller', text: 'Bestseller' }
|
|
360
|
+
]}
|
|
361
|
+
placeholder="Select tags"
|
|
362
|
+
/>
|
|
363
|
+
</CriteriaField>
|
|
364
|
+
|
|
365
|
+
<CriteriaField label="Availability" size="x25">
|
|
366
|
+
<OptionsSelect
|
|
367
|
+
variant="outlined"
|
|
368
|
+
bind:value={filters.availability}
|
|
369
|
+
options={availabilityOptions}
|
|
370
|
+
placeholder="Any availability"
|
|
371
|
+
/>
|
|
372
|
+
</CriteriaField>
|
|
373
|
+
</div>
|
|
374
|
+
|
|
375
|
+
<div class="filter-actions">
|
|
376
|
+
<button class="apply-btn" on:click={applyFilters}>Apply Filters</button>
|
|
377
|
+
</div>
|
|
378
|
+
</div>
|
|
379
|
+
|
|
380
|
+
<style>
|
|
381
|
+
.filter-panel {
|
|
382
|
+
width: 300px;
|
|
383
|
+
border: 1px solid #e5e7eb;
|
|
384
|
+
border-radius: 8px;
|
|
385
|
+
background: white;
|
|
386
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
|
387
|
+
padding: 16px;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.filter-panel h3 {
|
|
391
|
+
margin: 0 0 16px 0;
|
|
392
|
+
padding-bottom: 8px;
|
|
393
|
+
border-bottom: 1px solid #e5e7eb;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
.filter-group {
|
|
397
|
+
margin: 16px 0;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
.filter-group h4 {
|
|
401
|
+
margin: 0 0 12px 0;
|
|
402
|
+
font-size: 14px;
|
|
403
|
+
color: #6b7280;
|
|
404
|
+
text-transform: uppercase;
|
|
405
|
+
font-weight: 600;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.filter-actions {
|
|
409
|
+
margin-top: 24px;
|
|
410
|
+
padding-top: 16px;
|
|
411
|
+
border-top: 1px solid #e5e7eb;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
.apply-btn {
|
|
415
|
+
width: 100%;
|
|
416
|
+
padding: 8px 16px;
|
|
417
|
+
background: #2563eb;
|
|
418
|
+
color: white;
|
|
419
|
+
border: none;
|
|
420
|
+
border-radius: 4px;
|
|
421
|
+
cursor: pointer;
|
|
422
|
+
font-weight: 500;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
.apply-btn:hover {
|
|
426
|
+
background: #1d4ed8;
|
|
427
|
+
}
|
|
428
|
+
</style>
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### Different Sizes Comparison
|
|
432
|
+
|
|
433
|
+
```svelte
|
|
434
|
+
<script>
|
|
435
|
+
import CriteriaField from '@ticatec/uniface-element/CriteriaField';
|
|
436
|
+
import TextEditor from '@ticatec/uniface-element/TextEditor';
|
|
437
|
+
|
|
438
|
+
let values = {};
|
|
439
|
+
</script>
|
|
440
|
+
|
|
441
|
+
<div class="size-comparison">
|
|
442
|
+
<h3>Size Comparison</h3>
|
|
443
|
+
|
|
444
|
+
<CriteriaField label="Extra Small (x15)" size="x15">
|
|
445
|
+
<TextEditor variant="outlined" bind:value={values.x15} />
|
|
446
|
+
</CriteriaField>
|
|
447
|
+
|
|
448
|
+
<CriteriaField label="Small (x20)" size="x20">
|
|
449
|
+
<TextEditor variant="outlined" bind:value={values.x20} />
|
|
450
|
+
</CriteriaField>
|
|
451
|
+
|
|
452
|
+
<CriteriaField label="Medium-Small (x25)" size="x25">
|
|
453
|
+
<TextEditor variant="outlined" bind:value={values.x25} />
|
|
454
|
+
</CriteriaField>
|
|
455
|
+
|
|
456
|
+
<CriteriaField label="Medium (x30)" size="x30">
|
|
457
|
+
<TextEditor variant="outlined" bind:value={values.x30} />
|
|
458
|
+
</CriteriaField>
|
|
459
|
+
|
|
460
|
+
<CriteriaField label="Medium-Large (x35)" size="x35">
|
|
461
|
+
<TextEditor variant="outlined" bind:value={values.x35} />
|
|
462
|
+
</CriteriaField>
|
|
463
|
+
|
|
464
|
+
<CriteriaField label="Large (x40)" size="x40">
|
|
465
|
+
<TextEditor variant="outlined" bind:value={values.x40} />
|
|
466
|
+
</CriteriaField>
|
|
467
|
+
</div>
|
|
468
|
+
|
|
469
|
+
<style>
|
|
470
|
+
.size-comparison {
|
|
471
|
+
display: flex;
|
|
472
|
+
flex-direction: column;
|
|
473
|
+
gap: 16px;
|
|
474
|
+
padding: 20px;
|
|
475
|
+
max-width: 600px;
|
|
476
|
+
}
|
|
477
|
+
</style>
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
## Best Practices
|
|
481
|
+
|
|
482
|
+
```svelte
|
|
483
|
+
<!-- Good: Clear, descriptive labels -->
|
|
484
|
+
<CriteriaField label="Customer Email Address">
|
|
485
|
+
<TextEditor variant="outlined" type="email" />
|
|
486
|
+
</CriteriaField>
|
|
487
|
+
|
|
488
|
+
<!-- Good: Consistent sizing in related fields -->
|
|
489
|
+
<div class="criteria-group">
|
|
490
|
+
<CriteriaField label="First Name" size="x25">
|
|
491
|
+
<TextEditor variant="outlined" />
|
|
492
|
+
</CriteriaField>
|
|
493
|
+
<CriteriaField label="Last Name" size="x25">
|
|
494
|
+
<TextEditor variant="outlined" />
|
|
495
|
+
</CriteriaField>
|
|
496
|
+
</div>
|
|
497
|
+
|
|
498
|
+
<!-- Good: Appropriate field types for content -->
|
|
499
|
+
<CriteriaField label="Birth Date" size="x20">
|
|
500
|
+
<DatePicker variant="outlined" />
|
|
501
|
+
</CriteriaField>
|
|
502
|
+
|
|
503
|
+
<!-- Good: Custom label styling for emphasis -->
|
|
504
|
+
<CriteriaField
|
|
505
|
+
label="Important Field"
|
|
506
|
+
label$style="color: red; font-weight: bold;"
|
|
507
|
+
>
|
|
508
|
+
<TextEditor variant="outlined" />
|
|
509
|
+
</CriteriaField>
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
## CSS Classes
|
|
513
|
+
|
|
514
|
+
The component applies the following CSS classes:
|
|
515
|
+
|
|
516
|
+
- `.uniface-filter-field` - Base class
|
|
517
|
+
- `.x15`, `.x20`, `.x25`, `.x30`, `.x35`, `.x40` - Size classes
|
|
518
|
+
|
|
519
|
+
## Browser Support
|
|
520
|
+
|
|
521
|
+
Works in all modern browsers that support:
|
|
522
|
+
- ES6+ JavaScript
|
|
523
|
+
- Modern DOM APIs
|
|
524
|
+
- CSS custom properties
|
|
525
|
+
- Flexbox layout
|
|
526
|
+
|
|
527
|
+
## Performance Considerations
|
|
528
|
+
|
|
529
|
+
- Lightweight component structure
|
|
530
|
+
- Minimal DOM elements
|
|
531
|
+
- Efficient slot-based content projection
|
|
532
|
+
- No complex state management
|