@ticatec/uniface-element 0.2.0 → 0.2.2

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 (209) hide show
  1. package/README.md +320 -1
  2. package/README_CN.md +392 -0
  3. package/dist/accordion/Accordion.svelte +1 -1
  4. package/dist/action-bar/ActionBar.svelte +7 -1
  5. package/dist/attachment-files/FileRender.svelte +1 -1
  6. package/dist/attachment-files/FileUploadBar.svelte +7 -6
  7. package/dist/attachment-files/FileUploadPanel.svelte +2 -2
  8. package/dist/base-calendar/DateContext.js +5 -4
  9. package/dist/base-calendar/YearPickupPanel.svelte +4 -4
  10. package/dist/card/Card.svelte +1 -1
  11. package/dist/card/Card.svelte.d.ts +1 -1
  12. package/dist/cascade-options-select/CascadeOptionSelect.svelte +2 -3
  13. package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +46 -1
  14. package/dist/cascade-options-select/CascadePanel.svelte +1 -1
  15. package/dist/checkbox/CheckBox.svelte +1 -1
  16. package/dist/color-picker/ColorPicker.svelte +9 -9
  17. package/dist/color-picker/ColorPicker.svelte.d.ts +0 -2
  18. package/dist/color-picker/ColorPickerPanel.svelte +11 -15
  19. package/dist/color-picker/ColorPickerPanel.svelte.d.ts +1 -1
  20. package/dist/common/CommonPicker.svelte +2 -2
  21. package/dist/common/CommonPicker.svelte.d.ts +1 -1
  22. package/dist/common/MouseClickHandler.d.ts +1 -1
  23. package/dist/common/Popover.svelte +28 -6
  24. package/dist/common/Popover.svelte.d.ts +9 -3
  25. package/dist/common/uniface-utils.js +6 -4
  26. package/dist/common-editor/CommonEditor.svelte +1 -1
  27. package/dist/common-editor/CommonEditor.svelte.d.ts +1 -1
  28. package/dist/common-editor/NumberInput.svelte +1 -1
  29. package/dist/common-editor/NumberInput.svelte.d.ts +1 -1
  30. package/dist/concise-data-table/ConciseListTable.svelte +7 -2
  31. package/dist/concise-data-table/ConciseListTable.svelte.d.ts +1 -0
  32. package/dist/concise-data-table/DataRow.svelte +1 -1
  33. package/dist/concise-data-table/TableOptions.d.ts +1 -1
  34. package/dist/data-table/DataTable.svelte +1 -1
  35. package/dist/data-table/parts/ActionsPanel.svelte +4 -3
  36. package/dist/data-table/parts/ActionsRow.svelte +3 -3
  37. package/dist/data-table/parts/ContentPanel.svelte +3 -2
  38. package/dist/data-table/parts/FixedColumnsPanel.svelte +0 -1
  39. package/dist/data-table/parts/FixedColumnsPanel.svelte.d.ts +1 -2
  40. package/dist/data-table/parts/FixedHeaderPanel.svelte +2 -2
  41. package/dist/data-table/parts/FixedRow.svelte +2 -1
  42. package/dist/data-table/parts/FixedRow.svelte.d.ts +1 -1
  43. package/dist/data-table/parts/HrefCell.svelte +23 -2
  44. package/dist/data-table/parts/PopupMenu.svelte +25 -2
  45. package/dist/data-table/parts/PopupMenu.svelte.d.ts +8 -1
  46. package/dist/date-picker/DatePicker.svelte +0 -1
  47. package/dist/date-picker/DateTimePicker.svelte +3 -3
  48. package/dist/date-picker/ScrollBar.svelte +4 -7
  49. package/dist/date-range/DateRangeEditor.svelte +1 -1
  50. package/dist/dialog/CommonDialog.svelte +8 -5
  51. package/dist/dialog/CommonDialog.svelte.d.ts +2 -1
  52. package/dist/dialog/Dialog.svelte +37 -12
  53. package/dist/dialog/Dialog.svelte.d.ts +4 -3
  54. package/dist/dialog/DialogBoard.svelte +11 -8
  55. package/dist/dialog/DialogWrapper.svelte +10 -0
  56. package/dist/{common-editor/DateInput.svelte.d.ts → dialog/DialogWrapper.svelte.d.ts} +6 -13
  57. package/dist/dialog/Dialogs.js +1 -1
  58. package/dist/dialog/ModalResult.d.ts +5 -0
  59. package/dist/dialog/ModalResult.js +5 -0
  60. package/dist/drawer/Drawer.svelte +1 -1
  61. package/dist/form-field/FormField.svelte +2 -1
  62. package/dist/form-field/FormField.svelte.d.ts +1 -0
  63. package/dist/form-panel/flex-row-form/FormContainer.svelte +1 -1
  64. package/dist/form-panel/grid-form/EmptyCell.svelte +8 -7
  65. package/dist/form-panel/grid-form/EmptyCell.svelte.d.ts +2 -2
  66. package/dist/form-panel/grid-form/GridField.svelte +1 -1
  67. package/dist/i18nRes/i18nRes.d.ts +2 -0
  68. package/dist/i18nRes/i18nRes.js +44 -0
  69. package/dist/i18nRes/index.d.ts +2 -0
  70. package/dist/i18nRes/index.js +2 -0
  71. package/dist/image-files/ImageFilesField.svelte +1 -1
  72. package/dist/indicator/IndicatorBoard.svelte +1 -1
  73. package/dist/inline-cell-editor/InvalidEditor.svelte +1 -0
  74. package/dist/input-options-select/InputOptionsSelect.svelte +6 -6
  75. package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +1 -1
  76. package/dist/layout/flex/FlexBlock.svelte +1 -1
  77. package/dist/lookup-editor/LookupEditor.svelte +1 -1
  78. package/dist/memo-editor/MemoEditor.svelte +2 -2
  79. package/dist/message-box/IMessageBox.d.ts +2 -4
  80. package/dist/message-box/IMessageBox.js +4 -6
  81. package/dist/message-box/MessageBoxBoard.svelte +1 -3
  82. package/dist/options-multi-select/OptionsMultiSelect.svelte +1 -1
  83. package/dist/prompts-text-editor/PromptsTextEditor.svelte +2 -2
  84. package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +1 -1
  85. package/dist/property-editor/PropertyEditor.svelte +3 -3
  86. package/dist/text-editor/PasswordEditor.svelte +1 -1
  87. package/dist/transfer/Transfer.svelte +17 -12
  88. package/dist/transfer/Transfer.svelte.d.ts +0 -1
  89. package/dist/unit-number-editor/UnitNumberEditor.svelte +2 -2
  90. package/docs/buttons/cn/ActionBar.md +459 -0
  91. package/docs/buttons/cn/Button.md +228 -0
  92. package/docs/buttons/cn/IconButton.md +294 -0
  93. package/docs/buttons/cn/README.md +600 -0
  94. package/docs/buttons/cn/TextButton.md +163 -0
  95. package/docs/buttons/en/ActionBar.md +459 -0
  96. package/docs/buttons/en/Button.md +228 -0
  97. package/docs/buttons/en/IconButton.md +294 -0
  98. package/docs/buttons/en/README.md +600 -0
  99. package/docs/buttons/en/TextButton.md +163 -0
  100. package/docs/containers/cn/accordion.md +622 -0
  101. package/docs/containers/cn/box.md +445 -0
  102. package/docs/containers/cn/card.md +404 -0
  103. package/docs/containers/cn/page.md +576 -0
  104. package/docs/containers/cn/tabs.md +686 -0
  105. package/docs/containers/en/accordion.md +622 -0
  106. package/docs/containers/en/box.md +445 -0
  107. package/docs/containers/en/card.md +404 -0
  108. package/docs/containers/en/page.md +576 -0
  109. package/docs/containers/en/tabs.md +686 -0
  110. package/docs/data-display/cn/concise-data-table.md +731 -0
  111. package/docs/data-display/cn/listbox.md +786 -0
  112. package/docs/data-display/cn/treeview.md +863 -0
  113. package/docs/data-display/en/concise-data-table.md +732 -0
  114. package/docs/data-display/en/listbox.md +786 -0
  115. package/docs/data-display/en/treeview.md +863 -0
  116. package/docs/data-table/cn/README.md +596 -0
  117. package/docs/data-table/en/README.md +596 -0
  118. package/docs/dialog/cn/README.md +767 -0
  119. package/docs/dialog/en/README.md +767 -0
  120. package/docs/form/cn/README.md +847 -0
  121. package/docs/form/en/README.md +847 -0
  122. package/docs/form-components/cn/README.md +495 -0
  123. package/docs/form-components/cn/attachmentfilesfield.md +757 -0
  124. package/docs/form-components/cn/cascade-options-select.md +374 -0
  125. package/docs/form-components/cn/checkbox.md +58 -0
  126. package/docs/form-components/cn/date-picker.md +138 -0
  127. package/docs/form-components/cn/datetime-picker.md +228 -0
  128. package/docs/form-components/cn/group-checkbox.md +405 -0
  129. package/docs/form-components/cn/group-radiobox.md +525 -0
  130. package/docs/form-components/cn/imagefilesfield.md +651 -0
  131. package/docs/form-components/cn/input-options-select.md +250 -0
  132. package/docs/form-components/cn/lookup-editor.md +406 -0
  133. package/docs/form-components/cn/memoeditor.md +409 -0
  134. package/docs/form-components/cn/number-editor.md +261 -0
  135. package/docs/form-components/cn/options-multi-select.md +177 -0
  136. package/docs/form-components/cn/options-select.md +83 -0
  137. package/docs/form-components/cn/passwordeditor.md +538 -0
  138. package/docs/form-components/cn/prompts-text-editor.md +241 -0
  139. package/docs/form-components/cn/radiobutton.md +84 -0
  140. package/docs/form-components/cn/switch.md +178 -0
  141. package/docs/form-components/cn/text-editor.md +142 -0
  142. package/docs/form-components/cn/time-editor.md +159 -0
  143. package/docs/form-components/cn/unit-number-editor.md +164 -0
  144. package/docs/form-components/en/README.md +463 -0
  145. package/docs/form-components/en/attachmentfilesfield.md +757 -0
  146. package/docs/form-components/en/cascade-options-select.md +358 -0
  147. package/docs/form-components/en/checkbox.md +59 -0
  148. package/docs/form-components/en/date-picker.md +138 -0
  149. package/docs/form-components/en/datetime-picker.md +228 -0
  150. package/docs/form-components/en/group-checkbox.md +395 -0
  151. package/docs/form-components/en/group-radiobox.md +498 -0
  152. package/docs/form-components/en/imagefilesfield.md +651 -0
  153. package/docs/form-components/en/input-options-select.md +239 -0
  154. package/docs/form-components/en/lookup-editor.md +389 -0
  155. package/docs/form-components/en/memoeditor.md +409 -0
  156. package/docs/form-components/en/number-editor.md +249 -0
  157. package/docs/form-components/en/options-multi-select.md +177 -0
  158. package/docs/form-components/en/options-select.md +83 -0
  159. package/docs/form-components/en/passwordeditor.md +538 -0
  160. package/docs/form-components/en/prompts-text-editor.md +241 -0
  161. package/docs/form-components/en/radiobutton.md +84 -0
  162. package/docs/form-components/en/switch.md +180 -0
  163. package/docs/form-components/en/text-editor.md +142 -0
  164. package/docs/form-components/en/time-editor.md +159 -0
  165. package/docs/form-components/en/unit-number-editor.md +164 -0
  166. package/docs/form-layout/cn/criteria-field.md +652 -0
  167. package/docs/form-layout/cn/flex-form.md +454 -0
  168. package/docs/form-layout/cn/flex-row-form.md +542 -0
  169. package/docs/form-layout/cn/form-field.md +923 -0
  170. package/docs/form-layout/cn/grid-form.md +676 -0
  171. package/docs/form-layout/en/criteria-field.md +652 -0
  172. package/docs/form-layout/en/flex-form.md +454 -0
  173. package/docs/form-layout/en/flex-row-form.md +542 -0
  174. package/docs/form-layout/en/form-field.md +923 -0
  175. package/docs/form-layout/en/grid-form.md +676 -0
  176. package/docs/global/cn/README.md +534 -0
  177. package/docs/global/en/README.md +534 -0
  178. package/docs/layout/cn/classiclayout.md +460 -0
  179. package/docs/layout/cn/headerlayout.md +524 -0
  180. package/docs/layout/cn/sidebarlayout.md +263 -0
  181. package/docs/layout/en/classiclayout.md +951 -0
  182. package/docs/layout/en/headerlayout.md +524 -0
  183. package/docs/layout/en/sidebarlayout.md +262 -0
  184. package/docs/misc/cn/README.md +1217 -0
  185. package/docs/misc/en/README.md +1217 -0
  186. package/docs/navigation/cn/breadcrumb.md +291 -0
  187. package/docs/navigation/cn/navigator.md +322 -0
  188. package/docs/navigation/cn/navigatormenu.md +512 -0
  189. package/docs/navigation/cn/progressbar.md +199 -0
  190. package/docs/navigation/cn/progressstepbar.md +299 -0
  191. package/docs/navigation/en/breadcrumb.md +291 -0
  192. package/docs/navigation/en/navigator.md +322 -0
  193. package/docs/navigation/en/navigatormenu.md +512 -0
  194. package/docs/navigation/en/progressbar.md +199 -0
  195. package/docs/navigation/en/progressstepbar.md +299 -0
  196. package/docs/search-filters/cn/daterange.md +1156 -0
  197. package/docs/search-filters/cn/numberrange.md +688 -0
  198. package/docs/search-filters/cn/searchbox.md +1582 -0
  199. package/docs/search-filters/en/daterange.md +1156 -0
  200. package/docs/search-filters/en/numberrange.md +688 -0
  201. package/docs/search-filters/en/searchbox.md +1582 -0
  202. package/package.json +53 -13
  203. package/dist/common-editor/DateInput.svelte +0 -27
  204. package/dist/i18n_resources/index.d.ts +0 -3
  205. package/dist/i18n_resources/index.js +0 -3
  206. /package/dist/{i18n_resources → i18nRes}/uniface_cn_resource.d.ts +0 -0
  207. /package/dist/{i18n_resources → i18nRes}/uniface_cn_resource.js +0 -0
  208. /package/dist/{i18n_resources → i18nRes}/uniface_en_resource.d.ts +0 -0
  209. /package/dist/{i18n_resources → i18nRes}/uniface_en_resource.js +0 -0
@@ -0,0 +1,652 @@
1
+ # CriteriaField Component
2
+
3
+ Conditional filtering field component providing a labeled filtering field container specifically designed for building criteria filtering forms.
4
+
5
+ ## Properties
6
+
7
+ | Property | Type | Default | Description |
8
+ |----------|------|---------|-------------|
9
+ | `label` | `string` | `'Label'` | Field label text |
10
+ | `style` | `string` | `''` | Custom styles |
11
+ | `label$style` | `string` | `''` | Label styles |
12
+ | `size` | `'' \| 'x15' \| 'x20' \| 'x25' \| 'x30' \| 'x35' \| 'x40'` | `''` | Field size |
13
+ | `labelSuffix` | `string` | `':'` | Label suffix |
14
+ | `class` | `string` | `''` | CSS class name |
15
+
16
+ ## Usage Examples
17
+
18
+ ### Basic Filtering Fields
19
+
20
+ ```svelte
21
+ <script lang="ts">
22
+ import CriteriaField, TextEditor from '@ticatec/uniface-element/CriteriaField, TextEditor';
23
+
24
+ let searchCriteria = {
25
+ name: '',
26
+ email: '',
27
+ department: ''
28
+ };
29
+ </script>
30
+
31
+ <CriteriaField size="x20" label="Name">
32
+ <TextEditor
33
+ variant="outlined"
34
+ bind:value={searchCriteria.name}
35
+ placeholder="Enter name to search"
36
+ />
37
+ </CriteriaField>
38
+
39
+ <CriteriaField size="x25" label="Email">
40
+ <TextEditor
41
+ variant="outlined"
42
+ bind:value={searchCriteria.email}
43
+ placeholder="Enter email address"
44
+ />
45
+ </CriteriaField>
46
+
47
+ <CriteriaField size="x30" label="Department">
48
+ <TextEditor
49
+ variant="outlined"
50
+ bind:value={searchCriteria.department}
51
+ placeholder="Enter department name"
52
+ />
53
+ </CriteriaField>
54
+ ```
55
+
56
+ ### Different Sizes of Filtering Fields
57
+
58
+ ```svelte
59
+ <script lang="ts">
60
+ import CriteriaField, TextEditor, NumberRange, DateRange from '@ticatec/uniface-element/CriteriaField, TextEditor, NumberRange, DateRange';
61
+
62
+ interface SearchCriteria {
63
+ name: string;
64
+ ageFrom: number | null;
65
+ ageTo: number | null;
66
+ dobFrom: Date | null;
67
+ dobTo: Date | null;
68
+ department: string;
69
+ position: string;
70
+ }
71
+
72
+ let criteria: SearchCriteria = {
73
+ name: '',
74
+ ageFrom: null,
75
+ ageTo: null,
76
+ dobFrom: null,
77
+ dobTo: null,
78
+ department: '',
79
+ position: ''
80
+ };
81
+ </script>
82
+
83
+ <div class="criteria-container">
84
+ <h3>Employee Search Criteria</h3>
85
+
86
+ <!-- Small size field -->
87
+ <CriteriaField size="x15" label="ID">
88
+ <TextEditor variant="outlined" bind:value={criteria.name} />
89
+ </CriteriaField>
90
+
91
+ <!-- Standard size field -->
92
+ <CriteriaField size="x20" label="Name">
93
+ <TextEditor
94
+ variant="outlined"
95
+ bind:value={criteria.name}
96
+ placeholder="Enter full name or use * wildcard"
97
+ />
98
+ </CriteriaField>
99
+
100
+ <!-- Medium size field -->
101
+ <CriteriaField size="x25" label="Age Range">
102
+ <NumberRange
103
+ variant="outlined"
104
+ bind:fromValue={criteria.ageFrom}
105
+ bind:toValue={criteria.ageTo}
106
+ min={18}
107
+ max={65}
108
+ />
109
+ </CriteriaField>
110
+
111
+ <!-- Large size field -->
112
+ <CriteriaField size="x30" label="Birth Date">
113
+ <DateRange
114
+ variant="outlined"
115
+ bind:fromValue={criteria.dobFrom}
116
+ bind:toValue={criteria.dobTo}
117
+ />
118
+ </CriteriaField>
119
+
120
+ <!-- Extra large size field -->
121
+ <CriteriaField size="x35" label="Department">
122
+ <TextEditor
123
+ variant="outlined"
124
+ bind:value={criteria.department}
125
+ placeholder="Enter department name"
126
+ />
127
+ </CriteriaField>
128
+
129
+ <!-- Maximum size field -->
130
+ <CriteriaField size="x40" label="Position">
131
+ <TextEditor
132
+ variant="outlined"
133
+ bind:value={criteria.position}
134
+ placeholder="Enter position title"
135
+ />
136
+ </CriteriaField>
137
+ </div>
138
+
139
+ <style>
140
+ .criteria-container {
141
+ max-width: 800px;
142
+ margin: 0 auto;
143
+ padding: 20px;
144
+ }
145
+
146
+ .criteria-container h3 {
147
+ margin-bottom: 20px;
148
+ color: #495057;
149
+ }
150
+ </style>
151
+ ```
152
+
153
+ ### Custom Label Styles
154
+
155
+ ```svelte
156
+ <script lang="ts">
157
+ import CriteriaField, TextEditor, OptionsSelect from '@ticatec/uniface-element/CriteriaField, TextEditor, OptionsSelect';
158
+
159
+ let searchData = {
160
+ keyword: '',
161
+ category: '',
162
+ status: ''
163
+ };
164
+
165
+ const categoryOptions = [
166
+ { code: 'all', text: 'All Categories' },
167
+ { code: 'electronics', text: 'Electronics' },
168
+ { code: 'clothing', text: 'Clothing' },
169
+ { code: 'books', text: 'Books' }
170
+ ];
171
+
172
+ const statusOptions = [
173
+ { code: 'active', text: 'Active' },
174
+ { code: 'inactive', text: 'Inactive' },
175
+ { code: 'pending', text: 'Pending' }
176
+ ];
177
+ </script>
178
+
179
+ <div class="search-form">
180
+ <h3>Product Search</h3>
181
+
182
+ <!-- Important field label -->
183
+ <CriteriaField
184
+ size="x25"
185
+ label="Keyword"
186
+ label$style="color: #dc3545; font-weight: 600;"
187
+ labelSuffix="*:"
188
+ >
189
+ <TextEditor
190
+ variant="outlined"
191
+ bind:value={searchData.keyword}
192
+ placeholder="Enter product keywords"
193
+ />
194
+ </CriteriaField>
195
+
196
+ <!-- Regular field label -->
197
+ <CriteriaField
198
+ size="x30"
199
+ label="Category"
200
+ label$style="color: #28a745; font-weight: 500;"
201
+ >
202
+ <OptionsSelect
203
+ variant="outlined"
204
+ options={categoryOptions}
205
+ keyField="code"
206
+ textField="text"
207
+ bind:value={searchData.category}
208
+ />
209
+ </CriteriaField>
210
+
211
+ <!-- Status field label -->
212
+ <CriteriaField
213
+ size="x25"
214
+ label="Status"
215
+ label$style="color: #6f42c1; font-style: italic;"
216
+ labelSuffix=":"
217
+ >
218
+ <OptionsSelect
219
+ variant="outlined"
220
+ options={statusOptions}
221
+ keyField="code"
222
+ textField="text"
223
+ bind:value={searchData.status}
224
+ />
225
+ </CriteriaField>
226
+ </div>
227
+
228
+ <style>
229
+ .search-form {
230
+ max-width: 600px;
231
+ margin: 0 auto;
232
+ padding: 20px;
233
+ background: #f8f9fa;
234
+ border-radius: 8px;
235
+ }
236
+
237
+ .search-form h3 {
238
+ margin-bottom: 20px;
239
+ color: #495057;
240
+ text-align: center;
241
+ }
242
+ </style>
243
+ ```
244
+
245
+ ### Long Label Text Handling
246
+
247
+ ```svelte
248
+ <script lang="ts">
249
+ import CriteriaField, TextEditor, DateRange from '@ticatec/uniface-element/CriteriaField, TextEditor, DateRange';
250
+
251
+ let advancedCriteria = {
252
+ employeeIdOrName: '',
253
+ workStartDate: null as Date | null,
254
+ workEndDate: null as Date | null,
255
+ projectName: ''
256
+ };
257
+ </script>
258
+
259
+ <div class="advanced-search">
260
+ <h3>Advanced Search Form</h3>
261
+
262
+ <!-- Long label with automatic ellipsis -->
263
+ <CriteriaField
264
+ size="x25"
265
+ label="Employee ID or Name (supports fuzzy search and wildcards)"
266
+ >
267
+ <TextEditor
268
+ variant="outlined"
269
+ bind:value={advancedCriteria.employeeIdOrName}
270
+ placeholder="Enter employee ID or name"
271
+ />
272
+ </CriteriaField>
273
+
274
+ <!-- Long label in larger container -->
275
+ <CriteriaField
276
+ size="x35"
277
+ label="Work Date Range (includes hire and termination date filtering)"
278
+ >
279
+ <DateRange
280
+ variant="outlined"
281
+ bind:fromValue={advancedCriteria.workStartDate}
282
+ bind:toValue={advancedCriteria.workEndDate}
283
+ />
284
+ </CriteriaField>
285
+
286
+ <!-- Custom label style to avoid ellipsis -->
287
+ <CriteriaField
288
+ size="x30"
289
+ label="Project Name or Number"
290
+ label$style="font-size: 12px; line-height: 1.2; white-space: normal;"
291
+ >
292
+ <TextEditor
293
+ variant="outlined"
294
+ bind:value={advancedCriteria.projectName}
295
+ placeholder="Enter project information"
296
+ />
297
+ </CriteriaField>
298
+ </div>
299
+
300
+ <style>
301
+ .advanced-search {
302
+ max-width: 700px;
303
+ margin: 0 auto;
304
+ padding: 20px;
305
+ }
306
+
307
+ .advanced-search h3 {
308
+ margin-bottom: 25px;
309
+ color: #495057;
310
+ border-bottom: 2px solid #007bff;
311
+ padding-bottom: 10px;
312
+ }
313
+ </style>
314
+ ```
315
+
316
+ ### Combined with Other Components
317
+
318
+ ```svelte
319
+ <script lang="ts">
320
+ import CriteriaField, TextEditor, NumberRange, OptionsSelect, CheckBox, DatePicker from '@ticatec/uniface-element/CriteriaField, TextEditor, NumberRange, OptionsSelect, CheckBox, DatePicker';
321
+
322
+ interface ProductSearchCriteria {
323
+ name: string;
324
+ category: string;
325
+ priceFrom: number | null;
326
+ priceTo: number | null;
327
+ inStock: boolean;
328
+ releaseDate: Date | null;
329
+ brand: string;
330
+ }
331
+
332
+ let productCriteria: ProductSearchCriteria = {
333
+ name: '',
334
+ category: '',
335
+ priceFrom: null,
336
+ priceTo: null,
337
+ inStock: false,
338
+ releaseDate: null,
339
+ brand: ''
340
+ };
341
+
342
+ const categories = [
343
+ { code: '', text: 'All' },
344
+ { code: 'electronics', text: 'Electronics' },
345
+ { code: 'books', text: 'Books' },
346
+ { code: 'clothing', text: 'Clothing' }
347
+ ];
348
+
349
+ const brands = [
350
+ { code: '', text: 'All Brands' },
351
+ { code: 'apple', text: 'Apple' },
352
+ { code: 'samsung', text: 'Samsung' },
353
+ { code: 'sony', text: 'Sony' }
354
+ ];
355
+
356
+ const handleSearch = (): void => {
357
+ console.log('Search criteria:', productCriteria);
358
+ };
359
+
360
+ const handleReset = (): void => {
361
+ productCriteria = {
362
+ name: '',
363
+ category: '',
364
+ priceFrom: null,
365
+ priceTo: null,
366
+ inStock: false,
367
+ releaseDate: null,
368
+ brand: ''
369
+ };
370
+ };
371
+ </script>
372
+
373
+ <div class="product-search-form">
374
+ <h2>Product Search</h2>
375
+
376
+ <div class="criteria-grid">
377
+ <CriteriaField size="x30" label="Product Name">
378
+ <TextEditor
379
+ variant="outlined"
380
+ bind:value={productCriteria.name}
381
+ placeholder="Enter product name keywords"
382
+ />
383
+ </CriteriaField>
384
+
385
+ <CriteriaField size="x25" label="Category">
386
+ <OptionsSelect
387
+ variant="outlined"
388
+ options={categories}
389
+ keyField="code"
390
+ textField="text"
391
+ bind:value={productCriteria.category}
392
+ />
393
+ </CriteriaField>
394
+
395
+ <CriteriaField size="x30" label="Price Range">
396
+ <NumberRange
397
+ variant="outlined"
398
+ bind:fromValue={productCriteria.priceFrom}
399
+ bind:toValue={productCriteria.priceTo}
400
+ min={0}
401
+ precision={2}
402
+ />
403
+ </CriteriaField>
404
+
405
+ <CriteriaField size="x25" label="Brand">
406
+ <OptionsSelect
407
+ variant="outlined"
408
+ options={brands}
409
+ keyField="code"
410
+ textField="text"
411
+ bind:value={productCriteria.brand}
412
+ />
413
+ </CriteriaField>
414
+
415
+ <CriteriaField size="x25" label="Release Date">
416
+ <DatePicker
417
+ variant="outlined"
418
+ bind:value={productCriteria.releaseDate}
419
+ />
420
+ </CriteriaField>
421
+
422
+ <CriteriaField size="x20" label="Stock Status">
423
+ <CheckBox
424
+ label="In stock only"
425
+ bind:value={productCriteria.inStock}
426
+ />
427
+ </CriteriaField>
428
+ </div>
429
+
430
+ <div class="search-actions">
431
+ <button type="button" class="btn-secondary" on:click={handleReset}>
432
+ Reset
433
+ </button>
434
+ <button type="button" class="btn-primary" on:click={handleSearch}>
435
+ Search
436
+ </button>
437
+ </div>
438
+ </div>
439
+
440
+ <style>
441
+ .product-search-form {
442
+ max-width: 900px;
443
+ margin: 0 auto;
444
+ padding: 30px;
445
+ background: white;
446
+ border-radius: 12px;
447
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
448
+ }
449
+
450
+ .product-search-form h2 {
451
+ margin-bottom: 30px;
452
+ color: #333;
453
+ text-align: center;
454
+ font-size: 24px;
455
+ }
456
+
457
+ .criteria-grid {
458
+ display: grid;
459
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
460
+ gap: 20px;
461
+ margin-bottom: 30px;
462
+ }
463
+
464
+ .search-actions {
465
+ display: flex;
466
+ gap: 15px;
467
+ justify-content: center;
468
+ padding-top: 20px;
469
+ border-top: 1px solid #dee2e6;
470
+ }
471
+
472
+ .btn-primary, .btn-secondary {
473
+ padding: 12px 24px;
474
+ border: none;
475
+ border-radius: 6px;
476
+ font-size: 14px;
477
+ font-weight: 500;
478
+ cursor: pointer;
479
+ transition: all 0.2s;
480
+ }
481
+
482
+ .btn-primary {
483
+ background: #007bff;
484
+ color: white;
485
+ }
486
+
487
+ .btn-secondary {
488
+ background: #6c757d;
489
+ color: white;
490
+ }
491
+
492
+ .btn-primary:hover {
493
+ background: #0056b3;
494
+ transform: translateY(-1px);
495
+ }
496
+
497
+ .btn-secondary:hover {
498
+ background: #545b62;
499
+ transform: translateY(-1px);
500
+ }
501
+ </style>
502
+ ```
503
+
504
+ ## Size Specifications
505
+
506
+ | Size | Description | Use Case |
507
+ |------|-------------|----------|
508
+ | `''` (default) | Auto-fit width | Flexible layout |
509
+ | `x15` | Minimum width | ID, numbers, short fields |
510
+ | `x20` | Small width | Names, codes, short text |
511
+ | `x25` | Standard width | Common text fields |
512
+ | `x30` | Medium width | Longer text or range selections |
513
+ | `x35` | Large width | Complex input controls |
514
+ | `x40` | Maximum width | Long text or composite controls |
515
+
516
+ ## Label Suffix
517
+
518
+ ```svelte
519
+ <!-- Default colon suffix -->
520
+ <CriteriaField label="Name">
521
+ <TextEditor />
522
+ </CriteriaField>
523
+
524
+ <!-- Custom suffix -->
525
+ <CriteriaField label="Required Field" labelSuffix="*:">
526
+ <TextEditor />
527
+ </CriteriaField>
528
+
529
+ <!-- No suffix -->
530
+ <CriteriaField label="Option" labelSuffix="">
531
+ <CheckBox label="Enable" />
532
+ </CriteriaField>
533
+ ```
534
+
535
+ ## Style Customization
536
+
537
+ ```css
538
+ /* Custom criteria field container */
539
+ :global(.uniface-filter-field) {
540
+ margin-bottom: 16px;
541
+ }
542
+
543
+ /* Field container styles */
544
+ :global(.uniface-filter-field .field-container) {
545
+ display: flex;
546
+ align-items: center;
547
+ gap: 12px;
548
+ }
549
+
550
+ /* Label styles */
551
+ :global(.uniface-filter-field .field-label) {
552
+ flex-shrink: 0;
553
+ font-weight: 500;
554
+ color: #495057;
555
+ white-space: nowrap;
556
+ overflow: hidden;
557
+ text-overflow: ellipsis;
558
+ }
559
+
560
+ /* Field content styles */
561
+ :global(.uniface-filter-field .field) {
562
+ flex: 1;
563
+ min-width: 0;
564
+ }
565
+
566
+ /* Size customization */
567
+ :global(.uniface-filter-field.x20 .field-label) {
568
+ width: 120px;
569
+ }
570
+
571
+ :global(.uniface-filter-field.x30 .field-label) {
572
+ width: 150px;
573
+ }
574
+
575
+ /* Responsive styles */
576
+ @media (max-width: 768px) {
577
+ :global(.uniface-filter-field .field-container) {
578
+ flex-direction: column;
579
+ align-items: stretch;
580
+ gap: 8px;
581
+ }
582
+
583
+ :global(.uniface-filter-field .field-label) {
584
+ width: auto !important;
585
+ }
586
+ }
587
+ ```
588
+
589
+ ## Best Practices
590
+
591
+ ### 1. Choose Appropriate Field Sizes
592
+ ```svelte
593
+ <!-- Use small sizes for short fields -->
594
+ <CriteriaField size="x15" label="ID">
595
+ <TextEditor />
596
+ </CriteriaField>
597
+
598
+ <!-- Use medium sizes for standard fields -->
599
+ <CriteriaField size="x25" label="Name">
600
+ <TextEditor />
601
+ </CriteriaField>
602
+
603
+ <!-- Use large sizes for complex controls -->
604
+ <CriteriaField size="x35" label="Date Range">
605
+ <DateRange />
606
+ </CriteriaField>
607
+ ```
608
+
609
+ ### 2. Label Text Handling
610
+ ```svelte
611
+ <!-- Concise and clear labels -->
612
+ <CriteriaField label="Name">
613
+ <TextEditor />
614
+ </CriteriaField>
615
+
616
+ <!-- Consider line wrapping for long labels -->
617
+ <CriteriaField
618
+ label="Employee Name or ID"
619
+ label$style="white-space: normal; line-height: 1.2;"
620
+ >
621
+ <TextEditor />
622
+ </CriteriaField>
623
+ ```
624
+
625
+ ### 3. Filter Form Layout
626
+ ```svelte
627
+ <div class="criteria-form">
628
+ <div class="criteria-row">
629
+ <CriteriaField size="x25" label="Keyword">
630
+ <TextEditor />
631
+ </CriteriaField>
632
+
633
+ <CriteriaField size="x25" label="Category">
634
+ <OptionsSelect />
635
+ </CriteriaField>
636
+ </div>
637
+
638
+ <div class="criteria-actions">
639
+ <button>Search</button>
640
+ <button>Reset</button>
641
+ </div>
642
+ </div>
643
+ ```
644
+
645
+ ## Component Advantages
646
+
647
+ 1. **Professional Filter Layout** - Specifically designed layout component for criteria filtering forms
648
+ 2. **Flexible Size Control** - Multiple preset sizes to accommodate different field requirements
649
+ 3. **Customizable Label Styles** - Full customization support for label text and styles
650
+ 4. **Responsive Friendly** - Automatic layout adaptation across different screen sizes
651
+ 5. **Easy Integration** - Perfect compatibility with various form controls
652
+ 6. **Consistent Design** - Unified visual styles for enhanced user experience