@iress-oss/ids-mcp-server 5.15.0 → 5.20.1

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 (132) hide show
  1. package/generated/docs/components_components-alert-docs.md +492 -0
  2. package/generated/docs/components_components-autocomplete-docs.md +3485 -0
  3. package/generated/docs/{components-autocomplete-recipes-docs.md → components_components-autocomplete-recipes-docs.md} +32 -14
  4. package/generated/docs/{components-badge-docs.md → components_components-badge-docs.md} +222 -30
  5. package/generated/docs/components_components-button-docs.md +2078 -0
  6. package/generated/docs/components_components-button-recipes-docs.md +37 -0
  7. package/generated/docs/components_components-buttongroup-docs.md +1045 -0
  8. package/generated/docs/components_components-card-docs.md +2276 -0
  9. package/generated/docs/{components-card-recipes-docs.md → components_components-card-recipes-docs.md} +131 -14
  10. package/generated/docs/components_components-checkbox-docs.md +1054 -0
  11. package/generated/docs/{components-checkboxgroup-docs.md → components_components-checkboxgroup-docs.md} +1000 -81
  12. package/generated/docs/{components-checkboxgroup-recipes-docs.md → components_components-checkboxgroup-recipes-docs.md} +101 -11
  13. package/generated/docs/{components-col-docs.md → components_components-col-docs.md} +331 -58
  14. package/generated/docs/components_components-combobox-docs.md +3767 -0
  15. package/generated/docs/{components-container-docs.md → components_components-container-docs.md} +61 -24
  16. package/generated/docs/{components-divider-docs.md → components_components-divider-docs.md} +83 -24
  17. package/generated/docs/{components-expander-docs.md → components_components-expander-docs.md} +264 -33
  18. package/generated/docs/{components-field-docs.md → components_components-field-docs.md} +814 -120
  19. package/generated/docs/components_components-filter-docs.md +4080 -0
  20. package/generated/docs/{components-form-docs.md → components_components-form-docs.md} +1515 -353
  21. package/generated/docs/{components-form-recipes-docs.md → components_components-form-recipes-docs.md} +170 -54
  22. package/generated/docs/components_components-hide-docs.md +293 -0
  23. package/generated/docs/components_components-icon-docs.md +1337 -0
  24. package/generated/docs/{components-inline-docs.md → components_components-inline-docs.md} +462 -42
  25. package/generated/docs/components_components-input-docs.md +1468 -0
  26. package/generated/docs/components_components-input-recipes-docs.md +367 -0
  27. package/generated/docs/components_components-inputcurrency-docs.md +432 -0
  28. package/generated/docs/{components-inputcurrency-recipes-docs.md → components_components-inputcurrency-recipes-docs.md} +110 -17
  29. package/generated/docs/components_components-label-docs.md +323 -0
  30. package/generated/docs/components_components-menu-docs.md +2345 -0
  31. package/generated/docs/components_components-menu-menuitem-docs.md +633 -0
  32. package/generated/docs/{components-modal-docs.md → components_components-modal-docs.md} +1625 -232
  33. package/generated/docs/components_components-navbar-docs.md +1847 -0
  34. package/generated/docs/{components-navbar-recipes-docs.md → components_components-navbar-recipes-docs.md} +697 -39
  35. package/generated/docs/{components-panel-docs.md → components_components-panel-docs.md} +754 -57
  36. package/generated/docs/components_components-placeholder-docs.md +92 -0
  37. package/generated/docs/components_components-popover-docs.md +1641 -0
  38. package/generated/docs/{components-popover-recipes-docs.md → components_components-popover-recipes-docs.md} +347 -17
  39. package/generated/docs/components_components-progress-docs.md +115 -0
  40. package/generated/docs/{components-provider-docs.md → components_components-provider-docs.md} +41 -32
  41. package/generated/docs/components_components-radio-docs.md +491 -0
  42. package/generated/docs/{components-radiogroup-docs.md → components_components-radiogroup-docs.md} +943 -75
  43. package/generated/docs/components_components-readonly-docs.md +263 -0
  44. package/generated/docs/components_components-richselect-docs.md +6497 -0
  45. package/generated/docs/{components-row-docs.md → components_components-row-docs.md} +353 -43
  46. package/generated/docs/{components-select-docs.md → components_components-select-docs.md} +719 -61
  47. package/generated/docs/components_components-skeleton-docs.md +480 -0
  48. package/generated/docs/{components-skeleton-recipes-docs.md → components_components-skeleton-recipes-docs.md} +50 -10
  49. package/generated/docs/{components-skiplink-docs.md → components_components-skiplink-docs.md} +53 -14
  50. package/generated/docs/components_components-slideout-docs.md +2262 -0
  51. package/generated/docs/components_components-slider-docs.md +1276 -0
  52. package/generated/docs/components_components-spinner-docs.md +82 -0
  53. package/generated/docs/{components-stack-docs.md → components_components-stack-docs.md} +223 -40
  54. package/generated/docs/components_components-table-docs.md +3651 -0
  55. package/generated/docs/components_components-tabset-docs.md +772 -0
  56. package/generated/docs/components_components-tabset-tab-docs.md +262 -0
  57. package/generated/docs/components_components-tag-docs.md +259 -0
  58. package/generated/docs/{components-text-docs.md → components_components-text-docs.md} +491 -51
  59. package/generated/docs/{components-toaster-docs.md → components_components-toaster-docs.md} +181 -79
  60. package/generated/docs/components_components-toaster-toast-docs.md +634 -0
  61. package/generated/docs/components_components-toggle-docs.md +461 -0
  62. package/generated/docs/{components-tooltip-docs.md → components_components-tooltip-docs.md} +286 -41
  63. package/generated/docs/{components-validationmessage-docs.md → components_components-validationmessage-docs.md} +230 -61
  64. package/generated/docs/components_contact-us-docs.md +12 -0
  65. package/generated/docs/{foundations-accessibility-docs.md → components_foundations-accessibility-docs.md} +11 -21
  66. package/generated/docs/{foundations-colours-docs.md → components_foundations-colour-030-colours.md} +8 -15
  67. package/generated/docs/{foundations-consistency-docs.md → components_foundations-consistency-docs.md} +12 -20
  68. package/generated/docs/{foundations-content-docs.md → components_foundations-content-docs.md} +6 -11
  69. package/generated/docs/components_foundations-introduction-docs.md +15 -0
  70. package/generated/docs/{foundations-principles-docs.md → components_foundations-principles-docs.md} +14 -24
  71. package/generated/docs/components_foundations-typography-docs.md +608 -0
  72. package/generated/docs/{foundations-user-experience-docs.md → components_foundations-user-experience-docs.md} +16 -26
  73. package/generated/docs/{foundations-visual-design-docs.md → components_foundations-visual-design-docs.md} +10 -17
  74. package/generated/docs/{frequently-asked-questions-docs.md → components_frequently-asked-questions-docs.md} +14 -23
  75. package/generated/docs/components_get-started-develop-docs.md +84 -0
  76. package/generated/docs/components_get-started-using-storybook-docs.md +55 -0
  77. package/generated/docs/components_introduction-docs.md +15 -0
  78. package/generated/docs/{patterns-loading-docs.md → components_patterns-loading-docs.md} +711 -143
  79. package/generated/docs/components_resources-changelog-docs.md +4 -0
  80. package/generated/docs/{resources-code-katas-docs.md → components_resources-code-katas-docs.md} +5 -9
  81. package/generated/docs/{resources-migration-guides-from-v4-to-v5-docs.md → components_resources-migration-guides-from-v4-to-v5-docs.md} +54 -239
  82. package/generated/docs/{versions-docs.md → components_versions-docs.md} +5 -8
  83. package/generated/docs/guidelines.md +484 -200
  84. package/generated/docs/introduction-docs.md +19 -30
  85. package/package.json +41 -45
  86. package/generated/docs/components-alert-docs.md +0 -130
  87. package/generated/docs/components-autocomplete-docs.md +0 -754
  88. package/generated/docs/components-button-docs.md +0 -362
  89. package/generated/docs/components-button-recipes-docs.md +0 -76
  90. package/generated/docs/components-buttongroup-docs.md +0 -310
  91. package/generated/docs/components-card-docs.md +0 -494
  92. package/generated/docs/components-checkbox-docs.md +0 -193
  93. package/generated/docs/components-combobox-docs.md +0 -1016
  94. package/generated/docs/components-filter-docs.md +0 -1109
  95. package/generated/docs/components-hide-docs.md +0 -265
  96. package/generated/docs/components-icon-docs.md +0 -553
  97. package/generated/docs/components-input-docs.md +0 -335
  98. package/generated/docs/components-input-recipes-docs.md +0 -140
  99. package/generated/docs/components-inputcurrency-docs.md +0 -157
  100. package/generated/docs/components-label-docs.md +0 -135
  101. package/generated/docs/components-menu-docs.md +0 -704
  102. package/generated/docs/components-menu-menuitem-docs.md +0 -193
  103. package/generated/docs/components-navbar-docs.md +0 -291
  104. package/generated/docs/components-placeholder-docs.md +0 -27
  105. package/generated/docs/components-popover-docs.md +0 -464
  106. package/generated/docs/components-progress-docs.md +0 -104
  107. package/generated/docs/components-radio-docs.md +0 -107
  108. package/generated/docs/components-readonly-docs.md +0 -89
  109. package/generated/docs/components-richselect-docs.md +0 -2433
  110. package/generated/docs/components-skeleton-docs.md +0 -214
  111. package/generated/docs/components-slideout-docs.md +0 -538
  112. package/generated/docs/components-slider-docs.md +0 -346
  113. package/generated/docs/components-spinner-docs.md +0 -59
  114. package/generated/docs/components-table-ag-grid-docs.md +0 -1074
  115. package/generated/docs/components-table-docs.md +0 -1305
  116. package/generated/docs/components-tabset-docs.md +0 -341
  117. package/generated/docs/components-tabset-tab-docs.md +0 -86
  118. package/generated/docs/components-tag-docs.md +0 -115
  119. package/generated/docs/components-toaster-toast-docs.md +0 -157
  120. package/generated/docs/components-toggle-docs.md +0 -158
  121. package/generated/docs/contact-us-docs.md +0 -27
  122. package/generated/docs/extensions-editor-docs.md +0 -288
  123. package/generated/docs/extensions-editor-recipes-docs.md +0 -39
  124. package/generated/docs/foundations-introduction-docs.md +0 -17
  125. package/generated/docs/foundations-typography-docs.md +0 -191
  126. package/generated/docs/get-started-develop-docs.md +0 -209
  127. package/generated/docs/get-started-using-storybook-docs.md +0 -68
  128. package/generated/docs/resources-changelog-docs.md +0 -6
  129. package/generated/docs/themes-available-themes-docs.md +0 -66
  130. package/generated/docs/themes-introduction-docs.md +0 -121
  131. package/generated/docs/themes-tokens-docs.md +0 -1200
  132. /package/{LICENSE.txt → LICENSE} +0 -0
@@ -1,1109 +0,0 @@
1
- [](#filter)Filter
2
- =================
3
-
4
- Overview
5
- --------
6
-
7
- A filter allows you to pick one or more options from a list (that may be searchable) and is triggered by an activator button.
8
-
9
- Filter
10
-
11
- None selected
12
-
13
- Hide code
14
-
15
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
16
-
17
- <IressFilter
18
- label\="Filter"
19
- options\={\[
20
- {
21
- label: 'Option 1',
22
- value: 1
23
- },
24
- {
25
- label: 'Option 2',
26
- value: 2
27
- },
28
- {
29
- label: 'Option 3',
30
- value: 3
31
- },
32
- {
33
- label: 'Option 4',
34
- value: 4
35
- },
36
- {
37
- label: 'Option 5',
38
- value: 5
39
- }
40
- \]}
41
- popoverProps\={{
42
- container: document.body
43
- }}
44
- />
45
-
46
- Copy
47
-
48
- [](#usage)Usage
49
- ---------------
50
-
51
- The `IressFilter` component has been built to be flexible enough to cover most application needs, allowing a user to add or remove data items from a displayed data set.
52
-
53
- This component is not designed to be used within forms and should be used to provide instant updates to rendered data. Instead, in forms, you should use components like `IressSelect`, `IressCombobox` and `IressCheckboxGroup`.
54
-
55
- Here is an example using multiple `IressFilter`s to filter an `IressTable`.
56
-
57
- Name
58
-
59
- None selected
60
-
61
- Status
62
-
63
- None selected
64
-
65
- Location
66
-
67
- None selected
68
-
69
- Gender
70
-
71
- None selected
72
-
73
- Reset filters
74
-
75
- * * *
76
-
77
- System users
78
- | User | Name | Status | Location | Gender |
79
- | --- | --- | --- | --- | --- |
80
- | farmboy | Luke Skywalker | Inactive | Temple Island | male |
81
- | nevertellmetheodds | Han Solo | Inactive | unknown | male |
82
- | goldenrod | C-3PO | Active | Space | n/a |
83
- | whistles | R2-D2 | Active | Space | n/a |
84
- | princess | Leia Organa | Inactive | unknown | female |
85
-
86
- Hide code
87
-
88
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
89
-
90
- import {
91
- IressInline,
92
- IressStack,
93
- IressTable,
94
- LabelValueMeta,
95
- IressFilter,
96
- IressFilterProps,
97
- IressButton,
98
- IressDivider,
99
- } from '@iress-oss/ids-components';
100
- import { useMemo, useState } from 'react';
101
- import { searchStarWarsCharacters } from '@/mocks/starWars';
102
- const toArray \= <T,\>(item?: T | T\[\]): T\[\] \=> {
103
- if (Array.isArray(item)) {
104
- return item;
105
- }
106
- return item !== undefined ? \[item\] : \[\];
107
- };
108
- const USERS \= \[
109
- {
110
- user: 'farmboy',
111
- name: 'Luke Skywalker',
112
- location: 'Temple Island',
113
- gender: 'male',
114
- status: 'Inactive',
115
- },
116
- {
117
- user: 'nevertellmetheodds',
118
- name: 'Han Solo',
119
- location: 'unknown',
120
- gender: 'male',
121
- status: 'Inactive',
122
- },
123
- {
124
- user: 'goldenrod',
125
- name: 'C-3PO',
126
- location: 'Space',
127
- gender: 'n/a',
128
- status: 'Active',
129
- },
130
- {
131
- user: 'whistles',
132
- name: 'R2-D2',
133
- location: 'Space',
134
- gender: 'n/a',
135
- status: 'Active',
136
- },
137
- {
138
- user: 'princess',
139
- name: 'Leia Organa',
140
- location: 'unknown',
141
- gender: 'female',
142
- status: 'Inactive',
143
- },
144
- \];
145
- const getUniqueValues \= (key: string): LabelValueMeta\[\] \=> {
146
- const unique: string\[\] \= \[\];
147
- USERS.forEach((user) \=> {
148
- const propVal \= user\[key as never\];
149
- if (!unique.includes(propVal)) unique.push(propVal);
150
- });
151
- return unique.map((item: string) \=> ({
152
- label: item,
153
- value: item,
154
- }));
155
- };
156
- export const FilterSearchTable \= () \=> {
157
- const \[name, setName\] \= useState<LabelValueMeta\[\]\>(\[\]);
158
- const \[status, setStatus\] \= useState<LabelValueMeta\[\]\>(\[\]);
159
- const \[location, setLocation\] \= useState<LabelValueMeta\[\]\>(\[\]);
160
- const \[gender, setGender\] \= useState<LabelValueMeta\[\]\>(\[\]);
161
- const columns \= \[
162
- { key: 'user', label: 'User' },
163
- { key: 'name', label: 'Name' },
164
- { key: 'status', label: 'Status' },
165
- { key: 'location', label: 'Location' },
166
- { key: 'gender', label: 'Gender' },
167
- \];
168
- const rows \= useMemo(() \=> {
169
- const match \= (filter: LabelValueMeta\[\], detail: string): boolean \=>
170
- filter.length \=== 0 ||
171
- filter.some(
172
- (filterItem) \=> (filterItem.value ?? filterItem.label) \=== detail,
173
- );
174
- return USERS.filter(
175
- (user) \=>
176
- match(name, user.name) &&
177
- match(status, user.status) &&
178
- match(location, user.location) &&
179
- match(gender, user.gender),
180
- );
181
- }, \[name, status, location, gender\]);
182
- const handleReset \= () \=> {
183
- setName(\[\]);
184
- setStatus(\[\]);
185
- setLocation(\[\]);
186
- setGender(\[\]);
187
- };
188
- return (
189
- <IressStack gutter\={IressStack.Gutter.Md}\>
190
- <IressInline gutter\={IressInline.Gutter.Md}\>
191
- <IressFilter
192
- {...{
193
- label: 'Filter',
194
- options: \[
195
- {
196
- label: 'Option 1',
197
- value: 1,
198
- },
199
- {
200
- label: 'Option 2',
201
- value: 2,
202
- },
203
- {
204
- label: 'Option 3',
205
- value: 3,
206
- },
207
- {
208
- label: 'Option 4',
209
- value: 4,
210
- },
211
- {
212
- label: 'Option 5',
213
- value: 5,
214
- },
215
- \],
216
- popoverProps: {
217
- container: document.body,
218
- },
219
- visibleResetButton: true,
220
- }}
221
- label\="Name"
222
- options\={searchStarWarsCharacters}
223
- value\={name}
224
- onChange\={(value) \=> setName(toArray(value))}
225
- onReset\={() \=> setName(\[\])}
226
- />
227
- <IressFilter
228
- {...{
229
- label: 'Filter',
230
- options: \[
231
- {
232
- label: 'Option 1',
233
- value: 1,
234
- },
235
- {
236
- label: 'Option 2',
237
- value: 2,
238
- },
239
- {
240
- label: 'Option 3',
241
- value: 3,
242
- },
243
- {
244
- label: 'Option 4',
245
- value: 4,
246
- },
247
- {
248
- label: 'Option 5',
249
- value: 5,
250
- },
251
- \],
252
- popoverProps: {
253
- container: document.body,
254
- },
255
- visibleResetButton: true,
256
- }}
257
- label\="Status"
258
- options\={getUniqueValues('status')}
259
- value\={status}
260
- onChange\={(value) \=> setStatus(toArray(value))}
261
- onReset\={() \=> setStatus(\[\])}
262
- />
263
- <IressFilter
264
- {...{
265
- label: 'Filter',
266
- options: \[
267
- {
268
- label: 'Option 1',
269
- value: 1,
270
- },
271
- {
272
- label: 'Option 2',
273
- value: 2,
274
- },
275
- {
276
- label: 'Option 3',
277
- value: 3,
278
- },
279
- {
280
- label: 'Option 4',
281
- value: 4,
282
- },
283
- {
284
- label: 'Option 5',
285
- value: 5,
286
- },
287
- \],
288
- popoverProps: {
289
- container: document.body,
290
- },
291
- visibleResetButton: true,
292
- }}
293
- label\="Location"
294
- options\={getUniqueValues('location')}
295
- value\={location}
296
- onChange\={(value) \=> setLocation(toArray(value))}
297
- onReset\={() \=> setLocation(\[\])}
298
- />
299
- <IressFilter
300
- {...{
301
- label: 'Filter',
302
- options: \[
303
- {
304
- label: 'Option 1',
305
- value: 1,
306
- },
307
- {
308
- label: 'Option 2',
309
- value: 2,
310
- },
311
- {
312
- label: 'Option 3',
313
- value: 3,
314
- },
315
- {
316
- label: 'Option 4',
317
- value: 4,
318
- },
319
- {
320
- label: 'Option 5',
321
- value: 5,
322
- },
323
- \],
324
- popoverProps: {
325
- container: document.body,
326
- },
327
- visibleResetButton: true,
328
- }}
329
- label\="Gender"
330
- options\={getUniqueValues('gender')}
331
- value\={gender}
332
- onChange\={(value) \=> setGender(toArray(value))}
333
- onReset\={() \=> setGender(\[\])}
334
- />
335
- <IressButton onClick\={handleReset} mode\={IressButton.Mode.Tertiary}\>
336
- Reset filters </IressButton\>
337
- </IressInline\>
338
- <IressDivider />
339
- <IressTable
340
- caption\="System users"
341
- columns\={columns}
342
- rows\={rows}
343
- empty\={'No results found'}
344
- />
345
- </IressStack\>
346
- );
347
- };
348
-
349
- Copy
350
-
351
- ### [](#label)Label
352
-
353
- The `label` prop is required for the filter to be displayed. It is used to describe the filter to the user.
354
-
355
- When the filter has selected options, it will append the label of the first option, or the number of selected options if `multiSelect` is true and there is more than one item selected.
356
-
357
- Custom label
358
-
359
- None selected
360
-
361
- Hide code
362
-
363
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
364
-
365
- <IressFilter
366
- label\="Custom label"
367
- multiSelect
368
- options\={\[
369
- {
370
- label: 'Option 1',
371
- value: 1
372
- },
373
- {
374
- label: 'Option 2',
375
- value: 2
376
- },
377
- {
378
- label: 'Option 3',
379
- value: 3
380
- },
381
- {
382
- label: 'Option 4',
383
- value: 4
384
- },
385
- {
386
- label: 'Option 5',
387
- value: 5
388
- }
389
- \]}
390
- popoverProps\={{
391
- container: document.body
392
- }}
393
- />
394
-
395
- Copy
396
-
397
- ### [](#uncontrolled)Uncontrolled
398
-
399
- The `defaultValue` prop can be used to set the initial value of the combobox. The value will be managed by the component.
400
-
401
- **Note:** The `defaultValue` prop is not checked against the options provided, allowing it to work with asynchronous options.
402
-
403
- Filter: Option 1
404
-
405
- None selected
406
-
407
- Hide code
408
-
409
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
410
-
411
- <IressFilter
412
- defaultValue\={{
413
- label: 'Option 1',
414
- value: 1
415
- }}
416
- label\="Filter"
417
- options\={\[
418
- {
419
- label: 'Option 1',
420
- value: 1
421
- },
422
- {
423
- label: 'Option 2',
424
- value: 2
425
- },
426
- {
427
- label: 'Option 3',
428
- value: 3
429
- },
430
- {
431
- label: 'Option 4',
432
- value: 4
433
- },
434
- {
435
- label: 'Option 5',
436
- value: 5
437
- }
438
- \]}
439
- popoverProps\={{
440
- container: document.body
441
- }}
442
- />
443
-
444
- Copy
445
-
446
- ### [](#controlled)Controlled
447
-
448
- The `value` prop can be used to completely control the state of the component. Use the `onChange` and `onReset` props to sync your state with the component.
449
-
450
- **Note:** The `value` prop is not checked against the options provided, allowing it to work with asynchronous options.
451
-
452
- Filter
453
-
454
- None selected
455
-
456
- Hide code
457
-
458
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
459
-
460
- import { IressFilter, IressFilterProps } from '@iress-oss/ids-components';
461
- import { useState } from 'react';
462
- export const FilterUsingState \= () \=> {
463
- const \[value, setValue\] \= useState<IressFilterProps\['value'\]\>();
464
- return (
465
- <IressFilter
466
- {...{
467
- label: 'Filter',
468
- options: \[
469
- {
470
- label: 'Option 1',
471
- value: 1,
472
- },
473
- {
474
- label: 'Option 2',
475
- value: 2,
476
- },
477
- {
478
- label: 'Option 3',
479
- value: 3,
480
- },
481
- {
482
- label: 'Option 4',
483
- value: 4,
484
- },
485
- {
486
- label: 'Option 5',
487
- value: 5,
488
- },
489
- \],
490
- popoverProps: {
491
- container: document.body,
492
- },
493
- }}
494
- onChange\={(newValue) \=> setValue(newValue)}
495
- onReset\={() \=> setValue(undefined)}
496
- value\={value}
497
- />
498
- );
499
- };
500
-
501
- Copy
502
-
503
- ### [](#multiple-selection)Multiple selection
504
-
505
- Using the `multiSelect` prop, the `IressFilter` will allow the user to make multiple selections.
506
-
507
- Filter
508
-
509
- None selected
510
-
511
- Hide code
512
-
513
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
514
-
515
- <IressFilter
516
- label\="Filter"
517
- multiSelect
518
- options\={\[
519
- {
520
- label: 'Option 1',
521
- value: 1
522
- },
523
- {
524
- label: 'Option 2',
525
- value: 2
526
- },
527
- {
528
- label: 'Option 3',
529
- value: 3
530
- },
531
- {
532
- label: 'Option 4',
533
- value: 4
534
- },
535
- {
536
- label: 'Option 5',
537
- value: 5
538
- }
539
- \]}
540
- popoverProps\={{
541
- container: document.body
542
- }}
543
- />
544
-
545
- Copy
546
-
547
- ### [](#providing-options)Providing options
548
-
549
- #### [](#options)`options`
550
-
551
- The `options` prop is required for the combobox. You can provide an array of `LabelValueMeta[]` objects to the `options` prop. Filtering is done based on the `label` property.
552
-
553
- Filter
554
-
555
- None selected
556
-
557
- Hide code
558
-
559
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
560
-
561
- <IressFilter
562
- label\="Filter"
563
- options\={\[
564
- {
565
- label: 'Option 1',
566
- value: 1
567
- },
568
- {
569
- label: 'Option 2',
570
- value: 2
571
- },
572
- {
573
- label: 'Option 3',
574
- value: 3
575
- },
576
- {
577
- label: 'Option 4',
578
- value: 4
579
- },
580
- {
581
- label: 'Option 5',
582
- value: 5
583
- }
584
- \]}
585
- popoverProps\={{
586
- container: document.body
587
- }}
588
- />
589
-
590
- Copy
591
-
592
- #### [](#asynchronous-options)Asynchronous `options`
593
-
594
- If you would like to render suggestions from the server, you can pass a function to the `options` prop. It accepts a string parameter and returns a promise that resolves to an array of `LabelValueMeta[]` objects. No filtering is done for asynchronous options, you must filter the options yourself using the query.
595
-
596
- **Note:** Asynchronous `options` will automatically set the `searchable` prop to true.
597
-
598
- Filter
599
-
600
- None selected
601
-
602
- Hide code
603
-
604
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
605
-
606
- import { IressFilter, IressFilterProps } from '@iress-oss/ids-components';
607
- interface StarWarsCharacter {
608
- name: string;
609
- gender: string;
610
- }
611
- interface StarWarsCharacterApi {
612
- results: StarWarsCharacter\[\];
613
- }
614
- export const FilterUsingAsync \= () \=> (
615
- <IressFilter
616
- {...{
617
- label: 'Filter',
618
- options: \[
619
- {
620
- label: 'Option 1',
621
- value: 1,
622
- },
623
- {
624
- label: 'Option 2',
625
- value: 2,
626
- },
627
- {
628
- label: 'Option 3',
629
- value: 3,
630
- },
631
- {
632
- label: 'Option 4',
633
- value: 4,
634
- },
635
- {
636
- label: 'Option 5',
637
- value: 5,
638
- },
639
- \],
640
- popoverProps: {
641
- container: document.body,
642
- },
643
- searchable: true,
644
- }}
645
- options\={async (query: string) \=> {
646
- if (!query) return \[\];
647
- const data \= await fetch(
648
- \`https://swapi.py4e.com/api/people/?search=${query}\`,
649
- ).then((response) \=> response.json() as Promise<StarWarsCharacterApi\>);
650
- return data.results.map((character: StarWarsCharacter) \=> ({
651
- label: character.name,
652
- value: character.name,
653
- meta: character.gender,
654
- }));
655
- }}
656
- />
657
- );
658
-
659
- Copy
660
-
661
- #### [](#initialoptions)`initialOptions`
662
-
663
- If you want to provide initial options to the user, you can use the `initialOptions` prop. This is useful when you want to provide a list of options to the user before they start typing (eg. recommended search terms).
664
-
665
- **Note:** `initialOptions` only works if `searchable` is true.
666
-
667
- Filter
668
-
669
- None selected
670
-
671
- Hide code
672
-
673
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
674
-
675
- <IressFilter
676
- initialOptions\={\[
677
- {
678
- label: 'Favourite option 1',
679
- value: 'fav-1'
680
- },
681
- {
682
- label: 'Favourite option 2',
683
- value: 'fav-2'
684
- },
685
- {
686
- label: 'Favourite option 3',
687
- value: 'fav-3'
688
- }
689
- \]}
690
- label\="Filter"
691
- options\={\[
692
- {
693
- label: 'Option 1',
694
- value: 1
695
- },
696
- {
697
- label: 'Option 2',
698
- value: 2
699
- },
700
- {
701
- label: 'Option 3',
702
- value: 3
703
- },
704
- {
705
- label: 'Option 4',
706
- value: 4
707
- },
708
- {
709
- label: 'Option 5',
710
- value: 5
711
- }
712
- \]}
713
- popoverProps\={{
714
- container: document.body
715
- }}
716
- searchable
717
- />
718
-
719
- Copy
720
-
721
- ### [](#complex-options)Complex Options
722
-
723
- The options prop also accepts further properties for each option. This is useful for displaying other data that compliments the main label.
724
-
725
- * append: accepts a ReactNode to append to the end of the option, usually a badge.
726
- * meta: accepts a ReactNode to display additional information about the option.
727
- * prepend: accepts a ReactNode to add to the start of the option, usually an icon.
728
-
729
- All `IressFilter`s accept meta as an attribute in the option array.
730
-
731
- User
732
-
733
- None selected
734
-
735
- Hide code
736
-
737
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
738
-
739
- <IressFilter
740
- label\="User"
741
- options\={\[
742
- {
743
- label: 'John Smith',
744
- meta: \[
745
- <IressText key\="opt1-type" element\="small" mode\="muted"\>Individual</IressText\>,
746
- <IressText key\="opt1-email" element\="small" mode\="muted"\>test@iress.com</IressText\>
747
- \],
748
- value: 'opt1'
749
- },
750
- {
751
- label: 'Tom Wilson',
752
- meta: \[
753
- <IressText key\="opt2-type" element\="small" mode\="muted"\>Individual</IressText\>
754
- \],
755
- value: 'opt2'
756
- },
757
- {
758
- append: <IressBadge mode\="success"\>Active</IressBadge\>,
759
- label: 'Alice Kay',
760
- meta: \[
761
- <IressText key\="opt3-type" element\="small" mode\="muted"\>Individual</IressText\>
762
- \],
763
- value: 'opt3'
764
- },
765
- {
766
- label: 'John Smith',
767
- meta: \[
768
- <IressText key\="opt4-type" element\="small" mode\="muted"\>Business</IressText\>,
769
- <IressText key\="opt4-phone" element\="small" mode\="muted"\>0432325675</IressText\>
770
- \],
771
- value: 'opt4'
772
- },
773
- {
774
- label: 'Eelin Team',
775
- meta: \[
776
- <IressText key\="opt5-contact" element\="small" mode\="muted"\>test2@iress.com, 0432325675</IressText\>
777
- \],
778
- value: 'opt5'
779
- },
780
- {
781
- label: 'Eelin Team',
782
- meta: \[
783
- <IressText key\="opt6-contact" element\="small" mode\="muted"\>test3@iress.com, 0439873244</IressText\>
784
- \],
785
- value: 'opt6'
786
- }
787
- \]}
788
- popoverProps\={{
789
- container: document.body
790
- }}
791
- />
792
-
793
- Copy
794
-
795
- [](#behaviour)Behaviour
796
- -----------------------
797
-
798
- * When the activator is tapped, the filter will open
799
- * Up and Down Arrow keys are used to navigate the options
800
- * When focus is on the search input:
801
- * Pressing the down key will move focus to the first menu item
802
- * If `visibleResetButton` is set to true, pressing the down key will focus the reset button instead
803
- * When focus is on the reset button:
804
- * Pressing the down key will move focus to the first menu item
805
- * Pressing the Space or Enter keys when focussed on an option will select it
806
- * Pressing the Escape key will close the filter and place focus back on to the activator button
807
-
808
- [](#examples)Examples
809
- ---------------------
810
-
811
- ### [](#input-props)Input props
812
-
813
- You can customise some settings of the query input by setting the `inputProps`.
814
-
815
- It does have some defaults to help with user experience. `prepend` automatically has a search icon, and `clearable` and `watermark` are set to true by default.
816
-
817
- Filter
818
-
819
- None selected
820
-
821
- Hide code
822
-
823
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
824
-
825
- <IressFilter
826
- inputProps\={{
827
- placeholder: 'Search...'
828
- }}
829
- label\="Filter"
830
- options\={\[
831
- {
832
- label: 'Option 1',
833
- value: 1
834
- },
835
- {
836
- label: 'Option 2',
837
- value: 2
838
- },
839
- {
840
- label: 'Option 3',
841
- value: 3
842
- },
843
- {
844
- label: 'Option 4',
845
- value: 4
846
- },
847
- {
848
- label: 'Option 5',
849
- value: 5
850
- }
851
- \]}
852
- popoverProps\={{
853
- container: document.body
854
- }}
855
- searchable
856
- />
857
-
858
- Copy
859
-
860
- ### [](#searchable)Searchable
861
-
862
- When an `IressFilter` has 10 or more options, it is recommended that you enable the search functionality. This can be done by adding the `searchable` prop.
863
-
864
- **Note:** When using asynchronous options, the `searchable` prop is automatically set to true.
865
-
866
- Filter
867
-
868
- None selected
869
-
870
- Hide code
871
-
872
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
873
-
874
- <IressFilter
875
- label\="Filter"
876
- options\={\[
877
- {
878
- label: 'Option 1',
879
- value: 1
880
- },
881
- {
882
- label: 'Option 2',
883
- value: 2
884
- },
885
- {
886
- label: 'Option 3',
887
- value: 3
888
- },
889
- {
890
- label: 'Option 4',
891
- value: 4
892
- },
893
- {
894
- label: 'Option 5',
895
- value: 5
896
- }
897
- \]}
898
- popoverProps\={{
899
- container: {}
900
- }}
901
- searchable
902
- />
903
-
904
- Copy
905
-
906
- ### [](#reset-filters)Reset filters
907
-
908
- Adding the `visibleResetButton` prop adds a way for the user a way to easily reset their choices. This works for single and multiple selection filters.
909
-
910
- Below are examples of both single selects and multi selects with `visibleResetButton` enabled.
911
-
912
- Filter
913
-
914
- None selected
915
-
916
- Hide code
917
-
918
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
919
-
920
- <IressFilter
921
- label\="Filter"
922
- options\={\[
923
- {
924
- label: 'Option 1',
925
- value: 1
926
- },
927
- {
928
- label: 'Option 2',
929
- value: 2
930
- },
931
- {
932
- label: 'Option 3',
933
- value: 3
934
- },
935
- {
936
- label: 'Option 4',
937
- value: 4
938
- },
939
- {
940
- label: 'Option 5',
941
- value: 5
942
- }
943
- \]}
944
- popoverProps\={{
945
- container: document.body
946
- }}
947
- visibleResetButton
948
- />
949
-
950
- Copy
951
-
952
- ### [](#no-results)No results
953
-
954
- If you would like to show a message when there are no results, you can use the `searchNoResultsText` prop. It accepts any React node.
955
-
956
- Filter
957
-
958
- None selected
959
-
960
- Hide code
961
-
962
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
963
-
964
- <IressFilter
965
- inputProps\={{
966
- placeholder: 'Type "no" to see the no results text'
967
- }}
968
- label\="Filter"
969
- options\={\[
970
- {
971
- label: 'Option 1',
972
- value: 1
973
- },
974
- {
975
- label: 'Option 2',
976
- value: 2
977
- },
978
- {
979
- label: 'Option 3',
980
- value: 3
981
- },
982
- {
983
- label: 'Option 4',
984
- value: 4
985
- },
986
- {
987
- label: 'Option 5',
988
- value: 5
989
- }
990
- \]}
991
- popoverProps\={{
992
- container: document.body
993
- }}
994
- searchNoResultsText\={<IressPanel className\="iress-u-text"\>No results found</IressPanel\>}
995
- searchable
996
- />
997
-
998
- Copy
999
-
1000
- ### [](#popover-props)Popover props
1001
-
1002
- Under the hood, filter uses `IressPopover` to display the filter options. You can customise this with `popoverProps`. It accepts `align`, `className`, `container` and `displayMode`.
1003
-
1004
- There are two additional props that filter accepts to customise the popover: `append` and `prepend`. You can place additional content above or below the results using these props.
1005
-
1006
- Filter
1007
-
1008
- None selected
1009
-
1010
- Hide code
1011
-
1012
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
1013
-
1014
- <IressFilter
1015
- label\="Filter"
1016
- options\={\[
1017
- {
1018
- label: 'Option 1',
1019
- value: 1
1020
- },
1021
- {
1022
- label: 'Option 2',
1023
- value: 2
1024
- },
1025
- {
1026
- label: 'Option 3',
1027
- value: 3
1028
- },
1029
- {
1030
- label: 'Option 4',
1031
- value: 4
1032
- },
1033
- {
1034
- label: 'Option 5',
1035
- value: 5
1036
- }
1037
- \]}
1038
- popoverProps\={{
1039
- append: <IressPanel\><IressButton\>Add an option</IressButton\></IressPanel\>,
1040
- container: document.body
1041
- }}
1042
- />
1043
-
1044
- Copy
1045
-
1046
- ### [](#selected-options-text)Selected options text
1047
-
1048
- In `multiSelect` mode, the selections options are displayed using the `selectedOptionsText` prop. You can customise this text to suit your needs. It will replace `{{numOptions}}` with the number of selected options.
1049
-
1050
- Filter
1051
-
1052
- None selected
1053
-
1054
- Hide code
1055
-
1056
- \[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
1057
-
1058
- <IressFilter
1059
- label\="Filter"
1060
- multiSelect
1061
- options\={\[
1062
- {
1063
- label: 'Option 1',
1064
- value: 1
1065
- },
1066
- {
1067
- label: 'Option 2',
1068
- value: 2
1069
- },
1070
- {
1071
- label: 'Option 3',
1072
- value: 3
1073
- },
1074
- {
1075
- label: 'Option 4',
1076
- value: 4
1077
- },
1078
- {
1079
- label: 'Option 5',
1080
- value: 5
1081
- }
1082
- \]}
1083
- popoverProps\={{
1084
- container: document.body
1085
- }}
1086
- selectedOptionsText\="{{numOptions}} activated"
1087
- />
1088
-
1089
- Copy
1090
-
1091
- On this page
1092
-
1093
- * [Overview](#overview)
1094
- * [Props](#props)
1095
- * [Usage](#usage)
1096
- * [Label](#label)
1097
- * [Uncontrolled](#uncontrolled)
1098
- * [Controlled](#controlled)
1099
- * [Multiple selection](#multiple-selection)
1100
- * [Providing options](#providing-options)
1101
- * [Complex Options](#complex-options)
1102
- * [Behaviour](#behaviour)
1103
- * [Examples](#examples)
1104
- * [Input props](#input-props)
1105
- * [Searchable](#searchable)
1106
- * [Reset filters](#reset-filters)
1107
- * [No results](#no-results)
1108
- * [Popover props](#popover-props)
1109
- * [Selected options text](#selected-options-text)