@dhis2-ui/select 10.9.1 → 10.10.0-alpha.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 (148) hide show
  1. package/build/cjs/index.js +18 -4
  2. package/build/cjs/locales/en/translations.json +7 -5
  3. package/build/cjs/simple-single-select/__stories__/DefaultPosition.js +38 -0
  4. package/build/cjs/simple-single-select/__stories__/Dense.js +22 -0
  5. package/build/cjs/simple-single-select/__stories__/Empty.js +20 -0
  6. package/build/cjs/simple-single-select/__stories__/EmptyWithEmptyNode.js +28 -0
  7. package/build/cjs/simple-single-select/__stories__/EmptyWithEmptyText.js +21 -0
  8. package/build/cjs/simple-single-select/__stories__/FlippedPosition.js +37 -0
  9. package/build/cjs/simple-single-select/__stories__/InfiniteLoading.js +61 -0
  10. package/build/cjs/simple-single-select/__stories__/Loading.js +20 -0
  11. package/build/cjs/simple-single-select/__stories__/ShiftedIntoView.js +28 -0
  12. package/build/cjs/simple-single-select/__stories__/WithClearButton.js +25 -0
  13. package/build/cjs/simple-single-select/__stories__/WithCustomLowMaxHeight.js +22 -0
  14. package/build/cjs/simple-single-select/__stories__/WithCustomOptions.js +48 -0
  15. package/build/cjs/simple-single-select/__stories__/WithDisabledOption.js +28 -0
  16. package/build/cjs/simple-single-select/__stories__/WithFilterField.js +36 -0
  17. package/build/cjs/simple-single-select/__stories__/WithInitialFocus.js +38 -0
  18. package/build/cjs/simple-single-select/__stories__/WithManyOptions.js +24 -0
  19. package/build/cjs/simple-single-select/__stories__/WithNoMatchText.js +30 -0
  20. package/build/cjs/simple-single-select/__stories__/WithOnBlur.js +23 -0
  21. package/build/cjs/simple-single-select/__stories__/WithOnFocus.js +23 -0
  22. package/build/cjs/simple-single-select/__stories__/WithOptionsAndDisabled.js +22 -0
  23. package/build/cjs/simple-single-select/__stories__/WithOptionsAndLoading.js +34 -0
  24. package/build/cjs/simple-single-select/__stories__/WithOptionsAndLoadingText.js +35 -0
  25. package/build/cjs/simple-single-select/__stories__/WithPlaceholder.js +23 -0
  26. package/build/cjs/simple-single-select/__stories__/WithPlaceholderAndSelection.js +25 -0
  27. package/build/cjs/simple-single-select/__stories__/WithPrefix.js +22 -0
  28. package/build/cjs/simple-single-select/__stories__/WithPrefixAndSelection.js +25 -0
  29. package/build/cjs/simple-single-select/__stories__/WithRTL.js +34 -0
  30. package/build/cjs/simple-single-select/__stories__/WithSelection.js +24 -0
  31. package/build/cjs/simple-single-select/__stories__/WithSelectionAndDisabled.js +25 -0
  32. package/build/cjs/simple-single-select/__stories__/WithoutOptionsAndLoading.js +21 -0
  33. package/build/cjs/simple-single-select/__stories__/WithoutSelection.js +22 -0
  34. package/build/cjs/simple-single-select/__stories__/options.js +77 -0
  35. package/build/cjs/simple-single-select/features/keyboard-interactions.test.e2e.js +441 -0
  36. package/build/cjs/simple-single-select/features/menu-positioning.test.e2e.js +152 -0
  37. package/build/cjs/simple-single-select/index.js +19 -0
  38. package/build/cjs/simple-single-select/is-option-hidden.js +22 -0
  39. package/build/cjs/simple-single-select/menu/empty.js +26 -0
  40. package/build/cjs/simple-single-select/menu/filter.js +60 -0
  41. package/build/cjs/simple-single-select/menu/index.js +12 -0
  42. package/build/cjs/simple-single-select/menu/loading.js +30 -0
  43. package/build/cjs/simple-single-select/menu/menu.js +158 -0
  44. package/build/cjs/simple-single-select/menu/no-match.js +28 -0
  45. package/build/cjs/simple-single-select/menu/option.js +120 -0
  46. package/build/cjs/simple-single-select/menu/options-list.js +97 -0
  47. package/build/cjs/simple-single-select/selected-value/clear-button.js +74 -0
  48. package/build/cjs/simple-single-select/selected-value/container.js +100 -0
  49. package/build/cjs/simple-single-select/selected-value/index.js +12 -0
  50. package/build/cjs/simple-single-select/selected-value/placeholder.js +30 -0
  51. package/build/cjs/simple-single-select/selected-value/prefix.js +30 -0
  52. package/build/cjs/simple-single-select/selected-value/selected-value.js +119 -0
  53. package/build/cjs/simple-single-select/shared-prop-types.js +14 -0
  54. package/build/cjs/simple-single-select/simple-single-select.e2e.stories.js +156 -0
  55. package/build/cjs/simple-single-select/simple-single-select.js +319 -0
  56. package/build/cjs/simple-single-select/simple-single-select.prod.stories.js +228 -0
  57. package/build/cjs/simple-single-select/simple-single-select.test.js +1106 -0
  58. package/build/cjs/simple-single-select/use-handle-key-press/index.js +19 -0
  59. package/build/cjs/simple-single-select/use-handle-key-press/use-focus-option.js +24 -0
  60. package/build/cjs/simple-single-select/use-handle-key-press/use-handle-key-press-on-combobox.js +177 -0
  61. package/build/cjs/simple-single-select/use-handle-key-press/use-handle-key-press-on-filter-input.js +106 -0
  62. package/build/cjs/simple-single-select/use-handle-key-press/use-handle-typing.js +81 -0
  63. package/build/cjs/simple-single-select/use-handle-key-press/use-highlight-first-option-on-previous-page.js +50 -0
  64. package/build/cjs/simple-single-select/use-handle-key-press/use-highlight-first-visible-option.js +30 -0
  65. package/build/cjs/simple-single-select/use-handle-key-press/use-highlight-last-option-on-next-page.js +50 -0
  66. package/build/cjs/simple-single-select/use-handle-key-press/use-highlight-last-visible-option.js +42 -0
  67. package/build/cjs/simple-single-select/use-handle-key-press/use-page-down.js +45 -0
  68. package/build/cjs/simple-single-select/use-handle-key-press/use-page-up.js +44 -0
  69. package/build/cjs/simple-single-select/use-handle-key-press/utils.js +46 -0
  70. package/build/cjs/simple-single-select-field/index.js +12 -0
  71. package/build/cjs/simple-single-select-field/simple-single-select-field.js +138 -0
  72. package/build/cjs/simple-single-select-field/simple-single-select-field.prod.stories.js +188 -0
  73. package/build/cjs/simple-single-select-field/simple-single-select-field.test.js +133 -0
  74. package/build/es/index.js +2 -0
  75. package/build/es/locales/en/translations.json +7 -5
  76. package/build/es/simple-single-select/__stories__/DefaultPosition.js +29 -0
  77. package/build/es/simple-single-select/__stories__/Dense.js +13 -0
  78. package/build/es/simple-single-select/__stories__/Empty.js +11 -0
  79. package/build/es/simple-single-select/__stories__/EmptyWithEmptyNode.js +19 -0
  80. package/build/es/simple-single-select/__stories__/EmptyWithEmptyText.js +12 -0
  81. package/build/es/simple-single-select/__stories__/FlippedPosition.js +28 -0
  82. package/build/es/simple-single-select/__stories__/InfiniteLoading.js +53 -0
  83. package/build/es/simple-single-select/__stories__/Loading.js +12 -0
  84. package/build/es/simple-single-select/__stories__/ShiftedIntoView.js +18 -0
  85. package/build/es/simple-single-select/__stories__/WithClearButton.js +16 -0
  86. package/build/es/simple-single-select/__stories__/WithCustomLowMaxHeight.js +13 -0
  87. package/build/es/simple-single-select/__stories__/WithCustomOptions.js +38 -0
  88. package/build/es/simple-single-select/__stories__/WithDisabledOption.js +19 -0
  89. package/build/es/simple-single-select/__stories__/WithFilterField.js +27 -0
  90. package/build/es/simple-single-select/__stories__/WithInitialFocus.js +29 -0
  91. package/build/es/simple-single-select/__stories__/WithManyOptions.js +15 -0
  92. package/build/es/simple-single-select/__stories__/WithNoMatchText.js +21 -0
  93. package/build/es/simple-single-select/__stories__/WithOnBlur.js +14 -0
  94. package/build/es/simple-single-select/__stories__/WithOnFocus.js +14 -0
  95. package/build/es/simple-single-select/__stories__/WithOptionsAndDisabled.js +13 -0
  96. package/build/es/simple-single-select/__stories__/WithOptionsAndLoading.js +25 -0
  97. package/build/es/simple-single-select/__stories__/WithOptionsAndLoadingText.js +26 -0
  98. package/build/es/simple-single-select/__stories__/WithPlaceholder.js +14 -0
  99. package/build/es/simple-single-select/__stories__/WithPlaceholderAndSelection.js +16 -0
  100. package/build/es/simple-single-select/__stories__/WithPrefix.js +13 -0
  101. package/build/es/simple-single-select/__stories__/WithPrefixAndSelection.js +16 -0
  102. package/build/es/simple-single-select/__stories__/WithRTL.js +25 -0
  103. package/build/es/simple-single-select/__stories__/WithSelection.js +15 -0
  104. package/build/es/simple-single-select/__stories__/WithSelectionAndDisabled.js +16 -0
  105. package/build/es/simple-single-select/__stories__/WithoutOptionsAndLoading.js +12 -0
  106. package/build/es/simple-single-select/__stories__/WithoutSelection.js +13 -0
  107. package/build/es/simple-single-select/__stories__/options.js +71 -0
  108. package/build/es/simple-single-select/features/keyboard-interactions.test.e2e.js +439 -0
  109. package/build/es/simple-single-select/features/menu-positioning.test.e2e.js +150 -0
  110. package/build/es/simple-single-select/index.js +2 -0
  111. package/build/es/simple-single-select/is-option-hidden.js +16 -0
  112. package/build/es/simple-single-select/menu/empty.js +19 -0
  113. package/build/es/simple-single-select/menu/filter.js +53 -0
  114. package/build/es/simple-single-select/menu/index.js +1 -0
  115. package/build/es/simple-single-select/menu/loading.js +23 -0
  116. package/build/es/simple-single-select/menu/menu.js +149 -0
  117. package/build/es/simple-single-select/menu/no-match.js +21 -0
  118. package/build/es/simple-single-select/menu/option.js +111 -0
  119. package/build/es/simple-single-select/menu/options-list.js +88 -0
  120. package/build/es/simple-single-select/selected-value/clear-button.js +68 -0
  121. package/build/es/simple-single-select/selected-value/container.js +91 -0
  122. package/build/es/simple-single-select/selected-value/index.js +1 -0
  123. package/build/es/simple-single-select/selected-value/placeholder.js +23 -0
  124. package/build/es/simple-single-select/selected-value/prefix.js +23 -0
  125. package/build/es/simple-single-select/selected-value/selected-value.js +112 -0
  126. package/build/es/simple-single-select/shared-prop-types.js +7 -0
  127. package/build/es/simple-single-select/simple-single-select.e2e.stories.js +142 -0
  128. package/build/es/simple-single-select/simple-single-select.js +310 -0
  129. package/build/es/simple-single-select/simple-single-select.prod.stories.js +36 -0
  130. package/build/es/simple-single-select/simple-single-select.test.js +1103 -0
  131. package/build/es/simple-single-select/use-handle-key-press/index.js +2 -0
  132. package/build/es/simple-single-select/use-handle-key-press/use-focus-option.js +18 -0
  133. package/build/es/simple-single-select/use-handle-key-press/use-handle-key-press-on-combobox.js +171 -0
  134. package/build/es/simple-single-select/use-handle-key-press/use-handle-key-press-on-filter-input.js +100 -0
  135. package/build/es/simple-single-select/use-handle-key-press/use-handle-typing.js +75 -0
  136. package/build/es/simple-single-select/use-handle-key-press/use-highlight-first-option-on-previous-page.js +44 -0
  137. package/build/es/simple-single-select/use-handle-key-press/use-highlight-first-visible-option.js +24 -0
  138. package/build/es/simple-single-select/use-handle-key-press/use-highlight-last-option-on-next-page.js +44 -0
  139. package/build/es/simple-single-select/use-handle-key-press/use-highlight-last-visible-option.js +36 -0
  140. package/build/es/simple-single-select/use-handle-key-press/use-page-down.js +39 -0
  141. package/build/es/simple-single-select/use-handle-key-press/use-page-up.js +38 -0
  142. package/build/es/simple-single-select/use-handle-key-press/utils.js +36 -0
  143. package/build/es/simple-single-select-field/index.js +1 -0
  144. package/build/es/simple-single-select-field/simple-single-select-field.js +131 -0
  145. package/build/es/simple-single-select-field/simple-single-select-field.prod.stories.js +172 -0
  146. package/build/es/simple-single-select-field/simple-single-select-field.test.js +130 -0
  147. package/package.json +15 -15
  148. package/types/index.d.ts +184 -1
package/types/index.d.ts CHANGED
@@ -30,6 +30,16 @@ export type SelectKeyHandler<T extends BaseEventPayload> = SelectEventHandler<
30
30
  export type SelectChangeHandler<T extends BaseEventPayload> =
31
31
  SelectEventHandler<T, React.MouseEvent>
32
32
 
33
+ type TranslateableProp = string | ((interpolationObject: any) => string)
34
+
35
+ /**
36
+ * ====================
37
+ *
38
+ * <MultiSelect />
39
+ *
40
+ * ====================
41
+ **/
42
+
33
43
  export interface MultiSelectProps {
34
44
  children?: React.ReactNode
35
45
  className?: string
@@ -74,7 +84,13 @@ export interface MultiSelectProps {
74
84
 
75
85
  export const MultiSelect: React.FC<MultiSelectProps>
76
86
 
77
- type TranslateableProp = string | ((interpolationObject: any) => string)
87
+ /**
88
+ * ====================
89
+ *
90
+ * <MultiSelectField />
91
+ *
92
+ * ====================
93
+ **/
78
94
 
79
95
  export interface MultiSelectFieldProps {
80
96
  /**
@@ -205,6 +221,14 @@ export class MultiSelectField extends React.Component<
205
221
  render(): JSX.Element
206
222
  }
207
223
 
224
+ /**
225
+ * ====================
226
+ *
227
+ * <MultiSelectOption />
228
+ *
229
+ * ====================
230
+ **/
231
+
208
232
  export interface MultiSelectOptionProps {
209
233
  label: string
210
234
  value: string
@@ -217,6 +241,14 @@ export interface MultiSelectOptionProps {
217
241
 
218
242
  export const MultiSelectOption: React.FC<MultiSelectOptionProps>
219
243
 
244
+ /**
245
+ * ====================
246
+ *
247
+ * <SingleSelect />
248
+ *
249
+ * ====================
250
+ **/
251
+
220
252
  export interface SingleSelectProps {
221
253
  children?: React.ReactNode
222
254
  className?: string
@@ -273,6 +305,149 @@ export interface SingleSelectProps {
273
305
 
274
306
  export const SingleSelect: React.FC<SingleSelectProps>
275
307
 
308
+ /**
309
+ * ====================
310
+ *
311
+ * <SimpleSingleSelect />
312
+ *
313
+ * ====================
314
+ **/
315
+
316
+ type SimpleSingleSelectCustomOptionProp = (props: {
317
+ value: string
318
+ label: string
319
+ index: number
320
+ disabled: boolean
321
+ highlighted: boolean
322
+ }) => JSX.Element
323
+
324
+ export interface SimpleSingleSelectProps {
325
+ /** necessary for IDs that are required for accessibility **/
326
+ idPrefix: string.isRequired
327
+
328
+ /** An array of options **/
329
+ options: Array<{
330
+ label: string
331
+ value: string
332
+ component?: SimpleSingleSelectCustomOptionProp
333
+ disabled?: boolean
334
+ }>
335
+
336
+ /** A callback that will be called with the new value or an empty string **/
337
+ onChange: (value: string) => void
338
+
339
+ /** Will focus the select initially **/
340
+ autoFocus?: boolean
341
+
342
+ /** Additional class names that will be applied to the root element **/
343
+ className?: string
344
+
345
+ /** This will allow us to put an aria-label on the clear button **/
346
+ clearText?: string
347
+
348
+ /** Whether a clear button should be displayed or not **/
349
+ clearable?: boolean
350
+
351
+ /** Allows to override what's rendered inside the `button[role="option"]`.
352
+ * Can be overriden on an individual option basis **/
353
+ customOption?: SimpleSingleSelectCustomOptionProp
354
+
355
+ /** A value for a `data-test` attribute on the root element **/
356
+ dataTest?: string
357
+
358
+ /** Renders a select with lower height **/
359
+ dense?: boolean
360
+
361
+ /** Disables all interactions with the select (except focussing) **/
362
+ disabled?: boolean
363
+
364
+ /** Text or component to display when there are no options **/
365
+ empty?: React.ReactNode
366
+
367
+ /** Applies 'error' appearance for validation feedback. Mutually exclusive with `warning` and `valid` props **/
368
+ error?: boolean
369
+
370
+ /** Help text that will be displayed below the input **/
371
+ filterHelpText?: string
372
+
373
+ /** Value will be used as aria-label attribute on the filter input **/
374
+ filterLabel?: string
375
+
376
+ /** Placeholder for the filter input **/
377
+ filterPlaceholder?: string
378
+
379
+ /** Value of the filter input **/
380
+ filterValue?: string
381
+
382
+ /** Whether the select should display a filter input **/
383
+ filterable?: boolean
384
+
385
+ /** Should contain the id of the element that labels the select, if applicable **/
386
+ labelledBy?: string
387
+
388
+ /** Will show a loading indicator at the end of the options-list **/
389
+ loading?: boolean
390
+
391
+ /** Text that will be displayed next to the loading indicator **/
392
+ menuLoadingText?: string
393
+
394
+ /** Allows to modify the max height of the menu **/
395
+ menuMaxHeight?: string
396
+
397
+ /** String that will be displayed when the select is being filtered but the options array is empty **/
398
+ noMatchText?: string
399
+
400
+ /** For a11y: How aggressively the user should be updated about changes in options **/
401
+ optionUpdateStrategy?: 'off' | 'polite' | 'assertive'
402
+
403
+ /** String to show when there's no value and no valueLabel **/
404
+ placeholder?: string
405
+
406
+ /** String that will be displayed before the label of the selected option **/
407
+ prefix?: string
408
+
409
+ /** Standard HTML tab-index attribute that will be put on the combobox's root element **/
410
+ tabIndex?: number | string
411
+
412
+ /** Applies 'valid' appearance for validation feedback. Mutually exclusive with `warning` and `valid` props **/
413
+ valid?: boolean
414
+
415
+ /** As of now, this component does not support being uncontrolled **/
416
+ value?: string
417
+
418
+ /**
419
+ * When the option is not in the options list (e.g. not loaded or list is
420
+ * filtered), but a selected value needs to be displayed, then this prop can
421
+ * be used to supply the text to be shown.
422
+ **/
423
+ valueLabel?: string
424
+
425
+ /** Applies 'warning' appearance for validation feedback. Mutually exclusive with `warning` and `valid` props **/
426
+ warning?: boolean
427
+
428
+ /** Will be called when the combobox is loses focus **/
429
+ onBlur?: (e: React.FocusEvent<HTMLElement>) => void
430
+
431
+ /** Will be called when the last option is scrolled into the visible area **/
432
+ onEndReached?: () => void
433
+
434
+ /** Will be called when the filter value changes **/
435
+ onFilterChange?: (value: string) => void
436
+
437
+ /** Will be called when the combobox is being focused **/
438
+ onFocus?: (e: React.FocusEvent<HTMLElement>) => void
439
+ }
440
+
441
+ export const SimpleSingleSelect: React.FC<SimpleSingleSelectProps>
442
+
443
+ /**
444
+ * ====================
445
+ *
446
+ * <SingleSelectField />
447
+ *
448
+ * ====================
449
+ **/
450
+
276
451
  export interface SingleSelectFieldProps {
277
452
  /**
278
453
  * Should be `SingleSelectOption` components
@@ -402,6 +577,14 @@ export class SingleSelectField extends React.Component<
402
577
  render(): JSX.Element
403
578
  }
404
579
 
580
+ /**
581
+ * ====================
582
+ *
583
+ * <SingleSelectOption />
584
+ *
585
+ * ====================
586
+ **/
587
+
405
588
  export interface SingleSelectOptionProps {
406
589
  label: string
407
590
  value: string