loon-bulma-react 2022.3.11 → 2022.3.14

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 (145) hide show
  1. package/README.md +460 -151
  2. package/dist/components/Button/ButtonProps.d.ts +0 -2
  3. package/dist/components/ButtonGroup/ButtonGroup.d.ts +1 -5
  4. package/dist/components/Form/Checkbox/Checkbox.d.ts +7 -0
  5. package/dist/components/Form/File/FileInput.d.ts +1 -1
  6. package/dist/components/Form/Form.d.ts +15 -0
  7. package/dist/components/Form/Radio/Radio.d.ts +29 -7
  8. package/dist/components/Layout/Box/Box.d.ts +4 -4
  9. package/dist/components/Layout/Columns/Column.d.ts +3 -3
  10. package/dist/components/Layout/Columns/Columns.d.ts +4 -4
  11. package/dist/components/Layout/Container/Container.d.ts +6 -6
  12. package/dist/components/Layout/Content/Content.d.ts +2 -3
  13. package/dist/components/Layout/Section/Section.d.ts +3 -4
  14. package/dist/components/Steps/Steps.d.ts +46 -0
  15. package/dist/components/Tag/Tag.d.ts +0 -2
  16. package/dist/components/TimeLine/TimeLine.d.ts +56 -0
  17. package/dist/hooks/useDebouncedValue.d.ts +4 -13
  18. package/dist/hooks/useHotkeys.d.ts +0 -4
  19. package/dist/hooks/useToggle.d.ts +4 -4
  20. package/dist/index.d.ts +7 -2
  21. package/dist/index.js +451 -313
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.modern.js +448 -311
  24. package/dist/index.modern.js.map +1 -1
  25. package/dist/loon-react-bulma-types.d.ts +2 -1
  26. package/package.json +42 -31
  27. package/styles/_all.scss +3 -0
  28. package/styles/checkradio.scss +533 -0
  29. package/styles/custom-bulma.scss +10 -10
  30. package/styles/indicator-styles.scss +1 -1
  31. package/styles/steps.scss +252 -0
  32. package/styles/timeline.scss +283 -0
  33. package/styles/variables.scss +1 -0
  34. package/dist/components/Button/Button.test.d.ts +0 -1
  35. package/dist/components/Button/ButtonBase.d.ts +0 -22
  36. package/dist/components/Button/InvertedButton.d.ts +0 -44
  37. package/dist/components/Button/LightButton.d.ts +0 -44
  38. package/dist/components/Button/LightOutlinedButton.d.ts +0 -44
  39. package/dist/components/Button/OutlinedButton.d.ts +0 -44
  40. package/dist/components/Button/index.d.ts +0 -2
  41. package/dist/components/ButtonGroup/ButtonGroup.test.d.ts +0 -1
  42. package/dist/components/Calendar/CalendarItems/AlldayEvent.d.ts +0 -17
  43. package/dist/components/Calendar/CalendarItems/ContextMenu.d.ts +0 -7
  44. package/dist/components/Calendar/CalendarItems/Event.d.ts +0 -17
  45. package/dist/components/Calendar/CalendarItems/InvertedEvent.d.ts +0 -17
  46. package/dist/components/Calendar/CalendarItems/MoreEvents.d.ts +0 -19
  47. package/dist/components/Calendar/CalendarItems/TimedEvent.d.ts +0 -17
  48. package/dist/components/Calendar/CalendarItems/base-styles.d.ts +0 -13
  49. package/dist/components/Calendar/CalendarItems/utils.d.ts +0 -13
  50. package/dist/components/Calendar/EventProps.d.ts +0 -8
  51. package/dist/components/Calendar/Month/Cal.Month.View.d.ts +0 -22
  52. package/dist/components/Calendar/Week/DateContainer.d.ts +0 -20
  53. package/dist/components/Calendar/Week/DayContainer.d.ts +0 -22
  54. package/dist/components/Calendar/Week/TimedContainer.d.ts +0 -15
  55. package/dist/components/Calendar/Week/containers.d.ts +0 -22
  56. package/dist/components/Calendar/date-utils.d.ts +0 -224
  57. package/dist/components/Calendar/utils.d.ts +0 -70
  58. package/dist/components/DataTable/DataTable.test.d.ts +0 -1
  59. package/dist/components/Form/Base.Input.Horizontal.d.ts +0 -8
  60. package/dist/components/Form/Base.Input.Vertical.d.ts +0 -6
  61. package/dist/components/Form/Checkbox.d.ts +0 -17
  62. package/dist/components/Form/Checkbox.test.d.ts +0 -1
  63. package/dist/components/Form/ColorInput.d.ts +0 -22
  64. package/dist/components/Form/DateInput.d.ts +0 -21
  65. package/dist/components/Form/DateTimeInput.d.ts +0 -20
  66. package/dist/components/Form/EmailInput.d.ts +0 -25
  67. package/dist/components/Form/FormBuilder.d.ts +0 -9
  68. package/dist/components/Form/FormBuilderProps.d.ts +0 -92
  69. package/dist/components/Form/FormProps.d.ts +0 -91
  70. package/dist/components/Form/FormValidatie.d.ts +0 -32
  71. package/dist/components/Form/HiddenInput.d.ts +0 -19
  72. package/dist/components/Form/MultiRangeInput.d.ts +0 -21
  73. package/dist/components/Form/MultiSelect.d.ts +0 -31
  74. package/dist/components/Form/NumberInput.d.ts +0 -24
  75. package/dist/components/Form/Others/BasicInput.d.ts +0 -31
  76. package/dist/components/Form/PasswordInput.d.ts +0 -24
  77. package/dist/components/Form/RangeInput.d.ts +0 -22
  78. package/dist/components/Form/Select.d.ts +0 -28
  79. package/dist/components/Form/SelectProps.d.ts +0 -21
  80. package/dist/components/Form/TextArea.d.ts +0 -21
  81. package/dist/components/Form/TextInput.d.ts +0 -25
  82. package/dist/components/Form/TimeInput.d.ts +0 -23
  83. package/dist/components/Icon/Icon.test.d.ts +0 -1
  84. package/dist/components/Layout/AspectRatio/AspectRatio.test.d.ts +0 -1
  85. package/dist/components/Layout/Box/Box.test.d.ts +0 -1
  86. package/dist/components/Layout/ButtonGroup/ButtonGroup.d.ts +0 -21
  87. package/dist/components/Layout/Columns/Column.test.d.ts +0 -1
  88. package/dist/components/Layout/Columns/ColumnProps.d.ts +0 -9
  89. package/dist/components/Layout/Columns/Columns.test.d.ts +0 -1
  90. package/dist/components/Layout/Columns/Fifths.d.ts +0 -22
  91. package/dist/components/Layout/Columns/Numbered.d.ts +0 -50
  92. package/dist/components/Layout/Columns/Quarters.d.ts +0 -17
  93. package/dist/components/Layout/Columns/Thirds.d.ts +0 -10
  94. package/dist/components/Layout/Columns/_all.d.ts +0 -5
  95. package/dist/components/Layout/Columns/index.d.ts +0 -1
  96. package/dist/components/Layout/Container/Container.test.d.ts +0 -1
  97. package/dist/components/Layout/Content/Content.test.d.ts +0 -1
  98. package/dist/components/Layout/FlexBox/Flexbox.d.ts +0 -48
  99. package/dist/components/Layout/Footer/Footer.test.d.ts +0 -1
  100. package/dist/components/Layout/Hero/Hero.test.d.ts +0 -1
  101. package/dist/components/Layout/Hero/HeroProps.d.ts +0 -37
  102. package/dist/components/Layout/Image/Image.test.d.ts +0 -1
  103. package/dist/components/Layout/Modal/Modal.d.ts +0 -17
  104. package/dist/components/Layout/ScrollArea/ScrollArea.test.d.ts +0 -1
  105. package/dist/components/Layout/Section/Section.test.d.ts +0 -1
  106. package/dist/components/Link/Link.test.d.ts +0 -1
  107. package/dist/components/Menu/MenuContent.d.ts +0 -4
  108. package/dist/components/Message/Message.test.d.ts +0 -1
  109. package/dist/components/Message/MessageProps.d.ts +0 -11
  110. package/dist/components/Modal/Modal.test.d.ts +0 -1
  111. package/dist/components/Notification/Notification.test.d.ts +0 -1
  112. package/dist/components/Notification/NotificationProps.d.ts +0 -13
  113. package/dist/components/Notification/Notifier.d.ts +0 -2
  114. package/dist/components/Notification/useNotifier.d.ts +0 -9
  115. package/dist/components/Notifier/NotificationProvider.d.ts +0 -1
  116. package/dist/components/Notifier/Notifier.d.ts +0 -9
  117. package/dist/components/Notifier/NotifierHooks.d.ts +0 -1
  118. package/dist/components/Notifier/NotifierProps.d.ts +0 -22
  119. package/dist/components/Notifyer/Notifyer.d.ts +0 -8
  120. package/dist/components/Panel/Panel.d.ts +0 -23
  121. package/dist/components/ProgressBar/ProgressBar.test.d.ts +0 -1
  122. package/dist/components/SimpleTable/SimpleTableProps.d.ts +0 -52
  123. package/dist/components/Table/SimpleTable.d.ts +0 -8
  124. package/dist/components/Table/SimpleTableProps.d.ts +0 -52
  125. package/dist/components/Table/Table.d.ts +0 -45
  126. package/dist/components/Table/Table.test.d.ts +0 -1
  127. package/dist/components/Table/TableProps.d.ts +0 -52
  128. package/dist/components/Tabs/TabProps.d.ts +0 -23
  129. package/dist/components/Tabs/Tabs.d.ts +0 -32
  130. package/dist/components/Tabs/Tabs.test.d.ts +0 -1
  131. package/dist/components/Titles/TitleProps.d.ts +0 -31
  132. package/dist/components/Titles/Titles.test.d.ts +0 -1
  133. package/dist/components/Toggle/Toggle.d.ts +0 -20
  134. package/dist/components/Toggle/ToggleBar.d.ts +0 -20
  135. package/dist/components/ToggleBar/ItemToggleBar.d.ts +0 -43
  136. package/dist/components/ToolTip/ToolTip.d.ts +0 -2
  137. package/dist/components/ToolTip/ToolTipContext.d.ts +0 -17
  138. package/dist/components/ToolTip/useToolTip.d.ts +0 -8
  139. package/dist/contexts/Notifier/NotificationProvider.d.ts +0 -5
  140. package/dist/contexts/Notifier/Notifier.test.d.ts +0 -1
  141. package/dist/contexts/Notifier/useNotifier.d.ts +0 -1
  142. package/dist/contexts/NotifierContext.d.ts +0 -8
  143. package/dist/dev-warning-fn.d.ts +0 -5
  144. package/dist/hooks/useViewToggle.d.ts +0 -18
  145. package/dist/index.test.d.ts +0 -1
package/README.md CHANGED
@@ -1,13 +1,30 @@
1
1
  # loon-bulma-react
2
2
 
3
+ > ## Aanpassingen
4
+ >
5
+ > - Steps Component toegevoegd
6
+ > - TimeLine Component toegevoegd
7
+ > - Checkbox aangepast: heeft nu een `size`, `color`, en een `styling`-prop gekregen
8
+ > - RadioButtons aangepast: heeft nu een `size`, `color`, en een `styling`-prop gekregen
9
+ > - RadioButtons : direction prop werkt
10
+ > - DirectionProp: ipv alleen maar `horizontal`& `vertical` kan je ook `h` en `v` gebruiken
11
+ > - Form-component kan ook RadioButtons aan.
12
+ > - README: hooks-gedeelte aangevuld
13
+ > - `styles`-prop aangemaakt in aantal layout-componenten. Dan kan je direct styles zetten, mocht dat nodig zijn.
14
+ > - Container
15
+ > - Section
16
+ > - Box
17
+ > - Content
18
+ > - Columns
19
+ > - Column
20
+
3
21
  ## [Bulma](https://bulma.io/) & [React](https://reactjs.org/) componenten voor Loon Salarissoftware.
4
22
 
5
23
  - [Installatie](#installatie)
6
24
  - [Gebruik](#gebruik)
7
25
  - [Notifier](#notifier)
8
- - [Gebruik](#notifier-gebruik)
9
- - [Instinkers](#notifier-let-op)
10
26
  - [Componenten](#components)
27
+
11
28
  - [Layout](#layout)
12
29
  - [AspectRatio](#layout-aspectratio)
13
30
  - [Box](#layout-box)
@@ -21,6 +38,7 @@
21
38
  - [Button & ButtonGroup](#component-button)
22
39
  - [Calendar](#components-calendar)
23
40
  - [MonthView](#components-calendar-monthview)
41
+ - [WeekView](#components-calendar-weekview)
24
42
  - [DataTable](#component-datatable)
25
43
  - [Footer](#component-footer)
26
44
  - [Icons (FontAwesome)](#component-icons)
@@ -33,7 +51,9 @@
33
51
  - [ProgressBars](#component-progressbar)
34
52
  - [TabBar](#component-tabbar) (Nieuw, ipv Tabs)
35
53
  - [SimpleTable](#component-simpletable) (Voorheen Table)
54
+ - [Steps](#component-steps) (NIEUW)
36
55
  - [Tag & Tags](#component-tags)
56
+ - [TimeLine](#component-timeline)
37
57
  - [Titles & Subtitles](#component-titles)
38
58
  - [ToggleBar](#component-toggles)
39
59
  - [Form & Inputs](#form)
@@ -61,6 +81,12 @@
61
81
  - [Validatie](#form-validatie)
62
82
  - [Form](#form-form)
63
83
  - [Form-builder](#form-component)
84
+
85
+ - [Hooks](#hooks)
86
+ - [useClipboard](#hooks-use-clipboard)
87
+ - [useDebouncedValue](#hooks-use-debounced-value)
88
+ - [useHotkeys](#hooks-use-hotkeys)
89
+ - [useToggle & useBoolToggle](#hooks-use-toggle)
64
90
  - [Publiceren](#publiceren)
65
91
 
66
92
  ## Installatie <a id="installatie"></a>
@@ -70,8 +96,7 @@
70
96
  Dat kan zonder toevoeging van versienummer. Je gebruikt dan de laatste versie (dus ook laatste jaar-tag) van de componenten. De tag `latest` hoef je niet toe te voegen, dat is de default.
71
97
 
72
98
  ```bash
73
- npm install --save loon-bulma-react
74
- npm install --save bulma
99
+ npm install --save bulma loon-bulma-react
75
100
  ```
76
101
 
77
102
  ### Voor een versie die hoort bij een bepaald jaar (Bijvoorbeeld in Loon-2021).
@@ -89,7 +114,7 @@ Dan wordt altijd de laatste versie van die tag geïnstalleerd, in plaats van de
89
114
  {
90
115
  "devDependencies": {
91
116
  // ...
92
- "loon-bulma-react": "y2021"
117
+ "loon-bulma-react": "y2022"
93
118
  // ...
94
119
  }
95
120
  }
@@ -107,7 +132,7 @@ Dan wordt altijd de laatste versie van die tag geïnstalleerd, in plaats van de
107
132
 
108
133
  ## Gebruik <a id="gebruik"></a>
109
134
 
110
- in `index.tsx`
135
+ in `index.tsx` importeer je de styles. Je kan ze ook allemaal apart importeren, maar begin dan met de `variables.scss`, die zijn overal nodig.
111
136
 
112
137
  ```tsx
113
138
  import 'loon-bulma-react/styles/_all.scss';
@@ -137,9 +162,7 @@ function MyComponent(props) {
137
162
 
138
163
  De notifier is een ContextProvider om vanuit de gehele app notificaties te kunnen tonen. Deze verschijnen aan de rechterkant. Er is een keuze om ze vanaf boven OF onder te tonen. Met behulp van de hook `useNotifier` kunnen notificaties toegevoegd worden.
139
164
 
140
- ### Gebruik <a id="notifier-gebruik"></a>
141
-
142
- ##### 1: wrap de componenten die de notifier mogen gebruiken tussen de provider-tags
165
+ 1: wrap de componenten die de notifier mogen gebruiken tussen de provider-tags
143
166
 
144
167
  ```tsx
145
168
  // App.tsx
@@ -154,25 +177,29 @@ import { NotifierProvider } from 'loon-react-bulma';
154
177
  </div>
155
178
  ```
156
179
 
157
- ##### 2: gebruik de `useNotifier()`-hook in child-components
180
+ 2: gebruik de `useNotifier()`-hook in een **child-component**
158
181
 
159
182
  ```tsx
160
183
  // MyComponent.tsx
161
184
  import { useNotifier } from 'loon-react-bulma';
162
- // ...
163
- const { notify } = useNotifier();
164
- const addNotification = () => {
165
- notify({
166
- type: 'i',
167
- content: 'Dit is een notification',
168
- onClick: () => console.log('notification clicked!'),
169
- dismissAfter: 2500, // dismiss na 2500 ms
170
- });
171
- };
172
- // ...
173
- <div>
174
- <Button.Primary onClick={() => addNotification()}>Notify!</Button.Primary>
175
- </div>;
185
+
186
+ function MyComponent(): JSX.Element {
187
+ const { notify } = useNotifier();
188
+ const addNotification = () => {
189
+ notify({
190
+ type: 'i',
191
+ content: 'Dit is een notification',
192
+ onClick: () => console.log('notification clicked!'),
193
+ dismissAfter: 2500, // dismiss na 2500 ms
194
+ });
195
+ };
196
+ // ...
197
+ return (
198
+ <div>
199
+ <Button.Primary onClick={() => addNotification()}>Notify!</Button.Primary>
200
+ </div>
201
+ );
202
+ }
176
203
  ```
177
204
 
178
205
  Een notificatie heeft de volgende properties nodig:
@@ -183,13 +210,13 @@ Een notificatie heeft de volgende properties nodig:
183
210
  - `dismissAfter`: na hoeveel tijd moet de notificatie automatisch verborgen/gesloten worden. Default is 5000ms, gebruik 0 voor een notificatie die **niet** zelf gesloten mag worden.
184
211
  - `id`: _(optioneel)_ id van een notificatie, een random int als niet ingevuld.
185
212
 
186
- #### `useNotifier()`
213
+ ##### `useNotifier()`
187
214
 
188
215
  De `useNotifier()`-hook is een custom hook voor het gebruik van de notifier. Deze bevat de functions om dingen met de notifier te doen:
189
216
 
190
- - _notify(n: NotificationItemProps)_: maak een notificatie
191
- - _remove(nId: number)_: verwijder een notificatie met een `id`.
192
- - _clear()_: verwijder ALLE notificaties
217
+ - `notify(n: NotificationItemProps)`: maak een notificatie
218
+ - `remove(nId: number)`: verwijder een notificatie met een `id`.
219
+ - `clear()`: verwijder ALLE notificaties
193
220
 
194
221
  Alleen de functions importeren die je nodig hebt is genoeg
195
222
 
@@ -198,17 +225,17 @@ import { useNotifier } from 'loon-react-bulma';
198
225
  const { notify, remove, clear } = useNotifier();
199
226
  ```
200
227
 
201
- > ### Let op! <a id="notifier-let-op"></a>
228
+ > **Let op!** <a id="notifier-let-op"></a>
202
229
  >
203
230
  > De `useNotifier()`-hook werkt alleen in componenten die children zijn van de _NotifierProvider_, dus als je de _NotifierProvider_ in `App.tsx` importeert en neerzet, kan je de hook daar **niet** gebruiken.
204
231
 
205
232
  ## Componenten <a id="components"></a>
206
233
 
207
- #### Layout <a id="layout"></a>
234
+ ### Layout <a id="layout"></a>
208
235
 
209
236
  Er zijn een aantal componenten die vooral van invloed zijn op de layout van een pagina.
210
237
 
211
- ### AspectRatio <a id="layout-aspectratio"></a>
238
+ #### AspectRatio <a id="layout-aspectratio"></a>
212
239
 
213
240
  Een AspectRatio is vooral om te zorgen dat bijvoorbeeld `<iframe>` en andere elementen met een aanpasbare width aan een bepaald formaat voldoen.
214
241
 
@@ -227,7 +254,7 @@ Een AspectRatio is vooral om te zorgen dat bijvoorbeeld `<iframe>` en andere ele
227
254
  </div>
228
255
  ```
229
256
 
230
- ### Box <a id="layout-box"></a>
257
+ #### Box <a id="layout-box"></a>
231
258
 
232
259
  Een Box is een witte container om om andere elementen heen te gebruiken, bijvoorbeeld forms. Ze hebben een beetje padding en een box-shadow. De header, body en footer van een [Modal](#component-modal) zitten in een Box element.
233
260
 
@@ -240,7 +267,7 @@ Als je liever geen component gebruikt, maar een `<div>` de class `bulma-box` gee
240
267
  </div>
241
268
  ```
242
269
 
243
- ### Columns <a id="layout-columns"></a>
270
+ #### Columns <a id="layout-columns"></a>
244
271
 
245
272
  Columns worden gebruikt voor het verdelen van een (deel van het) scherm in kolommen. Columns kunnen ook genest worden. Bij children die niet van het type `<Column.XXX>` zijn, staat er een warning in de console. Deze children worden vervolgens door een `<Column>` gewrapped. Elke **Column** moet direct in een **Columns** element zitten om te werken. Voor de kolommen zijn er verschillende maten:
246
273
 
@@ -280,7 +307,7 @@ Als maar **één** van de kolommen een size-modifier heeft (bijvoorbeeld `<Colum
280
307
  </div>
281
308
  ```
282
309
 
283
- ### Container <a id="layout-container"></a>
310
+ #### Container <a id="layout-container"></a>
284
311
 
285
312
  Een container om content horizontaal te centreren op grotere viewports. De container wordt actief van verschillende breakpoints.
286
313
 
@@ -292,7 +319,7 @@ Een container om content horizontaal te centreren op grotere viewports. De conta
292
319
  | Container.FullHD | max-width | max-width | max-width | 1344px |
293
320
  | Container.Max\* | max-width | max-width | max-width | max-width |
294
321
 
295
- ###### (\*) = links & rechts blijft er 32px ruimte als margin over.
322
+ > (\*) = links & rechts blijft er 32px ruimte als margin over.
296
323
 
297
324
  ```tsx
298
325
  <div>
@@ -303,7 +330,7 @@ Een container om content horizontaal te centreren op grotere viewports. De conta
303
330
  </div>
304
331
  ```
305
332
 
306
- ### Content <a id="layout-content"></a>
333
+ #### Content <a id="layout-content"></a>
307
334
 
308
335
  Content is voor content, waar alleen HTML-tags beschikbaar zijn. Content kan een hoop html-aan:
309
336
  `<p>, <ul, <ol>, <dl>, <h1>...<h6>, <blockquote>, <em>, <strong>, <table>, <tr>, <th>, <td>, <sub>, <sup>`
@@ -334,7 +361,7 @@ Deze markers zijn beschikbaar:
334
361
  <!-- i, ii, iii-->
335
362
  ```
336
363
 
337
- ### Hero <a id="layout-hero"></a>
364
+ #### Hero <a id="layout-hero"></a>
338
365
 
339
366
  Een Hero bevat een aantal buttons aan de bovenkant van de pagina, een titel en een subtitel en navigatie-tabs aan de onderkant van de pagina. Een hero is ook te krijgen in verschillende kleuren. Daar is de `heroColorFor` prop voor.
340
367
  Een hero bevat optionele items aan de bovenkant (`Head`) of de onderkant (`Foot`).
@@ -391,7 +418,7 @@ De navigatie kan op 2 manieren worden gemaakt:
391
418
  </Hero.Foot>
392
419
  ```
393
420
 
394
- ### Image <a id="layout-image"></a>
421
+ #### Image <a id="layout-image"></a>
395
422
 
396
423
  Een afbeelding met een vastgestelde aspect-ratio. Een ratio 'square' kan een grootte hebbeen, de andere ratio's nemen de gehele breedte van de parent in.
397
424
 
@@ -403,7 +430,7 @@ Een afbeelding met een vastgestelde aspect-ratio. Een ratio 'square' kan een gro
403
430
  </div>
404
431
  ```
405
432
 
406
- ### Section <a id="layout-section"></a>
433
+ #### Section <a id="layout-section"></a>
407
434
 
408
435
  Een section is een simpele container om een pagina in stukken te verdelen.
409
436
 
@@ -414,7 +441,7 @@ Een section is een simpele container om een pagina in stukken te verdelen.
414
441
  </div>
415
442
  ```
416
443
 
417
- ### ScrollArea <a id="layout-scrollarea"></a>
444
+ #### ScrollArea <a id="layout-scrollarea"></a>
418
445
 
419
446
  Een ScrollArea is een horizontaal of verticaal scrollbare `<div>` met flexbox-eigenschappen. De elementen worden in een rij of kolom getoont, met optionele wrapping. De overflow is dus scrollbaar, met een optionele 'gap'. De content kan ook aligned worden.
420
447
 
@@ -422,7 +449,7 @@ Een ScrollArea is een horizontaal of verticaal scrollbare `<div>` met flexbox-ei
422
449
  - `wrap`: mag de content wrappen? Scrollen is dan niet meer mogelijk, tenzij er een max-height is opgegeven.
423
450
  - `align`: aligning van de content
424
451
 
425
- #### Horizontaal:
452
+ ##### Horizontaal:
426
453
 
427
454
  ```tsx
428
455
  <ScrollArea.Horizontal gap={{ row: '1em', col: 16 }} wrap={true} alignment="c">
@@ -435,7 +462,7 @@ Een ScrollArea is een horizontaal of verticaal scrollbare `<div>` met flexbox-ei
435
462
  </ScrollArea.Horizontal>
436
463
  ```
437
464
 
438
- #### Verticaal:
465
+ ##### Verticaal:
439
466
 
440
467
  ```tsx
441
468
  <ScrollArea.Vertical maxHeight={600}>
@@ -448,7 +475,7 @@ Een ScrollArea is een horizontaal of verticaal scrollbare `<div>` met flexbox-ei
448
475
  </ScrollArea.Vertical>
449
476
  ```
450
477
 
451
- ### Button & ButtonGroup <a id="component-button"></a>
478
+ #### Button & ButtonGroup <a id="component-button"></a>
452
479
 
453
480
  Gebruikt de [Bulma-button](https://bulma.io/documentation/elements/button/) Er zijn meerdere soorten button-types. Van elke soort zijn er 6 beschikbaar: _Primary_, _Danger_, _Warning_, _Success_, _Link_, _Info_
454
481
 
@@ -469,13 +496,6 @@ De Light, Outlined, LightOutlined en Inverted versies van deze buttons zijn te m
469
496
  - LightOutlined: `"light-outlined"` | `"lo"`
470
497
  - default: `"default"` | `undefined`
471
498
 
472
- > ### deprecated
473
- >
474
- > Met de optionele prop `icon` kan er op buttons een [Font Awesome icon](https://fontawesome.com/v5.15/icons?d=gallery&p=2&m=free) gezet worden. Dat kan door
475
- >
476
- > - de class-string op te geven, dus `'fas fa-horse-head'`.
477
- > - door het object dat mbv React-FontAwsome wordt gemaakt als waarde door te geven.
478
-
479
499
  De `ButtonGroup`-component kan gebruikt worden om buttons te grouperen en de grootte voor buttons in te stellen.
480
500
 
481
501
  ```tsx
@@ -497,7 +517,7 @@ import { ButtonGroup, Bttn, Button, LightButton, InvertedButton, OutlinedButton
497
517
  </ButtonGroup>;
498
518
  ```
499
519
 
500
- ### Calendar <a id="components-calendar"></a>
520
+ #### Calendar <a id="components-calendar"></a>
501
521
 
502
522
  De Calendar Component toont events in een grid-view. Er zijn 2 verschillende soorten events:
503
523
 
@@ -519,7 +539,7 @@ export type BaseEventProps = {
519
539
  };
520
540
  ```
521
541
 
522
- Op dit moment is er alleen nog een `MonthView`-component.
542
+ Op dit moment zijn er een `MonthView`-component en een `WeekView`-component.
523
543
 
524
544
  De opties voor het instellen van de calendar zijn:
525
545
 
@@ -552,9 +572,7 @@ export type CalendarOptions<T> = {
552
572
  };
553
573
  ```
554
574
 
555
- ##### MonthView <a id="components-calendar-monthview"></a>
556
-
557
- Deze component toont een maand + de rest van de weken die maar deels in een maand zitten. De maand wordt getoond in een grid-view.
575
+ De properties zijn bijna allemaal hetzelfde.
558
576
 
559
577
  - `events`: een array met events.
560
578
  - `viewDate`: de datum waarop de maand wordt getoond.
@@ -563,9 +581,13 @@ Deze component toont een maand + de rest van de weken die maar deels in een maan
563
581
  - `onDayClick()`: callback die wordt aangeroepen als er op een dag-datum wordt geklikt.
564
582
  - `onShowMore()`: function die een JSX.Element opleveret voor hoveren & rechtsklikken op een event.
565
583
 
584
+ ##### MonthView <a id="components-calendar-monthview"></a>
585
+
586
+ Deze component toont een maand + de rest van de weken die maar deels in een maand zitten. De maand wordt getoond in een grid-view.
587
+
566
588
  ```tsx
567
589
  <>
568
- <Calendar.MonthView
590
+ <Calendar.Month
569
591
  events={events}
570
592
  viewDate={viewDate}
571
593
  options={options}
@@ -576,11 +598,32 @@ Deze component toont een maand + de rest van de weken die maar deels in een maan
576
598
  </>
577
599
  ```
578
600
 
579
- ### DataTable <a id="component-datatable"></a>
601
+ ##### WeekView <A id="components-calendar-weekview"></a>
602
+
603
+ Deze component toont een week. In plaats van een cel per dag werkt deze met cellen per uur per dag.
604
+
605
+ ```tsx
606
+ <>
607
+ <Calendar.Week
608
+ events={events}
609
+ options={{
610
+ locale: 'de-DE',
611
+ dayName: 'long',
612
+ visibleDays: visibleDayNums,
613
+ monthName: 'long',
614
+ }}
615
+ viewDate={viewDate}
616
+ onEventClick={(evt, clck) => console.log(evt, clck)}
617
+ onDayClick={(evt, clck) => console.log(evt, clck)}
618
+ />
619
+ </>
620
+ ```
621
+
622
+ #### DataTable <a id="component-datatable"></a>
580
623
 
581
624
  Een DataTable is een tabel met een maximaal aantal rijen waarin je kan zoeken en sorteren. Voor een gewone, saaie, normale tabel kan je de [Table](#component-table) gebruiken. Voor re-renderen van de tabel moet de `data`-prop wel state zijn, anders werkt het rerenderen niet. Hetzelfde geld voor de `columns`-prop.
582
625
 
583
- #### Sorteren
626
+ ##### Sorteren
584
627
 
585
628
  Het sorteren is aangepast. Om een column sorteerbaar te maken, moet je een van de onderstaande 4 waarden opgeven:
586
629
 
@@ -588,11 +631,10 @@ Het sorteren is aangepast. Om een column sorteerbaar te maken, moet je een van d
588
631
  - true: deze kolom is sorteerbaar.
589
632
  - `'function'`: sorteer deze kolom met deze `function`.
590
633
 
591
- ##### <em>LET OP
592
-
593
- Als deze kolom JSX-Elementen bevat, _MOET_ er een sort-function worden opgegeven om wel te kunnen sorteren.</em>
634
+ > **LET OP**
635
+ > Als deze kolom JSX-Elementen bevat, _MOET_ er een sort-function worden opgegeven om wel te kunnen sorteren.</em>
594
636
 
595
- #### Search
637
+ ##### Search
596
638
 
597
639
  Er is een ingebouwde zoekfunctie die _alle_ kolommen doorzoekt voor gefilterede items. Het is ook mogelijk om een _eigen_ zoek-function toe te voegen. Als die is gedefinieerd wordt de default zoek-methode _niet_ gebruikt. Door op de props van de `<DataTable />` de prop `onSearch` aan te vullen met een function, gebruik je je eigen zoekfunctie. De Zoekfunctie ziet er zo uit:
598
640
 
@@ -608,16 +650,16 @@ const mySearch = (s: string, users: IUser[]): IUser[] => {
608
650
  - _@param_ items: de items waarin gezocht / gefilterd moet worden
609
651
  - _@returns_: de gefilterde items
610
652
 
611
- #### Custom classes
653
+ ##### Custom classes
612
654
 
613
655
  Om eigen classes toe te voegen aan rows en aan columns zijn er methodes:
614
656
 
615
657
  - op de DataTable props zit de `rowClasses` function voor classes op de `<tr>`.
616
658
  - op de DataTableColum props zit de `columnClasses` function voor classes op de `<td>`.
617
659
  De gebruikte classes kunnen in een globale css file of in een lokaal geïmporteerde file staan (zoals hieronder).
618
- > #### LET OP!
619
- >
620
- > in combinatie met `isStriped: {true}` werkt het zetten van `background-color` ALLEEN in combinatie met `!important`. Anders wordt de achtergrondkleur weer overschreven door Bulma.
660
+
661
+ > **LET OP!**
662
+ > in combinatie met `isStriped: {true}` werkt het zetten van `background-color` ALLEEN in combinatie met `!important`. Anders wordt de achtergrondkleur weer overschreven door Bulma.
621
663
 
622
664
  ```css
623
665
  /** datatable.styles.css */
@@ -698,7 +740,7 @@ export function DataTableTab() {
698
740
  }
699
741
  ```
700
742
 
701
- ### Footer <a id="component-footer"></a>
743
+ #### Footer <a id="component-footer"></a>
702
744
 
703
745
  Een footer staat meestal onderaan de pagina. Er zit een container in die default centered tekst bevat. Deze tekst kan ook links of rechts aligned worden.
704
746
 
@@ -712,7 +754,7 @@ Een footer staat meestal onderaan de pagina. Er zit een container in die default
712
754
  </div>
713
755
  ```
714
756
 
715
- ### Icons (Font Awesome) <a id="component-icons"></a>
757
+ #### Icons (Font Awesome) <a id="component-icons"></a>
716
758
 
717
759
  Icons kunnen gebruikt worden als content op buttons of voor andere dingen. Icons gebruiken de font-awesome icons. Als `icon`-prop kan er een string (font-awesome-icon class) of een react element (FontAwesomeIcon) worden meegegeven.
718
760
 
@@ -748,9 +790,18 @@ Daar kan wel meer worden opgegeven. Voor de IconText component wordt ook de kleu
748
790
  </p>
749
791
  ```
750
792
 
751
- ### Indicator <a id="component-indicator"></a>
793
+ #### Indicator <a id="component-indicator"></a>
752
794
 
753
- Een `<Indicator>`-component kan gebruikt worden om een badge te tonen op een ander element. De indicator heeft een optionele kleur (default = 'l', 'link') en een optionele positie (default = 'tr', 'top-right').
795
+ Een `<Indicator>`-component kan gebruikt worden om een badge te tonen op een ander element. De indicator heeft een optionele kleur (default = 'l', 'link') en een optionele positie (default = 'tr', 'top-right'). De posities zijn:
796
+
797
+ - `tr`: top-right (default)
798
+ - `tl`: top-left
799
+ - `br`: bottom-right
800
+ - `bl`: bottom-left
801
+ - `tc`: top-center
802
+ - `bc`: bottom-center
803
+ - `rc`: right-center
804
+ - `lc`: left-center
754
805
 
755
806
  Een `<Indicator>` heeft ook een optionele tooltip en een optioneel `label` om binnen de badge een tekst te plaatsen.
756
807
 
@@ -766,7 +817,7 @@ Een `<Indicator>` heeft ook een optionele tooltip en een optioneel `label` om bi
766
817
 
767
818
  ```
768
819
 
769
- ### Kbd & Kbds (Keyboard Key, Keyboard Key group) <a id="component-kbd"></a>
820
+ #### Kbd & Kbds (Keyboard Key, Keyboard Key group) <a id="component-kbd"></a>
770
821
 
771
822
  Een `<Kbd>` is de weergave van een Keyboard Key. Dus toon bijvoorbeeld een 'S' als een S op een toetsenbord. Bijvoorbeeld voor het weergeven van hotkeys.
772
823
 
@@ -782,7 +833,7 @@ De `<Kbds>`-component gebruikt je om emerdere keyboard-keys bij elkaar te zetten
782
833
  </>
783
834
  ```
784
835
 
785
- ### Link & LinkButton <a id="component-linkbutton"></a>
836
+ #### Link & LinkButton <a id="component-linkbutton"></a>
786
837
 
787
838
  Link en LinkButton zijn bedoelt om links (`<a>`) en buttons (`<button>`) er, bijvoorbeeld in een tekst, hetzelfde er uit te laten zien. Een Link bevat een url, target etc. die je ook in de `<a>`-tag aantreft, de LinkButton bevat een `onClick()`-methode. Ze zien er wel hetzelfde uit.
788
839
 
@@ -795,7 +846,7 @@ Link en LinkButton zijn bedoelt om links (`<a>`) en buttons (`<button>`) er, bij
795
846
  </div>
796
847
  ```
797
848
 
798
- ### Menu (Nieuw) <a id="component-menu-2"></a>
849
+ #### Menu <a id="component-menu-2"></a>
799
850
 
800
851
  Een menu is een verticale lijst van 'blokjes' met een optioneel label, en een array van items. Deze items kunnen ook weer een lijst van sub-items bevatten.
801
852
  De `<Menu />`-tag heeft een `onMenuItemClicked(item: string) => void` function voor als het geselecteerde menu-item wijzigt. Met de prop `initialItem` kan een van de items als default geselecteerd worden.
@@ -839,9 +890,10 @@ Andere elementen worden **niet** gerendered.
839
890
  </div>
840
891
  ```
841
892
 
842
- ### Messages & Notifications <a id="component-messages"></a>
893
+ #### Messages & Notifications <a id="component-messages"></a>
843
894
 
844
- Een message of een notifcatie bevatten een tekst. Messages hebben ook een optionele titel. Er zjn 4 soorten: _Warning_, _Info_, _Success_, _Danger_.
895
+ Een message of een notifcatie bevatten een tekst. Messages hebben ook een optionele titel. Er zjn 6 soorten: _Warning_, _Info_, _Success_, _Danger_, _Link_ & _Primary_. Dus eentje voor elke kleur.
896
+ Messages zijn er ook in 4 maten: `s`, `m`, `l`, `xl`. Die is in te stellen via de `size` property. Default is het `m`, medium.
845
897
 
846
898
  ```tsx
847
899
  <div>
@@ -850,7 +902,7 @@ Een message of een notifcatie bevatten een tekst. Messages hebben ook een option
850
902
  </div>
851
903
  ```
852
904
 
853
- Een notificatie bevat ook een tekst, maar heeft ook een dimsiss-button. Deze methode is verplicht om toe te voegen.
905
+ Een notificatie bevat ook een tekst, maar heeft ook een dimsiss-button. Deze methode is verplicht om toe te voegen. Voor notificaties is er **geen** `size` of `title` property.
854
906
 
855
907
  ```tsx
856
908
  <div>
@@ -864,7 +916,7 @@ Een notificatie bevat ook een tekst, maar heeft ook een dimsiss-button. Deze met
864
916
  </div>
865
917
  ```
866
918
 
867
- ### Modal <a id="component-modal"></a>
919
+ #### Modal <a id="component-modal"></a>
868
920
 
869
921
  Een modal is een pop-up window die de achtergrond donker maakt en content weergeeft in een witte 'box'. Een optionele header of footer scrolled niet mee als de body van de modal zo lang is dat er gescrolled moet worden. Met een state-boolean kan het openen & sluiten van de modal geregeld worden.
870
922
 
@@ -930,24 +982,24 @@ Een modal heeft ook verschillende sizes. Met de `size`-prop kan deze ingesteld w
930
982
  - `'50%'`
931
983
  - `'60em'`
932
984
 
933
- ### ProgressBar <a id="component-progressbar"></a>
985
+ #### ProgressBar <a id="component-progressbar"></a>
934
986
 
935
987
  Een progressbar doet precies wat je verwacht.
936
988
 
937
- - 4 maten (small (s), medium (m), large (l) en extralarge (xl)).
938
- - 4 kleuren (danger (d), succes (s), link (l) en primary (p)). Default = primary
989
+ - 4 maten (small (`s`), medium (`m)`, large (`l`) en extralarge (`xl`)). Default = `m`, medium
990
+ - 6 kleuren (danger (`d`), succes (`s`), warning (`w`), link (`l`), info (`i`) en primary (`p`)). Default = info (`i`)
939
991
  - de max value is instelbaar, default = 100.
940
992
 
941
993
  ```tsx
942
994
  <div>
943
- <ProgressBar value={50} size="l" color="primary" />
995
+ <ProgressBar value={50} />
944
996
  <ProgressBar color="success" size="m" />
945
997
  <ProgressBar max={200} color="d" />
946
998
  <ProgressBar value={50} color="l" size="s" />
947
999
  </div>
948
1000
  ```
949
1001
 
950
- ### TabBar <A id="component-tabbar"></a>
1002
+ #### TabBar <A id="component-tabbar"></a>
951
1003
 
952
1004
  De TabBar component komt in de plaats van de Tabs component. Deze gaat iets anders om met Tab items dan de oude Tabs-component.
953
1005
 
@@ -987,11 +1039,7 @@ const [tab, setTab] = useState<string | number>(100);
987
1039
  </div>;
988
1040
  ```
989
1041
 
990
- ### Table <a id="component-table"></a>
991
-
992
- Table nieuwe stijl. TODO: documentatie & implementatie
993
-
994
- ### SimpleTable <a id="component-simpletable"></a>, voorheen Table
1042
+ #### SimpleTable <a id="component-simpletable"></a>, voorheen Table
995
1043
 
996
1044
  Een SimpleTable is een gewone tabel, dus geen zoekfunctie of sortering zoals de [DataTable](#component-datatable). Het instellen gaat wel hetzelfde. Enige verschil is dat deze niet fullwidth hoeft te zijn.
997
1045
  Als de inhoud van een Table kan wijzigen, moet deze data met 'state' worden gebruikt. Anders wordt de inhoud van de tabel niet geüpdate.
@@ -1020,7 +1068,51 @@ return (
1020
1068
  );
1021
1069
  ```
1022
1070
 
1023
- ### Tag & Tags <a id="component-tags"></a>
1071
+ #### Steps <a id="component-steps"></a>
1072
+
1073
+ De `<Steps>`-component is bedoeld voor het weergeven van een stappenplan. De `<Steps.Item>`-component wordt gebruikt om de stappen te maken.
1074
+
1075
+ ##### `<Steps>` heeft de volgende props
1076
+
1077
+ - `className`: extra classes voor de steps-container
1078
+ - `children`: de `<Steps.Item>` componenten. (REQUIRED)
1079
+ - `size`: grootte van de steps (defualt = `m`)
1080
+ - `activeStep`: actieve stap;
1081
+ - `onChangeStep(step: number) => void`: callback voor het wijzigen van de stap
1082
+ - `freeStepChoice`: welke stappen zijn selecteerbaar (default = `disabled`)
1083
+ - `disabled`: alleen linker- en rechter-buurman mogen geselecteerd worden
1084
+ - `allowed`: alle stappen zijn vrij te kiezen
1085
+ - `up`: alleen de stappen rechts zijn vrij te kiezen, links alleen de directe buur
1086
+ - `down`: alleen de stappen links zijn vrij te kiezen, recht alleen de directe buur
1087
+
1088
+ ##### `<Steps.Item>` heeft de volgende props
1089
+
1090
+ - `status`: een status van de stap (default = 'pending')
1091
+ - `pending`: stap nog niet gedaan
1092
+ - `error`: een fout in deze stap
1093
+ - `completed`: deze stap is gedaan
1094
+ - `active`: de actieve stap
1095
+ - `title`: een titel voor deze stap
1096
+ - `description`: een langere beschrijving van deze stap
1097
+ - `marker`: een icoon, nummer of letter voor deze stap
1098
+
1099
+ ```tsx
1100
+ <>
1101
+ <Steps onChangeStep={(stepNr: number) => console.log(stepNr)} freeStepChoice="disabled">
1102
+ <Steps.Item title="Step 1" marker={1} />
1103
+ <Steps.Item title="" marker={<Icon icon={faFlask} />} />
1104
+ <Steps.Item title="Step 2" details="dit zijn de details voor deze stap" />
1105
+ <Steps.Item title="" marker={<Icon icon={faBomb} />} status="error" />
1106
+ <Steps.Item
1107
+ title="Step 3"
1108
+ marker={(status) => (status == 'pending' ? <Icon icon={faFlag} /> : <Icon icon={faFire} />)}
1109
+ />
1110
+ <Steps.Item title="Step 4" marker="A" />
1111
+ </Steps>
1112
+ </>
1113
+ ```
1114
+
1115
+ #### Tag & Tags <a id="component-tags"></a>
1024
1116
 
1025
1117
  Een `<Tag>` is een klein inline elementje om overal te kunnen stoppen. Tags kunnen een optionele sluit-knop bevatten
1026
1118
  De `<Tags>` component kan gebruikt worden om meerdere tags te groeperen. Dan kunnen ze samengeplakt worden, de grootte van alle tags of de alignment kan dan ingesteld worden. Als er een ander element dan een `<Tag>` gebruikt wordt in de `<Tags>`-component, wordt daarover gewaarschuwd in de console.
@@ -1060,7 +1152,61 @@ Om twee tags als 1 tag te laten zien, kan je de `merged` prop op de `<Tags>`-com
1060
1152
  </Tags>
1061
1153
  ```
1062
1154
 
1063
- ### Titles & Subtitles <a id="component-titles"></a>
1155
+ #### Timeline <a id="component-timeline"></a>
1156
+
1157
+ De `<TimeLine>`-component kan gebruikt worden om een verticale tijdlijn te maken. Een TimeLine bevat 2 verschillende items: **points** of **items**.
1158
+
1159
+ `<TimeLine>` component heeft de volgende props:
1160
+
1161
+ - `alignment`: positie: `l`, `r`, of `c`. (default = `l`). Met `c` verschijnen de items afwisselend links of rechts van de lijn.
1162
+ - `className`: extra classes voor op de timeline-container
1163
+ - `children`: de content van de timeline, dus `<TimeLine.Point>`'s en `<TimeLine.Item>`'s
1164
+
1165
+ ##### `<TimeLine.Point>` component
1166
+
1167
+ De `<TimeLine.Point>`-component is een punt met een titel op de tijdlijn die goed zichtbaar moet zijn, bijvoorbeeld een jaarovergang. Of een ander soort titel
1168
+
1169
+ - `children`: Content van dit punt
1170
+ - `color`: kleur van dit punt (default = `light`, grijs)
1171
+ - `size`: de grotte van het punt (default = `s`, small)
1172
+ - `tooltip`: een tooltip voor het punt.
1173
+
1174
+ ##### `<TimeLine.Item>` component
1175
+
1176
+ De `<TimeLine.Item>`-component geeft een item op de tijdlijn aan. Een item heeft een heading (of titel) en een markeerpunt op de lijn. Dit markeerpunt kan worden aangepast, anders is het een grijze cirkel. De content van het item bevindt zich in de children van deze component.
1177
+
1178
+ - `heading`: de titel van het item (bijvoorbeeld een datum)
1179
+ - `children`: de content van het item. Dit kan gewoon HTML zijn.
1180
+ - `marker`: een object om een icoon of een kleur mee door te geven. Deze prop bevat 2 props:
1181
+ - `icon`: een icon (string of Font Awesome Icon Prop) voor de markeerstip
1182
+ - `color`: de kleur van de markeerstip (default = undefined, een grijze cirkel)
1183
+
1184
+ ```tsx
1185
+ <>
1186
+ <TimeLine>
1187
+ <TimeLine.Point>Start</TimeLine.Point>
1188
+ <TimeLine.Point color="l">2019</TimeLine.Point>
1189
+ <TimeLine.Item heading="Maart 2019">Oh boi oh boi oh boi oh boi</TimeLine.Item>
1190
+ <TimeLine.Item marker={{ color: 's' }} heading="November 2019">
1191
+ Oompa Loompa Dooba die dee.
1192
+ </TimeLine.Item>
1193
+
1194
+ <TimeLine.Point size="m">2020</TimeLine.Point>
1195
+ <TimeLine.Item marker={{ icon: faFlask, color: 's' }} heading="August 2020">
1196
+ Whoop sie doop sie dooooooop
1197
+ </TimeLine.Item>
1198
+ <TimeLine.Item marker={{ icon: 'fas fa-', color: 's' }} heading="December 2020">
1199
+ <p>Bibbity Boppity Boo</p>
1200
+ </TimeLine.Item>
1201
+
1202
+ <TimeLine.Point color="d" size="l">
1203
+ End
1204
+ </TimeLine.Point>
1205
+ </TimeLine>
1206
+ </>
1207
+ ```
1208
+
1209
+ #### Titles & Subtitles <a id="component-titles"></a>
1064
1210
 
1065
1211
  Een verzameling van h1...h6 tags. Er zijn drie verschillende componenten om [Bulma Titles](https://bulma.io/documentation/elements/title/) te gebruiken.
1066
1212
 
@@ -1091,9 +1237,9 @@ Allemaal hebben ze 2 waarden die isntelbaar zijn voor Sizes: _headingSize_ en _b
1091
1237
  </div>
1092
1238
  ```
1093
1239
 
1094
- ## ToggleBar <a id="component-toggles"></a>
1240
+ #### ToggleBar <a id="component-toggles"></a>
1095
1241
 
1096
- De ToggleBar component toont een ritje aan elkaar vastgemaakte knoppen. . De ToggleBar kan alleen maar `<ToggleBar.Item>` of `<ToggleBar.OnOffItem>` bevatten. Bij andere items wordt een warning geprint in de console en deze andere items worden **niet** gerendered.
1242
+ De ToggleBar component toont een ritje aan elkaar vastgemaakte knoppen. De ToggleBar kan alleen maar `<ToggleBar.Item>` of `<ToggleBar.OnOffItem>` bevatten. Bij andere items wordt een warning geprint in de console en deze andere items worden **niet** gerendered.
1097
1243
 
1098
1244
  De ToggleBar heeft de volgende props:
1099
1245
 
@@ -1106,7 +1252,7 @@ De ToggleBar heeft de volgende props:
1106
1252
  - `onColor`: ColorProp voor de 'on'-status (default 's' (success, groen))
1107
1253
  - `offColor`: ColorProp voor de 'off'-status (default 'd' (danger, rood))
1108
1254
 
1109
- #### Common props Toggle Items
1255
+ ##### Common props Toggle Items
1110
1256
 
1111
1257
  Er zijn een paar props op de `Item` en de `OnOffItem` hetzelfde.
1112
1258
 
@@ -1114,7 +1260,7 @@ Er zijn een paar props op de `Item` en de `OnOffItem` hetzelfde.
1114
1260
  - `tooltip`: tooltip voor een toggle-item
1115
1261
  - `disabled`: disable een toggle-item`
1116
1262
 
1117
- ### ToggleItem
1263
+ ##### ToggleItem
1118
1264
 
1119
1265
  ToggleItems zijn meerdere knopjes op de bar, waarvan er maar 1 de status 'on' heeft. De andere buttons hebben dan de 'off'-state.
1120
1266
 
@@ -1130,7 +1276,7 @@ De `onToggle()`-callback wordt aangeroepen als de getogglede knop wordt verander
1130
1276
  </div>
1131
1277
  ```
1132
1278
 
1133
- ### OnOffToggleItem
1279
+ ##### OnOffToggleItem
1134
1280
 
1135
1281
  OnOffToggleItems zijn knopjes die apart on/off te toggelen zijn. Elke knop heeft een eigen onToggle-function die aangeroepen wordt als op de knop wordt gedrukt.
1136
1282
 
@@ -1180,24 +1326,25 @@ Ze hebben 2 props meer dan de ToggleItems:
1180
1326
  </div>
1181
1327
  ```
1182
1328
 
1183
- ## Form & inputs <a id="form"></a>
1329
+ ### Form & inputs <a id="form"></a>
1184
1330
 
1185
1331
  De library bevat componenten om als losse inputs, selects, ranges of checkboxes te gebruiken of om een form helemaal samen te stellen. Elke input heeft een validatie-object met wat standaard validatie-opties, een optionele methode om een waarde te evalueren (`onValidate()`). De `name` en `id` attributen zijn verplicht. Als voor een input geen `label` is opgegeven, wordt de `name` daarvoor gebruikt.
1186
1332
 
1187
1333
  - [Input Types](#form-input)
1188
- - _TextInput_: invoeren van tekst, urls, etc.
1189
- - _PasswordInput_: invoeren van een wachtwoord, met puntjes ipv karakters
1190
- - _EmailInput_: invoeren van een emailadres
1191
- - _NumberInput_: invoeren van een nummer (alleen numerieke karakters)
1192
- - _ColorInput_: invoeren van een kleur (in hex-formaat, altijd # + 6 hex-values)
1193
- - _HiddenInput_: niet-bewerkbare onzichtbare input die WEL belangrijk is.
1194
- - _DateInput_: invoeren van een datum
1195
- - _TimeInput_: invoeren van een tijd
1196
- - _DateTimeInput_: invoeren van een datum & een tijd als combi
1197
- - _TextAreaInput_: invoer van een tekst
1198
- - _FileInput_: invoer van een file
1199
- - _BasicInput_: zelf in te stellen input
1334
+ - `<TextInput>`: invoeren van tekst, urls, etc.
1335
+ - `<PasswordInput>`: invoeren van een wachtwoord, met puntjes ipv karakters
1336
+ - `<EmailInput>`: invoeren van een emailadres
1337
+ - `<NumberInput>`: invoeren van een nummer (alleen numerieke karakters)
1338
+ - `<ColorInput>`: invoeren van een kleur (in hex-formaat, altijd # + 6 hex-values)
1339
+ - `<HiddenInput>`: niet-bewerkbare onzichtbare input die WEL belangrijk is.
1340
+ - `<DateInput>`: invoeren van een datum
1341
+ - `<TimeInput>`: invoeren van een tijd
1342
+ - `<DateTimeInput>`: invoeren van een datum & een tijd als combi
1343
+ - `<TextAreaInput>`: invoer van een tekst
1344
+ - `<FileInput>`: invoer van een file
1345
+ - `<BasicInput>`: zelf in te stellen input
1200
1346
  - [Checkbox](#form-checkbox)
1347
+ - [RadioButtons](#form-radio)
1201
1348
  - [Ranges](#form-ranges)
1202
1349
  - _Range_: een getal selecteren
1203
1350
  - _MultiRange_: 2 getallen selecteren (een range)
@@ -1206,7 +1353,7 @@ De library bevat componenten om als losse inputs, selects, ranges of checkboxes
1206
1353
  - [Form](#form-form)
1207
1354
  - [Form-builder](#form-component)
1208
1355
 
1209
- ### Input Types<a id="form-input"></a>
1356
+ #### Input Types<a id="form-input"></a>
1210
1357
 
1211
1358
  Er zijn verschillende soorten inputs voor de afhandeling van input-types. Er zijn een aantal props die op alle inputs voorkomen:
1212
1359
 
@@ -1236,27 +1383,6 @@ Er zijn verschillende soorten inputs voor de afhandeling van input-types. Er zij
1236
1383
  - `direction`: orientatie van de input (horizontaal of vertical, default = 'horizontal')
1237
1384
  - `size`: de grootte van een input
1238
1385
 
1239
- - Tekst:
1240
- - **TextInput:** invoeren van tekst, urls, etc.
1241
- - **EmailInput:** invoeren van een emailadres. Valideert het emailadres met een regex (overschrijfbaar mbv validatie-object).
1242
- - **PasswordInput:** invoeren van een wachtwoord.
1243
- - **TextAreaInput:** een textarea, werkt in tegenstelling tot de `<textarea></textarea>`-tag _niet_ met children. De waarde kan gezet worden met de `value`-attribuut.
1244
- - Getallen:
1245
- - **NumberInput:** invoer van een nummer
1246
- - **Range:** invoer van een nummer, maar dan met een [range](#form-ranges)
1247
- - **MultiRange:** invoer van twee nummers, met behulp van een [range](#form-ranges)
1248
- - Datum / Tijd
1249
- - **DateInput:** invoer van ene datum. De value kan als `string` of `Date` worden opgegeven
1250
- - **TimeInput:** invoer van een tijdstip. De value kan als `string` of `Date` worden opgegeven
1251
- - **DateTimeInput:** invoer-combi voor een datum & tijd. De value kan als `string` of `Date` worden opgegeven
1252
- - Overig
1253
- - **BasicInput** een input om helemaal zelf te kunnen instellen
1254
- - **ColorInput** een invoer voor een kleur. Altijd een hex-waarde, de echte selectie is afhankelijk van de browser
1255
- - **HiddenInput** een invoer die wel belangrijk is, maar niet gezien en niet bewerkt mag worden. Heeft vanzelfsprekend geen styling
1256
- - **FileInput** invoer van een (of meer) files
1257
-
1258
- ##### voorbeeld
1259
-
1260
1386
  ```tsx
1261
1387
  <>
1262
1388
  <BasicInput name="something" type="text">
@@ -1279,9 +1405,18 @@ Er zijn verschillende soorten inputs voor de afhandeling van input-types. Er zij
1279
1405
  </>
1280
1406
  ```
1281
1407
 
1282
- ### CheckBox <a id="form-checkbox"></a>
1408
+ #### CheckBox <a id="form-checkbox"></a>
1409
+
1410
+ Een checkbox is een checkbox en werkt als een checkbox. De styling is een beetje aangepast van de standaard checkbox.
1411
+ Er zijn nu sizes (`s`, `m` (default), `l` en `xl`) en colors (`l` (default), `w`, `d`, `s`, `i`, `p`).
1412
+ Deze zijn in te stellen met de `size` en de `color` prop.
1283
1413
 
1284
- > Wat anders is aan deze input, is dat de `size`-prop geen effect heeft. Er is maar 1 grootte.
1414
+ Ook is er een `styling`-prop. Met deze kan je wat styling aanpassen
1415
+
1416
+ - `noborder`: de randen van de checkbox zijn onzichtbaar
1417
+ - `colored`: de checkbox zelf heeft de achtergrondkleur uit de `color`-prop
1418
+ - `blocky`: de checkbox EN het label hebben dezelfde achtergrondkleur
1419
+ - `rounded`: afgeronde hoeken in plaats van vierkante hoeken op de checkbox.
1285
1420
 
1286
1421
  ```tsx
1287
1422
  <div>
@@ -1289,7 +1424,7 @@ Er zijn verschillende soorten inputs voor de afhandeling van input-types. Er zij
1289
1424
  </div>
1290
1425
  ```
1291
1426
 
1292
- ### RadioButtons <a id="form-radio"></a>
1427
+ #### RadioButtons <a id="form-radio"></a>
1293
1428
 
1294
1429
  Radiobuttons kan je maken met de `<RadioGroup>`-component. De `<RadioGroup>` zelf is een container voor de `<RadioGroup.Item>`-buttons omeen radio-button-group te maken.
1295
1430
 
@@ -1301,12 +1436,27 @@ Een `<RadioGroup.Item>` component heeft de volgende props:
1301
1436
  - `disabled?`: is dit item disabled of niet?
1302
1437
  - `id?`: een id voor de radio-input
1303
1438
 
1439
+ Er zijn nu sizes (`s`, `m` (default), `l` en `xl`) en colors (`l` (default), `w`, `d`, `s`, `i`, `p`).
1440
+ Deze zijn in te stellen met de `size` en de `color` prop.
1441
+
1442
+ Ook is er een `styling`-prop. Met deze kan je wat styling aanpassen
1443
+
1444
+ - `noborder`: de randen van de checkbox zijn onzichtbaar
1445
+ - `colored`: de checkbox zelf heeft de achtergrondkleur uit de `color`-prop
1446
+ - `blocky`: de checkbox EN het label hebben dezelfde achtergrondkleur
1447
+ - `rounded`: afgeronde hoeken in plaats van vierkante hoeken op de checkbox.
1448
+
1449
+ > **Raar:**
1450
+ > de waarde `rounded` voor de `styling`-prop slaat nergens op. Maar ze maken gebruik van dezelfde Type als die van checkboxes, daarom zit hij er wel.
1451
+
1304
1452
  ```tsx
1305
1453
  <>
1306
1454
  <RadioGroup name="radio-1" onValueChanged={(v) => console.log('woohoo!', v)}>
1307
1455
  <RadioGroup.Item value="Ein">Ein</RadioGroup.Item>
1308
- <RadioGroup.Item value="Zwei">Zwei</RadioGroup.Item>
1309
- <RadioGroup.Item value="Polizei">
1456
+ <RadioGroup.Item value="Zwei" styling="noborder">
1457
+ Zwei
1458
+ </RadioGroup.Item>
1459
+ <RadioGroup.Item value="Polizei" color="l" size="xl">
1310
1460
  <span>Polizei!</span>
1311
1461
  </RadioGroup.Item>
1312
1462
  <RadioGroup.Item value="Drei">Drei</RadioGroup.Item>
@@ -1328,9 +1478,9 @@ RadioButtons kunnen ook alleenstaand gebruikt worden. Deze component heet `<Radi
1328
1478
  const [radio, setRadio] = React.useState('Sieben');
1329
1479
 
1330
1480
  <>
1331
- <Radio selectedItem={radio} value="Fünf" name="radio-2" setter={setRadio} />
1332
- <Radio selectedItem={radio} value="Sechs" name="radio-2" setter={setRadio} disabled />
1333
- <Radio selectedItem={radio} value="Alte Hex" name="radio-2" setter={setRadio} />
1481
+ <Radio selectedItem={radio} value="Fünf" name="radio-2" setter={setRadio} color="d"/>
1482
+ <Radio selectedItem={radio} value="Sechs" name="radio-2" setter={setRadio} disabled size="xl"/>
1483
+ <Radio selectedItem={radio} value="Alte Hex" name="radio-2" setter={setRadio} styling="noborder"/>
1334
1484
  <Radio selectedItem={radio} value="Sieben" name="radio-2" setter={setRadio} />
1335
1485
  <Radio selectedItem={radio} value="Acht" name="radio-2" setter={setRadio} />
1336
1486
  <Radio selectedItem={radio} value="Gute Nacht" name="radio-2" setter={setRadio}>
@@ -1339,9 +1489,9 @@ const [radio, setRadio] = React.useState('Sieben');
1339
1489
  <>
1340
1490
  ```
1341
1491
 
1342
- ### Ranges <a id="form-ranges"></a>
1492
+ #### Ranges <a id="form-ranges"></a>
1343
1493
 
1344
- Een Range of MultiRange is een component om op een andere manier een nummer te selecteren. In plaats van invullen, selecteer je deze op een schaal. Er zijn 2 soorten ranges: **Range** en **MultiRange**. Een Range werkt hetzelfde als een `<input type="number">`, het resultaat is ook een number. Een MultiRange werkt iets anders: het resultaat is een `number[]`, bestaand uit 2 getallen. Deze getallen staan altijd in dezelfde volgorde, dus als je twee begin-waardes opgeeft, komen die er in dezelfde volgorde uit. _Dus niet gesorteerd van klein naar groot_.
1494
+ Een `<Range>` of `<MultiRange>` is een component om op een andere manier een nummer te selecteren. In plaats van invullen, selecteer je deze op een schaal. Er zijn 2 soorten ranges: **Range** en **MultiRange**. Een Range werkt hetzelfde als een `<input type="number">`, het resultaat is ook een number. Een MultiRange werkt iets anders: het resultaat is een `number[]`, bestaand uit 2 getallen. Deze getallen staan altijd in dezelfde volgorde, dus als je twee begin-waardes opgeeft, komen die er in dezelfde volgorde uit. _Dus niet gesorteerd van klein naar groot_.
1345
1495
 
1346
1496
  Als er in het validatie geen minimale of maximale waarde te vinden is, worden standaard `0` en `100` gebruikt.
1347
1497
 
@@ -1352,7 +1502,7 @@ Als er in het validatie geen minimale of maximale waarde te vinden is, worden st
1352
1502
  </div>
1353
1503
  ```
1354
1504
 
1355
- ### Select <a id="form-select"></a>
1505
+ #### Select <a id="form-select"></a>
1356
1506
 
1357
1507
  Een select is een lijstje met opties waaruit je er een kan selecteren. De opties van een select kunnen uit 3 types bestaan:
1358
1508
 
@@ -1361,8 +1511,6 @@ Een select is een lijstje met opties waaruit je er een kan selecteren. De opties
1361
1511
  - **SelectOptionGroupType[]:** een gegroupeerde option array voor `<optgroup>` tags. Kan daardoor ook disablen.
1362
1512
  Om meerdere values te selecteren in een select, kan je een [MultiSelect](#form-multiselect) gebruiken.
1363
1513
 
1364
- ##### een select met string[]
1365
-
1366
1514
  ```tsx
1367
1515
  <div>
1368
1516
  {/* Een select met string-options, deze options zijn de value EN de tekst */}
@@ -1398,7 +1546,7 @@ Een select is een lijstje met opties waaruit je er een kan selecteren. De opties
1398
1546
  </div>
1399
1547
  ```
1400
1548
 
1401
- ### Multi Select <a id="form-multiselect"> </a>
1549
+ #### Multi Select <a id="form-multiselect"> </a>
1402
1550
 
1403
1551
  Een Multiselect werkt bijna hetzelfde als een select. Dezelfde type options worden ondersteund, alleen is het mogelijk om er meerdere te selecteren met `ctrl-click`, `cmd-click` of `shift-click`.
1404
1552
 
@@ -1465,11 +1613,11 @@ Een Multiselect werkt bijna hetzelfde als een select. Dezelfde type options word
1465
1613
  </div>
1466
1614
  ```
1467
1615
 
1468
- ### Validatie <a id="form-validatie"></a>
1616
+ #### Validatie <a id="form-validatie"></a>
1469
1617
 
1470
1618
  Elke input, range, select of checkbox heeft een optioneel validatie-object. Daarop zitten een aantal, ook optionele, properties en een methode. Die worden gebruikt om wat regels en validatie toe te voegen aan die input. Als een value van een input niet voldoet aan de validatie-regels, wordt deze rood omlijnt.
1471
1619
 
1472
- ##### Validatie-Type
1620
+ ###### Validatie-Type
1473
1621
 
1474
1622
  ```ts
1475
1623
  export type FormValidatie = {
@@ -1492,7 +1640,7 @@ export type FormValidatie = {
1492
1640
  - `pattern`: voor tekst-inputs: voldoet de waarde aan deze regex. In EmailInput overschrijft deze de default e-mail-validatie regex.
1493
1641
  - `onValidate()`: een eigen validatie-methode (als gewenst). Wordt aangeroepen als het veld wordt gevalideerd. De methode met een lege string als _geldig_ of een foutmelding als _ongeldig_ returnen.
1494
1642
 
1495
- ### Form <a id="form-form"></a>
1643
+ #### Form <a id="form-form"></a>
1496
1644
 
1497
1645
  De `<Form>`-component is een wrapper voor een gewone `<form>`-tag. Hij bevat (als het goed is) alle normale attributen die ook bij een gewone `<form>`-tag te vinden zijn. Deze component maakt het mogelijk om voor alle inputs in het form de `direction`- en de `size`-attributen in te stellen. Hij exporteert de inputs nogmaals in de vorm `<Form.XXX>` (zie onder).
1498
1646
 
@@ -1510,6 +1658,7 @@ De `<Form>`-component is een wrapper voor een gewone `<form>`-tag. Hij bevat (al
1510
1658
  - `<Form.Select>`: een input met type `select`, zelfde als `<Select>`.
1511
1659
  - `<Form.MultiSelect>`: een input met type `select`, zelfde als `<MultiSelect>`.
1512
1660
  - `<Form.Checkbox>`: een input met type `checkbox`, zelfde als `<Checkbox>`.
1661
+ - `<Form.RadioGroup>`: een input met type `radio`, zelfde als `<RadioGroup>`.
1513
1662
  - `<Form.Date>`: een input met type `date`, zelfde als `<DateInput>`.
1514
1663
  - `<Form.Time>`: een input met type `time`, zelfde als `<TimeInput>`.
1515
1664
  - `<Form.DateTime>`: een input met type `datetime-local`, zelfde als `<DateTimeInput>`.
@@ -1518,12 +1667,10 @@ De `<Form>`-component is een wrapper voor een gewone `<form>`-tag. Hij bevat (al
1518
1667
 
1519
1668
  ##### Andere componenten binnen `<Form>`
1520
1669
 
1521
- - `<Form.Line>` Een wrapper voor meerdere inputs, om deze op een lijn te kunnen zetten (achter elkaar). Dan moet je \__wel_ zelf de direction instellen als die afwijkt van de normale form-direction.
1670
+ - `<Form.Line>` Een wrapper voor meerdere inputs, om deze op een lijn te kunnen zetten (achter elkaar). Dan moet je _wel_ zelf de direction instellen als die afwijkt van de normale form-direction.
1522
1671
  - `Form.Space`: een container voor vrije ruimte. Hier kan je helemaal losgaan met eigen componenten. Deze container houdt zich wel aan de form-direction voor de positie.
1523
1672
  - `<Form.Buttons`: een container voor de buttons. Werkt hetzelfde als `<ButtonGroup>`. Voor bijvoorbeeld de submit-button voor een form.
1524
1673
 
1525
- ##### Voorbeeld
1526
-
1527
1674
  ```tsx
1528
1675
  <>
1529
1676
  <Form direction={direction} size={size}>
@@ -1551,7 +1698,7 @@ De `<Form>`-component is een wrapper voor een gewone `<form>`-tag. Hij bevat (al
1551
1698
  </>
1552
1699
  ```
1553
1700
 
1554
- ### Form-Builder <a id="form-component"></a>
1701
+ #### Form-Builder <a id="form-component"></a>
1555
1702
 
1556
1703
  Een **Form** is ook beschikbaar als component. Om te werken heeft die nodig:
1557
1704
 
@@ -1585,7 +1732,7 @@ Het resultaat van deze form komt via de `onSubmit()` methode naar buiten. Als de
1585
1732
  </div>
1586
1733
  ```
1587
1734
 
1588
- ##### Resultaat van `method="post"` en `method="get"`
1735
+ ###### Resultaat van `method="post"` en `method="get"`
1589
1736
 
1590
1737
  ```ts
1591
1738
  // post
@@ -1600,6 +1747,168 @@ Het resultaat van deze form komt via de `onSubmit()` methode naar buiten. Als de
1600
1747
  ('Token=Bazinga%21&Naam=Brad+Wurst&Email=brad%40wurst.com&Wachtwoord=123123&Leeftijd=31');
1601
1748
  ```
1602
1749
 
1750
+ ## Hooks <a id="hooks"></a>
1751
+
1752
+ - [Hooks](#hooks)
1753
+ - [useClipboard](#hooks-use-clipboard)
1754
+ - [useDebouncedValue](#hooks-use-debounced-value)
1755
+ - [useHotkeys](#hooks-use-hotkeys)
1756
+ - [useToggle & useBoolToggle](#hooks-use-toggle)
1757
+ - [Publiceren](#publiceren)
1758
+
1759
+ Er zijn een paar hooks in deze library. Geen idee of deze hooks nuttig zijn, maar je kan ze gebruiken.
1760
+
1761
+ #### useClipboard <a id="hooks-use-clipboard"></a>
1762
+
1763
+ De `useClibboard()`-hook kan je gebruiken om een waarde te kopiëren om die vervolgens ergens te kunnen plakken. Het object van deze hook heeft 4 properties:
1764
+
1765
+ - `copy`: een function om een waarde te kopiëren naar het clipboard
1766
+ - `copied`: een boolean die `true` is als een waarde minder dan de timeout (default 2000ms) geleden gekopieerd is
1767
+ - `reset`: een function om de timout te 'clearen' en `copied` te resetten
1768
+ - `error`: bevat een `Error` object als er iets is fout gegaan
1769
+
1770
+ ```tsx
1771
+ function UseClipboardExample(props: {}) {
1772
+ const clipboard = useClipboard({timeout: 500});
1773
+
1774
+ const handleClick = () => {
1775
+ clipboard.copy('Hello World!');
1776
+ if(clipboard.error) console.error('error on copying', clipboard.error);
1777
+
1778
+ clipboard.reset();
1779
+ }
1780
+
1781
+ return <Button onClick={handleClick}>
1782
+ {clipboard.copied ? 'Paste it somewhere' ? 'Copy something'}
1783
+ </Button>
1784
+
1785
+ }
1786
+ ```
1787
+
1788
+ #### useDebouncedValue <a id="hooks-use-debounced-value"></a>
1789
+
1790
+ De `useDebouncedValue()`-hook kan je gebruiken om een waarde vertraagd aan te passen. Dat kan handig zijn bij zware operaties gebaseed op states. Bijvoorbeeld het verzenden van een zoek-request of het opzoeken van een item in een lange lijst.
1791
+
1792
+ De parameters zijn:
1793
+
1794
+ - `value`: de bronwaarde die vertraagd bijgewerkt moet worden.
1795
+ - `options`: opties voor de hook. Op dit moment zijn dat deze defaults:
1796
+
1797
+ ```ts
1798
+ options: useDebounceHookOptions = {
1799
+ leading: true,
1800
+ delay: 500,
1801
+ };
1802
+ ```
1803
+
1804
+ Deze hook geeft een tuple (net zoals bij `React.useState()`) met 2 objecten terug:
1805
+
1806
+ - `debounced`, type `T` de waarde voor NA het debouncen
1807
+ - `cancel`, type `() => void` de functie om de debouncen te stoppen. De waarde van `debounced` wordt dan niet geupdate.
1808
+
1809
+ > De `useDebounce()`-hook kan optioneel een type meekrijgen voor de waarde van `debounced`. Dit is optioneel
1810
+
1811
+ ```tsx
1812
+ function UseDebouncedValueDemo() {
1813
+ const [value, setValue] = useState('');
1814
+ const [debounced, cancel] = useDebouncedValue<string>(value, { delay: 2000 });
1815
+
1816
+ return (
1817
+ <>
1818
+ <Input
1819
+ label="debounce value"
1820
+ name="debouncevalue"
1821
+ value={value}
1822
+ onChange={(e) => setValue(e.currentTarget.value)}
1823
+ />
1824
+ <Button onClick={cancel} size="lg" style={{ marginLeft: 15 }}>
1825
+ Cancel
1826
+ </Button>
1827
+
1828
+ <p>Value: {value}</p>
1829
+ <p>Debounced value: {debounced}</p>
1830
+ </>
1831
+ );
1832
+ }
1833
+ ```
1834
+
1835
+ #### useHotkeys <a id="hooks-use-hotkeys"></a>
1836
+
1837
+ De `useHotkeys()`-hook luistert naar toetsen-combinaties op het `document`-element. De hook zelf werkt **alleen** op dat element. Voor andere elementen moet je de `getHotkeyHandler()` gebruiken, die samen met de `useHotkeys()`-hook wordt geëxporteerd.
1838
+
1839
+ `useHotkeys()` heeft 1 parameters. Deze bestaat uit een array van toets-combinaties en handler-tuples (zie `HotkeyItem`). Deze tuples bestaan uit 2 delen:
1840
+
1841
+ - `hotkey`: hotkey-string, als `ctrl+E`, `shift+alt+L`, `mod+S`
1842
+ - `handler` functie die aangeroepen moet worden als de keys zijn gebruikt.
1843
+
1844
+ > **Formats voor de hotkeys**
1845
+ >
1846
+ > - `mod+S`: op macOS Cmd+S, op Windows Ctrl+S
1847
+ > - `ctrl+shift+X`: meerdere modifiers
1848
+ > - `ctrl + shift + X + Y`: spaties zijn toegestaan
1849
+ > - `ArrowLeft`: speciale toetsen volgens Key values van keyboard events (<a href="https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values" target="_blank">MDN</a>)
1850
+
1851
+ ##### hotkeys op een ander element
1852
+
1853
+ Als een toetsen-combi bij een specifiek element hoort, dan moet je zelf de event-listener maken. Daarvoor is de `getHotkeyHandler()`-function. Deze werkt precies hetzelfde als de hook, maar is geen echte hook.
1854
+
1855
+ ```tsx
1856
+ function HotkeysExample() {
1857
+ // useHotkeys alleen op het document-element
1858
+ useHotkeys([
1859
+ ['mod+J', () => console.log('Toggle color scheme')],
1860
+ ['ctrl+K', () => console.log('Trigger search')],
1861
+ ['alt+mod+shift+X', () => console.log('Rick roll')],
1862
+ ]);
1863
+
1864
+ // met getHotkeyHandler kunnen hotkeys op een specifiek element gezet worden
1865
+ return (
1866
+ <TextInput
1867
+ placeholder="Your message"
1868
+ label="Press ⌘+Enter or Ctrl+Enter when input has focus to send message"
1869
+ value={value}
1870
+ onChange={(event) => setValue(event.target.value)}
1871
+ onKeyDown={getHotkeyHandler([
1872
+ ['mod+Enter', () => console.log('submit')],
1873
+ ['mod+S', () => console.log('save')],
1874
+ ])}
1875
+ />
1876
+ );
1877
+ }
1878
+ ```
1879
+
1880
+ #### useToggle & useBoolToggle <a id="hooks-use-toggle"></a>
1881
+
1882
+ De `useToggle()`- en `useBoolToggle()`-hooks kunnen gebruikt worden voor het togglen tussen twee waarden. De `useBoolToggle()`-hook is een voorgekauwde versie van de `useToggle()`-hook met een boolean als bronwaarde. Aan de `useToggle()` kan een type worden meegegeven.
1883
+
1884
+ de parameters voor de `useToggle()`-hook zijn:
1885
+
1886
+ - `initialState`: type `T`: de beginwaarde van de toggle
1887
+ - `options`: type `[T, T]`: de waarden waartussen getoggled wordt.
1888
+
1889
+ Bij de `useBoolToggle()`-hook is er maar 1 _optionele_ parameter:`initialValue`. Deze is default `false`.
1890
+
1891
+ Van beide hooks wordt een tuple (net als `React.useState()`) returned met 2 objecten:
1892
+
1893
+ - `state`: de huidige status van de toggle
1894
+ - `toggle()`: een functie om te togglen.
1895
+
1896
+ bij de `toggle()` function is het mogelijk om een bepaalde status te forceren, door de waarde als parameter mee te geven.
1897
+
1898
+ ```tsx
1899
+ function ToggleDemo() {
1900
+ const [isVisible, toggleVisible] = useBoolToggle(); // start op isVisible = false
1901
+ const [color, toggleColor] = useToggle('red', ['red', 'blue']); // start op color = red, toggle tussen red & blue
1902
+ const [dier, toggleDier] = useToggle<Dier>(krokodil, [krokodil, alligator]]); // toggle met Type
1903
+
1904
+ return <>
1905
+ <Button.Primary onClick={() => toggleVsible()}>Visible</Button.Primary>
1906
+ <Button.Primary onClick={() => toggleColor()}>Color</Button.Primary>
1907
+ <Button.Primary onClick={() => toggleDier()}>Dier</Button.Primary>
1908
+ </>
1909
+ }
1910
+ ```
1911
+
1603
1912
  ## Publiceren <a id="publiceren"></a>
1604
1913
 
1605
1914
  Onder `scripts` in de `package.json` file staan `release` scripts klaar. Dit script publiceerd een nieuwe versie naar de npm-registry voor de tag `yXXXX` die hoort bij het jaar waar de geselecteerde git-branch bijhoort. Dus bijvoorbeeld voor 2020