loon-bulma-react 2022.3.10 → 2022.3.13

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 (151) hide show
  1. package/README.md +525 -143
  2. package/dist/components/Button/ButtonProps.d.ts +0 -2
  3. package/dist/components/ButtonGroup/ButtonGroup.d.ts +3 -8
  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 +16 -2
  7. package/dist/components/Form/Others/{BasicInput.d.ts → Input.d.ts} +4 -4
  8. package/dist/components/Form/Radio/Radio.d.ts +46 -0
  9. package/dist/components/Form/Text/TextInput.d.ts +9 -0
  10. package/dist/components/Indicator/Indicator.d.ts +19 -0
  11. package/dist/components/Layout/AspectRatio/AspectRatio.d.ts +2 -0
  12. package/dist/components/Layout/Box/Box.d.ts +6 -4
  13. package/dist/components/Layout/Columns/Column.d.ts +4 -2
  14. package/dist/components/Layout/Columns/Columns.d.ts +5 -3
  15. package/dist/components/Layout/Container/Container.d.ts +8 -5
  16. package/dist/components/Layout/Content/Content.d.ts +9 -6
  17. package/dist/components/Layout/Footer/Footer.d.ts +2 -4
  18. package/dist/components/Layout/Section/Section.d.ts +8 -5
  19. package/dist/components/Steps/Steps.d.ts +46 -0
  20. package/dist/components/Tag/Tag.d.ts +2 -2
  21. package/dist/components/TimeLine/TimeLine.d.ts +56 -0
  22. package/dist/components/ToggleBar/ToggleBar.d.ts +2 -0
  23. package/dist/hooks/useDebouncedValue.d.ts +4 -13
  24. package/dist/hooks/useHotkeys.d.ts +0 -4
  25. package/dist/hooks/useToggle.d.ts +4 -4
  26. package/dist/index.d.ts +12 -4
  27. package/dist/index.js +563 -278
  28. package/dist/index.js.map +1 -1
  29. package/dist/index.modern.js +557 -276
  30. package/dist/index.modern.js.map +1 -1
  31. package/dist/loon-react-bulma-types.d.ts +1 -0
  32. package/package.json +44 -33
  33. package/styles/_all.scss +11 -6
  34. package/styles/checkradio.scss +533 -0
  35. package/styles/custom-bulma.scss +2 -14
  36. package/styles/indicator-styles.scss +84 -0
  37. package/styles/kbd-styles.scss +13 -0
  38. package/styles/steps.scss +252 -0
  39. package/styles/timeline.scss +283 -0
  40. package/styles/variables.scss +1 -0
  41. package/dist/components/Button/Button.test.d.ts +0 -1
  42. package/dist/components/Button/ButtonBase.d.ts +0 -22
  43. package/dist/components/Button/InvertedButton.d.ts +0 -44
  44. package/dist/components/Button/LightButton.d.ts +0 -44
  45. package/dist/components/Button/LightOutlinedButton.d.ts +0 -44
  46. package/dist/components/Button/OutlinedButton.d.ts +0 -44
  47. package/dist/components/Button/index.d.ts +0 -2
  48. package/dist/components/ButtonGroup/ButtonGroup.test.d.ts +0 -1
  49. package/dist/components/Calendar/CalendarItems/AlldayEvent.d.ts +0 -17
  50. package/dist/components/Calendar/CalendarItems/ContextMenu.d.ts +0 -7
  51. package/dist/components/Calendar/CalendarItems/Event.d.ts +0 -17
  52. package/dist/components/Calendar/CalendarItems/InvertedEvent.d.ts +0 -17
  53. package/dist/components/Calendar/CalendarItems/MoreEvents.d.ts +0 -19
  54. package/dist/components/Calendar/CalendarItems/TimedEvent.d.ts +0 -17
  55. package/dist/components/Calendar/CalendarItems/base-styles.d.ts +0 -13
  56. package/dist/components/Calendar/CalendarItems/utils.d.ts +0 -13
  57. package/dist/components/Calendar/EventProps.d.ts +0 -8
  58. package/dist/components/Calendar/Month/Cal.Month.View.d.ts +0 -22
  59. package/dist/components/Calendar/Week/DateContainer.d.ts +0 -20
  60. package/dist/components/Calendar/Week/DayContainer.d.ts +0 -22
  61. package/dist/components/Calendar/Week/TimedContainer.d.ts +0 -15
  62. package/dist/components/Calendar/Week/containers.d.ts +0 -22
  63. package/dist/components/Calendar/date-utils.d.ts +0 -224
  64. package/dist/components/Calendar/utils.d.ts +0 -70
  65. package/dist/components/DataTable/DataTable.test.d.ts +0 -1
  66. package/dist/components/Form/Base.Input.Horizontal.d.ts +0 -8
  67. package/dist/components/Form/Base.Input.Vertical.d.ts +0 -6
  68. package/dist/components/Form/Checkbox.d.ts +0 -17
  69. package/dist/components/Form/Checkbox.test.d.ts +0 -1
  70. package/dist/components/Form/ColorInput.d.ts +0 -22
  71. package/dist/components/Form/DateInput.d.ts +0 -21
  72. package/dist/components/Form/DateTimeInput.d.ts +0 -20
  73. package/dist/components/Form/EmailInput.d.ts +0 -25
  74. package/dist/components/Form/FormBuilder.d.ts +0 -9
  75. package/dist/components/Form/FormBuilderProps.d.ts +0 -92
  76. package/dist/components/Form/FormProps.d.ts +0 -91
  77. package/dist/components/Form/FormValidatie.d.ts +0 -32
  78. package/dist/components/Form/HiddenInput.d.ts +0 -19
  79. package/dist/components/Form/MultiRangeInput.d.ts +0 -21
  80. package/dist/components/Form/MultiSelect.d.ts +0 -31
  81. package/dist/components/Form/NumberInput.d.ts +0 -24
  82. package/dist/components/Form/PasswordInput.d.ts +0 -24
  83. package/dist/components/Form/RangeInput.d.ts +0 -22
  84. package/dist/components/Form/Select.d.ts +0 -28
  85. package/dist/components/Form/SelectProps.d.ts +0 -21
  86. package/dist/components/Form/TextArea.d.ts +0 -21
  87. package/dist/components/Form/TextInput.d.ts +0 -25
  88. package/dist/components/Form/TimeInput.d.ts +0 -23
  89. package/dist/components/Icon/Icon.test.d.ts +0 -1
  90. package/dist/components/Layout/AspectRatio/AspectRatio.test.d.ts +0 -1
  91. package/dist/components/Layout/Box/Box.test.d.ts +0 -1
  92. package/dist/components/Layout/ButtonGroup/ButtonGroup.d.ts +0 -21
  93. package/dist/components/Layout/Columns/Column.test.d.ts +0 -1
  94. package/dist/components/Layout/Columns/ColumnProps.d.ts +0 -9
  95. package/dist/components/Layout/Columns/Columns.test.d.ts +0 -1
  96. package/dist/components/Layout/Columns/Fifths.d.ts +0 -22
  97. package/dist/components/Layout/Columns/Numbered.d.ts +0 -50
  98. package/dist/components/Layout/Columns/Quarters.d.ts +0 -17
  99. package/dist/components/Layout/Columns/Thirds.d.ts +0 -10
  100. package/dist/components/Layout/Columns/_all.d.ts +0 -5
  101. package/dist/components/Layout/Columns/index.d.ts +0 -1
  102. package/dist/components/Layout/Container/Container.test.d.ts +0 -1
  103. package/dist/components/Layout/Content/Content.test.d.ts +0 -1
  104. package/dist/components/Layout/FlexBox/Flexbox.d.ts +0 -48
  105. package/dist/components/Layout/Footer/Footer.test.d.ts +0 -1
  106. package/dist/components/Layout/Hero/Hero.test.d.ts +0 -1
  107. package/dist/components/Layout/Hero/HeroProps.d.ts +0 -37
  108. package/dist/components/Layout/Image/Image.test.d.ts +0 -1
  109. package/dist/components/Layout/Modal/Modal.d.ts +0 -17
  110. package/dist/components/Layout/ScrollArea/ScrollArea.test.d.ts +0 -1
  111. package/dist/components/Layout/Section/Section.test.d.ts +0 -1
  112. package/dist/components/Link/Link.test.d.ts +0 -1
  113. package/dist/components/Menu/MenuContent.d.ts +0 -4
  114. package/dist/components/Message/Message.test.d.ts +0 -1
  115. package/dist/components/Message/MessageProps.d.ts +0 -11
  116. package/dist/components/Modal/Modal.test.d.ts +0 -1
  117. package/dist/components/Notification/Notification.test.d.ts +0 -1
  118. package/dist/components/Notification/NotificationProps.d.ts +0 -13
  119. package/dist/components/Notification/Notifier.d.ts +0 -2
  120. package/dist/components/Notification/useNotifier.d.ts +0 -9
  121. package/dist/components/Notifier/NotificationProvider.d.ts +0 -1
  122. package/dist/components/Notifier/Notifier.d.ts +0 -9
  123. package/dist/components/Notifier/NotifierHooks.d.ts +0 -1
  124. package/dist/components/Notifier/NotifierProps.d.ts +0 -22
  125. package/dist/components/Notifyer/Notifyer.d.ts +0 -8
  126. package/dist/components/Panel/Panel.d.ts +0 -23
  127. package/dist/components/ProgressBar/ProgressBar.test.d.ts +0 -1
  128. package/dist/components/SimpleTable/SimpleTableProps.d.ts +0 -52
  129. package/dist/components/Table/SimpleTable.d.ts +0 -8
  130. package/dist/components/Table/SimpleTableProps.d.ts +0 -52
  131. package/dist/components/Table/Table.d.ts +0 -45
  132. package/dist/components/Table/Table.test.d.ts +0 -1
  133. package/dist/components/Table/TableProps.d.ts +0 -52
  134. package/dist/components/Tabs/TabProps.d.ts +0 -23
  135. package/dist/components/Tabs/Tabs.d.ts +0 -32
  136. package/dist/components/Tabs/Tabs.test.d.ts +0 -1
  137. package/dist/components/Titles/TitleProps.d.ts +0 -31
  138. package/dist/components/Titles/Titles.test.d.ts +0 -1
  139. package/dist/components/Toggle/Toggle.d.ts +0 -20
  140. package/dist/components/Toggle/ToggleBar.d.ts +0 -20
  141. package/dist/components/ToggleBar/ItemToggleBar.d.ts +0 -43
  142. package/dist/components/ToolTip/ToolTip.d.ts +0 -2
  143. package/dist/components/ToolTip/ToolTipContext.d.ts +0 -17
  144. package/dist/components/ToolTip/useToolTip.d.ts +0 -8
  145. package/dist/contexts/Notifier/NotificationProvider.d.ts +0 -5
  146. package/dist/contexts/Notifier/Notifier.test.d.ts +0 -1
  147. package/dist/contexts/Notifier/useNotifier.d.ts +0 -1
  148. package/dist/contexts/NotifierContext.d.ts +0 -8
  149. package/dist/dev-warning-fn.d.ts +0 -5
  150. package/dist/hooks/useViewToggle.d.ts +0 -18
  151. package/dist/index.test.d.ts +0 -1
package/README.md CHANGED
@@ -1,13 +1,28 @@
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
+ > - Form-component kan ook RadioButtons aan.
10
+ > - README: hooks-gedeelte aangevuld
11
+ > - `styles`-prop aangemaakt in aantal layout-componenten. Dan kan je direct styles zetten, mocht dat nodig zijn.
12
+ > - Container
13
+ > - Section
14
+ > - Box
15
+ > - Content
16
+ > - Columns
17
+ > - Column
18
+
3
19
  ## [Bulma](https://bulma.io/) & [React](https://reactjs.org/) componenten voor Loon Salarissoftware.
4
20
 
5
21
  - [Installatie](#installatie)
6
22
  - [Gebruik](#gebruik)
7
23
  - [Notifier](#notifier)
8
- - [Gebruik](#notifier-gebruik)
9
- - [Instinkers](#notifier-let-op)
10
24
  - [Componenten](#components)
25
+
11
26
  - [Layout](#layout)
12
27
  - [AspectRatio](#layout-aspectratio)
13
28
  - [Box](#layout-box)
@@ -21,9 +36,11 @@
21
36
  - [Button & ButtonGroup](#component-button)
22
37
  - [Calendar](#components-calendar)
23
38
  - [MonthView](#components-calendar-monthview)
39
+ - [WeekView](#components-calendar-weekview)
24
40
  - [DataTable](#component-datatable)
25
41
  - [Footer](#component-footer)
26
42
  - [Icons (FontAwesome)](#component-icons)
43
+ - [Indicator](#component-indicator)
27
44
  - [Kbd & Kbds](#component-kbd) (KeyBoarD)
28
45
  - [Link & LinkButon](#component-linkbutton)
29
46
  - [Menu](#component-menu-2)
@@ -32,7 +49,9 @@
32
49
  - [ProgressBars](#component-progressbar)
33
50
  - [TabBar](#component-tabbar) (Nieuw, ipv Tabs)
34
51
  - [SimpleTable](#component-simpletable) (Voorheen Table)
52
+ - [Steps](#component-steps) (NIEUW)
35
53
  - [Tag & Tags](#component-tags)
54
+ - [TimeLine](#component-timeline)
36
55
  - [Titles & Subtitles](#component-titles)
37
56
  - [ToggleBar](#component-toggles)
38
57
  - [Form & Inputs](#form)
@@ -50,6 +69,7 @@
50
69
  - FileInput
51
70
  - BasicInput
52
71
  - [CheckBox](#form-checkbox)
72
+ - [RadioButtons](#form-radio)
53
73
  - [Ranges](#form-ranges)
54
74
  - Range
55
75
  - MultiRange
@@ -59,6 +79,12 @@
59
79
  - [Validatie](#form-validatie)
60
80
  - [Form](#form-form)
61
81
  - [Form-builder](#form-component)
82
+
83
+ - [Hooks](#hooks)
84
+ - [useClipboard](#hooks-use-clipboard)
85
+ - [useDebouncedValue](#hooks-use-debounced-value)
86
+ - [useHotkeys](#hooks-use-hotkeys)
87
+ - [useToggle & useBoolToggle](#hooks-use-toggle)
62
88
  - [Publiceren](#publiceren)
63
89
 
64
90
  ## Installatie <a id="installatie"></a>
@@ -68,8 +94,7 @@
68
94
  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.
69
95
 
70
96
  ```bash
71
- npm install --save loon-bulma-react
72
- npm install --save bulma
97
+ npm install --save bulma loon-bulma-react
73
98
  ```
74
99
 
75
100
  ### Voor een versie die hoort bij een bepaald jaar (Bijvoorbeeld in Loon-2021).
@@ -87,7 +112,7 @@ Dan wordt altijd de laatste versie van die tag geïnstalleerd, in plaats van de
87
112
  {
88
113
  "devDependencies": {
89
114
  // ...
90
- "loon-bulma-react": "y2021"
115
+ "loon-bulma-react": "y2022"
91
116
  // ...
92
117
  }
93
118
  }
@@ -105,7 +130,7 @@ Dan wordt altijd de laatste versie van die tag geïnstalleerd, in plaats van de
105
130
 
106
131
  ## Gebruik <a id="gebruik"></a>
107
132
 
108
- in `index.tsx`
133
+ 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.
109
134
 
110
135
  ```tsx
111
136
  import 'loon-bulma-react/styles/_all.scss';
@@ -135,9 +160,7 @@ function MyComponent(props) {
135
160
 
136
161
  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.
137
162
 
138
- ### Gebruik <a id="notifier-gebruik"></a>
139
-
140
- ##### 1: wrap de componenten die de notifier mogen gebruiken tussen de provider-tags
163
+ 1: wrap de componenten die de notifier mogen gebruiken tussen de provider-tags
141
164
 
142
165
  ```tsx
143
166
  // App.tsx
@@ -152,25 +175,29 @@ import { NotifierProvider } from 'loon-react-bulma';
152
175
  </div>
153
176
  ```
154
177
 
155
- ##### 2: gebruik de `useNotifier()`-hook in child-components
178
+ 2: gebruik de `useNotifier()`-hook in een **child-component**
156
179
 
157
180
  ```tsx
158
181
  // MyComponent.tsx
159
182
  import { useNotifier } from 'loon-react-bulma';
160
- // ...
161
- const { notify } = useNotifier();
162
- const addNotification = () => {
163
- notify({
164
- type: 'i',
165
- content: 'Dit is een notification',
166
- onClick: () => console.log('notification clicked!'),
167
- dismissAfter: 2500, // dismiss na 2500 ms
168
- });
169
- };
170
- // ...
171
- <div>
172
- <Button.Primary onClick={() => addNotification()}>Notify!</Button.Primary>
173
- </div>;
183
+
184
+ function MyComponent(): JSX.Element {
185
+ const { notify } = useNotifier();
186
+ const addNotification = () => {
187
+ notify({
188
+ type: 'i',
189
+ content: 'Dit is een notification',
190
+ onClick: () => console.log('notification clicked!'),
191
+ dismissAfter: 2500, // dismiss na 2500 ms
192
+ });
193
+ };
194
+ // ...
195
+ return (
196
+ <div>
197
+ <Button.Primary onClick={() => addNotification()}>Notify!</Button.Primary>
198
+ </div>
199
+ );
200
+ }
174
201
  ```
175
202
 
176
203
  Een notificatie heeft de volgende properties nodig:
@@ -181,13 +208,13 @@ Een notificatie heeft de volgende properties nodig:
181
208
  - `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.
182
209
  - `id`: _(optioneel)_ id van een notificatie, een random int als niet ingevuld.
183
210
 
184
- #### `useNotifier()`
211
+ ##### `useNotifier()`
185
212
 
186
213
  De `useNotifier()`-hook is een custom hook voor het gebruik van de notifier. Deze bevat de functions om dingen met de notifier te doen:
187
214
 
188
- - _notify(n: NotificationItemProps)_: maak een notificatie
189
- - _remove(nId: number)_: verwijder een notificatie met een `id`.
190
- - _clear()_: verwijder ALLE notificaties
215
+ - `notify(n: NotificationItemProps)`: maak een notificatie
216
+ - `remove(nId: number)`: verwijder een notificatie met een `id`.
217
+ - `clear()`: verwijder ALLE notificaties
191
218
 
192
219
  Alleen de functions importeren die je nodig hebt is genoeg
193
220
 
@@ -196,17 +223,17 @@ import { useNotifier } from 'loon-react-bulma';
196
223
  const { notify, remove, clear } = useNotifier();
197
224
  ```
198
225
 
199
- > ### Let op! <a id="notifier-let-op"></a>
226
+ > **Let op!** <a id="notifier-let-op"></a>
200
227
  >
201
228
  > 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.
202
229
 
203
230
  ## Componenten <a id="components"></a>
204
231
 
205
- #### Layout <a id="layout"></a>
232
+ ### Layout <a id="layout"></a>
206
233
 
207
234
  Er zijn een aantal componenten die vooral van invloed zijn op de layout van een pagina.
208
235
 
209
- ### AspectRatio <a id="layout-aspectratio"></a>
236
+ #### AspectRatio <a id="layout-aspectratio"></a>
210
237
 
211
238
  Een AspectRatio is vooral om te zorgen dat bijvoorbeeld `<iframe>` en andere elementen met een aanpasbare width aan een bepaald formaat voldoen.
212
239
 
@@ -225,7 +252,7 @@ Een AspectRatio is vooral om te zorgen dat bijvoorbeeld `<iframe>` en andere ele
225
252
  </div>
226
253
  ```
227
254
 
228
- ### Box <a id="layout-box"></a>
255
+ #### Box <a id="layout-box"></a>
229
256
 
230
257
  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.
231
258
 
@@ -238,7 +265,7 @@ Als je liever geen component gebruikt, maar een `<div>` de class `bulma-box` gee
238
265
  </div>
239
266
  ```
240
267
 
241
- ### Columns <a id="layout-columns"></a>
268
+ #### Columns <a id="layout-columns"></a>
242
269
 
243
270
  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:
244
271
 
@@ -278,7 +305,7 @@ Als maar **één** van de kolommen een size-modifier heeft (bijvoorbeeld `<Colum
278
305
  </div>
279
306
  ```
280
307
 
281
- ### Container <a id="layout-container"></a>
308
+ #### Container <a id="layout-container"></a>
282
309
 
283
310
  Een container om content horizontaal te centreren op grotere viewports. De container wordt actief van verschillende breakpoints.
284
311
 
@@ -290,7 +317,7 @@ Een container om content horizontaal te centreren op grotere viewports. De conta
290
317
  | Container.FullHD | max-width | max-width | max-width | 1344px |
291
318
  | Container.Max\* | max-width | max-width | max-width | max-width |
292
319
 
293
- ###### (\*) = links & rechts blijft er 32px ruimte als margin over.
320
+ > (\*) = links & rechts blijft er 32px ruimte als margin over.
294
321
 
295
322
  ```tsx
296
323
  <div>
@@ -301,7 +328,7 @@ Een container om content horizontaal te centreren op grotere viewports. De conta
301
328
  </div>
302
329
  ```
303
330
 
304
- ### Content <a id="layout-content"></a>
331
+ #### Content <a id="layout-content"></a>
305
332
 
306
333
  Content is voor content, waar alleen HTML-tags beschikbaar zijn. Content kan een hoop html-aan:
307
334
  `<p>, <ul, <ol>, <dl>, <h1>...<h6>, <blockquote>, <em>, <strong>, <table>, <tr>, <th>, <td>, <sub>, <sup>`
@@ -332,7 +359,7 @@ Deze markers zijn beschikbaar:
332
359
  <!-- i, ii, iii-->
333
360
  ```
334
361
 
335
- ### Hero <a id="layout-hero"></a>
362
+ #### Hero <a id="layout-hero"></a>
336
363
 
337
364
  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.
338
365
  Een hero bevat optionele items aan de bovenkant (`Head`) of de onderkant (`Foot`).
@@ -389,7 +416,7 @@ De navigatie kan op 2 manieren worden gemaakt:
389
416
  </Hero.Foot>
390
417
  ```
391
418
 
392
- ### Image <a id="layout-image"></a>
419
+ #### Image <a id="layout-image"></a>
393
420
 
394
421
  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.
395
422
 
@@ -401,7 +428,7 @@ Een afbeelding met een vastgestelde aspect-ratio. Een ratio 'square' kan een gro
401
428
  </div>
402
429
  ```
403
430
 
404
- ### Section <a id="layout-section"></a>
431
+ #### Section <a id="layout-section"></a>
405
432
 
406
433
  Een section is een simpele container om een pagina in stukken te verdelen.
407
434
 
@@ -412,7 +439,7 @@ Een section is een simpele container om een pagina in stukken te verdelen.
412
439
  </div>
413
440
  ```
414
441
 
415
- ### ScrollArea <a id="layout-scrollarea"></a>
442
+ #### ScrollArea <a id="layout-scrollarea"></a>
416
443
 
417
444
  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.
418
445
 
@@ -420,7 +447,7 @@ Een ScrollArea is een horizontaal of verticaal scrollbare `<div>` met flexbox-ei
420
447
  - `wrap`: mag de content wrappen? Scrollen is dan niet meer mogelijk, tenzij er een max-height is opgegeven.
421
448
  - `align`: aligning van de content
422
449
 
423
- #### Horizontaal:
450
+ ##### Horizontaal:
424
451
 
425
452
  ```tsx
426
453
  <ScrollArea.Horizontal gap={{ row: '1em', col: 16 }} wrap={true} alignment="c">
@@ -433,7 +460,7 @@ Een ScrollArea is een horizontaal of verticaal scrollbare `<div>` met flexbox-ei
433
460
  </ScrollArea.Horizontal>
434
461
  ```
435
462
 
436
- #### Verticaal:
463
+ ##### Verticaal:
437
464
 
438
465
  ```tsx
439
466
  <ScrollArea.Vertical maxHeight={600}>
@@ -446,7 +473,7 @@ Een ScrollArea is een horizontaal of verticaal scrollbare `<div>` met flexbox-ei
446
473
  </ScrollArea.Vertical>
447
474
  ```
448
475
 
449
- ### Button & ButtonGroup <a id="component-button"></a>
476
+ #### Button & ButtonGroup <a id="component-button"></a>
450
477
 
451
478
  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_
452
479
 
@@ -467,13 +494,6 @@ De Light, Outlined, LightOutlined en Inverted versies van deze buttons zijn te m
467
494
  - LightOutlined: `"light-outlined"` | `"lo"`
468
495
  - default: `"default"` | `undefined`
469
496
 
470
- > ### deprecated
471
- >
472
- > 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
473
- >
474
- > - de class-string op te geven, dus `'fas fa-horse-head'`.
475
- > - door het object dat mbv React-FontAwsome wordt gemaakt als waarde door te geven.
476
-
477
497
  De `ButtonGroup`-component kan gebruikt worden om buttons te grouperen en de grootte voor buttons in te stellen.
478
498
 
479
499
  ```tsx
@@ -495,7 +515,7 @@ import { ButtonGroup, Bttn, Button, LightButton, InvertedButton, OutlinedButton
495
515
  </ButtonGroup>;
496
516
  ```
497
517
 
498
- ### Calendar <a id="components-calendar"></a>
518
+ #### Calendar <a id="components-calendar"></a>
499
519
 
500
520
  De Calendar Component toont events in een grid-view. Er zijn 2 verschillende soorten events:
501
521
 
@@ -517,7 +537,7 @@ export type BaseEventProps = {
517
537
  };
518
538
  ```
519
539
 
520
- Op dit moment is er alleen nog een `MonthView`-component.
540
+ Op dit moment zijn er een `MonthView`-component en een `WeekView`-component.
521
541
 
522
542
  De opties voor het instellen van de calendar zijn:
523
543
 
@@ -550,9 +570,7 @@ export type CalendarOptions<T> = {
550
570
  };
551
571
  ```
552
572
 
553
- ##### MonthView <a id="components-calendar-monthview"></a>
554
-
555
- 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.
573
+ De properties zijn bijna allemaal hetzelfde.
556
574
 
557
575
  - `events`: een array met events.
558
576
  - `viewDate`: de datum waarop de maand wordt getoond.
@@ -561,9 +579,13 @@ Deze component toont een maand + de rest van de weken die maar deels in een maan
561
579
  - `onDayClick()`: callback die wordt aangeroepen als er op een dag-datum wordt geklikt.
562
580
  - `onShowMore()`: function die een JSX.Element opleveret voor hoveren & rechtsklikken op een event.
563
581
 
582
+ ##### MonthView <a id="components-calendar-monthview"></a>
583
+
584
+ 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.
585
+
564
586
  ```tsx
565
587
  <>
566
- <Calendar.MonthView
588
+ <Calendar.Month
567
589
  events={events}
568
590
  viewDate={viewDate}
569
591
  options={options}
@@ -574,11 +596,32 @@ Deze component toont een maand + de rest van de weken die maar deels in een maan
574
596
  </>
575
597
  ```
576
598
 
577
- ### DataTable <a id="component-datatable"></a>
599
+ ##### WeekView <A id="components-calendar-weekview"></a>
600
+
601
+ Deze component toont een week. In plaats van een cel per dag werkt deze met cellen per uur per dag.
602
+
603
+ ```tsx
604
+ <>
605
+ <Calendar.Week
606
+ events={events}
607
+ options={{
608
+ locale: 'de-DE',
609
+ dayName: 'long',
610
+ visibleDays: visibleDayNums,
611
+ monthName: 'long',
612
+ }}
613
+ viewDate={viewDate}
614
+ onEventClick={(evt, clck) => console.log(evt, clck)}
615
+ onDayClick={(evt, clck) => console.log(evt, clck)}
616
+ />
617
+ </>
618
+ ```
619
+
620
+ #### DataTable <a id="component-datatable"></a>
578
621
 
579
622
  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.
580
623
 
581
- #### Sorteren
624
+ ##### Sorteren
582
625
 
583
626
  Het sorteren is aangepast. Om een column sorteerbaar te maken, moet je een van de onderstaande 4 waarden opgeven:
584
627
 
@@ -586,11 +629,10 @@ Het sorteren is aangepast. Om een column sorteerbaar te maken, moet je een van d
586
629
  - true: deze kolom is sorteerbaar.
587
630
  - `'function'`: sorteer deze kolom met deze `function`.
588
631
 
589
- ##### <em>LET OP
590
-
591
- Als deze kolom JSX-Elementen bevat, _MOET_ er een sort-function worden opgegeven om wel te kunnen sorteren.</em>
632
+ > **LET OP**
633
+ > Als deze kolom JSX-Elementen bevat, _MOET_ er een sort-function worden opgegeven om wel te kunnen sorteren.</em>
592
634
 
593
- #### Search
635
+ ##### Search
594
636
 
595
637
  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:
596
638
 
@@ -606,16 +648,16 @@ const mySearch = (s: string, users: IUser[]): IUser[] => {
606
648
  - _@param_ items: de items waarin gezocht / gefilterd moet worden
607
649
  - _@returns_: de gefilterde items
608
650
 
609
- #### Custom classes
651
+ ##### Custom classes
610
652
 
611
653
  Om eigen classes toe te voegen aan rows en aan columns zijn er methodes:
612
654
 
613
655
  - op de DataTable props zit de `rowClasses` function voor classes op de `<tr>`.
614
656
  - op de DataTableColum props zit de `columnClasses` function voor classes op de `<td>`.
615
657
  De gebruikte classes kunnen in een globale css file of in een lokaal geïmporteerde file staan (zoals hieronder).
616
- > #### LET OP!
617
- >
618
- > in combinatie met `isStriped: {true}` werkt het zetten van `background-color` ALLEEN in combinatie met `!important`. Anders wordt de achtergrondkleur weer overschreven door Bulma.
658
+
659
+ > **LET OP!**
660
+ > in combinatie met `isStriped: {true}` werkt het zetten van `background-color` ALLEEN in combinatie met `!important`. Anders wordt de achtergrondkleur weer overschreven door Bulma.
619
661
 
620
662
  ```css
621
663
  /** datatable.styles.css */
@@ -696,7 +738,7 @@ export function DataTableTab() {
696
738
  }
697
739
  ```
698
740
 
699
- ### Footer <a id="component-footer"></a>
741
+ #### Footer <a id="component-footer"></a>
700
742
 
701
743
  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.
702
744
 
@@ -710,7 +752,7 @@ Een footer staat meestal onderaan de pagina. Er zit een container in die default
710
752
  </div>
711
753
  ```
712
754
 
713
- ### Icons (Font Awesome) <a id="component-icons"></a>
755
+ #### Icons (Font Awesome) <a id="component-icons"></a>
714
756
 
715
757
  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.
716
758
 
@@ -746,7 +788,34 @@ Daar kan wel meer worden opgegeven. Voor de IconText component wordt ook de kleu
746
788
  </p>
747
789
  ```
748
790
 
749
- ### Kbd & Kbds (Keyboard Key, Keyboard Key group) <a id="component-kbd"></a>
791
+ #### Indicator <a id="component-indicator"></a>
792
+
793
+ 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:
794
+
795
+ - `tr`: top-right (default)
796
+ - `tl`: top-left
797
+ - `br`: bottom-right
798
+ - `bl`: bottom-left
799
+ - `tc`: top-center
800
+ - `bc`: bottom-center
801
+ - `rc`: right-center
802
+ - `lc`: left-center
803
+
804
+ Een `<Indicator>` heeft ook een optionele tooltip en een optioneel `label` om binnen de badge een tekst te plaatsen.
805
+
806
+ ```tsx
807
+ <>
808
+ <Indicator color="d" label="100" position="tr" tooltip="100 nieuwe e-mails">
809
+ <Button.Primary>
810
+ <Icon icon={faMail}>
811
+ Email
812
+ </Button.Primary>
813
+ </Indicator>
814
+ </>
815
+
816
+ ```
817
+
818
+ #### Kbd & Kbds (Keyboard Key, Keyboard Key group) <a id="component-kbd"></a>
750
819
 
751
820
  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.
752
821
 
@@ -762,7 +831,7 @@ De `<Kbds>`-component gebruikt je om emerdere keyboard-keys bij elkaar te zetten
762
831
  </>
763
832
  ```
764
833
 
765
- ### Link & LinkButton <a id="component-linkbutton"></a>
834
+ #### Link & LinkButton <a id="component-linkbutton"></a>
766
835
 
767
836
  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.
768
837
 
@@ -775,7 +844,7 @@ Link en LinkButton zijn bedoelt om links (`<a>`) en buttons (`<button>`) er, bij
775
844
  </div>
776
845
  ```
777
846
 
778
- ### Menu (Nieuw) <a id="component-menu-2"></a>
847
+ #### Menu <a id="component-menu-2"></a>
779
848
 
780
849
  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.
781
850
  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.
@@ -819,9 +888,10 @@ Andere elementen worden **niet** gerendered.
819
888
  </div>
820
889
  ```
821
890
 
822
- ### Messages & Notifications <a id="component-messages"></a>
891
+ #### Messages & Notifications <a id="component-messages"></a>
823
892
 
824
- Een message of een notifcatie bevatten een tekst. Messages hebben ook een optionele titel. Er zjn 4 soorten: _Warning_, _Info_, _Success_, _Danger_.
893
+ 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.
894
+ 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.
825
895
 
826
896
  ```tsx
827
897
  <div>
@@ -830,7 +900,7 @@ Een message of een notifcatie bevatten een tekst. Messages hebben ook een option
830
900
  </div>
831
901
  ```
832
902
 
833
- Een notificatie bevat ook een tekst, maar heeft ook een dimsiss-button. Deze methode is verplicht om toe te voegen.
903
+ 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.
834
904
 
835
905
  ```tsx
836
906
  <div>
@@ -844,7 +914,7 @@ Een notificatie bevat ook een tekst, maar heeft ook een dimsiss-button. Deze met
844
914
  </div>
845
915
  ```
846
916
 
847
- ### Modal <a id="component-modal"></a>
917
+ #### Modal <a id="component-modal"></a>
848
918
 
849
919
  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.
850
920
 
@@ -910,30 +980,33 @@ Een modal heeft ook verschillende sizes. Met de `size`-prop kan deze ingesteld w
910
980
  - `'50%'`
911
981
  - `'60em'`
912
982
 
913
- ### ProgressBar <a id="component-progressbar"></a>
983
+ #### ProgressBar <a id="component-progressbar"></a>
914
984
 
915
985
  Een progressbar doet precies wat je verwacht.
916
986
 
917
- - 4 maten (small (s), medium (m), large (l) en extralarge (xl)).
918
- - 4 kleuren (danger (d), succes (s), link (l) en primary (p)). Default = primary
987
+ - 4 maten (small (`s`), medium (`m)`, large (`l`) en extralarge (`xl`)). Default = `m`, medium
988
+ - 6 kleuren (danger (`d`), succes (`s`), warning (`w`), link (`l`), info (`i`) en primary (`p`)). Default = info (`i`)
919
989
  - de max value is instelbaar, default = 100.
920
990
 
921
991
  ```tsx
922
992
  <div>
923
- <ProgressBar value={50} size="l" color="primary" />
993
+ <ProgressBar value={50} />
924
994
  <ProgressBar color="success" size="m" />
925
995
  <ProgressBar max={200} color="d" />
926
996
  <ProgressBar value={50} color="l" size="s" />
927
997
  </div>
928
998
  ```
929
999
 
930
- ### TabBar <A id="component-tabbar"></a>
1000
+ #### TabBar <A id="component-tabbar"></a>
931
1001
 
932
1002
  De TabBar component komt in de plaats van de Tabs component. Deze gaat iets anders om met Tab items dan de oude Tabs-component.
933
1003
 
934
1004
  Als er andere items dan die van het type `<TabBarItem>` worden gebruikt, volgt een waarschuwing in de console.
935
1005
  Een TabBarItem kan vervolgens **alleen** strings of `<Icon>`-componenten bevatten. Deze worden gebruikt o de tab weer te geven.
936
1006
 
1007
+ - `initialTab`: als je alleen de start-tab wil instellen en het daarna niet meer uitmaakt.
1008
+ - `activeTab`: voor als je een start-tab wil instellen, maar deze ook wil kunnen wijzigen.
1009
+
937
1010
  ```tsx
938
1011
  const [tab, setTab] = useState<string | number>(100);
939
1012
  // ...
@@ -964,11 +1037,7 @@ const [tab, setTab] = useState<string | number>(100);
964
1037
  </div>;
965
1038
  ```
966
1039
 
967
- ### Table <a id="component-table"></a>
968
-
969
- Table nieuwe stijl. TODO: documentatie & implementatie
970
-
971
- ### SimpleTable <a id="component-simpletable"></a>, voorheen Table
1040
+ #### SimpleTable <a id="component-simpletable"></a>, voorheen Table
972
1041
 
973
1042
  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.
974
1043
  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.
@@ -997,7 +1066,51 @@ return (
997
1066
  );
998
1067
  ```
999
1068
 
1000
- ### Tag & Tags <a id="component-tags"></a>
1069
+ #### Steps <a id="component-steps"></a>
1070
+
1071
+ De `<Steps>`-component is bedoeld voor het weergeven van een stappenplan. De `<Steps.Item>`-component wordt gebruikt om de stappen te maken.
1072
+
1073
+ ##### `<Steps>` heeft de volgende props
1074
+
1075
+ - `className`: extra classes voor de steps-container
1076
+ - `children`: de `<Steps.Item>` componenten. (REQUIRED)
1077
+ - `size`: grootte van de steps (defualt = `m`)
1078
+ - `activeStep`: actieve stap;
1079
+ - `onChangeStep(step: number) => void`: callback voor het wijzigen van de stap
1080
+ - `freeStepChoice`: welke stappen zijn selecteerbaar (default = `disabled`)
1081
+ - `disabled`: alleen linker- en rechter-buurman mogen geselecteerd worden
1082
+ - `allowed`: alle stappen zijn vrij te kiezen
1083
+ - `up`: alleen de stappen rechts zijn vrij te kiezen, links alleen de directe buur
1084
+ - `down`: alleen de stappen links zijn vrij te kiezen, recht alleen de directe buur
1085
+
1086
+ ##### `<Steps.Item>` heeft de volgende props
1087
+
1088
+ - `status`: een status van de stap (default = 'pending')
1089
+ - `pending`: stap nog niet gedaan
1090
+ - `error`: een fout in deze stap
1091
+ - `completed`: deze stap is gedaan
1092
+ - `active`: de actieve stap
1093
+ - `title`: een titel voor deze stap
1094
+ - `description`: een langere beschrijving van deze stap
1095
+ - `marker`: een icoon, nummer of letter voor deze stap
1096
+
1097
+ ```tsx
1098
+ <>
1099
+ <Steps onChangeStep={(stepNr: number) => console.log(stepNr)} freeStepChoice="disabled">
1100
+ <Steps.Item title="Step 1" marker={1} />
1101
+ <Steps.Item title="" marker={<Icon icon={faFlask} />} />
1102
+ <Steps.Item title="Step 2" details="dit zijn de details voor deze stap" />
1103
+ <Steps.Item title="" marker={<Icon icon={faBomb} />} status="error" />
1104
+ <Steps.Item
1105
+ title="Step 3"
1106
+ marker={(status) => (status == 'pending' ? <Icon icon={faFlag} /> : <Icon icon={faFire} />)}
1107
+ />
1108
+ <Steps.Item title="Step 4" marker="A" />
1109
+ </Steps>
1110
+ </>
1111
+ ```
1112
+
1113
+ #### Tag & Tags <a id="component-tags"></a>
1001
1114
 
1002
1115
  Een `<Tag>` is een klein inline elementje om overal te kunnen stoppen. Tags kunnen een optionele sluit-knop bevatten
1003
1116
  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.
@@ -1037,7 +1150,61 @@ Om twee tags als 1 tag te laten zien, kan je de `merged` prop op de `<Tags>`-com
1037
1150
  </Tags>
1038
1151
  ```
1039
1152
 
1040
- ### Titles & Subtitles <a id="component-titles"></a>
1153
+ #### Timeline <a id="component-timeline"></a>
1154
+
1155
+ De `<TimeLine>`-component kan gebruikt worden om een verticale tijdlijn te maken. Een TimeLine bevat 2 verschillende items: **points** of **items**.
1156
+
1157
+ `<TimeLine>` component heeft de volgende props:
1158
+
1159
+ - `alignment`: positie: `l`, `r`, of `c`. (default = `l`). Met `c` verschijnen de items afwisselend links of rechts van de lijn.
1160
+ - `className`: extra classes voor op de timeline-container
1161
+ - `children`: de content van de timeline, dus `<TimeLine.Point>`'s en `<TimeLine.Item>`'s
1162
+
1163
+ ##### `<TimeLine.Point>` component
1164
+
1165
+ 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
1166
+
1167
+ - `children`: Content van dit punt
1168
+ - `color`: kleur van dit punt (default = `light`, grijs)
1169
+ - `size`: de grotte van het punt (default = `s`, small)
1170
+ - `tooltip`: een tooltip voor het punt.
1171
+
1172
+ ##### `<TimeLine.Item>` component
1173
+
1174
+ 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.
1175
+
1176
+ - `heading`: de titel van het item (bijvoorbeeld een datum)
1177
+ - `children`: de content van het item. Dit kan gewoon HTML zijn.
1178
+ - `marker`: een object om een icoon of een kleur mee door te geven. Deze prop bevat 2 props:
1179
+ - `icon`: een icon (string of Font Awesome Icon Prop) voor de markeerstip
1180
+ - `color`: de kleur van de markeerstip (default = undefined, een grijze cirkel)
1181
+
1182
+ ```tsx
1183
+ <>
1184
+ <TimeLine>
1185
+ <TimeLine.Point>Start</TimeLine.Point>
1186
+ <TimeLine.Point color="l">2019</TimeLine.Point>
1187
+ <TimeLine.Item heading="Maart 2019">Oh boi oh boi oh boi oh boi</TimeLine.Item>
1188
+ <TimeLine.Item marker={{ color: 's' }} heading="November 2019">
1189
+ Oompa Loompa Dooba die dee.
1190
+ </TimeLine.Item>
1191
+
1192
+ <TimeLine.Point size="m">2020</TimeLine.Point>
1193
+ <TimeLine.Item marker={{ icon: faFlask, color: 's' }} heading="August 2020">
1194
+ Whoop sie doop sie dooooooop
1195
+ </TimeLine.Item>
1196
+ <TimeLine.Item marker={{ icon: 'fas fa-', color: 's' }} heading="December 2020">
1197
+ <p>Bibbity Boppity Boo</p>
1198
+ </TimeLine.Item>
1199
+
1200
+ <TimeLine.Point color="d" size="l">
1201
+ End
1202
+ </TimeLine.Point>
1203
+ </TimeLine>
1204
+ </>
1205
+ ```
1206
+
1207
+ #### Titles & Subtitles <a id="component-titles"></a>
1041
1208
 
1042
1209
  Een verzameling van h1...h6 tags. Er zijn drie verschillende componenten om [Bulma Titles](https://bulma.io/documentation/elements/title/) te gebruiken.
1043
1210
 
@@ -1068,9 +1235,9 @@ Allemaal hebben ze 2 waarden die isntelbaar zijn voor Sizes: _headingSize_ en _b
1068
1235
  </div>
1069
1236
  ```
1070
1237
 
1071
- ## ToggleBar <a id="component-toggles"></a>
1238
+ #### ToggleBar <a id="component-toggles"></a>
1072
1239
 
1073
- 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.
1240
+ 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.
1074
1241
 
1075
1242
  De ToggleBar heeft de volgende props:
1076
1243
 
@@ -1083,7 +1250,7 @@ De ToggleBar heeft de volgende props:
1083
1250
  - `onColor`: ColorProp voor de 'on'-status (default 's' (success, groen))
1084
1251
  - `offColor`: ColorProp voor de 'off'-status (default 'd' (danger, rood))
1085
1252
 
1086
- #### Common props Toggle Items
1253
+ ##### Common props Toggle Items
1087
1254
 
1088
1255
  Er zijn een paar props op de `Item` en de `OnOffItem` hetzelfde.
1089
1256
 
@@ -1091,7 +1258,7 @@ Er zijn een paar props op de `Item` en de `OnOffItem` hetzelfde.
1091
1258
  - `tooltip`: tooltip voor een toggle-item
1092
1259
  - `disabled`: disable een toggle-item`
1093
1260
 
1094
- ### ToggleItem
1261
+ ##### ToggleItem
1095
1262
 
1096
1263
  ToggleItems zijn meerdere knopjes op de bar, waarvan er maar 1 de status 'on' heeft. De andere buttons hebben dan de 'off'-state.
1097
1264
 
@@ -1107,7 +1274,7 @@ De `onToggle()`-callback wordt aangeroepen als de getogglede knop wordt verander
1107
1274
  </div>
1108
1275
  ```
1109
1276
 
1110
- ### OnOffToggleItem
1277
+ ##### OnOffToggleItem
1111
1278
 
1112
1279
  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.
1113
1280
 
@@ -1157,24 +1324,25 @@ Ze hebben 2 props meer dan de ToggleItems:
1157
1324
  </div>
1158
1325
  ```
1159
1326
 
1160
- ## Form & inputs <a id="form"></a>
1327
+ ### Form & inputs <a id="form"></a>
1161
1328
 
1162
1329
  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.
1163
1330
 
1164
1331
  - [Input Types](#form-input)
1165
- - _TextInput_: invoeren van tekst, urls, etc.
1166
- - _PasswordInput_: invoeren van een wachtwoord, met puntjes ipv karakters
1167
- - _EmailInput_: invoeren van een emailadres
1168
- - _NumberInput_: invoeren van een nummer (alleen numerieke karakters)
1169
- - _ColorInput_: invoeren van een kleur (in hex-formaat, altijd # + 6 hex-values)
1170
- - _HiddenInput_: niet-bewerkbare onzichtbare input die WEL belangrijk is.
1171
- - _DateInput_: invoeren van een datum
1172
- - _TimeInput_: invoeren van een tijd
1173
- - _DateTimeInput_: invoeren van een datum & een tijd als combi
1174
- - _TextAreaInput_: invoer van een tekst
1175
- - _FileInput_: invoer van een file
1176
- - _BasicInput_: zelf in te stellen input
1332
+ - `<TextInput>`: invoeren van tekst, urls, etc.
1333
+ - `<PasswordInput>`: invoeren van een wachtwoord, met puntjes ipv karakters
1334
+ - `<EmailInput>`: invoeren van een emailadres
1335
+ - `<NumberInput>`: invoeren van een nummer (alleen numerieke karakters)
1336
+ - `<ColorInput>`: invoeren van een kleur (in hex-formaat, altijd # + 6 hex-values)
1337
+ - `<HiddenInput>`: niet-bewerkbare onzichtbare input die WEL belangrijk is.
1338
+ - `<DateInput>`: invoeren van een datum
1339
+ - `<TimeInput>`: invoeren van een tijd
1340
+ - `<DateTimeInput>`: invoeren van een datum & een tijd als combi
1341
+ - `<TextAreaInput>`: invoer van een tekst
1342
+ - `<FileInput>`: invoer van een file
1343
+ - `<BasicInput>`: zelf in te stellen input
1177
1344
  - [Checkbox](#form-checkbox)
1345
+ - [RadioButtons](#form-radio)
1178
1346
  - [Ranges](#form-ranges)
1179
1347
  - _Range_: een getal selecteren
1180
1348
  - _MultiRange_: 2 getallen selecteren (een range)
@@ -1183,7 +1351,7 @@ De library bevat componenten om als losse inputs, selects, ranges of checkboxes
1183
1351
  - [Form](#form-form)
1184
1352
  - [Form-builder](#form-component)
1185
1353
 
1186
- ### Input Types<a id="form-input"></a>
1354
+ #### Input Types<a id="form-input"></a>
1187
1355
 
1188
1356
  Er zijn verschillende soorten inputs voor de afhandeling van input-types. Er zijn een aantal props die op alle inputs voorkomen:
1189
1357
 
@@ -1213,27 +1381,8 @@ Er zijn verschillende soorten inputs voor de afhandeling van input-types. Er zij
1213
1381
  - `direction`: orientatie van de input (horizontaal of vertical, default = 'horizontal')
1214
1382
  - `size`: de grootte van een input
1215
1383
 
1216
- - Tekst:
1217
- - **TextInput:** invoeren van tekst, urls, etc.
1218
- - **EmailInput:** invoeren van een emailadres. Valideert het emailadres met een regex (overschrijfbaar mbv validatie-object).
1219
- - **PasswordInput:** invoeren van een wachtwoord.
1220
- - **TextAreaInput:** een textarea, werkt in tegenstelling tot de `<textarea></textarea>`-tag _niet_ met children. De waarde kan gezet worden met de `value`-attribuut.
1221
- - Getallen:
1222
- - **NumberInput:** invoer van een nummer
1223
- - **Range:** invoer van een nummer, maar dan met een [range](#form-ranges)
1224
- - **MultiRange:** invoer van twee nummers, met behulp van een [range](#form-ranges)
1225
- - Datum / Tijd
1226
- - **DateInput:** invoer van ene datum. De value kan als `string` of `Date` worden opgegeven
1227
- - **TimeInput:** invoer van een tijdstip. De value kan als `string` of `Date` worden opgegeven
1228
- - **DateTimeInput:** invoer-combi voor een datum & tijd. De value kan als `string` of `Date` worden opgegeven
1229
- - Overig
1230
- - **BasicInput** een input om helemaal zelf te kunnen instellen
1231
- - **ColorInput** een invoer voor een kleur. Altijd een hex-waarde, de echte selectie is afhankelijk van de browser
1232
- - **HiddenInput** een invoer die wel belangrijk is, maar niet gezien en niet bewerkt mag worden. Heeft vanzelfsprekend geen styling
1233
- - **FileInput** invoer van een (of meer) files
1234
-
1235
1384
  ```tsx
1236
- <div>
1385
+ <>
1237
1386
  <BasicInput name="something" type="text">
1238
1387
  <TextInput type="text" name="TextInput" id="textinput" validatie={{required: true}}/>
1239
1388
  <EmailInput name="EmailInput" id="emailinput" validatie={{required: true}}/>
@@ -1251,12 +1400,21 @@ Er zijn verschillende soorten inputs voor de afhandeling van input-types. Er zij
1251
1400
 
1252
1401
  <HiddenInput name="HiddenInput" value="bazinga!" id="hiddenInput" required={true}/>
1253
1402
 
1254
- </div>
1403
+ </>
1255
1404
  ```
1256
1405
 
1257
- ### CheckBox <a id="form-checkbox"></a>
1406
+ #### CheckBox <a id="form-checkbox"></a>
1407
+
1408
+ Een checkbox is een checkbox en werkt als een checkbox. De styling is een beetje aangepast van de standaard checkbox.
1409
+ Er zijn nu sizes (`s`, `m` (default), `l` en `xl`) en colors (`l` (default), `w`, `d`, `s`, `i`, `p`).
1410
+ Deze zijn in te stellen met de `size` en de `color` prop.
1258
1411
 
1259
- > Wat anders is aan deze input, is dat de `size`-prop geen effect heeft. Er is maar 1 grootte.
1412
+ Ook is er een `styling`-prop. Met deze kan je wat styling aanpassen
1413
+
1414
+ - `noborder`: de randen van de checkbox zijn onzichtbaar
1415
+ - `colored`: de checkbox zelf heeft de achtergrondkleur uit de `color`-prop
1416
+ - `blocky`: de checkbox EN het label hebben dezelfde achtergrondkleur
1417
+ - `rounded`: afgeronde hoeken in plaats van vierkante hoeken op de checkbox.
1260
1418
 
1261
1419
  ```tsx
1262
1420
  <div>
@@ -1264,9 +1422,74 @@ Er zijn verschillende soorten inputs voor de afhandeling van input-types. Er zij
1264
1422
  </div>
1265
1423
  ```
1266
1424
 
1267
- ### Ranges <a id="form-ranges"></a>
1425
+ #### RadioButtons <a id="form-radio"></a>
1426
+
1427
+ 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.
1428
+
1429
+ Een `<RadioGroup.Item>` component heeft de volgende props:
1430
+
1431
+ - `value`: de waarde van de radiobutton. Als er geen children zijn, wordt de value getoond als tekst.
1432
+ - `title?`: tooltip
1433
+ - `children?`: een string of JSX-element die werkt als label van de radio
1434
+ - `disabled?`: is dit item disabled of niet?
1435
+ - `id?`: een id voor de radio-input
1436
+
1437
+ Er zijn nu sizes (`s`, `m` (default), `l` en `xl`) en colors (`l` (default), `w`, `d`, `s`, `i`, `p`).
1438
+ Deze zijn in te stellen met de `size` en de `color` prop.
1439
+
1440
+ Ook is er een `styling`-prop. Met deze kan je wat styling aanpassen
1441
+
1442
+ - `noborder`: de randen van de checkbox zijn onzichtbaar
1443
+ - `colored`: de checkbox zelf heeft de achtergrondkleur uit de `color`-prop
1444
+ - `blocky`: de checkbox EN het label hebben dezelfde achtergrondkleur
1445
+ - `rounded`: afgeronde hoeken in plaats van vierkante hoeken op de checkbox.
1446
+
1447
+ > **Raar:**
1448
+ > 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.
1449
+
1450
+ ```tsx
1451
+ <>
1452
+ <RadioGroup name="radio-1" onValueChanged={(v) => console.log('woohoo!', v)}>
1453
+ <RadioGroup.Item value="Ein">Ein</RadioGroup.Item>
1454
+ <RadioGroup.Item value="Zwei" styling="noborder">
1455
+ Zwei
1456
+ </RadioGroup.Item>
1457
+ <RadioGroup.Item value="Polizei" color="l" size="xl">
1458
+ <span>Polizei!</span>
1459
+ </RadioGroup.Item>
1460
+ <RadioGroup.Item value="Drei">Drei</RadioGroup.Item>
1461
+ <RadioGroup.Item value="4">Vier</RadioGroup.Item>
1462
+ <RadioGroup.Item disabled value="Offizier">
1463
+ Offizier!
1464
+ </RadioGroup.Item>
1465
+ </RadioGroup>
1466
+ </>
1467
+ ```
1468
+
1469
+ RadioButtons kunnen ook alleenstaand gebruikt worden. Deze component heet `<Radio>`. Deze component heeft dezelfde props als de `<RadioGroup.Item>`-component en nog drie extra.
1470
+
1471
+ - `setter: (val: string) => void`: function om de waarde te setten, met `React.useState()`
1472
+ - `selectedItem?`: het geselecteerde Radio-item
1473
+ - `name`: in plaats van de groep, moet je zelf de name van de radio-input opgeven
1474
+
1475
+ ```tsx
1476
+ const [radio, setRadio] = React.useState('Sieben');
1477
+
1478
+ <>
1479
+ <Radio selectedItem={radio} value="Fünf" name="radio-2" setter={setRadio} color="d"/>
1480
+ <Radio selectedItem={radio} value="Sechs" name="radio-2" setter={setRadio} disabled size="xl"/>
1481
+ <Radio selectedItem={radio} value="Alte Hex" name="radio-2" setter={setRadio} styling="noborder"/>
1482
+ <Radio selectedItem={radio} value="Sieben" name="radio-2" setter={setRadio} />
1483
+ <Radio selectedItem={radio} value="Acht" name="radio-2" setter={setRadio} />
1484
+ <Radio selectedItem={radio} value="Gute Nacht" name="radio-2" setter={setRadio}>
1485
+ Good Night!
1486
+ </Radio>
1487
+ <>
1488
+ ```
1489
+
1490
+ #### Ranges <a id="form-ranges"></a>
1268
1491
 
1269
- 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_.
1492
+ 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_.
1270
1493
 
1271
1494
  Als er in het validatie geen minimale of maximale waarde te vinden is, worden standaard `0` en `100` gebruikt.
1272
1495
 
@@ -1277,7 +1500,7 @@ Als er in het validatie geen minimale of maximale waarde te vinden is, worden st
1277
1500
  </div>
1278
1501
  ```
1279
1502
 
1280
- ### Select <a id="form-select"></a>
1503
+ #### Select <a id="form-select"></a>
1281
1504
 
1282
1505
  Een select is een lijstje met opties waaruit je er een kan selecteren. De opties van een select kunnen uit 3 types bestaan:
1283
1506
 
@@ -1286,8 +1509,6 @@ Een select is een lijstje met opties waaruit je er een kan selecteren. De opties
1286
1509
  - **SelectOptionGroupType[]:** een gegroupeerde option array voor `<optgroup>` tags. Kan daardoor ook disablen.
1287
1510
  Om meerdere values te selecteren in een select, kan je een [MultiSelect](#form-multiselect) gebruiken.
1288
1511
 
1289
- ##### een select met string[]
1290
-
1291
1512
  ```tsx
1292
1513
  <div>
1293
1514
  {/* Een select met string-options, deze options zijn de value EN de tekst */}
@@ -1323,7 +1544,7 @@ Een select is een lijstje met opties waaruit je er een kan selecteren. De opties
1323
1544
  </div>
1324
1545
  ```
1325
1546
 
1326
- ### Multi Select <a id="form-multiselect"> </a>
1547
+ #### Multi Select <a id="form-multiselect"> </a>
1327
1548
 
1328
1549
  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`.
1329
1550
 
@@ -1390,11 +1611,11 @@ Een Multiselect werkt bijna hetzelfde als een select. Dezelfde type options word
1390
1611
  </div>
1391
1612
  ```
1392
1613
 
1393
- ### Validatie <a id="form-validatie"></a>
1614
+ #### Validatie <a id="form-validatie"></a>
1394
1615
 
1395
1616
  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.
1396
1617
 
1397
- ##### Validatie-Type
1618
+ ###### Validatie-Type
1398
1619
 
1399
1620
  ```ts
1400
1621
  export type FormValidatie = {
@@ -1417,7 +1638,7 @@ export type FormValidatie = {
1417
1638
  - `pattern`: voor tekst-inputs: voldoet de waarde aan deze regex. In EmailInput overschrijft deze de default e-mail-validatie regex.
1418
1639
  - `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.
1419
1640
 
1420
- ### Form <a id="form-form"></a>
1641
+ #### Form <a id="form-form"></a>
1421
1642
 
1422
1643
  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).
1423
1644
 
@@ -1435,6 +1656,7 @@ De `<Form>`-component is een wrapper voor een gewone `<form>`-tag. Hij bevat (al
1435
1656
  - `<Form.Select>`: een input met type `select`, zelfde als `<Select>`.
1436
1657
  - `<Form.MultiSelect>`: een input met type `select`, zelfde als `<MultiSelect>`.
1437
1658
  - `<Form.Checkbox>`: een input met type `checkbox`, zelfde als `<Checkbox>`.
1659
+ - `<Form.RadioGroup>`: een input met type `radio`, zelfde als `<RadioGroup>`.
1438
1660
  - `<Form.Date>`: een input met type `date`, zelfde als `<DateInput>`.
1439
1661
  - `<Form.Time>`: een input met type `time`, zelfde als `<TimeInput>`.
1440
1662
  - `<Form.DateTime>`: een input met type `datetime-local`, zelfde als `<DateTimeInput>`.
@@ -1443,12 +1665,10 @@ De `<Form>`-component is een wrapper voor een gewone `<form>`-tag. Hij bevat (al
1443
1665
 
1444
1666
  ##### Andere componenten binnen `<Form>`
1445
1667
 
1446
- - `<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.
1668
+ - `<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.
1447
1669
  - `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.
1448
1670
  - `<Form.Buttons`: een container voor de buttons. Werkt hetzelfde als `<ButtonGroup>`. Voor bijvoorbeeld de submit-button voor een form.
1449
1671
 
1450
- ##### Voorbeeld
1451
-
1452
1672
  ```tsx
1453
1673
  <>
1454
1674
  <Form direction={direction} size={size}>
@@ -1476,7 +1696,7 @@ De `<Form>`-component is een wrapper voor een gewone `<form>`-tag. Hij bevat (al
1476
1696
  </>
1477
1697
  ```
1478
1698
 
1479
- ### Form-Builder <a id="form-component"></a>
1699
+ #### Form-Builder <a id="form-component"></a>
1480
1700
 
1481
1701
  Een **Form** is ook beschikbaar als component. Om te werken heeft die nodig:
1482
1702
 
@@ -1510,7 +1730,7 @@ Het resultaat van deze form komt via de `onSubmit()` methode naar buiten. Als de
1510
1730
  </div>
1511
1731
  ```
1512
1732
 
1513
- ##### Resultaat van `method="post"` en `method="get"`
1733
+ ###### Resultaat van `method="post"` en `method="get"`
1514
1734
 
1515
1735
  ```ts
1516
1736
  // post
@@ -1525,6 +1745,168 @@ Het resultaat van deze form komt via de `onSubmit()` methode naar buiten. Als de
1525
1745
  ('Token=Bazinga%21&Naam=Brad+Wurst&Email=brad%40wurst.com&Wachtwoord=123123&Leeftijd=31');
1526
1746
  ```
1527
1747
 
1748
+ ## Hooks <a id="hooks"></a>
1749
+
1750
+ - [Hooks](#hooks)
1751
+ - [useClipboard](#hooks-use-clipboard)
1752
+ - [useDebouncedValue](#hooks-use-debounced-value)
1753
+ - [useHotkeys](#hooks-use-hotkeys)
1754
+ - [useToggle & useBoolToggle](#hooks-use-toggle)
1755
+ - [Publiceren](#publiceren)
1756
+
1757
+ Er zijn een paar hooks in deze library. Geen idee of deze hooks nuttig zijn, maar je kan ze gebruiken.
1758
+
1759
+ #### useClipboard <a id="hooks-use-clipboard"></a>
1760
+
1761
+ 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:
1762
+
1763
+ - `copy`: een function om een waarde te kopiëren naar het clipboard
1764
+ - `copied`: een boolean die `true` is als een waarde minder dan de timeout (default 2000ms) geleden gekopieerd is
1765
+ - `reset`: een function om de timout te 'clearen' en `copied` te resetten
1766
+ - `error`: bevat een `Error` object als er iets is fout gegaan
1767
+
1768
+ ```tsx
1769
+ function UseClipboardExample(props: {}) {
1770
+ const clipboard = useClipboard({timeout: 500});
1771
+
1772
+ const handleClick = () => {
1773
+ clipboard.copy('Hello World!');
1774
+ if(clipboard.error) console.error('error on copying', clipboard.error);
1775
+
1776
+ clipboard.reset();
1777
+ }
1778
+
1779
+ return <Button onClick={handleClick}>
1780
+ {clipboard.copied ? 'Paste it somewhere' ? 'Copy something'}
1781
+ </Button>
1782
+
1783
+ }
1784
+ ```
1785
+
1786
+ #### useDebouncedValue <a id="hooks-use-debounced-value"></a>
1787
+
1788
+ 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.
1789
+
1790
+ De parameters zijn:
1791
+
1792
+ - `value`: de bronwaarde die vertraagd bijgewerkt moet worden.
1793
+ - `options`: opties voor de hook. Op dit moment zijn dat deze defaults:
1794
+
1795
+ ```ts
1796
+ options: useDebounceHookOptions = {
1797
+ leading: true,
1798
+ delay: 500,
1799
+ };
1800
+ ```
1801
+
1802
+ Deze hook geeft een tuple (net zoals bij `React.useState()`) met 2 objecten terug:
1803
+
1804
+ - `debounced`, type `T` de waarde voor NA het debouncen
1805
+ - `cancel`, type `() => void` de functie om de debouncen te stoppen. De waarde van `debounced` wordt dan niet geupdate.
1806
+
1807
+ > De `useDebounce()`-hook kan optioneel een type meekrijgen voor de waarde van `debounced`. Dit is optioneel
1808
+
1809
+ ```tsx
1810
+ function UseDebouncedValueDemo() {
1811
+ const [value, setValue] = useState('');
1812
+ const [debounced, cancel] = useDebouncedValue<string>(value, { delay: 2000 });
1813
+
1814
+ return (
1815
+ <>
1816
+ <Input
1817
+ label="debounce value"
1818
+ name="debouncevalue"
1819
+ value={value}
1820
+ onChange={(e) => setValue(e.currentTarget.value)}
1821
+ />
1822
+ <Button onClick={cancel} size="lg" style={{ marginLeft: 15 }}>
1823
+ Cancel
1824
+ </Button>
1825
+
1826
+ <p>Value: {value}</p>
1827
+ <p>Debounced value: {debounced}</p>
1828
+ </>
1829
+ );
1830
+ }
1831
+ ```
1832
+
1833
+ #### useHotkeys <a id="hooks-use-hotkeys"></a>
1834
+
1835
+ 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.
1836
+
1837
+ `useHotkeys()` heeft 1 parameters. Deze bestaat uit een array van toets-combinaties en handler-tuples (zie `HotkeyItem`). Deze tuples bestaan uit 2 delen:
1838
+
1839
+ - `hotkey`: hotkey-string, als `ctrl+E`, `shift+alt+L`, `mod+S`
1840
+ - `handler` functie die aangeroepen moet worden als de keys zijn gebruikt.
1841
+
1842
+ > **Formats voor de hotkeys**
1843
+ >
1844
+ > - `mod+S`: op macOS Cmd+S, op Windows Ctrl+S
1845
+ > - `ctrl+shift+X`: meerdere modifiers
1846
+ > - `ctrl + shift + X + Y`: spaties zijn toegestaan
1847
+ > - `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>)
1848
+
1849
+ ##### hotkeys op een ander element
1850
+
1851
+ 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.
1852
+
1853
+ ```tsx
1854
+ function HotkeysExample() {
1855
+ // useHotkeys alleen op het document-element
1856
+ useHotkeys([
1857
+ ['mod+J', () => console.log('Toggle color scheme')],
1858
+ ['ctrl+K', () => console.log('Trigger search')],
1859
+ ['alt+mod+shift+X', () => console.log('Rick roll')],
1860
+ ]);
1861
+
1862
+ // met getHotkeyHandler kunnen hotkeys op een specifiek element gezet worden
1863
+ return (
1864
+ <TextInput
1865
+ placeholder="Your message"
1866
+ label="Press ⌘+Enter or Ctrl+Enter when input has focus to send message"
1867
+ value={value}
1868
+ onChange={(event) => setValue(event.target.value)}
1869
+ onKeyDown={getHotkeyHandler([
1870
+ ['mod+Enter', () => console.log('submit')],
1871
+ ['mod+S', () => console.log('save')],
1872
+ ])}
1873
+ />
1874
+ );
1875
+ }
1876
+ ```
1877
+
1878
+ #### useToggle & useBoolToggle <a id="hooks-use-toggle"></a>
1879
+
1880
+ 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.
1881
+
1882
+ de parameters voor de `useToggle()`-hook zijn:
1883
+
1884
+ - `initialState`: type `T`: de beginwaarde van de toggle
1885
+ - `options`: type `[T, T]`: de waarden waartussen getoggled wordt.
1886
+
1887
+ Bij de `useBoolToggle()`-hook is er maar 1 _optionele_ parameter:`initialValue`. Deze is default `false`.
1888
+
1889
+ Van beide hooks wordt een tuple (net als `React.useState()`) returned met 2 objecten:
1890
+
1891
+ - `state`: de huidige status van de toggle
1892
+ - `toggle()`: een functie om te togglen.
1893
+
1894
+ bij de `toggle()` function is het mogelijk om een bepaalde status te forceren, door de waarde als parameter mee te geven.
1895
+
1896
+ ```tsx
1897
+ function ToggleDemo() {
1898
+ const [isVisible, toggleVisible] = useBoolToggle(); // start op isVisible = false
1899
+ const [color, toggleColor] = useToggle('red', ['red', 'blue']); // start op color = red, toggle tussen red & blue
1900
+ const [dier, toggleDier] = useToggle<Dier>(krokodil, [krokodil, alligator]]); // toggle met Type
1901
+
1902
+ return <>
1903
+ <Button.Primary onClick={() => toggleVsible()}>Visible</Button.Primary>
1904
+ <Button.Primary onClick={() => toggleColor()}>Color</Button.Primary>
1905
+ <Button.Primary onClick={() => toggleDier()}>Dier</Button.Primary>
1906
+ </>
1907
+ }
1908
+ ```
1909
+
1528
1910
  ## Publiceren <a id="publiceren"></a>
1529
1911
 
1530
1912
  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