loon-bulma-react 2022.2.4 → 2022.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +351 -206
  2. package/dist/components/Button/Button.d.ts +25 -52
  3. package/dist/components/Button/ButtonBase.d.ts +8 -18
  4. package/dist/components/Button/ButtonProps.d.ts +29 -2
  5. package/dist/components/Button/InvertedButton.d.ts +6 -6
  6. package/dist/components/Button/LightButton.d.ts +6 -6
  7. package/dist/components/Button/LightOutlinedButton.d.ts +6 -6
  8. package/dist/components/Button/OutlinedButton.d.ts +6 -6
  9. package/dist/components/Button/index.d.ts +2 -0
  10. package/dist/components/ButtonGroup/ButtonGroup.d.ts +10 -3
  11. package/dist/components/Calendar/CalendarItems/AlldayEvent.d.ts +2 -4
  12. package/dist/components/Calendar/CalendarItems/Event.d.ts +17 -0
  13. package/dist/components/Calendar/CalendarItems/InvertedEvent.d.ts +17 -0
  14. package/dist/components/Calendar/CalendarItems/MoreEvents.d.ts +0 -3
  15. package/dist/components/Calendar/CalendarItems/TimedEvent.d.ts +2 -4
  16. package/dist/components/Calendar/CalendarItems/utils.d.ts +0 -8
  17. package/dist/components/Calendar/Events/Event.d.ts +16 -0
  18. package/dist/components/Calendar/Events/InvertedEvent.d.ts +16 -0
  19. package/dist/components/Calendar/Month/DayContainer.d.ts +1 -5
  20. package/dist/components/Calendar/Month/MonthView.d.ts +22 -0
  21. package/dist/components/Calendar/Month/MoreEvents.d.ts +18 -0
  22. package/dist/components/Calendar/Props.d.ts +4 -3
  23. package/dist/components/Calendar/Week/AlldayContainer.d.ts +14 -0
  24. package/dist/components/Calendar/Week/DateContainer.d.ts +20 -0
  25. package/dist/components/Calendar/Week/DayContainer.d.ts +22 -0
  26. package/dist/components/Calendar/Week/HourRow.d.ts +16 -0
  27. package/dist/components/Calendar/Week/TimedContainer.d.ts +15 -0
  28. package/dist/components/Calendar/Week/WeekView.d.ts +22 -0
  29. package/dist/components/Calendar/Week/containers.d.ts +22 -0
  30. package/dist/components/Calendar/base-styles.d.ts +27 -0
  31. package/dist/components/Calendar/date-utils.d.ts +59 -2
  32. package/dist/components/Calendar/index.d.ts +8 -3
  33. package/dist/components/DataTable/DataTable.d.ts +2 -1
  34. package/dist/components/Form/BaseInputProps.d.ts +3 -0
  35. package/dist/components/Form/Checkbox/Checkbox.d.ts +19 -0
  36. package/dist/components/Form/Datetimes/DateInput.d.ts +23 -0
  37. package/dist/components/Form/Datetimes/DateTimeInput.d.ts +22 -0
  38. package/dist/components/Form/Datetimes/TimeInput.d.ts +25 -0
  39. package/dist/components/Form/Numeric/MultiRangeInput.d.ts +23 -0
  40. package/dist/components/Form/Numeric/NumberInput.d.ts +26 -0
  41. package/dist/components/Form/Numeric/RangeInput.d.ts +24 -0
  42. package/dist/components/Form/Others/ColorInput.d.ts +24 -0
  43. package/dist/components/Form/Others/HiddenInput.d.ts +21 -0
  44. package/dist/components/Form/Selects/BaseSelectProps.d.ts +21 -0
  45. package/dist/components/Form/Selects/MultiSelect.d.ts +33 -0
  46. package/dist/components/Form/Selects/Select.d.ts +30 -0
  47. package/dist/components/Form/Text/EmailInput.d.ts +27 -0
  48. package/dist/components/Form/Text/PasswordInput.d.ts +27 -0
  49. package/dist/components/Form/Text/TextArea.d.ts +23 -0
  50. package/dist/components/Form/Text/TextInput.d.ts +27 -0
  51. package/dist/components/Icon/Icon.d.ts +6 -4
  52. package/dist/components/Layout/AspectRatio/AspectRatio.d.ts +4 -2
  53. package/dist/components/Layout/Box/Box.d.ts +4 -2
  54. package/dist/components/Layout/Columns/Column.d.ts +74 -13
  55. package/dist/components/Layout/Columns/ColumnProps.d.ts +1 -3
  56. package/dist/components/Layout/Columns/Columns.d.ts +3 -1
  57. package/dist/components/Layout/Columns/index.d.ts +1 -5
  58. package/dist/components/Layout/Container/Container.d.ts +37 -29
  59. package/dist/components/Layout/Content/Content.d.ts +1 -0
  60. package/dist/components/Layout/Footer/Footer.d.ts +4 -0
  61. package/dist/components/Layout/Hero/Hero.d.ts +72 -3
  62. package/dist/components/Layout/Image/Image.d.ts +4 -2
  63. package/dist/components/Layout/ScrollArea/ScrollArea.d.ts +57 -56
  64. package/dist/components/Layout/Section/Section.d.ts +1 -1
  65. package/dist/components/Link/Link.d.ts +6 -4
  66. package/dist/components/Menu/Menu.d.ts +43 -29
  67. package/dist/components/Message/Message.d.ts +25 -46
  68. package/dist/components/Modal/Modal.d.ts +28 -9
  69. package/dist/components/Notification/Notification.d.ts +34 -44
  70. package/dist/components/Panel/Panel.d.ts +23 -0
  71. package/dist/components/ProgressBar/ProgressBar.d.ts +4 -2
  72. package/dist/components/SimpleTable/SimpleTable.d.ts +51 -0
  73. package/dist/components/SimpleTable/SimpleTableProps.d.ts +52 -0
  74. package/dist/components/TabBar/TabBar.d.ts +32 -0
  75. package/dist/components/Table/SimpleTable.d.ts +8 -0
  76. package/dist/components/Table/SimpleTableProps.d.ts +52 -0
  77. package/dist/components/Table/Table.d.ts +42 -5
  78. package/dist/components/Tabs/Tabs.d.ts +16 -22
  79. package/dist/components/Tag/Tag.d.ts +3 -3
  80. package/dist/components/Titles/Titles.d.ts +36 -5
  81. package/dist/components/Toggle/Toggle.d.ts +20 -0
  82. package/dist/components/Toggle/ToggleBar.d.ts +20 -0
  83. package/dist/components/ToggleBar/ItemToggleBar.d.ts +43 -0
  84. package/dist/components/ToggleBar/ToggleBar.d.ts +61 -0
  85. package/dist/contexts/Notifier/NotifierProps.d.ts +2 -1
  86. package/dist/dev-warning-fn.d.ts +5 -0
  87. package/dist/index.d.ts +75 -54
  88. package/dist/index.js +1961 -1730
  89. package/dist/index.js.map +1 -1
  90. package/dist/index.modern.js +1955 -1720
  91. package/dist/index.modern.js.map +1 -1
  92. package/dist/loon-react-bulma-types.d.ts +6 -0
  93. package/dist/utils/JSDate.class.d.ts +37 -0
  94. package/dist/utils/date-utils.d.ts +224 -0
  95. package/dist/utils/warn-dev-util.d.ts +5 -0
  96. package/example/README.md +5 -0
  97. package/example/package.json +43 -0
  98. package/example/public/favicon.ico +0 -0
  99. package/example/public/index.css +0 -0
  100. package/example/public/index.html +45 -0
  101. package/example/public/manifest.json +15 -0
  102. package/example/src/App.tsx +48 -0
  103. package/example/src/AppHero.tsx +70 -0
  104. package/example/src/MOCK_DATA.ts +10014 -0
  105. package/example/src/Tabs/AspectRatioTab.tsx +279 -0
  106. package/example/src/Tabs/CalendarTab.tsx +172 -0
  107. package/example/src/Tabs/DataTableTab.tsx +106 -0
  108. package/example/src/Tabs/NotificationTab.tsx +78 -0
  109. package/example/src/Tabs/TitleFormsButtonsTab.tsx +1265 -0
  110. package/example/src/Tabs/datatable.css +7 -0
  111. package/example/src/date-utils.ts +275 -0
  112. package/example/src/index.tsx +5 -0
  113. package/example/src/react-app-env.d.ts +1 -0
  114. package/example/src/setupTests.ts +5 -0
  115. package/example/tsconfig.json +31 -0
  116. package/package.json +29 -22
  117. package/styles/bulma-notification-generator.scss +18 -6
  118. package/styles/custom-bulma.scss +4 -0
  119. package/styles/variables.scss +1 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # loon-bulma-react
2
2
 
3
- [Bulma](https://bulma.io/) & [React](https://reactjs.org/) componenten voor Loon Salarissoftware.
3
+ ## [Bulma](https://bulma.io/) & [React](https://reactjs.org/) componenten voor Loon Salarissoftware.
4
4
 
5
5
  - [Installatie](#installatie)
6
6
  - [Gebruik](#gebruik)
@@ -25,14 +25,15 @@
25
25
  - [Footer](#component-footer)
26
26
  - [Icons (FontAwesome)](#component-icons)
27
27
  - [Link & LinkButon](#component-linkbutton)
28
- - [Menu](#component-menu)
28
+ - [Menu](#component-menu-2)
29
29
  - [Messages & Notificaties](#component-messages)
30
30
  - [Modal](#component-modal)
31
31
  - [ProgressBars](#component-progressbar)
32
- - [Table](#component-table)
33
- - [Tabs](#component-tabs)
34
- - [Tag](#component-tags)
32
+ - [TabBar](#component-tabbar) (Nieuw, ipv Tabs)
33
+ - [SimpleTable](#component-simpletable) (Voorheen Table)
34
+ - [Tag & Tags](#component-tags)
35
35
  - [Titles & Subtitles](#component-titles)
36
+ - [ToggleBar](#component-toggles)
36
37
  - [Form & Inputs](#form)
37
38
  - [Input Types](#form-input)
38
39
  - TextInput
@@ -69,7 +70,7 @@ npm install --save bulma
69
70
 
70
71
  ### Voor een versie die hoort bij een bepaald jaar (Bijvoorbeeld in Loon-2021).
71
72
 
72
- Het jaar wordt bepaald door tags: voor elk jaar is er een tag van de vorm `y[jaar]`. Dat is omdat alleen een jaartal geen geldige tag is.
73
+ Het jaar wordt bepaald door tags: voor elk jaar is er een tag van de vorm `y[jaar]`. De 'y' is nodig omdat alleen een jaartal geen geldige tag is.
73
74
 
74
75
  ```bash
75
76
  npm install --save loon-bulma-react@y2021
@@ -122,6 +123,10 @@ function MyComponent(props) {
122
123
  }
123
124
  ```
124
125
 
126
+ > ### Bulma-dingetje
127
+ >
128
+ > Er is een ding in Bulma dat hier anders gaat dan in Bulma. Voor de `SizeProp`maken wij gebruik van s, m, l en xl. In Bulma bestaan deze sizes deels, maar heten ze small, normal / default, medium en large. Daarom komt het voor dat een size='xl' als class een 'large' krijgt en een size='l' als class 'medium'.
129
+
125
130
  ## Notifier <a id="notifier"></a>
126
131
 
127
132
  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.
@@ -231,32 +236,41 @@ Als je liever geen component gebruikt, maar een `<div>` de class `bulma-box` gee
231
236
 
232
237
  ### Columns <a id="layout-columns"></a>
233
238
 
234
- Columns worden gebruikt voor het verdelen van een (deel van het) scherm in kolommen. Columns kunnen ook genest worden. Elke **Column** moet direct in een **Columns** element zitten om te werken. Voor de kolommen zijn er verschillende maten:
239
+ 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:
235
240
 
236
241
  - Default:
237
242
  - alle kolommen zijn even groot OF
238
- - met _isNarrow:true_ deze kolom neemt zo min mogelijk ruimte in, de rest vult de overige ruimte op.
243
+ - met de prop `_isNarrow: true_` deze kolom neemt zo min mogelijk ruimte in, de rest vult de overige ruimte op.
239
244
  - Verdelen in stukken
240
- - van 2 (Half),
241
- - van 3 (Thirds),
242
- - van 4 (Quarters),
243
- - van 5 (Fifths)
244
- - van 12 (Is1, Is2, ..., Is12)
245
+ - volledige breedte (Full) `<Column.Full>`
246
+ - van 2 (Half), `<Column.Half>`
247
+ - van 3 (Thirds), `<Column.Thirds.One>`
248
+ - van 4 (Quarters),`<Column.Quarters.Two>`
249
+ - van 5 (Fifths) `<Column.Fifths.Three>`
250
+ - van 12 (Twelves) `<Column.Twelves.One>`, `<Column.Twelves.Seven>`
251
+
252
+ Als maar **één** van de kolommen een size-modifier heeft (bijvoorbeeld `<Column.Twelves.Seven>`) en andere kolommen zijn gewone `<Column>` elementen, dan nemen deze kolommen de overige ruimte in **nadat** de `is-7` kolom zijn ruimte heeft ingenomen.
245
253
 
246
254
  ```tsx
247
255
  <div>
248
- <Columns>
249
- <Column.Default isNarrow={true}>
250
- Menu or something
251
- </Column.Default>
252
- <Column.Default>
253
- <Columns>
254
- <Column.OneQuarter>Column 1/4</Column.OneQuarter>
255
- <Column.Half>Column 1/2</Column.Half>
256
- <Column.OneQuarter>Column 1/4</Column.OneQuarter>
257
- </Columns>
258
- </Column.Default>
259
- </Coumns>
256
+ <Columns>
257
+ <Column isNarrow>Menu or something</Column>
258
+ <Column>
259
+ <Columns>
260
+ <Column.Quarters.One>Column 1/4</Column.Quarters.One>
261
+ <Column.Half>Column 1/2</Column.Half>
262
+ <Column.Quarters.One>Column 1/4</Column.Quarters.One>
263
+ </Columns>
264
+ </Column.Default>
265
+ </Columns>
266
+
267
+ <Columns>
268
+ <Column.Twelves.Seven>Takes up 7/12th of width </Column.Twelves.Seven>
269
+ {/* These columns take 5/12th of the available rest-space */}
270
+ <Column></Column>
271
+ <Column></Column>
272
+ </Columns>
273
+
260
274
  </div>
261
275
  ```
262
276
 
@@ -317,53 +331,58 @@ Deze markers zijn beschikbaar:
317
331
  ### Hero <a id="layout-hero"></a>
318
332
 
319
333
  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.
320
- Een hero bevat een optionele array van top-items:
334
+ Een hero bevat optionele items aan de bovenkant (`Head`) of de onderkant (`Foot`).
321
335
 
322
- ```ts
323
- const headItems = [
324
- {
325
- txt: 'Bulma',
326
- action: (e: any) => console.log('Bulma', e),
327
- tooltip: 'Bulma website',
328
- },
329
- {
330
- txt: 'React',
331
- action: (e: any) => console.log('React', e),
332
- tooltip: 'React website',
333
- },
334
- {
335
- txt: 'NodeJS',
336
- action: (e: any) => console.log('NodeJS', e),
337
- tooltip: 'NodeJS website',
338
- },
339
- ];
336
+ - `Head`: `<Hero.Head>`
337
+ - `<Hero.Head.Button>`: een Button aan de bovenkant van de hero
338
+ - `<Hero.Head.Link>`: een Link aan de bovenkant van de hero
339
+ - `Foot`: `<Hero.Foot>`
340
+ - `<Hero.Foot.NavList>`: Navigation item list (`<ul>`)
341
+ - `<Hero.Foot.NavItem>` Navigation items (`<li classname={isActive ...>}><a href="...">LINK</a></li>)
342
+
343
+ ```tsx
344
+ <Hero heroColorFor="werknemer" size="s">
345
+ <Hero.Head>
346
+ <Hero.Head.Button onClick={() => clear()}>Clear</Hero.Head.Button>
347
+ <Hero.Head.Link to="https://www.bulma.io">Bulma</Hero.Head.Link>
348
+ <Hero.Head.Link to="https://www.reactjs.org">ReactJS</Hero.Head.Link>
349
+ </Hero.Head>
350
+
351
+ <Hero.Body>
352
+ <Title>Hero with a title</Title>
353
+ <Subtitle>And also a TitleWithSubtitleProps</Subtitle>
354
+ </Hero.Body>
355
+
356
+ <Hero.Foot>
357
+ <Hero.Foot.NavList>
358
+ <Hero.Foot.NavItem to="/" active>
359
+ Home
360
+ </Hero.Foot.NavItem>
361
+ <Hero.Foot.NavItem to="https://www.bulma.com">Bulma.io</Hero.Foot.NavItem>
362
+ <Hero.Foot.NavItem to="https://www.remix.run">Remix.run</Hero.Foot.NavItem>
363
+ </Hero.Foot.NavList>
364
+ </Hero.Foot>
365
+ </Hero>
340
366
  ```
341
367
 
342
- Voor de navigatie-tabs kunnen 2 dingen worden opgegeven: een JSX.Element dat begint met een unordered-list-tag of een array van **HeroNavigationItem**.
368
+ De navigatie kan op 2 manieren worden gemaakt:
343
369
 
344
370
  ```tsx
345
- const navItems = [
346
- { txt:'Home', target:'/', active: true },
347
- { txt:'About', target:'http://www.duckduckgo.com', active: false },
348
- { txt:'Extras', target:'http://www.troos.nl', active: false },
349
- { txt:'Settings', target:'http://www.kanikeenkortebroekaan.nl', active: false }
350
- ]
371
+ <Hero.Foot>
372
+ <Hero.Foot.NavList>
373
+ <Hero.Foot.NavItem to="/" active> Home </Hero.Foot.NavItem>
374
+ <Hero.Foot.NavItem to="/About">About</Hero.Foot.NavItem>
375
+ <Hero.Foot.NavItem to="/Extras">Extras</Hero.Foot.NavItem>
376
+ </Hero.Foot.NavList>
377
+ </Hero.Foot>
351
378
  // of
352
- const navItems = (
379
+ <Hero.Foot>
353
380
  <ul>
354
- <li className="is-active"><a href="#">Home</a>
355
- <li><a href="#">About</a>
356
- <li><a href="#">Extras</a>
381
+ <li className="is-active"><a href="/">Home</a></li>
382
+ <li><a href="#">About</a></li>
383
+ <li><a href="#">Extras</a></li>s
357
384
  </ul>
358
- );
359
- ```
360
-
361
- De hero wordt dan zo gebruikt:
362
-
363
- ```tsx
364
- <div>
365
- <Hero title="Hero title" subtitle="Hero subtitle" headItems={headitems} navItems={navItems} />
366
- </div>
385
+ </Hero.Foot>
367
386
  ```
368
387
 
369
388
  ### Image <a id="layout-image"></a>
@@ -427,19 +446,29 @@ Een ScrollArea is een horizontaal of verticaal scrollbare `<div>` met flexbox-ei
427
446
 
428
447
  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_
429
448
 
430
- - **Bttn**: een default button (met instelbare `color`-props)
431
- - **Button**: default bulma button style
432
- - **LightButton**: light bulma button style
433
- - **LightOutlinedButton** light & outlined combi button style.
434
- - **InvertedButton**: inverted bulma button style
435
- - **OutlinedButton**: outlined bulma button style
449
+ - _**Bttn**: een default button (met instelbare `color`-props) -> bestaat niett meer_
450
+ - **Button**: Voorheen `Bttn`
451
+ - `<Button.Primary>` Een button in de primary kleur
452
+ - `<Button.Success>` Een button in de success kleur
453
+ - `<Button.Danger>` Een button in de danger kleur
454
+ - `<Button.Warning>` Een button in de warning kleur
455
+ - `<Button.Info>` Een button in de info kleur
456
+ - `<Button.Link>` Een button in de link kleur
436
457
 
437
- 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
458
+ De Light, Outlined, LightOutlined en Inverted versies van deze buttons zijn te maken door de `styling`-prop een van deze waardes te geven:
438
459
 
439
- - de class-string op te geven, dus `'fas fa-horse-head'`.
440
- - door het object dat mbv React-FontAwsome wordt gemaakt als waarde door te geven.
460
+ - Light: `"light"` | `"l"`
461
+ - Inverted: `"inverted"` | `"i"`
462
+ - Outlined: `"outlined"` | `"o"`
463
+ - LightOutlined: `"light-outlined"` | `"lo"`
464
+ - default: `"default"` | `undefined`
441
465
 
442
- Door geen tekst toe te voegen aan de children-prop in de Button, kan een button met alleen een icon worden gemaakt.
466
+ > ### deprecated
467
+ >
468
+ > 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
469
+ >
470
+ > - de class-string op te geven, dus `'fas fa-horse-head'`.
471
+ > - door het object dat mbv React-FontAwsome wordt gemaakt als waarde door te geven.
443
472
 
444
473
  De `ButtonGroup`-component kan gebruikt worden om buttons te grouperen en de grootte voor buttons in te stellen.
445
474
 
@@ -447,16 +476,18 @@ De `ButtonGroup`-component kan gebruikt worden om buttons te grouperen en de gro
447
476
  import { ButtonGroup, Bttn, Button, LightButton, InvertedButton, OutlinedButton } from 'loon-bulma-react';
448
477
 
449
478
  <ButtonGroup>
450
- <Bttn>click me</Bttn>
451
- <Bttn color="p">click me</Bttn>
452
- <Bttn color="s">click me</Bttn>
479
+ <Button>click me</Button>
480
+ <Button color="p">click me</Button>
481
+ <Button color="s">click me</Button>
453
482
 
454
- <Button.Primary>click me</Button.Primary>
483
+ <Button.Primary rounded>click me</Button.Primary>
455
484
  <Button.Warning>click me</Button.Warning>
456
- <LightButton.Success>click me</LightButton.Success>
457
- <LightOutlinedButton.Link>click me</LightOutlinedButton.Link>
458
- <OutlinedButton.Info>click me</OutlinedButton.Info>
459
- <InvertedButton.Danger>click me</InvertedButton.Danger>
485
+ <Button.Success>click me</Button.Success>
486
+ <Button.Link styling="inverted">click me</Button.Link>
487
+ <Button.Info styling="i">click me</Button.Info>
488
+ <Button.Danger styling="light">click me</Button.Danger>
489
+ <button>click me</buton> <!-- renders normally-->
490
+ <span>click me</span> <!-- Does not render and warns in console-->
460
491
  </ButtonGroup>;
461
492
  ```
462
493
 
@@ -677,34 +708,37 @@ Een footer staat meestal onderaan de pagina. Er zit een container in die default
677
708
 
678
709
  ### Icons (Font Awesome) <a id="component-icons"></a>
679
710
 
680
- Icons kunnen gebruikt worden als content op buttons of voor andere dingen. Icons gebruiken de font-awesome icons.
711
+ 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.
681
712
 
682
713
  ##### Voorbeeld voor op een [Button](#component-button)
683
714
 
684
- Op een button wordt automatisch alles aangepast aan het font en de button zelf. Geef daar dan **GEEN** andere properties op.Een tekst kan het beste in een `<span>` worden geplaatst, dan lijnt het netter uit.
715
+ Op een button wordt automatisch alles aangepast aan het font en de button zelf.
685
716
 
686
717
  ```tsx
687
718
  <div>
688
719
  <Button.Primary>
689
- <Icon faIcon={faHome}>
690
- <span>Terug naar Home</span>
720
+ <Icon icon={faHome}>
721
+ Terug naar Home
691
722
  </Button.Primary>
723
+ <LightButton.Danger>
724
+ <icon faIcon="fas fa-trash">
725
+ </LightButton.Danger>
692
726
  </div>
693
727
  ```
694
728
 
695
729
  ##### Voorbeeld zonder een button, maar bijvoorbeeld in een tekst.
696
730
 
697
- Daar kan wel meer worden opgegeven
731
+ Daar kan wel meer worden opgegeven. Voor de IconText component wordt ook de kleur van de tekst aangepast.
698
732
 
699
733
  ```tsx
700
734
  <p>
701
- <Icon faIcon={faHome} animate="spin" ></Icon>
702
- <Icon faIcon={faHome} animate="pulse" size="m"></Icon>
703
- <Icon faIcon={faHome} rotation={90} size="l" color="warning"></Icon>
704
- <Icon faIcon={faHome} flip="vertical" size="xl" color="danger"></Icon>
735
+ <Icon icon={faHome} animate="spin" ></Icon>
736
+ <Icon icon={faHome} animate="pulse" size="m"></Icon>
737
+ <Icon icon={faHome} rotation={90} size="l" color="warning"></Icon>
738
+ <Icon icon={faHome} flip="vertical" size="xl" color="danger"></Icon>
705
739
  </p>
706
740
  <p className="my-3">
707
- Dit is een <IconText faIcon={faHome} color="info">huisje</IconText>. Wat leuk!
741
+ Dit is een <IconText icon={faHome} color="info">huisje</IconText>. Wat leuk!
708
742
  </p>
709
743
  ```
710
744
 
@@ -721,89 +755,48 @@ Link en LinkButton zijn bedoelt om links (`<a>`) en buttons (`<button>`) er, bij
721
755
  </div>
722
756
  ```
723
757
 
724
- ### Menu <a id="component-menu"></a>
758
+ ### Menu (Nieuw) <a id="component-menu-2"></a>
725
759
 
726
760
  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.
727
- De `<Menu />`-tag heeft een `onMenuItemChanged(id: nuymber|string)` function voor als het geselecteerde menu wijzigt.
761
+ 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.
728
762
 
729
- De menu-items hebben een optioneel id, net als de sub-menu-items. Als er geen ID is opgegeven, maakt het menu zelf id's aan op basis van de globale menu-index. Dit is dan ook het nummer dat doorgegeven wordt met `onMenuItemChanged(id: nuymber|string)`.
763
+ Het Menu kan worden opgebouwd uit 3 andere componenten:
730
764
 
731
- ##### Deze ID's zijn gegenereerd door de component
765
+ - `<Menu.Item>`: een menu-item met een label en een optioneel sub-menu. Met de (optionele) prop `name` kan een item een naam gegeven worden. Deze naam wordt dan gebruikt als item-identifier. Anders wordt de string-content van de component-children gebruikt.
766
+ - `<Menu.ExpandableItem>`: een menu-item met een label en een of meer `<Menu.Item>` children. Met de `startExpandend` prop kan een item als default uitgeklapt worden.
767
+ - `<Menu.ItemGroup>`: een menu-item met een label en een of meer `<Menu.Item>` of `<Menu.ExpandableItem>` children.
732
768
 
733
- ```tsx
734
- <Menu
735
- onMenuItemChanged={(id: string | number) => console.log(`menu item ${id} selected`)}
736
- blocks={[
737
- {
738
- label: 'General',
739
- items: [
740
- { itemTxt: 'Dashboard' }, // id 0
741
- { itemTxt: 'Customers' }, // id 1
742
- ],
743
- },
744
- {
745
- label: 'Administration',
746
- items: [
747
- { itemTxt: 'Team Settings' }, // id 2
748
- {
749
- itemTxt: 'Manage Your Team',
750
- itemList: [
751
- // id 3
752
- { txt: 'Members' }, // id 4
753
- { txt: 'Add a member' }, // id 5
754
- ],
755
- },
756
- { itemTxt: 'Invitations' }, // id 6
757
- ],
758
- },
759
- {
760
- label: 'Transactions',
761
- items: [
762
- { itemTxt: 'Payments' }, // id 7
763
- { itemTxt: 'Transfers' }, // id 8
764
- ],
765
- },
766
- ]}
767
- />
768
- ```
769
-
770
- ##### ID's kan je ook zelf opgeven
769
+ Andere elementen worden **niet** gerendered.
771
770
 
772
771
  ```tsx
773
- <Menu
774
- onMenuItemChanged={(id: string | number) => console.log(`menu item ${id} selected`)}
775
- blocks={[
776
- {
777
- label: 'General',
778
- items: [
779
- { itemTxt: 'Dashboard', id: 1 },
780
- { itemTxt: 'Customers', id: 2 },
781
- ],
782
- },
783
- {
784
- label: 'Administration',
785
- items: [
786
- { itemTxt: 'Team Settings', id: '3' },
787
- {
788
- itemTxt: 'Manage Your Team',
789
- id: '4',
790
- itemList: [
791
- { txt: 'Members', id: '4a' },
792
- { txt: 'Add a member', id: '4b' },
793
- ],
794
- },
795
- { itemTxt: 'Invitations', id: 5 },
796
- ],
797
- },
798
- {
799
- label: 'Transactions',
800
- items: [
801
- { itemTxt: 'Payments', id: 6 },
802
- { itemTxt: 'Transfers', id: 7 },
803
- ],
804
- },
805
- ]}
806
- />
772
+ <div>
773
+ <Menu onMenuItemClicked={(item: string) => console.log(item)} initialItem="Data">
774
+ <Menu.Item>Grover</Menu.Item>
775
+ <Menu.Item>Oscar</Menu.Item>
776
+ <Menu.ExpandableItem label="Sesamstraat" startExpanded={true}>
777
+ <MenuItem>Ieniemienie</MenuItem>
778
+ <MenuItem>Pino</MenuItem>
779
+ <MenuItem>Tommy</MenuItem>
780
+ </Menu.ExpandableItem>
781
+
782
+ <Menu.ItemGroup label="Stuff...">
783
+ <Menu.Item> <!-- Menu item can contain icons -->
784
+ <Icon icon={faDuck} />
785
+ Scrooge McDuck
786
+ </Menu.Item>
787
+ <Menu.ExpandableItem label="Disney">
788
+ <Menu.Item>Donald Duck</Menu.Item>
789
+ <Menu.Item>Mickey Mouse</Menu.Item>
790
+ <Menu.Item>Boris Boef</Menu.Item>
791
+ </Menu.ExpandableItem>
792
+ <Menu.ExpandableItem label="Looney Tunes" startExpanded={true}>
793
+ <Menu.Item>Bugs Bunny</Menu.Item>
794
+ <Menu.Item>Daffy Duck</Menu.Item>
795
+ <Menu.Item>Porky Pig</Menu.Item>
796
+ </Menu.ExpandableItem>
797
+ </Menu.ItemGroup>
798
+ </Menu>
799
+ </div>
807
800
  ```
808
801
 
809
802
  ### Messages & Notifications <a id="component-messages"></a>
@@ -833,33 +826,75 @@ Een notificatie bevat ook een tekst, maar heeft ook een dimsiss-button. Deze met
833
826
 
834
827
  ### Modal <a id="component-modal"></a>
835
828
 
836
- Een modal is een po-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 scrollbaar gemaakt moet worden. Met een state-boolean kan het openen & sluiten van de modal geregeld worden.
829
+ 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.
837
830
 
838
831
  ```tsx
839
832
  const [isModalOpen, setModalOpen] = useState(true);
840
833
  return (
841
834
  { isModalOpen ?
842
- <Modal
843
- onDismiss={() => setModalOpen(false)}
844
- header={
835
+ <Modal onDismiss={() => setModalOpen(false)} size='xl'>
836
+ <Modal.Head>
845
837
  {/* Hier komt de content voor de modal-header (bovenaan). */}
846
838
  <TitleWithSubtitle titleTxt="WAT?!? users" subtitleTxt="Users van de app"/>
847
- }
848
- footer={
839
+ </Modal.Head>
840
+ <Modal.Body>
841
+ {/* Hier komt de modal content. */}
842
+ </Modal.Body>
843
+ <Modal.Foot>
849
844
  {/* Hier komt de content voor de modal-footer (onderaan). */}
850
845
  <Button.Link>close</Button.Link>
851
- }>
852
- {/* Hier komt de modal content. */}
846
+ </Modal.Foot>
853
847
  </Modal>
854
848
  : null
855
849
  });
856
850
  ```
857
851
 
852
+ De `<Modal.Head>` en de `<Modal.Foot>` zijn optioneel. Als je die niet wil gebruiken, kan je de `<Modal.Body>` tag ook weglaten. De content van de Modal wordt dan automatisch gewrapped in een `<Modal.Body>` tag:
853
+
854
+ ```tsx
855
+ <Modal>
856
+ <Section>
857
+ <span></span>
858
+ </Section>
859
+ </Modal>;
860
+
861
+ /*is hetzelfde als */
862
+
863
+ <Modal>
864
+ <Modal.Body>
865
+ <Section>
866
+ <span></span>
867
+ </Section>
868
+ </Modal.Body>
869
+ </Modal>;
870
+
871
+ /* Wrap meerdere items in een <></> */
872
+ <Modal>
873
+ <>
874
+ <Section> section 1</Section>
875
+ <Section> section 2</Section>
876
+ <Section> section 3</Section>
877
+ </>
878
+ </Modal>;
879
+ ```
880
+
881
+ Een modal heeft ook verschillende sizes. Met de `size`-prop kan deze ingesteld worden. De default waarde is `'m'`, wat overeen komt met `800px`.
882
+
883
+ - SizeProp:
884
+ - `s`: 600px
885
+ - `m`: 800px (default),
886
+ - `l`: 1000px
887
+ - `xl`: 1200px
888
+ - string:
889
+ - `'834px'`
890
+ - `'50%'`
891
+ - `'60em'`
892
+
858
893
  ### ProgressBar <a id="component-progressbar"></a>
859
894
 
860
895
  Een progressbar doet precies wat je verwacht.
861
896
 
862
- - 3 maten (small (s), medium (m) en large (l)). Default = medium (m)
897
+ - 4 maten (small (s), medium (m), large (l) en extralarge (xl)).
863
898
  - 4 kleuren (danger (d), succes (s), link (l) en primary (p)). Default = primary
864
899
  - de max value is instelbaar, default = 100.
865
900
 
@@ -872,10 +907,52 @@ Een progressbar doet precies wat je verwacht.
872
907
  </div>
873
908
  ```
874
909
 
910
+ ### TabBar <A id="component-tabbar"></a>
911
+
912
+ De TabBar component komt in de plaats van de Tabs component. Deze gaat iets anders om met Tab items dan de oude Tabs-component.
913
+
914
+ Als er andere items dan die van het type `<TabBarItem>` worden gebruikt, volgt een waarschuwing in de console.
915
+ Een TabBarItem kan vervolgens **alleen** strings of `<Icon>`-componenten bevatten. Deze worden gebruikt o de tab weer te geven.
916
+
917
+ ```tsx
918
+ const [tab, setTab] = useState<string | number>(100);
919
+ // ...
920
+ <div>
921
+ <TabBar onTabChange={(tabId: number | string) => setTab(tabId)} initialTab={tab}>
922
+ <TabBar.Item tabId={100} tooltip="Toon de datatables. yeeehaa!">
923
+ <Icon icon="fas fa-horsehead" />
924
+ DataTables
925
+ </TabBar.Item>
926
+ <TabBar.Item tabId={200}>Notifications & Messages</TabBar.Item>
927
+ <TabBar.Item tabId="Titles">Titles, Forms, Buttons, Tags</TabBar.Item>
928
+ <TabBar.Item tabId="300">
929
+ Aspect Ratio's
930
+ <Icon icon={faAdjust} />
931
+ </TabBar.Item>
932
+ <TabBar.Item tabId="MonthView">
933
+ <Icon icon={faCalendar} />
934
+ </TabBar.Item>
935
+ </TabBar>
936
+
937
+ <div className="tab-content">
938
+ {tab === 100 && <DataTableTab />}
939
+ {tab === 200 && <NotificationTab />}
940
+ {tab === 'Titles' && <TitlesFormsButtonsTab />}
941
+ {tab === '300' && <AspectRatioTab />}
942
+ {tab === 'MonthView' && <CalendarTab />}
943
+ </div>
944
+ </div>;
945
+ ```
946
+
875
947
  ### Table <a id="component-table"></a>
876
948
 
877
- Een Table 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.
949
+ Table nieuwe stijl. TODO: documentatie & implementatie
950
+
951
+ ### SimpleTable <a id="component-simpletable"></a>, voorheen Table
952
+
953
+ 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.
878
954
  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.
955
+ In plaats van deze SimpleTable kan je ook de [Table](#component-table) gebruiken.
879
956
 
880
957
  ```tsx
881
958
  const [data, setData] = useState(tableData);
@@ -900,36 +977,10 @@ return (
900
977
  );
901
978
  ```
902
979
 
903
- ### Tabs <a id="component-tabs"></a>
904
-
905
- Tabs doen precies wat ze zeggen:
906
-
907
- ```tsx
908
- export default function App() {
909
- const [activePage, setActiveTab] = useState(0);
910
- return (
911
- <>
912
- <Tabs
913
- items={['DataTables', 'Notifications & Messsages', 'Titles, Forms & Buttons', 'Images & Aspect Ratios']}
914
- activeTab={activePage}
915
- onTabChange={(i: number) => setActiveTab(i)}
916
- />
917
-
918
- <div className="tab-content">
919
- {activePage === 0 ? <DataTableTab /> : null}
920
- {activePage === 1 ? <NotificationTab /> : null}
921
- {activePage === 2 ? <TitlesFormsButtonsTab /> : null}
922
- {activePage === 3 ? <AspectRatioTab /> : null}
923
- </div>
924
- </>
925
- );
926
- }
927
- ```
928
-
929
980
  ### Tag & Tags <a id="component-tags"></a>
930
981
 
931
982
  Een `<Tag>` is een klein inline elementje om overal te kunnen stoppen. Tags kunnen een optionele sluit-knop bevatten
932
- 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.
983
+ 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.
933
984
 
934
985
  ```tsx
935
986
  <Tags alignment="l" size="s">
@@ -942,9 +993,14 @@ De `<Tags>` component kan gebruikt worden om meerdere tags te groeperen. Dan kun
942
993
  <Tag color="light">light</Tag>
943
994
  <Tag color="dark">dark</Tag>
944
995
  </Tags>
996
+
997
+ // warns if you use a tag that is not a `<Tag>`
998
+ <Tags>
999
+ <span>Fakey!</span>
1000
+ </Tags>
945
1001
  ```
946
1002
 
947
- Met de `onDismiss`-function van de `<Tag>` kan je een sluit-button op een tag toevoegen. Dan moet er **wel** een function opgegevens zijn om iets mee te doen
1003
+ Met de `onDismiss`-function van de `<Tag>` kan je een sluit-button op een tag toevoegen. Dan **moet** er een function opgegevens zijn om iets mee te doen
948
1004
 
949
1005
  ```tsx
950
1006
  <Tag color="dark" onDismiss={(e) => handleTagDismiss(e)}>
@@ -992,6 +1048,95 @@ Allemaal hebben ze 2 waarden die isntelbaar zijn voor Sizes: _headingSize_ en _b
992
1048
  </div>
993
1049
  ```
994
1050
 
1051
+ ## ToggleBar <a id="component-toggles"></a>
1052
+
1053
+ 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.
1054
+
1055
+ De ToggleBar heeft de volgende props:
1056
+
1057
+ - `initialValue`: de geselecteerde ToggleItem-identifier (NIET VOOR `<ToggleBar.OnOffItem>`)
1058
+ - `children`: de ToggleItems of OnOffToggleItems die in de ToggleBar zitten
1059
+ - `onToggle`: callback voor veranderen van geselecteerde ToggleItem
1060
+ - `rounded`: round de hoeken af (default `false`)
1061
+ - `light`: maak de ToggleBar light-colored (default `true`)
1062
+ - `outlined`: maak de ToggleBar outlined (default `false`)
1063
+ - `onColor`: ColorProp voor de 'on'-status (default 's' (success, groen))
1064
+ - `offColor`: ColorProp voor de 'off'-status (default 'd' (danger, rood))
1065
+
1066
+ #### Common props Toggle Items
1067
+
1068
+ Er zijn een paar props op de `Item` en de `OnOffItem` hetzelfde.
1069
+
1070
+ - `identifier`: kan gebruikt worden om een van de items een betere, herkenbare naam te geven als het item meer content bevat dan alleen een string.
1071
+ - `tooltip`: tooltip voor een toggle-item
1072
+ - `disabled`: disable een toggle-item`
1073
+
1074
+ ### ToggleItem
1075
+
1076
+ ToggleItems zijn meerdere knopjes op de bar, waarvan er maar 1 de status 'on' heeft. De andere buttons hebben dan de 'off'-state.
1077
+
1078
+ De `onToggle()`-callback wordt aangeroepen als de getogglede knop wordt verandert.
1079
+
1080
+ ```tsx
1081
+ <div>
1082
+ <ToggleBar onToggle={(item: string) => {}} rounded={true} light={true} initialValue="Toggle C">
1083
+ <ToggleBar.Item identifier="A">Toggle A</ToggleBar.Item> <!-- console: 'A' -->
1084
+ <ToggleBar.Item>Toggle B</ToggleBar.Item> <!-- console: 'Toggle B' -->
1085
+ <ToggleBar.Item>Toggle C</ToggleBar.Item> <!-- console: 'Toggle C' -->
1086
+ </ToggleBar>
1087
+ </div>
1088
+ ```
1089
+
1090
+ ### OnOffToggleItem
1091
+
1092
+ 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.
1093
+
1094
+ De OnOffToggleItems maken **geen** gebruik van de `onToggle`-callback van de ToggleBar. Dat moet door het item _zelf_ worden geregeld.
1095
+ Ze hebben 2 props meer dan de ToggleItems:
1096
+
1097
+ - `toggled`: de initiële status van het item
1098
+ - `onToggle: (on: boolean, item: string) => void`: de callback die aangeroepen wordt als er wordt getoggeld.
1099
+
1100
+ ```tsx
1101
+ <div>
1102
+ <ToggleBar rounded={true} outlined={true}>
1103
+ <ToggleBar.OnOffItem
1104
+ onToggle={(on: boolean, item: string) => console.log(item)}
1105
+ identifier="1">
1106
+ Maandag
1107
+ </ToggleBar.OnOffItem><!--console: '1' -->
1108
+ <ToggleBar.OnOffItem
1109
+ onToggle={(on: boolean, item: string) => console.log(item)}
1110
+ identifier="2">
1111
+ Dinsdag
1112
+ </ToggleBar.OnOffItem><!--console: '2' -->
1113
+ <ToggleBar.OnOffItem
1114
+ onToggle={(on: boolean, item: string) => console.log(item)}
1115
+ identifier="3">
1116
+ Woensdag
1117
+ </ToggleBar.OnOffItem><!--console: '3' -->
1118
+ <ToggleBar.OnOffItem
1119
+ onToggle={(on: boolean, item: string) => console.log(item)}
1120
+ identifier="4">
1121
+ Donderdag
1122
+ </ToggleBar.OnOffItem><!--console: '4' -->
1123
+ <ToggleBar.OnOffItem
1124
+ onToggle={(on: boolean, item: string) => console.log(item)}
1125
+ identifier="5">
1126
+ Vrijdag
1127
+ </ToggleBar.OnOffItem><!--console: '5' -->
1128
+ <ToggleBar.OnOffItem
1129
+ onToggle={(on: boolean, item: string) => console.log(item)}>
1130
+ Zaterdag
1131
+ </ToggleBar.OnOffItem><!--console: 'Za' -->
1132
+ <ToggleBar.OnOffItem
1133
+ onToggle={(on: boolean, item: string) => console.log(item)}>
1134
+ Zondag
1135
+ </ToggleBar.OnOffItem><!--console: 'Zo' -->
1136
+ </ToggleBar>
1137
+ </div>
1138
+ ```
1139
+
995
1140
  ## Form & inputs <a id="form"></a>
996
1141
 
997
1142
  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.