loon-bulma-react 2022.3.21 → 2022.3.23
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.
- package/dist/components/Button/ButtonProps.d.ts +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.d.ts +1 -1
- package/dist/components/Calendar/Month/DayContainer.d.ts +1 -1
- package/dist/components/Calendar/Month/MonthView.d.ts +1 -1
- package/dist/components/Calendar/Week/WeekView.d.ts +1 -1
- package/dist/components/Content/Content.d.ts +1 -1
- package/dist/components/DataTable/DataTable.d.ts +1 -1
- package/dist/components/Footer/Footer.d.ts +4 -2
- package/dist/components/Hero/Hero.d.ts +1 -1
- package/dist/components/Icon/Icon.d.ts +1 -1
- package/dist/components/Image/Image.d.ts +2 -0
- package/dist/components/Indicator/Indicator.d.ts +1 -1
- package/dist/components/Message/Message.d.ts +1 -1
- package/dist/components/Modal/Modal.d.ts +1 -1
- package/dist/components/Notification/Notification.d.ts +1 -1
- package/dist/components/ProgressBar/ProgressBar.d.ts +1 -1
- package/dist/components/ScrollArea/ScrollArea.d.ts +1 -1
- package/dist/components/Steps/Steps.d.ts +1 -1
- package/dist/components/TabBar/TabBar.d.ts +1 -1
- package/dist/components/Tag/Tag.d.ts +1 -2
- package/dist/components/TimeLine/TimeLine.d.ts +1 -1
- package/dist/components/ToggleBar/ToggleBar.d.ts +1 -1
- package/dist/contexts/Notifier/NotifierProps.d.ts +1 -1
- package/dist/forms/Checkbox/Checkbox.d.ts +1 -1
- package/dist/forms/Currency/CurrencyInput.d.ts +47 -0
- package/dist/forms/Form.d.ts +1 -1
- package/dist/forms/Input.d.ts +1 -1
- package/dist/forms/Radio/Radio.d.ts +1 -1
- package/dist/forms/Selects/Select.d.ts +1 -1
- package/dist/forms/Text/EmailInput.d.ts +1 -1
- package/dist/forms/Text/PasswordInput.d.ts +1 -1
- package/dist/forms/Text/TextInput.d.ts +1 -1
- package/dist/forms/index.d.ts +2 -0
- package/dist/forms/shared/BaseInputProps.d.ts +1 -1
- package/dist/index.js +678 -542
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +679 -544
- package/dist/index.modern.js.map +1 -1
- package/package.json +9 -8
package/dist/index.modern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.modern.js","sources":["../src/components/AspectRatio/AspectRatio.tsx","../src/components/Box/Box.tsx","../src/components/Columns/Columns.tsx","../src/components/Columns/Column.tsx","../src/components/Container/Container.tsx","../src/components/Content/Content.tsx","../src/components/Footer/Footer.tsx","../src/components/Hero/Hero.tsx","../src/components/Image/Image.tsx","../src/components/Section/Section.tsx","../src/components/ScrollArea/ScrollArea.tsx","../src/hooks/useDebouncedValue.ts","../src/hooks/useUncontrolled.ts","../src/hooks/usePagination.ts","../src/components/DataTable/DataTable.tsx","../src/components/Icon/Icon.tsx","../src/components/Indicator/Indicator.tsx","../src/components/Kbd/Kbd.tsx","../src/components/Menu/Menu.tsx","../src/components/Message/Message.tsx","../node_modules/warning/warning.js","../src/utils/warn-dev-util.ts","../src/components/Modal/Modal.tsx","../src/components/Notification/Notification.tsx","../src/components/ProgressBar/ProgressBar.tsx","../src/components/SimpleTable/SimpleTable.tsx","../src/components/Steps/Steps.tsx","../src/components/TabBar/TabBar.tsx","../src/components/Tag/Tag.tsx","../src/components/TimeLine/TimeLine.tsx","../src/components/Titles/Titles.tsx","../src/components/ToggleBar/ToggleBar.tsx","../src/components/ButtonGroup/ButtonGroup.tsx","../src/components/Button/Button.tsx","../src/components/Link/Link.tsx","../src/utils/JSDateTime.class.ts","../src/components/Calendar/base-styles.ts","../src/utils/date-utils.ts","../src/utils/hasBSN.function.ts","../src/utils/calculateTxtColor.function.ts","../src/components/Calendar/CalendarItems/CalendarColoredItem.tsx","../src/components/Calendar/CalendarItems/CalendarItem.tsx","../src/components/Calendar/Month/MoreEvents.tsx","../src/components/Calendar/Month/DayContainer.tsx","../src/components/Calendar/Month/MonthView.tsx","../src/components/Calendar/Week/AlldayContainer.tsx","../src/components/Calendar/Week/HourRow.tsx","../src/components/Calendar/Week/WeekView.tsx","../src/components/Calendar/index.ts","../src/forms/shared/InputError.tsx","../src/forms/shared/InputIcons.tsx","../src/forms/shared/Base.Input.Container.tsx","../src/forms/Checkbox/Checkbox.tsx","../src/forms/Datetimes/DateInput.tsx","../src/forms/Datetimes/DateTimeInput.tsx","../src/forms/Datetimes/TimeInput.tsx","../src/forms/Numeric/MultiRangeInput.tsx","../src/forms/Numeric/NumberInput.tsx","../src/forms/Numeric/RangeInput.tsx","../src/forms/Others/ColorInput.tsx","../src/forms/Others/HiddenInput.tsx","../src/forms/Selects/BaseSelectProps.tsx","../src/forms/Selects/MultiSelect.tsx","../src/forms/Selects/Select.tsx","../src/forms/Text/EmailInput.tsx","../src/forms/Text/PasswordInput.tsx","../src/forms/Text/TextArea.tsx","../src/forms/Text/TextInput.tsx","../src/forms/Input.tsx","../src/forms/File/FileInput.tsx","../src/forms/Radio/Radio.tsx","../src/forms/Form.tsx","../src/forms/FormBuilder/FormBuilder.tsx","../src/contexts/Notifier/Notifier.tsx","../src/contexts/Notifier/NotifierProvider.tsx","../src/contexts/Confirm/ConfirmContextProvider.tsx","../src/hooks/useClipboard.ts","../src/hooks/useHotkeys.ts","../src/hooks/useLocalStoredState.ts","../src/hooks/useToggle.ts","../src/hooks/useValidatedState.ts"],"sourcesContent":["import React from 'react';\n\n/** Props voor een aspect-ratio */\ntype AspectRatioProps = {\n /** de ratio (width x height) van het gewenste element */\n ratio:\n | '1by1'\n | '5by4'\n | '4by5'\n | '4by3'\n | '3by4'\n | '3by2'\n | '2by3'\n | '5by3'\n | '3by5'\n | '16by9'\n | '9by16'\n | '2by1'\n | '1by2'\n | '3by1'\n | '1by3';\n /** het item dat aan de aspect-ratio moet voldoen */\n children: React.ReactNode;\n /** */\n caption?: {\n placement: 'top' | 'bottom';\n text: string;\n };\n /** extra classes on aspect-ratio-element */\n className?: string;\n};\n\n/**\n * gebruik een aspect-ratio voor een bepaald resizable element, waar een width en height bij hoort.\n * Zoals bijvoorbeeld een iframe, img, etc\n * @param props\n * @returns een aspect-ratio'd element.\n * @example\n * <AspectRatio ratio=\"16by9\" >\n * <iframe src=\"https://www.youtube.com/embed/dQw4w9WgXcQ\">\n * </AspectRatio>\n */\nfunction AspectRatio(props: AspectRatioProps): JSX.Element {\n const figClasses = `image is-${props.ratio} ${props.className || ''}`.trim();\n return (\n <figure className={figClasses}>\n {props.caption && props.caption.placement === 'top' && <figcaption>{props.caption.text}</figcaption>}\n {props.children}\n {props.caption && props.caption.placement === 'bottom' && <figcaption>{props.caption.text}</figcaption>}\n </figure>\n );\n}\n\nexport { AspectRatio };\nexport type { AspectRatioProps };\n","import React, { CSSProperties } from 'react';\n\ntype BoxProps = {\n /** de children van de box */\n children: React.ReactNode;\n /** Andere classes om op de box toe te passen */\n className?: string;\n /** style props direct op de box */\n styles?: CSSProperties;\n};\n\n/**\n * Maak een witte box om andere elementen heen. Voor forms of modals. Heeft een beetje schaduw.\n * @see {@link https://bulma.io/documentation/elements/box/}\n * @param {{children: any, classes?: string|string[]}} props\n * @returns een witte box om elementen.\n * @example <Box>This is a box</Box>\n */\nconst Box = ({ children, className: classes, styles }: BoxProps): JSX.Element => (\n <div className={`bulma-box ${classes ?? ''}`.trim()} style={styles}>\n {children}\n </div>\n);\n\nexport { Box };\nexport type { BoxProps };\n","import React, { CSSProperties } from 'react';\n\nexport type ColumnsProps = {\n /** Children van de Columns. Moeten van het type @see Column zijn */\n children: React.ReactNode;\n /** de gap-grootte (stappen van .25rem), een margin tussen kolommen (default = 3, 0.75rem) */\n gap?: '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | undefined;\n /** mogen de kolommen over meerdere rijen verdeeld worden */\n multiline?: boolean;\n /** moeten de kolom centraal aligned worden */\n centered?: boolean;\n /** extra classes voor dit element */\n className?: string;\n /** set de styling direct */\n styles?: CSSProperties;\n};\n\n/**\n * Verdeel een pagina in kolommen, children zijn van het type {@link Column } voor het maken van de kolommen.\n *\n * Kijk op {@link https://bulma.io/documentation/columns/sizes/} voor de bulma-uitleg.\n * @param {ColumnProps} props\n * @returns Columns component which can be used to create a column layout.\n * @example\n * <Columns>\n * <Column>This is a column</Column>\n * <Column>This is a column</Column>\n * <Column narrow>This is a narrow column</Column>\n * </Columns>\n */\nexport function Columns({ children, gap, multiline, centered, className: classes, styles }: ColumnsProps): JSX.Element {\n let className = 'columns';\n if (gap) className += ` is-${gap} is-variable`;\n if (multiline) className += ' is-multiline';\n if (centered) className += ' is-centered';\n if (classes) className += ` ${classes}`;\n\n return (\n <div data-testid=\"columns\" className={className} style={styles}>\n {children}\n </div>\n );\n}\n","import React, { CSSProperties } from 'react';\n\ntype ColumnProps = {\n /** wat staat er in deze kolom */\n children: React.ReactNode;\n /** extra classes op deze kolom */\n className?: string;\n /** zet de styling direct */\n styles?: CSSProperties;\n};\ntype ExpandedColumnProps = ColumnProps & {\n /** is deze kolom zo smal mogelijk of vanaf welke schermmaat */\n narrow?: boolean | 'mobile' | 'tablet' | 'touch' | 'desktop' | 'widescreen' | 'fullhd';\n};\n\n/** ALLEEN INTERN GEBRUIK. IS DE UITEINDELIJKE COLUMN */\nconst C = ({ children, className, styles }: ExpandedColumnProps) => (\n <div className={className} style={styles}>\n {children}\n </div>\n);\n\n/**\n * Standaard kolom voor gebruik in {@link Columns}.\n * Als voor narrow een waarde is meegegeven, wordt de minimale ruimte voor deze kolom aangehouden: https://bulma.io/documentation/columns/sizes/\n * @return Een kolom\n * @example\n * <Column>This is a column</Column>\n * <Column narrow>This is a narrow column</Column>\n */\nconst Column = (props: ExpandedColumnProps): JSX.Element => {\n let classes = 'column ';\n if (typeof props.narrow === 'boolean') classes += 'is-narrow';\n else if (props.narrow) classes += `is-narrow-${props.narrow}`;\n\n if (props.className) classes += ` ${props.className}`;\n return <C {...props} className={classes} />; // <div className={classes.trim()}>{props.children}</div>;\n};\n\n/** Column full width of parent\n * @returns een kolom met de maximale breedte van de parent 'Columns'\n * @example <Column.Full>This is a full column</Column.Full>\n */\nColumn.Full = (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-full ${props.className}`} styles={props.styles} />\n);\n/** Column 1/2 width of parent\n * @returns een kolom met de halve breedte van de parent 'Columns'\n * @example <Column.Half>This is a half column</Column.Half>\n */\nColumn.Half = (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-half ${props.className}`} styles={props.styles} />\n);\n\n/** Spread columns based on thirds (1/3, 2/3) */\nColumn.Thirds = {\n /** Column 1/3 width of parent\n * @returns een kolom met 1/3 breedte van de parent 'Columns'\n * @example <Column.Thirds.One>This is a first third column</Column.Thirds.One>\n */\n One: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-one-third ${props.className}`} styles={props.styles} />\n ),\n /** Column 2/3 width of parent\n * @returns een kolom met 2/3 breedte van de parent 'Columns'\n * @example <Column.Thirds.Two>This is a second third column</Column.Thirds.Two>\n */\n Two: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-two-thirds ${props.className}`} styles={props.styles} />\n ),\n};\n\n/** Spread columns based on quarters (1/4, 2/4, 3/4) */\nColumn.Quarters = {\n /** Column 1/4 width of parent\n * @returns een kolom met 1/4 breedte van de parent 'Columns'\n * @example <Column.Quarters.One>This is a 1/4 column</Column.Quarters.One>\n */\n One: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-one-quarter ${props.className}`} styles={props.styles} />\n ),\n /** Column 2/4 width of parent\n * @returns een kolom met 2/4 breedte van de parent 'Columns'\n * @example <Column.Quarters.Two>This is a 2/4 column</Column.Quarters.Two>\n */\n Two: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-two-quarters ${props.className}`} styles={props.styles} />\n ),\n /** Column 3/4 width of parent\n * @returns een kolom met 3/4 breedte van de parent 'Columns'\n * @example <Column.Quarters.Three>This is a 3/4 column</Column.Quarters.Three>\n */\n Three: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-three-quarters ${props.className}`} styles={props.styles} />\n ),\n};\n/** Spread columns based on fifths (1/5, 2/5, 3/5, 4/5) */\nColumn.Fifths = {\n /** Column 1/5 width of parent\n * @returns een kolom met 1/5 breedte van de parent 'Columns'\n * @example <Column.Fifths.One>This is a 1/5 column</Column.Fifths.One>\n */\n One: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-one-fifth ${props.className}`} styles={props.styles} />\n ),\n /** Column 2/5 width of parent\n * @returns een kolom met 2/5 breedte van de parent 'Columns'\n * @example <Column.Fifths.Two>This is a 2/5 column</Column.Fifths.Two>\n */\n Two: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-two-fifths ${props.className}`} styles={props.styles} />\n ),\n /** Column 3/5 width of parent\n * @returns een kolom met 3/5 breedte van de parent 'Columns'\n * @example <Column.Fifths.Three>This is a 3/5 column</Column.Fifths.Three>\n */\n Three: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-three-fifths ${props.className}`} styles={props.styles} />\n ),\n /** Column 4/5 width of parent\n * @returns een kolom met 4/5 breedte van de parent 'Columns'\n * @example <Column.Fifths.Four>This is a 4/5 column</Column.Fifths.Four>\n */\n Four: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-four-fifths ${props.className}`} styles={props.styles} />\n ),\n};\n\n// Twelfths Columns\nColumn.Twelves = {\n /** Column 1/12 width of parent\n * @returns een kolom met 1/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.One>This is a 1/12 column</Column.Twelves.One>\n */\n One: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-1 ${props.className}`} styles={props.styles} />\n ),\n /** Column 2/12 width of parent\n * @returns een kolom met 2/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Two>This is a 2/12 column</Column.Twelves.Two>\n */\n Two: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-2 ${props.className}`} styles={props.styles} />\n ),\n /** Column 3/12 width of parent\n * @returns een kolom met 3/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Three>This is a 3/12 column</Column.Twelves.Three>\n */\n Three: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-3 ${props.className}`} styles={props.styles} />\n ),\n /** Column 4/12 width of parent\n * @returns een kolom met 4/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Four>This is a 4/12 column</Column.Twelves.Four>\n */\n Four: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-4 ${props.className}`} styles={props.styles} />\n ),\n /** Column 5/12 width of parent\n * @returns een kolom met 5/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Five>This is a 5/12 column</Column.Twelves.Five>\n */\n Five: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-5 ${props.className}`} styles={props.styles} />\n ),\n /** Column 6/12 width of parent\n * @returns een kolom met 6/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Six>This is a 6/12 column</Column.Twelves.Six>\n */\n Six: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-6 ${props.className}`} styles={props.styles} />\n ),\n /** Column 7/12 width of parent\n * @returns een kolom met 7/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Seven>This is a 7/12 column</Column.Twelves.Seven>\n */\n Seven: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-7 ${props.className}`} styles={props.styles} />\n ),\n /** Column 8/12 width of parent\n * @returns een kolom met 8/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Eight>This is a 8/12 column</Column.Twelves.Eight>\n */\n Eight: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-8 ${props.className}`} styles={props.styles} />\n ),\n /** Column 9/12 width of parent\n * @returns een kolom met 9/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Nine>This is a 9/12 column</Column.Twelves.Nine>\n */\n Nine: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-9 ${props.className}`} styles={props.styles} />\n ),\n /** Column 10/12 width of parent\n * @returns een kolom met 10/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Ten>This is a 10/12 column</Column.Twelves.Ten>\n */\n Ten: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-10 ${props.className}`} styles={props.styles} />\n ),\n /** Column 11/12 width of parent\n * @returns een kolom met 11/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Eleven>This is a 11/12 column</Column.Twelves.Eleven>\n */\n Eleven: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-11 ${props.className}`} styles={props.styles} />\n ),\n /** Column 12/12 width of parent\n * @returns een kolom met 12/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Twelve>This is a 12/12 column</Column.Twelves.Twelve>\n */\n Twelve: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-12 ${props.className}`} styles={props.styles} />\n ),\n};\nColumn.displayName = 'Column';\n\nexport { Column };\nexport type { ColumnProps, ExpandedColumnProps };\n","import React, { CSSProperties } from 'react';\n\ntype ContainerProps = {\n children: React.ReactNode;\n /** extra classes */\n className?: string;\n /** set styling directly on container */\n styles?: CSSProperties;\n};\n\n/**\n * Een container om content horizontaal te centreren in grote viewports.\n * @param props\n * @return een default container\n *\n * @description De width van de container is afhankelijk van de maximale viewport width:\n * | | Component | tot 1023px | tot 1216px | tot 1408px | groter |\n * |----|----------------------|------------|------------|------------|-----------|\n * | >> | `<Container>` | max-width | 960px | 1152px | 1344px |\n * | | `<Container.Wide>` | max-width | max-width | 1152px | 1344px |\n * | | `<Container.Widest>` | max-width | max-width | max-width | 1344px |\n * | | `<Container.Max>` | max-width | max-width | max-width | max-width |\n *\n * @example <Container>This is a container</Container>\n */\nconst Container = (props: ContainerProps): JSX.Element => {\n let classes = 'container';\n if (props.className) classes += ' ' + props.className;\n return (\n <div className={classes} style={props.styles}>\n {props.children}\n </div>\n );\n};\n\n/**\n * Een container om content horizontaal te centreren in grote viewports.\n * @param props\n * @returns een iets bredere container\n *\n * @description De width van de container is afhankelijk van de maximale viewport width:\n * | | Component | tot 1023px | tot 1216px | tot 1408px | groter |\n * |----|----------------------|------------|------------|------------|-----------|\n * | | `<Container>` | max-width | 960px | 1152px | 1344px |\n * | >> | `<Container.Wide>` | max-width | max-width | 1152px | 1344px |\n * | | `<Container.Widest>` | max-width | max-width | max-width | 1344px |\n * | | `<Container.Max>` | max-width | max-width | max-width | max-width |\n *\n * @example <Container.Wide>This is a somewhat wider container</Container.Wide>\n */\nContainer.Wide = (props: ContainerProps): JSX.Element => {\n let classes = 'container is-widescreen ';\n if (props.className) classes += ' ' + props.className;\n return (\n <div className={classes} style={props.styles}>\n {props.children}\n </div>\n );\n};\n/**\n * Een container om content horizontaal te centreren in grote viewports.\n * @param props\n * @returns een hele brede container\n *\n * @description De width van de container is afhankelijk van de maximale viewport width:\n * | | Component | tot 1023px | tot 1216px | tot 1408px | groter |\n * |----|----------------------|------------|------------|------------|-----------|\n * | | `<Container>` | max-width | 960px | 1152px | 1344px |\n * | | `<Container.Wide>` | max-width | max-width | 1152px | 1344px |\n * | >> | `<Container.Widest>` | max-width | max-width | max-width | 1344px |\n * | | `<Container.Max>` | max-width | max-width | max-width | max-width |\n *\n * @example <Container.Widest>This is a wide container</Container.Widest>\n */\nContainer.Widest = (props: ContainerProps): JSX.Element => {\n let classes = 'container is-fullhd ';\n if (props.className) classes += ' ' + props.className;\n return (\n <div className={classes} style={props.styles}>\n {props.children}\n </div>\n );\n};\n/**\n * Een container om content horizontaal te centreren in grote viewports.\n * De width van de container is afhankelijk van de maximale viewport width.\n * Aan de linker- en rechter-zijde wordt een margin van 32px behouden.\n * @param props\n * @returns een container die de gehele breedte van de viewport gebruikt.\n *\n * @description De width van de container is afhankelijk van de maximale viewport width:\n * | | Component | tot 1023px | tot 1216px | tot 1408px | groter |\n * |----|----------------------|------------|------------|------------|-----------|\n * | | `<Container>` | max-width | 960px | 1152px | 1344px |\n * | | `<Container.Wide>` | max-width | max-width | 1152px | 1344px |\n * | | `<Container.Widest>` | max-width | max-width | max-width | 1344px |\n * | >> | `<Container.Max>` | max-width | max-width | max-width | max-width |\n *\n * @example <Container.Max>This is an almost-fullwidth container </Container.Max>\n */\nContainer.Max = (props: ContainerProps): JSX.Element => {\n let classes = 'container is-fluid ';\n if (props.className) classes += ' ' + props.className;\n return (\n <div className={classes} style={props.styles}>\n {props.children}\n </div>\n );\n};\n\nexport { Container };\nexport type { ContainerProps };\n","import React, { CSSProperties } from 'react';\nimport { SizeProp } from '../../loon-react-bulma-types';\n\ntype ContentPropsType = {\n size?: SizeProp;\n children: React.ReactNode;\n className?: string;\n styles?: CSSProperties;\n};\n\n/**\n * Een Content component voor generated content. De meeste html tags kunnen hier worden gebruikt.\n * @param props size: de tekstgrootte, children: de content van de content\n * @returns een div geschikt voor content. WYSIWYG ofzo.\n * @example <Content>This is a content which can contain lists, <strong>strong</strong> and <em>italic</em> tags</Content>\n */\nexport function Content({ size, className, styles, children }: ContentPropsType): JSX.Element {\n let classes = 'content ';\n\n if (size === 's') classes += 'is-small';\n else if (size === 'l') classes += 'is-medium';\n else if (size === 'xl') classes += 'is-large';\n\n if (className) classes += ' ' + className;\n\n return (\n <div className={classes} style={styles}>\n {children}\n </div>\n );\n}\n","import React from 'react';\nimport { AlignmentProp } from '../../loon-react-bulma-types';\n\nexport type FooterProps = {\n /** de content voor de footer */\n children: React.ReactNode;\n /** alignment bij de footer. (default = 'c') */\n alignment?: AlignmentProp;\n /** extra classes voor op de footer */\n className?: string;\n};\n\n/**\n * Maak een footer voor onderaan de pagina.\n * - de footer bevat een container waarvan de text default 'centered' is.\n * @param props\n * @returns een footer met daarin de content.\n * @example <Footer>This is a footer</Footer>\n */\nexport function Footer({ children, alignment, className }: FooterProps): JSX.Element {\n let containerClasses = 'container';\n let classes = 'footer mt-6';\n\n if (alignment === 'l') containerClasses += ' has-text-left';\n else if (alignment === 'r') containerClasses += ' has-text-right';\n else containerClasses += ' has-text-centered';\n\n if (className) classes += ` ${className}`;\n\n return (\n <footer className={classes}>\n <div className={containerClasses}>{children}</div>\n </footer>\n );\n}\n","import React from 'react';\nimport { SizeProp } from '../../loon-react-bulma-types';\n\ntype HeroProps = {\n children?: React.ReactNode;\n /** type hero */\n heroColorFor?: 'werknemer' | 'werkgever' | 'klant' | 'admin' | 'primary' | undefined;\n /** de grootte van de hero (default = small ('s')) */\n size?: SizeProp | undefined;\n};\n\n/**\n * Maak een schermbrede hero aan. Optionele top-buttons en/of tabs voor navigatie\n * @param props\n * @returns een Hero\n * @example\n\n */\nconst Hero = (props: HeroProps): JSX.Element => {\n let classes = 'hero is-bold';\n classes += props.heroColorFor ? ` is-${props.heroColorFor}` : ' is-primary';\n if (props.size === 's') classes += ' is-small';\n // else if (props.size == 'm') classes += ' is-medium';\n else if (props.size === 'l') classes += ' is-medium';\n else if (props.size === 'xl') classes += ' is-large';\n\n // const classes = `hero is-bold ${color} ${size}`.trim();\n const children = React.Children.map(props.children ?? [<div className=\"hero-body\"> </div>], (child: any) => child);\n\n return <header className={classes}>{children}</header>;\n};\n\nconst HeroHead = (props: { children: React.ReactNode }): JSX.Element => {\n const [burgerActive, setBurgerActive] = React.useState(false);\n\n const burgerClasses = burgerActive ? 'navbar-burger is-active' : 'navbar-burger';\n const menuClasses = burgerActive ? 'navbar-menu is-active' : 'navbar-menu';\n\n return (\n <div className=\"hero-head\">\n <nav className=\"navbar container\">\n <div className=\"navbar-brand\">\n <span\n className={burgerClasses}\n role=\"menu-toggle-mobile\"\n data-target=\"hero-header-menu\"\n onClick={() => setBurgerActive(!burgerActive)}\n >\n <span></span>\n <span></span>\n <span></span>\n </span>\n </div>\n <div id=\"hero-header-menu\" className={menuClasses}>\n <div className=\"navbar-end\">{props.children}</div>\n </div>\n </nav>\n </div>\n );\n};\n\n/** een button in de hero head\n * @param props props\n * @returns een button in de hero head\n * @example <Hero.Head.Button onClick={handleClick}>Button</Hero.Head.Button>\n */\nHeroHead.Button = (props: { children: React.ReactNode; tooltip?: string; onClick?: (e: any) => void }) => (\n <a className=\"navbar-item\" title={props.tooltip} onClick={props.onClick}>\n {props.children}\n </a>\n);\n/** Een link in de hero head\n * @param props props\n * @returns een link in de hero head\n * @example <Hero.Head.Link to=\"https://www.loon.be\" tooltip=\"Loon.be\">Loon.be</Hero.Head.Link>\n */\nHeroHead.Link = (props: {\n children: React.ReactNode;\n tooltip?: string;\n to?: string;\n target?: '_blank' | '_self' | '_parent' | '_top';\n rel?:\n | 'alternat'\n | 'author'\n | 'bookmark'\n | 'external'\n | 'help'\n | 'license'\n | 'next'\n | 'nofollow'\n | 'noreferrer'\n | 'noopener'\n | 'prev'\n | 'search'\n | 'tag';\n}) => (\n <a\n className=\"navbar-item\"\n title={props.tooltip}\n href={props.to}\n target={props.target ?? '_blank'}\n rel={props.rel ?? 'noopener'}\n >\n {props.children}\n </a>\n);\n\n/** Top-bar van de hero met\n * - een BurgerMenu voor de navigatie-items\n * - items aan de rechterkant van het scherm\n * @param props props\n * @returns een HeroHead met daarin optionele links of buttons\n * @example\n * <Hero.Head>\n * <Hero.Head.Button onClick={handleClickNotify}>Notify</Hero.Head.Button>\n * <Hero.Head.Button onClick={handleClickClear}>Clear</Hero.Head.Button>\n * <Hero.Head.Link to=\"https://www.bulma.io\">Bulma</Hero.Head.Link>\n * <Hero.Head.Link to=\"https://www.nodeJS.org\">NodeJS</Hero.Head.Link>\n * </Hero.Head>\n */\nHero.Head = HeroHead;\n\n/**\n * BOdy of the hero, which could contain a title and/or subtitle\n * @param props props\n * @returns hero body with content\n * @example\n * <Hero.Body>\n * <Title>Title</Title>\n * <Subtitle>Subtitle</Subtitle>\n * </Hero.Body>\n */\nHero.Body = (props: { children: React.ReactNode }) => (\n <div className=\"hero-body\">\n <div className=\"container\">{props.children}</div>\n </div>\n);\n\n/** hero foot */\nconst Foot = (props: { children: React.ReactNode }) => (\n <div className=\"hero-foot\">\n <nav className=\"tabs is-boxed is-fullwidth container\">{props.children}</nav>\n </div>\n);\n\n/** Navigation ItemList voor In een Hero Foot. Parent should be <Hero.Foot> and children should be <Hero.Foot.NavItem>\n * @param props props\n * @returns Navigation Item List for Hero's\n * @example\n * <Hero.Foot.NavList>\n * <Hero.Foot.NavItem to=\"/\">URL </Hero.Foot.NavItem>\n * <Hero.Foot.NavItem to=\"/\">URL </Hero.Foot.NavItem>\n * </Hero.Foot.NavList>\n */\nFoot.NavList = (props: { children: React.ReactNode }) => <ul>{props.children}</ul>;\n/** Navigation Item voor in een Hero Foot. Parent should be <Hero.Foot.NavList>\n * @param props props\n * @returns Navigation Item for Hero's\n * @example <Hero.Foot.NavItem to=\"/\">URL</Hero.Foot.NavItem>\n */\nFoot.NavItem = (props: {\n children: React.ReactNode;\n to: string;\n active?: boolean;\n target?: '_blank' | '_self' | '_parent' | '_top';\n tooltip?: string;\n rel?:\n | 'alternat'\n | 'author'\n | 'bookmark'\n | 'external'\n | 'help'\n | 'license'\n | 'next'\n | 'nofollow'\n | 'noreferrer'\n | 'noopener'\n | 'prev'\n | 'search'\n | 'tag';\n}) => (\n <li className={props.active ? 'is-active' : undefined} title={props.tooltip}>\n <a href={props.to} target={props.target ?? '_blank'} rel={props.rel ?? 'noopener'}>\n {props.children}\n </a>\n </li>\n);\n\n/**\n * Hero foot with navigation\n * @param props props\n * @returns hero foot with navigation\n * @example\n * <Hero.Foot>\n * <ul>\n * <li className=\"is-active\"><a href=\"\">Active Navigation Link </a></li>\n * <li><a href=\"\">Another Navigation Link</a></li>\n * </ul>\n * </Hero.Foot>\n\n* <Hero.NavList>\n * <Hero.NavItem to=\"/\">Navigation Link</Hero.NavItem>\n * </Hero.NavList>\n */\nHero.Foot = Foot;\n\nexport { Hero };\nexport type { HeroProps };\n","import React from 'react';\n\ntype ImageProps = {\n /** de ratio (width x height) van de afbeelding */\n ratio:\n | '1by1'\n | '5by4'\n | '4by5'\n | '4by3'\n | '3by4'\n | '3by2'\n | '2by3'\n | '5by3'\n | '3by5'\n | '16by9'\n | '9by16'\n | '2by1'\n | '1by2'\n | '3by1'\n | '1by3'\n | 'square';\n /** geef een gewenste width op in geval van een ratio. Als er geen waarde is, wordt de parent gevuld\n * voor ratio='square' MOETEN de string literal waarden worden gebruikt */\n imgWidth?: '16' | '24' | '32' | '48' | '64' | '96' | '128' | string;\n /** wordt de afbeelding rond ? LET OP: Alleen voor ratio == 'square'! */\n isRounded?: boolean;\n /** src-attribuut van image tag */\n src: string;\n /** alt-attribuut van image tag */\n alt: string;\n /** een optionele figcaption */\n figCaption?: string;\n};\n\n/**\n * Een afbeelding met een vastgestelde aspect ratio.\n * Voor de ratio 'square' kan er een size worden opgegeven.\n * De andere ratio's nemen de gehele width van de parent-container in.\n * @param props\n * @returns an image with a fixed aspect ratio\n * @example <Image ratio=\"1by1\" src=\"https://www.loon.be/images/logo.png\" alt=\"Loon.be\" />\n */\nfunction Image(props: ImageProps): JSX.Element {\n let figClasses = `image is-${props.ratio}`;\n if (props.ratio === 'square') figClasses = `image is-${props.imgWidth || 128}x${props.imgWidth || 128}`;\n\n const imgClasses = props.isRounded && props.ratio === 'square' ? 'is-rounded' : undefined;\n\n return (\n <div style={props.ratio === 'square' ? undefined : { width: props.imgWidth }}>\n <figure className={figClasses}>\n <img className={imgClasses} src={props.src} alt={props.alt}></img>\n {props.figCaption && <figcaption className=\"help is-info\">{props.figCaption}</figcaption>}\n </figure>\n </div>\n );\n}\n\nexport { Image };\nexport type { ImageProps };\n","import React, { CSSProperties } from 'react';\n\ntype SectionPropsType = {\n children: React.ReactNode;\n className?: string;\n styles?: CSSProperties;\n};\n\n/**\n * Maak een simpele container m een pagina te verdelen in secties.\n * een section heeft een responsive padding.\n * @param props alleen de children van de section\n * @returns een sectie voor op de pagina, met ruimte eromheen\n * @example <Section>This is a section</Section>\n */\nexport function Section({ children, className: classes, styles }: SectionPropsType): JSX.Element {\n let className = 'section ';\n if (className) className += ` ${classes}`;\n\n return (\n <section className={className} style={styles}>\n {children}\n </section>\n );\n}\n","import React, { CSSProperties } from 'react';\nimport { AlignmentProp } from '../../..';\n\n/** maak een horizontale flexbox container om items naast elkaar (default: van links naar rechts) neer te zetten, met of zonder wrappen */\nconst Horizontal = (props: {\n /** wat moet er in de flexbox container komen */\n children: React.ReactNode;\n /** moeten de items gewrapped worden (meerdere rijen/kolommen) (default = false) */\n wrap?: boolean;\n /** moeten de items van eind tot begin of begin tot eind komen? (default = false) */\n reverse?: boolean;\n /** de ruimte tussen items (default = 0px):\n * - number: aantal px\n * - string: '16px', '1em', '1rem', etc\n * Kan voor kolom/rij anders worden aangegeven\n */\n gap?:\n | number\n | string\n | {\n /** gap voor row */\n row: number | string;\n /** gap voor column */\n col: number | string;\n };\n /** alignment van de items (default = 'l') */\n alignment?: AlignmentProp;\n /** max width van een item in de horizontal scroll area\n * - number: aantal px\n * - string: '160x', '10em', etc.\n */\n maxItemWidth?: number | string;\n /** max width van een item in de horizontal scroll area\n * - number: aantal px\n * - string: '160x', '10em', etc.\n */\n minItemWidth?: number | string;\n}) => {\n // gap instellingen voor flexbox\n let gap = '0px';\n if (typeof props.gap === 'number') gap = props.gap + 'px';\n else if (typeof props.gap === 'string' && !isNaN(+props.gap)) gap = props.gap + 'px';\n else if (typeof props.gap === 'string') gap = props.gap;\n else if (props.gap) {\n const row = typeof props.gap.row === 'number' ? props.gap.row + 'px' : props.gap.row;\n const col = typeof props.gap.col === 'number' ? props.gap.col + 'px' : props.gap.col;\n gap = `${row} ${col}`;\n }\n\n // alignment voor flexbox\n let alignment = 'flex-start';\n if (props.alignment === 'c') alignment = 'center';\n else if (props.alignment === 'r') alignment = 'flex-end';\n\n const itemStyle = React.useMemo(\n () =>\n ({\n maxWidth: typeof props.maxItemWidth === 'number' ? `${props.maxItemWidth}px` : props.maxItemWidth || null,\n minWidth: typeof props.minItemWidth === 'number' ? `${props.minItemWidth}px` : props.minItemWidth || null,\n } as CSSProperties),\n [props.maxItemWidth, props.minItemWidth]\n );\n\n const containerStyle = React.useMemo(\n () =>\n ({\n display: 'flex',\n flexDirection: props.reverse ? 'row-reverse' : 'row',\n flexWrap: props.wrap ? 'wrap' : 'nowrap',\n justifyContent: alignment,\n alignItems: 'center',\n alignContent: 'center',\n gap,\n overflowX: props.wrap ? 'hidden' : 'auto',\n paddingBottom: '22px', // om te voorkomen dat er een scrollbar in de verkeerde richting bijkomt\n } as CSSProperties),\n [props.reverse, props.alignment, props.wrap]\n );\n\n return (\n <div className=\"lbr-flex-horizontal\" style={containerStyle}>\n {React.Children.toArray(props.children).map((child, index) => (\n <div className=\"lbr-flex-item\" key={index} style={itemStyle}>\n {child}\n </div>\n ))}\n </div>\n );\n};\n\n/** maak een verticale flexbox container om items onder elkaar (default van boven naar beneden) neer te zetten, met of zonder wrappen */\nconst Vertical = (props: {\n /** wat moet er in de flexbox container komen */\n children: React.ReactNode;\n /** moeten de items gewrapped worden (meerdere rijen/kolommen) (default = false) */\n wrap?: boolean;\n /** moeten de items van eind tot begin of begin tot eind komen? (default = false) */\n reverse?: boolean;\n /** de ruimte tussen items (default = 0px):\n * - number: aantal px\n * - string: '16px', '1em', '1rem', etc\n * Kan voor kolom/rij anders worden aangegeven\n */\n gap?:\n | number\n | string\n | {\n /** gap voor row */\n row: number | string;\n /** gap voor column */\n col: number | string;\n };\n /** alignment van de items (default = 'l') */\n alignment?: AlignmentProp;\n /** alleen voor verticale flexboxen: een met een maximale hoogte waarna de container gaat scrollen */\n maxHeight?: number | string;\n}) => {\n // gap instellingen voor flexbox\n let gap = '0px';\n if (typeof props.gap === 'number') gap = props.gap + 'px';\n else if (typeof props.gap === 'string' && !isNaN(+props.gap)) gap = props.gap + 'px';\n else if (typeof props.gap === 'string') gap = props.gap;\n else if (props.gap) {\n const row = typeof props.gap.row === 'number' ? props.gap.row + 'px' : props.gap.row;\n const col = typeof props.gap.col === 'number' ? props.gap.col + 'px' : props.gap.col;\n gap = `${row} ${col}`;\n }\n\n // alignment voor flexbox\n let alignment = 'flex-start';\n if (props.alignment === 'c') alignment = 'center';\n if (props.alignment === 'r') alignment = 'flex-end';\n\n const containerStyle = React.useMemo(\n () =>\n ({\n display: 'flex',\n flexDirection: props.reverse ? 'column-reverse' : 'column',\n flexWrap: props.wrap ? 'wrap' : 'nowrap',\n justifyContent: alignment,\n alignItems: 'stretch',\n alignContent: 'stretch',\n gap,\n overflowY: props.wrap ? 'hidden' : 'auto',\n // specifiek voor verticale flexbox\n maxHeight:\n typeof props.maxHeight == 'number' || !isNaN(+(props.maxHeight || NaN))\n ? `${props.maxHeight}px`\n : props.maxHeight,\n } as CSSProperties),\n [props.reverse, props.wrap, props.alignment, props.gap, props.maxHeight]\n );\n\n return (\n <div className=\"lbr-flex-vertical\" style={containerStyle}>\n {React.Children.toArray(props.children).map((child, index) => (\n <div className=\"lbr-flex-item\" key={index}>\n {child}\n </div>\n ))}\n </div>\n );\n};\n\n/**\n * Maak een ScrollArea om in een bepaalde richting te kunnen scrollen. De scrollareas maken gebruik van flexbox.\n */\nconst ScrollArea = {\n /** maak een horizontale flexbox container om items naast elkaar (default: van links naar rechts) neer te zetten, met of zonder wrappen\n * @param props\n * @returns ScrollArea in horizontale richting\n * @example <ScrollArea.Horizontal>...</ScrollArea.Horizontal>\n */\n Horizontal,\n /** maak een verticale flexbox container om items onder elkaar (default van boven naar beneden) neer te zetten, met of zonder wrappen\n * @param props\n * @returns ScrollArea in verticale richting\n * @example <ScrollArea.Vertical>...</ScrollArea.Vertical>\n */\n Vertical,\n};\nexport { ScrollArea };\n","import { useEffect, useState, useRef } from 'react';\n\n/** opties voor de useDebounce Hook */\ntype useDebounceHookOptions = {\n /** moet er wel een value-update zijn na de 1e wijziging (Default: false) */\n leading?: boolean;\n /** vertraging (in ms) voor het updaten van de debounced waarde (Default: 500ms) */\n delay: number;\n};\n\n/**\n * debounce-hook voor een value. Kan handig zijn om een zware operatie uit \n * te voeren, bijvoorbeeld op zoeken in een lijst van objecten, gebaseerd op react state.\n * met de cancel-function kan een value-update worden geannuleerd.\n * @param value de debounceable value\n * @param options extra opties\n * @returns de waarde en een cancel-functie\n * @example const { value, cancel } = useDebounce(value, { delay: 1000 });\n */\nfunction useDebouncedValue<T = any>(value: T, options: useDebounceHookOptions = { leading: false, delay: 500 }): readonly [T, () => void] {\n const [_value, setValue] = useState(value);\n const mountedRef = useRef(false);\n const timeoutRef = useRef<number | undefined>(undefined);\n const cooldownRef = useRef(false);\n\n /** annuleer het updaten van de debounce-value */\n const cancel = () => window.clearTimeout(timeoutRef.current);\n\n useEffect(() => {\n if (mountedRef.current)\n if (!cooldownRef.current && options.leading) {\n cooldownRef.current = true;\n setValue(value);\n } else {\n cancel();\n timeoutRef.current = window.setTimeout(() => {\n cooldownRef.current = false;\n setValue(value);\n }, options.delay);\n }\n\n }, [value, options.leading, options.delay]);\n\n useEffect(() => {\n mountedRef.current = true;\n return cancel;\n }, []);\n\n return [_value, cancel] as const;\n}\n\nexport { useDebouncedValue };\nexport type { useDebounceHookOptions };\n","import React from 'react';\n\nexport type UncontrolledMode = 'initial' | 'controlled' | 'uncontrolled';\n\nexport type UncontrolledOptions<T> = {\n value: T | null | undefined;\n defaultValue: T | null | undefined;\n finalValue: T | null | undefined;\n onChange(value: T | null | undefined): void;\n onValueUpdate?(value: T | null | undefined): void;\n rule: (value: T | null | undefined) => boolean;\n};\n\n/** hook voor het managen van state voor 'controlled' en 'uncontrolled' componenten (inputs etc). \n * het is met deze hook mogelijk om een component als 'controlled' EN 'uncontrolled' te gebruiken.\n * @param options.value waarde\n * @param options.defaultValue default waarde\n * @param options.finalValue eindwaarde\n * @param options.onChange callback voor waarde verandering\n * @param options.onValueUpdate callback voor waarde update\n * @param options.rule bepaal welke waarde initieel gebruikt wordt. zie examples\n * @returns [value, setalue, controllerMode]\n *\n * @example \n * const [_value, handleChange] = useUncontrolled({\n * value: VALUE, \n * defaultValue: DEFAULT, \n * finalValue: 'final', \n * onChange: (v) => {console.log(v)}, \n * rule: (v) => typeof v === 'string'\n * });\n * \n * return <input type=\"text\" value={_value} onChange={(evt) => handleChange(evt.target.value)} />\n * \n * // als VALUE = 'oi' && DEFAULT = 'there': defaultValue & finalValue ignored in controlled components, _value == VALUE == 'oi'\n * // als VALUE = null && DEFAULT = 'there': rule() returns 'false', defaultValue is used, _value == defaultValue == 'there'\n * // als VALUE = null && DEFAULT = null: rule() returns 'false' voor beiden, finalValue is used, _value == defaultValue == 'final'\n * \n * @example - uncontrolled & controlled\n * // Uncontrolled\n* <input />\n* <input defaultValue=\"hello\" />\n* <input onChange={() => {}} /> // still possible since value is stored in internal state\n* \n* // Controlled\n* <input value=\"Hello\" onChange={() => {}} />\n\n */\nexport function useUncontrolled<T>({\n value,\n defaultValue,\n finalValue,\n rule,\n onChange,\n onValueUpdate,\n}: UncontrolledOptions<T>): readonly [T | null | undefined, (nextValue: T | null | undefined) => void, UncontrolledMode] {\n // als de rule `true` is, dan is deze component controlled\n const isControlled = rule(value);\n\n // initialize state\n const modeRef = React.useRef<UncontrolledMode>('initial');\n const initialValue = rule(defaultValue) ? defaultValue : finalValue;\n const [uncontrolledValue, setUncontrolledValue] = React.useState(initialValue);\n\n // bepaal de gebruikte waarde\n let definitiveValue = isControlled ? value : uncontrolledValue;\n\n // overgang van controlled naar uncontrolled\n // komt voor als de waarde op null of undefined geset wordt (invalid waarde)\n // in dat geval wordt de finalValue gebruikt.\n if (!isControlled && modeRef.current === 'controlled')\n definitiveValue = finalValue;\n\n modeRef.current = isControlled ? 'controlled' : 'uncontrolled';\n const mode = modeRef.current;\n\n const handleChange = (nextValue: T | null | undefined) => {\n typeof onChange === 'function' && onChange(nextValue);\n\n // Controlled input only triggers onChange event and expects\n // the controller to propagate new value back.\n\n // controlled inputs gebruiken alleen de onChange.Deze krijgen via de parameter `value` de nieuwe waarde\n if (mode === 'uncontrolled')\n setUncontrolledValue(nextValue);\n\n };\n\n React.useEffect(() => {\n if (mode === 'uncontrolled')\n setUncontrolledValue(definitiveValue);\n\n typeof onValueUpdate === 'function' && onValueUpdate(definitiveValue);\n }, [mode, definitiveValue]);\n\n return [definitiveValue, handleChange, modeRef.current] as const;\n}\n","\nimport React from 'react';\nimport { useUncontrolled } from './useUncontrolled';\n\ntype PaginationParams = {\n /** Geselecteerde pagina op 1e render, default = 1 */\n initialPage?: number;\n /** Controlled actieve page number */\n page?: number;\n /** Totaal aantal pages */\n total: number;\n /** aantal directe buren van de geselecteerde pagina (default = 1) */\n siblings?: number;\n /** aantal zichtbare pagina's aan de uiteinden van de paginatie (default = 1) */\n boundaries?: number;\n /** callback voor het wijzigigen van de pagina */\n onChange: (page: number | null | undefined) => void;\n}\n\nexport const DOTS = 'dots';\n\nexport function usePagination({\n total,\n siblings = 1,\n boundaries = 1,\n page,\n initialPage = 1,\n onChange,\n}: PaginationParams) {\n const [activePage, setActivePage] = useUncontrolled({\n value: page,\n onChange,\n defaultValue: initialPage,\n finalValue: initialPage,\n rule: (_page: number | null | undefined) => typeof _page === 'number' && _page <= total,\n });\n\n const setPage = (pageNumber: number) => {\n if (pageNumber <= 0)\n setActivePage(1);\n else if (pageNumber > total)\n setActivePage(total);\n else\n setActivePage(pageNumber);\n };\n\n const next = () => setPage((activePage ?? 0) + 1);\n const prev = () => setPage((activePage ?? 0) - 1);\n const first = () => setPage(1);\n const last = () => setPage(total);\n\n const range = React.useCallback((start: number, end: number): Array<number> => {\n const length = end - start + 1;\n return Array.from({ length }, (_, i) => i + start);\n }, []);\n\n const paginationRange = React.useMemo((): (number | 'dots')[] => {\n // siblings (left/right) + boundaries(left/right) + currentPage + 2*DOTS\n const totalPageNumbers = siblings * 2 + 3 + boundaries * 2;\n\n // als dat er meer zijn dan het totaal, dan gebruiken we totaal\n if (totalPageNumbers >= total)\n return range(1, total);\n\n const leftSiblingIndex = Math.max((activePage ?? 0) - siblings, boundaries);\n const rightSiblingIndex = Math.min((activePage ?? 0) + siblings, total - boundaries);\n\n // puntjes tonen we alleen als er meer dan 1 positie in die richting is\n const shouldShowLeftDots = leftSiblingIndex > boundaries + 2;\n const shouldShowRightDots = rightSiblingIndex < total - (boundaries + 1);\n\n if (!shouldShowLeftDots && shouldShowRightDots) {\n const leftItemCount = siblings * 2 + boundaries + 2;\n return [...range(1, leftItemCount), DOTS, ...range(total - (boundaries - 1), total)];\n }\n\n if (shouldShowLeftDots && !shouldShowRightDots) {\n const rightItemCount = boundaries + 1 + 2 * siblings;\n return [...range(1, boundaries), DOTS, ...range(total - rightItemCount, total)];\n }\n\n return [\n ...range(1, boundaries),\n DOTS,\n ...range(leftSiblingIndex, rightSiblingIndex),\n DOTS,\n ...range(total - boundaries + 1, total),\n ];\n }, [total, siblings, activePage]);\n\n return {\n range: paginationRange,\n active: activePage,\n setPage,\n next,\n prev,\n first,\n last,\n };\n}\n","import { faSearch, faSort, faSortDown, faSortUp } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { Reducer } from 'react';\nimport { useDebouncedValue } from '../../hooks/useDebouncedValue';\nimport { usePagination } from '../../hooks/usePagination';\nimport { AlignmentProp } from '../../loon-react-bulma-types';\n\n// #region DataTable Types\n\n/** De props voor de DataTable Component zelf. */\ntype DataTableProps<T extends unknown> = {\n /** Titels voor de kolommen als die afwijken van de object-properties */\n columns: DataTableColumn<T>[];\n /** header-name van de default-sorteer-kolom (default: 1e kolom die 'sortable' is) */\n defaultSortCol?: string;\n /** (optionele) content voor de header. Verschijnt links van de search-bar */\n headerContent?: React.ReactNode;\n /** De array met daarin de data voor de datatabel */\n data: T[];\n /** welke data-object-property is uniek? Anders wordt de index gebruikt (liever niet, react-performance-reasons)\n * - als string: de property die uniek is: obj.<string>\n * - als function: stel een string samen die uniek is.\n */\n rowIdentifier?: string | ((item: T) => string);\n /** een functie om de classes op een row te zetten, op basis van het object */\n rowClasses?: (item: T, index?: number) => string;\n /** moet de tabel zichzelf wat kleiner maken ? */\n narrow?: boolean;\n /** Is de tabel gestreept? (om-en-om wit/grijze rijen) */\n striped?: boolean;\n /** is de tabel fullwidth ? (default true) */\n fullwidth?: boolean;\n /** is de tabel bordered? */\n bordered?: boolean;\n /** is de tabel hoverbaar (verkleuring rij waar de muis op hangt) */\n hoverable?: boolean;\n /** wat is het maximaal aantal rijen dat zichtbaar is zonder paginatie? Als 0 is er geen maximum aantal rijen (default 0) */\n maxRows?: number;\n /** placeholder voor zoekveld. Als er geen placeholder is (undefined or emptystring), is er geen zoek-veld */\n searchTxt?: string;\n /**\n * (Optionele) eigen zoek-functie. De default-zoek-functie wordt dan vervangen.\n * @param searchTerm de content van het zoekveld\n * @param items de items waarbinnen gezocht moet worden\n * @returns een array met de gefilterde items\n */\n onSearch?: (searchTerm: string, items: T[]) => T[];\n /** terugkoppeling voor een geselecteerde rij.\n * @param item: Het geselecteerde item\n * @param row: de tabel-rij waarop geklikt is (<tr> tag). Om de row 'selected' te laten lijken: toggle de 'is-selected' class\n */\n onRowSelected?(item: T, row: HTMLTableRowElement): void;\n /**\n * Als er geen rijen zijn om te renderen, wordt de ReactNode van deze functie gerendered. Er wordt dan geen lege tabel gerendered, maar een boodschap\n * @param isSearchResult is de no-rows het resultaat van een zoek-actie?\n * @example (isSearch:boolean) => isSearch ? <div>Er zijn geen rijen die voldoen aan uw zoek-opdracht</div> : <div>U heeft geen of een lege data-array opgegeven</div>\n */\n onNoRowsToRender?(isSearchResult: boolean): React.ReactNode;\n};\n\n/** Props voor het samenstellen van de kolommen van de tabel */\ntype DataTableColumn<T extends unknown> = {\n /** naam voor de kolom, als die anders is dan de key-value */\n header?: string;\n /** Sorteren op deze kolom mogelijk? zo ja:\n * - string: sorteer alfabetisch\n * - number: sorteer numeriek\n * - boolean: sorteer op true/false\n * - function: een eigen sorteermechanisme\n */\n sort?: true | false | ((a: T, B: T) => -1 | 0 | 1 | number);\n /** Wat is de object property die bij deze kolom hoort als je wil sorteren\n * - string: de object-property-key --> obj['colValue']\n * - function: samenstellen van de waarde.\n */\n value: string | JSX.Element | ((e: T) => string | JSX.Element);\n /** moet de kolom-content link, rechts of centraal aligned worden (default = 'l') */\n alignment?: AlignmentProp;\n /** een functie om een class per cell toe te voegen */\n columnClasses?: (item: T, index?: number) => string;\n // search?(item: T): boolean;\n};\n\n/** props voor de footer onder de </table>-sluit tag */\ntype DataTableFooterProps = {\n pageCount: number;\n currentPage: number;\n onPageChange: (e: number) => void;\n pagination: {\n range: (number | 'dots')[];\n active: number | null | undefined;\n setPage: (pageNumber: number) => void;\n next: () => void;\n prev: () => void;\n first: () => void;\n last: () => void;\n };\n};\n\n/** DataTable Actions */\ntype DataTableDispatch<T> = {\n /** het type action voor gebruik in de reducer */\n type: 'SET' | 'SORT' | 'SEARCH' | 'PAGE';\n /** de nieuwe waarde (T[]) OF de nieuwe page */\n value: T[] | IDataTableState<T> | number;\n sort?: string;\n};\n/** De State van de DataTable */\ntype IDataTableState<T extends unknown> = {\n /** alle items, alleen aanpassen met type 'SET' of 'SOURCE' */\n items: T[];\n /** items gefilterd, aangepast met sorting en searching */\n filteredItems: T[];\n /** de zichtbare items, altijd een subset van de gefilterde items (spliced obv maxRows en currentPage) */\n visibleItems: T[];\n /** het maximaal aantal rijen (0 voor alles op 1 pagina) */\n maxRows: number;\n // /** het huidige page-number */\n currentPage: number;\n /** de tabelkolommen */\n headers: DataTableColumn<T>[];\n /** de huidige sorteer-header of sorteer-header-reverse */\n sort: string;\n};\n\n// #endregion\n\n/**\n * de Reducer voor gebruik met de DataTable.\n * @generic T het type van de items in de DataTable\n * @param state de huidige state van de DataTable\n * @param action de actie die de state aanpast\n */\nfunction dataTableReducer<T extends unknown>(\n state: IDataTableState<T>,\n action: DataTableDispatch<T>\n): IDataTableState<T> {\n switch (action.type) {\n case 'SET': // zet de gehele content van de tabel opnieuw\n const newState = action.value as IDataTableState<T>;\n return {\n ...state,\n items: [...newState.items],\n filteredItems: [...newState.filteredItems],\n visibleItems: [...newState.filteredItems].splice(0, newState.maxRows),\n currentPage: 1,\n maxRows: newState.maxRows,\n headers: newState.headers.map(headerMapping),\n sort: action.sort!,\n };\n case 'SORT': // items zijn gesorteerd, zet de benodigde arrays\n return {\n ...state,\n sort: action.sort!,\n filteredItems: [...(action.value as T[])],\n visibleItems: [...state.filteredItems].splice((action.value as number) * state.maxRows, state.maxRows),\n };\n case 'SEARCH': // items zijn gezocht binnen de data, zet de arrays die wijzigen\n return {\n ...state,\n currentPage: 1,\n filteredItems: [...(action.value as T[])],\n visibleItems: [...(action.value as T[])].splice(0, state.maxRows),\n };\n case 'PAGE': // de pagina is aangepast, pas alleen de visible-items aan\n return {\n ...state,\n visibleItems: [...state.filteredItems].splice(((action.value as number) - 1) * state.maxRows, state.maxRows),\n currentPage: action.value as number,\n };\n // default:\n // return state;\n }\n}\n\n/**\n * Maak een datatable voor grote hoeveelheden data. Voor kleinere hoeveelheden: gebruik @see{@link Table}.\n * Een DataTable heeft pagination, zoekfunctie en sortering ingebouwd.\n * @param props\n * @returns een datatable.\n * @example\n * const nameSortFn = (a: IUser, b: IUser) => {\n * const aNaam = a.first_name + ' ' + a.last_name;\n * const bNaam = b.first_name + ' ' + b.last_name;\n * return (aNaam < bNaam) ? -1 : 1;\n * };\n *\n * const columns = [\n * { sort: true, value: 'id' },\n * { header: 'Naam', sort: nameSortFn, value: (v: IUser) => `${v.first_name} ${v.last_name}`, },\n * { header: 'Voornaam', sort: false, value: 'first_name' },\n * { header: 'Achternaam', sort: true value: 'last_name' },\n *\n * ];\n *\n * const [data, setData] = useState(tableData);\n * const handleRowClick = (item: IPersoon, rowEl: HTMLTableRowElement) => {\n * console.log(item, rowEl);\n * rowEl.classList.toggle('is-selected');\n * };\n * return (\n * <DataTable<IUser>\n * data={data}\n * columns={columns}\n * onSearch={(term: string, users: IUser[]) => users.filter((u) => u.language.startsWith(term))}\n * onRowSelected={(i, r) => handleRowClick(i, r)}\n * defaultSortCol=\"Naam\"\n * rowClasses={(item: IUser) => (item.first_name.startsWith('C') ? 'is-dangerous' : '')}\n * searchTxt=\"Zoek een persoon ...\"\n * rowIdentifier=\"id\"\n * striped={true}\n * hoverable={true}\n * narrow={false}\n * maxRows={20}\n * bordered={false}\n * onNoRowsToRender={(isSearch:boolean) => isSearch ?\n * <div>Er zijn geen rijen die voldoen aan uw zoek-opdracht</div> :\n * <div>U heeft geen of een lege data-array opgegeven</div>\n * }\n * headerContent={\n * <Button.Primary>Add</Button.Primary>\n * <Button.Warning>Change</Button.Warning>\n * <Button.Success>Refresh</Button.Success>\n * }\n * />\n * );\n *\n */\nfunction DataTable<T extends unknown>(props: DataTableProps<T>): JSX.Element {\n // set de classes voor de table\n let className = 'table';\n const { fullwidth, bordered, narrow, striped, hoverable } = props;\n if (fullwidth) className += ' is-fullwidth';\n if (bordered) className += ' is-bordered';\n if (narrow) className += ' is-narrow';\n if (striped) className += ' is-striped';\n if (hoverable) className += ' is-hoverable';\n\n const [searchTerm, setSearchTerm] = React.useState('');\n let defaultSort = props.defaultSortCol ?? '';\n if (defaultSort === '') {\n const firstCol = props.columns.filter((h) => !!h.sort)[0];\n if (firstCol.header) defaultSort = firstCol.header;\n else if (typeof firstCol.value === 'string') defaultSort = firstCol.value;\n }\n\n // de initial state van de tabel MOET in useReducer opgegeven worden\n const initialStateFn = (): IDataTableState<T> => {\n const initialState: IDataTableState<T> = {\n filteredItems: [...props.data],\n items: [...props.data],\n visibleItems: [...props.data].splice(0, props.maxRows || props.data.length),\n maxRows: props.maxRows || props.data.length,\n currentPage: 1,\n headers: props.columns,\n sort: defaultSort,\n };\n return initialState;\n };\n\n const [dataTableState, setDataTableState] = React.useReducer<\n Reducer<IDataTableState<T>, DataTableDispatch<T>>,\n IDataTableState<T>\n >(dataTableReducer, {} as IDataTableState<T>, initialStateFn);\n\n /** als de data of de columns of de maxRows aangepast wordt, dan moet de gehele state refreshed worden */\n React.useEffect(() => {\n const newState: IDataTableState<T> = {\n items: props.data,\n filteredItems: [],\n visibleItems: [...props.data].splice(0, props.maxRows ?? props.data.length),\n maxRows: props.maxRows || props.data.length,\n currentPage: 1,\n headers: props.columns.map(headerMapping),\n sort: dataTableState.sort,\n };\n newState.filteredItems =\n searchTerm == ''\n ? props.data\n : onSearch(searchTerm, {\n items: props.data,\n headers: props.columns.map(headerMapping),\n });\n\n let reverse = false;\n if (newState.sort) {\n reverse = newState.sort.endsWith('-reverse');\n const sorted: T[] = onSort(newState.sort.replace('-reverse', ''), newState.filteredItems);\n newState.filteredItems = reverse ? sorted.reverse() : sorted;\n }\n\n setDataTableState({ type: 'SET', value: newState, sort: reverse ? newState.sort + '-reverse' : newState.sort });\n }, [props.data, props.columns, props.maxRows]);\n\n /**\n * stel de geselecteerde page in.\n * @param page het geselecteerde pagina nummer (zichtbaar - 1)\n */\n const pageChanged = (page: number) => setDataTableState({ type: 'PAGE', value: page });\n\n /** handel het selecteren van sorteren af */\n const handleSort = (sortCol: string) => {\n const reverse = dataTableState.sort == sortCol;\n const sorted = onSort(sortCol, dataTableState.filteredItems);\n setDataTableState({\n type: 'SORT',\n value: reverse ? sorted.reverse() : sorted,\n sort: reverse ? sortCol + '-reverse' : sortCol,\n });\n };\n\n /**\n * Sorteer de tabel op een bepaalde kolom\n * @param sortColHeader de kolom-key vwaarop gesorteerd moet worden.\n * @returns\n */\n const onSort = React.useCallback(\n (sortColHeader: string, items: T[]): T[] => {\n const sortColumn = dataTableState.headers.find((h) => h.header == sortColHeader && h.sort);\n if (typeof sortColumn!.sort == 'function') return items.sort(sortColumn!.sort);\n else if (sortColumn!.sort)\n try {\n return defaultSortItems<T>(sortColumn!, items);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`DataTable Sorting Error: ${(e as Error).message}`);\n }\n return items;\n },\n [dataTableState.headers]\n );\n\n /** search-change afhandeling */\n const handleSearch = (searchTerm: string) => {\n const searchRslts = props.onSearch ? props.onSearch(searchTerm, dataTableState.items) : onSearch(searchTerm);\n setSearchTerm(searchTerm);\n setDataTableState({ type: 'SEARCH', value: searchRslts });\n };\n\n /**\n * Zoek een bepaalde term of regex in de tabel\n * @param term de zoekterm / regex\n */\n const onSearch = React.useCallback(\n (searchStr: string, newData?: { items: T[]; headers: DataTableColumn<T>[] }): T[] => {\n const rgx = createValidRegex(searchStr);\n const items = newData?.items ?? dataTableState.items; // als de data aangepast is, gebruik dan de nieuwe data\n const headers = newData?.headers ?? dataTableState.headers; // als de headers aangepast zijn, gebruik dan de nieuwe headers\n return items.filter((item) => {\n for (const h of headers) {\n let value: JSX.Element | string | null = null;\n if (typeof h.value == 'function') {\n value = h.value(item);\n if (typeof value != 'string') value = value.toString();\n } else if (typeof h.value == 'string') {\n value = (item as any)[h.value];\n if (value && typeof value != 'string') value = value.toString();\n }\n\n if (typeof value == 'string' && rgx && rgx.test(value)) return true;\n else if (typeof value == 'string' && value.toLowerCase().includes(searchStr.toLowerCase())) return true;\n }\n return false;\n });\n },\n []\n );\n\n /** wat te doen als er een rij geselecteerd is (alleen onRowSelected doen als die gedefinieerd is) */\n const onRowClicked = (item: T, row: HTMLTableRowElement) => {\n if (props.onRowSelected) props.onRowSelected(item, row);\n };\n\n const pagination = usePagination({\n total: Math.ceil(dataTableState.filteredItems.length / dataTableState.maxRows),\n onChange: (p: number | null | undefined) => p && pageChanged(p),\n page: dataTableState.currentPage,\n });\n\n return (\n <React.Fragment>\n {(props.searchTxt || props.headerContent) && (\n <Header\n content={props.headerContent}\n placeholder={props.searchTxt}\n onSearchTermChanged={(term: string) => handleSearch(term)}\n />\n )}\n\n {dataTableState.filteredItems.length != props.data.length && (\n <p className=\"help is-link px-6\">\n Toon {dataTableState.filteredItems.length} van de {props.data.length} rijen\n </p>\n )}\n {dataTableState.visibleItems.length === 0 && props.onNoRowsToRender && props.onNoRowsToRender(searchTerm !== '')}\n\n {dataTableState.visibleItems.length > 0 && (\n <table className={className}>\n <TableHead<T>\n titles={dataTableState.headers}\n onSort={(col: string) => handleSort(col)}\n currentSort={dataTableState.sort}\n />\n <TableBody<T>\n columns={dataTableState.headers}\n data={dataTableState.visibleItems}\n rowClasses={props.rowClasses}\n rowIdentifier={props.rowIdentifier}\n onRowSelected={(i, r) => onRowClicked(i, r)}\n />\n </table>\n )}\n\n {dataTableState.maxRows < dataTableState.filteredItems.length && (\n <Footer\n pagination={pagination}\n pageCount={0}\n currentPage={dataTableState.currentPage}\n onPageChange={(num: number) => pageChanged(num)}\n />\n )}\n </React.Fragment>\n );\n}\n\n/** <tbody> & contents */\nfunction TableBody<T extends unknown>({\n columns,\n data,\n rowIdentifier,\n rowClasses,\n onRowSelected,\n}: {\n columns: DataTableColumn<T>[];\n data: T[];\n rowIdentifier?: number | string | ((item: T) => number | string);\n rowClasses?: (item: T, index?: number) => string;\n onRowSelected: (item: T, row: HTMLTableRowElement) => void;\n}): JSX.Element {\n const [rows] = useDebouncedValue(data, { delay: 200 });\n\n return (\n <tbody>\n {rows.map((obj: T, rowIndex: number) => {\n const rowClass = typeof rowClasses == 'function' ? rowClasses(obj, rowIndex) : rowClasses;\n return (\n <tr\n className={rowClass}\n key={typeof rowIdentifier == 'function' ? rowIdentifier(obj) : (obj as any)[rowIdentifier!]}\n onClick={(e) => onRowSelected(obj, e.currentTarget)}\n >\n {columns.map((col: DataTableColumn<T>, cellIndex: number) => {\n const val =\n typeof col.value == 'string'\n ? (obj as any)[col.value].toString()\n : typeof col.value == 'function' && col.value(obj);\n let align: 'left' | 'right' | 'center' = 'left';\n if (col.alignment == 'r') align = 'right';\n else if (col.alignment == 'c') align = 'center';\n const cellClass = col.columnClasses ? col.columnClasses(obj, cellIndex) : undefined;\n return (\n <td className={cellClass} align={align} key={cellIndex}>\n {val}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n );\n}\n\n/** <thead> & contents */\nfunction TableHead<T extends unknown>({\n titles,\n onSort,\n currentSort,\n}: {\n titles: DataTableColumn<T>[];\n onSort: (sortOn: string) => void;\n currentSort: string;\n}): JSX.Element {\n return (\n <thead>\n <tr role=\"tableheader\">\n {titles.map((h, i) => {\n let align: 'left' | 'right' | 'center' = 'left';\n if (h.alignment == 'r') align = 'right';\n else if (h.alignment == 'c') align = 'center';\n\n const key = h.header ? h.header + '-' + i : i;\n return h.sort && h.header ? (\n <th role=\"sort\" className=\"is-sortable\" align={align} key={key} onClick={() => onSort(h.header!)}>\n <span className=\"icon\">\n {currentSort == h.header && <FontAwesomeIcon icon={faSortDown} />}\n {currentSort == h.header + '-reverse' && <FontAwesomeIcon icon={faSortUp} />}\n {currentSort != h.header && currentSort != h.header + '-reverse' && <FontAwesomeIcon icon={faSort} />}\n </span>\n <span>{h.header}</span>\n </th>\n ) : (\n <th align={align} key={key}>\n {h.header}\n </th>\n );\n })}\n </tr>\n </thead>\n );\n}\n\n/** header boven de tabel met daarin zoek-functie */\nfunction Header({\n placeholder,\n content,\n onSearchTermChanged,\n}: {\n placeholder?: string;\n content?: React.ReactNode;\n onSearchTermChanged: (e: string) => void;\n}): JSX.Element {\n return (\n <div className=\"datatable-header is-flex flex-direction-row is-flex-wrap-wrap is-justify-content-space-evenly is-align-items-stretch mx-3\">\n <div className=\"is-flex-grow-1 is-flex-shrink-1\">{content}</div>\n <div className=\"is-flex-grow-1 is-flex-shrink-1\"></div>\n {placeholder && (\n <div className=\"field is-flex-grow-1 is-flex-shrink-1 ml-3\">\n <label className=\"is-sr-only\" htmlFor=\"datatable-search-field\">\n Zoek in tabel\n </label>\n <div className=\"control has-icons-left is-expanded\">\n <span className=\"icon is-left\">\n <FontAwesomeIcon size=\"sm\" icon={faSearch} />\n </span>\n\n <input\n id=\"datatable-search-field\"\n style={{ minWidth: '200px' }}\n className=\"input is-fullwidth is-rounded\"\n placeholder={placeholder}\n onChange={(e) => onSearchTermChanged(e.target.value)}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * De footer bevat de pagination voor de datatable\n * @param props\n * @returns een footer met pagination\n */\nfunction Footer({ pagination }: DataTableFooterProps): JSX.Element {\n let dotscounter = 0;\n return (\n <div className=\"datatable-footer pagination is-centered is-small px-6 mb-3\" role=\"pagination\">\n <div className=\"pagination-list\">\n {pagination.range.map((p) =>\n p === 'dots' ? (\n <span key={p + dotscounter++} className=\"pagination-ellipsis\">\n …\n </span>\n ) : (\n <button key={p} className=\"pagination-link\" onClick={() => pagination.setPage(p)}>\n {p}\n </button>\n )\n )}\n </div>\n </div>\n );\n}\n\n/**\n * controleer of een regexp valid is.\n * @param s een regex of regex-string\n * @returns valid regex?\n */\nfunction createValidRegex(s: string): RegExp | null {\n if (s.startsWith('/') && s.endsWith('/')) return new RegExp(s.replaceAll('/', ''));\n return null;\n}\n\n/** Speciale functie voor het mappen van de column headers.\n * Dus gebruiken in: 'headers.map(...)'\n */\nfunction headerMapping<T extends unknown>(col: DataTableColumn<T>) {\n if (!col.header && typeof col.value == 'string') col.header = col.value;\n else if (!col.header) {\n col.header = '';\n col.sort = false;\n }\n return col;\n}\n\nfunction defaultSortItems<T extends unknown>(sortColumn: DataTableColumn<T>, items: T[]) {\n return items.sort((a: T, b: T): number => {\n let valA: number | boolean | string | JSX.Element = '';\n let valB: number | boolean | string | JSX.Element = '';\n if (typeof sortColumn!.value === 'function') {\n valA = sortColumn!.value(a);\n valB = sortColumn!.value(b);\n } else if (typeof sortColumn!.value === 'string') {\n valA = (a as any)[sortColumn!.value];\n valB = (b as any)[sortColumn!.value];\n } else throw new Error('[V] Voor sortering van JSX-elementen MOET je een eigen functie gebruiken');\n\n switch (typeof valA) {\n case 'boolean':\n return valA === valB ? 0 : valA ? -1 : 1;\n case 'number':\n return +valA - +valB;\n case 'string':\n return valA < valB ? -1 : valA > valB ? 1 : 0;\n default:\n throw new Error('[A, B] Voor sortering van JSX-elementen MOET je een eigen functie gebruiken');\n }\n });\n}\n\nexport { DataTable };\nexport type { DataTableProps, DataTableColumn };\n","import { IconProp, SizeProp as faSizeProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React from 'react';\nimport { ColorProp, SizeProp } from '../../loon-react-bulma-types';\n\ntype IconProps = {\n /** react font-awesome icon\n * - string: geef de gehele font-awesome-class op. 'flip', 'animate', 'rotation' worden dan al gebruikt in deze class.\n * - any: geef een react IconProp object door.\n */\n icon: string | IconProp;\n /** de icon-grootte */\n size?: SizeProp;\n /** de kleur voor het icoon */\n color?: ColorProp;\n /** hoeveel graden moet het icoon gedraait zijn (0 - 360) */\n rotation?: 90 | 180 | 270;\n /** horizontaal, verticaal of beiden gespiegeld */\n flip?: 'horizontal' | 'vertical' | 'both';\n /** moet het icon spinnen of pulseren */\n animate?: 'spin' | 'pulse';\n};\n\n/**\n * Toon een Font Awesome Icon\n * default: 1.5rem x 1.5rem, de font-size is inherited.\n * @returns een Icon element\n * @example\n * <Icon icon=\"fas fa-flag\" />\n * <Icon icon={faFlag} /> // import { faFlag } from '@fortawesome/free-solid-svg-icons';\n */\nconst Icon = (props: IconProps): JSX.Element => {\n let classes = 'icon';\n let faSize = '1x';\n\n if (props.color === 's') classes += ' has-text-success';\n else if (props.color === 'd') classes += ' has-text-danger';\n else if (props.color === 'w') classes += ' has-text-warning';\n else if (props.color === 'p') classes += ' has-text-primary';\n else if (props.color === 'i') classes += ' has-text-info';\n else if (props.color === 'l') classes += ' has-text-link';\n\n switch (props.size) {\n case 's':\n faSize = 'sm';\n classes += ' is-small';\n break;\n case 'm':\n faSize = '1x';\n classes += ' is-normal';\n break;\n case 'l':\n faSize = '2x';\n classes += ' is-medium';\n break;\n case 'xl':\n faSize = '3x';\n classes += ' is-large';\n break;\n default:\n faSize = '1x';\n classes += ' is-normal';\n break;\n }\n\n if (typeof props.icon === 'string')\n return (\n <span className={classes} role=\"icon\">\n <i className={props.icon}></i>\n </span>\n );\n else\n return (\n <span className={classes} role=\"icon\">\n <FontAwesomeIcon\n icon={props.icon}\n size={faSize as faSizeProp}\n rotation={props.rotation}\n flip={props.flip}\n spin={props.animate === 'spin'}\n pulse={props.animate === 'pulse'}\n />\n </span>\n );\n};\n\ntype IconTextProps = {\n /** react font-awesome icon */\n icon: string | any;\n /** de icon-grootte */\n size?: SizeProp;\n /** de kleur voor het icoon */\n color?: ColorProp;\n /** hoeveel graden moet het icoon gedraait zijn (0 - 360) */\n rotation?: 90 | 180 | 270;\n /** horizontaal, verticaal of beiden geflipt */\n flip?: 'horizontal' | 'vertical' | 'both';\n /** moet het icon spinnen of pulseren */\n animate?: 'spin' | 'pulse';\n /** tekst bij het icon */\n children: React.ReactNode;\n};\n/**\n * Toon een Font Awesome Icon met bijhorende tekst. De tekst krijgt dezeflde kleur als de icon\n * IconText is een inline-flex element dus kan in een paragraaf worden gebruikt.\n * default: 1.5rem x 1.5rem, de font-size is inherited.\n * @returns een Icon met tekst in dezelfde kleur als het icon\n * @example\n * <IconText icon=\"fas fa-flag\">Flag</IconText>\n * <IconText icon={faFlag}>Flag</IconText> // import { faFlag } from '@fortawesome/free-solid-svg-icons';\n */\nconst IconText = (props: IconTextProps): JSX.Element => {\n let classes = 'icon-text';\n\n if (props.color === 's') classes += ' has-text-success';\n else if (props.color === 'd') classes += ' has-text-danger';\n else if (props.color === 'w') classes += ' has-text-warning';\n else if (props.color === 'p') classes += ' has-text-primary';\n else classes += ' has-text-link';\n\n return (\n <span className={classes} role=\"icon-with-text\">\n <Icon\n icon={props.icon}\n size={props.size}\n color={props.color}\n rotation={props.rotation}\n flip={props.flip}\n animate={props.animate}\n />\n <span>{props.children}</span>\n </span>\n );\n};\n\nexport { Icon, IconText };\nexport type { IconProps, IconTextProps };\n","import React from 'react';\nimport { ColorProp, IndicatorPositionProp } from '../../loon-react-bulma-types';\n\ntype IndicatorProps = {\n /** positie van de indicator (default = 'tr' (top-right)) */\n position?: IndicatorPositionProp;\n /** Het element waar de indicator op moet */\n children: React.ReactNode;\n /** label voor op de indicator (optioneel) */\n label?: string | React.ReactNode;\n /** kleur van de indicator (default = 'l' ('link')) */\n color?: ColorProp;\n /** extra classes voor de indicator container (element waar indicator & target-element inzitten) (optioneel) */\n className?: string;\n /** tooltip voor indicator (optioneel) */\n tooltip?: string;\n};\n\n/**\n * Een indicator toont een badge op een ander element. Er zijn meerdere posities. De indicator moet als wrapper voor het gewenste element gebruikt worden.\n * @param props Indicator Props\n * @returns Een element met een indicator\n * @example\n * <Indicator position=\"tl\" color=\"p\" tooltip=\"There are 5 new messages\">\n * <Button>Check messages</Button>\n * 5\n * </Indicator>\n */\nfunction Indicator({ label, className, position, color, tooltip, children }: IndicatorProps): JSX.Element {\n let indicatorClasses = 'indicator';\n if (position === 'tl' || position === 'top-left') indicatorClasses += ' is-top-left';\n else if (position === 'tc' || position === 'top-center') indicatorClasses += ' is-top-center';\n else if (position === 'bl' || position === 'bottom-left') indicatorClasses += ' is-bottom-left';\n else if (position === 'br' || position === 'bottom-right') indicatorClasses += ' is-bottom-right';\n else if (position === 'bc' || position === 'bottom-center') indicatorClasses += ' is-bottom-center';\n else if (position === 'lc' || position === 'left-center') indicatorClasses += ' is-left-center';\n else if (position === 'rc' || position === 'right-center') indicatorClasses += ' is-right-center';\n else indicatorClasses += ' is-top-right'; // top-right is default\n\n if (color === 'p') indicatorClasses += ' is-primary';\n else if (color === 'i') indicatorClasses += ' is-info';\n else if (color === 'w') indicatorClasses += ' is-warning';\n else if (color === 'd') indicatorClasses += ' is-danger';\n else if (color === 's') indicatorClasses += ' is-success';\n else indicatorClasses += ' is-link';\n\n return (\n <div className={className}>\n <div className={indicatorClasses} title={tooltip}>\n {label}\n </div>\n {children}\n </div>\n );\n}\n\nexport { Indicator };\nexport type { IndicatorProps };\n","import React from 'react';\n\n/**\n * Toon een Keyboard-Key als een 'key' op een keyboard.\n * @param params\n * @returns een element dat lijkt op een keyboard-key\n * @example <Kbd>A</Kbd>\n */\nfunction Kbd({\n children,\n className,\n}: {\n /** optionele extra class */\n className?: string;\n /** content van de key */\n children: React.ReactNode;\n}): JSX.Element {\n const classNames = `kbd ${className ?? ''}`.trim();\n return <kbd className={classNames}>{children}</kbd>;\n}\n\n/**\n * Toont meerdere keyboard-keys, gescheiden door een teken (deafult = '+')\n * @param props\n * @returns een rijtje keyboard-keys\n * @example <Kbds keys={['ctrl+S', 'shift+D']} />\n */\nfunction Kbds({\n keys,\n separator,\n className,\n}: {\n /** weer te geven keys als string */\n keys: string[];\n /** de separator van de keys, default '+' */\n separator?: string;\n /** optionele className */\n className?: string;\n}): JSX.Element {\n const children = keys.map((key: string, index: number) => {\n if (index === keys.length - 1) return <Kbd key={key}>{key}</Kbd>;\n else\n return (\n <React.Fragment key={key}>\n <Kbd>{key}</Kbd>\n <span>{separator ?? '+'}</span>\n </React.Fragment>\n );\n });\n\n return <span className={className}>{children}</span>;\n}\n\nexport { Kbd, Kbds };\n","import { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg-icons';\nimport React from 'react';\nimport { Icon } from '../Icon/Icon';\n\n/** ALLEEN VOOR INTERN MENU GEBRUIK */\ntype MenuInternProps = {\n activeItem: string;\n onInternClick: (id: string) => void;\n};\n\ntype MenuProps = {\n /** welk item is het initiële geselecteerde item */\n initialItem?: string;\n /** de content van het menu (<MenuItem>, <ExpandableMenuItem> or <MenuItemGroup>) */\n children: React.ReactNode;\n /** callback voor menu-item selectie */\n onMenuItemClicked: (item: string) => void;\n};\n\ntype MenuItemProps = {\n /** (optional) naam voor menu-item dat geselecteert wordt. Als niet opgegevens, wordt de string-content van het item gebruikt */\n name?: string;\n /** content van het item */\n children: React.ReactNode;\n};\n\ntype MenuItemGroupProps = {\n /** label voor een groep MenuItems */\n label: string;\n /** items in de ze groep (<MenuItem> or <ExpandableMenuItem>) */\n children: React.ReactNode;\n};\n\ntype ExpandableMenuItemProps = {\n /** De content van het menu-item (MenuItem components) */\n children: React.ReactNode;\n /** Label voor exapnd/collapse */\n label: string;\n /** Begint de lijst expanded? */\n startExpanded?: boolean;\n /** click handler */\n onClick?: (label: string, e?: React.MouseEvent) => void;\n};\n\n/**\n * Render een Menu met <Menu.ItemGroup>, <Menu.Item> en <Menu.ExpandableItem> children\n * @param props\n * @returns een Menu\n * @example\n * <Menu initialItem=\"1\">\n * <Menu.ItemGroup label=\"Groep 1\">\n * <Menu.Item name=\"1\">Item 1</Menu.Item>\n * <Menu.Item name=\"2\">Item 2</Menu.Item>\n * </Menu.ItemGroup>\n * <Menu.ItemGroup label=\"Groep 2\">\n * ...\n * </Menu.ItemGroup>\n * </Menu>\n */\nconst Menu = (props: MenuProps): JSX.Element => {\n const [activeItem, setActiveItem] = React.useState(props.initialItem ?? '');\n\n const handleMenuItemClick = (item: string) => {\n props.onMenuItemClicked(item);\n setActiveItem(item);\n };\n // console.log(props);\n const menuContent = React.Children.map(props.children, (child: any) => {\n if (child.type === MenuItem)\n return (\n <ul>\n <InternMenuItem {...child.props} activeItem={activeItem} onInternClick={handleMenuItemClick} />\n </ul>\n );\n else if (child.type === MenuItemGroup)\n return <InternMenuItemGroup {...child.props} activeItem={activeItem} onInternClick={handleMenuItemClick} />;\n else if (child.type === ExpandableMenuItem)\n return (\n <ul className=\"menu-list\">\n <InternExpandableMenuItem {...child.props} activeItem={activeItem} onInternClick={handleMenuItemClick} />\n </ul>\n );\n else return child;\n });\n\n return (\n <aside className=\"menu\" role=\"menu\">\n {menuContent}\n </aside>\n );\n};\n\n/** menu item group */\nconst MenuItemGroup = ({ label, children }: MenuItemGroupProps): JSX.Element => (\n <div>\n {label}\n {children}\n </div>\n);\n/** ALLEEN VOOR INTERN MENU GEBRUIK */\nconst InternMenuItemGroup = (props: MenuItemGroupProps & MenuInternProps): JSX.Element => (\n <React.Fragment>\n <p className=\"menu-label\">{props.label}</p>\n <ul className=\"menu-list\">\n {React.Children.map(props.children, (child: any) => {\n if (child.type.name == 'MenuItem')\n return <InternMenuItem {...child.props} activeItem={props.activeItem} onInternClick={props.onInternClick} />;\n else if (child.type.name == 'ExpandableMenuItem')\n return (\n <InternExpandableMenuItem\n {...child.props}\n activeItem={props.activeItem}\n onInternClick={props.onInternClick}\n />\n );\n else return child;\n })}\n </ul>\n </React.Fragment>\n);\n\n/** een niet-selecteerbaar maar wel uitklapbaar menu-item met children (MenuItems) */\nconst ExpandableMenuItem = (props: ExpandableMenuItemProps): JSX.Element => <div>{props.children}</div>;\n/** ALLEEN VOOR INTERN MENU GEBRUIK */\nconst InternExpandableMenuItem = (props: ExpandableMenuItemProps & MenuInternProps): JSX.Element => {\n const [expanded, setExpanded] = React.useState(props.startExpanded ?? false);\n\n const handleOnClick = (e: React.MouseEvent) => {\n props.onClick && props.onClick(props.label, e);\n setExpanded(!expanded);\n };\n\n const children = React.Children.map(props.children, (child: any) => {\n if (child.type.name == 'MenuItem')\n return <InternMenuItem {...child.props} activeItem={props.activeItem} onInternClick={props.onInternClick} />;\n else return child;\n });\n\n return (\n <li>\n <span className=\"menu-list-item\" onClick={handleOnClick}>\n <Icon color=\"i\" size=\"s\" icon={expanded ? faChevronUp : faChevronDown} />\n <span> {props.label}</span>\n </span>\n {expanded && <ul>{children}</ul>}\n </li>\n );\n};\n\n/** selecatble menuitem */\nconst MenuItem = ({ name, children }: MenuItemProps): JSX.Element => (\n <span>\n {name}\n {children}\n </span>\n);\n/** ALLEEN VOOR INTERN MENU GEBRUIK */\nconst InternMenuItem = (props: MenuItemProps & MenuInternProps): JSX.Element => {\n const id =\n props.name ??\n React.Children.toArray(props.children)\n .filter((c) => typeof c == 'string')[0]\n .toString();\n return (\n <li onClick={() => props.onInternClick(id)} id={id}>\n <span className={props.activeItem == id ? 'menu-list-item is-active' : 'menu-list-item'}>{props.children}</span>\n </li>\n );\n};\n\n/**\n * Een selecteerbaar menu-item in het Menu\n * @param props\n * @return een selecteerbaar menu-item\n * @example <Menu.Item name=\"1\">Item 1</Menu.Item>\n */\nMenu.Item = MenuItem;\n\n/**\n * Groepeer Menu Items in een lijstje met een label om te laten weten dat ze bij elkaar horen\n * @param props\n * @returns een MenuItemGroup\n * @example\n * <Menu.ItemGroup label=\"Groep 1\">\n * <Menu.Item name=\"1\">Item 1</Menu.Item>\n * <Menu.Item name=\"2\">Item 2</Menu.Item>\n * </Menu.ItemGroup>\n */\nMenu.ItemGroup = MenuItemGroup;\n\n/**\n * Een niet-selecteerbare, maar wel collapsable / expandable menu item met een lijstje children\n * @param props\n * @returns een collapsible menu item\n * @example\n * <Menu.ExpandableItem label=\"Groep 1\">\n * <Menu.Item name=\"1\">Item 1</Menu.Item>\n * <Menu.Item name=\"2\">Item 2</Menu.Item>\n * </Menu.ExpandableItem>\n */\nMenu.ExpandableItem = ExpandableMenuItem;\n\nexport { Menu };\nexport type { MenuProps, MenuItemProps, MenuItemGroupProps };\n","import React from 'react';\nimport {\n faExclamation as warningIcon,\n faInfo as infoIcon,\n faExclamationTriangle as dangerIcon,\n faCheck as successIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ColorProp, SizeProp } from '../../loon-react-bulma-types';\n\ntype MessageProps = {\n /** content van de message */\n children: React.ReactNode;\n /** Optionele titel voor de message */\n title?: string | undefined;\n /** de grootte van de tekst in de messages (default = undefined|'m') */\n size?: SizeProp;\n};\n\n/** maak de uiteindelijke message */\n/**\n * Zelf regelbare message.\n * @param props\n * @returns een message\n * @example <Message color=\"p\" size=\"l\" tooltip=\"This is a tooltip\">This is a message</Message>\n */\nconst Message = ({ children, title, size, color }: MessageProps & { color?: ColorProp }): JSX.Element => {\n let classes = 'message';\n let icon = infoIcon;\n\n switch (color) {\n case 's':\n classes += ' is-success';\n icon = successIcon;\n break;\n case 'd':\n classes += ' is-danger';\n icon = dangerIcon;\n break;\n case 'w':\n classes += ' is-warning';\n icon = warningIcon;\n break;\n case 'p':\n classes += ' is-primary';\n icon = infoIcon;\n break;\n case 'l':\n classes += ' is-link';\n icon = infoIcon;\n break;\n // case 'i': // DIT IS DE DEFAULT\n default:\n classes += ' is-info';\n icon = infoIcon;\n break;\n }\n\n if (size === 's') classes += ' is-small';\n else if (size === 'l') classes += ' is-medium';\n else if (size === 'xl') classes += ' is-large';\n\n return (\n <article className={classes}>\n {title && <Header title={title} icon={icon} />}\n <Body hasHeader={!!title} icon={icon} size={size}>\n {children}\n </Body>\n </article>\n );\n};\n\n/**\n * Maakt de header\n * @param props\n * @returns message-header\n */\nconst Header = ({ title, icon }: { title: string; icon: any }): JSX.Element => {\n return (\n <div className=\"message-header\" data-testid=\"message-header\">\n <p>\n <span className=\"icon mr-3\">\n <FontAwesomeIcon icon={icon} />\n </span>\n {title}\n </p>\n </div>\n );\n};\n\n/**\n * Maakt de body\n * @param props\n * @returns message-body\n */\nconst Body = ({\n children,\n hasHeader,\n icon,\n size,\n}: {\n children: any;\n hasHeader: boolean;\n icon?: any;\n size?: SizeProp;\n}): JSX.Element => {\n let iconClasses = 'icon';\n if (size === 's') iconClasses += ' mr-1 is-small';\n else if (size === 'l' || size === 'xl') iconClasses += ' is-large';\n else iconClasses += ' mr-1 is-medium';\n\n return (\n <div className=\"message-body\" data-testid=\"message-body\">\n {hasHeader ? (\n children\n ) : (\n <div>\n <span className={iconClasses} style={{ float: 'left' }}>\n <FontAwesomeIcon icon={icon} />\n </span>\n {children}\n </div>\n )}\n </div>\n );\n};\n\n/** een primary-colored message\n * @param props props\n * @returns een primary-colored message\n * @example <Message color=\"p\" size=\"l\" tooltip=\"This is a tooltip\">This is a primary message</Message>\n */\nMessage.Primary = (props: MessageProps): JSX.Element => <Message {...props} color=\"p\" />;\n\n/** een success-colored message\n * @param props props\n * @returns een success-colored message\n * @example <Message color=\"s\" size=\"l\" tooltip=\"This is a tooltip\">This is a success message</Message>\n */\nMessage.Success = (props: MessageProps): JSX.Element => <Message {...props} color=\"s\" />;\n\n/** een danger-colored message\n * @param props props\n * @returns een danger-colored message\n * @example <Message color=\"d\" size=\"l\" tooltip=\"This is a tooltip\">This is a danger message</Message>\n */\nMessage.Danger = (props: MessageProps): JSX.Element => <Message {...props} color=\"d\" />;\n\n/** een warning-colored message\n * @param props props\n * @returns een warning-colored message\n * @example <Message color=\"w\" size=\"l\" tooltip=\"This is a tooltip\">This is a warning message</Message>\n */\nMessage.Warning = (props: MessageProps): JSX.Element => <Message {...props} color=\"w\" />;\n\n/** een info-colored message (OOK de default)\n * @param props props\n * @returns een info-colored message\n * @example <Message color=\"i\" size=\"l\" tooltip=\"This is a tooltip\">This is a info message</Message>\n */\nMessage.Info = (props: MessageProps): JSX.Element => <Message {...props} color=\"i\" />;\n\n/** een link-colored message\n * @param props props\n * @returns een link-colored message\n * @example <Message color=\"l\" size=\"l\" tooltip=\"This is a tooltip\">This is a link message</Message>\n */\nMessage.Link = (props: MessageProps): JSX.Element => <Message {...props} color=\"l\" />;\n\nexport { Message };\nexport type { MessageProps };\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","import warning from 'warning';\n\n/**\n * prints a message to the console if in development mode OR when force is true\n * @param msg warning message\n */\nexport const warnPackageUser = (msg: string, force: boolean = false, ...args: any[]) => {\n if (force || process.env.NODE_ENV == 'development')\n warning(false, `[loon-react-bulma] ${msg}`, args);\n};\n","import React from 'react';\nimport { SizeProp } from '../..';\nimport { warnPackageUser } from '../../utils/warn-dev-util';\n\ntype ModalProps = {\n /** content van de modal. Als deze te lang wordt, wordt hij scrollable */\n children: React.ReactNode;\n /**\n * Afhandeling van de dismiss van de modal\n * @param e event\n */\n onDismiss(e?: any): any;\n /** de grootte van de modal: met SizeProp of een string. ( DEFAULT = 'm', 800px)\n * - SizeProp: s: 600px, m: 800px, l: 1000px, xl: 1200px\n * - string: '834px', '50%, 60em', '100%'\n */\n size?: SizeProp | string;\n};\n\n/**\n * Een modal-component. Als een modal ene Foot en een Head heeft, wordt de rest automatisch toegevoegd in een Body\n * @param props modal props\n * @returns een modal\n * @example\n * <Modal onDismiss={handleDismiss}>Modal without head and foot, all body</Modal>\n *\n * <Modal onDismiss={handleDismissModal} size=\"m\">\n * <Modal.Head>Optional Modal Head</Modal.Head>\n * <Modal.Body>Optional Modal Body</Modal.Body>\n * <Modal.Foot>Optional Modal Foot</Modal.Foot>\n * </Modal>\n */\nconst Modal = (props: ModalProps): JSX.Element => {\n const onCloseModal = (e?: any) => props.onDismiss(e);\n\n React.useEffect(() => {\n document.documentElement.classList.add('is-clipped');\n return () => document.documentElement.classList.remove('is-clipped');\n }, []);\n const size = props.size ?? 'm';\n let modalWidth = '800px';\n if (size === 's') modalWidth = '600px';\n else if (size === 'm') modalWidth = '800px';\n else if (size === 'l') modalWidth = '1000px';\n else if (size === 'xl') modalWidth = '1200px';\n else modalWidth = size;\n\n const children = React.Children.map(props.children, (child: any) => {\n if (!child) return null;\n else if (child.type === Head) return <InternHead {...child.props} />;\n else if (child.type === Body) return <InternBody {...child.props} />;\n else if (child.type === Foot) return <InternFoot {...child.props} />;\n else return <InternBody>{child}</InternBody>;\n })?.sort((a: any, b: any) => {\n if (a.type.name === 'InternHead') return -1;\n else if (a.type.name === 'InternBody' && b.type.name === 'InternHead') return 1;\n else if (a.type.name === 'InternBody' && b.type.name === 'InternFoot') return -1;\n else if (a.type.name === 'InternFoot') return 1;\n return 0;\n });\n\n if (!children || children?.length === 0) warnPackageUser('<Modal> A Modal needs at least one child');\n else if (children.filter((c: any) => c.type === InternBody).length > 1)\n warnPackageUser('<Modal> A modal should have only one body. Wrap multiple children into a <Modal.Body>-tag.');\n\n return (\n <React.Fragment>\n <div className=\"modal is-active\" data-testid=\"modal\">\n <div className=\"modal-background\" data-testid=\"modal-bg\"></div>\n <div\n className=\"modal-content bulma-box modal-container\"\n data-testid=\"modal-content\"\n style={{ width: modalWidth }}\n >\n {children}\n </div>\n <button className=\"modal-close is-large\" aria-label=\"close\" onClick={(e: any) => onCloseModal(e)}></button>\n </div>\n </React.Fragment>\n );\n};\n\nconst Head = (props: { children: React.ReactNode }): JSX.Element => <div>{props.children}</div>;\nconst InternHead = (props: { children: React.ReactNode }): JSX.Element => (\n <div className=\"modal-header\" data-testid=\"modal-header\">\n {props.children}\n </div>\n);\n\nconst Body = (props: { children: React.ReactNode }) => <div>{props.children}</div>;\nconst InternBody = (props: { children: React.ReactNode }) => (\n <div className=\"modal-body\" data-testid=\"modal-body\">\n {props.children}\n </div>\n);\n\nconst Foot = (props: { children: React.ReactNode }) => <div>{props.children}</div>;\nconst InternFoot = (props: { children: React.ReactNode }) => (\n <div className=\"modal-footer\" data-testid=\"modal-footer\">\n {props.children}\n </div>\n);\n\n/**\n * een niet-scrollende, altijd zichtbare head voor de modal\n * @param props\n * @returns modal head\n * @example <Modal.Head>Optional Modal Head</Modal.Head>\n */\nModal.Head = Head;\n\n/**\n * een scrollende body voor de modal\n * @param props\n * @returns modal body\n * @example <Modal.Body>Modal Body</Modal.Body>\n */\nModal.Body = Body;\n\n/**\n * een niet-scrollende, altijd zichtbare foot voor de modal\n * @param props props\n * @returns modal foot\n * @example <Modal.Foot>Optional Modal Foot</Modal.Foot>\n */\nModal.Foot = Foot;\n\nexport { Modal };\nexport type { ModalProps };\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faExclamation as warningIcon,\n faInfo as infoIcon,\n faExclamationTriangle as dangerIcon,\n faCheck as successIcon,\n faTimesCircle as closeIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { ColorProp } from '../../loon-react-bulma-types';\n\n/**\n * Een instelbare notificatie. Default is een info-notificatie\n * @param props\n * @returns notificatie\n * @example <Notification>Hello World</Notification>\n */\nconst Notification = (props: NotificationProps & { color?: ColorProp }): JSX.Element => {\n const timer =\n props.autoDismissAfter && props.autoDismissAfter > 0\n ? setTimeout(() => handleDismiss(null), props.autoDismissAfter)\n : null;\n const [dismissTimer] = React.useState<NodeJS.Timeout | null>(timer);\n\n React.useEffect(() => () => dismissTimer ? clearTimeout(dismissTimer) : undefined, [dismissTimer]);\n\n const handleDismiss = (e?: any) => {\n if (dismissTimer) clearTimeout(dismissTimer);\n props.onDismiss(e);\n };\n\n let classes = 'notification is-light';\n let icon = infoIcon;\n switch (props.color) {\n case 's':\n classes += ' is-success';\n icon = successIcon;\n break;\n case 'd':\n classes += ' is-danger';\n icon = dangerIcon;\n break;\n case 'w':\n classes += ' is-warning';\n icon = warningIcon;\n break;\n case 'p':\n classes += ' is-primary';\n icon = infoIcon;\n break;\n case 'l':\n classes += ' is-link';\n icon = infoIcon;\n break;\n // case 'i': // IS DE DEFAULT\n default:\n classes += ' is-info';\n icon = infoIcon;\n break;\n }\n\n return (\n <article className={classes}>\n <DismissButton color={props.color ?? 'i'} onDismiss={(e) => handleDismiss(e)} />\n <NotificationContent icon={icon}>{props.children}</NotificationContent>\n </article>\n );\n};\n\n/**\n * Render de dismiss-button met state-update voor hovering.\n * @param props\n * @returns een dismiss button voor notificaties\n * @example <DismissButton onDismiss={handleDismiss} />\n */\nfunction DismissButton({ color, onDismiss }: { onDismiss(e: any): any; color: ColorProp }): JSX.Element {\n const [hovered, setHovered] = React.useState(false);\n let iconClasses = 'icon';\n if (color === 's') iconClasses += hovered ? ' has-text-success-dark' : ' has-text-success';\n else if (color === 'd') iconClasses += hovered ? ' has-text-danger-dark' : ' has-text-danger';\n else if (color === 'w') iconClasses += hovered ? ' has-text-warning-dark' : ' has-text-warning';\n else if (color === 'p') iconClasses += hovered ? ' has-text-primary-dark' : ' has-text-primary';\n else if (color === 'l') iconClasses += hovered ? ' has-text-link-dark' : ' has-text-link';\n else iconClasses += hovered ? ' has-text-info-dark' : ' has-text-info';\n\n return (\n <button\n className=\"notification-close\"\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={(e) => onDismiss(e)}\n >\n <span className={iconClasses} role=\"close-icon\">\n <FontAwesomeIcon icon={closeIcon} size=\"lg\" />\n </span>\n </button>\n );\n}\n\n/** maak de content van de notificatie */\nfunction NotificationContent(props: { children: React.ReactNode; icon: any }): JSX.Element {\n return (\n <div>\n <span className=\"icon is-medium mr-2\" style={{ float: 'left' }}>\n <FontAwesomeIcon icon={props.icon} />\n </span>\n {props.children}\n </div>\n );\n}\n\n/** een primary-colored notificatie\n * @param props\n * @returns een primary-colored notificatie\n * @example <Notification.Primary>Hello World</Notification.Primary>\n */\nNotification.Primary = (props: NotificationProps): JSX.Element => <Notification {...props} color=\"p\" />;\n\n/** een danger-colored notificatie\n * @param props\n * @returns een danger-colored notificatie\n * @example <Notification.Danger>Hello World</Notification.Danger>\n */\nNotification.Danger = (props: NotificationProps): JSX.Element => <Notification {...props} color=\"d\" />;\n\n/** een warning-colored notificatie\n * @param props\n * @returns een warning-colored notificatie\n * @example <Notification.Warning>Hello World</Notification.Warning>\n */\nNotification.Warning = (props: NotificationProps): JSX.Element => <Notification {...props} color=\"w\" />;\n\n/** een success-colored notificatie\n * @param props\n * @returns een success-colored notificatie\n * @example <Notification.Success>Hello World</Notification.Success>\n */\nNotification.Success = (props: NotificationProps): JSX.Element => <Notification {...props} color=\"s\" />;\n\n/** een link-colored notificatie\n * @param props\n * @returns een link-colored notificatie\n * @example <Notification.Link>Hello World</Notification.Link>\n */\nNotification.Link = (props: NotificationProps): JSX.Element => <Notification {...props} color=\"l\" />;\n\n/** een info-colored notificatie (OOK DE DEFAULT)\n * @param props\n * @returns een info-colored notificatie\n * @example <Notification.Info>Hello World</Notification.Info>\n */\nNotification.Info = (props: NotificationProps): JSX.Element => <Notification {...props} color=\"i\" />;\n\nexport { Notification };\n\n/** Props voor een Notification */\nexport type NotificationProps = {\n /** content van de notificatie */\n children: React.ReactNode;\n /**\n * afhandeling van dismiss-click notificatie\n * @param e event\n */\n onDismiss(e?: any): void;\n /** roep de @see onDismiss() automatisch aan na ... milliseconden */\n autoDismissAfter?: number;\n};\n","import React from 'react';\nimport { ColorProp, SizeProp } from '../../loon-react-bulma-types';\n\ntype ProgressBarProps = {\n /** grootte van de progressbar */\n size?: SizeProp;\n /** de maximale waarde, default = 100 */\n max?: number;\n /** de waarde waarop de progressbar staat. Vul niet in voor een onbepaalde, loopende progressbar */\n value?: number;\n /** waarde-extensie (default = '%') */\n extension?: '%' | 'pct' | '$' | string;\n /** de kleur van de progressbar */\n color?: ColorProp;\n};\n\n/** Maak een progress bar met de <progress> tag.\n * Door da value-attribuut leeg te laten, krijg je een loopende progress bar: https://bulma.io/documentation/elements/progress/\n */\n\n/**\n * Maak een progress-bar met de <progress> tag.\n * Door de attribut 'value' leeg te laten, krijg je een looping progress bar\n * @param props\n * @returns een progress bar\n * @example\n * <ProgressBar value={50} />\n * <ProgressBar value={50} extension=\"%\" />\n * <ProgressBar size='xl' />\n */\nfunction ProgressBar({ color, size, extension, max, value }: ProgressBarProps): JSX.Element {\n let classes = 'progress';\n // default is 'is-normal', ook als er GEEN size-class is\n if (size === 's') classes += ' is-small';\n else if (size === 'l') classes += ' is-medium';\n else if (size === 'xl') classes += ' is-large';\n else classes += ' is-normal';\n\n if (color === 's') classes += ' is-success';\n else if (color === 'p') classes += ' is-primary';\n else if (color === 'd') classes += ' is-danger';\n else if (color === 'l') classes += ' is-link';\n else if (color === 'w') classes += ' is-warning';\n else classes += ' is-info';\n\n return (\n <progress className={classes} value={value} max={max || 100} title={`${value ?? ''}${extension ?? ''}`}>\n {value}\n </progress>\n );\n}\n\nexport { ProgressBar };\nexport type { ProgressBarProps };\n","import React from 'react';\n\ntype SimpleTableProps<T extends unknown> = {\n /**\n * Zichtbare kolommen.:\n * - string[] >>> object keys\n * - TableColProps >>> naam van de kolom en de object-key die daarbij hoort. Als name undefined, wordt de key genomen\n * - undefined >>> alle object keys worden gebruikt en getoont\n */\n columns?: string[] | SimpleTableColProps<T>[] | undefined;\n /** de data van tabel: een array objects */\n data: T[];\n /** waarmee moet een rij worden geidentificeerd. Anders wordt index gebruikt, liever niet: react-performance */\n rowIdentifier?: string | number | ((item: T) => string | number);\n /** is de tabel narrow ? (default false) */\n narrow?: boolean;\n /** is de tabel striped ? (default false) */\n striped?: boolean;\n /** is de tabel bordered ? (default false) */\n bordered?: boolean;\n /** is de tabel hovered (default false) */\n hoverable?: boolean;\n /** is de tabel fullwidth (default false) */\n fullwidth?: boolean;\n /** moet de inhoud van de table-header ook onderaan verschijnen ? (default false) */\n hasFooter?: boolean;\n /** terugkoppeling voor een geselecteerde rij.\n * @param item: Het geselecteerde item\n * @param row: de tabel-rij waarop geklikt is (<tr> tag). Om de row 'selected' te laten lijken: toggle de 'is-selected' class\n */\n onRowSelected?(item: T, row: HTMLTableRowElement): void;\n};\n\ntype SimpleTableHeadProps<T> = {\n titles: SimpleTableColProps<T>[];\n};\n\ntype SimpleTableFootProps<T> = SimpleTableHeadProps<T>;\n\ntype SimpleTableBodyProps<T> = {\n columns: SimpleTableColProps<T>[];\n data: T[];\n rowIdentifier?: string | number | ((item: T) => string | number);\n onRowSelected: (item: T, row: HTMLTableRowElement) => void;\n};\n\ntype SimpleTableColProps<T> = {\n /** de naam van de kolom\n * - als niet opgegeven wordt de obj key gebruikt uit de 'value'prop (als dat een string is)\n * - als je geen header wil tonen, zet dan een lege string als header\n */\n header?: string;\n /** de obj property die gebruikt moet worden in de kolom\n * - als string: object[value] geeft de waarde\n * - als function: eigen function om de value te zetten\n */\n value: string | ((v: T) => string);\n};\n\n/**\n * Render een tabel. Als je een tabel met zoekfunctie, pagination en sorteren wil, moet je een @see DataTable nemen.\n * @param props\n * @returns een tabel gestyled met bulma\n * @example\n * <SimpleTable\n * data={customTableData}\n * columns={['id', 'first_name', 'last_name', 'email']}\n * rowIdentifier=\"id\"\n * striped={true}\n * fullwidth={true}\n * hoverable={true}\n * narrow={true}\n * bordered={false}\n * />\n */\nfunction SimpleTable<T>(props: SimpleTableProps<T>): JSX.Element {\n // zet de table classses\n let classes = 'table';\n if (props.bordered) classes += ' is-bordered';\n if (props.narrow) classes += ' is-narrow';\n if (props.striped) classes += ' is-striped';\n if (props.hoverable) classes += ' is-hoverable';\n if (props.fullwidth) classes += ' is-fullwidth';\n\n const rowKey = props.rowIdentifier; // identifier voor de row (als key)\n\n const handleRowClick = (item: T, rowEl: HTMLTableRowElement) => {\n if (props.onRowSelected) props.onRowSelected(item, rowEl);\n };\n\n const columns: SimpleTableColProps<T>[] = createColumns<T>(props.columns, props.data[0]);\n\n return (\n <div className=\"table-container\">\n <table className={classes}>\n <SimpleTableHead<T> titles={columns} />\n <SimpleTableBody<T>\n columns={columns}\n data={props.data}\n rowIdentifier={rowKey}\n onRowSelected={(i, r) => handleRowClick(i, r)}\n />\n {props.hasFooter && <SimpleTableFoot titles={columns} />}\n </table>\n </div>\n );\n}\n\nfunction SimpleTableBody<T>(props: SimpleTableBodyProps<T>): JSX.Element {\n return (\n <tbody>\n {props.data.map((obj: any, index: number) => {\n return (\n <tr\n key={\n typeof props.rowIdentifier == 'function'\n ? props.rowIdentifier(obj)\n : props.rowIdentifier\n ? obj[props.rowIdentifier]\n : index\n }\n onClick={(e) => props.onRowSelected(obj, e.currentTarget)}\n >\n {props.columns.map((p: SimpleTableColProps<T>, i: number) => {\n const val = typeof p.value == 'string' ? obj[p.value] : p.value(obj);\n return <td key={i}>{val}</td>;\n })}\n </tr>\n );\n })}\n </tbody>\n );\n}\n\nfunction SimpleTableHead<T>(props: SimpleTableHeadProps<T>): JSX.Element {\n return (\n <thead>\n <tr>\n {props.titles.map((h) => (\n <th key={h.header}>{h.header}</th>\n ))}\n </tr>\n </thead>\n );\n}\n\nfunction SimpleTableFoot<T>(props: SimpleTableFootProps<T>): JSX.Element {\n return (\n <tfoot>\n <tr>\n {props.titles.map((f) => (\n <th key={f.header}>{f.header}</th>\n ))}\n </tr>\n </tfoot>\n );\n}\n\nfunction createColumns<T>(\n columns: string[] | SimpleTableColProps<T>[] | undefined,\n firstEl: T\n): SimpleTableColProps<T>[] {\n if (columns && typeof columns[0] == 'string') {\n const cols = columns as string[];\n return cols.map((k) => {\n const kv: SimpleTableColProps<T> = {\n header: k,\n value: k,\n };\n return kv;\n });\n } else if (columns) {\n const cols = columns as SimpleTableColProps<T>[];\n return cols.map((k) => {\n if (!k.header && k.header != '' && typeof k.value == 'string') k.header = k.value;\n return k;\n });\n } else\n return Object.keys(firstEl).map((k) => {\n const kv: SimpleTableColProps<T> = {\n header: k,\n value: k,\n };\n return kv;\n });\n}\n\nexport { SimpleTable };\nexport type { SimpleTableProps, SimpleTableColProps };\n","import { SizeProp } from '../../loon-react-bulma-types';\nimport React from 'react';\n\ntype StatusType = 'active' | 'completed' | 'error' | 'pending';\ntype StepChoiceType = 'disabled' | 'up' | 'down' | 'allowed';\ntype StepsProps = {\n /** extra classes voor de steps-container */\n className?: string;\n /** Alleen <Steps.Item> componenten */\n children: React.ReactNode;\n /** grootte van de steps (default = 'm') */\n size?: SizeProp;\n /** wat is de actieve step @deprecated use activeStepindex */\n activeStep?: number;\n /** wat is de actieve step */\n activeStepIndex?: number;\n /** change-step callback */\n onChangeStep?: (step: number) => void;\n /** freeStepChoice:\n * - disabled: alleen links/recht selecteren\n * - up: alleen naar rechts vrij selecteren\n * - down: alleen links beneden vrij selecteren\n * - allowed: alles vrij selecteerbaar */\n freeStepChoice?: StepChoiceType;\n};\ntype StepItemProps = {\n /** step status */\n status?: StatusType;\n /** title van de step */\n title?: string;\n /** details bij de step */\n details?: string;\n /** een makering van de step (default = stepnr) */\n marker?: React.ReactNode | ((s?: StatusType) => React.ReactNode);\n /** tooltip voor deze step */\n tooltip?: string;\n};\n\ntype InternStepItemProps = StepItemProps & {\n /** interne actieve ste[] */ activeStep: number;\n /** interne step-herkenning */ stepKey: number;\n /** interne onclick voor step */ onClick: (key: number) => void;\n /** interne disable voor step */ disabled?: boolean;\n};\n\n/**\n * Maak een stappen-paneel voor een set van stappen.\n * @param props\n * @returns een stappen-paneel\n * @example\n * <Steps activeStep={1} onChangeStep={handleStepChange}>\n * <Steps.Item title=\"Step 1\" marker={1} />\n * <Steps.Item title=\"\" marker={<Icon icon={faFlask} />} />\n * <Steps.Item title=\"Step 2\" details=\"dit zijn de details voor deze stap\" />\n * <Steps.Item title=\"\" marker={<Icon icon={faBomb} />} status=\"error\" />\n * <Steps.Item\n * title=\"Step 3\"\n * marker={(status) => (status == 'pending' ? <Icon icon={faFlag} /> : <Icon icon={faFire} />)}\n * />\n * <Steps.Item title=\"Step 4\" marker=\"A\" />\n * </Steps>\n */\nconst Steps = (props: StepsProps): JSX.Element => {\n const [activeStep, setActiveStep] = React.useState(props.activeStepIndex ?? 0);\n\n const handleStepChange = (stepKey: number): void => {\n props.onChangeStep && props.onChangeStep(stepKey);\n setActiveStep(stepKey);\n };\n\n React.useEffect(() => {\n setActiveStep(props.activeStepIndex ?? props.activeStep ?? 0);\n }, [props.activeStepIndex]);\n\n let size = '';\n if (props.size === 's') size = 'is-small';\n else if (props.size === 'l') size = 'is-medium';\n else if (props.size === 'xl') size = 'is-large';\n\n const className = `steps is-animated ${size} ${props.className ?? ''}`.trim();\n\n return (\n <div className={className}>\n {React.Children.map(props.children, (child: any, i: number) => {\n if (child.type && child.type == Steps.Item) {\n let isDisabled = true;\n if (props.freeStepChoice === 'allowed') isDisabled = false;\n else if (props.freeStepChoice === 'down' && i < activeStep) isDisabled = false;\n else if (props.freeStepChoice === 'up' && i > activeStep) isDisabled = false;\n else isDisabled = i != activeStep + 1 && i != activeStep - 1;\n\n return (\n <InternStepsItem\n key={child.props.title}\n {...child.props}\n activeStep={activeStep}\n stepKey={i}\n disabled={isDisabled}\n onClick={handleStepChange}\n />\n );\n } else return child;\n })}\n </div>\n );\n};\n\n/**\n * Een stap in een stappen-paneel.\n * @param props\n * @returns een stap voor de <Steps> component\n * @example\n * <Steps.Item title=\"Step 1\" marker={1} />\n * <Steps.Item title=\"Step 2\" marker={2} tooltip=\"step 2\" status=\"error\" />\n */\nSteps.Item = (props: StepItemProps): JSX.Element => <React.Fragment>{props.title}</React.Fragment>;\n\nfunction InternStepsItem(props: InternStepItemProps): JSX.Element {\n const handleClick = () => {\n if (props.disabled || props.stepKey == props.activeStep) return;\n props.onClick(props.stepKey);\n setStatus('active');\n };\n\n const [status, setStatus] = React.useState<StatusType>(props.status ?? 'pending');\n React.useEffect(\n function statusUpdate() {\n let newStatus: StatusType = 'pending';\n if (props.status === 'error') newStatus = 'error';\n else if (props.status === 'completed' || props.activeStep > props.stepKey) newStatus = 'completed';\n else if (props.stepKey === props.activeStep) newStatus = 'active';\n setStatus(newStatus);\n },\n [props.status, props.stepKey, props.activeStep]\n );\n\n let className = 'step-item';\n if (props.activeStep === props.stepKey) className += ' is-active is-info';\n else if (status === 'error') className += ' is-error is-danger';\n else if (status === 'completed') className += ' is-completed is-success';\n else className += ' is-pending';\n\n let marker: React.ReactNode;\n if (!props.marker) marker = <React.Fragment>{props.stepKey + 1}</React.Fragment>;\n else if (typeof props.marker === 'function') marker = props.marker(status);\n else marker = props.marker;\n\n // console.log(status);\n\n return (\n <div className={className} onClick={handleClick} title={props.tooltip}>\n <div className=\"step-marker\">{marker}</div>\n <div className=\"step-details\">\n <p className=\"step-title\">{props.title}</p>\n {props.details && <p>{props.details}</p>}\n </div>\n </div>\n );\n}\n\nexport { Steps };\nexport type { StepItemProps, StepsProps };\n","import React from 'react';\nimport type { AlignmentProp, SizeProp } from '../../loon-react-bulma-types';\n\nexport type TabBarProps = {\n /** tab grootte. (default = 'n') */\n size?: SizeProp;\n /** style van de tabs */\n styling?: 'boxed' | 'toggle' | undefined;\n /** links, rechts of centered uilijnen (default = 'l') */\n alignment?: AlignmentProp | undefined;\n // /** de kleur van de tabs, default = 'p' */\n // color?: ColorProp | undefined;\n /** is de tabbar fullwidth */\n fullwidth?: boolean;\n /** initial active tab (default 1e item) */\n initialTab?: number | string | undefined;\n /** active tab, change the current tab AND sets the initial tab, (default 1e item) */\n activeTab?: number | string | undefined;\n /**\n * Afhandeling van een tab geselecteerd.\n * @param index index selected tab\n */\n onTabChange(index: number | string): void;\n /** De tab items: Allemaal TabItem-Components */\n children: React.ReactNode;\n};\n\nexport type TabBarItemProps = {\n /** tooltip voor dit tabbar item */ tooltip?: string;\n /** content voor dit tabbar item */ children: React.ReactNode;\n /** id van dit item */ tabId: number | string;\n};\n\n/**\n * Maak een tabs-lijst.\n * zichtbare content moet zelf geregeld worden.\n * @param props\n * @returns tabs component\n * @example\n * <TabBar onTabChange={handleTabChange} activeTab={activePage}>\n * <TabBar.Item tabId={1}>Tab 1</TabBar.Item>\n * <TabBar.Item tabId={2}><Icon icon={faFLag} />Tab 2</TabBar.Item>\n * <TabBar.Item tabId={3}>Tab 3</TabBar.Item>\n * </TabBar>\n */\nconst TabBar = (props: TabBarProps): JSX.Element => {\n const [activeTab, setActiveTab] = React.useState(props.activeTab ?? props.initialTab);\n\n const onTabSelected = (index: string) => {\n setActiveTab(index);\n props.onTabChange(index);\n };\n\n React.useEffect(() => {\n if (props.activeTab !== undefined) setActiveTab(props.activeTab);\n }, [props.activeTab]);\n\n const { size, alignment, fullwidth, styling } = props;\n let className = 'tabs';\n if (size === 's') className += ' is-small';\n else if (size === 'l') className += ' is-medium';\n else if (size === 'xl') className += ' is-large';\n\n // if (color === 'l') className += ' is-link';\n // else if (color === 's') className += ' is-success';\n // else if (color === 'w') className += ' is-white';\n // else if (color === 'i') className += ' is-info';\n // else if (color === 'd') className += ' is-dark';\n // else className += ' is-primary';\n\n if (styling === 'boxed') className += ' is-boxed';\n else if (styling === 'toggle') className += ' is-toggle';\n\n if (alignment === 'c') className += ' is-centered';\n else if (alignment === 'r') className += ' is-right';\n className += fullwidth ? ' is-fullwidth' : '';\n\n const tabItems = React.Children.map(props.children, (child: any, index: number) => {\n return (\n <TabBarItemWrapper\n isActive={activeTab ? activeTab == child.props.tabId : index == 0}\n onClick={() => onTabSelected(child.props.tabId)}\n >\n {child}\n </TabBarItemWrapper>\n );\n });\n\n return (\n <div className={className}>\n <ul>{tabItems}</ul>\n </div>\n );\n};\n\nfunction TabBarItemWrapper({\n children,\n isActive,\n onClick,\n}: {\n children: React.ReactNode;\n isActive: boolean;\n onClick: () => void;\n}) {\n return (\n <li role=\"tab\" className={isActive ? 'is-active' : undefined} onClick={onClick}>\n {children}\n </li>\n );\n}\n\nfunction TabBarItem({ children, tabId, tooltip }: TabBarItemProps): JSX.Element {\n const itemContent = React.Children.map(children, (child: any) => {\n if (!child || child === '') return null;\n return child;\n });\n\n return (\n <a title={tooltip || undefined} id={tabId?.toString() || undefined}>\n {itemContent}\n </a>\n );\n}\n\n/** Een item in deen <TabBar> component\n * @param props\n * @returns tab item component\n * @example <TabBar.Item tabId={1}>Tab 1</TabBar.Item>\n */\nTabBar.Item = TabBarItem;\nexport { TabBar };\n","/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport { AlignmentProp } from '../..';\nimport { ColorProp, TagSizeProp } from '../../loon-react-bulma-types';\n\nexport type TagProps = {\n /** content van de tag */\n children: React.ReactNode;\n /** kleur van de tag, de standaard kleuren + dark & light */\n color?: ColorProp | 'dark' | 'light';\n /** sizes van de tag. (default = 's'). LET OP 3 verschillende sizes ipv 4! */\n size?: TagSizeProp;\n /** moet de light-colored versie van de tag getoont worden */\n light?: boolean;\n /** zijn de tags rounded ? */\n rounded?: boolean;\n /** moet er een dismiss-knop op de tag, en zo ja, definieer daar een functie voor */\n onDismiss?: (e: any) => void;\n /** tooltip voor de tag */\n tooltip?: string;\n};\n\nexport type TagsProps = {\n /** de content van de tags-div */\n children: React.ReactNode;\n /** moeten de tags aan elkaar geplakt worden */\n merged?: boolean;\n /** de grootte van alle tags , overschrijfbaar per tag (default = 's'). LET OP: 3 sizes ipv 4 */\n size?: TagSizeProp;\n /** alignment van de tags (default = 'l') */\n alignment?: AlignmentProp;\n /** extra classes op de tags container */\n className?: string | (() => string);\n};\n\n/**\n * Maak een tag\n * @param props Tag Props\n * @returns een tag\n * @example\n * <Tag>Hello</Tag>\n * <Tag color='d'>Danger</Tag>\n */\nexport function Tag(props: TagProps): JSX.Element {\n let classes = 'tag';\n classes += props.light ? ' is-light' : '';\n classes += props.rounded ? ' is-rounded' : '';\n\n if (props.color === 'p') classes += ' is-primary';\n else if (props.color === 'i') classes += ' is-info';\n else if (props.color === 'd') classes += ' is-danger';\n else if (props.color === 'w') classes += ' is-warning';\n else if (props.color === 's') classes += ' is-success';\n else if (props.color === 'dark') classes += ' is-dark';\n else if (props.color === 'light') classes += ' is-light';\n else classes += ' is-link';\n\n if (props.size === 'm') classes += ' is-medium';\n else if (props.size === 'l') classes += ' is-large';\n\n const handleDismiss = (e: any) => props.onDismiss && props.onDismiss(e);\n\n return (\n <span className={classes} title={props.tooltip}>\n {props.children}\n {props.onDismiss && <button className=\"delete\" onClick={(e: any) => handleDismiss(e)}></button>}\n </span>\n );\n}\n\n/**\n * Maak een tag-container aan. De tags kunnen aan elkaar geplakt worden of niet.\n * De grootte van de tags kan ook ingesteld worden\n * @param props\n * @returns een groep van tags\n * @example\n * <Tags size=\"m\">\n * <Tag>Tag 1</Tag>\n * <Tag color=\"i\">Tag 2</Tag>\n * </Tags>\n */\nexport function Tags(props: TagsProps): JSX.Element {\n let classes = 'tags';\n\n // size, default is 's'\n if (props.size === 'm') classes += ' are-medium';\n else if (props.size === 'l') classes += ' are-large';\n\n // alignment, default = 'l', links\n if (props.alignment === 'r') classes += ' is-right';\n else if (props.alignment === 'c') classes += ' is-centered';\n\n if (props.merged) classes += ' has-addons';\n\n classes = `${classes} ${typeof props.className == 'function' ? props.className() : props.className}`.trim();\n\n const children = React.Children.map(props.children, (child: any) => {\n if (child.type === Tag) return child;\n return child;\n });\n return <div className={classes}>{children}</div>;\n}\n","import { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport React from 'react';\nimport { AlignmentProp, ColorProp, TagSizeProp } from '../../loon-react-bulma-types';\nimport { Icon } from '../Icon/Icon';\nimport { Tag } from '../Tag/Tag';\n\ntype TimeLineProps = {\n /** alignment van de timeline (default = 'l', left) */\n alignment?: AlignmentProp;\n /** children van de timeline, dus TimeLine.Item & TimeLine.Point */\n children: React.ReactNode;\n /** extra classname op de timeline container */\n className?: string;\n};\n\ntype TimeLineItemProps = {\n /** aanpassingen aan de default grijze marker op de timeline. Los van elkaar instelbaar */\n marker?: {\n /** icon op de timeline */\n icon?: string | IconProp;\n /** aangepaste kleur */\n color?: ColorProp;\n };\n /** een title voor omschrijving van het item */\n heading?: string;\n /** content bij dit timeline item */\n children: React.ReactNode;\n /** een tooltip voor een timeline item */\n tooltip?: string;\n /** onClick() callback voor timeline content */\n onClick?: (heading?: string) => void;\n};\ntype TimeLinePointProps = {\n /** de content van het Point */\n children: React.ReactNode;\n /** de kleur van het point (default = 'l', link) */\n color?: ColorProp;\n /** de grotte van het point (default = 's', small) */\n size?: TagSizeProp;\n /** een optionele tooltip voor dit point */\n tooltip?: string;\n /** onClick() callback voor timeline content */\n onClick?: () => void;\n};\n\n/**\n * Een timeline is een lijst van items met een marker op een lijn.\n * @param props\n * @returns een Timeline component\n * @example\n * <TimeLine alignment=\"c\">\n * <TimeLine.Point>Start</TimeLine.Point>\n * <TimeLine.Point color=\"l\">2016</TimeLine.Point>\n * <TimeLine.Item heading=\"March 2016\">nothing happened</TimeLine.Item>\n * <TimeLine.Item marker={{ color: 's' }} heading=\"August 2016\">\n * Als nothing happened\n * </TimeLine.Item>\n * <TimeLine.Point color=\"d\" size=\"m\"> 2017</TimeLine.Point>\n * </TimeLine>\n */\nconst TimeLine = ({ alignment, children, className }: TimeLineProps): JSX.Element => {\n let align = 'is-left';\n if (alignment === 'r') align = 'is-rtl';\n else if (alignment === 'c') align = 'is-centered';\n\n className = `timeline ${align} ${className}`;\n return <div className={className}>{children}</div>;\n};\n\n/**\n * Een punt op de timeline, bijvoorbeeld een jaartal of een datum. Er wordt een <Tag> gebruikt\n * @param props\n * @returns een punt (Tag-component) op de timeline\n * @example <TimeLine.Point color=\"l\">2016</TimeLine.Point>\n */\nTimeLine.Point = ({ children, color, size, tooltip, onClick }: TimeLinePointProps): JSX.Element => {\n return (\n <div className=\"timeline-header\" onClick={onClick}>\n <Tag color={color ?? 'l'} size={size} tooltip={tooltip} light rounded>\n {children}\n </Tag>\n </div>\n );\n};\n\n/**\n * Een item met een omschrijving, heading en icon op de timeline\n * @param props\n * @returns een Item op de timeline\n * @example <TimeLine.Item heading=\"March 2016\">nothing happened</TimeLine.Item>\n */\nTimeLine.Item = ({ marker, heading, children, tooltip, onClick }: TimeLineItemProps): JSX.Element => {\n let markerClassName = 'timeline-marker';\n if (marker?.color === 'p') markerClassName += ' is-primary';\n else if (marker?.color === 'l') markerClassName += ' is-link';\n else if (marker?.color === 'i') markerClassName += ' is-info';\n else if (marker?.color === 's') markerClassName += ' is-success';\n else if (marker?.color === 'd') markerClassName += ' is-danger';\n else if (marker?.color === 'w') markerClassName += ' is-warning';\n if (marker?.icon) markerClassName += ' is-icon';\n\n return (\n <div className=\"timeline-item\" title={tooltip} onClick={() => onClick && onClick(heading)}>\n <div className={markerClassName}>{marker?.icon && <Icon icon={marker.icon} />}</div>\n\n <div className=\"timeline-content\">\n {heading && <p className=\"heading\">{heading}</p>}\n <div>{children}</div>\n </div>\n </div>\n );\n};\n\nexport { TimeLine };\nexport type { TimeLineProps, TimeLineItemProps, TimeLinePointProps };\n","import React from 'react';\n\ntype TitleProps = {\n /** content van de title. Kan ook met txt gezet worden */\n children?: React.ReactNode;\n /** content van de title. Kan ook met children gezet worden */\n txt?: string;\n /** de bulma-grootte die gebruikt wordt */\n bulmaSize?: '1' | '2' | '3' | '4' | '5' | '6' | number;\n /** de heading grootte: h1, h2, h3, h4, h5 of h6 */\n headingSize?: '1' | '2' | '3' | '4' | '5' | '6' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | undefined | number;\n};\n\ntype SubtitleProps = {\n /** content van de subtitle. Kan ook met txt gezet worden */\n children?: React.ReactNode;\n /** content van de subtitle. Kan ook met children gezet worden */\n txt?: string;\n /** de bulma-grootte die gebruikt wordt */\n bulmaSize?: '3' | '4' | '5' | '6' | number;\n /** de heading grootte: h1, h2, h3, h4, h5 of h6 */\n headingSize?: '1' | '2' | '3' | '4' | '5' | '6' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | undefined | number;\n};\n\ntype TitleWithSubtitleProps = {\n /** content van de title */\n titleTxt: string;\n /** content van de subtitle */\n subtitleTxt: string;\n /** de bulma-grootte die gebruikt wordt */\n bulmaSize?: '1' | '2' | '3' | '4' | '5' | '6' | number;\n /** de heading grootte: h1, h2, h3, h4, h5 of h6 */\n headingSize?: '1' | '2' | '3' | '4' | '5' | '6' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | undefined | number;\n};\n\n/**\n * Maak een heading. @see {@link TitleWithSubtitle} voor een combinatie met een subtitle.\n * @param props txt as string, size voor bulma (is-1 t/m is-6) en een heading-waarde (h1-h6)\n * @returns een heading (h1-h6) met class 'title'\n * @example\n * <Title txt=\"Default title\" />\n * <Title txt=\"Title\" bulmaSize={1} headingSize={4} />\n */\nfunction Title(props: TitleProps): JSX.Element {\n const bulmaSize = props.bulmaSize ?? 3;\n const hSize = typeof props.headingSize == 'string' ? +props.headingSize.replace('h', '') : props.headingSize;\n const heading = props.headingSize ? hSize : bulmaSize;\n const classes = `title is-${bulmaSize}`;\n const txt = props.children ?? props.txt;\n if (!txt) throw Error('Title moet children OF txt=\"...\" hebben');\n\n switch (heading) {\n case 1:\n return <h1 className={classes}>{txt}</h1>;\n case 2:\n return <h2 className={classes}>{txt}</h2>;\n // 3 is de default, dus via default\n // case 3:\n // return <h3 className={classes}>{txt}</h3>;\n case 4:\n return <h4 className={classes}>{txt}</h4>;\n case 5:\n return <h5 className={classes}>{txt}</h5>;\n case 6:\n return <h6 className={classes}>{txt}</h6>;\n default:\n return <h3 className={classes}>{txt}</h3>;\n }\n}\n\n/**\n * Maak een subtitle voor een heading. @see {@link TitleWithSubtitle} voor een combinatie van deze 2.\n * @param props text as string, size voor bulma (is-3 t/m is-6) en een heading-waarde (h2-h6)\n * @returns een heading (h1-h6) met class 'subtitle'.\n * @example\n * <Subtitle txt=\"Default subtitle\" />\n * <Subtitle txt=\"Subtitle\" bulmaSize={3} headingSize={4} />\n */\nfunction Subtitle(props: SubtitleProps): JSX.Element {\n const bulmaSize = props.bulmaSize ?? 5;\n const hSize = typeof props.headingSize == 'string' ? +props.headingSize.replace('h', '') : props.headingSize;\n const heading = props.headingSize ? hSize : bulmaSize;\n const classes = `subtitle is-${bulmaSize}`;\n const txt = props.children ?? props.txt;\n if (!txt) throw Error('Subtitle moet children OF txt=\"...\" hebben.');\n\n switch (heading) {\n case 1:\n return <h1 className={classes}>{txt}</h1>;\n case 2:\n return <h2 className={classes}>{txt}</h2>;\n case 3:\n return <h3 className={classes}>{txt}</h3>;\n case 4:\n return <h4 className={classes}>{txt}</h4>;\n // 5 is de default, dus via default\n // case 5:\n // return <h5 className={classes}>{txt}</h5>;\n case 6:\n return <h6 className={classes}>{txt}</h6>;\n default:\n return <h3 className={classes}>{txt}</h3>;\n }\n}\n\n/**\n * Combineer een title en een subtitle\n * @param props titleTxt as string, subtitleTxt as string, bulmaSize as number (1-4) en headingSize as number (1-4)\n * De subtitle sizes worden +2 gedaan, dus bij title bulmaSize = 1 en headingSize = 3 (<h3 class=\"title is-1\">)\n * komt een subtitle van (<h6 class=\"subtitle is-4\">)\n * @returns een title met daaronder een subtitle.\n * @example <TitleWithSubtitle titleTxt=\"Title\" subtitleTxt=\"Subtitle\" bulmaSize={1} headingSize={3} />\n */\nfunction TitleWithSubtitle(props: TitleWithSubtitleProps): JSX.Element {\n const bulmaSize = parseInt((props.bulmaSize ?? 3).toString());\n const hSize = typeof props.headingSize == 'string' ? +props.headingSize.replace('h', '') : props.headingSize;\n const heading = hSize || bulmaSize;\n return (\n <div>\n <Title txt={props.titleTxt} bulmaSize={bulmaSize} headingSize={heading} />\n <Subtitle txt={props.subtitleTxt} bulmaSize={bulmaSize + 2} headingSize={heading + 1} />\n </div>\n );\n}\n\nexport { Title, Subtitle, TitleWithSubtitle };\nexport type { TitleProps, SubtitleProps, TitleWithSubtitleProps };\n","import React from 'react';\nimport { SizeProp, ColorProp, AlignmentProp } from '../../loon-react-bulma-types';\n\ntype ToggleBarProps = {\n /** de beginwaarde (default = undefined)\n * Deze property wordt alleen voor ToggleItems gebruikt. voor OnOffToggleItems kan dat per item geset worden\n * Om een waarde van buitenaf te zete, gebruik je de 'value'-prop\n */\n initialValue?: string;\n /** de beginwaarde, alsd ie van buitenaf aangepast mag worden. gebruik 'initialValue' voor alleen een beginwaarde */\n value?: string;\n /** ToggleItems */\n children: React.ReactNode;\n /** callback voor toggelen */\n onToggle?: (toggledItem: string) => void;\n /** zijn de randen afgerond of vierkant (default true) */\n rounded?: boolean;\n /** alignment van de container */\n alignment?: AlignmentProp;\n /** size van de buttons (default = 's') */\n size?: SizeProp;\n /** color van de toggles (default = 's', success), (kan per item overschreven worden) */\n onColor?: ColorProp;\n /** color van de toggles (default = 'd', danger), (kan per item overschreven worden) */\n offColor?: ColorProp;\n /** zij de toggles light of niet (default = true) */\n light?: boolean;\n /** zijn de toggles outlined of niet (default = false) */\n outlined?: boolean;\n /** extra classes voor de toggle-bar */\n className?: string;\n};\n\ntype ToggleItemProps = {\n /** content van een Toggle Item */\n children: React.ReactNode;\n /** is dit item disabled? */\n disabled?: boolean;\n /** selectie-naam voor dit toggle-item. ALs undefined wordt de children-string-content gebruikt */\n identifier?: string;\n /** tooltip voor dit toggle-item */\n tooltip?: string;\n /** color voor on-status */\n onColor?: ColorProp;\n /** color voor off-status */\n offColor?: ColorProp;\n};\n\ntype InternToggleItemProps = ToggleItemProps & {\n toggled: boolean;\n onToggleClick: (toggledItem: string) => void;\n light?: boolean;\n outlined?: boolean;\n rounded?: boolean;\n};\n\ntype OnOffToggleItemProps = ToggleItemProps & {\n /** set de initiele waarde van dit toggle item */\n toggled?: boolean;\n /** onToggle callback, deze 'cancelt' de OnToggle van de <ItemToggleBar> voor dit item */\n onToggle?: (on: boolean, item: string) => void;\n};\n\ntype InternOnOffToggleItemProps = OnOffToggleItemProps & {\n children: React.ReactNode;\n light?: boolean;\n outlined?: boolean;\n rounded?: boolean;\n};\n\n/**\n * Een groep van bij-elkaar-horende buttons waar er maar 1 van actief kan zijn.\n * Om elk toggle-item APART te kunnen togglen, gebruik je de ItemToggleBar Component\n * @param props\n * @returns een Toggle bar\n * @example\n * <ToggleBar onToggle={handleToggle} initialValue={calendarView}>\n * <ToggleBar.Item>WeekView</ToggleBar.Item>\n * <ToggleBar.Item>MonthView</ToggleBar.Item>\n * </ToggleBar>\n *\n * <ToggleBar >\n * <ToggleBar.OnOffItem onToggle={handleToggle2} identifier=\"1\">\n * Toggle 2\n * </ToggleBar.OnOffItem>\n * <ToggleBar.OnOffItem toggled={true} onToggle={handleToggle3} identifier=\"2\">\n * Toggle 3\n * </ToggleBar.OnOffItem>\n * </ToggleBar>\n */\nconst ToggleBar = (props: ToggleBarProps): JSX.Element => {\n const { size, alignment } = props;\n const [toggledItem, setToggledItem] = React.useState<string | undefined>(props.value ?? props.initialValue);\n\n React.useEffect(() => {\n if (props.value != undefined && toggledItem != props.value) setToggledItem(props.value);\n }, [props.value]);\n\n const handleToggle = (item: string) => {\n if (toggledItem == item) return;\n props.onToggle && props.onToggle(item);\n setToggledItem(item);\n };\n\n const children = React.Children.map(props.children, (child: any, index: number) => {\n const toggleName: string =\n child.props?.identifier ??\n React.Children.map(child.props.children, (child: any) => {\n if (typeof child === 'string') return child;\n else if (typeof child.type === 'string') return child.type;\n else return child;\n })?.join('') ??\n '' + index;\n\n if (child.type === ToggleItem)\n return (\n <InternToggleItem\n {...child.props}\n toggled={toggledItem == toggleName}\n identifier={toggleName}\n onColor={child.props.onColor}\n offColor={child.props.onColor}\n light={props.light ?? true}\n outlined={props.outlined ?? false}\n rounded={props.rounded}\n onToggleClick={handleToggle}\n />\n );\n else if (child.type === OnOffToggleItem)\n return (\n <InternOnOffToggleItem\n {...child.props}\n identifier={toggleName}\n // onToggle={(item: string) => handleToggle(item)}\n outlined={props.outlined ?? false}\n light={props.light ?? true}\n rounded={props.rounded ?? true}\n offColor={child.props.offColor ?? props.offColor}\n onColor={child.props.onColor ?? props.onColor}\n />\n );\n\n return child;\n });\n\n let classes = 'buttons has-addons';\n\n if (size === 'm') classes += ' are-normal';\n else if (size === 'l') classes += ' are-medium';\n else if (size === 'xl') classes += ' are-large';\n else classes += ' are-small'; // default\n\n if (alignment === 'c') classes += ' is-centered';\n else if (alignment === 'r') classes += ' is-right';\n else classes += ' is-left'; // default\n\n if (props.className) classes += ' ' + props.className;\n\n return <div className={classes}>{children}</div>;\n};\n\n/** Toggle item */\nconst ToggleItem = (props: ToggleItemProps) => <button disabled={props.disabled}>{props.children}</button>;\n/** ALLEEN VOOR INTERN GEBRUIK!\n * Deze component vervang het ToggleItem\n */\nfunction InternToggleItem(props: InternToggleItemProps): JSX.Element {\n const propColor = props.toggled ? props.onColor ?? 's' : props.offColor ?? 'd';\n let color = '';\n if (propColor === 'i') color = ' is-info';\n else if (propColor === 'p') color = ' is-primary';\n else if (propColor === 'd') color = ' is-danger';\n else if (propColor === 's') color = ' is-success';\n else if (propColor === 'w') color = ' is-warning';\n\n let classes = `button ${color}`;\n if (props.outlined) classes += ' is-outlined';\n if (props.light) classes += ' is-light';\n if (props.rounded) classes += ' is-rounded';\n if (props.toggled) classes += ' is-toggled';\n\n return (\n <button\n disabled={props.disabled}\n title={props.tooltip}\n className={classes}\n onClick={() => props.onToggleClick(props.identifier!)}\n >\n {props.children}\n </button>\n );\n}\n\n/** On Off Toggle Item - zelfbepalend */\nconst OnOffToggleItem = (props: OnOffToggleItemProps) => <button disabled={props.disabled}></button>;\n/** INTERN GEBRUIKT - NIET EXPORTEREN\n * Deze component vervangt de OnOfToggleItem\n */\nfunction InternOnOffToggleItem(props: OnOffToggleItemProps & InternOnOffToggleItemProps): JSX.Element {\n const [toggled, setToggled] = React.useState(props.toggled);\n React.useEffect(() => {\n if (props.toggled != undefined) setToggled(props.toggled);\n }, [props.toggled]);\n\n const toggleColor = toggled ? props.onColor ?? 's' : props.offColor ?? 'd';\n let classes = 'button';\n if (toggleColor === 'i') classes += ' is-info';\n else if (toggleColor === 'p') classes += ' is-primary';\n else if (toggleColor === 'd') classes += ' is-danger';\n else if (toggleColor === 's') classes += ' is-success';\n else if (toggleColor === 'w') classes += ' is-warning';\n\n if (props.rounded) classes += ' is-rounded';\n if (props.light) classes += ' is-light';\n if (props.outlined) classes += ' is-outlined';\n if (toggled) classes += ' is-toggled';\n\n const handleToggle = () => {\n if (props.onToggle) props.onToggle(!toggled, props.identifier!);\n setToggled(!toggled);\n };\n\n return (\n <button\n disabled={props.disabled}\n title={props.tooltip}\n id={props.identifier!}\n className={classes}\n onClick={() => handleToggle()}\n >\n {props.children}\n </button>\n );\n}\n\n/**\n * Item binnen de ToggleBar. Een van de ToggleItems in een ToggleBar kan maar actief zijn.\n * @param props\n * @returns een item in de togglebar waarvan er maar 1 actief kan zijn\n * @example <ToggleBar.Item>Item 2</ToggleBar.Item>\n */\nToggleBar.Item = ToggleItem;\n\n/**\n * Een zelf-toggelend item in een ToggleBar. OnOffToggleItems regelen zelf de toggle-state.\n * @param props\n * @returns een losstaand toggle-baar item.\n * @example <ToggleBar.OnoffItem onToggle={handleToggle} identifier=\"1\">Toggle 1</ToggleBar.OnoffItem>\n */\nToggleBar.OnOffItem = OnOffToggleItem;\n\nexport { ToggleBar };\nexport type { ToggleBarProps, ToggleItemProps, OnOffToggleItemProps };\n","import React from 'react';\nimport { AlignmentProp } from '../../loon-react-bulma-types';\n\ntype ButtonGroupProps = {\n /** Een buttongroup kan alleen Buttons als children hebben! */\n children?: React.ReactNode;\n /** Moeten de buttons aan elkaar vast gezet worden (default = false) */\n hasAddons?: boolean;\n /** aan welke kant moeten de buttons aligned worden (default = l) */\n alignment?: AlignmentProp | undefined;\n /** voeg extra classes aan de buttons-container toe */\n className?: string;\n};\n\n/**\n * Groupeer buttons in een groep. Ze krijgen allemala dezelfde grootte en worden als gewenst anders aligned.\n * Een ButtonGroup mag ALLEEN buttons bevatten!\n * sizes: small, medium, large\n * alignment: l(eft), c(entered), r(ight)\n * merge: voeg de buttons samen tot een buttonbar\n * @param props\n * @returns een button groep\n * @example\n * <ButtonGroup hasAddons alignment=\"r\">\n * <Button>Left</Button>\n * <Button>Middle</Button>\n * <Button>Right</Button>\n * </ButtonGroup>\n */\nconst ButtonGroup = (props: ButtonGroupProps): JSX.Element => {\n const { alignment, className, children } = props;\n let classNames = 'field is-grouped';\n classNames += props.hasAddons ? ' has-addons' : '';\n\n // left aligned hoef je niks voor te doen, is default\n if (alignment === 'c') classNames += ' is-grouped-centered';\n else if (alignment === 'r') classNames += ' is-grouped-right';\n else classNames += ' is-grouped-left';\n\n if (className) classNames += ' ' + className;\n\n return (\n <div className={classNames}>\n {React.Children.map(children, (child) => {\n return <div className=\"control\">{child}</div>;\n })}\n </div>\n );\n};\n\nexport { ButtonGroup };\nexport type { ButtonGroupProps };\n","import React from 'react';\nimport { warnPackageUser } from '../../utils/warn-dev-util';\nimport { BaseButtonProps, ButtonProps } from './ButtonProps';\n\n/**\n * Button is helemaal instelbaar. Maak de button. Alle button instellingen worden hier verwerkt.\n * @param props\n * @returns een default button\n * @example <Button>Button</Button>\n * @description Alle mogelijke props voor de Button-component\n * | Prop | Value | Default | Description |\n * |----------|-------------------------|----------|-----------------------------------------|\n * | children | | | De content van de button (icon, text) |\n * | color | `p, l, i, w, d, s` | `p` | Kleuren voor de button |\n * | styling | `l`, light | | Light style voor de button |\n * | | `o`, outlined | | Outlined style voor de button |\n * | | `i`, inverted | | Inverted style voor de button |\n * | | `lo`, light-outlined | | Light & outlined style voor de button |\n * | | `s`, static | | static style voor de button (grey) |\n * | size | `s, m, l, xl` | | sizes voor de button |\n * | rounded | `true, false` | `false` | Afgeronde hoeken voor de button |\n * | loading | `true, false` | `false` | heeft button de loading state |\n * | disabled | `true, false` | `false` | is de button disabled |\n * | tooltip | string | | tooltip voor de button |\n * | id | string | | id voor de button |\n * | onClick | function | | onClick voor de button |\n * | type | `button, reset, submit` | `button` | type 'button' voor de button |\n */\nconst Button = (props: BaseButtonProps): JSX.Element => {\n const { color, size, rounded, loading, disabled, type, styling } = props;\n let className = 'button';\n\n if (styling === 'static' || styling === 's') className += ' is-static';\n else {\n if (color === 'i') className += ' is-info';\n else if (color === 'l') className += ' is-link';\n else if (color === 'd') className += ' is-danger';\n else if (color === 's') className += ' is-success';\n else if (color === 'w') className += ' is-warning';\n else className += ' is-primary';\n\n if (styling === 'light' || styling === 'l') className += ' is-light';\n else if (styling === 'outlined' || styling === 'o') className += ' is-outlined';\n else if (styling === 'inverted' || styling === 'i') className += ' is-inverted';\n else if (styling === 'light-outlined' || styling === 'lo') className += ' is-light is-outlined';\n }\n\n if (size === 's') className += ' is-small';\n else if (size === 'l') className += ' is-medium';\n else if (size === 'xl') className += ' is-large';\n\n if (rounded) className += ' is-rounded';\n if (loading) className += ' is-loading';\n\n const handleClick = (e: any) => {\n if (loading || disabled || styling == 'static') return;\n props.onClick && props.onClick(e);\n };\n\n const children: any[] | null | undefined = React.Children.map(props.children, (child: any) => {\n if (typeof child === 'string') return <span>{child}</span>;\n return child;\n });\n\n if (!children || children.length === 0)\n warnPackageUser(`<Button>: A <Button> should have at least one child (Current 0).`);\n\n return (\n <button\n className={className}\n type={type ?? 'button'}\n disabled={disabled}\n onClick={(e) => handleClick(e)}\n title={props.tooltip}\n id={props.id}\n >\n {children}\n </button>\n );\n};\n\n/**\n * Een Static Button\n * Een static button is niet interactief, maar wordt bijvoorbeeld gebruikt als scheiding voor add-ons\n * @example <Button.Static>Static Button</Button.Static>\n */\nButton.Static = (props: ButtonProps): JSX.Element => {\n return (\n <Button {...props} styling=\"static\">\n {props.children}\n </Button>\n );\n};\n\n/** Een Button in de primary kleur\n * @example <Button.Primary>Primary Button</Button.Primary>\n */\nButton.Primary = (props: ButtonProps): JSX.Element => (\n <Button {...props} color=\"p\" styling={props.styling ?? 'default'}>\n {props.children}\n </Button>\n);\n\n/** Een Button in de success kleur\n * @example <Button.Success>Success Button</Button.Success>\n */\nButton.Success = (props: ButtonProps): JSX.Element => (\n <Button {...props} color=\"s\" styling={props.styling ?? 'default'}>\n {props.children}\n </Button>\n);\n\n/** Een Button in de danger kleur\n * @example <Button.Danger>Danger Button</Button.Danger>\n */\nButton.Danger = (props: ButtonProps): JSX.Element => (\n <Button {...props} color=\"d\" styling={props.styling ?? 'default'}>\n {props.children}\n </Button>\n);\n\n/** Een Button in de warning kleur\n * @example <Button.Warning>Warning Button</Button.Warning>\n */\nButton.Warning = (props: ButtonProps): JSX.Element => (\n <Button {...props} color=\"w\" styling={props.styling ?? 'default'}>\n {props.children}\n </Button>\n);\n\n/** Een Button in de info kleur\n * @example <Button.Info>Info Button</Button.Info>\n */\nButton.Info = (props: ButtonProps): JSX.Element => (\n <Button {...props} color=\"i\" styling={props.styling ?? 'default'}>\n {props.children}\n </Button>\n);\n\n/** Een Button in de link kleur\n * @example <Button.Link>Link Button</Button.Link>\n */\nButton.Link = (props: ButtonProps): JSX.Element => (\n <Button {...props} color=\"l\" styling={props.styling ?? 'default'}>\n {props.children}\n </Button>\n);\n\nexport { Button };\n","import React from 'react';\n\ntype LinkButtonProps = {\n /** de content van de button */\n children?: React.ReactNode;\n /** onClick voor de button */\n onClick: (e: any) => any | void;\n /** een tooltip voor de button */\n tooltip?: string;\n id?: string;\n};\n\n/**\n * Een button die er uit ziet als een link. Om een link te maken met een onClick() ipv een href.\n * @param props\n * @returns een button die er uit ziet als een link\n * @example <LinkButton onClick={handleClick}>Click me!</LinkButton>\n */\nconst LinkButton = ({ children, onClick, tooltip, id }: LinkButtonProps): JSX.Element => (\n <button className=\"link-button\" onClick={(e) => onClick(e)} title={tooltip} id={id}>\n {children}\n </button>\n);\n\ntype LinkProps = {\n /** link / URL */\n href: string;\n /** open target\n * - default: _blank\n * - string: naam van een <iframe>\n */\n target?: '_blank' | '_self' | '_parent' | '_top' | string;\n /** releatie tussen het huidige document en het gelinkte document */\n rel?:\n | 'alternat'\n | 'author'\n | 'bookmark'\n | 'external'\n | 'help'\n | 'license'\n | 'next'\n | 'nofollow'\n | 'noreferrer'\n | 'noopener'\n | 'prev'\n | 'search'\n | 'tag';\n /** MIME type van een evt download */\n type?: string;\n /** de taal van het gelinkte document */\n hreflang?: string;\n /** is dit een downloadlink? */\n download?: boolean;\n /** de inhoud van de link: wat is er te lezen / zien */\n children?: React.ReactNode;\n /** een tooltip voor de button */\n tooltip?: string;\n id?: string;\n};\n\n/**\n * Een link (duh) die er hetzelfde uit ziet als de linkbutton.\n * @param props\n * @returns een link\n * @example <Link href=\"https://www.google.com\">Google</Link>\n */\nconst Link = (props: LinkProps): JSX.Element => (\n <a\n className=\"link-button\"\n href={props.href}\n target={props.target ?? '_blank'}\n title={props.tooltip}\n id={props.id}\n rel={props.rel ?? 'noopener'}\n >\n {props.children}\n </a>\n);\n\nexport { Link, LinkButton };\nexport type { LinkProps, LinkButtonProps };\n","/* eslint-disable spaced-comment */\n/** type equal to Intl.DateTimeFormatOptions, but with a typed timeZone */\ntype JSDateTimeFormatOptions = Intl.DateTimeFormatOptions & { timeZone?: JSDateTimeZoneType };\n\n/** Type used for setting values in a JSDateTime */\ntype JSDateSetterType = {\n /** set the year value to ... */ year?: number;\n /** set the month value to ... (1 - 12, 0 automatic to 1)*/ month?: number;\n /** set the day value to ... (1 - 31) */ day?: number;\n /** set the hour value to ... (0 - 23) */ hour?: number;\n /** set the minute value to ... (0 - 59) */ minute?: number;\n /** set the second value to ... (0 - 59) */ second?: number;\n /** set the millisecond value to ... (0 - 999) */ millisecond?: number;\n};\n\n/** Type used for changing values in a JSDateTime */\ntype JSChangeDateTimeType = {\n /** number of years to add or subtract */ years?: number;\n /** number of months to add or subtract */ months?: number;\n /** number of weeks to add or subtract */ weeks?: number;\n /** number of days to add or subtract */ days?: number;\n /** number of hours to add or subtract */ hours?: number;\n /** number of minutes to add or subtract */ minutes?: number;\n /** number of seconds to add or subtract */ seconds?: number;\n /** number of milliseconds to add or subtract */ milliseconds?: number;\n};\n\n/**\n * @class JSDateTime\n * @summary\n * JSDateTime is een class voor het werken met datum & tijd in JavaScript. Elk JSDateTime object is een immutable object.\n * Het is niet echt een vervanging voor andere Datum-libraries, maar meer een kleine wrapper rond gewone Javascript Dates, want Dates gebruiken is lastig. \n * Kijk onder de decsription-tag van deze uitleg wat de functies zijn.\n * \n * @example // creating JSDateTime - all methods return a NEW JSDateTime object\n * const date1 = JSDateTime.now(); // timestamp of now\n * const date2 = JSDateTime.fromISO('2020-01-01T00:00:00.000Z'); // 01-01-2020\n * const date3 = JSDateTime.fromDate(new Date()); // timestamp of now\n * const date4 = JSDateTime.fromMillis(0); // 01-01-1970\n * const date5 = JSDateTime.from({ year: 2020, month: 1, day: 1 }) // 01-01-2020\n * \n * @example // changing & chaining JSDateTime - All methods return a NEW JSDateTime object\n * const date1 = JSDateTime.fromISO('2020-06-01T00:00:00.000Z'); // date1: 01-06-2020\n * const date2 = date1.set({ year: 2022, month: 1, day: 1 }); // date2: 01-06-2022, date1: 01-06-2020\n * const date3 = date1.plus({ years: 2, days: 15 }); // date3: 16-06-2022, date1: 01-06-2020\n * const date4 = date1.startOf('year'); // date4: 01-01-2020, date1: 01-06-2020\n * const date5 = date1.endOf('year').startOf('month') // date5: 01-12-2020, date1: 01-06-2020\n * \n * @example // formatting dates\n * const date = JSDateTime.from({year: 2022, month: 6, day: 18}); // date: 18-06-2022\n * date.ISO; // 2020-06-18T00:00:00.000Z\n * date.UTC // Mon, 18 Jul 2022 07:14:08 GMT\n * date.timeHM; // 07:14\n * date.timeHMS; // 07:14:08\n * date.monthLong; // Juli\n * date.monthShort; // Jul\n * date.dayLong; // Monday\n * date.dayShort; // Mon\n * date.toFormat('yyyy-MM-dd'); // 2020-01-01\n * \n * @example // comparing JSDateTimes\n * const date1 = JSDateTime.now(); // date1: 18-06-2022\n * const date2 = JSDateTime.epoch(); // date2: 01-01-1970\n * date1.isBetween(new Date(1970,0,1), new Date(2222, 0,1)) // true\n * date1.isBetween(JSDateTime.fromDate(new Date(1970,0,1), JSDateTime.fromDate(new Date(1900, 0, 1)))) // false\n * date1.isAfter(new Date(1970,0,1)) // true\n * date1.isBefore(new Date(2222, 0,1)) // true\n * date1.hasSame(new Date(2020, 0, 1), 'year') // true\n * date1.hasSame(new Date(2020, 0, 1), 'month') // false\n * const beforeEpoch: boolean = date2 < date1; // true\n * \n * @description Static values & methods on JSDateTime - used for creating JSDateTimes\n * | Value / Method | Description |\n * |------------------------|------------------------------------------------------------------------------------|\n * | `defaultLocale` | Default locale to use. Based on client locale |\n * | `defaultTimeZone` | Default Timezone to use. Based on client timezone |\n * | `MAX_DATE` | (readonly) Max and Min date as Date that can be used in JSDateTime |\n * | `MAX_DATE_NUM` | (readonly) Max and Min millis from 01-01-1970 00:00:00 that can be used |\n * | `defaultFormatOptions` | (readonly) Default format options to use when formatting dates |\n * | `fromISO()` | Creates a new JSDateTime from an ISO string. |\n * | `fromUTC()` | Creates a new JSDateTime from a UTC string. |\n * | `fromDate()` | Creates a new JSDateTime from a Date object. |\n * | `fromMillis()` | Creates a new JSDateTime based on milliseconds since 01-01-1970 00:00:00 |\n * | `from({})` | Creates a new JSDateTime object from a set of values. |\n * | `now()` | Creates a new JSDateTime object from the current timestamp. |\n * | `epoch()` | Creates a new JSDateTime on 01-01-1970 00:00:00. |\n * \n * @description values & methods on JSDateTime instances - used for changing, chaining and comparing JSDateTimes\n * | Value / Method | returns | Description |\n * |--------------------------|--------------|--------------------------------------------------------------------------------|\n * | `valueOf()` | `number ` | Returns the number of milliseconds since 01-01-1970 00:00:00 |\n * | `isLeapYear` | `boolean` | `(get)` Returns true if the year is a leap year |\n * | `isAM` | `boolean` | `(get)` Returns true if the time is AM |\n * | `isPM` | `boolean` | `(get)` Returns true if the time is PM |\n * | `isDST` | `boolean` | `(get)` Returns true if the time is in DST |\n * | `JSDate` | `Date ` | `(get)` Returns the Date as a Javascript Date |\n * | `ISO` | `string ` | `(get)` Returns the date as an ISO string |\n * | `UTC` | `string ` | `(get)` Returns the date as an UTC string |\n * | `locale` | `string ` | `(get)` Returns the locale used for formatting |\n * | `timeZoneLong` | `string ` | `(get)` Returns a long timezone name (Central European Standard Time) |\n * | `timeZoneShort` | `string ` | `(get)` Returns a short timezone name (CEST) |\n * | `timezoneOffsetLongStr` | `number ` | `(get)` Returns the timezone offset as a long string (GMT+02:00) |\n * | `timezoneOffsetShortStr` | `string ` | `(get)` Returns the timezone offset as a long string (+02:00) |\n * | `timezoneOffset` | `number ` | `(get)` Returns the timezone offset as a number |\n * | `timeHM` | `string ` | `(get)` Returns the time as a string (07:14) |\n * | `timeHMS` | `string ` | `(get)` Returns the time as a string (07:14:08) |\n * | `monthLong` | `string ` | `(get)` Returns the month as a long string (January) |\n * | `monthShort` | `string ` | `(get)` Returns the month as a short string (Jan) |\n * | `dayLong` | `string ` | `(get)` Returns the day as a long string (Monday) |\n * | `dayShort` | `string ` | `(get)` Returns the day as a short string (Mon) |\n * | `dateLong` | `string ` | `(get)` Returns the date as a long string (friday 7 september 1990) |\n * | `dateShort` | `string ` | `(get)` Returns the date as a short string (07-09-1990) |\n * | `yr`, `year` | `number ` | `(get)` Returns the year |\n * | `m`, `month` | `number ` | `(get)` Returns the month |\n * | `d`, `day` | `number ` | `(get)` Returns the number of the day in the month |\n * | `h`, `hour` | `number ` | `(get)` Returns the hour |\n * | `min`, `minute` | `number ` | `(get)` Returns the minute |\n * | `s`, `second` | `number ` | `(get)` Returns the second |\n * | `ms`, `millisecond` | `number ` | `(get)` Returns the millisecond |\n * | `weekNr` | `number ` | `(get)` Returns the week number |\n * | `daysInMonth` | `number ` | `(get)` Returns the number of days in the month |\n * | `daysInYear` | `number ` | `(get)` Returns the number of days in the year |\n * | `millis` | `number ` | `(get)` Returns the number of milliseconds since 01-01-1970 00:00:00 |\n * | `yearToDate` | `number ` | `(get)` Returns the number of days since the start of the year |\n * | `set()` | `JSDateTime` | `(method)` Sets the date and time from a set of values. |\n * | `startOf()` | `JSDateTime` | `(method)` Sets the date and time to the start of the given unit. |\n * | `endOf()` | `JSDateTime` | `(method)` Sets the date and time to the end of the given unit. |\n * | `plus()` | `JSDateTime` | `(method)` Adds a set of values to the date and time. |\n * | `isBetween()` | `boolean` | `(method)` true if this JSDateTime is between the given dates. |\n * | `hasSame()` | `boolean` | `(method)` true if this JSDateTime has te same value for the period (same year, same month, same day, etc). See `hasSame()` description for more |\n * | `isAfter()` | `boolean` | `(method)` true if this JSDateTime is after the given date. |\n * | `isBefore()` | `boolean` | `(method)` true if this JSDateTime is before the given date. |\n * | `toFormat()` | `string` | `(method)` Returns the date and time as a string using the given format. See `toFormat()` description for more |\n * | `toString()` | `string` | `(method)` Returns the date and time as a string using the default Intl.DateTimeFormat. See `toString()` description for more |\n */\nclass JSDateTime {\n /** default locale for JSDateTime classes, based on clients browser & location */\n public static defaultLocale = Intl.DateTimeFormat().resolvedOptions().locale;\n /** default Timezone for JSDateTime classes, based on clients browser & location */\n public static defaultTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone as JSDateTimeZoneType;\n /** max number of millies since epoch (01-01-1970) or before epoch */\n public static readonly MAX_DATE_NUM = 8.64e15;\n /** max date based on @see MAX_DATE_NUM */\n public static readonly MAX_DATE = new Date(JSDateTime.MAX_DATE_NUM);\n /** Default formatting options for JSDateTime */\n private static readonly defaultFormatOptions: JSDateTimeFormatOptions = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n };\n\n private readonly IGNORE_SIGN = '^';\n /** date on this JSDateTime object. everything based on this one */\n protected readonly _date: Date;\n /** setted locale on this JSDateTime */\n protected readonly _locale: string;\n /** setted format options on this JSDateTime */\n private readonly formatOptions: JSDateTimeFormatOptions = {};\n\n /** to compare JSDates with each other with <, >, <= and >= */\n valueOf(): number { return this._date.valueOf(); }\n\n protected constructor(date: Date, locale: string, formatOptions: JSDateTimeFormatOptions = {}) {\n this._date = new Date(date);\n this._locale = locale;\n this.formatOptions = {\n ...JSDateTime.defaultFormatOptions,\n timeZone: JSDateTime.defaultTimezone,\n ...formatOptions\n };\n Object.freeze(this);\n }\n\n /** @returns datetime string based on the default format options of this JSDateTime */\n toString(formatOptions: JSDateTimeFormatOptions = this.formatOptions): string { return this.intlDtf(formatOptions); }\n\n /**\n * use DateTimeFormat to get a date string\n * @param dtfOptions \n * @return \n */\n private intlDtf(dtfOptions: JSDateTimeFormatOptions = this.formatOptions): string {\n return new Intl.DateTimeFormat(this._locale, { ...dtfOptions, timeZone: this.formatOptions.timeZone }).format(this._date);\n }\n\n //#region GETTERS\n\n /** @return is JSDateTime in a leap-year (true/false) */\n get isLeapYear(): boolean {\n const year = this._date.getFullYear();\n return (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0);\n }\n\n /** @return is JSDateTime AM (true) or PM (false) */\n get isAM(): boolean { return this._date.getHours() < 12; }\n /** @return is JSDateTime AM (false) or PM (true) */\n get isPM(): boolean { return !this.isAM; }\n /** @returns is DST (Daylight Saving Time) observed */\n get isDST(): boolean {\n const jan = new Date(this._date.getFullYear(), 0, 1).getTimezoneOffset();\n const jul = new Date(this._date.getFullYear(), 6, 1).getTimezoneOffset();\n return Math.max(jan, jul) !== this._date.getTimezoneOffset();\n }\n\n /** @returns is this JSDateTime today? */\n get isToday(): boolean {\n const today = new Date();\n return this._date.getDate() === today.getDate() && this._date.getMonth() === today.getMonth() && this._date.getFullYear() === today.getFullYear();\n }\n\n /** @return JSDate-date as Javascript Date object */\n get JSDate(): Date { return new Date(this._date); }\n\n /** @return date as ISO string ('1990-09-07T12:30:55.666Z') */\n get ISO(): string { return this._date.toISOString(); }\n /** @return date as UTC string ('Fri, 08 Jul 2022 13:34:47 GMT') */\n get UTC(): string { return this._date.toUTCString(); }\n\n /** @return the locale (nl-NL) */\n get locale(): string { return this._locale; }\n\n /** @return a long timezone description (Midden-Europese zomertijd, Australian Standard Time) */\n get timezoneLong(): string { return this.intlDtf({ timeZoneName: 'long' }).replaceAll(/[^A-Z\\s-]/gi, '').replace('--', '').trim(); }\n /** @return a short timezone descriptn (CEST, CET, AEST) */\n get timezoneShort(): string { return this.intlDtf({ timeZoneName: 'short' }).replaceAll(/[^A-Z]/g, ''); }\n\n /** @return current timezone offset as a string (+02:00) */\n get timezoneOffsetShortStr(): string {\n const offsetStr = this.intlDtf({ timeZoneName: 'longOffset' });\n const indexOfPLus = offsetStr.indexOf('+');\n return offsetStr.substring(indexOfPLus);\n }\n\n /** @return current timezone offset as a string (GMT+02:00) */\n get timezoneOffsetLongStr(): string {\n const offsetStr = this.intlDtf({ timeZoneName: 'longOffset' });\n const indexOfPLus = offsetStr.indexOf('GMT');\n return offsetStr.substring(indexOfPLus);\n }\n\n /** @return current timezone offset (+2) */\n get timezoneOffset(): number {\n const offsetStr = this.intlDtf({ timeZoneName: 'shortOffset' });\n\n let signIndex = offsetStr.indexOf('+');\n if (signIndex < 0) signIndex = offsetStr.indexOf('-');\n if (signIndex < 0) return 0;\n\n return parseInt(offsetStr.substring(signIndex));\n }\n\n /** @return a time string (12:30) */\n get timeHM(): string { return this.intlDtf({ hour: '2-digit', minute: '2-digit' }); }\n /** @return a time string (12:30:45) */\n get timeHMS(): string { return this.intlDtf({ hour: '2-digit', minute: '2-digit', second: '2-digit' }); }\n\n /** @return the whole month name (september) */\n get monthLong(): string { return this.intlDtf({ month: 'long' }); }\n /** @return an abbreviated month name (sep) */\n get monthShort(): string { return this.intlDtf({ month: 'short' }); }\n\n /** @return the whole day name (friday) */\n get dayLong(): string { return this.intlDtf({ weekday: 'long' }); }\n /** @return an abbreviated day name (fri) */\n get dayShort(): string { return this.intlDtf({ weekday: 'short' }); }\n\n /** @return a long date string (friday 7 september 1990) */\n get dateLong(): string { return `${this.dayLong} ${this.day} ${this.monthLong} ${this.year}`; }\n /** @return a short date string (07-09-1990) */\n get dateShort(): string { return this.intlDtf({ day: '2-digit', month: '2-digit', year: 'numeric' }); }\n\n /** @return year (1990) */\n get yr(): number { return this.year; }\n /** @return year (1990) */\n get year(): number { return this._date.getFullYear(); }\n\n /** @return month number (1-12) */\n get m(): number { return this.month; }\n /** @return month number (1-12) */\n get month(): number { return this._date.getMonth() + 1; }\n\n get d(): number { return this.day; }\n /** @return day of the month number (1-31) */\n get day(): number { return this._date.getDate(); }\n /** @return day of the week number (1-7, ma = 1, di = 2, ... zo = 7) */\n get weekDay(): number { return this._date.getDay() == 0 ? 7 : this._date.getDay(); }\n\n /** @return hour (0-23) */\n get hr(): number { return this.hour; }\n /** @return hour (0-23) */\n get hour(): number { return this._date.getHours(); }\n\n /** @return minute (0-59) */\n get min(): number { return this.minute; }\n /** @return minute (0-59) */\n get minute(): number { return this._date.getMinutes(); }\n\n /** @return second (0-59) */\n get sec(): number { return this.second; }\n /** g@returnet second (0-59) */\n get second(): number { return this._date.getSeconds(); }\n\n /** @return millisecond (0-999) */\n get ms(): number { return this.millisecond; }\n /** @return millisecond (0-999) */\n get millisecond(): number { return this._date.getMilliseconds(); }\n\n /** @return week number (1-53) */\n get weekNr(): number {\n const newDate = new Date(Date.UTC(this._date.getFullYear(), this._date.getMonth(), this._date.getDate()));\n newDate.setUTCDate(newDate.getUTCDate() + 4 - (newDate.getUTCDay() || 7));\n const yrStart = new Date(Date.UTC(newDate.getUTCFullYear(), 0, 1));\n return Math.ceil((((newDate.getTime() - yrStart.getTime()) / 86400000) + 1) / 7);\n }\n\n /** @return number of milliseconds since epoch (01-01-1970 00:00:00) */\n get millis(): number { return this.valueOf(); }\n /** @return number of days in a month (28, 29, 30 or 31) */\n get daysInMonth(): number { return new Date(this._date.getFullYear(), this._date.getMonth() + 1, 0).getDate(); }\n /** @return number of days in year of this JSDateTime */\n get daysInYear(): number { return this.isLeapYear ? 366 : 365; }\n get yearToDate(): number {\n const dayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n const dayOfYear = dayCount[this._date.getMonth()] + this._date.getDate();\n return this.isLeapYear && this.month > 2 ? dayOfYear + 1 : dayOfYear;\n }\n\n //#endregion\n\n //#region changing data (no changing, only new objects)\n\n /**\n * return a new JSDateTime object with the given data, based on this JSDateTime object.\n * the old value is NOT changed\n * @param val the new values. if no values are given, the current values are used\n * @param locale a new locale, if not given, the current locale is used\n * @return a new JSDateTime with updated values\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * const date2 = date.set({year: 1990, month: 12, day: 1}); // 01-12-1990\n */\n set(val: JSDateSetterType, locale: string = this._locale): JSDateTime {\n const data = { year: this.year, month: this.month, day: this.day, hour: this.hour, minute: this.minute, second: this.second, millisecond: this.millisecond };\n return JSDateTime.from({ ...data, ...val }, locale);\n }\n\n /**\n * Returns a new JSDateTime object where the date is set to the start of a period.\n * the old value is NOT changed\n * @param period the period\n * @return a new readonly JSDateTime object\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 11, 31)); // 31-12-2020\n * const date2 = date.startof('year'); // 01-01-2020\n */\n startOf(period: 'year' | 'month' | 'week' | 'day' | 'hour'): JSDateTime {\n switch (period) {\n case 'year': return JSDateTime.from({ year: this.year, month: 0, day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 }, this._locale);\n case 'month': return JSDateTime.from({ year: this.year, month: this.month, day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 }, this._locale);\n case 'week': {\n const newDate = new Date(this.JSDate);\n const diff = newDate.getDate() - newDate.getDay() + (newDate.getDay() === 0 ? -6 : 1);\n return JSDateTime\n .fromDate(new Date(newDate.setDate(diff)), this._locale)\n .set({ hour: 0, minute: 0, second: 0, millisecond: 0 });\n }\n case 'day': return JSDateTime.from({ year: this.year, month: this.month, day: this.day, hour: 0, minute: 0, second: 0, millisecond: 0 }, this._locale);\n case 'hour': return JSDateTime.from({ year: this.year, month: this.month, day: this.day, hour: this.hour, minute: 0, second: 0, millisecond: 0 }, this._locale);\n default: throw new Error(`${period} is not a valid period for JSDateTime.startOf()`);\n }\n }\n\n /**\n * Returns a new JSDateTime object where the date is set to the end of a period.\n * the old value is NOT changed.\n * @param period the period\n * @return a new readonly JSDateTime object\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * const date2 = date.endOf('year'); // 31-12-2020\n */\n endOf(period: 'year' | 'month' | 'week' | 'day' | 'hour'): JSDateTime {\n switch (period) {\n case 'year': return JSDateTime.from({ year: this.year, month: 12, day: 31, hour: 23, minute: 59, second: 59, millisecond: 999 }, this._locale);\n case 'month': return JSDateTime.from({ year: this.year, month: this.month, day: this.daysInMonth, hour: 23, minute: 59, second: 59, millisecond: 999 }, this._locale);\n case 'week': {\n const newDate = new Date(this.JSDate);\n const lastDay = this.JSDate.getDate() - (newDate.getDay() - 1) + 6;\n return JSDateTime\n .fromDate(new Date(newDate.setDate(lastDay)), this._locale)\n .set({ hour: 23, minute: 59, second: 59, millisecond: 999 }, this._locale);\n }\n case 'day': return JSDateTime.from({ year: this.year, month: this.month, day: this.day, hour: 23, minute: 59, second: 59, millisecond: 999 }, this._locale);\n case 'hour': return JSDateTime.from({ year: this.year, month: this.month, day: this.day, hour: this.hour, minute: 59, second: 59, millisecond: 999 }, this._locale);\n default: throw new Error(`${period} is not a valid period for JSDateTime.endOf()`);\n }\n }\n\n /**\n * add values to a date. Starting with the biggest unit (year) to the smallest (millisecond).\n * the old value is NOT changed.\n * @param addVals object with values to add to the date\n * @return a new readonly JSDateTime object\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * const date2 = date.add({ year: 1, month: 1, day: 1 }); // 02-02-2021\n */\n plus(addVals: JSChangeDateTimeType): JSDateTime {\n let date = new Date(this.JSDate);\n if (addVals.years) date = new Date(date.setFullYear(date.getFullYear() + addVals.years));\n if (addVals.months) date = new Date(date.setMonth(date.getMonth() + addVals.months));\n if (addVals.weeks) date = new Date(date.setDate(date.getDate() + (addVals.weeks * 7)));\n if (addVals.days) date = new Date(date.setDate(date.getDate() + addVals.days));\n if (addVals.hours) date = new Date(date.setHours(date.getHours() + addVals.hours));\n if (addVals.minutes) date = new Date(date.setMinutes(date.getMinutes() + addVals.minutes));\n if (addVals.seconds) date = new Date(date.setSeconds(date.getSeconds() + addVals.seconds));\n if (addVals.milliseconds) date = new Date(date.setMilliseconds(date.getMilliseconds() + addVals.milliseconds));\n\n return JSDateTime.fromDate(date, this._locale);\n }\n\n /**\n * check if this JSDateTime object is between two other JSDates or Dates\n * @param dates a tuple with two JSDateTime|Date instances\n * @return is this JSDateTime between the two dates (true|false)\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * date.isBetween([new Date(2030, 0, 1), new Date(2010, 0, 1)]); // true\n * date.isBefore([new Date(2010, 0, 1), new Date(2015, 0, 1)]); // false\n */\n isBetween(dates: [JSDateTime | Date, JSDateTime | Date]): boolean {\n const [date1, date2] = dates;\n\n if (date1 < date2) return (date1 < this._date && this._date < date2);\n else if (date1 > date2) return (date2 < this._date && this._date < date1);\n else throw new Error('dates must be different');\n\n };\n\n /**\n * Is this JSDateTime before another Date or JSDateTime.\n * JSDateTime implements the .valueOf() method of objects, so it is possible to compare JSDateTime objects and Date objects through <, >, ==, <= and >=.\n * @param date the date to compare to\n * @param includeEqual if the dates are equal, return true or false? (default: false)\n * @return is the given date before this JSDateTime (true/false)\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * date.isBefore(new Date(2021, 0, 1)); // true\n * date.isBefore(new Date(2019, 0, 1)); // false\n */\n isBefore(date: Date | JSDateTime, includeEqual: boolean = false): boolean { return includeEqual ? this._date >= date : this._date > date; }\n\n /**\n * Is this JSDateTime after another Date or JSDateTime.\n * JSDateTime implements the .valueOf() method of objects, so it is possible to compare JSDateTime objects and Date objects through <, >, ==, <= and >=.\n * @param date the date to compare to\n * @param includeEqual if the dates are equal, return true or false? (default: false)\n * @return is the given date after this JSDateTime (true/false)\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * date.isAfter(new Date(2021, 0, 1)); // false\n * date.isAfter(new Date(2019, 0, 1)); // true\n */\n isAfter(date: Date | JSDateTime, includeEqual: boolean = false): boolean { return includeEqual ? this._date <= date : this._date < date; }\n\n /**\n * checks if a Date or JSDateTime is equal on some level to this JSDateTime. The method checks until given period-level. \n * If hasSame('xxx', 'day') returns true, the year, month and day are the same. hours, minutes, seconds and milliseconds are not checked\n * \n * \n * @param date Date or JSDateTime object to compare with\n * @param period the perio that should be the same (default = 'millisecond')\n * @return if the dates share the same period (true/false)\n * @example \n * const jsDate = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * jsDate.hasSame(new Date(2020, 7, 17)), 'year') // true\n * jsDate.hasSame(new Date(2020, 7, 17)), 'month') // true\n * jsDate.hasSame(new Date(2020, 7, 17)), 'day') // false\n * jsDate.hasSame(new Date(2021, 0, 01)), 'year') // false\n */\n hasSame(date: Date | JSDateTime, period: 'year' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second' | 'millisecond' = 'millisecond'): boolean {\n const dstDate = new Date(date.valueOf());\n switch (period) {\n case 'year': return this.yr === dstDate.getFullYear();\n case 'month': return this.yr === dstDate.getFullYear() && (this.m - 1) === dstDate.getMonth();\n case 'day': return this.yr === dstDate.getFullYear() && (this.m - 1) === dstDate.getMonth() && this.d === dstDate.getDate();\n case 'hour': return this.yr === dstDate.getFullYear() && (this.m - 1) === dstDate.getMonth() && this.d === dstDate.getDate() && this.hr === dstDate.getHours();\n case 'minute': return this.yr === dstDate.getFullYear() && (this.m - 1) === dstDate.getMonth() && this.d === dstDate.getDate() && this.hr === dstDate.getHours() && this.min === dstDate.getMinutes();\n case 'second': return this.yr === dstDate.getFullYear() && (this.m - 1) === dstDate.getMonth() && this.d === dstDate.getDate() && this.hr === dstDate.getHours() && this.min === dstDate.getMinutes() && this.sec === dstDate.getSeconds();\n case 'millisecond': return this.valueOf() === dstDate.valueOf();\n default: throw new Error(`invalid period '${period}' for hasSame()`);\n }\n }\n\n /**\n * Checks if a JSDateTime, Date or millis-since-epoch number is equal to this JSDateTime, since you cannot compare two JSDateTime items with '==' or '===', even with .valueOf() implemented.\n * This method compares the time and date of the values, not if they are the same objects.\n * \n * method `hasSame(date: Date|JSDateTime)` with default period 'millisecond' has the same functionality.\n * \n * @param val the value to compare to\n * @returns is the given value equal to this JSDateTime\n * @example \n * const jsDate = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * jsDate.equals(new Date(2020, 0, 1)); // true\n * jsDate.equals(new Date(2020, 0, 2)); // false\n * jsDate.equals(JSDateTime.epoch); // false\n * jsDate.equals(0); // false\n * JSDateTime.epoch().is(0); // true\n */\n equals(val: Date | JSDateTime | number): boolean {\n if (val instanceof JSDateTime) return this._date.valueOf() === val.valueOf();\n else if (val instanceof Date) return this._date.valueOf() === val.valueOf();\n else if (typeof val === 'number') return this._date.valueOf() === val;\n throw new Error('invalid type');\n }\n\n /**\n * Clone this JSDateTIme to a new object.\n * @returns new JSDateTime object with the same time and date as this one\n */\n clone(): JSDateTime {\n return JSDateTime.fromMillis(this.valueOf(), this.locale);\n }\n\n //#endregion\n\n //#region creating JSDates (static methods)\n\n /**\n * a new JSDateTime object with the current date and time\n * @param locale locale, if different from default (JSData.defaultLocale)\n * @param formatOptions format options, if different from default (JSData.defaultFormatOptions)\n * @return readonly JSDateTime object\n * @example JSDateTime.now() // current Date & time\n */\n public static now(locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n const jsdate = new JSDateTime(new Date(), locale, formatOptions);\n return jsdate;\n }\n\n /**\n * a new JSDateTime object on 01 januari 1970 00:00:00\n * @param locale locale, if different from default (JSData.defaultLocale)\n * @param formatOptions format options, if different from default (JSData.defaultFormatOptions)\n * @param formatOptions \n * @returns readonly JSDateTime object with the date 01-01-1970 00:00:00\n * @example JSDateTime.epoch() // 01-01-1970 00:00:00\n */\n public static epoch(locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n const jsdate = new JSDateTime(new Date(0), locale, formatOptions);\n return jsdate;\n }\n\n /**\n * a new JSDateTime object for a given date (Date)\n * @param date Javascript Date object for a date\n * @param locale locale, if different from default (JSData.defaultLocale)\n * @param formatOptions format options, if different from default (JSData.defaultFormatOptions)\n * @return readonly JSDateTime object\n * @example JSDateTime.fromDate(new Date(2020, 0, 1)) // 01-01-2020\n */\n public static fromDate(date: Date, locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n return new JSDateTime(date, locale, formatOptions);\n }\n\n /**\n * a new JSDateTime object based on a @see JSDateSetterType. \n * @param value object with values for a date, like year, month, day, hour, minute, second, millisecond\n * @param locale locale, if different from default (JSData.defaultLocale)\n * @param formatOptions format options, if different from default (JSData.defaultFormatOptions)\n * @return readonly JSDateTime object\n * @example JSDateTime.from({ year: 2020, month: 1, day: 1 }) // 01-01-2020\n */\n public static from(value: JSDateSetterType, locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n const now = new Date();\n const data = {\n year: value.year ?? now.getFullYear(),\n month: value.month != undefined ? (value.month == 0 ? 1 : value.month) : now.getMonth() + 1,\n day: value.day ?? now.getDate(),\n hour: value.hour ?? now.getHours(),\n minute: value.minute ?? now.getMinutes(),\n second: value.second ?? now.getSeconds(),\n millisecond: value.millisecond ?? now.getMilliseconds()\n };\n\n const { year, month, day, hour, minute, second, millisecond } = data;\n\n // valideer de invoerwaarden\n if (month > 12 || month < 1) throw new RangeError(`month value should be between 1 and 12, got ${month}`);\n else if (hour > 23 || hour < 0) throw new RangeError(`hour value should be between 0 and 23, got ${hour}`);\n else if (minute > 59 || minute < 0) throw new RangeError(`minute value should be between 0 and 59, got ${minute}`);\n else if (second > 59 || second < 0) throw new RangeError(`second value should be between 0 and 59, got ${second}`);\n else if (millisecond > 999 || millisecond < 0) throw new RangeError(`milliseconds value should be between 0 and 999, got ${millisecond}`);\n\n const newDate = new Date(year, month, 0);\n const dayCount = newDate.getDate();\n if (day > dayCount || day < 1)\n throw new RangeError(`day value should be between 1 and ${dayCount} for ${newDate.toLocaleString(locale, { month: 'short' })} ${year}, got ${day}`);\n\n const jsdate = new JSDateTime(new Date(year, month - 1, day, hour, minute, second, millisecond), locale, formatOptions);\n return jsdate;\n }\n\n /**\n * a new JSDateTime object based on an ISO string\n * @param iso a date in ISO format (1990-09-07T12:30:55.666Z)\n * @param locale locale, if different from default (JSData.defaultLocale)\n * @return readonly JSDateTime object\n * @example JSDateTime.fromISO('1990-09-07T12:30:55.666Z')\n */\n public static fromISO(iso: string, locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n const d = new Date(Date.parse(iso));\n return new JSDateTime(d, locale, formatOptions);\n }\n\n /**\n * a new JSDateTime object based on an ISO string\n * @param utc a date in UTC format (Fri, 08 Jul 2022 13:34:47 GMT)\n * @param locale locale, if different from default (JSData.defaultLocale)\n * @param formatOptions format options, if different from default (JSData.defaultFormatOptions)\n * @return readonly JSDateTime object\n * @example JSDateTime.fromUTC('Fri, 08 Jul 2022 13:34:47 GMT')\n */\n public static fromUTC(utc: string, locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n const d = new Date(Date.parse(utc));\n return new JSDateTime(d, locale, formatOptions);\n }\n\n /**\n * A new JSDateTime object based on milliseconds sinde 1970-01-01T00:00:00.000Z\n * @param ms number of milliseconds\n * @param locale locale if different from default (JSData.defaultLocale)\n * @param formatOptions if different from default (JSData.defaultFormatOptions)\n * @return readonly JSDateTime object\n * @example JSDateTime.fromMillis(0) // 01-01-1970 00:00:00\n * @example JSDateTime.fromMillis(1000) // 01-01-1970 00:00:01\n */\n public static fromMillis(ms: number | string, locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n const millis: number = typeof ms === 'string' ? +ms : ms;\n if (isNaN(millis)) throw new Error(`fromMillis() expects a numeric value, got \"${ms}\"`);\n else if (millis > JSDateTime.MAX_DATE_NUM || millis < -JSDateTime.MAX_DATE_NUM) throw new Error(`fromMillis() expects a numeric value, got \"${ms}\"`);\n\n return new JSDateTime(new Date(millis), locale, formatOptions);\n }\n\n //#endregion\n\n //#region Formatting\n\n /**\n * Formatten van een datum mbv keys. Onderaan deze uitleg staan deze keys\n * new JSDateTime(2022, 1, 1, 3, 4, 5, 6,789).fo() // \"Tue, 01 Feb 2021 03:04:05.678 GMT, 01-02-2011\"\n * \n * @param format string, like \"dddd dd MMMM yyyy HH:mm:ss.SSS\" or DateTimeFormatOptions\n * @return date-string based on format\n *\n * @description Accepted patterns and characters:\n * | Unit | Pattern | Example | Description |\n * |--------------|-----------|------------------------------|------------------------------------------------|\n * | IGNORE CHAR | `^...^` | `^HADIHO^` | txt between 1st ^ and 2nd ^ are ignored |\n * | day of month | `d` | `7`, `14` | Day of the month as digits; no leading zero. |\n * | | `dd` | `07`, `14` | Day of the month as digits; leading zero |\n * | day of week | `ddd` | `thu` | Day of the week as a three-letter abbr. |\n * | | `dddd` | `thursday` | Day of the week as its full name. |\n * | month | `m` | `1`, `12` | Month as digits; no leading zero. |\n * | | `mm` | `01`, `12` | Month as digits; leading zero |\n * | | `mmm` | `Aug` | Month as a three-letter abbr. |\n * | | `mmmm` | `August` | Month as its full name. |\n * | year | `yy` | `22`, `19`, `07` | Year as last two digits. |\n * | | `yyyy` | `2022`, `2019`, `2007` | Year as four digits. |\n * | hour | `H` | `0`, `13` | Hour as digits (0-23); no leading zero. |\n * | | `HH` | `00`, `13` | Hour as digits (0-23); leading zero |\n * | | `h` | `1`, `12` | Hour as digits (0-12); no leading zero. |\n * | | `hh` | `01`, `12` | Hour as digits (0-12); leading zero |\n * | minute | `M` | `0`, `59` | Minute as digits; no leading zero. |\n * | | `MM` | `00`, `59` | Minute as digits; leading zero |\n * | second | `s` | `0`, `59` | Second as digits; no leading zero. |\n * | | `ss` | `00`, `59` | Second as digits; leading zero |\n * | millisecond | `S` | `0`, `999` | Millisecond as digits; no leading zero |\n * | | `SSS` | `000`, `999` | Millisecond as digits; leading zero's |\n * | am/pm | `T` | `A`, `P` | AM or PM, 1 character |\n * | | `TT` | `am`, `pm` | AM or PM, 2 characters |\n * | timezone | `Z` | `CEST`, `AEST` | Timezone name - short version |\n * | | `ZZ` | `Central Europe Summer Time` | Timezone name - long version |\n * | tz offset | `O` | `+2`, `-4` | Timezone offset in hours and minutes (short) |\n * | | `OO` | `+02:00` | Timezone offset in hours and minutes (longer) |\n * | | `OOO` | `GMT+02:00` | Timezone offset in hours and minutes (longest) |\n *\n * @example \n * // example for donderdag 7 oktober 1999 04:30:45.678 (AM), week 40 \n * const dt = JSDateTime.fromDate(new Date());\n * dt.toFormat('dddd dd mmmm yyyy HH:mm:ss.SSS tt'); // 'donderdag 7 oktober 1999 04:30:45.678 AM'\n * dt.toFormat('ddd d mmm yy') // 'do 7 okt 99'\n * dt.toFormat('DD-mm-yyyy') // '07-10-1990'\n * dt.toFormat('HH:MM:ss.SSS') // '04:30:45.678'\n * dt.toFormat('hh:MM tt') // '04:30 AM'\n * dt.toFormat('HH:MM OO') // '04:30 +02:00'\n * dt.toFormat('HH:MM Z') // '04:30 CEST'\n * dt.toFormat('^HH:MM ZZ^') // 'HH:MM ZZ'\n */\n toFormat(format: string | JSDateTimeFormatOptions): string {\n if (typeof format !== 'string') return this.intlDtf(format);\n let rslt = this.formatBuilder(format);\n\n // change year num\n if (rslt.includes('[y4]')) rslt = rslt.replaceAll('[y4]', this.yr + ''); // 1999\n if (rslt.includes('[y2]')) rslt = rslt.replaceAll('[y2]', (this.yr.toString().substring(2))); // 99\n\n // change month\n if (rslt.includes('[m4]')) rslt = rslt.replaceAll('[m4]', this.monthLong); // januari\n if (rslt.includes('[m3]')) rslt = rslt.replaceAll('[m3]', this.monthShort); // jan\n if (rslt.includes('[m2]')) rslt = rslt.replaceAll('[m2]', this.intlDtf({ month: '2-digit' })); // 01\n if (rslt.includes('[m1]')) rslt = rslt.replaceAll('[m1]', this.intlDtf({ month: 'numeric' })); // 1\n\n // change day\n if (rslt.includes('[d4]')) rslt = rslt.replaceAll('[d4]', this.dayLong); // donderdag\n if (rslt.includes('[d3]')) rslt = rslt.replaceAll('[d3]', this.dayShort); // do.\n if (rslt.includes('[d2]')) rslt = rslt.replaceAll('[d2]', this.intlDtf({ day: '2-digit' })); // 07\n if (rslt.includes('[d1]')) rslt = rslt.replaceAll('[d1]', this.day + ''); // 7\n\n // change hour num\n if (rslt.includes('[h2]')) rslt = rslt.replaceAll('[h2]', this.hr > 12 ? `${(this.hr - 12) < 10 ? '0' : ''}${this.hr - 12}` : `${this.hr < 10 ? '0' : ''}${this.hr}`); // 0-12\n if (rslt.includes('[h1]')) rslt = rslt.replaceAll('[h1]', this.hr > 12 ? (this.hr - 12).toString() : this.hr.toString()); // 00-12\n if (rslt.includes('[H2]')) rslt = rslt.replaceAll('[H2]', `${this.hr < 10 ? '0' : ''}${this.hr}`); // 00-23\n if (rslt.includes('[H1]')) rslt = rslt.replaceAll('[H1]', this.hr.toString()); // 0-23\n\n // change minute num\n if (rslt.includes('[M2]')) rslt = rslt.replaceAll('[M2]', `${this.minute < 10 ? '0' : ''}${this.minute}`); // 05, 45\n if (rslt.includes('[M1]')) rslt = rslt.replaceAll('[M1]', this.minute + ''); // 5, 45\n\n // change second num\n if (rslt.includes('[s2]')) rslt = rslt.replaceAll('[s2]', `${this.second < 10 ? '0' : ''}${this.second}`); // 05, 45\n if (rslt.includes('[s1]')) rslt = rslt.replaceAll('[s1]', this.second + ''); // 5, 45\n\n // change millisecond num\n if (rslt.includes('[S3]')) rslt = rslt.replaceAll('[S3]', this.millisecond < 10 ? `00${this.millisecond}` : this.millisecond < 100 ? `0${this.millisecond}` : this.millisecond + ''); // 001, 020, 200\n if (rslt.includes('[S2]')) rslt = rslt.replaceAll('[S2]', this.millisecond < 10 ? `00${this.millisecond}` : this.millisecond < 100 ? `0${this.millisecond}` : this.millisecond + ''); // 001, 020, 200\n if (rslt.includes('[S1]')) rslt = rslt.replaceAll('[S1]', this.millisecond + ''); // 1, 20, 300\n\n // change Week number\n if (rslt.includes('[W2]')) rslt = rslt.replaceAll('[W2]', this.weekNr + '');\n\n // change AM/PM\n if (rslt.includes('[t2]')) rslt = rslt.replaceAll('[t2]', this.isAM ? 'AM' : 'PM'); // AM, PM\n if (rslt.includes('[t1]')) rslt = rslt.replaceAll('[t1]', this.isAM ? 'A' : 'P'); // A, P\n\n // change timezone name\n if (rslt.includes('[Z2]')) rslt = rslt.replaceAll('[Z2]', this.timezoneLong); // Cental European Summer Time\n if (rslt.includes('[Z1]')) rslt = rslt.replaceAll('[Z1]', this.timezoneShort); // CEST\n\n // change timezone offset\n if (rslt.includes('[O3]')) rslt = rslt.replaceAll('[O3]', this.timezoneOffsetLongStr);\n if (rslt.includes('[O2]')) rslt = rslt.replaceAll('[O2]', (this.timezoneOffsetShortStr.replace('GMT', '')));\n if (rslt.includes('[O1]')) rslt = rslt.replaceAll('[O1]', this.timezoneOffset > 0 ? `+${this.timezoneOffset}` : this.timezoneOffset < 0 ? `${this.timezoneOffset}` : '');\n\n return rslt.replaceAll(this.IGNORE_SIGN, '').trim();\n\n }\n\n /** converteer een format naar een bruikbare replaceable string */\n private formatBuilder(format: string): string {\n\n let rslt = '';\n let prevToken = '';\n let counter = 0;\n let ignore = false;\n\n const allowed = 'ymdhHMsSWtZO';\n (format + ' ').split('').forEach((c) => {\n if (prevToken == '') counter = 1;\n else if (!ignore && c === prevToken && allowed.includes(c)) counter++;\n else if (!ignore && c === prevToken && !allowed.includes(c)) { counter++; rslt += prevToken; }\n else if (!ignore) {\n rslt += allowed.includes(prevToken) ? `[${prevToken}${counter}]` : prevToken;\n counter = 1;\n }\n else if (ignore) {\n rslt += prevToken;\n counter = 1;\n }\n\n if (c === this.IGNORE_SIGN) ignore = !ignore;\n prevToken = c;\n });\n return rslt;\n }\n //#endregion\n}\n\nexport { JSDateTime };\nexport type { JSChangeDateTimeType, JSDateSetterType, JSDateTimeZoneType };\n\n/** Type for timezones (<Continent>/<Location>), Is on the bottom side because its very long and just a lot of strings */\ntype JSDateTimeZoneType = 'Africa/Abidjan' |\n 'Africa/Accra' |\n 'Africa/Algiers' |\n 'Africa/Bissau' |\n 'Africa/Cairo' |\n 'Africa/Casablanca' |\n 'Africa/Ceuta' |\n 'Africa/El_Aaiun' |\n 'Africa/Johannesburg' |\n 'Africa/Juba' |\n 'Africa/Khartoum' |\n 'Africa/Lagos' |\n 'Africa/Maputo' |\n 'Africa/Monrovia' |\n 'Africa/Nairobi' |\n 'Africa/Ndjamena' |\n 'Africa/Sao_Tome' |\n 'Africa/Tripoli' |\n 'Africa/Tunis' |\n 'Africa/Windhoek' |\n 'America/Adak' |\n 'America/Anchorage' |\n 'America/Araguaina' |\n 'America/Argentina/Buenos_Aires' |\n 'America/Argentina/Catamarca' |\n 'America/Argentina/Cordoba' |\n 'America/Argentina/Jujuy' |\n 'America/Argentina/La_Rioja' |\n 'America/Argentina/Mendoza' |\n 'America/Argentina/Rio_Gallegos' |\n 'America/Argentina/Salta' |\n 'America/Argentina/San_Juan' |\n 'America/Argentina/San_Luis' |\n 'America/Argentina/Tucuman' |\n 'America/Argentina/Ushuaia' |\n 'America/Asuncion' |\n 'America/Atikokan' |\n 'America/Bahia' |\n 'America/Bahia_Banderas' |\n 'America/Barbados' |\n 'America/Belem' |\n 'America/Belize' |\n 'America/Blanc-Sablon' |\n 'America/Boa_Vista' |\n 'America/Bogota' |\n 'America/Boise' |\n 'America/Cambridge_Bay' |\n 'America/Campo_Grande' |\n 'America/Cancun' |\n 'America/Caracas' |\n 'America/Cayenne' |\n 'America/Chicago' |\n 'America/Chihuahua' |\n 'America/Costa_Rica' |\n 'America/Creston' |\n 'America/Cuiaba' |\n 'America/Curacao' |\n 'America/Danmarkshavn' |\n 'America/Dawson' |\n 'America/Dawson_Creek' |\n 'America/Denver' |\n 'America/Detroit' |\n 'America/Edmonton' |\n 'America/Eirunepe' |\n 'America/El_Salvador' |\n 'America/Fort_Nelson' |\n 'America/Fortaleza' |\n 'America/Glace_Bay' |\n 'America/Godthab' |\n 'America/Goose_Bay' |\n 'America/Grand_Turk' |\n 'America/Guatemala' |\n 'America/Guayaquil' |\n 'America/Guyana' |\n 'America/Halifax' |\n 'America/Havana' |\n 'America/Hermosillo' |\n 'America/Indiana/Indianapolis' |\n 'America/Indiana/Knox' |\n 'America/Indiana/Marengo' |\n 'America/Indiana/Petersburg' |\n 'America/Indiana/Tell_City' |\n 'America/Indiana/Vevay' |\n 'America/Indiana/Vincennes' |\n 'America/Indiana/Winamac' |\n 'America/Inuvik' |\n 'America/Iqaluit' |\n 'America/Jamaica' |\n 'America/Juneau' |\n 'America/Kentucky/Louisville' |\n 'America/Kentucky/Monticello' |\n 'America/La_Paz' |\n 'America/Lima' |\n 'America/Los_Angeles' |\n 'America/Maceio' |\n 'America/Managua' |\n 'America/Manaus' |\n 'America/Martinique' |\n 'America/Matamoros' |\n 'America/Mazatlan' |\n 'America/Menominee' |\n 'America/Merida' |\n 'America/Metlakatla' |\n 'America/Mexico_City' |\n 'America/Miquelon' |\n 'America/Moncton' |\n 'America/Monterrey' |\n 'America/Montevideo' |\n 'America/Nassau' |\n 'America/New_York' |\n 'America/Nipigon' |\n 'America/Nome' |\n 'America/Noronha' |\n 'America/North_Dakota/Beulah' |\n 'America/North_Dakota/Center' |\n 'America/North_Dakota/New_Salem' |\n 'America/Ojinaga' |\n 'America/Panama' |\n 'America/Pangnirtung' |\n 'America/Paramaribo' |\n 'America/Phoenix' |\n 'America/Port-au-Prince' |\n 'America/Port_of_Spain' |\n 'America/Porto_Velho' |\n 'America/Puerto_Rico' |\n 'America/Punta_Arenas' |\n 'America/Rainy_River' |\n 'America/Rankin_Inlet' |\n 'America/Recife' |\n 'America/Regina' |\n 'America/Resolute' |\n 'America/Rio_Branco' |\n 'America/Santarem' |\n 'America/Santiago' |\n 'America/Santo_Domingo' |\n 'America/Sao_Paulo' |\n 'America/Scoresbysund' |\n 'America/Sitka' |\n 'America/St_Johns' |\n 'America/Swift_Current' |\n 'America/Tegucigalpa' |\n 'America/Thule' |\n 'America/Thunder_Bay' |\n 'America/Tijuana' |\n 'America/Toronto' |\n 'America/Vancouver' |\n 'America/Whitehorse' |\n 'America/Winnipeg' |\n 'America/Yakutat' |\n 'America/Yellowknife' |\n 'Antarctica/Casey' |\n 'Antarctica/Davis' |\n 'Antarctica/DumontDUrville' |\n 'Antarctica/Macquarie' |\n 'Antarctica/Mawson' |\n 'Antarctica/Palmer' |\n 'Antarctica/Rothera' |\n 'Antarctica/Syowa' |\n 'Antarctica/Troll' |\n 'Antarctica/Vostok' |\n 'Asia/Almaty' |\n 'Asia/Amman' |\n 'Asia/Anadyr' |\n 'Asia/Aqtau' |\n 'Asia/Aqtobe' |\n 'Asia/Ashgabat' |\n 'Asia/Atyrau' |\n 'Asia/Baghdad' |\n 'Asia/Baku' |\n 'Asia/Bangkok' |\n 'Asia/Barnaul' |\n 'Asia/Beirut' |\n 'Asia/Bishkek' |\n 'Asia/Brunei' |\n 'Asia/Chita' |\n 'Asia/Choibalsan' |\n 'Asia/Colombo' |\n 'Asia/Damascus' |\n 'Asia/Dhaka' |\n 'Asia/Dili' |\n 'Asia/Dubai' |\n 'Asia/Dushanbe' |\n 'Asia/Famagusta' |\n 'Asia/Gaza' |\n 'Asia/Hebron' |\n 'Asia/Ho_Chi_Minh' |\n 'Asia/Hong_Kong' |\n 'Asia/Hovd' |\n 'Asia/Irkutsk' |\n 'Asia/Jakarta' |\n 'Asia/Jayapura' |\n 'Asia/Jerusalem' |\n 'Asia/Kabul' |\n 'Asia/Kamchatka' |\n 'Asia/Karachi' |\n 'Asia/Kathmandu' |\n 'Asia/Khandyga' |\n 'Asia/Kolkata' |\n 'Asia/Krasnoyarsk' |\n 'Asia/Kuala_Lumpur' |\n 'Asia/Kuching' |\n 'Asia/Macau' |\n 'Asia/Magadan' |\n 'Asia/Makassar' |\n 'Asia/Manila' |\n 'Asia/Nicosia' |\n 'Asia/Novokuznetsk' |\n 'Asia/Novosibirsk' |\n 'Asia/Omsk' |\n 'Asia/Oral' |\n 'Asia/Pontianak' |\n 'Asia/Pyongyang' |\n 'Asia/Qatar' |\n 'Asia/Qostanay' |\n 'Asia/Qyzylorda' |\n 'Asia/Riyadh' |\n 'Asia/Sakhalin' |\n 'Asia/Samarkand' |\n 'Asia/Seoul' |\n 'Asia/Shanghai' |\n 'Asia/Singapore' |\n 'Asia/Srednekolymsk' |\n 'Asia/Taipei' |\n 'Asia/Tashkent' |\n 'Asia/Tbilisi' |\n 'Asia/Tehran' |\n 'Asia/Thimphu' |\n 'Asia/Tokyo' |\n 'Asia/Tomsk' |\n 'Asia/Ulaanbaatar' |\n 'Asia/Urumqi' |\n 'Asia/Ust-Nera' |\n 'Asia/Vladivostok' |\n 'Asia/Yakutsk' |\n 'Asia/Yangon' |\n 'Asia/Yekaterinburg' |\n 'Asia/Yerevan' |\n 'Atlantic/Azores' |\n 'Atlantic/Bermuda' |\n 'Atlantic/Canary' |\n 'Atlantic/Cape_Verde' |\n 'Atlantic/Faroe' |\n 'Atlantic/Madeira' |\n 'Atlantic/Reykjavik' |\n 'Atlantic/South_Georgia' |\n 'Atlantic/Stanley' |\n 'Australia/Adelaide' |\n 'Australia/Brisbane' |\n 'Australia/Broken_Hill' |\n 'Australia/Currie' |\n 'Australia/Darwin' |\n 'Australia/Eucla' |\n 'Australia/Hobart' |\n 'Australia/Lindeman' |\n 'Australia/Lord_Howe' |\n 'Australia/Melbourne' |\n 'Australia/Perth' |\n 'Australia/Sydney' |\n 'Europe/Amsterdam' |\n 'Europe/Andorra' |\n 'Europe/Astrakhan' |\n 'Europe/Athens' |\n 'Europe/Belgrade' |\n 'Europe/Berlin' |\n 'Europe/Brussels' |\n 'Europe/Bucharest' |\n 'Europe/Budapest' |\n 'Europe/Chisinau' |\n 'Europe/Copenhagen' |\n 'Europe/Dublin' |\n 'Europe/Gibraltar' |\n 'Europe/Helsinki' |\n 'Europe/Istanbul' |\n 'Europe/Kaliningrad' |\n 'Europe/Kiev' |\n 'Europe/Kirov' |\n 'Europe/Lisbon' |\n 'Europe/London' |\n 'Europe/Luxembourg' |\n 'Europe/Madrid' |\n 'Europe/Malta' |\n 'Europe/Minsk' |\n 'Europe/Monaco' |\n 'Europe/Moscow' |\n 'Europe/Oslo' |\n 'Europe/Paris' |\n 'Europe/Prague' |\n 'Europe/Riga' |\n 'Europe/Rome' |\n 'Europe/Samara' |\n 'Europe/Saratov' |\n 'Europe/Simferopol' |\n 'Europe/Sofia' |\n 'Europe/Stockholm' |\n 'Europe/Tallinn' |\n 'Europe/Tirane' |\n 'Europe/Ulyanovsk' |\n 'Europe/Uzhgorod' |\n 'Europe/Vienna' |\n 'Europe/Vilnius' |\n 'Europe/Volgograd' |\n 'Europe/Warsaw' |\n 'Europe/Zaporozhye' |\n 'Europe/Zurich' |\n 'Indian/Chagos' |\n 'Indian/Christmas' |\n 'Indian/Cocos' |\n 'Indian/Kerguelen' |\n 'Indian/Mahe' |\n 'Indian/Maldives' |\n 'Indian/Mauritius' |\n 'Indian/Reunion' |\n 'Pacific/Apia' |\n 'Pacific/Auckland' |\n 'Pacific/Bougainville' |\n 'Pacific/Chatham' |\n 'Pacific/Chuuk' |\n 'Pacific/Easter' |\n 'Pacific/Efate' |\n 'Pacific/Enderbury' |\n 'Pacific/Fakaofo' |\n 'Pacific/Fiji' |\n 'Pacific/Funafuti' |\n 'Pacific/Galapagos' |\n 'Pacific/Gambier' |\n 'Pacific/Guadalcanal' |\n 'Pacific/Guam' |\n 'Pacific/Honolulu' |\n 'Pacific/Kiritimati' |\n 'Pacific/Kosrae' |\n 'Pacific/Kwajalein' |\n 'Pacific/Majuro' |\n 'Pacific/Marquesas' |\n 'Pacific/Nauru' |\n 'Pacific/Niue' |\n 'Pacific/Norfolk' |\n 'Pacific/Noumea' |\n 'Pacific/Pago_Pago' |\n 'Pacific/Palau' |\n 'Pacific/Pitcairn' |\n 'Pacific/Pohnpei' |\n 'Pacific/Port_Moresby' |\n 'Pacific/Rarotonga' |\n 'Pacific/Tahiti' |\n 'Pacific/Tarawa' |\n 'Pacific/Tongatapu' |\n 'Pacific/Wake' |\n 'Pacific/Wallis';\n\n","import { CSSProperties } from \"react\";\n\n/** default style van events */\nexport const eventStylesBase = {\n transition: 'background-color .2s ease-in-out, color .2s ease-in-out',\n fontSize: '0.7em',\n height: '1.5em',\n margin: '6px 3px',\n borderRadius: '5px',\n textAlign: 'start',\n paddingLeft: '3px',\n paddingRight: '3px',\n overflow: 'clip',\n textOverflow: 'ellipsis',\n};\n\n/** default styling van de header */\nexport const headerContainerStylesBase = {\n textAlign: 'center',\n borderBottom: '1px solid #f1f1f1',\n fontWeight: 'bold',\n color: '#888',\n} as CSSProperties;\n\n/** default styling van de grid */\nexport const gridContainerStylesBase = {\n display: 'grid',\n gridTemplateRows: `30px repeat(6, minmax(170px, auto))`,\n justifyItems: 'stretch',\n alignItems: 'stretch',\n} as CSSProperties;\n\n/** default styling van het weeknummer */\nexport const weekNumberStylesBase = {\n backgroundColor: '#f1f1f1',\n borderRight: '2px solid #f1f1f1',\n borderTop: 'thin solid #f1f1f1',\n textAlign: 'center',\n fontSize: '0.7em',\n color: '#888',\n paddingTop: '1em',\n} as CSSProperties;\n\n/** default styling van de day-container */\nexport const dayContainerStyleBase = {\n borderRight: 'thin solid #f1f1f1',\n borderBottom: 'thin solid #f1f1f1',\n textAlign: 'center',\n fontSize: '1.1em',\n color: '#888',\n} as CSSProperties;\n\n/** default styling van de datum in de daycontainer */\nexport const dayDateStyleBase = {\n marginBottom: '.5em',\n marginTop: '.25em',\n verticalAlign: 'middle',\n transition: 'background-color .2s ease-in-out',\n} as CSSProperties;\n\n/** default styling van de is-today datum */\nexport const todayStyleBase = {\n borderRadius: '15px',\n padding: '.25em .65em',\n transition: 'background-color .2s ease-in-out, color .2s ease-in-out',\n} as CSSProperties;\n\n/** kleur van het event op het blokje in de agenda */\nexport const eventKleurBlockStyleBase = {\n width: '0.9em',\n height: '0.9em',\n borderRadius: '3px',\n marginRight: '.5em',\n display: 'inline-block',\n transition: 'background-color .2s ease-in-out',\n} as CSSProperties;\n","/**\n * kikt of een jaar een schikkeljaar is\n * @param date een datum in het gewtenste jaar OF een jaartal\n * @returns true als het jaar een schikkeljaar is\n * @example\n * isLeapYear(new Date(2020, 0, 1)) // true\n * isLeapYear(2020) // true\n * isLeapYear(new Date(2019, 0, 1)) // false\n * isLeapYear(2019) // false\n * @deprecated: use JSDateTime class\n */\nexport const isLeapYear = (date: Date | number): boolean => {\n const year = typeof date === 'number' ? date : date.getFullYear();\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n};\n\n/**\n * vindt de 1e dag van het jaar voor een gegeven datum\n * @param date date\n * @returns new Date op 1e dag van het jaar\n * @example starOfYear(new Date(2022, 9, 20)) // 2022-01-01\n * @deprecated: use JSDateTime class\n */\nexport const startOfYear = (date: Date): Date => new Date(date.getFullYear(), 0, 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n/**\n * vindt de laatste dag van het jaar voor een gegeven datum\n * @param date date\n * @returns new Date op laatstee dag van het jaar\n * @example * endOfYear(new Date(2022, 9, 20)) // 2022-12-31\n * @deprecated: use JSDateTime class\n */\nexport const endOfYear = (date: Date): Date => new Date(date.getFullYear(), 11, 31, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n\n/**\n * vind de 1e dag van de maand voor een gegeven datum\n * @param date date\n * @returns new Date op laatste dag van de maand\n * @example startOfMonth(new Date(2022, 9, 20)) // 2022-10-01\n * @deprecated: use JSDateTime class\n */\nexport const startOfMonth = (date: Date): Date => new Date(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n/**\n * vindt de laatste dag van de maand voor een gegeven datum\n * @param date date\n * @returns new Date op laatste dag van de maand\n * @example endOfMonth(new Date(2022, 9, 20)) // 2022-10-31\n * @deprecated: use JSDateTime class\n */\nexport const endOfMonth = (date: Date): Date => new Date(date.getFullYear(), date.getMonth() + 1, 0, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n\n/**\n * vindt de 1e dag van een week (maandag) voor een gegeven datum\n * @param date date\n * @returns new Date op eerste dag van de week\n * @example startOfWeek(new Date(2022, 9, 20)) // 2022-10-17\n * @deprecated: use JSDateTime class\n */\nexport const startOfWeek = (date: Date): Date => {\n const newDate = new Date(date);\n const diff = newDate.getDate() - newDate.getDay() + (newDate.getDay() === 0 ? -6 : 1);\n newDate.setDate(diff);\n return newDate;\n};\n/**\n * vind de laatste dag van een week (zondag) voor een gegeven datum\n * @param date date\n * @returns new Date op laatste dag van de week\n * @example endOfWeek(new Date(2022, 9, 20)) // 2022-10-23\n * @deprecated: use JSDateTime class\n */\nexport const endOfWeek = (date: Date): Date => {\n const newDate = new Date(date);\n const lastDay = date.getDate() - (newDate.getDay() - 1) + 6;\n newDate.setDate(lastDay);\n return newDate;\n};\n\n/**\n * Date start van de dag\n * @param date date\n * @returns new Date\n * @example startOfDay(new Date(2022, 9, 20)) // 2022-10-20 00:00:00\n * @deprecated: use JSDateTime class\n */\nexport const startOfDay = (date: Date): Date => {\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n};\n/**\n * Zet datum op einde van de dag\n * @param date date\n * @returns new Date\n * @example endOfDay(new Date(2022, 9, 20)) // 2022-10-20 23:59:59.999\n * @deprecated: use JSDateTime class\n */\nexport const endOfDay = (date: Date): Date => {\n const newDate = new Date(date);\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n};\n\n\n/**\n * Vindt het weeknummer voor de gegeven datum\n * @param date date\n * @returns weeknummer\n * @example getWeekNumber(new Date(2022, 9, 20)) // 42 (week 42 van 2022)\n * @deprecated: use JSDateTime class\n */\nexport const weekNrForDate = (date: Date): number => {\n const newDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n newDate.setUTCDate(newDate.getUTCDate() + 4 - (newDate.getUTCDay() || 7));\n const yrStart = new Date(Date.UTC(newDate.getUTCFullYear(), 0, 1));\n const weekNR = Math.ceil((((newDate.getTime() - yrStart.getTime()) / 86400000) + 1) / 7);\n return weekNR;\n};\n\n/**\n * voegt n jaar toe aan een gegeven datum\n * @param date begindatum\n * @param n aantal jaren om toe te voegen\n * @returns new Date, n jaar later\n * @example addYears(new Date(2022, 9, 20), 1) // 2023-09-20\n * @deprecated: use JSDateTime class\n */\nexport const addYears = (date: Date, n: number): Date => {\n const newDate = new Date(date);\n return new Date(newDate.setFullYear(newDate.getFullYear() + n));\n};\n\n/**\n * voet n maanden toe aan een gegeven datum\n * @param date begindatum\n * @param n aantal maanden toe te voegen\n * @returns new Date, n maanden later\n * @example addMonths(new Date(2022, 9, 20), 1) // 2022-11-20, new Date starts as 2022-10-20 (month zero-indexed in JS)\n * @deprecated: use JSDateTime class\n */\nexport const addMonths = (date: Date, n: number): Date => {\n const newDate = new Date(date);\n return new Date(newDate.setMonth(newDate.getMonth() + n));\n};\n\n/**\n * voegt n dagen toe aan een Date\n * @param date begindatum\n * @param n aantal dagen toevoegen\n * @returns new Date\n * @example addDays(new Date(2022, 9, 20), 1) // 2022-09-21\n * @deprecated: use JSDateTime class\n */\nexport const addDays = (date: Date, n: number): Date => {\n const dt = new Date(date);\n return new Date(dt.setDate(dt.getDate() + n));\n};\n/**\n * voegt n uur toe aan een Date\n * @param date begindatum\n * @param n aantal uur toevoegen\n * @returns new Date\n * @example addHours(new Date(2022, 9, 20), 1) // 2022-09-20 01:00:00\n * @deprecated: use JSDateTime class\n */\nexport const addHours = (date: Date, n: number): Date => {\n const dt = new Date(date);\n return new Date(dt.setHours(dt.getHours() + n));\n};\n\n/**\n * voegt n minuten toe aan een Date\n * @param date begindatum\n * @param mins aantal minuten toe te voegen\n * @returns new Date\n * @example addMinutes(new Date(2022, 9, 20), 1) // 2022-09-20 00:01:00\n * @deprecated: use JSDateTime class\n */\nexport const addMinutes = (date: Date, n: number): Date => {\n const dt = new Date(date);\n return new Date(dt.setMinutes(dt.getMinutes() + n));\n};\n\n/**\n* voegt n seconden toe aan een Date\n* @param date begindatum\n* @param n aantal seconden om toe te voegen\n* @returns new Date\n* @deprecated: use JSDateTime class\n*/\nexport const addSeconds = (date: Date, n: number): Date => {\n const dt = new Date(date);\n return new Date(dt.setSeconds(dt.getSeconds() + n));\n};\n\n/**\n* voegt n milliseconden toe aan een Date\n* @param date begindatum\n* @param ms aantal ms om toe te voegen\n* @returns new Date\n* @example addMilliseconds(new Date(2022, 9, 20), 1) // 2022-09-20 00:00:00.001\n* @deprecated: use JSDateTime class\n*/\nexport const addMilliseconds = (date: Date, ms: number): Date => {\n const dt = new Date(date);\n return new Date(dt.setMilliseconds(dt.getMilliseconds() + ms));\n};\n\n/**\n * Controleert of een date tussen twee andere dates in ligt.\n * include met t, exclude met f. 1e positie is begin, 2e positie is einde\n * dus: 'tt' start & einde inclusief, 'ff' start & einde exclusief\n * @param date de datum om te controleren\n * @param start de meest vroege datum\n * @param end de meest late datum\n * @param include moeten de vroege en late datum inclusief (t) of exclusief (f) zijn. Kan ook met [true, false] worden meegegeven\n * @returns boolean\n * @example\n * isBetween(new Date(2022, 9, 20), new Date(2022, 9, 1), new Date(2022, 9, 30), 'tt') // true\n * isBetween(new Date(2022, 7, 20), new Date(2022, 9, 1), new Date(2022, 9, 30), 'ff') // false\n * isBetween(new Date(2022, 9, 20), new Date(2022, 9, 1), new Date(2022, 9, 30), [true, false]) // true\n * @deprecated: use JSDateTime class\n */\nexport const isBetween = (date: Date, start: Date, end: Date, include: 'tt' | 'tf' | 'ft' | 'ff' | [boolean, boolean] = [true, true]): boolean => {\n const format = typeof include == 'string' ? include : `${[include[0] ? 't' : 'f']}${[include[1] ? 't' : 'f']}`; // tt, t,\n if (format === 'tf')\n return date.getTime() >= start.getTime() && date.getTime() < end.getTime();\n else if (format === 'ft')\n return date.getTime() > start.getTime() && date.getTime() <= end.getTime();\n else if (format === 'ff')\n return date.getTime() > start.getTime() && date.getTime() < end.getTime();\n // tt is default\n return date.getTime() >= start.getTime() && date.getTime() <= end.getTime();\n};\n\n/**\n * controleert of een datum 'vandaag' is\n * @param date \n * @returns boolean\n * @example \n * isToday(new Date(1980, 9, 20)) // false\n * isToday(new Date()) // true\n * @deprecated: use JSDateTime class\n */\nexport const isToday = (date: Date): boolean => {\n const today = new Date();\n return isBetween(date, startOfDay(today), endOfDay(today));\n};\n\n/**\n * maak een tijd-string van een Date\n * @param date Date-obj waar een tijdstring van gewenst is\n * @param format het format van de tijdstring (default = hm --> 08:30) OF een DateTimeFormatOptions object\n * @param AM_PM moet er AM /PM in de tijdstring gezet worden (default = false)\n * @param locale de locale van de gewenste string (default = 'nl-NL')\n * @returns een tijdstring\n * @example\n * timeString(new Date(2022, 9, 20, 8, 30)) // '08:30'\n * timeString(new Date(2022, 9, 20, 8, 30), 'hm') // '08:30'\n * timeString(new Date(2022, 9, 20, 15, 30), 'hm', true) // '03:30 PM'\n * timeString(new Date(2022, 9, 20, 8, 30), {hour: '2-digit', minute: '2-digit'}) // '08:30'\n * @deprecated: use JSDateTime class\n */\nexport const timeString = (date: Date, format: 'hm' | 'hms' | 'hmsS' | Intl.DateTimeFormatOptions = 'hm', AM_PM: boolean = false, locale: string = 'nl-NL'): string => {\n if (format == 'hm')\n return date.toLocaleTimeString(locale, { hour: '2-digit', hour12: AM_PM, minute: '2-digit' });\n else if (format == 'hms')\n return date.toLocaleTimeString(locale, { hour: '2-digit', hour12: AM_PM, minute: '2-digit', second: '2-digit' });\n else if (format == 'hmsS') {\n const part1 = date.toLocaleTimeString(locale, { hour: '2-digit', hour12: AM_PM, minute: '2-digit', second: '2-digit' });\n const amOrPm = part1.substring(9) || '';\n\n return `${part1.substring(0, 8)}.${date.getMilliseconds().toString().padStart(3, \"0\")} ${amOrPm}`.trim();\n }\n return date.toLocaleTimeString(locale, format);\n};\n\n/**\n * Maak een date string van een Date\n * @param date de date waarvan een string gemaakt moet worden\n * @param format het format van de datumstring (default = ddMMyy --> 31-12-2019) OF een DateTimeFormatOptions object\n * @param locale de locale van de gewenste string (default = 'nl-NL')\n * @returns een datum-string\n * @example\n * dateString(new Date(2022, 9, 20)) // '20-10-2022'\n * dateString(new Date(2022, 9, 20), 'ddMMyy') // '20-10-2022'\n * dateString(new Date(2022, 8, 02), 'dMy') // '2-9-2022'\n * dateString(new Date(2022, 9, 20), 'ddd MMM yy') // 'Don 20 Okt 2022'\n * dateString(new Date(2022, 9, 20), 'dddd MMMM yy') // 'Donderdag 20 Oktober 2022'\n * dateString(new Date(2022, 9, 20), {day: '2-digit', month: '2-digit', year: '2-digit'}) // '20-10-2022'\n * @deprecated: use JSDateTime class\n */\nexport const dateString = (date: Date, format: 'dMy' | 'ddMMyy' | 'ddd MMM yy' | 'dddd MMMM yy' | Intl.DateTimeFormatOptions = 'ddMMyy', locale: string = 'nl-NL',): string => {\n if (format == 'dMy')\n return date.toLocaleDateString(locale, { day: 'numeric', month: 'numeric', year: '2-digit' });\n else if (format == 'ddMMyy')\n return date.toLocaleDateString(locale, { day: '2-digit', month: '2-digit', year: 'numeric' });\n else if (format == 'ddd MMM yy')\n return `${weekDay(date, 'short', locale)} ${dayNum(date, 'D', locale)} ${monthName(date, 'short', locale)} ${date.toLocaleString(locale, { year: 'numeric' })}`;\n else if (format == 'dddd MMMM yy')\n return `${weekDay(date, 'long', locale)} ${dayNum(date, 'DD', locale)} ${monthName(date, 'long', locale)} ${date.toLocaleString(locale, { year: 'numeric' })}`;\n return date.toLocaleDateString(locale, format);\n};\n\n/**\n * geef de naam van de dag (maandag, dinsdag, ...) van een Date\n * @param date de date waarvan de dagnaam gewenst is\n * @param format long (maandag), short (ma) of narrow (m) (default = short)\n * @param locale de locale van de gewenste string (default = 'nl-NL')\n * @returns de naam van de dag in de juiste locale\n * @example \n * weekDay(new Date(2022, 9, 20), 'narrow') // 'M'\n * weekDay(new Date(2022, 9, 20), 'short') // 'Ma'\n * weekDay(new Date(2022, 9, 20), 'long') // 'Maandag'\n * @deprecated: use JSDateTime class\n */\nexport const weekDay = (date: Date, format: 'narrow' | 'short' | 'long' = 'short', locale: string = 'nl-NL'): string => {\n return date.toLocaleString(locale, { weekday: format });\n};\n/**\n * Dag nummer in de maand van een datum\n * @param date de date waarvan het dagnummer (in de maand) gewenst is\n * @param format 2-digits of 1-digit (default = 2-digits)\n * @param locale de gewenste locale (default = 'nl-NL')\n * @returns een dagnummer als string\n * @example\n * dayNum(new Date(2022, 9, 20), '2-digit') // '20'\n * dayNum(new Date(2022, 9, 5), 'numeric') // '5'\n * dayNum(new Date(2022, 9, 5), '2-digit') // '05'\n * @deprecated: use JSDateTime class\n */\nexport const dayNum = (date: Date, format: 'D' | 'DD' = 'DD', locale: string = 'nl-NL'): string => {\n return date.toLocaleString(locale, { day: format == 'D' ? 'numeric' : '2-digit' });\n};\n\n/**\n * geeft de naam van een maand (januari, februari, ...) van een Date\n * @param date de date waarvan de maandnaam gewenst is\n * @param format long (januari), short (jan), narrow (j) (default = short)\n * @param locale de gewenste locale (default = 'nl-NL')\n * @returns een maandnaam in de juiste locale\n * @example\n * monthName(new Date(2022, 9, 20), 'short') // 'Okt'\n * monthName(new Date(2022, 9, 20), 'long') // 'Oktober'\n * @deprecated: use JSDateTime class\n */\nexport const monthName = (date: Date, format: 'short' | 'long' = 'short', locale: string = 'nl-NL'): string => {\n return date.toLocaleString(locale, { month: format });\n};\n\n\nexport type RelativeTimeOptionsType = {\n /** de gebruikte locale (default = 'nl-NL') */\n locale?: string;\n /** altijd numeriek of moet dat automatisch gedaan worden ('over 1 dag' ipv 'morgen'). (default = 'auto') */\n numeric?: 'auto' | 'always';\n /** volledige omschrijving, korte omschrijving of zo kort mogelijk. (default = 'long') */\n style?: 'long' | 'short' | 'narrow';\n};\nexport type RelativeTimeFormatUnit = 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years';\n/**\n * Geeft een relatieve tijd-verschil tov van vandaag. (bv. 'overmorgen', 'gisteren', 'over 2 weken', 'over 1 maand', 'over 1 jaar')\n * @param value De waarde waarvan de relatieve tijd gewenst is (Date of integer)\n * @param unit welke maat moet er gebruikt worden. (default = 'days')\n * @param options opties van voor deze functie\n * @returns een string met een relatief tijdsverschil ('morgen', 'volgende maand', 'eergisteren')\n * @example\n * relativeTime(addDays(new Date(), 1), 'days') // 'morgen'\n * relativeTime(addDays(new Date(), -1), 'days') // 'gisteren'\n * relativeTime(addYears(new Date(), 1), 'years') // 'volgend jaar'\n */\nexport const relativeTime = (value: number | Date, unit: RelativeTimeFormatUnit, options?: RelativeTimeOptionsType): string => {\n const rtf = new Intl.RelativeTimeFormat(options?.locale ?? 'nl-NL', { numeric: options?.numeric ?? 'auto', style: options?.style ?? 'long' });\n let v = 0;\n if (typeof value != 'number') {\n if (unit == 'minutes')\n v = minutesBetween(value);\n else if (unit == 'hours')\n v = hoursBetween(value);\n else if (unit == 'days')\n v = daysBetween(value);\n else if (unit == 'weeks')\n v = weeksBetween(value);\n else if (unit == 'months')\n v = monthsBetween(value);\n else if (unit == 'years')\n v = yearsBetween(value);\n }\n else\n v = value;\n return rtf.format(v, unit);\n};\n\n/** bereken het aantal jaren tussen twee datums\n * @param date1 de eerste datum\n * @param date2 de tweede datum (default = new Date())\n * @returns het aantal jaren tussen de twee Dates\n * @example\n * yearsBetween(new Date(2020, 9, 20), new Date(2022, 9, 10)) // 2\n */\nexport const yearsBetween = (date1: Date, date2: Date = new Date()): number => date1.getFullYear() - date2.getFullYear();\n\n/**\n * Bereken het aantal maanden tussen twee datums\n * @param date1 de eerste datum\n * @param date2 de tweede datum (default = new Date())\n * @returns aantal maanden tussen twee Dates\n * @example\n * monthsBetween(new Date(2020, 9, 20), new Date(2022, 9, 10)) // 24\n * monthsBetween(new Date(2020, 9, 20), new Date(2020, 11, 10)) // 2\n */\nexport const monthsBetween = (date1: Date, date2: Date = new Date()): number => {\n let months = (date1.getFullYear() - date2.getFullYear()) * 12;\n months -= date1.getMonth();\n months += date2.getMonth();\n return months * -1;\n};\n\n/**\n * Bereken het aantal weken tussen twee datums\n * @param date1 de eerste datum\n * @param date2 de tweede datum (default = new Date())\n * @returns het aantal weken tussen twee Dates\n * @example weeksBetween(new Date(2021, 9, 20), new Date(2022, 9, 10)) // 52\n */\nexport const weeksBetween = (date1: Date, date2: Date = new Date()): number => {\n const timeDiff = date1.getTime() - date2.getTime();\n return Math.ceil(timeDiff / (1000 * 60 * 60 * 24 * 7));\n};\n\n/**\n * Bereken het aantal dagen tussen twee datums\n * @param date1 de eerste datum\n * @param date2 de tweede datum (default = new Date())\n * @returns het aantal dagen tussen 2 Dates\n * @example daysBetween(new Date(2022, 9, 10), new Date(2022, 9, 20)) // 10\n */\nexport const daysBetween = (date1: Date, date2: Date = new Date()): number => {\n const timeDiff = date1.getTime() - date2.getTime();\n return Math.ceil(timeDiff / (1000 * 60 * 60 * 24));\n};\n\n/**\n * Bereken het aantal uren tussen twee datums\n * @param date1 de eerste datum\n * @param date2 de tweede datum (default = new Date())\n * @returns het aantal uren tussen 2 Dates\n * @example hoursBetween(new Date(2022, 9, 20, 0, 0, 0), new Date(2022, 9, 20, 23, 0, 0)) // 23\n */\nexport const hoursBetween = (date1: Date, date2: Date = new Date()): number => {\n const timeDiff = date1.getTime() - date2.getTime();\n return Math.ceil(timeDiff / (1000 * 60 * 60));\n};\n\n/**\n * Bereken het aantal minuten tussen twee datums\n * @param date1 de eerste datum\n * @param date2 de tweede datum (default = new Date())\n * @returns het aantal minuten tussen 2 Dates\n * @example minutesBetween(new Date(2022, 9, 20, 0, 0, 0), new Date(2022, 9, 20, 1, 0, 0)) // 60\n */\nexport const minutesBetween = (date1: Date, date2: Date = new Date()): number => {\n const timeDiff = date1.getTime() - date2.getTime();\n return Math.ceil(timeDiff / (1000 * 60));\n};\n","/**\n * Controleer of een string een BSN bevat. Om dat te doen worden alle karakters, behalve letters en getallen gewist. \n * Als er een of meer BSNs aangetroffen worden, worden ze allemaal teruggeven in een array.\n * @param txt a string which could contain a BSN\n * @returns false when there is no BSN or a tuple [true, Array<string>] where the string-array contains all found BSNs\n * @example\n * hasBSN('123456789') // [false, []]\n * hasBSN('200644440') // [true, ['200644440']]\n * hasBSN('xxx200644440xxx') // [true, ['200644440']]\n * hasBSN('xxx123456789xxx') // [false, []]\n * hasBSN('200x644x440') // [false, []]\n * hasBSN('200644440, 200644440, 200644440') // [true, ['200644440','200644440','200644440']]\n */\nfunction hasBSN(txt: string): [boolean, Array<string>] {\n txt = txt.replaceAll(/[^0-9a-zA-Z]/g, '');\n const possibleBSNs = txt.match(/[0-9]{9}/g);\n if (possibleBSNs) {\n const matches: string[] = [];\n for (const bsn of possibleBSNs) {\n\n let total = 0;\n let teller = 9;\n for (const char of bsn.split('')) {\n total += parseInt(char) * teller;\n teller = teller !== 2 ? teller - 1 : -1;\n }\n if (total % 11 === 0) matches.push(bsn);\n }\n return [matches.length > 0, matches];\n }\n return [false, []];\n}\n\nexport { hasBSN };\n","\ntype RGBType = [number, number, number, number?];\n\n/**\n * Bepaal op basis van de achtergrondkleur wat de kleur van de tekst moet zijn (zwart of wit).\n * - alpha-channel wordt genegeerd.\n * - gebaseerd op WCAG-guidelines\n * @param bgColor de achtergrondkleur van de tekst. string? hex colors (#abc of #abcdef). tuple? [r, g, b]\n * @returns zwart of wit (hex-color of rgb-tuple)\n * @example\n * txtColorDecision('#ffffff'); // '#000000'\n * txtColorDecision('#000000'); // '#ffffff'\n * txtColorDecision([0, 0, 0]); // [255, 255, 255]\n * txtColorDecision([255, 255, 255]); // [0, 0, 0]\n */\nfunction calculateTxtColor(bgColor: string | RGBType): '#ffffff' | '#000000' | [0, 0, 0] | [255, 255, 255] {\n const isRGB = (typeof bgColor !== 'string');\n let clr: RGBType;\n if (typeof bgColor === 'string')\n clr = hexToRGB(bgColor);\n else\n clr = bgColor;\n\n const [r = 255, g = 255, b = 255] = clr;\n const uicolors = [r / 255, g / 255, b / 255];\n const c = uicolors.map((col) => (col < 0.03928 ? col / 12.92 : Math.pow((col + 0.055) / 1.055, 2.4)));\n const lum = 0.02126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];\n\n if (isNaN(lum)) return [0, 0, 0];\n else if (lum > 0.179) return isRGB ? [0, 0, 0] : '#000000';\n else return isRGB ? [255, 255, 255] : '#ffffff';\n}\n\n/**\n * Converteer een hex-color naar een rgb-tuple.\n * @param hex \n * @returns een rgb-tuple [number, number, number]\n */\nfunction hexToRGB(hex: string): RGBType {\n let color = '#';\n if (!hex.startsWith('#')) hex = '#' + hex;\n const rgx = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)|(^#[0-9A-F]{4}$)/i;\n if (!rgx.test(hex)) throw new Error('Invalid hex-color: ' + hex);\n\n if (hex.length === 4)\n hex\n .substring(1, 5)\n .split('')\n .forEach((c) => (color += (c + c))); // #fff naar #ffffff\n else if (hex.length === 5)\n hex\n .substring(1, 5)\n .split('')\n .forEach((c) => (color += (c + c))); // #fffa naar #ffffff\n else if (hex.length === 7) color = hex; // #ffffff\n else if (hex.length === 9) color = hex.substring(0, 7); // alpha channel weg\n\n\n const r = parseInt(color.substring(1, 3), 16);\n const g = parseInt(color.substring(3, 5), 16);\n const b = parseInt(color.substring(5, 7), 16);\n const a = parseInt(color.substring(7, 9), 16);\n return [r, g, b, a];\n}\n\nexport { calculateTxtColor };\n","import React, { CSSProperties, MouseEvent } from 'react';\nimport { EventOptions, BaseEventProps } from '../Props';\nimport { eventStylesBase } from '../base-styles';\nimport { calculateTxtColor } from '../../../utils';\n\ntype CalendarColoredItemProps<T extends BaseEventProps> = {\n /** het event */\n desc: (event: T) => JSX.Element;\n event: T;\n /** opties voor events */\n options?: EventOptions<T>;\n /** onclick handler voor het event */\n onClick?: (event: T, clickEvent: MouseEvent<HTMLElement>) => void;\n};\n\n/**\n * Component voor een event dat de hele dag duurt\n * @param props\n * @returns\n */\nexport function CalendarColoredItem<T extends BaseEventProps>({\n event,\n options,\n onClick,\n desc,\n}: CalendarColoredItemProps<T>): JSX.Element {\n const [isHovered, setHovered] = React.useState(false);\n\n /** bereken de tekst kleur op basis van de achtergrond kleur */\n const pickTextColor = React.useCallback(calculateTxtColor, []);\n\n /** styles van het event */\n const eventStyle = React.useMemo<CSSProperties>(() => {\n let bgColor = 'p';\n if (event.evtColor) bgColor = event.evtColor(isHovered);\n else if (options?.evtColor) bgColor = options.evtColor(event, isHovered);\n\n // ColorProps opruimen, vervangen door hex colors\n if (bgColor === 'p') bgColor = '#113670';\n else if (bgColor === 'i') bgColor = '#3b59ec';\n else if (bgColor === 'l') bgColor = '#2f47bc';\n else if (bgColor === 'd') bgColor = '#d91000';\n else if (bgColor === 's') bgColor = '#519c43';\n else if (bgColor === 'w') bgColor = '#eea720';\n bgColor += isHovered ? 'aa' : 'ff';\n\n const txtColor = pickTextColor(bgColor);\n // voeg de hovering toe\n\n return {\n ...eventStylesBase,\n paddingLeft: '1em',\n backgroundColor: bgColor,\n color: txtColor,\n cursor: onClick ? 'pointer' : 'default',\n } as CSSProperties;\n }, [event, isHovered]);\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n return (\n <div\n ref={ref}\n onClick={(e) => onClick && onClick(event, e)}\n style={eventStyle}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n <span>{desc(event)}</span>\n </div>\n );\n}\n","import React, { CSSProperties, MouseEvent } from 'react';\nimport { EventOptions, BaseEventProps } from '../Props';\nimport { eventStylesBase, eventKleurBlockStyleBase } from '../base-styles';\nimport { calculateTxtColor } from '../../../utils';\n\ntype CalendarItemProps<T extends BaseEventProps> = {\n desc: (event: T) => JSX.Element;\n /** het event */\n event: T;\n /** opties voor events */\n options?: EventOptions<T>;\n /** onclick handler */\n onClick?: (event: T, clickEvent: MouseEvent<HTMLElement>) => void;\n};\n\n/**\n * Component voor een event met een tijdstip en NIET de hele dag duurt\n * @param props\n * @returns\n */\nexport function CalendarItem<T extends BaseEventProps>({\n event,\n options,\n onClick,\n desc,\n}: CalendarItemProps<T>): JSX.Element {\n const [isHovered, setHovered] = React.useState(false);\n\n /** bereken de tekst kleur op basis van de achtergrond kleur */\n const pickTextColor = React.useCallback(calculateTxtColor, []);\n\n /** event styles */\n const eventStyle = React.useMemo<CSSProperties>(() => {\n const bgColor = isHovered ? '#f1f1f1' : '#ffffff';\n const txtColor = pickTextColor(bgColor);\n\n return {\n ...eventStylesBase,\n backgroundColor: bgColor,\n color: txtColor,\n cursor: onClick ? 'pointer' : 'default',\n } as CSSProperties;\n }, [isHovered]);\n\n /** styling kleur-icoon op event */\n const eventSpan = React.useMemo(() => {\n let evtColor = 'p';\n if (event.evtColor) evtColor = event.evtColor(isHovered);\n else if (options?.evtColor) evtColor = options.evtColor(event, isHovered);\n\n // ColorProps opruimen, vervangen door hex colors\n if (evtColor === 'p') evtColor = '#113670';\n else if (evtColor === 'i') evtColor = '#3b59ec';\n else if (evtColor === 'l') evtColor = '#2f47bc';\n else if (evtColor === 'd') evtColor = '#d91000';\n else if (evtColor === 's') evtColor = '#519c43';\n else if (evtColor === 'w') evtColor = '#eea720';\n return {\n ...eventKleurBlockStyleBase,\n backgroundColor: evtColor,\n };\n }, [event, isHovered]);\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n return (\n <div\n ref={ref}\n onClick={(e) => onClick && onClick(event, e)}\n style={eventStyle}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n <span style={eventSpan}></span>\n {desc(event)}\n </div>\n );\n}\n","import React, { CSSProperties, useEffect, MouseEvent } from 'react';\nimport { BaseEventProps, EventOptions } from '../Props';\nimport { CalendarColoredItem } from '../CalendarItems/CalendarColoredItem';\nimport { eventStylesBase } from '../base-styles';\nimport { CalendarItem } from '../CalendarItems/CalendarItem';\nimport { JSDateTime } from '../../../utils/JSDateTime.class';\n\ntype MoreEventsViewProps<T extends BaseEventProps> = {\n /** de events op deze dag */\n events: T[];\n /** event-click handling */\n onEventClick?: (event: T, clickEvent: MouseEvent<HTMLElement>) => void;\n /** global event options */\n options?: { allday?: EventOptions<T>; timed?: EventOptions<T> };\n};\n\n/**\n * expandable events als er meer dan 5 events op een dag vallen\n * @param props\n * @returns\n */\nexport function MoreEventsView<T extends BaseEventProps>({\n events,\n onEventClick,\n options,\n}: MoreEventsViewProps<T>): JSX.Element {\n const [visibleEvents, setVisibleEvents] = React.useState(() => events.slice(4));\n const [isHovered, setHovered] = React.useState(false);\n const [isExpanded, setExpanded] = React.useState(false);\n\n /** als de events wijzigen, dan de visibleEvents opnieuw zetten */\n useEffect(() => {\n setVisibleEvents(events.slice(4));\n }, [events]);\n\n /** style van de events */\n const eventStyle = React.useMemo<CSSProperties>(() => {\n const bgColor = isHovered ? '#f4f4f4' : 'transparent';\n const txtColor = isHovered ? '#3b59ec' : '#000000';\n\n return {\n ...eventStylesBase,\n backgroundColor: bgColor,\n color: txtColor,\n height: '1.5em',\n fontSize: '0.6em',\n // cursor: onClick && 'pointer',\n } as CSSProperties;\n }, [isHovered]);\n\n /** style van de \"nog xxx\" en de \"toon minder\" */\n const spanStyle = React.useMemo(() => {\n return {\n width: '0.9em',\n height: '0.9em',\n borderRadius: '3px',\n backgroundColor: 'transparent',\n marginRight: '.5em',\n display: 'inline-block',\n };\n }, [events]);\n\n /** afhandeling click van toon meer/minder */\n const handleClick = () => {\n setExpanded(!isExpanded);\n setHovered(false);\n };\n\n return (\n <React.Fragment>\n {isExpanded &&\n visibleEvents.map((evt) => {\n if (evt.allDay)\n return (\n <CalendarColoredItem<T>\n desc={(evt: T) => <span>{typeof evt.title == 'string' ? evt.title : evt.title()}</span>}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n event={evt}\n options={options?.allday}\n onClick={onEventClick}\n />\n );\n else\n return (\n <CalendarItem<T>\n desc={(evt: T) => (\n <React.Fragment>\n <strong>{(evt.startDateTime as JSDateTime).timeHM}</strong>\n <span>{typeof evt.title == 'string' ? evt.title : evt.title()}</span>\n </React.Fragment>\n )}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n event={evt}\n options={options?.timed}\n onClick={onEventClick}\n />\n );\n })}\n\n <div onMouseEnter={() => setHovered(true)} onMouseLeave={() => setHovered(false)} style={eventStyle}>\n {!isExpanded && (\n <div onClick={handleClick}>\n <span style={spanStyle}></span>\n <span>Nog {visibleEvents.length} ...</span>\n </div>\n )}\n\n {isExpanded && (\n <div onClick={handleClick}>\n <span style={spanStyle}></span>\n <span>Toon minder</span>\n </div>\n )}\n </div>\n </React.Fragment>\n );\n}\n","import React, { CSSProperties } from 'react';\nimport { dayContainerStyleBase, dayDateStyleBase, todayStyleBase } from '../base-styles';\nimport { CalendarColoredItem } from '../CalendarItems/CalendarColoredItem';\nimport { MoreEventsView } from './MoreEvents';\nimport { CalendarItem } from '../CalendarItems/CalendarItem';\nimport { BaseEventProps, CalendarOptions } from '../Props';\nimport { JSDateTime } from '../../../utils/JSDateTime.class';\nimport { calculateTxtColor } from '../../../utils';\n\ntype DayContainerProps<T extends BaseEventProps> = {\n /** events op deze dag */\n events: T[];\n /** wat te doen als een event aangeklikt wordt */\n onEventClick?: (event: T, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** wat te doen als een dag aangeklikt wordt */\n onDayClick?: (date: JSDateTime, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** opties voor deze container */\n options?: CalendarOptions<T>;\n /** de datum voor de container */\n date: JSDateTime;\n};\n\n/**\n * Component voor de dag-container in de maand-view\n * @param props\n * @returns\n */\nexport function DayContainer<T extends BaseEventProps>({\n options,\n date,\n onDayClick,\n onEventClick,\n events,\n}: DayContainerProps<T>) {\n const [isHovered, setHovered] = React.useState(false);\n\n /** bereken de tekst kleur op basis van de achtergrond kleur */\n const pickTextColor = React.useCallback(calculateTxtColor, []);\n\n /** style van de container zelf */\n const dayContainerStyle = React.useMemo<CSSProperties>(() => ({ ...dayContainerStyleBase }), [date, events]);\n\n /** style van de today-header (wijkt af van normale header) */\n const todayHeaderStyle = React.useMemo<CSSProperties>(() => {\n if (options?.today?.doNotMarkToday) return {};\n\n let bgColor = 'p';\n if (options?.today?.bgColor) bgColor = options.today.bgColor(isHovered, date);\n\n // ColorProps opruimen\n if (bgColor === 'p') bgColor = '#113670';\n else if (bgColor === 'i') bgColor = '#3b59ec';\n else if (bgColor === 'l') bgColor = '#2f47bc';\n else if (bgColor === 'd') bgColor = '#d91000';\n else if (bgColor === 's') bgColor = '#519c43';\n else if (bgColor === 'w') bgColor = '#eea720';\n\n const txtColor = pickTextColor(bgColor);\n\n return {\n ...todayStyleBase,\n backgroundColor: bgColor,\n color: txtColor,\n };\n }, [date, isHovered]);\n\n return (\n <div style={dayContainerStyle}>\n {/** container van de header */}\n <div\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n ...dayDateStyleBase,\n cursor: onDayClick ? 'pointer' : 'default',\n backgroundColor: isHovered ? '#f4f4f4' : 'transparent',\n }}\n onClick={(e) => onDayClick && onDayClick(date, e)}\n >\n <span style={date.isToday ? todayHeaderStyle : undefined}>{date.day}</span>\n <span style={{ color: '#aaa', fontSize: '0.66em' }}> {date.monthLong}</span>\n </div>\n <div>\n {/** events container */}\n {events.map((evt, index) => {\n if (evt.allDay && index < 4)\n return (\n <CalendarColoredItem<T>\n desc={(evt: T) => <span>{typeof evt.title == 'string' ? evt.title : evt.title()}</span>}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n event={evt}\n options={options?.event?.allday}\n onClick={onEventClick}\n />\n );\n else if (!evt.allDay && index < 4)\n return (\n <CalendarItem<T>\n desc={(evt: T) => (\n <React.Fragment>\n <strong>{(evt.startDateTime as JSDateTime).timeHM}</strong>\n <span style={{ marginLeft: '3px' }}>{typeof evt.title == 'string' ? evt.title : evt.title()}</span>\n </React.Fragment>\n )}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n event={evt}\n options={options?.event?.timed}\n onClick={onEventClick}\n />\n );\n else if (index == 4 && events.length > 5)\n return (\n <MoreEventsView<T>\n key={date.dateShort + '-more'}\n events={events}\n onEventClick={onEventClick}\n options={options?.event}\n />\n );\n else if (index == 4 && evt.allDay)\n return (\n <CalendarColoredItem<T>\n desc={(evt: T) => <span>{typeof evt.title == 'string' ? evt.title : evt.title()}</span>}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n event={evt}\n options={options?.event?.allday}\n onClick={onEventClick}\n />\n );\n else if (index == 4 && !evt.allDay)\n return (\n <CalendarItem<T>\n desc={(evt: T) => (\n <React.Fragment>\n <strong>{(evt.startDateTime as JSDateTime).timeHM}</strong>\n <span style={{ marginLeft: '3px' }}>{typeof evt.title == 'string' ? evt.title : evt.title()}</span>\n </React.Fragment>\n )}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n event={evt}\n options={options?.event?.timed}\n onClick={onEventClick}\n />\n );\n else return null;\n })}\n </div>\n </div>\n );\n}\n","import React, { CSSProperties } from 'react';\nimport { JSDateTime } from '../../../utils/JSDateTime.class';\nimport { gridContainerStylesBase, headerContainerStylesBase, weekNumberStylesBase } from '../base-styles';\nimport { BaseEventProps, CalendarOptions } from '../Props';\nimport { DayContainer } from './DayContainer';\n\ntype MonthViewProps<T extends BaseEventProps> = {\n /** events voor deze view */\n events: T[];\n /** opties voor deze view */\n options?: CalendarOptions<T>;\n /** event aangeklikt */\n onEventClick?: (e: T, event: React.MouseEvent<HTMLElement>) => void;\n /** dag-datum geklikt? */\n onDayClick?: (date: JSDateTime, event: React.MouseEvent<HTMLElement>) => void;\n /** huidige geselecteerde datum */\n viewDate: Date | JSDateTime;\n};\n\n/**\n * maak een maand-view (grid) met events\n * @param props\n * @returns\n */\nfunction MonthView<T extends BaseEventProps>({\n viewDate: vd,\n options,\n onEventClick,\n onDayClick,\n events: orgEvents,\n}: MonthViewProps<T>): JSX.Element {\n const visibleDays =\n options?.visibleDays && options?.visibleDays?.size != 0 ? options?.visibleDays! : new Set([1, 2, 3, 4, 5, 6, 7]);\n\n const [viewDate, setViewDate] = React.useState<JSDateTime>(\n vd instanceof Date ? JSDateTime.fromDate(vd, options?.locale) : vd.clone()\n );\n\n /**\n * converteer alle events naar een array van [Datum, Event[]]-tuples.\n * @param vd datum om de view rond op te bouwen\n */\n const eventConverterFn = React.useCallback((vd: JSDateTime): Array<[JSDateTime, T[]]> => {\n const start = vd.startOf('month').startOf('week').startOf('day');\n const end = vd.endOf('month').endOf('week').startOf('day');\n\n // filter eerst alle events weg die NIET in deze maand + begin/eind van de week zitten\n const events = orgEvents\n .map((e) => {\n e.allDay = e.allDay || !e.endDateTime;\n if (e.startDateTime instanceof Date) e.startDateTime = JSDateTime.fromDate(e.startDateTime, options?.locale);\n if (e.endDateTime && e.endDateTime instanceof Date)\n e.endDateTime = JSDateTime.fromDate(e.endDateTime, options?.locale);\n return e;\n })\n .filter((e) => {\n return (e.startDateTime as JSDateTime).isBetween([start, end]);\n });\n\n let currDate = start.clone();\n const datesWithEvents: Array<[JSDateTime, T[]]> = [];\n\n while (currDate < end) {\n if (visibleDays.has(currDate.weekDay)) {\n const dayStart = currDate.startOf('day');\n const dayEnd = currDate.endOf('day');\n\n const dayEvents = events\n .filter((e) => (e.startDateTime as JSDateTime).isBetween([dayStart, dayEnd]))\n .sort((a, b) => {\n if (a.allDay && !b.allDay) return -1;\n if (!a.allDay && b.allDay) return 1;\n return a.startDateTime.valueOf() - b.startDateTime.valueOf();\n });\n\n datesWithEvents.push([currDate, dayEvents]);\n }\n currDate = currDate.plus({ days: 1 });\n }\n return datesWithEvents;\n }, []);\n\n const [datesWithEvents, setDatesWithEvents] = React.useState<Array<[JSDateTime, T[]]>>(eventConverterFn(viewDate));\n React.useEffect(() => {\n const newVd = vd instanceof Date ? JSDateTime.fromDate(vd, options?.locale) : vd.clone();\n setViewDate(newVd);\n setDatesWithEvents(eventConverterFn(newVd));\n }, [vd, orgEvents, options?.locale]);\n\n const gridContainerStyles = React.useMemo<CSSProperties>(\n () => ({ ...gridContainerStylesBase, gridTemplateColumns: `30px repeat(${visibleDays.size}, 1fr)` }),\n [options?.visibleDays]\n );\n return (\n <React.Fragment>\n <div className=\"lbr-grid-container\" style={gridContainerStyles}>\n <MonthViewHeader visibleDays={visibleDays} viewDate={viewDate} />\n <MonthViewDayBlocks<T>\n visibleDays={visibleDays}\n viewDate={viewDate}\n datesWithEvents={datesWithEvents}\n options={options}\n onDayClick={onDayClick}\n onEventClick={onEventClick}\n />\n </div>\n </React.Fragment>\n );\n}\n\n/**\n * Maak de header voor de maandview\n * @param visibleDays: set met dagen die getoond moeten worden\n * @param viewDate: huidige view-datum\n * @returns\n */\nfunction MonthViewHeader({ visibleDays, viewDate }: { visibleDays: Set<number>; viewDate: JSDateTime }): JSX.Element {\n const dayNames: string[] = [];\n let date = viewDate.startOf('week');\n const end = viewDate.endOf('week');\n const dayNums = Array.from(visibleDays).sort();\n let count = 0;\n while (date <= end && count < 7) {\n if (dayNums.includes(date.weekDay)) dayNames.push(date.dayLong);\n date = date.plus({ days: 1 });\n count++;\n }\n\n /** style van de container */\n const headerStyles = React.useMemo<CSSProperties>(() => ({ ...headerContainerStylesBase }), []);\n\n /** style van de dag-namen */\n const dayNameStyles = React.useMemo<CSSProperties>(() => ({ ...headerContainerStylesBase }), []);\n\n return (\n <React.Fragment>\n <div style={headerStyles}></div>\n {dayNames.map((d) => (\n <div key={d} style={dayNameStyles}>\n {d}\n </div>\n ))}\n </React.Fragment>\n );\n}\n\ntype MonthViewDayBlockProps<T extends BaseEventProps> = {\n /** de huidige geselecteerde datum */\n viewDate: JSDateTime;\n /** alle dates met de bijhorende events */\n datesWithEvents: Array<[JSDateTime, T[]]>;\n /** de zichtbare dagen (ma = 1, di = 2, etc) */\n visibleDays: Set<number>;\n /** event click callback */\n onEventClick?: (event: T, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** day click callback */\n onDayClick?: (date: JSDateTime, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** options bij de calendar */\n options?: CalendarOptions<T>;\n};\n\n/** blokjes bij de monthview */\nfunction MonthViewDayBlocks<T extends BaseEventProps>({\n visibleDays,\n onDayClick,\n onEventClick,\n options,\n datesWithEvents,\n}: MonthViewDayBlockProps<T>): JSX.Element {\n const weekLength = visibleDays.size;\n // de dag-counter, oom te bepalen wanneer er een weeknummer inmoet\n let counter = 0;\n\n return (\n <React.Fragment>\n {datesWithEvents.map(([date, events]) => {\n if (counter == weekLength) counter = 0;\n return (\n <React.Fragment key={date.ISO}>\n {counter++ == 0 && <WeekNumberCell weekNr={date.weekNr} />}\n <DayContainer\n date={date}\n events={events}\n onEventClick={onEventClick}\n onDayClick={onDayClick}\n options={options}\n />\n </React.Fragment>\n );\n })}\n </React.Fragment>\n );\n}\n\n/** speciale component voor het weeknummer */\nfunction WeekNumberCell({ weekNr }: { weekNr: number }): JSX.Element {\n /** css object voor de weeknummer */\n const weekNumStyle = React.useMemo<CSSProperties>(() => ({ ...weekNumberStylesBase }), []);\n return <div style={{ ...weekNumStyle, borderTopWidth: '0' }}>{weekNr}</div>;\n}\n\nexport { MonthView };\nexport type { MonthViewProps };\n","import React, { CSSProperties } from 'react';\nimport { dayContainerStyleBase } from '../base-styles';\nimport { BaseEventProps, CalendarOptions } from '../Props';\nimport { CalendarItem } from '../CalendarItems/CalendarItem';\n\ntype AlldayContainerProps<T extends BaseEventProps> = {\n events: T[];\n /** wat te doen als een event aangeklikt wordt */\n onEventClick?: (event: T, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** wat te doen als een dag aangeklikt wordt */\n options?: CalendarOptions<T>;\n};\n\n/**\n * Component voor allday objects in de calendar\n * @param props\n * @returns\n */\nexport function AlldayContainer<T extends BaseEventProps>({ options, events, onEventClick }: AlldayContainerProps<T>) {\n /** style van de container zelf */\n const dayContainerStyle = React.useMemo<CSSProperties>(() => ({ ...dayContainerStyleBase }), []);\n\n return (\n <div style={dayContainerStyle}>\n {events.map((e) => (\n <CalendarItem\n key={typeof e.id == 'function' ? e.id() : e.id}\n event={e}\n onClick={onEventClick}\n options={options?.event?.allday}\n desc={(e: T) => <span>{typeof e.title == 'function' ? e.title() : e.title}</span>}\n />\n ))}\n </div>\n );\n}\n","import React, { CSSProperties } from 'react';\nimport { DefinedHexColors } from '../../../loon-react-bulma-types';\nimport { calculateTxtColor } from '../../../utils';\nimport { JSDateTime } from '../../../utils/JSDateTime.class';\nimport { eventStylesBase, weekNumberStylesBase } from '../base-styles';\nimport { BaseEventProps, CalendarOptions, EventOptions } from '../Props';\n\n/**\n * Component om een uur-nummer weer te geven.\n * @param param0\n * @returns\n */\nexport function HourNumber({ hour }: { hour: number }): JSX.Element {\n const style = React.useMemo<React.CSSProperties>(\n () => ({ ...weekNumberStylesBase, paddingTop: '0', height: '60px', borderBottom: 'thin solid #e1e1e1' }),\n []\n );\n return <div style={style}>{hour.toString().padStart(2, '0')}:00</div>;\n}\n\ntype HourSlotProps<T extends BaseEventProps> = {\n /** de events voor deze HourProp */\n events: T[];\n /** event-selected callback Fn */\n onEventClick?: (event: T, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** options bij de calendar */\n options?: CalendarOptions<T>;\n};\n/**\n * Component voor een uur-slot.\n * @param param0\n * @returns\n */\nexport function HourSlot<T extends BaseEventProps>({ events, onEventClick, options }: HourSlotProps<T>): JSX.Element {\n const hourSlotStyle = React.useMemo<React.CSSProperties>(\n () => ({\n maxHeight: '60px',\n overflow: 'clip',\n borderBottom: 'thin solid #f1f1f1',\n borderRight: 'thin solid #f1f1f1',\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n }),\n []\n );\n const ref = React.useRef<HTMLDivElement>(null);\n\n const eventWidth = events.length !== 0 && ref.current?.offsetWidth ? ref.current.offsetWidth / events.length : 0;\n\n return (\n <div style={hourSlotStyle} ref={ref}>\n {events.map((evt, i) => (\n <WeekTimedItem<T>\n options={options?.event?.timed}\n event={evt}\n eventIndex={i}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n desc={(e) => (\n <React.Fragment>\n <b>{(e.startDateTime as JSDateTime).timeHM}</b>\n <span> {typeof e.title === 'function' ? e.title() : e.title}</span>\n </React.Fragment>\n )}\n onClick={onEventClick}\n eventWidth={eventWidth}\n />\n ))}\n </div>\n );\n}\n\ntype WeekTimedEventProps<T extends BaseEventProps> = {\n /** omschrijving bij het event */\n desc: (event: T) => JSX.Element;\n /** het event zelf */\n event: T;\n /** opties voor events */\n options?: EventOptions<T>;\n /** onclick handler voor het event */\n onClick?: (event: T, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** parent breedte in px */\n eventWidth: number;\n eventIndex: number;\n};\n\n/**\n * Component voor een event dat de hele dag duurt\n * @param props\n * @returns\n */\nfunction WeekTimedItem<T extends BaseEventProps>({\n event,\n options,\n eventWidth,\n eventIndex,\n onClick,\n desc,\n}: WeekTimedEventProps<T>): JSX.Element {\n const [isHovered, setHovered] = React.useState(false);\n\n /** bereken de tekst kleur op basis van de achtergrond kleur */\n const pickTextColor = React.useCallback(calculateTxtColor, []);\n /** referentie naar element */\n const ref = React.useRef<HTMLDivElement>(null);\n\n /** styles van het event */\n const eventStyle = React.useMemo<CSSProperties>(() => {\n let bgColor = 'p';\n if (event.evtColor) bgColor = event.evtColor(isHovered);\n else if (options?.evtColor) bgColor = options.evtColor(event, isHovered);\n\n // ColorProps opruimen, vervangen door hex colors\n if (bgColor === 'p') bgColor = DefinedHexColors.Primary;\n else if (bgColor === 'i') bgColor = DefinedHexColors.Info;\n else if (bgColor === 'l') bgColor = DefinedHexColors.Link;\n else if (bgColor === 'd') bgColor = DefinedHexColors.Danger;\n else if (bgColor === 's') bgColor = DefinedHexColors.Success;\n else if (bgColor === 'w') bgColor = DefinedHexColors.Warning;\n bgColor += isHovered ? 'aa' : 'ff';\n\n const txtColor = pickTextColor(bgColor);\n\n const start = event.startDateTime as JSDateTime;\n let end = event.endDateTime as JSDateTime;\n if (!end.hasSame(start, 'day')) end = start.endOf('day');\n const diffInMS = end.valueOf() - start.valueOf();\n const minutesAsPixels = diffInMS / 1000 / 60;\n\n return {\n ...eventStylesBase,\n position: 'absolute',\n backgroundColor: bgColor,\n color: txtColor,\n margin: '0',\n marginX: '2px',\n marginTop: `${start.minute}px`,\n height: `${minutesAsPixels}px`,\n width: eventWidth,\n lineHeight: '1.05em',\n marginLeft: `${eventIndex * eventWidth}px`,\n cursor: onClick ? 'pointer' : 'default',\n } as CSSProperties;\n }, [event, isHovered, eventWidth, eventIndex]);\n\n return (\n <div\n ref={ref}\n onClick={(e) => onClick && onClick(event, e)}\n style={eventStyle}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n <span>{desc(event)}</span>\n </div>\n );\n}\n","import { BaseEventProps, CalendarOptions } from '../Props';\nimport React, { CSSProperties } from 'react';\nimport {\n gridContainerStylesBase,\n headerContainerStylesBase,\n todayStyleBase,\n weekNumberStylesBase,\n} from '../base-styles';\nimport { AlldayContainer } from './AlldayContainer';\nimport { JSDateTime } from '../../../utils/JSDateTime.class';\nimport { HourNumber, HourSlot } from './HourRow';\nimport { calculateTxtColor } from '../../../utils';\n\ntype WeekEvents<T extends BaseEventProps> = {\n /** allday-items bij een date, in een array */\n allday: Array<[JSDateTime, T[]]>;\n /** events met begin- en eindtijd bij een date, in een array */\n timed: Array<[JSDateTime, T[]]>;\n};\ntype WeekViewProps<T extends BaseEventProps> = {\n /** events voor deze view */\n events: T[];\n /** opties voor deze view */\n options?: CalendarOptions<T>;\n /** event aangeklikt */\n onEventClick?: (e: T, event: React.MouseEvent<HTMLElement>) => void;\n /** dag-datum geklikt? */\n onDayClick?: (date: JSDateTime, event: React.MouseEvent<HTMLElement>) => void;\n /** huidige geselecteerde datum */\n viewDate: Date | JSDateTime;\n};\n\n/**\n * maak een week-view (grid) met events\n * @param props\n * @returns een weekview (grid) met de events\n * @ex\n */\nfunction WeekView<T extends BaseEventProps>(props: WeekViewProps<T>): JSX.Element {\n const { viewDate: vd, options, onEventClick, events: orgEvents, onDayClick } = props;\n const [visibleDays] = React.useState<Set<number>>(options?.visibleDays ?? new Set([1, 2, 3, 4, 5, 6, 7]));\n const [viewDate, setViewDate] = React.useState<JSDateTime>(\n vd instanceof Date ? JSDateTime.fromDate(vd, options?.locale) : vd.clone()\n );\n\n /**\n * converteer alle events naar een array van [Datum, Event[]]-tuples.\n * @param vd datum om de view rond op te bouwen\n */\n const eventConverterFn = React.useCallback((vd: JSDateTime): WeekEvents<T> => {\n const start = vd.startOf('week').startOf('day'); // start van de week\n const end = vd.endOf('week').plus({ days: 1 }).startOf('day'); // begin van de dag van de VOLGENDE week\n\n // filter eerste alle events weg die NIET in deze week vallen\n const events = orgEvents\n .map((e) => {\n e.allDay = e.allDay || !e.endDateTime;\n if (e.startDateTime instanceof Date) e.startDateTime = JSDateTime.fromDate(e.startDateTime, options?.locale);\n if (e.endDateTime && e.endDateTime instanceof Date)\n e.endDateTime = JSDateTime.fromDate(e.endDateTime, options?.locale);\n return e;\n })\n .filter((e) => (e.startDateTime as JSDateTime).isBetween([start, end]));\n\n let currDate = start.clone();\n const datesWithEvents: Array<[JSDateTime, T[]]> = [];\n\n while (currDate < end) {\n if (visibleDays.has(currDate.weekDay)) {\n const dayStart = currDate.startOf('day');\n const dayEnd = currDate.endOf('day');\n\n const dayEvents = events\n .filter((e) => (e.startDateTime as JSDateTime).isBetween([dayStart, dayEnd]))\n .sort((a, b) => {\n if (a.allDay && !b.allDay) return -1;\n if (!a.allDay && b.allDay) return 1;\n return a.startDateTime.valueOf() - b.startDateTime.valueOf();\n });\n\n datesWithEvents.push([currDate, dayEvents]);\n }\n currDate = currDate.plus({ days: 1 });\n }\n const allday = datesWithEvents.map(([date, events]): [JSDateTime, T[]] => {\n return [date, events.filter((e) => e.allDay)];\n });\n const timed = datesWithEvents.map(([date, events]): [JSDateTime, T[]] => {\n return [date, events.filter((e) => !e.allDay)];\n });\n\n return { allday, timed };\n }, []);\n\n /** zichtbare dagen in de view, Ma = 1, di = 2, etc */\n // const visibleDays =\n // options?.visibleDays && options?.visibleDays?.size !== 0 ? options?.visibleDays! : new Set([1, 2, 3, 4, 5, 6, 7]);\n\n const [datesWithEvents, setDatesWithEvents] = React.useState<WeekEvents<T>>(eventConverterFn(viewDate));\n\n React.useEffect(() => {\n const newVd = vd instanceof Date ? JSDateTime.fromDate(vd, options?.locale) : vd.clone();\n setViewDate(newVd);\n setDatesWithEvents(eventConverterFn(newVd));\n }, [vd, orgEvents, options?.visibleDays, options?.locale]);\n\n const gridContainerStyles = React.useMemo<CSSProperties>(\n () => ({\n ...gridContainerStylesBase,\n gridTemplateRows: `60px repeat(6, auto)`,\n gridTemplateColumns: `40px repeat(${visibleDays.size}, 1fr)`,\n }),\n [options?.visibleDays]\n );\n\n const hours = React.useMemo(() => Array.from(Array(24).keys()), []);\n\n return (\n <React.Fragment>\n <div className=\"lbr-grid-container\" style={gridContainerStyles}>\n <div></div>\n <Header<T> onDayClick={onDayClick} daysWithEvents={datesWithEvents.allday} options={options} />\n\n <div\n style={{ ...weekNumberStylesBase, paddingTop: '0', height: '60px', borderBottom: 'thin solid #e1e1e1' }}\n ></div>\n {datesWithEvents.allday.map(([date, events]) => {\n return (\n <AlldayContainer<T> key={date.dayShort} events={events} onEventClick={onEventClick} options={options} />\n );\n })}\n\n {hours.map((hour) => {\n return (\n <React.Fragment key={hour}>\n <HourNumber hour={hour} />\n {datesWithEvents.timed.map(([date, events]) => {\n const filteredEvts = events.filter((e) => (e.startDateTime as JSDateTime).hour === hour);\n return (\n <HourSlot\n key={date.dayShort + '-' + hour}\n events={filteredEvts}\n onEventClick={onEventClick}\n options={options}\n />\n );\n })}\n </React.Fragment>\n );\n })}\n </div>\n </React.Fragment>\n );\n}\n\ntype WeekViewHeaderProps<T extends BaseEventProps> = {\n /** callback voor dag geselecteerd */\n onDayClick?: (date: JSDateTime, event: React.MouseEvent<HTMLElement>) => void;\n /** datum met de bijhorende evnets */\n daysWithEvents: Array<[JSDateTime, T[]]>;\n /** de options bij de calendar */\n options?: CalendarOptions<T>;\n};\n\n/**\n * Maak de Header van de week-view\n * @param onDayClick: click-callback voor de header\n * @param {Array<[JSDateTime, T[]]>} daysWithEvents : array van [JSDateTime, T[]]-tuples (dag met bijhorende events)\n * @param {CalendarOptions} options: de options van de calendar\n * @returns\n */\nfunction Header<T extends BaseEventProps>({ onDayClick, daysWithEvents, options = {} }: WeekViewHeaderProps<T>) {\n /** style van de container */\n const headerStyle = React.useMemo<CSSProperties>(\n () => ({ ...headerContainerStylesBase, cursor: onDayClick ? 'pointer' : undefined }),\n [onDayClick]\n );\n\n /** style van de dag-namen */\n const dayNameStyles = React.useMemo<CSSProperties>(() => ({ ...headerStyle }), []);\n\n /** bereken de tekst kleur op basis van de achtergrond kleur */\n const pickTextColor = React.useCallback(calculateTxtColor, []);\n\n /** style van de today-header (wijkt af van normale header) */\n const todayStyle = React.useMemo<CSSProperties>(() => {\n if (options?.today?.doNotMarkToday) return {};\n\n let bgColor = 'p';\n if (options?.today?.bgColor) bgColor = options.today.bgColor(false);\n\n // ColorProps opruimen\n if (bgColor === 'p') bgColor = '#113670';\n else if (bgColor === 'i') bgColor = '#3b59ec';\n else if (bgColor === 'l') bgColor = '#2f47bc';\n else if (bgColor === 'd') bgColor = '#d91000';\n else if (bgColor === 's') bgColor = '#519c43';\n else if (bgColor === 'w') bgColor = '#eea720';\n\n const txtColor = pickTextColor(bgColor);\n\n return {\n ...todayStyleBase,\n marginBottom: '.5em',\n backgroundColor: bgColor,\n color: txtColor,\n };\n }, []);\n\n return (\n <React.Fragment>\n {daysWithEvents.map(([date]) => {\n return (\n <div style={dayNameStyles} key={date.dateShort} onClick={(e) => onDayClick && onDayClick(date, e)}>\n <div className=\"help my-1 mx-0\" style={{ color: '#aaaaaa' }}>\n {date.dayLong}\n </div>\n <span style={date.isToday ? todayStyle : undefined}>\n {date.day} {date.monthLong}\n </span>\n </div>\n );\n })}\n </React.Fragment>\n );\n}\n\nexport { WeekView };\nexport type { WeekViewProps };\n","import { MonthView, MonthViewProps } from \"./Month/MonthView\";\nimport { WeekView, WeekViewProps } from \"./Week/WeekView\";\n\nconst Calendar = {\n Month: MonthView,\n Week: WeekView,\n};\nexport { Calendar };\nexport type { WeekViewProps, MonthViewProps };\n","import React from 'react';\ntype InputErrorProps = {\n /** error gegenereerd door input-validation */\n stateError?: string;\n /** error van buitenaf opgegeven */\n outsideError?: string;\n /** is het field touched ? dan WEL een stateError opgeven */\n touched?: boolean;\n};\n\n/** Toon een erorr bij een input */\nconst InputError = (props: InputErrorProps) => {\n const { stateError, outsideError, touched } = props;\n\n if (outsideError) return <p className=\"help is-danger pl-3\">{outsideError}</p>;\n else if (touched && stateError) return <p className=\"help is-danger pl-3\">{stateError}</p>;\n else return null;\n};\n\nexport { InputError };\n","import { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { faCheck, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React from 'react';\n\ntype InputIconProps = {\n icons?: {\n start?: IconProp | string;\n end?: (v: boolean) => IconProp | string;\n };\n touched: boolean;\n valid: boolean;\n defaultIcon: IconProp | string;\n};\n\nfunction InputIcons({ icons, touched, valid, defaultIcon }: InputIconProps): JSX.Element {\n // bepaal het linker (start) icoon\n let iconLeft: React.ReactNode | undefined;\n if (typeof icons?.start === 'string') iconLeft = <i className={icons.start}></i>;\n else if (icons?.start) iconLeft = <FontAwesomeIcon icon={icons.start} />;\n else if (typeof defaultIcon === 'string') iconLeft = <i className={defaultIcon}></i>;\n else iconLeft = <FontAwesomeIcon icon={defaultIcon} />;\n\n // bepaal het rechter (end) icoon\n let iconRight: React.ReactNode | undefined;\n if (!icons?.end && !valid && touched) iconRight = <FontAwesomeIcon icon={faExclamationTriangle} />;\n else if (!icons?.end && valid && touched) iconRight = <FontAwesomeIcon icon={faCheck} />;\n else if (icons?.end) {\n const endIcon = icons.end(valid);\n if (typeof endIcon === 'string') iconRight = <i className={endIcon}></i>;\n else iconRight = <FontAwesomeIcon icon={endIcon} />;\n }\n\n // render de icons\n return (\n <React.Fragment>\n <span className=\"icon is-left\">{iconLeft}</span>\n <span className=\"icon is-right\">{iconRight}</span>\n </React.Fragment>\n );\n}\n\nexport { InputIcons };\n","import React from 'react';\nimport { DirectionProp, SizeProp } from '../../loon-react-bulma-types';\n\n/** een wrapper voor een input component, om te zorgen dat ze allemaal op dezelfde manier horizontaal of verticaal aligned worden. */\nexport const InputContainer = ({\n label,\n children: input,\n error,\n size,\n direction,\n}: {\n label?: { txt: string; id: string };\n children: React.ReactNode;\n error?: React.ReactNode;\n size?: SizeProp;\n direction: DirectionProp;\n}): JSX.Element => {\n return direction == 'horizontal' || direction == 'h' ? (\n <HorizontalInputContainer label={label} error={error} size={size ?? 'm'}>\n {input}\n </HorizontalInputContainer>\n ) : (\n <VerticalInputContainer label={label} error={error} size={size ?? 'm'}>\n {input}\n </VerticalInputContainer>\n );\n};\n\n/** een horizontale input met label */\nconst HorizontalInputContainer = ({\n label,\n children: input,\n error,\n size,\n}: {\n label?: { txt: string; id: string };\n children: React.ReactNode;\n error?: React.ReactNode;\n size?: SizeProp;\n}): JSX.Element => {\n let sizeClass = 'is-normal';\n if (size == 's') sizeClass += ' is-small';\n else if (size == 'l') sizeClass += ' is-medium';\n else if (size == 'xl') sizeClass += ' is-large';\n\n return (\n <div className=\"field is-horizontal\">\n <div className={`field-label ${sizeClass}`}>\n <label className={`label ${sizeClass}`} htmlFor={label?.id}>\n {label?.txt}\n </label>\n </div>\n <div className=\"field-body\">\n <div className=\"field\">\n {input}\n {error}\n </div>\n </div>\n </div>\n );\n};\n\n/** een verticale input met label */\nconst VerticalInputContainer = ({\n label,\n children: input,\n error,\n size,\n}: {\n label?: { txt: string; id: string };\n children: React.ReactNode;\n error: React.ReactNode;\n size?: SizeProp;\n}): JSX.Element => {\n let sizeClass = 'is-normal';\n if (size == 's') sizeClass += ' is-small';\n else if (size == 'l') sizeClass += ' is-medium';\n else if (size == 'xl') sizeClass += ' is-large';\n return (\n <div className={`field`}>\n <label className={`label ${sizeClass}`} htmlFor={label?.id}>\n {label?.txt}\n </label>\n {input}\n {error}\n </div>\n );\n};\n","import React from 'react';\nimport { CheckradioStylingType, ColorProp } from '../../loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\n\ntype CheckboxInputProps = Omit<BaseInputProps, 'icons'> & {\n /** kleur van de checkbox (default = 'l', link) */\n color?: ColorProp;\n /** speciale styling van de checkbox */\n styling?: CheckradioStylingType;\n /** de waarde */\n value?: boolean;\n /** Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param isValid is de waarde gevalideerd en geldig?\n */\n onValueChanged?(newVal: boolean, isValid?: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de checkbox */\n value: boolean;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: boolean };\ntype SetStateType = BaseSetStateType & { value: boolean };\n\n/**\n * De reducer van de CheckBox\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg == '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg == '',\n };\n }\n}\n\n/**\n * Maak een togglebare checkbox input\n * @param props\n * @returns een checkbox\n * @example <Checkbox value={true} {...props}/>\n * @description alle props voor Checkbox component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | validation | `FormValidationType` | `{} ` | de validatie voor de input |\n * | textAlign | `l`, `c`, `r` | `l` | de text-uitlijning van de input |\n * | keyboardType | `search`, `text`, | `text` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | value | `boolean` | `false` | de waarde |\n * | color | `l`,`p`,`s` | `l` | de kleur van de checkbox |\n * | | `d`,`w`,`i` | | |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | styling | `rounded`,`noborder` | | de styling van de checkbox |\n * | | `colored`, `blocky` | | |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | onValueChanged() | `function` | | (value: boolean, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction CheckBox(props: CheckboxInputProps) {\n const labelTxt = props.label || props.name;\n\n const [state, dispatch] = React.useReducer<React.Reducer<State, ChangeStateType | SetStateType>>(reducer, {\n description: props.name,\n value: props.value ?? false,\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n const handleClick = () => {\n if (!props.disabled) {\n const newVal = !state.value;\n const invalidMsg = validate(newVal, state.description, state.validation);\n\n props.onValueChanged && props.onValueChanged(!state.value, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: newVal, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? false, validation: props.validation });\n }, [props.value, props.validation]);\n\n // stel de className samen\n let className = 'is-checkradio';\n const { size, color, styling, textAlign } = props;\n if (size === 's') className += ' is-small';\n else if (size === 'l') className += ' is-medium';\n else if (size === 'xl') className += ' is-large';\n\n if (color === 'w') className += ' is-warning';\n else if (color === 'd') className += ' is-danger';\n else if (color === 'i') className += ' is-info';\n else if (color === 's') className += ' is-success';\n else if (color === 'p') className += ' is-primary';\n else className += ' is-link';\n\n if (styling === 'rounded') className += ' is-circle';\n else if (styling === 'noborder') className += ' has-no-border';\n else if (styling === 'colored') className += ' has-background-color';\n else if (styling === 'blocky') className += ' is-blocky';\n\n if (textAlign === 'c') className += ' has-text-centered';\n else if (textAlign === 'r') className += ' has-text-right';\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n const error = <InputError stateError={state.invalidMsg} outsideError={errorMsg} touched={state.touched} />;\n\n return (\n <InputContainer size=\"m\" error={error} direction={props.direction ?? 'h'}>\n <div className=\"control\" title={props.tooltip}>\n <div className=\"field\">\n <input\n className={className}\n type=\"checkbox\"\n name={props.name}\n id={props.id ?? props.name}\n required={state.validation?.required}\n checked={state.value}\n disabled={props.disabled}\n onChange={() => handleClick()}\n onKeyDown={props.onKeyDown}\n />\n <label htmlFor={props.id ?? props.name}>{labelTxt}</label>\n </div>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Voer validatie van de waarde uit\n * @param value de nieuwe waarde\n * @param desc de naam van de input\n * @param validationObject het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: boolean, desc: string, validationObject?: FormValidationType): string {\n if (!validationObject) return '';\n else if (validationObject.required && !value) return `${desc} is verplicht`;\n else if (validationObject.onValidate) return validationObject.onValidate(value);\n return '';\n}\n\nexport { CheckBox };\nexport type { CheckboxInputProps };\n","import { faCalendar } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype DateInputProps = BaseInputProps & {\n /** start value voor deze input (optioneel) FORMAT: YYYY-MM-DD */\n value?: string | Date;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, valid: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de DateInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg == '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg == '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Input voor het opgeven van een datum\n * @param props\n * @returns input met als value een datum\n * @example\n * <DateInput value=\"2020-01-01\" {...props}/>\n * <DateInput value={new Date()} {...props}/>\n * @description alle props voor Date component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-uitlijning van de input |\n * | keyboardType | `search`, `text`, | `text` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string`, `Date` | `now()` | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void ` */\nfunction DateInput(props: DateInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: typeof props.value == 'string' ? props.value : props.value?.toISOString().substring(0, 10) ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // classes van de input\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const handleChange = (val: string, date: Date): void => {\n if (!props.disabled || (!date && props.validation?.required)) {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({\n type: 'SET',\n value: typeof props.value === 'string' ? props.value : props.value?.toISOString().substring(0, 10) ?? '',\n validation: props.validation,\n });\n }, [props.value, props.validation]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n required={state.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value, e.target.valueAsDate)}\n type=\"date\"\n inputMode={props.keyboardType ?? 'text'}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faCalendar} />\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validatie?: FormValidationType): string {\n const newDateValue = new Date(value);\n if (validatie?.required && !value) return `${desc} is verplicht`;\n else if (validatie?.min && new Date(validatie.min) > newDateValue) return `${desc} moet na ${validatie.min} liggen`;\n else if (validatie?.max && new Date(validatie.max) < newDateValue) return `${desc} moet voor ${validatie.max} liggen`;\n else if (validatie?.onValidate) return validatie.onValidate(value);\n return '';\n}\n\nexport { DateInput };\nexport type { DateInputProps };\n","import { faCalendarDay } from '@fortawesome/free-solid-svg-icons';\nimport {} from '@fortawesome/react-fontawesome';\nimport React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype DateTimeInputProps = BaseInputProps & {\n /** start value voor deze input (optioneel) FORMAT: YYYY-MM-DDTHH:mm */\n value?: string | Date;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, valid: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de DateTimeInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg == '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg == '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/** Input voor het opgeven van een datum-tijd combinatie\n * @param props\n * @returns Een input voor een Datum en Tijd combinatie\n * @example\n * <DateTimeInput value=\"2020-01-01T00:00\" {...props}/>\n * <DateTimeInput value={new Date()} {...props}/>\n * @description alle props voor DateTime component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-uitlijning van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string`, `Date` | `now()` | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction DateTimeInput(props: DateTimeInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label || props.name,\n value: typeof props.value === 'string' ? props.value : props.value?.toISOString().substring(0, 16) ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // classes vand e input\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({\n type: 'SET',\n value: typeof props.value === 'string' ? props.value : props.value?.toISOString().substring(0, 16) ?? '',\n validation: props.validation,\n });\n }, [props.value, props.validation]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n required={state.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n type=\"datetime-local\"\n pattern=\"[0-9]{4}-[0-9]{2}-[0-9]{2}T?[0-9]{2}:[0-9]{2}\"\n inputMode={props.keyboardType ?? 'text'}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faCalendarDay} />\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string | Date, desc: string, validation?: FormValidationType): string {\n const date = new Date(value);\n // const pattern = /[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}Z/;\n const minDate = validation?.min ? new Date(validation.min as string) : null;\n const maxDate = validation?.max ? new Date(validation.max as string) : null;\n\n if (!validation) return '';\n else if (validation.required && !value) return `${desc} is verplicht`;\n // else if (typeof value == 'string' && pattern.test(value)) return `${desc} bevat een ongeldige waarde`;\n else if (minDate && minDate > date) return `${desc} moet later zijn dan ${validation.min}`;\n else if (maxDate && maxDate < date) return `${desc} moet later zijn dan ${validation.max}`;\n else if (validation.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { DateTimeInput };\nexport type { DateTimeInputProps };\n","import { faClock } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype TimeInputProps = BaseInputProps & {\n /** start value voor deze input (optioneel) FORMAT: HH:mm:SS */\n value?: string | Date;\n /** grootte van een stap verzetten. het aantal secondes om de klok te verzetten, default = 60 (1 minuut) */\n step?: number;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, valid: boolean): void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de TimeInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg == '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg == '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n/**\n * Input om een tijd op te geven (HH:mm OF HH:mm:SS) met optionele validatie\n * @param props\n * @returns\n * @example\n * <TimeInput value=\"12:30\" {...props}>\n * <TimeInput value={new Date()} {...props}>\n * * @description alle props voor Time component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-uitlijning van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{} ` | de validatie voor de input |\n * | value | `string`, `Date` | `now()` | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction TimeInput(props: TimeInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: typeof props.value == 'string' ? props.value : props.value?.toISOString().substring(11, 16) ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // classes van de input\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const invalidMsg = validate(val, state.description, props.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n React.useEffect(\n () =>\n dispatch({\n type: 'SET',\n value: typeof props.value === 'string' ? props.value : props.value?.toISOString().substring(11, 16) ?? '',\n validation: props.validation,\n }),\n [props.value, props.validation]\n );\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n required={state.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n type=\"time\"\n inputMode={props.keyboardType ?? 'numeric'}\n step={props.step}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faClock} />\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validation?: FormValidationType): string {\n const date = Date.parse('01/01/1970 ' + value);\n if (!validation) return '';\n else if (validation?.required && !value) return `${desc} is verplicht`;\n else if (validation?.max && Date.parse('01/01/1970 ' + validation.max) < date)\n return `${desc} moet eerder dan ${validation.max} zijn.`;\n else if (validation?.min && Date.parse('01/01/1970 ' + validation.min) > date)\n return `${desc} moet later dan ${validation.min} zijn.`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { TimeInput };\nexport type { TimeInputProps };\n","import React, { CSSProperties, Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\n\ntype MultiRangeInputProps = Omit<BaseInputProps, 'icons'> & {\n /** stap-grootte voor de input (optioneel, default = 1) */\n step?: number;\n /** de start-waarde voor de input (optioneel) */\n value?: [number, number];\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: [number, number], valid: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van het 1e nummer */\n valueA: number;\n /** de waarde van het 2e nummer */\n valueB: number;\n};\n\ntype ChangeStateType = BaseChangeStateType & { valueA: number; valueB: number };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { valueA: number; valueB: number };\n\n/**\n * De reducer van de MultiRangeInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nconst reducer = (state: State, action: ChangeStateType | SetStateType | TouchStateType) => {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.valueA, action.valueB, state.description, action.validation);\n return {\n ...state,\n valueA: action.valueA,\n valueB: action.valueB,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n valueA: action.valueA,\n valueB: action.valueB,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n};\n\n/**\n * Gebruik een input met een range-selector; <input type=\"range\" ... />\n * De min- en max-waarden zijn instelbaar via props.validatie. Default zijn dit (0 en 100)\n * @param props\n * @returns een range input met als value een array van twee waarden\n * @example <MultiRangeInput value={[valueA, valueB]} validation={{min: 10, max: 110}} {...props}/>\n * @description alle props voor MultiRange component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | step | `number ` | `1 ` | stapgrootte voor verschuiving |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `[number, number]` |`[0, 100]`| de waarde als number-tuple |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: [number, number], valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction MultiRangeInput(props: MultiRangeInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label || props.name,\n valueA: props.value ? props.value[0] : +(props.validation?.min ?? 0),\n valueB: props.value ? props.value[1] : +(props.validation?.max ?? 100),\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n const sliderStyle = React.useMemo(\n () =>\n ({\n width: '100%',\n marginTop: '1em',\n '--min': state.validation?.min ?? 0,\n '--max': state.validation?.max ?? 100,\n '--value-a': state.valueA,\n '--value-b': state.valueB,\n '--text-value-a': `${state.valueA}`,\n '--text-value-b': `${state.valueB}`,\n } as CSSProperties),\n [state.valueA, state.valueB, state.validation?.min, state.validation?.max, props.value]\n );\n\n const onChangeValue = (input: 'A' | 'B', newVal: string) => {\n if (!props.disabled) {\n const val = parseFloat(newVal);\n const a = input === 'A' ? val : state.valueA;\n const b = input === 'B' ? val : state.valueB;\n const invalidMsg = validate(a, b, state.description, state.validation);\n props.onValueChanged && props.onValueChanged([a, b], invalidMsg === '');\n dispatch({ type: 'CHANGE', valueA: a, valueB: b, invalidMsg });\n }\n };\n\n /** als de props value opnieuw gezet wordt */\n React.useEffect(() => {\n const [valueA, valueB] = props.value ?? [+(props.validation?.min ?? 0), +(props.validation?.max ?? 100)];\n dispatch({\n type: 'SET',\n valueA,\n valueB,\n validation: props.validation,\n });\n }, [props.value, props.validation]);\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg =\n typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage([state.valueA, state.valueB]);\n\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size=\"m\" error={error} direction={props.direction ?? 'h'}>\n <div className=\"field\" title={props.tooltip}>\n <div className=\"control\">\n <div className=\"range-slider flat\" style={sliderStyle}>\n <input\n type=\"hidden\"\n name={props.name}\n value={JSON.stringify([state.valueA, state.valueB])}\n id={props.id ?? props.name}\n />\n <input\n type=\"range\"\n name={props.name + '_A'}\n id={props.id + '_A'}\n min={state.validation?.min ?? 0}\n max={state.validation?.max ?? 100}\n value={state.valueA}\n step={props.step}\n required={state.validation?.required}\n disabled={props.disabled}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => onChangeValue('A', e.target.value)}\n />\n <output id={props.id + '_out_A'}>{state.valueA}</output>\n <input\n type=\"range\"\n name={props.name + '_B'}\n id={props.id + '_B'}\n min={state.validation?.min ?? 0}\n max={state.validation?.max ?? 100}\n value={state.valueB}\n step={props.step}\n required={state.validation?.required}\n disabled={props.disabled}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => onChangeValue('B', e.target.value)}\n />\n <output id={props.id + '_out_B'}>{state.valueB}</output>\n <div className=\"range-slider__progress\"></div>\n </div>\n </div>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer de waarden van de input (A & B)\n * @param a de waarde voor A\n * @param b de waarde voor B\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(a: number, b: number, desc: string, validation?: FormValidationType): string {\n // a & b valid, nu de rest\n const diff = Math.abs(a - b);\n if (validation?.minDiff && validation.minDiff >= diff)\n return `Het verschil in ${desc} tussen de 2 waarden moet minstens ${validation.minDiff} zijn`;\n else if (validation?.maxDiff && validation.maxDiff <= diff)\n return `Het verschil in ${desc} tussen de 2 waarden moet maximaal ${validation.maxDiff} zijn`;\n else if (validation?.onValidate) return validation.onValidate([a, b]);\n else return '';\n}\n\nexport { MultiRangeInput };\nexport type { MultiRangeInputProps };\n","import { faCalculator } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype NumberInputProps = BaseInputProps & {\n /** stap-grootte voor de input (optioneel, default = 1) */\n step?: number;\n /** de start-waarde voor de input (optioneel) */\n value?: number;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: number, valid: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: number;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: number };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: number };\n\n/**\n * De reducer van de NumberInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een input van type number met optionele validation.\n * @see RangeInput voor een input van type range die ook numbers oplevert.\n * @param props\n * @returns input with numeric values\n * @example <NumberInput value={10} onValueChanged={handleChange} {...props} />\n * @description alle props voor Number component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | step | `number ` | `1` | stapgrootte voor de input (+ & - aansturen)|\n * | tooltip | `string ` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `number` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: number, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction NumberInput(props: NumberInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label || props.name,\n value: props.value ?? 0,\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // stel de classname samen\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const handleChange = (val: number): void => {\n if (props.disabled) return;\n\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg === '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? 0, validation: props.validation });\n }, [props.value, props.validation]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n type=\"number\"\n inputMode={props.keyboardType ?? 'numeric'}\n name={props.name}\n value={isNaN(state.value) ? '' : state.value}\n max={props.validation?.max}\n min={props.validation?.min}\n step={props.step}\n required={props.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.valueAsNumber)}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faCalculator} />\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: number, desc: string, validation?: FormValidationType): string {\n if (validation?.required && !value && value != 0) return `${desc} is verplicht`;\n else if (isNaN(value)) return `${desc} bevat geen geldige waarde.`;\n else if (validation?.min && value < +validation.min)\n return `${desc} moet groter of gelijk zijn aan ${validation.min}`;\n else if (validation?.max && value > +validation.max)\n return `${desc} moet kleiner of gelijk zijn aan ${validation.max}`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { NumberInput };\nexport type { NumberInputProps };\n","import React, { CSSProperties, Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\ntype RangeInputProps = Omit<BaseInputProps, 'icons'> & {\n /** stap-grootte voor de input (optioneel, default = 1) */\n step?: number;\n /** de start-waarde voor de input (optioneel) */\n value?: number;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: number, valid: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: number;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: number };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: number };\n\n/**\n * De reducer van de RangeInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Gebruik een input met een range-selector; <input type=\"range\" ... />\n * De min- en max-waarden zijn instelbaar via props.validatie. Default zijn dit (0 en 100)\n * @see NumberInput om een nimerieke waarde in te typen\n * @param props\n * @returns een input om een range te selecteren\n * @example <RangeInput value={value} validation={{min: 10, max: 110}} {...props}/>\n * @description alle props voor Range component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | step | `number ` | `1 ` | stapgrootte voor verschuiving |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `number ` | | de waarde |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction RangeInput(props: RangeInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: props.value ?? 0,\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n const sliderStyle = React.useMemo(\n () =>\n ({\n width: '100%',\n marginTop: '1em',\n '--min': state.validation?.min ?? 0,\n '--max': state.validation?.max ?? 100,\n '--value': state.value || 0,\n '--text-value': `${state.value}`,\n } as CSSProperties),\n [state.value, state.validation]\n );\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const v = parseFloat(val);\n const invalidMsg = validate(v, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(v, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: v, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? 0, validation: props.validation });\n }, [props.value, props.validation]);\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size=\"m\" label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"field\" title={props.tooltip}>\n <div className=\"control\">\n <div className=\"range-slider\" style={sliderStyle}>\n <input\n type=\"range\"\n name={props.name}\n id={props.id ?? props.name}\n min={state.validation?.min ?? 0}\n max={state.validation?.max ?? 100}\n value={state.value}\n step={props.step}\n disabled={props.disabled}\n required={state.validation?.required}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n onKeyDown={props.onKeyDown}\n />\n <output>{state.value}</output>\n <div className=\"range-slider__progress\"></div>\n </div>\n </div>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: number, desc: string, validation?: FormValidationType): string {\n if (validation?.onValidate) return validation.onValidate(value);\n return desc != '' ? '' : ''; // desc == '' ? '' : '';\n}\n\nexport { RangeInput };\nexport type { RangeInputProps };\n","import { faPalette } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype ColorInputProps = BaseInputProps & {\n /** start value voor deze input (optioneel) */\n value?: string;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, isValid?: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de ColorInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg == '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg == '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een input voor hexadecimale kleuren.\n * altijd: #000000 t/m #ffffff\n * @param props\n * @returns input om een color te selecteren\n * @example <ColorInput value=\"#FF8000\" {...props}/>\n * @description alle props voor Color component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` |`#000000`| de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction ColorInput(props: ColorInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label || props.name,\n value: props.value ?? '#000000',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n let inputClasses = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n let outputClasses = 'button is-static';\n if (props.size === 's') {\n inputClasses += ' is-small';\n outputClasses += ' is-small';\n } else if (props.size === 'l') {\n inputClasses += ' is-medium';\n outputClasses += ' is-medium';\n } else if (props.size === 'xl') {\n inputClasses += ' is-large';\n outputClasses += ' is-large';\n }\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg === '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '#000000', validation: props.validation });\n }, [props.value, props.validation]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"field has-addons\" title={props.tooltip}>\n <div className=\"control is-expanded has-icons-right has-icons-left\" style={{ width: '15em' }}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n required={props.validation?.required}\n className={inputClasses}\n inputMode={props.keyboardType || 'text'}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n type=\"color\"\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faPalette} />\n </div>\n <div className=\"control\">\n <output className={outputClasses}>{state.value}</output>\n </div>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Voer validatie uit op een hexadecimale kleur\n * @param value een hex-color (#ff80000)\n * @param desc de field-omschrijving\n * @param validatieObj het object om mee te valideren\n * @returns een fout-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validatieObj?: FormValidationType): string {\n if (!validatieObj || !desc) return '';\n else if (validatieObj?.onValidate) return validatieObj.onValidate(value);\n return '';\n}\n\nexport { ColorInput };\nexport type { ColorInputProps };\n","import React from 'react';\n\ntype HiddenInputProps = {\n /** start value voor deze input (optioneel) */\n value?: string;\n /** name input: gebruikt voor een <label> als er geen label gedefinieerd is & de name-attribuut <input> */\n name: string;\n /** id voor de input: gebruikt voor een <label for=\"*id*}\"> */\n id: string;\n /** moet dit verborgen field worden ingevoerd */\n required?: boolean;\n /** (optionele) tooltip voor een hidden input ??? vooral voor test-doeleinden */\n tooltip?: string;\n};\n\n/**\n * Maak een input die verborgen is maar wel een waarde moet hebben.\n * @param props\n * @returns een hidden input\n * @example <HiddenInput value={value} {...props} />\n * @description alle props voor Hidden component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | id | `string ` | `name` | de id voor de input | |\n * | value | `string ` | '' | de waarde |\n * | required | `boolean` | | |\n */\nfunction HiddenInput(props: HiddenInputProps): JSX.Element {\n const [value, setValue] = React.useState(props.value ?? '');\n React.useEffect(() => setValue(props.value ?? ''), [props.value]);\n\n return (\n <input\n data-testid=\"hidden-input\"\n id={props.id ?? props.name}\n name={props.name}\n value={value}\n title={props.tooltip}\n required={props.required}\n type=\"hidden\"\n disabled={true}\n />\n );\n}\n\nexport { HiddenInput };\nexport type { HiddenInputProps };\n","import React from 'react';\n\nexport type SelectOptionType = {\n /** de waarde van een option */\n value: number | string;\n /** is deze select option disabled */\n disabled?: boolean;\n /** de naam van een option (optioneel, bij undefined wordt de waarde gebruikt) */\n label?: string;\n};\n\nexport type SelectOptionGroupType = {\n /** de naam van de <optgroup> */\n label: string;\n /** De options */\n selectOptions: SelectOptionType[];\n};\n\n/**\n * Maak een <optgroup>...</optgroup> of <option>...</option> array voor een <select> of een multiselect\n * @param options de options\n * @returns JSX-elementen-array\n */\nexport function createSelectOptions(options: string[] | SelectOptionType[] | SelectOptionGroupType[]): JSX.Element[] {\n if (options.length == 0) return [];\n else if (typeof options[0] == 'string') {\n const opts = options as string[];\n return opts.map((o) => (\n <option key={o} value={o}>\n {o}\n </option>\n ));\n } else if ('value' in options[0]) {\n const opts = options as SelectOptionType[];\n return opts.map((o) => (\n <option key={o.value} value={o.value} disabled={o.disabled}>\n {o.label || o.value}\n </option>\n ));\n } else {\n const ogs = options as SelectOptionGroupType[];\n return ogs.map((o) => (\n <optgroup key={o.label} label={o.label}>\n {o.selectOptions.map((opt) => {\n return (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label || opt.value}\n </option>\n );\n })}\n </optgroup>\n ));\n }\n}\n","import React from 'react';\nimport {\n BaseChangeStateType,\n BaseFocusStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputError,\n} from '../shared';\nimport { SelectOptionType, SelectOptionGroupType, createSelectOptions } from './BaseSelectProps';\n\ntype MultiSelectInputProps = Omit<BaseInputProps, 'icons'> & {\n /** de waarde */\n value?: string[];\n /** de values voor de options. DEZE MOETEN UNIEK ZIJN! */\n options: string[] | SelectOptionType[] | SelectOptionGroupType[];\n /** aantal zichtbare rijen zonder scrollen */\n rows?: number;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string[], valid: boolean): void;\n};\n\ntype State = BaseState & {\n /** de waarde van de multiselect */\n value: string[];\n /** is de MultiSelect focused */\n focused: boolean;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string[] };\ntype TouchStateType = BaseTouchStateType;\ntype FocusStateType = BaseFocusStateType;\ntype SetStateType = BaseSetStateType & { value: string[] };\n\n/**\n * De reducer van de MultiSelect\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType | FocusStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n focused: false,\n };\n case 'FOCUS':\n return {\n ...state,\n focused: action.focus,\n };\n }\n}\n\n/**\n * Maak een select waarin meerdere opties geselecteerd kunnen worden.\n * Wordt weergegeven als een lijstje waarin met ctrl-click, shift-click of cmd-click 2 of meer waarden geselecteerd kunnen worden.\n * - lijstje van strings\n * - lijstje van {value: string, label: string, disabled: boolean}\n * - lijstje van {value: string, label: string, disabled: boolean} per group (<optgroup>)\n * @see Select voor een select waarin maar 1 waarde geselecteerd kan worden.\n * @param props\n * @returns Een MultiSelect waarvan de value ALTIJD een string[] is. Ook als er 1 optie geselecteerd is.\n * @example <MultiSelect value={['a', 'b']} options={['a', 'b', 'c']} {...props}/>\n * @description alle props voor MultiSelect component\n * | prop | type | default | description |\n * |-------------------|---------------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | rows | `number` | `6` | zichtbare rijen in de select |\n * | id | `string` | `name` | de id voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string[]` | `[]` | de waarde |\n * | options | `string[]` | `[]` | de opties |\n * | | `SelectOptionType[]` | | |\n * | | `SelectOptionGroupType[]` | | |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string[], valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction MultiSelect(props: MultiSelectInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<\n React.Reducer<State, ChangeStateType | TouchStateType | SetStateType | FocusStateType>\n >(reducer, {\n description: props.label ?? props.name,\n value: props.value ?? [],\n invalidMsg: '',\n valid: false,\n focused: false,\n touched: false,\n validation: props.validation,\n });\n const labelTxt = props.label ?? props.name;\n const visibleRows = props.rows ?? 6;\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // stel de classname samen\n let className =\n (!state.valid && state.touched) || errorMsg\n ? 'select is-danger is-fullwidth is-multiple'\n : 'select is-fullwidth is-multiple';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? [], validation: props.validation });\n }, [props.value, props.validation]);\n\n const options: JSX.Element[] = createSelectOptions(props.options);\n\n const handleSelectChange = (collection: HTMLCollection) => {\n if (!props.disabled) {\n const values: string[] = [];\n for (let i = 0; i < collection.length; i++) values.push((collection[i] as HTMLOptionElement).value);\n const invalidMsg = validate(values, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(values, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: values, invalidMsg });\n }\n };\n\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <React.Fragment>\n <div className=\"field\" title={props.tooltip}>\n <label className=\"label\" htmlFor={props.id ?? props.name}>\n {labelTxt}\n </label>\n <div className=\"control\">\n <div className={className}>\n <select\n multiple\n required={state.validation?.required}\n id={props.id ?? props.name}\n size={visibleRows}\n disabled={props.disabled}\n onFocus={() => dispatch({ type: 'FOCUS', focus: true })}\n onChange={(e) => handleSelectChange(e.target.selectedOptions)}\n onBlur={() => {\n !state.touched && dispatch({ type: 'TOUCH', touched: true });\n dispatch({ type: 'FOCUS', focus: false });\n }}\n defaultValue={state.value}\n >\n {props.placeholder && (\n <option disabled value=\"\">\n {props.placeholder}\n </option>\n )}\n {options}\n </select>\n </div>\n </div>\n {error}\n </div>\n </React.Fragment>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string[], desc: string, validation?: FormValidationType): string {\n if (validation?.required && (!value || value.length == 0)) return `${desc} is verplicht`;\n else if (validation?.min && value.length < validation.min)\n return `${desc} moet minimaal uit ${validation.min} geselecteerde opties betaan`;\n else if (validation?.max && value.length > validation.max)\n return `${desc} mag maximaal uit ${validation.min} geselecteerde opties bestaan`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { MultiSelect };\nexport type { MultiSelectInputProps };\n","import React, { Reducer } from 'react';\nimport { SizeProp } from '../../loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\nimport { SelectOptionType, SelectOptionGroupType, createSelectOptions } from './BaseSelectProps';\n\ntype SelectInputProps = Omit<BaseInputProps, 'icons'> & {\n /** de waarde */\n value?: number | string;\n /** de values voor de options. DEZE MOETEN UNIEK ZIJN! */\n options: string[] | SelectOptionType[] | SelectOptionGroupType[];\n /** grootte input (optioneel) */\n size?: SizeProp;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string | number, valid: boolean): void;\n};\n\ntype State = BaseState & {\n /** de waarde van de select */\n value: string | number;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string | number };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string | number };\n\n/**\n * De reducer van de Select\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Een select-input om een waarde te selecteren uit een lijstje\n * - lijstje van strings\n * - lijstje van {value: string, label: string, disabled: boolean}\n * - lijstje van {value: string, label: string, disabled: boolean} per group (<optgroup>)\n * @see MultiSelect voor een select waar meerdere waarden mogelijk zijn.\n * @param props\n * @returns een Select component\n * @example <Select {...props}/>\n * @description alle props voor Number component\n * | prop | type | default | description |\n * |-------------------|---------------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | rows | `number` | `6` | zichtbare rijen in de select |\n * | id | `string` | `name` | de id voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | | de waarde |\n * | options | `string[]` | `[]` | de opties |\n * | | `SelectOptionType[]` | | |\n * | | `SelectOptionGroupType[]` | | |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction Select(props: SelectInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: props.value ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // stel de className samen\n let className = (!state.valid && state.touched) || errorMsg ? 'select is-danger is-fullwidth' : 'select is-fullwidth';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '', validation: props.validation });\n }, [props.value, props.validation]);\n\n const options = createSelectOptions(props.options);\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control\">\n <div className={className}>\n <select\n onChange={(e) => handleChange(e.target.value)}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n disabled={props.disabled}\n required={state.validation?.required}\n value={state.value}\n id={props.id ?? props.name}\n >\n {props.placeholder && (\n <option disabled value={props.placeholder}>\n {props.placeholder}\n </option>\n )}\n {options}\n </select>\n </div>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string | number, desc: string, validation?: FormValidationType): string {\n if (validation?.required && !value) return `${desc} is verplicht`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { Select };\nexport type { SelectInputProps };\n","import { faAt } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport { AutoCompleteType } from '../../loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype EmailInputProps = BaseInputProps & {\n /** start value voor deze input (optioneel) */\n value?: string;\n /** speciaal voor password-managers. Wat is de functie van deze input */\n autocomplete?: AutoCompleteType;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param isValid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, isValid?: boolean): any | void;\n};\n\n/** standaard email regex */\nconst emailRgx = /[^@ \\t\\r\\n]+@[^@ \\t\\r\\n]+\\.[^@ \\t\\r\\n]+/;\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de EmailInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een input van een tekst-type met optionele validation.\n * een ingevoerd e-mailadres wordt al automatisch gevalideert met een regex.\n * Onder validatie kan zo nodig een ander pattern worden opgegeven.\n * @param props\n * @returns een input met als type e-mail\n * @example <EmailInput value=\" {...props} />\n * @description alle props voor Email component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | autoComplete | `AutoCompleteType` | `email` | de autocomplete type (password managers) |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n *\n */\nfunction EmailInput(props: EmailInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.name,\n value: props.value ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // classname samenstellen\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg === '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '', validation: props.validation });\n }, [props.value, props.validation]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n autoComplete={props.autocomplete}\n required={props.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n type=\"email\"\n inputMode={props.keyboardType ?? 'email'}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faAt} />\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validation?: FormValidationType): string {\n const rgx = validation?.pattern ? new RegExp(validation?.pattern) : emailRgx;\n if (!validation && !rgx.test(value)) return `${desc} bevat geen geldig e-mailadres`;\n else if (validation?.min && value.length < validation.min)\n return `${desc} moet uit minstens ${validation.min} karakters bestaan`;\n else if (validation?.max && value.length > validation.max)\n return `${desc} moet uit maximaal ${validation.max} karakters bestaan`;\n else if (validation?.required && !value) return `${desc} is verplicht`;\n else if (validation && !rgx.test(value)) return `${desc} bevat geen geldig e-mailadres`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { EmailInput };\nexport type { EmailInputProps };\n","import { faEye, faEyeSlash, faLock } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { Reducer } from 'react';\nimport { AutoCompleteType } from '../../loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype PasswordInputProps = BaseInputProps & {\n /** start value voor deze input (optioneel) */\n value?: string;\n /** speciaal voor password-managers. Wat is de functie van deze input */\n autocomplete?: AutoCompleteType;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, isValid?: boolean): any | void;\n revealPasswordTooltip?: string;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de PasswordInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een input van een tekst-type met optionele validation.\n * Het wachtwoord wordt door **** verborgen.\n * @param props\n * @returns een input met type password\n * @example <PasswordInput {...props}/>\n * @description alle props voor Password component\n * | prop | type | default | description |\n * |-----------------------|----------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | autoComplete | `AutoCompleteType` | | de autocomplete type (password managers) |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | revealPasswordTooltip | `string` | | tooltip voor show-password-button |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction PasswordInput(props: PasswordInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: props.value ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // stel de classes voor de input en de button samen\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n let bttnClassName = 'button is-light';\n if (state.valid) bttnClassName += ' is-info';\n else if (!state.valid) bttnClassName += ' is-danger';\n\n if (props.size === 's') {\n className += ' is-small';\n bttnClassName += ' is-small';\n } else if (props.size === 'l') {\n className += ' is-medium';\n bttnClassName += ' is-medium';\n } else if (props.size === 'xl') {\n className += ' is-large';\n bttnClassName += ' is-large';\n }\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg === '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n const handlePasswordReadability = () => {\n if (passwordReadable === 'text') setPaswordReadable('password');\n else setPaswordReadable('text');\n };\n const [passwordReadable, setPaswordReadable] = React.useState<'password' | 'text'>('password');\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '', validation: props.validation });\n }, [props.value]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"field has-addons\" title={props.tooltip}>\n <div className=\"control has-icons-left has-icons-right is-expanded\">\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n inputMode={props.keyboardType ?? 'text'}\n autoComplete={props.autocomplete}\n required={props.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: false })}\n onChange={(e: any) => handleChange(e.target.value)}\n type={passwordReadable}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faLock} />\n </div>\n <div className=\"control\">\n <button\n title={props.revealPasswordTooltip ?? 'show password'}\n type=\"button\"\n className={bttnClassName}\n onClick={handlePasswordReadability}\n >\n {passwordReadable === 'text' && <FontAwesomeIcon icon={faEyeSlash} />}\n {passwordReadable === 'password' && <FontAwesomeIcon icon={faEye} />}\n </button>\n </div>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param type het type van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validation?: FormValidationType): string {\n const rgx = validation?.pattern ? new RegExp(validation?.pattern) : null;\n if (validation?.required && !value) return `${desc} is verplicht`;\n else if (validation?.min && value.length < validation.min)\n return `${desc} moet uit minstens ${validation.min} karakters bestaan`;\n else if (validation?.max && value.length > validation.max)\n return `${desc} moet uit maximaal ${validation.max} karakters bestaan`;\n else if (validation?.pattern && !rgx?.test(value)) return `${desc} voldoet niet aan het verwachte patroon`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { PasswordInput };\nexport type { PasswordInputProps };\n","import React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\n\ntype TextAreaProps = Omit<BaseInputProps, 'icons'> & {\n /** value van een texarea kan via de children of de value-prop */\n value?: string;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, valid: boolean): any | void;\n /** eigen onKeyDown voor TextAreas */\n onKeyDown?(e: React.KeyboardEvent<HTMLTextAreaElement>): void;\n};\n\ntype State = BaseState & {\n /** de waarde van de textarea */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de TextArea\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een textarea met optionele validation.\n * @param props\n * @returns een textarea\n * @example <TextArea {...props}/>\n * @description alle props voor TextArea component\n * | prop | type | default | description |\n * |-------------------|---------------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | type | `InputTypeProp` | | type voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | autocomplete | `AutoCompleteType` | | autocomplete voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction TextArea(props: TextAreaProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: props.value ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n // stel de className samen\n\n let className = (!state.valid && state.touched) || errorMsg ? 'textarea is-danger' : 'textarea';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '', validation: props.validation });\n }, [props.value, props.validation]);\n\n const handleChange = (newVal: string) => {\n if (!props.disabled) {\n const invalidMsg = validate(newVal, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(newVal, invalidMsg === '');\n dispatch({ type: 'CHANGE', value: newVal, invalidMsg });\n }\n };\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control\" title={props.tooltip}>\n <textarea\n className={className}\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n required={props.validation?.required}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n placeholder={props.placeholder}\n disabled={props.disabled}\n inputMode={props.keyboardType ?? 'text'}\n onKeyDown={props.onKeyDown}\n ></textarea>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validation?: FormValidationType): string {\n const rgx = validation?.pattern ? new RegExp(validation?.pattern) : null;\n\n if (validation?.min && value.length < validation.min)\n return `${desc} moet uit minstens ${validation.min} karakters bestaan`;\n else if (validation?.max && value.length > validation.max)\n return `${desc} moet uit maximaal ${validation.max} karakters bestaan`;\n else if (validation?.required && !value) return `${desc} is verplicht`;\n else if (validation?.pattern && !rgx?.test(value)) return `${desc} voldoet niet aan het verwachte patroon`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { TextArea };\nexport type { TextAreaProps };\n","import { faKeyboard } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport { AutoCompleteType } from '../../loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype CharType = '0-9' | 'a-z' | 'A-Z' | 'a-Z' | '0-Z' | string | RegExp;\ntype TextInputProps = BaseInputProps & {\n /** type van de tekst input (default = 'text') */\n type?: 'text' | 'tel' | 'url';\n /** start value voor deze input (optioneel) */\n value?: string;\n /** speciaal voor password-managers. Wat is de functie van deze input */\n autocomplete?: AutoCompleteType;\n /** toegestane karakters in de input\n * 0-9: alleen numeriek\n * a-z: alleen lowercase letters. Uppercase maken we lowercase\n * A-Z: alleen uppercase letters. lowercase maken we uppercase\n * a-Z: alleen lowercase en uppercase letters\n * 0-Z: lowercase, uppercase & numeriek\n * RegExp: geef een regex op met alle toegestande karakters om NIET te replacen\n */\n characters?: CharType;\n\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param isValid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, isValid?: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n /** type van de input */\n type: 'text' | 'url' | 'tel';\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string; inputType: 'tel' | 'text' | 'url' };\n\n/**\n * De reducer van de TextInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg: '',\n type: action.inputType,\n valid: true,\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een input van een tekst-type met optionele validation.\n * @param props\n * @returns En TextInput met validatie en karakter-checking\n * @example <TextInput value=\"oompa loompa dooba di dee\" {...props} />\n * @description alle props voor TextArea component\n * | prop | type | default | description |\n * |-------------------|---------------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | type | `text`, `tel`, `url` | `text` | type voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | characters | `string`, `RegExp`, `0-Z`,| | de toegestane karakters in de input |\n * | | `0-9`, `a-z`, `A-Z`, `a-Z`| | |\n * | autocomplete | `AutoCompleteType` | | de autocomplete type voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction TextInput(props: TextInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: props.value ?? '',\n invalidMsg: '',\n valid: false,\n type: props.type ?? 'text',\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // stel de className samen\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n /**\n * Wat te doen als de waarde is veranderd\n */\n const handleChange = React.useCallback((val: string): void => {\n if (props.disabled) return;\n\n const validationError = validate(val, state.description);\n\n if (props.characters) {\n let processedVal = val;\n if (props.characters === '0-9') processedVal = val.replaceAll(/[^0-9]/g, '');\n else if (props.characters === 'a-z') processedVal = val.toLowerCase().replaceAll(/[^a-z]/g, '');\n else if (props.characters === 'A-Z') processedVal = val.toUpperCase().replaceAll(/[^A-Z]/g, '');\n else if (props.characters === 'a-Z') processedVal = val.replaceAll(/[^a-zA-Z]/g, '');\n else if (props.characters === '0-Z') processedVal = val.replaceAll(/[^0-9a-zA-Z]/g, '');\n else if (typeof props.characters === 'string') {\n const allowedChars = (props.characters ?? '') as string;\n processedVal = val.split('').reduce((v, char) => (allowedChars.includes(char) ? v + char : v), '');\n } else if (props.characters instanceof RegExp)\n processedVal = val.replaceAll(new RegExp(props.characters, 'g'), '');\n val = processedVal;\n }\n\n props.onValueChanged && props.onValueChanged(val, validationError === '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg: validationError });\n }, []);\n\n /**\n * Valideer de waarde in de input\n */\n const validate = React.useCallback(\n (value: string, desc: string) => {\n let rgx = state.validation?.pattern ? new RegExp(state.validation?.pattern) : null;\n if (state.type == 'url' && !rgx)\n rgx = /(https?:\\/\\/)(www.)?[-a-zA-Z0-9@:%_+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_+.~#?&//=]*)?/; // /https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{2,25}\\b([-a-zA-Z0-9()!@:%_+.~#?&//=]*)/\n\n if (!state.validation && state.type != 'url') return '';\n else if (!state.validation && state.type == 'url') return rgx?.test(value) ? '' : `${desc} is geen geldige url`;\n else if (state.validation?.min && value.length < state.validation.min)\n return `${desc} moet uit minstens ${state.validation.min} karakters bestaan`;\n else if (state.validation?.max && value.length > state.validation.max)\n return `${desc} moet uit maximaal ${state.validation.max} karakters bestaan`;\n else if (state.validation?.required && !value) return `${desc} is verplicht`;\n else if (rgx && !rgx?.test(value)) return `${desc} voldoet niet aan het verwachte patroon`;\n else if (state.validation?.onValidate) return state.validation.onValidate(value);\n return '';\n },\n [props.validation]\n );\n\n React.useEffect(() => {\n dispatch({\n type: 'SET',\n value: props.value ?? '',\n validation: props.validation,\n inputType: props.type ?? 'text',\n });\n }, [props.value, props.validation]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n autoComplete={props.autocomplete}\n required={props.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n type={state.type}\n inputMode={props.keyboardType ?? 'text'}\n placeholder={props.placeholder}\n onKeyDown={props.onKeyDown}\n disabled={props.disabled}\n />\n\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faKeyboard} />\n </div>\n </InputContainer>\n );\n}\n\nexport { TextInput };\nexport type { TextInputProps };\n","import { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { faKeyboard } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport { AutoCompleteType } from './../loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n InputTypeProp,\n} from './shared';\n\ntype InputValueType = string | number | readonly string[] | Date | undefined;\n\ntype InputProps<T extends InputValueType> = BaseInputProps<T> & {\n /** default icon voor aan begin van de input\n */\n icon?: string | IconProp;\n /** type van de tekst input (default = 'text') */\n type: InputTypeProp;\n /** start value voor deze input (optioneel) */\n value?: T;\n /** speciaal voor autocomplete-managers, zoals password-managers. Wat is de functie van deze input */\n autocomplete?: AutoCompleteType;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param isValid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: T, isValid?: boolean): any | void;\n};\n\ntype State<T extends InputValueType> = BaseState<T> & {\n /** de waarde van de input */\n value: T;\n /** type van de input */\n type: InputTypeProp;\n};\n\ntype ChangeStateType<T extends InputValueType> = BaseChangeStateType & { value: T };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType<T extends InputValueType> = BaseSetStateType<T> & { value: T };\n\n/**\n * De reducer van de BasicInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer<T extends InputValueType>(\n state: State<T>,\n action: ChangeStateType<T> | SetStateType<T> | TouchStateType\n) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Input met alle gewone <input> properties zelf in te vullen.\n * LET OP: Voor validatie kan ALLEEN de onValidate() function gebruikt\n * @param props\n * @returns input element\n * @example <Input<T> type=\"text\" placeholder=\"placeholder\" name=\"name\" id=\"id\" value={value} {...props}/>\n * @description alle props voor Input<T> component\n * | prop | type | default | description |\n * |-------------------|---------------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | type | `InputTypeProp` | | type voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | icon | `string`, `IconProp` | | Optioneel icon voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | autocomplete | `AutoCompleteType` | | autocomplete voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `T` | | de waarde, generic<T> |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: T, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction Input<T extends InputValueType>(props: InputProps<T>): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State<T>, ChangeStateType<T> | TouchStateType | SetStateType<T>>>(\n reducer,\n {\n description: props.label ?? props.name,\n value: (props.value ?? '') as T,\n invalidMsg: '',\n valid: false,\n type: props.type === 'datetime' ? 'datetime-local' : props.type,\n touched: false,\n validation: props.validation,\n }\n );\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: (props.value ?? '') as T, validation: props.validation });\n }, [props.value, props.validation]);\n\n const handleChange = React.useCallback((val: T): void => {\n if (!props.disabled) {\n const validationError = validate(val, state.validation);\n props.onValueChanged && props.onValueChanged(val, validationError == '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg: validationError });\n }\n }, []);\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // classname samen stellen\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n let pVal: string | number | readonly string[];\n if (typeof state.value === 'string') pVal = state.value;\n else if (typeof state.value === 'number') pVal = state.value;\n else if (state.value instanceof Array) pVal = state.value;\n else if (state.value instanceof Date && state.type === 'date') pVal = state.value?.toISOString().substring(0, 10);\n else if (state.value instanceof Date && state.type === 'datetime') pVal = state.value?.toISOString().substring(0, 16);\n else if (state.value instanceof Date && state.type === 'time') pVal = state.value?.toISOString().substring(11, 16);\n else pVal = '';\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={pVal}\n autoComplete={props.autocomplete}\n required={props.validation?.required}\n className={className}\n onBlur={() => dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n type={state.type}\n inputMode={props.keyboardType ?? 'text'}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n\n <InputIcons\n icons={props.icons}\n valid={state.valid}\n touched={state.touched}\n defaultIcon={props.icon ?? faKeyboard}\n />\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate<T extends InputValueType>(value: T, validation?: FormValidationType<T>): string {\n if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { Input };\nexport type { InputProps, InputValueType };\n","import { faFileUpload } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\n\ntype FileInputProps = Omit<BaseInputProps, 'icons'> & {\n /** file types die een file-input zou moeten accepteren. Komma-gescheiden lijst van unieke file-type-specificaties (zie MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file) */\n accept?: string;\n /** welke camera moet er gebruikt maken voor afbeelding/video data, als dat via de accept-prop is toegestaan */\n capture?: 'user' | 'environment';\n /** toon de input als een block */\n boxed?: boolean;\n /** mag een gebruik meerdere files selecteren */\n multiple?: boolean;\n /** tekst voor op selecteer-file-button. default wordt de 'name'-prop gebruikt */\n kiesLabel?: string;\n /** tekst voor 'er-is-nog-geen-bestand'. default = '' */\n nogGeenBestandLabel?: string;\n /** value van de input (LET OP: MAG NIET BIJ INITIALISATIE EEN ANDERE WAARDE DAN '' HEBBEN) */\n value?: string;\n /**\n * Wat te doen als de waarde is veranderd\n * @param files: de nieuwe waarde\n * @param isValid: is de nieuwe waarde geldig?\n */\n onValueChanged?(files: FileList, isValid?: boolean): any | void;\n /** formatteer de weergegeven filenaamm volgens een eigen functie */\n filenameFormatter?(val: string, files: FileList): string;\n};\n\ntype State = BaseState & {\n /** de waarde van de input (in dit geval een path) */\n value: string;\n /** file naam, dus zonder de rest van het path */\n filename: string;\n files: FileList | undefined;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string; filename: string; files?: FileList };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string; filename: string; files?: FileList };\n\n/**\n * De reducer van de FileInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.files, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n filename: action.filename,\n files: action.files,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg == '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n filename: action.filename,\n files: action.files,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg == '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een file input\n * @param props\n * @returns an input for files\n * @example <FileInput name=\"file\" {...props}/>\n * @description alle props voor File component\n * | prop | type | default | description |\n * |-------------------|----------------------|-----------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | kiesLabel | `string` | | de tekst voor de selecteer-file-button |\n * | multiple | `boolean` | `false` | of er meerdere files geselecteerd moeten |\n * | boxed | `boolean` | `false` | of de input als een block moet worden |\n * | accept | `string` | | de file-types die geselecteerd mogen worden|\n * | capture | `user`, `environment`|`undefined`| de camera die gebruikt moet worden |\n * | id | `string` | `name` | de id voor de input |\n * | icon | `string`, `IconProp` | | de icon voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | FORBIDDEN | de waarde, mag NIET default geset worden |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: FileList, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n * | filenameFormatter | `function` | | (value: string, files: FileList) => string |\n */\nfunction FileInput(props: FileInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: '',\n filename: '',\n invalidMsg: '',\n files: undefined,\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let className = 'file has-name';\n if (props.boxed) className += ' is-boxed';\n else className += ' is-fullwidth';\n\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n const handleChange = (path: string, files: FileList): void => {\n if (!props.disabled) {\n const validationError = validate(files, state.description, state.validation);\n const filename = props.filenameFormatter ? props.filenameFormatter(path, files) : defaultFilenameFormatter(path);\n\n props.onValueChanged && props.onValueChanged(files, validationError === '');\n dispatch({ type: 'CHANGE', value: path, filename, files, invalidMsg: validationError });\n }\n };\n\n const defaultFilenameFormatter = React.useCallback((path: string): string => path.replace(/^.*[\\\\/]/, ''), []);\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '', filename: '', files: undefined, validation: props.validation });\n }, [props.value, props.validation]);\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className={className}>\n <label className=\"file-label\">\n <input\n id={props.id ?? props.name}\n accept={props.accept}\n capture={props.capture}\n multiple={props.multiple}\n name={props.name}\n value={state.value}\n required={props.validation?.required}\n className=\"file-input\"\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value, e.target.files)}\n type=\"file\"\n inputMode={props.keyboardType ?? 'text'}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n <span className=\"file-cta\">\n <span className=\"file-icon\" role=\"icon\">\n <FontAwesomeIcon icon={faFileUpload} />\n </span>\n <span className=\"file-label\">{props.kiesLabel ?? props.name}</span>\n </span>\n <span className=\"file-name\">{state.filename ?? props.nogGeenBestandLabel ?? ''}</span>\n </label>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: FileList | undefined, desc: string, validation?: FormValidationType): string {\n if (validation?.required && (!value || value.length < 1)) return `${desc} is verplicht`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { FileInput };\nexport type { FileInputProps };\n","import React from 'react';\nimport {\n CheckradioStylingType,\n ColorProp,\n DirectionProp,\n SizeProp,\n TextAlignmentProp,\n} from '../../loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\n\ntype RadioInputProps = Omit<BaseInputProps, 'icons'> & {\n value?: string;\n children?: React.ReactNode;\n onValueChanged?(newVal: string, isValid?: boolean): any | void;\n};\ntype RadioItemProps = {\n /** id van radio item */\n id?: string;\n /** radio item value */\n value: string;\n /** is disabled */\n disabled?: boolean;\n /** tootlip */\n tooltip?: string;\n /** content */\n children?: React.ReactNode;\n /** grootte van de radiobutton (defaulkt = 'm', normal) */\n size?: SizeProp;\n /** kleur van de radiobutton (default = 'l', link) */\n color?: ColorProp;\n /** speciale styling van de radiobutton */\n styling?: CheckradioStylingType;\n /** verticaal of horizontall weergeven? */\n direction?: DirectionProp;\n /** Waar moet de tekst van de input uitgelijnd worden (default = 'l', links) */\n textAlign?: TextAlignmentProp;\n};\ntype State = BaseState & {\n /** de waarde van de checkbox */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de RadioInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n }\n}\n\n/**\n * Een groep radio-buttons voor een <input type=\"radio\" />\n * @param props\n * @returns een radio-group\n * @example\n * <RadioGroup name=\"radioGroup\" value=\"1\" onValueChanged={change}>\n * <RadioGroup.Item value=\"1\">Radio 1</RadioGroup.Item>\n * <RadioGroup.Item value=\"2\">Radio 2</RadioGroup.Item>\n * </RadioGroup>\n * @description alle props voor RadioGroup component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nconst RadioGroup = (props: RadioInputProps): JSX.Element => {\n const [state, dispatch] = React.useReducer<React.Reducer<State, ChangeStateType | SetStateType>>(reducer, {\n description: props.name,\n value: props.value ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n const handleSet = (val: string) => {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg === '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '', validation: props.validation });\n }, [props.value, props.validation]);\n\n const children = React.Children.map(props.children, (child: any) => {\n if (child.type === RadioItem)\n return (\n <InternRadioItem\n {...child.props}\n size={child.size ?? props.size}\n name={props.name}\n id={child.props.id ?? `${props.name}-${child.props.value}`}\n selectedItem={state.value}\n textAlign={child.textAlign ?? props.textAlign}\n setter={(val: string) => handleSet(val)}\n disabled={props.disabled ?? child.props.disabled}\n direction={props.direction ?? 'h'}\n />\n );\n return child;\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n const error = <InputError stateError={state.invalidMsg} outsideError={errorMsg} touched={state.touched} />;\n\n return (\n <InputContainer size=\"m\" error={error} direction={props.direction ?? 'h'}>\n <div className=\"control\" title={props.tooltip}>\n {children}\n </div>\n </InputContainer>\n );\n};\n\n/** ONLY EXPORT USE -- Exported on RadioGroup.Item */\nconst RadioItem = (props: RadioItemProps): JSX.Element => (\n <label className=\"radio\" id={props.id}>\n <input type=\"radio\" disabled={props.disabled} title={props.tooltip} />\n {props.children}\n </label>\n);\n\n/** DO NOT EXPORT -- INTERN USE ONLY */\nfunction InternRadioItem(\n props: RadioItemProps & { name: string; selectedItem: string; setter: (identifier: string) => void }\n): JSX.Element {\n const { size, color, styling, textAlign } = props;\n let className = 'is-checkradio block';\n if (size === 's') className += ' is-small';\n else if (size === 'l') className += ' is-medium';\n else if (size === 'xl') className += ' is-large';\n\n if (color === 'w') className += ' is-warning';\n else if (color === 'd') className += ' is-danger';\n else if (color === 'i') className += ' is-info';\n else if (color === 's') className += ' is-success';\n else if (color === 'p') className += ' is-primary';\n else className += ' is-link';\n\n if (styling === 'rounded') className += ' is-circle';\n else if (styling === 'noborder') className += ' has-no-border';\n else if (styling === 'colored') className += ' has-background-color';\n else if (styling === 'blocky') className += ' is-blocky';\n\n if (textAlign === 'c') className += ' has-text-centered';\n else if (textAlign === 'r') className += ' has-text-right';\n\n const containerClassName = props.direction?.startsWith('v') ? 'field my-1' : 'radio field my-1';\n\n return (\n <div className={containerClassName}>\n <input\n className={className}\n type=\"radio\"\n value={props.value}\n disabled={props.disabled}\n name={props.name}\n id={props.id ?? `${props.name}-${props.value}`}\n checked={props.selectedItem === props.value}\n onChange={() => props.setter(props.value)}\n title={props.tooltip ?? props.value}\n />\n <label\n className={props.disabled ? 'radio has-text-grey-light mx-2 pl-6' : 'radio mx-2'}\n title={props.tooltip}\n htmlFor={props.id ?? `${props.name}-${props.value}`}\n >\n {props.children ?? props.value}\n </label>\n </div>\n );\n}\n\n/**\n * Een Radio-button voor in de RadioGroup\n * @param props\n * @returns een radio-item\n * @example\n * <RadioGroup.Item name=\"item 1\" value=\"item1\">Radio item 1</RadioGroup.Item>\n * @description alle props voor RadioGroup.Item component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | id | `string ` | `name` | de id voor het radioitem |\n * | tooltip | `string ` | | tooltip voor het item |\n * | labelHidden | `boolean` | false | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | false | de input is disabled |\n * | value | `string ` | #000000 | de waarde (REQUIRED) |\n * | children | `React.ReactNode` | | de tekst van het item (REQUIRED) |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | color | `w`,`d`,`i`,`s`,`p` | `l` | de kleur van de input |\n * | styling | `rounded`,`noborder` | | de styling van de checkbox |\n * | | `colored`, `blocky` | | |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | icons | | | RADIOGROUP HEEFT GEEN ICONS |\n */\nRadioGroup.Item = RadioItem;\n\n/**\n * Voer validatie van de waarde uit\n * @param value de nieuwe waarde\n * @param desc de naam van de input\n * @param validationObject het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validationObject?: FormValidationType): string {\n if (!validationObject) return '';\n else if (validationObject.required && !value) return `${desc} is verplicht`;\n else if (validationObject.onValidate) return validationObject.onValidate(value);\n return '';\n}\n\n/**\n * Een losstaand radio-item om zelf de groep te maken\n * @param props\n * @returns een radio-item\n * @example\n * <RadioItem name=\"item 1\" value=\"item1\" selecteditem={radioItem}>Radio item 1</RadioItem>\n * @description alle props voor RadioItem component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | selectedItem | `string ` | | de naam voor de input (REQUIRED) |\n * | id | `string ` | `name` | de id voor het radioitem |\n * | tooltip | `string ` | | tooltip voor het item |\n * | labelHidden | `boolean` | false | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | false | de input is disabled |\n * | value | `string ` | | de waarde (REQUIRED) |\n * | children | `React.ReactNode` | | de tekst van het item (REQUIRED) |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | color | `w`,`d`,`i`,`s`,`p` | `l` | de kleur van de input |\n * | styling | `rounded`,`noborder` | | de styling van de checkbox |\n * | | `colored`, `blocky` | | |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | setter() | `function` | | (val: string) => void |\n */\n\nconst Radio = InternRadioItem;\nexport { RadioGroup, Radio };\nexport type { RadioInputProps };\n","/* eslint-disable no-console */\nimport { AlignmentProp, DirectionProp, SizeProp } from '../loon-react-bulma-types';\nimport React from 'react';\nimport { CheckBox } from './Checkbox/Checkbox';\nimport { DateInput } from './Datetimes/DateInput';\nimport { DateTimeInput } from './Datetimes/DateTimeInput';\nimport { TimeInput } from './Datetimes/TimeInput';\nimport { MultiRangeInput } from './Numeric/MultiRangeInput';\nimport { NumberInput } from './Numeric/NumberInput';\nimport { RangeInput } from './Numeric/RangeInput';\nimport { ColorInput } from './Others/ColorInput';\nimport { HiddenInput } from './Others/HiddenInput';\nimport { MultiSelect } from './Selects/MultiSelect';\nimport { Select } from './Selects/Select';\nimport { EmailInput } from './Text/EmailInput';\nimport { PasswordInput } from './Text/PasswordInput';\nimport { TextArea } from './Text/TextArea';\nimport { TextInput } from './Text/TextInput';\nimport { Input } from './Input';\nimport { InputContainer } from './shared/Base.Input.Container';\nimport { FileInput } from './File/FileInput';\nimport { RadioGroup } from './Radio/Radio';\nimport { ButtonGroup } from '../components';\n\ntype FormProps = {\n /** de inputs voor dit form */\n children: React.ReactNode;\n /** form attribuut \\<form action=\"...\" > */\n action?: string;\n /** form attribuut \\<form name=\"...\" > */\n name?: string;\n /** form attribuut \\<form method=\"...\" > */\n method?: 'post' | 'get';\n /** form attribuut <form target=\"...\" > */\n target?: '_self' | '_blank' | '_parent' | '_top';\n /** form onsubmit handler */\n onSubmit?: (event: React.FormEvent<HTMLFormElement>) => void;\n /** size voor alle form-elementen (default = 'm') */\n size?: SizeProp;\n /** form attribuut\\ <form autocomplete=\"...\" >. */\n autocomplete?: 'on' | 'off';\n /** direction voor form-elementen (horizontaal (1 lijn, default) of vertical (label boven, input onder)) */\n direction?: DirectionProp;\n /** form attribuut \\<form novalidate=\"...\" > */\n novalidate?: boolean;\n /** extra classnames voor de form */\n className?: string;\n};\n\n/**\n * Maak een form met verschillende inputs. De inputs zelf zijn hetzelfde als de losse inputs.\n * @param props\n * @returns een form\n * @example\n * <Form action=\"POST\" name=\"formpie\">\n * <TextInput name=\"name\" label=\"Naam\" />\n * <TextInput name=\"email\" label=\"Email\" />\n * <PasswordInput name=\"password\" label=\"Wachtwoord\" />\n * </Form>\n */\nconst Form = (props: FormProps) => {\n const allowedContent = React.useMemo(\n () => [\n TextInput,\n TextArea,\n PasswordInput,\n EmailInput,\n Select,\n MultiSelect,\n ColorInput,\n HiddenInput,\n NumberInput,\n RangeInput,\n MultiRangeInput,\n DateInput,\n DateTimeInput,\n TimeInput,\n CheckBox,\n RadioGroup,\n Input,\n FileInput,\n ],\n []\n );\n const { action, method, target, onSubmit, direction, name, novalidate, className, size } = props;\n const children = React.Children.map(props.children, (child: any) => {\n if (!child) return null;\n else if (child.type === FormLine)\n return <InternFormLine children={child.props.children} direction={direction} size={size} />;\n else if (child.type === Buttons)\n return (\n <InputContainer direction={direction ?? 'h'}>\n <ButtonGroup size={size} {...child.props} />\n </InputContainer>\n );\n else if (child.type === FreeSpace) return <InternFreeSpace {...child.props} direction={direction} size={size} />;\n else if (allowedContent.includes(child.type))\n return <child.type {...child.props} direction={direction} size={size} />;\n else if (typeof child === 'string')\n console.warn(\n `<Form> should only contain children of type: <Form.XXX /> or <...Input> elements. You passed a string (\"${child}\"), which will be ignored`\n );\n else if (typeof child.type === 'string')\n console.warn(\n `<Form> should only contain children of type: <Form.XXX /> or <...Input> elements. You passed a HTMLElement (<${child.type}>), which will be ignored`\n );\n else if (typeof child.type.name === 'string')\n console.warn(\n `<Form> should only contain children of type: <Form.XXX /> or <...Input> elements. You passed a Component (<${child.type.name}>), which will be ignored`\n );\n return null;\n });\n\n return (\n <form\n className={className}\n action={action}\n target={target}\n method={method}\n onSubmit={onSubmit}\n name={name}\n noValidate={novalidate}\n >\n {children}\n </form>\n );\n};\n\n/** export-fn voor een form-line */\nconst FormLine = ({ children }: { children: React.ReactNode }) => <div>{children}</div>;\nconst InternFormLine = (props: { children: React.ReactNode; direction?: DirectionProp; size?: SizeProp }) => {\n return (\n <InputContainer direction={props.direction ?? 'h'} size={props.size ?? 'm'}>\n <div className=\"columns \">\n {React.Children.map(props.children, (child: any, index) => (\n <div className=\"column\" key={index}>\n <child.type {...child.props} size={props.size} />\n </div>\n ))}\n </div>\n </InputContainer>\n );\n};\n\nconst FreeSpace = ({ children }: { children: React.ReactNode }): JSX.Element => <div>{children}</div>;\nconst InternFreeSpace = ({\n children,\n direction,\n size,\n}: {\n children: React.ReactNode;\n direction: DirectionProp;\n size: SizeProp;\n}): JSX.Element => (\n <InputContainer direction={direction} size={size}>\n {children}\n </InputContainer>\n);\n\nconst Buttons = ({\n children,\n size,\n alignment,\n}: {\n children: React.ReactNode;\n size?: SizeProp;\n alignment?: AlignmentProp;\n}) => (\n <div className=\"buttons\">\n {children}\n {size}\n {alignment}\n </div>\n);\n\n/** een zelf-configureerbare base input\n * @see Input\n */\nForm.Input = Input;\n/** input voor type url, text of tel\n * @see TextInput\n */\nForm.Text = TextInput;\n/** password input\n * @see PasswordInput\n */\nForm.Password = PasswordInput;\n/** email input\n * @see EmailInput\n */\nForm.Email = EmailInput;\n/** text area input\n * @see TextArea\n */\nForm.TextArea = TextArea;\n/** select input\n * @see Select\n */\nForm.Select = Select;\n/** multi-select input\n * @see MultiSelect\n */\nForm.MultiSelect = MultiSelect;\n/** color input\n * @see ColorInput\n */\nForm.Color = ColorInput;\n/** hidden input\n * @see HiddenInput\n */\nForm.Hidden = HiddenInput;\n/** number input\n * @see NumberInput\n */\nForm.Number = NumberInput;\n/** range input (als a number input)\n * @see RangeInput\n */\nForm.Range = RangeInput;\n/** multi-range input (2 numbers)\n * @see MultiRangeInput\n */\nForm.MultiRange = MultiRangeInput;\n/** input for dates\n * @see DateInput\n */\nForm.Date = DateInput;\n/** input for date & time combinations\n * @see DateTimeInput\n */\nForm.DateTime = DateTimeInput;\n/** time input\n * @see TimeInput\n */\nForm.Time = TimeInput;\n/** checkbox input\n * @see CheckBox\n */\nForm.CheckBox = CheckBox;\n/** radio input\n * @see RadioGroup\n */\nForm.RadioGroup = RadioGroup;\n/** een file-input\n * @see FileInput\n */\nForm.File = FileInput;\n/**\n * Gebruik om de richting (direction-attribuut) van meerdere inputs te wijzigen.\n * @return een aantal inputs op een lijn\n * @example\n * <Form.Line>\n * <Form.Date name={`date-${i}-${ii}`} id={`date-${direction}-${size}-1`} direction=\"vertical\" />\n * <Form.Time name={`time-${i}-${ii}`} id={`date-${direction}-${size}-2`} direction=\"vertical\" />\n * </Form.Line>\n */\nForm.Line = FormLine;\n/** Open ruimte voor eigen content, die zich aan de direction van het form houdt.\n * @return eigen componenten of content.\n * @example\n * <Form.Space>\n * <Message size={size} color=\"w\">\n * Met de component <strong>{'<Form.Line>'}</strong> kan je twee inputs achter elkaar kwijt. Dan\n * moet je wel zelf nog de direction instellen (default = 'horizontal')\n * </Message>\n * </Form.Space>\n */\nForm.Space = FreeSpace;\n/** container voor de buttons van het form. Grootte van de buttons kan onafhankelijk worden ingesteld */\n/**\n * Buttons container voor het form. Mag alleen buttons bevatten. Grootte van de buttons kan onafhankelijk worden ingesteld, maar ook voor allemaal.\n * @return een buttons-container\n * @example\n * <Form.Buttons>\n * <Button.Success type=\"submit\">Verstuur</Button.Success>\n * <Button.Danger>Reset</Button.Danger>\n * <Button.Info>Meer...</Button.Info>\n * </Form.Buttons>\n */\nForm.Buttons = Buttons;\n\nexport { Form };\nexport type { FormProps };\n","import React, { Reducer } from 'react';\n\nimport { CheckBox } from './../Checkbox/Checkbox';\nimport { DateInput } from './../Datetimes/DateInput';\nimport { DateTimeInput } from './../Datetimes/DateTimeInput';\nimport { TimeInput } from './../Datetimes/TimeInput';\nimport { FormBuilderFieldProps, FormBuilderProps, ChangedValue, FormBuilderButton } from './FormBuilderProps';\nimport { MultiRangeInput } from './../Numeric/MultiRangeInput';\nimport { NumberInput } from './../Numeric/NumberInput';\nimport { RangeInput } from './../Numeric/RangeInput';\nimport { HiddenInput } from './../Others/HiddenInput';\nimport { MultiSelect } from './../Selects/MultiSelect';\nimport { Select } from './../Selects/Select';\nimport { EmailInput } from './../Text/EmailInput';\nimport { PasswordInput } from './../Text/PasswordInput';\nimport { TextArea } from './../Text/TextArea';\nimport { TextInput } from './../Text/TextInput';\nimport { DirectionProp } from '../../loon-react-bulma-types';\nimport { Button } from '../../components';\n\ntype Field = FormBuilderFieldProps & { id: string };\ntype FormState = {\n fields: Field[];\n valid: boolean;\n loading: boolean;\n method: 'post' | 'get';\n};\n\ntype ChangeFormDispatch = {\n type: 'CHANGE';\n value: string | string[] | number | [number, number] | boolean | null | undefined;\n valid: boolean;\n name: string;\n};\n\ntype SetFormDispatch = {\n type: 'SET';\n fields: Field[];\n};\n\nfunction reducer(state: FormState, action: ChangeFormDispatch | SetFormDispatch) {\n switch (action.type) {\n case 'SET':\n return {\n ...state,\n fields: [...action.fields],\n valid: false,\n loading: false,\n };\n case 'CHANGE':\n const updatedFields = [...state.fields];\n const i = updatedFields.findIndex((f) => f.name == action.name);\n updatedFields[i].value = action.value;\n updatedFields[i].valid = action.valid;\n return {\n ...state,\n fields: updatedFields,\n valid: updatedFields.findIndex((f) => !f.valid) == -1,\n };\n }\n}\n\n/**\n * stel een form samen op basis van een array van fields, met een submit-button en optionele extra buttons.\n * Kan ook in een modal getoont worden.\n * @param props\n * @returns een object voor POST requests OF een URLPARAMS string voor GET requests\n */\nexport function FormBuilder(props: FormBuilderProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<FormState, ChangeFormDispatch | SetFormDispatch>>(reducer, {\n valid: false,\n loading: false,\n method: props.method,\n fields: [...props.fields.map(fieldMapper)],\n });\n\n /** verwerkt field wijzigingen */\n const handleValueChange = (cv: ChangedValue) => {\n dispatch({ type: 'CHANGE', value: cv.new, valid: cv.valid, name: cv.name });\n };\n\n React.useEffect(() => {\n dispatch({\n type: 'SET',\n fields: [...props.fields.map(fieldMapper)],\n });\n }, [props.fields]);\n\n const handleModalDismiss = (e: any) => props.useModal && props.onDismiss && props.onDismiss(e);\n\n /**\n * Zorg voor de afhandeling van het versturen als de onSubmit methode gezet is.\n * @param e click-event voor preventDefault\n * @returns POST: key-value pair als object, GET: urlsearchparams als string (id=100&name=henkie).\n */\n const handleSubmit = (e: any) => {\n e.preventDefault();\n const obj: any = {};\n state.fields.forEach((f) => {\n obj[f.name] = f.value;\n });\n props.onSubmit(props.method == 'post' ? obj : new URLSearchParams(obj).toString());\n };\n\n if (props.useModal)\n return (\n <div className=\"modal is-active\">\n <div className=\"modal-background\"></div>\n <form\n role=\"form\"\n className=\"modal-content bulma-box modal-container\"\n onSubmit={(e) => handleSubmit(e)}\n name={props.name}\n >\n <div className=\"modal-body\">\n {/* map all fields in het form */}\n {state.fields.map((f) => (\n <FormField\n key={f.name}\n fieldProps={f}\n onValueChanged={(e: ChangedValue) => handleValueChange(e)}\n direction={props.direction ?? 'h'}\n />\n ))}\n {/* plaats de buttons op de bodem van het form */}\n </div>\n <div className=\"modal-footer\">\n <FormButtons buttons={props.buttons} valid={state.valid} loading={state.loading} />\n </div>\n </form>\n <button\n className=\"modal-close is-large\"\n aria-label=\"close\"\n onClick={(e: any) => handleModalDismiss(e)}\n ></button>\n </div>\n );\n\n return (\n <form onSubmit={(e) => handleSubmit(e)}>\n {/* map all fields in het form */}\n {state.fields.map((f) => (\n <FormField\n key={f.name}\n fieldProps={f}\n onValueChanged={(e: ChangedValue) => handleValueChange(e)}\n direction={props.direction ?? 'h'}\n />\n ))}\n {/* plaats de buttons op de bodem van het form */}\n <FormButtons buttons={props.buttons} valid={state.valid} loading={state.loading} />\n </form>\n );\n}\n\n/**\n * Maak een field voor elke aparte input\n * @param props\n * @returns\n */\nfunction FormField(props: { fieldProps: Field; direction: DirectionProp; onValueChanged(e: ChangedValue): void }) {\n const input = props.fieldProps;\n const handleValueChange = (\n newVal: number | string | boolean | [number, number] | string[],\n isValid: boolean,\n name: string\n ) => {\n props.onValueChanged({\n new: newVal,\n old: input.value,\n valid: isValid,\n name,\n });\n };\n\n switch (input.type) {\n case 'text':\n case 'url':\n case 'tel':\n return (\n <TextInput\n {...input}\n value={input.value as string}\n type={input.type}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'textarea':\n return (\n <TextArea\n {...input}\n value={input.value as string}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'password':\n return (\n <PasswordInput\n {...input}\n value={input.value as string}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'email':\n return (\n <EmailInput\n {...input}\n value={input.value as string}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'number':\n return (\n <NumberInput\n {...input}\n value={input.value ? +input.value : undefined}\n onValueChanged={(v: number, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'checkbox':\n return (\n <CheckBox\n {...input}\n value={input.value as boolean}\n onValueChanged={(v: boolean, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'date':\n return (\n <DateInput\n {...input}\n value={input.value as string}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'time':\n return (\n <TimeInput\n {...input}\n value={input.value as string}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'datetime':\n return (\n <DateTimeInput\n {...input}\n value={input.value as string}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'select':\n return (\n <Select\n {...input}\n options={input.selectOptions || []}\n value={input.value as string}\n onValueChanged={(v: string | number, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'multiselect':\n return (\n <MultiSelect\n {...input}\n options={input.selectOptions || []}\n value={input.value as string[]}\n onValueChanged={(v: string[], isValid: boolean) => handleValueChange(v, isValid, input.name)}\n />\n );\n case 'range':\n return (\n <RangeInput\n {...input}\n value={input.value as number}\n onValueChanged={(v: number, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'multirange':\n return (\n <MultiRangeInput\n {...input}\n value={input.value as [number, number]}\n onValueChanged={(v: [number, number], isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'hidden':\n return <HiddenInput {...input} value={input.value as string} required={input.validation?.required} />;\n }\n // return <input />;\n}\n\nfunction FormButtons(props: {\n valid: boolean;\n loading: boolean;\n buttons: { submit: string; other?: FormBuilderButton[] };\n}) {\n const valid = props.valid;\n const buttons = props.buttons;\n return (\n <div className=\"lbr-form-footer buttons mt-3\">\n <Button.Success type=\"submit\" disabled={!valid}>\n {buttons.submit}\n </Button.Success>\n {buttons.other &&\n buttons.other.map((btn) => {\n return (\n <Button\n key={btn.txt}\n color={btn.color}\n onClick={btn.onClick}\n type={btn.type}\n disabled={!valid && btn.mustValidate}\n >\n {btn.txt}\n </Button>\n );\n })}\n </div>\n );\n}\n\n/**\n *function om de fields van een form te mappen, zodat ze allemaal dezelfde structuur hebben\n * zorgt ervoor dat een field ALTIJD een id en een valid heeft\n * @param f een field\n * @returns een geupdate field met in ieder geval een 'valid' en een 'id' property\n */\nconst fieldMapper = (f: FormBuilderFieldProps): Field => {\n const field: Field = { ...f, ...{ id: f.id || '', valid: false } };\n // voeg een ID toe als dat er nog niet is.\n if (field.id == '') field.id = f.name;\n\n // als het field type 'hidden' is, dan is deze altijd valid\n if (field.type == 'hidden') field.valid = true;\n // als het field al een waarde heeft, is het field altijd true (om te beginnen)\n else if (field.value) field.valid = true;\n return field;\n};\n","/* eslint-disable dot-notation */\n/*\n * gemaakt mbh https://blog.logrocket.com/how-to-create-a-custom-toast-component-with-react/\n * en https://dev.to/aibolik/creating-toast-api-with-react-hooks-1bm8\n */\nimport React from 'react';\nimport {\n faExclamation as warningIcon,\n faInfo as infoIcon,\n faExclamationTriangle as dangerIcon,\n faCheck as successIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { NotifierItemProps, NotifierProps } from './NotifierProps';\nimport { ColorProp } from '../../loon-react-bulma-types';\n\ntype ReducerActionType = 'add' | 'remove' | 'clear';\n\n/** De functie om de state van de notifications aan te passen\n * @param notifierItems de huidige state, dus de huidige notifier items\n * @param action de actie die moet worden uitgevoerd met het type en het item waarop.\n */\nfunction notificationReducer(\n notifierItems: NotifierItemProps[],\n action: { type: ReducerActionType; item: NotifierItemProps | undefined }\n): NotifierItemProps[] {\n switch (action.type) {\n case 'add': // voeg een notificatie toe\n return [...notifierItems, action.item!];\n case 'remove': // haal een notificatie weg\n return notifierItems.filter((item) => action.item!.id != item.id);\n case 'clear': // haal alle notificaties weg\n return [];\n }\n}\n\n/**\n * een component om notificaties in weer te geven, die na verloop van tijd weer verdwijnen. Dat is per notificatie instelbaar.\n * Notificaties hebben ook een click-handler om een onClick() actie uit te voeren. De notificatie wordt dan ook gesloten.\n * @param props\n * @returns een Notificatie-component die (tijdelijke) berichtjes weergeeft aan de rechterkant van het scherm.\n */\nexport function Notifier(props: NotifierProps): JSX.Element {\n const [notifications, updateNotifications] = React.useReducer(notificationReducer, []);\n const [lastNotificationID, setLastNotificationID] = React.useState<number | undefined>(undefined);\n const [lastDeleted, setLastDeleted] = React.useState<number | undefined>(undefined);\n const [clearedAt, setLastCleared] = React.useState<Date>(props.clearTime);\n\n React.useEffect(() => {\n if (props.next && props.next.id != lastNotificationID) {\n setLastNotificationID(props.next.id);\n updateNotifications({ type: 'add', item: props.next });\n }\n }, [props.next]);\n\n React.useEffect(() => {\n if (props.clearTime != clearedAt) {\n updateNotifications({ type: 'clear', item: undefined });\n setLastCleared(props.clearTime);\n }\n }, [props.clearTime]);\n\n React.useEffect(() => {\n if (props.del != lastDeleted) {\n const n = notifications.find((item) => item.id === props.del);\n updateNotifications({ type: 'remove', item: n! });\n setLastDeleted(props.del);\n }\n }, [props.del]);\n\n const notifierClasses =\n 'notifications-container' + (props.location && props.location === 'bottom' ? ' at-bottom' : ' at-top');\n return (\n <div className={notifierClasses} data-testid=\"notifier-container\">\n {notifications.map((n: NotifierItemProps) => {\n const dismissTime = n.dismissAfter ?? n.dismissAfter ?? props.defaultDismissTime ?? 5000;\n return (\n <NotifierItem\n key={n.id}\n dismissAfter={dismissTime}\n type={n.type}\n onClick={(e: any) => n.onClick && n.onClick(e)}\n onDismiss={() => updateNotifications({ type: 'remove', item: n })}\n >\n {n.content}\n </NotifierItem>\n );\n })}\n </div>\n );\n}\n\n/**\n * Maak de uiteindelijke notificatie\n * @param props { dismissAfter, timerID, onClick, onDismiss}\n * @returns een notificatie\n */\nfunction NotifierItem(props: {\n children: React.ReactNode;\n onDismiss: () => void;\n onClick?: (e: any) => void;\n dismissAfter: number;\n type?: ColorProp;\n}): JSX.Element {\n React.useEffect(() => {\n const timer: NodeJS.Timeout | null =\n props.dismissAfter > 0\n ? setTimeout(() => {\n props.onDismiss();\n }, props.dismissAfter)\n : null;\n return () => {\n if (timer) clearTimeout(timer);\n };\n }, []);\n\n const handleClick = (e: any) => {\n if (props.onClick) props.onClick(e);\n props.onDismiss();\n };\n\n let classes = 'notification';\n let icon;\n switch (true) {\n case props.type == 's':\n classes += ' is-success';\n icon = successIcon;\n break;\n case props.type == 'd':\n classes += ' is-danger';\n icon = dangerIcon;\n break;\n case props.type == 'w':\n classes += ' is-warning';\n icon = warningIcon;\n break;\n case props.type == 'p':\n classes += ' is-primary';\n icon = warningIcon;\n break;\n case props.type == 'l':\n classes += ' is-link';\n icon = warningIcon;\n break;\n default:\n classes += ' is-info';\n icon = infoIcon;\n break;\n }\n return (\n <div\n onClick={(e: any) => handleClick(e)}\n className={classes}\n style={{\n zIndex: 9999,\n position: 'relative',\n cursor: props.onClick && 'pointer',\n marginBottom: '0.5em',\n boxShadow: '2px 2px 20px -4px #333 ',\n }}\n >\n <div>\n <span className=\"icon is-medium mr-2\" style={{ float: 'left' }}>\n <FontAwesomeIcon icon={icon} />\n </span>\n {props.children}\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { Notifier } from './Notifier';\nimport { NotifierItemProps, NotifierProviderProps } from './NotifierProps';\n\nexport type NotifierContextType = {\n /** toon een notificatie\n * @param notification de notificatie-data\n * @returns ID van de notificatie (om te kunnen verwijderen)\n */\n notify: (notification: NotifierItemProps) => number;\n /** verwijder een notificatie\n * @param id ID van de notificatie\n */\n remove: (id: number) => void;\n /**\n * Verwijder ALLE notificaties\n */\n clear: () => void;\n};\n\nconst NotifierContext = React.createContext<NotifierContextType | null>(null);\nNotifierContext.displayName = 'NotifierContext';\n\n/** provider voor de notifier.\n * De inhoud van de app moet binnen deze <NotifierProvider>...</NotifierProvider vallen.\n * De notifier is dan via de hook @see useNotifier te gebruiken in child-components van de App zelf, niet in APP!\n * @param props: bevat alleen de children van de notifier, dus ook van de app.\n * @example\n * <NotifierProvider>\n * <App />\n * </NotifierProvider>\n * */\nexport const NotifierProvider = (props: NotifierProviderProps) => {\n const [notification, setNotification] = React.useState<NotifierItemProps | undefined>(undefined);\n const [lastDeleted, setLastDeleted] = React.useState<number | undefined>(undefined);\n const [clearTime, setCleared] = React.useState<Date>(new Date());\n\n /** post een notificatie */\n const notify = React.useCallback(\n (notification: NotifierItemProps): number => {\n if (notification.id == undefined) notification.id = Math.floor(Math.random() * 10_000_000);\n setNotification(notification);\n return notification.id;\n },\n [setNotification]\n );\n\n /** verwijder een notificatie */\n const remove = React.useCallback(\n (id: number) => {\n setLastDeleted(id);\n },\n [setLastDeleted]\n );\n\n /** Verwijder ALLE notificaties */\n const clear = React.useCallback(() => {\n setNotification(undefined);\n setLastDeleted(undefined);\n setCleared(new Date());\n }, [setLastDeleted]);\n\n const values: NotifierContextType = {\n notify,\n remove,\n clear,\n };\n return (\n <React.Fragment>\n <Notifier\n defaultDismissTime={props.defaultAutoDismiss}\n next={notification}\n del={lastDeleted}\n clearTime={clearTime}\n location={props.location ?? 'top'}\n />\n <NotifierContext.Provider value={values}>{props.children}</NotifierContext.Provider>\n </React.Fragment>\n );\n};\n\n/** React Hook om notificaties in de notifier te beïnvloeden\n * @function notify(n: NotifierItemProps): toon een notificatie, returns ID\n * @function remove(id: number): verwijder een notificatie obv ID\n * @function clear(): verwijder alle notificaties\n * @example\n * const { notify, remove, clear } = useNotifier();\n */\nexport function useNotifier(): NotifierContextType {\n const notifierHelpers = React.useContext<NotifierContextType | null>(NotifierContext);\n if (!notifierHelpers) throw new Error('useNotifier must be used inside a NotifierProvider');\n return notifierHelpers;\n}\n","import React, { Dispatch } from 'react';\nimport { Box, ButtonGroup, Button } from '../../components';\n\ntype ConfirmContextType = {\n setState: Dispatch<ActionType>;\n state: State;\n};\ntype ActionType = {\n type: 'SHOW' | 'HIDE' | 'UPDATE';\n payload?: {\n content?: string | React.ReactNode;\n };\n ok?: string;\n cancel?: string;\n others?: React.ReactNode;\n};\ntype State = {\n show: boolean;\n content: string | React.ReactNode;\n ok: string;\n cancel: string;\n others?: React.ReactNode;\n};\n\nlet resolveCallback: any;\nconst ConfirmContext = React.createContext<ConfirmContextType | null>(null);\nConfirmContext.displayName = 'ConfirmContext';\n\n/**\n * Confirm provider om `useConfirm`-hook te kunnen gebruiken.\n * @param children de children\n * @returns\n * @example // index.tsx of App.tsx\n * root.render(\n * <ConfirmProvider>\n * <>\n * // ...\n * </>\n * </ConfirmProvider>)\n */\nfunction ConfirmProvider({ children }: { children: React.ReactNode }): JSX.Element {\n const [state, setState] = React.useReducer(confirmReducer, initialState);\n\n return (\n <ConfirmContext.Provider value={{ state, setState }}>\n <ConfirmDialog />\n {children}\n </ConfirmContext.Provider>\n );\n}\n\nconst initialState: State = {\n show: false,\n content: '',\n ok: 'Ok',\n cancel: 'Annuleren',\n others: undefined,\n};\n\n/** reducer-function voor de confirm state */\nfunction confirmReducer(state: State = initialState, action: ActionType): State {\n switch (action.type) {\n case 'SHOW':\n return {\n ...state,\n show: true,\n content: action.payload?.content,\n ok: action.ok ?? 'Ok',\n cancel: action.cancel ?? 'Annuleren',\n others: action.others,\n };\n case 'HIDE':\n return initialState;\n // case 'UPDATE':\n // return { ...state, ok: action.ok, cancel: action.cancel };\n\n default:\n return initialState;\n }\n}\n\n/**\n * Hook voor de confirmation\n * @param ok tekst voor op de OK-button (default = 'Ok')\n * @param cancel tekst voor opd e cancel-button (default = 'Annuleren')\n * @param others eventuele andere buttons (default = undefined)\n * @returns onConfirm-fn, onCancel-fn, confirm-fn, confirmState\n * @example\n * const { confirm } = useConfirm(\"Ja\", \"Nee\", <Button>Extra</Button>);\n * const confirmSomethingFromString = (msg: string) => {\n * const isConfirmed = await (confirm(msg))\n * }\n * @example\n * const { confirm } = useConfirm(\"Ja\", \"Nee\", <Button>Extra</Button>);\n * const confirmSomethingFromFragment = (fragment: React.ReactNode) => {\n * const isConfirmed = await (confirm(fragment))\n * }\n */\nfunction useConfirm(\n ok: string = 'OK',\n cancel: string = 'Annuleren',\n others: React.ReactNode = undefined\n): {\n /** INTERNAL USE ONLY - DO NOT USE */\n onConfirm: () => void;\n /** INTERNAL USE ONLY - DO NOT USE */\n onCancel: () => void;\n /**\n * awaitable confirm function. Geef een string of Fragment op om iets in de confirm-modal te tonen\n * @param content string of Fragment met de boodschap voor de confirm\n * @returns Promise<boolean> met true als de gebruiker op OK heeft geklikt, false als anders\n * @example const isConfirmed = await confirm(\"Weet je het zeker?\")\n */\n confirm: (content: string | React.ReactNode) => Promise<boolean>;\n /** INTERNAL USE ONLY - DO NOT USE */\n confirmState: State;\n} {\n const confirmContext = React.useContext<ConfirmContextType | null>(ConfirmContext);\n if (!confirmContext) throw new Error('useConfirm must be used inside a ConfirmProvider');\n\n /** INTERNAL USE ONLY */\n const onConfirm = () => {\n closeConfirm();\n resolveCallback(true);\n };\n\n /** INTERNAL USE ONLY */\n const onCancel = () => {\n closeConfirm();\n resolveCallback(false);\n };\n\n const confirm = (content: string | React.ReactNode): Promise<boolean> => {\n confirmContext.setState({ ...confirmContext.state, type: 'SHOW', payload: { content }, ok, cancel, others });\n\n return new Promise(function (resolve) {\n resolveCallback = resolve;\n });\n };\n\n const closeConfirm = () => {\n confirmContext.setState({ type: 'HIDE', payload: undefined });\n };\n\n return { confirm, onConfirm, onCancel, confirmState: confirmContext.state };\n}\n\nfunction ConfirmDialog() {\n const { onConfirm, onCancel, confirmState } = useConfirm();\n\n return confirmState.show ? (\n <div className=\"modal is-active\">\n <div className=\"modal-background\"></div>\n <div className=\"modal-content\">\n <Box>\n {typeof confirmState.content === 'string' && <p>{confirmState?.content}</p>}\n {typeof confirmState.content !== 'string' && confirmState?.content}\n <ButtonGroup alignment=\"c\" className=\"mt-6\">\n <Button.Success onClick={onConfirm}>{confirmState.ok}</Button.Success>\n <Button.Danger onClick={onCancel}>{confirmState.cancel}</Button.Danger>\n {confirmState.others}\n </ButtonGroup>\n </Box>\n </div>\n </div>\n ) : null;\n}\n\nexport { ConfirmProvider, useConfirm };\n","import React from 'react';\n\ntype CopyType = {\n /**\n * Kopieer een waarde naar het clipboard, om die daarna ergens te kunnen plakken.\n * @param valueToCopy De waarde omte copy-pasten\n */\n copy: (valueToCopy: any) => void;\n /** clear de time-out en reset \"copied\" naar \"false\" */\n reset: () => void;\n /** Als er bij het kopiëren iets mis gaat, is de error != null */\n error: Error | null;\n /** is de waarde gekopieerd? Is \"true\" als een item gekopieerd is, totdat reset() wordt aangeroepen of de timeout over is */\n copied: boolean;\n};\n\n/**\n * Hook om een waarde naar de navigator.clipboard te kopiëren en die daarna ergens te plakken.\n * @param timeout timeout in ms voordat de copy-reset gebeurt (default = 2000)\n * @returns een object met de functies copy() en reset(), een boolean copied en een error\n * @example const { copy, reset, copied, error } = useClipboard();\n */\nfunction useClipboard(timeout: number = 2000) {\n const [error, setError] = React.useState<Error | null>(null);\n const [copied, setCopied] = React.useState(false);\n const [copyTimeout, setCopyTimeout] = React.useState<any | null>(null);\n\n const handleCopyResult = (value: boolean) => {\n clearTimeout(copyTimeout);\n setCopyTimeout(setTimeout(() => setCopied(false), timeout));\n setCopied(value);\n };\n\n /**\n * Kopieer een waarde naar het clipboard, om die daarna ergens te kunnen plakken.\n * @param valueToCopy De waarde omte copy-pasten\n */\n const copy = (valueToCopy: any) => {\n if ('clipboard' in navigator)\n navigator.clipboard\n .writeText(valueToCopy)\n .then(() => handleCopyResult(true))\n .catch((err) => setError(err));\n else\n setError(new Error('useClipboard: navigator.clipboard is not supported'));\n\n };\n\n /** clear de time-out en reset \"copied\" naar \"false\" */\n const reset = () => {\n setCopied(false);\n setError(null);\n clearTimeout(copyTimeout);\n };\n\n return { copy, reset, error, copied } as CopyType;\n}\n\nexport { useClipboard };\n","import React from 'react';\n\ntype KeyboardModifiers = {\n alt: boolean;\n ctrl: boolean;\n meta: boolean;\n mod: boolean;\n shift: boolean;\n};\n\ntype Hotkey = KeyboardModifiers & {\n key?: string;\n};\n\ntype CheckHotkeyMatch = (event: KeyboardEvent) => boolean;\ntype ReactHotkeyItem = [string, (event: React.KeyboardEvent<HTMLElement>) => void];\ntype HotkeyItem = [string, (event: KeyboardEvent) => void];\n\n/** parse een key-combi naar een Hotkey object */\nfunction parseHotkey(hotkey: string): Hotkey {\n const keys = hotkey\n .toLowerCase()\n .split('+')\n .map((part) => part.trim());\n\n const modifiers: KeyboardModifiers = {\n alt: keys.includes('alt'),\n ctrl: keys.includes('ctrl'),\n meta: keys.includes('meta'),\n mod: keys.includes('mod'),\n shift: keys.includes('shift'),\n };\n\n const reservedKeys = ['alt', 'ctrl', 'meta', 'shift', 'mod'];\n const freeKey = keys.find((key) => !reservedKeys.includes(key));\n\n return {\n ...modifiers,\n key: freeKey,\n };\n}\n\n/** vergelijk hotkeys */\nfunction isExactHotkey(hotkey: Hotkey, event: KeyboardEvent): boolean {\n const { alt, ctrl, meta, mod, shift, key } = hotkey;\n const { altKey, ctrlKey, metaKey, shiftKey, key: pressedKey } = event;\n\n if (alt !== altKey)\n return false;\n\n if (mod) {\n if (!ctrlKey && !metaKey)\n return false;\n } else {\n if (ctrl !== ctrlKey)\n return false;\n\n if (meta !== metaKey)\n return false;\n }\n if (shift !== shiftKey)\n return false;\n\n\n if (\n key &&\n (pressedKey.toLowerCase() === key.toLowerCase() ||\n event.code.replace('Key', '').toLowerCase() === key.toLowerCase())\n )\n return true;\n\n return false;\n}\n\n/** match hotkeys */\nfunction getHotkeyMatcher(hotkey: string): CheckHotkeyMatch {\n return (event) => isExactHotkey(parseHotkey(hotkey), event);\n}\n\n/** getHotkeyHandler kan bijvoorbeeld op een onKeyDown() handler gebruikt worden. Om bijvoorbeeld hotkeys aan inputs toe te voegen\n * @param hotkeys een array van keyboard-combinaties met een handler.\n * @example\n * <input type=\"text\" onKeyDown={getHotkeyHandler(['alt+shift+l'])} />\n */\nfunction getHotkeyHandler(hotkeys: ReactHotkeyItem[]) {\n return (event: React.KeyboardEvent<HTMLElement>) => {\n hotkeys.forEach(([hotkey, handler]) => {\n if (getHotkeyMatcher(hotkey)(event.nativeEvent)) {\n event.preventDefault();\n handler(event);\n }\n });\n };\n}\n\nfunction shouldFireEvent(event: KeyboardEvent) {\n if (event.target instanceof HTMLElement)\n return !['INPUT', 'TEXTAREA', 'SELECT'].includes(event.target.tagName);\n\n return true;\n}\n\n/**\n * Hook om te luisteren naar keyboard-combinaties op het document.\n * formats: \n * \"mod+s\" = Cmd + s op macOS, Ctrl + S op Windows,\n * \"ctrl+shift+x\" = Ctrl + Shift + x,\n * \"alt + shiftt + L\" = Alt + Shfit + l, spaties zijn toegestaan,\n * \"ArrowLeft\" = @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values voor speciale keys\n * \n * @param hotkeys een array van keyboard-combinaties met een handler.\n * @example\n * const hks: HotkeyItem[] = [\n * ['mod+J', () => console.log('mod + J pressed')],\n * ['shift+L', () => console.log('Shift and L pressed')],\n * ];\n * useHotkeys(hks);\n */\nfunction useHotkeys(hotkeys: HotkeyItem[]) {\n React.useEffect(() => {\n const keydownListener = (event: KeyboardEvent) => {\n hotkeys.forEach(([hotkey, handler]) => {\n if (getHotkeyMatcher(hotkey)(event) && shouldFireEvent(event)) {\n event.preventDefault();\n handler(event);\n }\n });\n };\n\n document.documentElement.addEventListener('keydown', keydownListener);\n return () => document.documentElement.removeEventListener('keydown', keydownListener);\n }, [hotkeys]);\n}\n\n\nexport { useHotkeys, getHotkeyHandler, parseHotkey, getHotkeyMatcher };\nexport type { Hotkey, HotkeyItem };\n","import React from 'react';\n\n/** default serializer met `JSON.stringify` van de waar `T` naar een `string` */\nfunction serializeJSON<T>(value: T): string {\n try {\n return JSON.stringify(value);\n } catch (error) {\n throw new Error(`useLocalState failed to serialize the value: ${(error as Error).message}`);\n }\n}\n\n/** default deserializer met `JSON.parse` van een `string` naar de waarde `T` */\nfunction deserializeJSON<T>(value: string): T {\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n throw new Error(`useLocalState failed to deserialize the value: ${(error as Error).message}`);\n }\n}\n\ntype UseLocalStoredStateFn<T = string> = {\n /** key to store the value with in Local Storage */\n key: string;\n /** initial value (if its non-existent in Local Storage) */\n initialValue: T;\n /** your own serializing-function. Implement when you cannot use `JSON.stringify` */\n serialize?: (value: T, replacer?: (key: string, value: any) => any, space?: string | number) => string;\n /** your own deserializing-funtion. Implement when you cannot use `JSON.parse` */\n deserialize?: (value: string, reviver?: (key: string, value: any) => any) => T;\n}\n\n/**\n * Hook die werkt als `React.useState<T|undefined>()`, maar waarbij de waarde ook wordt opgeslagen in Local Storage.\n * De waarde blijft dan bij het refreshen van de pagina aanwezig. Als de pagina dan ververst wordt, word de al bestaande waarde gebruikt, niet de initialValue.\n * @param {UseLocalStoredStateFn} params voor de hook \n * @returns {[T, (value: T) => void]} tuple met een value en een setValue-function (net als React.useState)\n * @description\n * | Property | Type | Description |\n * |--------------|------------|---------------------------------------------------------------|\n * | key | `string` | De key waaronder de waarde in Local Storage wordt opgeslagen. |\n * | initialValue | `T` | De initiale waarde. |\n * | serialize | `function` | (optional) functie om de waarde om te zetten naar een string. Implementeer als de waarde __GEEN__ gebruik kan maken van `JSON.stringify()`! |\n * | deserialize | `function` | De functie die een string omzet naar de waarde. Implementeer als de waarde __GEEN__ gebruik kan maken van `JSON.parse()`! |\n * @example\n * import { useLocalStoredState } from 'loon-bulma-react';\n * const { value, setValue } = useLocalStoredState({ key: 'myKey', initialValue: 'Oompa Loompa' });\n * // 1. value is 'Oompa Loompa', put it somewhere on the screen\n * // 2. change the value to something else\n * // 3. refresh the page.\n * // 4. see te new value on the page.\n * // 5. you can also check the value in Local Storage in devtools.\n */\nfunction useLocalStoredState<T = string>({ key, initialValue, deserialize = deserializeJSON, serialize = serializeJSON }: UseLocalStoredStateFn<T>): readonly [T | undefined, (value: T) => void, () => void] {\n const [storedValue, setStoredValue] = React.useState<T | undefined>(() => {\n // als geen window, dan initialValue\n if (typeof window === \"undefined\") return initialValue;\n try {\n // haal de waarde op uit localStorage en deserialize deze\n const item = window.localStorage.getItem(key);\n return item ? deserialize(item) : initialValue;\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.error(`useLocalState failed to get the value: ${(error as Error).message}`);\n return initialValue;\n }\n });\n\n /**\n * Set state to a value AND save it in Local Storage\n */\n const setValue = React.useCallback((value: T) => {\n try {\n const val = value instanceof Function ? value(storedValue) : value;\n setStoredValue(val);\n if (typeof window !== \"undefined\")\n window.localStorage.setItem(key, serialize(val));\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.error(`useLocalState failed to store the value: ${(error as Error).message}`);\n }\n }, []);\n\n const remove = React.useCallback(() => {\n if (typeof window !== \"undefined\")\n window.localStorage.removeItem(key);\n }, []);\n\n return [\n /** the value */\n storedValue,\n /** set state to a value AND save it to Local Storage. */\n setValue,\n /** remove state from local storage */\n remove\n\n ] as const;\n}\n\nexport { useLocalStoredState, serializeJSON, deserializeJSON };\n","import React from 'react';\n\n/**\n * Een toggle tussen twee state-opties. de state switched tussen de twee.\n * @param initialState startwaarde\n * @param options 2 toggle-opties\n * @returns een state-toggle function\n * @example const [state, toggle] = useToggle(\"yes\", [\"yes\", \"no\"]);\n */\nfunction useToggle<T>(initialState: T, options: [T, T]): readonly [T, (value?: T) => void] {\n const [state, setState] = React.useState<T>(initialState);\n\n const toggle = (value?: React.SetStateAction<T>) => {\n if (typeof value !== 'undefined')\n setState(value);\n else\n setState((current) => {\n if (current === options[0])\n return options[1];\n return options[0];\n });\n };\n return [state, toggle] as const;\n}\n\n/**\n * useToggle voor booleans\n * @param initialState initia\n * @returns een state-toggle met booleans\n * @example const [state, toggle] = useBoolToggle(true);\n */\nfunction useBoolToggle(initialState = false): readonly [boolean, (value?: boolean) => void] {\n return useToggle<boolean>(initialState, [true, false]);\n}\n\nexport { useToggle, useBoolToggle };\n","import React from 'react';\n\n/**\n * hook voor gebruik van een gevalideerde waarde.\n * @param initialValue de beginwaarde (optioneel)\n * @param validation validatie-functie (optioneel)\n * @returns een uitgebreid useState hook met een gevalideerde waarde\n * @example\n * const validation = (value?: string): [boolean, string] => {\n * console.log(value);\n * if (!value) return [false, 'required'];\n * else if (value.length < 3) return [false, 'too short'];\n * return [true, ''];\n * };\n * const [{ value, lastValidValue, valid, invalidMsg }, onChange] = useValidatedState<string>('', validation);\n *\n * <input onChange={onChange} value={value} />\n */\nexport function useValidatedState<T>(initialValue?: T, validation?: (value?: T) => [boolean, string]) {\n\n const [initialValid, initialMsg] = validation ? validation(initialValue) : [true, ''];\n const [value, setValue] = React.useState<T | undefined>(initialValue ?? undefined);\n const [valid, setValid] = React.useState<boolean>(initialValid);\n const [invalidMsg, setInvalidMsg] = React.useState<string>(initialMsg);\n const [lastValidValue, setLastValidValue] = React.useState<T | undefined>(initialValid ? initialValue : undefined);\n\n /** onChange handler */\n const onChange = (val: T) => {\n const [isValid, invalidMsg] = validation ? validation(val) : [true, ''];\n if (isValid)\n setLastValidValue(val);\n\n setValid(isValid);\n setInvalidMsg(invalidMsg);\n setValue(val);\n };\n\n return [{ value, lastValidValue, valid, invalidMsg }, onChange] as const;\n}\n"],"names":["AspectRatio","props","figClasses","ratio","className","trim","React","caption","placement","text","children","Box","classes","styles","style","Columns","gap","multiline","centered","C","Column","narrow","Full","Half","Thirds","One","Two","Quarters","Three","Fifths","Four","Twelves","Five","Six","Seven","Eight","Nine","Ten","Eleven","Twelve","displayName","Container","Wide","Widest","Max","Content","size","Footer","alignment","containerClasses","Hero","heroColorFor","Children","map","child","HeroHead","useState","burgerActive","setBurgerActive","burgerClasses","menuClasses","role","onClick","id","Button","title","tooltip","Link","href","to","target","rel","Head","Body","Foot","NavList","NavItem","active","undefined","Image","imgWidth","imgClasses","isRounded","width","src","alt","figCaption","Section","Horizontal","isNaN","row","col","itemStyle","useMemo","maxWidth","maxItemWidth","minWidth","minItemWidth","containerStyle","display","flexDirection","reverse","flexWrap","wrap","justifyContent","alignItems","alignContent","overflowX","paddingBottom","toArray","index","key","Vertical","overflowY","maxHeight","NaN","ScrollArea","useDebouncedValue","value","options","leading","delay","_value","setValue","mountedRef","useRef","timeoutRef","cooldownRef","cancel","window","clearTimeout","current","useEffect","setTimeout","useUncontrolled","defaultValue","finalValue","rule","onChange","onValueUpdate","isControlled","modeRef","initialValue","uncontrolledValue","setUncontrolledValue","definitiveValue","mode","handleChange","nextValue","DOTS","usePagination","total","siblings","boundaries","page","initialPage","_page","activePage","setActivePage","setPage","pageNumber","next","prev","first","last","range","useCallback","start","end","length","Array","from","_","i","paginationRange","totalPageNumbers","leftSiblingIndex","Math","max","rightSiblingIndex","min","shouldShowLeftDots","shouldShowRightDots","leftItemCount","rightItemCount","dataTableReducer","state","action","type","newState","items","filteredItems","visibleItems","splice","maxRows","currentPage","headers","headerMapping","sort","DataTable","fullwidth","bordered","striped","hoverable","searchTerm","setSearchTerm","defaultSort","defaultSortCol","firstCol","columns","filter","h","header","initialStateFn","initialState","data","useReducer","dataTableState","setDataTableState","onSearch","endsWith","sorted","onSort","replace","pageChanged","handleSort","sortCol","sortColHeader","sortColumn","find","defaultSortItems","e","console","error","message","handleSearch","searchRslts","searchStr","newData","rgx","createValidRegex","item","toString","test","toLowerCase","includes","onRowClicked","onRowSelected","pagination","ceil","p","Fragment","searchTxt","headerContent","Header","content","placeholder","onSearchTermChanged","term","onNoRowsToRender","TableHead","titles","currentSort","TableBody","rowClasses","rowIdentifier","r","pageCount","onPageChange","num","rows","obj","rowIndex","rowClass","currentTarget","cellIndex","val","align","cellClass","columnClasses","FontAwesomeIcon","icon","faSortDown","faSortUp","faSort","htmlFor","faSearch","dotscounter","s","startsWith","RegExp","replaceAll","a","b","valA","valB","Error","Icon","faSize","color","rotation","flip","spin","animate","pulse","IconText","Indicator","label","position","indicatorClasses","Kbd","classNames","Kbds","keys","separator","Menu","initialItem","activeItem","setActiveItem","handleMenuItemClick","onMenuItemClicked","menuContent","MenuItem","InternMenuItem","onInternClick","MenuItemGroup","InternMenuItemGroup","ExpandableMenuItem","InternExpandableMenuItem","name","startExpanded","expanded","setExpanded","handleOnClick","faChevronUp","faChevronDown","c","Item","ItemGroup","ExpandableItem","Message","infoIcon","successIcon","dangerIcon","warningIcon","hasHeader","iconClasses","float","Primary","Success","Danger","Warning","Info","warnPackageUser","msg","force","args","process","env","NODE_ENV","warning","Modal","onCloseModal","onDismiss","document","documentElement","classList","add","remove","modalWidth","InternHead","InternBody","InternFoot","Notification","timer","autoDismissAfter","handleDismiss","dismissTimer","DismissButton","NotificationContent","hovered","setHovered","onMouseEnter","onMouseLeave","closeIcon","ProgressBar","extension","SimpleTable","rowKey","handleRowClick","rowEl","createColumns","SimpleTableHead","SimpleTableBody","hasFooter","SimpleTableFoot","f","firstEl","cols","k","kv","Object","Steps","activeStepIndex","activeStep","setActiveStep","handleStepChange","stepKey","onChangeStep","isDisabled","freeStepChoice","InternStepsItem","disabled","handleClick","setStatus","status","statusUpdate","newStatus","marker","details","TabBar","activeTab","initialTab","setActiveTab","onTabSelected","onTabChange","styling","tabItems","TabBarItemWrapper","isActive","tabId","TabBarItem","itemContent","Tag","light","rounded","Tags","merged","TimeLine","Point","heading","markerClassName","Title","bulmaSize","hSize","headingSize","txt","Subtitle","TitleWithSubtitle","parseInt","titleTxt","subtitleTxt","ToggleBar","toggledItem","setToggledItem","handleToggle","onToggle","toggleName","identifier","join","ToggleItem","InternToggleItem","toggled","onColor","offColor","outlined","onToggleClick","OnOffToggleItem","InternOnOffToggleItem","propColor","setToggled","toggleColor","OnOffItem","ButtonGroup","hasAddons","loading","Static","LinkButton","JSDateTime","date","locale","formatOptions","_date","Date","_locale","defaultFormatOptions","timeZone","defaultTimezone","freeze","valueOf","intlDtf","dtfOptions","Intl","DateTimeFormat","format","set","year","month","day","hour","minute","second","millisecond","startOf","period","newDate","JSDate","diff","getDate","getDay","fromDate","setDate","endOf","daysInMonth","lastDay","plus","addVals","years","setFullYear","getFullYear","months","setMonth","getMonth","weeks","days","hours","setHours","getHours","minutes","setMinutes","getMinutes","seconds","setSeconds","getSeconds","milliseconds","setMilliseconds","getMilliseconds","isBetween","dates","date1","date2","isBefore","includeEqual","isAfter","hasSame","dstDate","yr","m","d","hr","sec","equals","clone","fromMillis","now","defaultLocale","jsdate","epoch","RangeError","dayCount","toLocaleString","fromISO","iso","parse","fromUTC","utc","ms","millis","MAX_DATE_NUM","toFormat","rslt","formatBuilder","substring","monthLong","monthShort","dayLong","dayShort","weekNr","isAM","timezoneLong","timezoneShort","timezoneOffsetLongStr","timezoneOffsetShortStr","timezoneOffset","IGNORE_SIGN","prevToken","counter","ignore","allowed","split","forEach","jan","getTimezoneOffset","jul","today","toISOString","toUTCString","timeZoneName","offsetStr","indexOfPLus","indexOf","signIndex","weekday","UTC","setUTCDate","getUTCDate","getUTCDay","yrStart","getUTCFullYear","getTime","isLeapYear","dayOfYear","resolvedOptions","eventStylesBase","transition","fontSize","height","margin","borderRadius","textAlign","paddingLeft","paddingRight","overflow","textOverflow","headerContainerStylesBase","borderBottom","fontWeight","gridContainerStylesBase","gridTemplateRows","justifyItems","weekNumberStylesBase","backgroundColor","borderRight","borderTop","paddingTop","dayContainerStyleBase","dayDateStyleBase","marginBottom","marginTop","verticalAlign","todayStyleBase","padding","eventKleurBlockStyleBase","marginRight","startOfYear","endOfYear","startOfMonth","endOfMonth","startOfWeek","endOfWeek","startOfDay","endOfDay","weekNrForDate","weekNR","addYears","n","addMonths","addDays","dt","addHours","addMinutes","addSeconds","addMilliseconds","include","isToday","timeString","AM_PM","toLocaleTimeString","hour12","part1","amOrPm","padStart","dateString","toLocaleDateString","weekDay","dayNum","monthName","relativeTime","unit","rtf","RelativeTimeFormat","numeric","v","minutesBetween","hoursBetween","daysBetween","weeksBetween","monthsBetween","yearsBetween","timeDiff","hasBSN","possibleBSNs","match","matches","bsn","teller","char","push","calculateTxtColor","bgColor","isRGB","clr","hexToRGB","g","uicolors","pow","lum","hex","CalendarColoredItem","event","desc","isHovered","pickTextColor","eventStyle","evtColor","txtColor","cursor","ref","CalendarItem","eventSpan","MoreEventsView","events","onEventClick","slice","visibleEvents","setVisibleEvents","isExpanded","spanStyle","evt","allDay","allday","startDateTime","timeHM","timed","DayContainer","onDayClick","dayContainerStyle","todayHeaderStyle","doNotMarkToday","marginLeft","dateShort","MonthView","vd","viewDate","orgEvents","visibleDays","Set","setViewDate","eventConverterFn","endDateTime","currDate","datesWithEvents","has","dayStart","dayEnd","dayEvents","setDatesWithEvents","newVd","gridContainerStyles","gridTemplateColumns","MonthViewHeader","MonthViewDayBlocks","dayNames","dayNums","count","headerStyles","dayNameStyles","weekLength","ISO","WeekNumberCell","weekNumStyle","borderTopWidth","AlldayContainer","HourNumber","HourSlot","hourSlotStyle","eventWidth","offsetWidth","WeekTimedItem","eventIndex","diffInMS","minutesAsPixels","marginX","lineHeight","WeekView","daysWithEvents","filteredEvts","headerStyle","todayStyle","Calendar","Month","Week","InputError","stateError","outsideError","touched","InputIcons","icons","valid","defaultIcon","iconLeft","iconRight","faExclamationTriangle","faCheck","endIcon","InputContainer","input","direction","HorizontalInputContainer","VerticalInputContainer","sizeClass","reducer","invalidMsg","validate","description","validation","CheckBox","labelTxt","dispatch","newVal","onValueChanged","errorMsg","errorMessage","required","checked","onKeyDown","validationObject","onValidate","DateInput","onBlur","valueAsDate","inputMode","keyboardType","faCalendar","validatie","newDateValue","DateTimeInput","pattern","faCalendarDay","minDate","maxDate","TimeInput","step","faClock","valueA","valueB","MultiRangeInput","sliderStyle","onChangeValue","parseFloat","JSON","stringify","abs","minDiff","maxDiff","NumberInput","valueAsNumber","faCalculator","RangeInput","ColorInput","inputClasses","outputClasses","faPalette","validatieObj","HiddenInput","createSelectOptions","opts","o","ogs","selectOptions","opt","focused","focus","MultiSelect","visibleRows","handleSelectChange","collection","values","multiple","onFocus","selectedOptions","Select","emailRgx","EmailInput","autoComplete","autocomplete","faAt","PasswordInput","bttnClassName","handlePasswordReadability","passwordReadable","setPaswordReadable","faLock","revealPasswordTooltip","faEyeSlash","faEye","TextArea","inputType","TextInput","validationError","characters","processedVal","toUpperCase","allowedChars","reduce","faKeyboard","Input","pVal","files","filename","FileInput","boxed","path","filenameFormatter","defaultFilenameFormatter","accept","capture","faFileUpload","kiesLabel","nogGeenBestandLabel","RadioGroup","handleSet","RadioItem","InternRadioItem","selectedItem","setter","containerClassName","Radio","Form","allowedContent","method","onSubmit","novalidate","FormLine","InternFormLine","Buttons","FreeSpace","InternFreeSpace","warn","noValidate","Text","Password","Email","Color","Hidden","Number","Range","MultiRange","DateTime","Time","File","Line","Space","fields","updatedFields","findIndex","FormBuilder","fieldMapper","handleValueChange","cv","new","handleModalDismiss","useModal","handleSubmit","preventDefault","URLSearchParams","FormField","fieldProps","FormButtons","buttons","isValid","old","submit","other","btn","mustValidate","field","notificationReducer","notifierItems","Notifier","notifications","updateNotifications","lastNotificationID","setLastNotificationID","lastDeleted","setLastDeleted","clearTime","clearedAt","setLastCleared","del","notifierClasses","location","dismissTime","dismissAfter","defaultDismissTime","NotifierItem","zIndex","boxShadow","NotifierContext","createContext","NotifierProvider","notification","setNotification","setCleared","notify","floor","random","clear","defaultAutoDismiss","Provider","useNotifier","notifierHelpers","useContext","resolveCallback","ConfirmContext","ConfirmProvider","confirmReducer","setState","ConfirmDialog","show","ok","others","payload","useConfirm","confirmContext","onConfirm","closeConfirm","onCancel","confirm","Promise","resolve","confirmState","useClipboard","timeout","setError","copied","setCopied","copyTimeout","setCopyTimeout","handleCopyResult","copy","valueToCopy","navigator","clipboard","writeText","then","catch","err","reset","parseHotkey","hotkey","part","modifiers","ctrl","meta","mod","shift","reservedKeys","freeKey","isExactHotkey","altKey","ctrlKey","metaKey","shiftKey","pressedKey","code","getHotkeyMatcher","getHotkeyHandler","hotkeys","handler","nativeEvent","shouldFireEvent","HTMLElement","tagName","useHotkeys","keydownListener","addEventListener","removeEventListener","serializeJSON","deserializeJSON","useLocalStoredState","deserialize","serialize","localStorage","getItem","storedValue","setStoredValue","Function","setItem","removeItem","useToggle","toggle","useBoolToggle","useValidatedState","initialValid","initialMsg","setValid","setInvalidMsg","lastValidValue","setLastValidValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.modern.js","sources":["../src/components/AspectRatio/AspectRatio.tsx","../src/components/Box/Box.tsx","../src/components/Columns/Columns.tsx","../src/components/Columns/Column.tsx","../src/components/Container/Container.tsx","../src/components/Content/Content.tsx","../src/components/Footer/Footer.tsx","../src/components/Hero/Hero.tsx","../src/components/Image/Image.tsx","../src/components/Section/Section.tsx","../src/components/ScrollArea/ScrollArea.tsx","../src/hooks/useClipboard.ts","../src/hooks/useDebouncedValue.ts","../src/hooks/useHotkeys.ts","../src/hooks/useLocalStoredState.ts","../src/hooks/useUncontrolled.ts","../src/hooks/usePagination.ts","../src/hooks/useToggle.ts","../src/hooks/useValidatedState.ts","../src/components/DataTable/DataTable.tsx","../src/components/Icon/Icon.tsx","../src/components/Indicator/Indicator.tsx","../src/components/Kbd/Kbd.tsx","../src/components/Menu/Menu.tsx","../src/components/Message/Message.tsx","../node_modules/warning/warning.js","../src/utils/warn-dev-util.ts","../src/components/Modal/Modal.tsx","../src/components/Notification/Notification.tsx","../src/components/ProgressBar/ProgressBar.tsx","../src/components/SimpleTable/SimpleTable.tsx","../src/components/Steps/Steps.tsx","../src/components/TabBar/TabBar.tsx","../src/components/Tag/Tag.tsx","../src/components/TimeLine/TimeLine.tsx","../src/components/Titles/Titles.tsx","../src/components/ToggleBar/ToggleBar.tsx","../src/components/ButtonGroup/ButtonGroup.tsx","../src/components/Button/Button.tsx","../src/components/Link/Link.tsx","../src/utils/date-utils.ts","../src/utils/JSDateTime.class.ts","../src/utils/hasBSN.function.ts","../src/utils/calculateTxtColor.function.ts","../src/components/Calendar/base-styles.ts","../src/components/Calendar/CalendarItems/CalendarColoredItem.tsx","../src/components/Calendar/CalendarItems/CalendarItem.tsx","../src/components/Calendar/Month/MoreEvents.tsx","../src/components/Calendar/Month/DayContainer.tsx","../src/components/Calendar/Month/MonthView.tsx","../src/components/Calendar/Week/AlldayContainer.tsx","../src/components/Calendar/Week/HourRow.tsx","../src/components/Calendar/Week/WeekView.tsx","../src/components/Calendar/index.ts","../src/forms/shared/InputError.tsx","../src/forms/shared/InputIcons.tsx","../src/forms/shared/Base.Input.Container.tsx","../src/forms/Checkbox/Checkbox.tsx","../src/forms/Datetimes/DateInput.tsx","../src/forms/Datetimes/DateTimeInput.tsx","../src/forms/Datetimes/TimeInput.tsx","../src/forms/Numeric/MultiRangeInput.tsx","../src/forms/Numeric/NumberInput.tsx","../src/forms/Numeric/RangeInput.tsx","../src/forms/Others/ColorInput.tsx","../src/forms/Others/HiddenInput.tsx","../src/forms/Selects/BaseSelectProps.tsx","../src/forms/Selects/MultiSelect.tsx","../src/forms/Selects/Select.tsx","../src/forms/Text/EmailInput.tsx","../src/forms/Text/PasswordInput.tsx","../src/forms/Text/TextArea.tsx","../src/forms/Text/TextInput.tsx","../src/forms/Input.tsx","../src/forms/File/FileInput.tsx","../src/forms/Radio/Radio.tsx","../src/forms/Form.tsx","../src/forms/FormBuilder/FormBuilder.tsx","../src/forms/Currency/CurrencyInput.tsx","../src/contexts/Notifier/Notifier.tsx","../src/contexts/Notifier/NotifierProvider.tsx","../src/contexts/Confirm/ConfirmContextProvider.tsx"],"sourcesContent":["import React from 'react';\n\n/** Props voor een aspect-ratio */\ntype AspectRatioProps = {\n /** de ratio (width x height) van het gewenste element */\n ratio:\n | '1by1'\n | '5by4'\n | '4by5'\n | '4by3'\n | '3by4'\n | '3by2'\n | '2by3'\n | '5by3'\n | '3by5'\n | '16by9'\n | '9by16'\n | '2by1'\n | '1by2'\n | '3by1'\n | '1by3';\n /** het item dat aan de aspect-ratio moet voldoen */\n children: React.ReactNode;\n /** */\n caption?: {\n placement: 'top' | 'bottom';\n text: string;\n };\n /** extra classes on aspect-ratio-element */\n className?: string;\n};\n\n/**\n * gebruik een aspect-ratio voor een bepaald resizable element, waar een width en height bij hoort.\n * Zoals bijvoorbeeld een iframe, img, etc\n * @param props\n * @returns een aspect-ratio'd element.\n * @example\n * <AspectRatio ratio=\"16by9\" >\n * <iframe src=\"https://www.youtube.com/embed/dQw4w9WgXcQ\">\n * </AspectRatio>\n */\nfunction AspectRatio(props: AspectRatioProps): JSX.Element {\n const figClasses = `image is-${props.ratio} ${props.className || ''}`.trim();\n return (\n <figure className={figClasses}>\n {props.caption && props.caption.placement === 'top' && <figcaption>{props.caption.text}</figcaption>}\n {props.children}\n {props.caption && props.caption.placement === 'bottom' && <figcaption>{props.caption.text}</figcaption>}\n </figure>\n );\n}\n\nexport { AspectRatio };\nexport type { AspectRatioProps };\n","import React, { CSSProperties } from 'react';\n\ntype BoxProps = {\n /** de children van de box */\n children: React.ReactNode;\n /** Andere classes om op de box toe te passen */\n className?: string;\n /** style props direct op de box */\n styles?: CSSProperties;\n};\n\n/**\n * Maak een witte box om andere elementen heen. Voor forms of modals. Heeft een beetje schaduw.\n * @see {@link https://bulma.io/documentation/elements/box/}\n * @param {{children: any, classes?: string|string[]}} props\n * @returns een witte box om elementen.\n * @example <Box>This is a box</Box>\n */\nconst Box = ({ children, className: classes, styles }: BoxProps): JSX.Element => (\n <div className={`bulma-box ${classes ?? ''}`.trim()} style={styles}>\n {children}\n </div>\n);\n\nexport { Box };\nexport type { BoxProps };\n","import React, { CSSProperties } from 'react';\n\nexport type ColumnsProps = {\n /** Children van de Columns. Moeten van het type @see Column zijn */\n children: React.ReactNode;\n /** de gap-grootte (stappen van .25rem), een margin tussen kolommen (default = 3, 0.75rem) */\n gap?: '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | undefined;\n /** mogen de kolommen over meerdere rijen verdeeld worden */\n multiline?: boolean;\n /** moeten de kolom centraal aligned worden */\n centered?: boolean;\n /** extra classes voor dit element */\n className?: string;\n /** set de styling direct */\n styles?: CSSProperties;\n};\n\n/**\n * Verdeel een pagina in kolommen, children zijn van het type {@link Column } voor het maken van de kolommen.\n *\n * Kijk op {@link https://bulma.io/documentation/columns/sizes/} voor de bulma-uitleg.\n * @param {ColumnProps} props\n * @returns Columns component which can be used to create a column layout.\n * @example\n * <Columns>\n * <Column>This is a column</Column>\n * <Column>This is a column</Column>\n * <Column narrow>This is a narrow column</Column>\n * </Columns>\n */\nexport function Columns({ children, gap, multiline, centered, className: classes, styles }: ColumnsProps): JSX.Element {\n let className = 'columns';\n if (gap) className += ` is-${gap} is-variable`;\n if (multiline) className += ' is-multiline';\n if (centered) className += ' is-centered';\n if (classes) className += ` ${classes}`;\n\n return (\n <div data-testid=\"columns\" className={className} style={styles}>\n {children}\n </div>\n );\n}\n","import React, { CSSProperties } from 'react';\n\ntype ColumnProps = {\n /** wat staat er in deze kolom */\n children: React.ReactNode;\n /** extra classes op deze kolom */\n className?: string;\n /** zet de styling direct */\n styles?: CSSProperties;\n};\ntype ExpandedColumnProps = ColumnProps & {\n /** is deze kolom zo smal mogelijk of vanaf welke schermmaat */\n narrow?: boolean | 'mobile' | 'tablet' | 'touch' | 'desktop' | 'widescreen' | 'fullhd';\n};\n\n/** ALLEEN INTERN GEBRUIK. IS DE UITEINDELIJKE COLUMN */\nconst C = ({ children, className, styles }: ExpandedColumnProps) => (\n <div className={className} style={styles}>\n {children}\n </div>\n);\n\n/**\n * Standaard kolom voor gebruik in {@link Columns}.\n * Als voor narrow een waarde is meegegeven, wordt de minimale ruimte voor deze kolom aangehouden: https://bulma.io/documentation/columns/sizes/\n * @return Een kolom\n * @example\n * <Column>This is a column</Column>\n * <Column narrow>This is a narrow column</Column>\n */\nconst Column = (props: ExpandedColumnProps): JSX.Element => {\n let classes = 'column ';\n if (typeof props.narrow === 'boolean') classes += 'is-narrow';\n else if (props.narrow) classes += `is-narrow-${props.narrow}`;\n\n if (props.className) classes += ` ${props.className}`;\n return <C {...props} className={classes} />; // <div className={classes.trim()}>{props.children}</div>;\n};\n\n/** Column full width of parent\n * @returns een kolom met de maximale breedte van de parent 'Columns'\n * @example <Column.Full>This is a full column</Column.Full>\n */\nColumn.Full = (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-full ${props.className}`} styles={props.styles} />\n);\n/** Column 1/2 width of parent\n * @returns een kolom met de halve breedte van de parent 'Columns'\n * @example <Column.Half>This is a half column</Column.Half>\n */\nColumn.Half = (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-half ${props.className}`} styles={props.styles} />\n);\n\n/** Spread columns based on thirds (1/3, 2/3) */\nColumn.Thirds = {\n /** Column 1/3 width of parent\n * @returns een kolom met 1/3 breedte van de parent 'Columns'\n * @example <Column.Thirds.One>This is a first third column</Column.Thirds.One>\n */\n One: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-one-third ${props.className}`} styles={props.styles} />\n ),\n /** Column 2/3 width of parent\n * @returns een kolom met 2/3 breedte van de parent 'Columns'\n * @example <Column.Thirds.Two>This is a second third column</Column.Thirds.Two>\n */\n Two: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-two-thirds ${props.className}`} styles={props.styles} />\n ),\n};\n\n/** Spread columns based on quarters (1/4, 2/4, 3/4) */\nColumn.Quarters = {\n /** Column 1/4 width of parent\n * @returns een kolom met 1/4 breedte van de parent 'Columns'\n * @example <Column.Quarters.One>This is a 1/4 column</Column.Quarters.One>\n */\n One: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-one-quarter ${props.className}`} styles={props.styles} />\n ),\n /** Column 2/4 width of parent\n * @returns een kolom met 2/4 breedte van de parent 'Columns'\n * @example <Column.Quarters.Two>This is a 2/4 column</Column.Quarters.Two>\n */\n Two: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-two-quarters ${props.className}`} styles={props.styles} />\n ),\n /** Column 3/4 width of parent\n * @returns een kolom met 3/4 breedte van de parent 'Columns'\n * @example <Column.Quarters.Three>This is a 3/4 column</Column.Quarters.Three>\n */\n Three: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-three-quarters ${props.className}`} styles={props.styles} />\n ),\n};\n/** Spread columns based on fifths (1/5, 2/5, 3/5, 4/5) */\nColumn.Fifths = {\n /** Column 1/5 width of parent\n * @returns een kolom met 1/5 breedte van de parent 'Columns'\n * @example <Column.Fifths.One>This is a 1/5 column</Column.Fifths.One>\n */\n One: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-one-fifth ${props.className}`} styles={props.styles} />\n ),\n /** Column 2/5 width of parent\n * @returns een kolom met 2/5 breedte van de parent 'Columns'\n * @example <Column.Fifths.Two>This is a 2/5 column</Column.Fifths.Two>\n */\n Two: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-two-fifths ${props.className}`} styles={props.styles} />\n ),\n /** Column 3/5 width of parent\n * @returns een kolom met 3/5 breedte van de parent 'Columns'\n * @example <Column.Fifths.Three>This is a 3/5 column</Column.Fifths.Three>\n */\n Three: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-three-fifths ${props.className}`} styles={props.styles} />\n ),\n /** Column 4/5 width of parent\n * @returns een kolom met 4/5 breedte van de parent 'Columns'\n * @example <Column.Fifths.Four>This is a 4/5 column</Column.Fifths.Four>\n */\n Four: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-four-fifths ${props.className}`} styles={props.styles} />\n ),\n};\n\n// Twelfths Columns\nColumn.Twelves = {\n /** Column 1/12 width of parent\n * @returns een kolom met 1/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.One>This is a 1/12 column</Column.Twelves.One>\n */\n One: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-1 ${props.className}`} styles={props.styles} />\n ),\n /** Column 2/12 width of parent\n * @returns een kolom met 2/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Two>This is a 2/12 column</Column.Twelves.Two>\n */\n Two: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-2 ${props.className}`} styles={props.styles} />\n ),\n /** Column 3/12 width of parent\n * @returns een kolom met 3/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Three>This is a 3/12 column</Column.Twelves.Three>\n */\n Three: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-3 ${props.className}`} styles={props.styles} />\n ),\n /** Column 4/12 width of parent\n * @returns een kolom met 4/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Four>This is a 4/12 column</Column.Twelves.Four>\n */\n Four: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-4 ${props.className}`} styles={props.styles} />\n ),\n /** Column 5/12 width of parent\n * @returns een kolom met 5/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Five>This is a 5/12 column</Column.Twelves.Five>\n */\n Five: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-5 ${props.className}`} styles={props.styles} />\n ),\n /** Column 6/12 width of parent\n * @returns een kolom met 6/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Six>This is a 6/12 column</Column.Twelves.Six>\n */\n Six: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-6 ${props.className}`} styles={props.styles} />\n ),\n /** Column 7/12 width of parent\n * @returns een kolom met 7/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Seven>This is a 7/12 column</Column.Twelves.Seven>\n */\n Seven: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-7 ${props.className}`} styles={props.styles} />\n ),\n /** Column 8/12 width of parent\n * @returns een kolom met 8/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Eight>This is a 8/12 column</Column.Twelves.Eight>\n */\n Eight: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-8 ${props.className}`} styles={props.styles} />\n ),\n /** Column 9/12 width of parent\n * @returns een kolom met 9/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Nine>This is a 9/12 column</Column.Twelves.Nine>\n */\n Nine: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-9 ${props.className}`} styles={props.styles} />\n ),\n /** Column 10/12 width of parent\n * @returns een kolom met 10/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Ten>This is a 10/12 column</Column.Twelves.Ten>\n */\n Ten: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-10 ${props.className}`} styles={props.styles} />\n ),\n /** Column 11/12 width of parent\n * @returns een kolom met 11/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Eleven>This is a 11/12 column</Column.Twelves.Eleven>\n */\n Eleven: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-11 ${props.className}`} styles={props.styles} />\n ),\n /** Column 12/12 width of parent\n * @returns een kolom met 12/12 breedte van de parent 'Columns'\n * @example <Column.Twelves.Twelve>This is a 12/12 column</Column.Twelves.Twelve>\n */\n Twelve: (props: ColumnProps): JSX.Element => (\n <C {...props} className={`column is-12 ${props.className}`} styles={props.styles} />\n ),\n};\nColumn.displayName = 'Column';\n\nexport { Column };\nexport type { ColumnProps, ExpandedColumnProps };\n","import React, { CSSProperties } from 'react';\n\ntype ContainerProps = {\n children: React.ReactNode;\n /** extra classes */\n className?: string;\n /** set styling directly on container */\n styles?: CSSProperties;\n};\n\n/**\n * Een container om content horizontaal te centreren in grote viewports.\n * @param props\n * @return een default container\n *\n * @description De width van de container is afhankelijk van de maximale viewport width:\n * | | Component | tot 1023px | tot 1216px | tot 1408px | groter |\n * |----|----------------------|------------|------------|------------|-----------|\n * | >> | `<Container>` | max-width | 960px | 1152px | 1344px |\n * | | `<Container.Wide>` | max-width | max-width | 1152px | 1344px |\n * | | `<Container.Widest>` | max-width | max-width | max-width | 1344px |\n * | | `<Container.Max>` | max-width | max-width | max-width | max-width |\n *\n * @example <Container>This is a container</Container>\n */\nconst Container = (props: ContainerProps): JSX.Element => {\n let classes = 'container';\n if (props.className) classes += ' ' + props.className;\n return (\n <div className={classes} style={props.styles}>\n {props.children}\n </div>\n );\n};\n\n/**\n * Een container om content horizontaal te centreren in grote viewports.\n * @param props\n * @returns een iets bredere container\n *\n * @description De width van de container is afhankelijk van de maximale viewport width:\n * | | Component | tot 1023px | tot 1216px | tot 1408px | groter |\n * |----|----------------------|------------|------------|------------|-----------|\n * | | `<Container>` | max-width | 960px | 1152px | 1344px |\n * | >> | `<Container.Wide>` | max-width | max-width | 1152px | 1344px |\n * | | `<Container.Widest>` | max-width | max-width | max-width | 1344px |\n * | | `<Container.Max>` | max-width | max-width | max-width | max-width |\n *\n * @example <Container.Wide>This is a somewhat wider container</Container.Wide>\n */\nContainer.Wide = (props: ContainerProps): JSX.Element => {\n let classes = 'container is-widescreen ';\n if (props.className) classes += ' ' + props.className;\n return (\n <div className={classes} style={props.styles}>\n {props.children}\n </div>\n );\n};\n/**\n * Een container om content horizontaal te centreren in grote viewports.\n * @param props\n * @returns een hele brede container\n *\n * @description De width van de container is afhankelijk van de maximale viewport width:\n * | | Component | tot 1023px | tot 1216px | tot 1408px | groter |\n * |----|----------------------|------------|------------|------------|-----------|\n * | | `<Container>` | max-width | 960px | 1152px | 1344px |\n * | | `<Container.Wide>` | max-width | max-width | 1152px | 1344px |\n * | >> | `<Container.Widest>` | max-width | max-width | max-width | 1344px |\n * | | `<Container.Max>` | max-width | max-width | max-width | max-width |\n *\n * @example <Container.Widest>This is a wide container</Container.Widest>\n */\nContainer.Widest = (props: ContainerProps): JSX.Element => {\n let classes = 'container is-fullhd ';\n if (props.className) classes += ' ' + props.className;\n return (\n <div className={classes} style={props.styles}>\n {props.children}\n </div>\n );\n};\n/**\n * Een container om content horizontaal te centreren in grote viewports.\n * De width van de container is afhankelijk van de maximale viewport width.\n * Aan de linker- en rechter-zijde wordt een margin van 32px behouden.\n * @param props\n * @returns een container die de gehele breedte van de viewport gebruikt.\n *\n * @description De width van de container is afhankelijk van de maximale viewport width:\n * | | Component | tot 1023px | tot 1216px | tot 1408px | groter |\n * |----|----------------------|------------|------------|------------|-----------|\n * | | `<Container>` | max-width | 960px | 1152px | 1344px |\n * | | `<Container.Wide>` | max-width | max-width | 1152px | 1344px |\n * | | `<Container.Widest>` | max-width | max-width | max-width | 1344px |\n * | >> | `<Container.Max>` | max-width | max-width | max-width | max-width |\n *\n * @example <Container.Max>This is an almost-fullwidth container </Container.Max>\n */\nContainer.Max = (props: ContainerProps): JSX.Element => {\n let classes = 'container is-fluid ';\n if (props.className) classes += ' ' + props.className;\n return (\n <div className={classes} style={props.styles}>\n {props.children}\n </div>\n );\n};\n\nexport { Container };\nexport type { ContainerProps };\n","import React, { CSSProperties } from 'react';\nimport { SizeProp } from '~/loon-react-bulma-types';\n\ntype ContentPropsType = {\n size?: SizeProp;\n children: React.ReactNode;\n className?: string;\n styles?: CSSProperties;\n};\n\n/**\n * Een Content component voor generated content. De meeste html tags kunnen hier worden gebruikt.\n * @param props size: de tekstgrootte, children: de content van de content\n * @returns een div geschikt voor content. WYSIWYG ofzo.\n * @example <Content>This is a content which can contain lists, <strong>strong</strong> and <em>italic</em> tags</Content>\n */\nexport function Content({ size, className, styles, children }: ContentPropsType): JSX.Element {\n let classes = 'content ';\n\n if (size === 's') classes += 'is-small';\n else if (size === 'l') classes += 'is-medium';\n else if (size === 'xl') classes += 'is-large';\n\n if (className) classes += ' ' + className;\n\n return (\n <div className={classes} style={styles}>\n {children}\n </div>\n );\n}\n","import React from 'react';\nimport { AlignmentProp } from '~/loon-react-bulma-types';\n\nexport type FooterProps = {\n /** de content voor de footer */\n children: React.ReactNode;\n /** alignment bij de footer. (default = 'c') */\n alignment?: AlignmentProp;\n /** extra classes voor op de footer */\n className?: string;\n /** custom styles voor de footer */\n styles?: React.CSSProperties;\n};\n\n/**\n * Maak een footer voor onderaan de pagina.\n * - de footer bevat een container waarvan de text default 'centered' is.\n * @param props\n * @returns een footer met daarin de content.\n * @example <Footer>This is a footer</Footer>\n */\nexport function Footer({ children, alignment, className, styles }: FooterProps): JSX.Element {\n let containerClasses = 'container';\n let classes = 'footer mt-6';\n\n if (alignment === 'l') containerClasses += ' has-text-left';\n else if (alignment === 'r') containerClasses += ' has-text-right';\n else containerClasses += ' has-text-centered';\n\n if (className) classes += ` ${className}`;\n\n return (\n <footer className={classes} style={styles}>\n <div className={containerClasses}>{children}</div>\n </footer>\n );\n}\n","import React from 'react';\nimport { SizeProp } from '~/loon-react-bulma-types';\n\ntype HeroProps = {\n children?: React.ReactNode;\n /** type hero */\n heroColorFor?: 'werknemer' | 'werkgever' | 'klant' | 'admin' | 'primary' | undefined;\n /** de grootte van de hero (default = small ('s')) */\n size?: SizeProp | undefined;\n};\n\n/**\n * Maak een schermbrede hero aan. Optionele top-buttons en/of tabs voor navigatie\n * @param props\n * @returns een Hero\n * @example\n\n */\nconst Hero = (props: HeroProps): JSX.Element => {\n let classes = 'hero is-bold';\n classes += props.heroColorFor ? ` is-${props.heroColorFor}` : ' is-primary';\n if (props.size === 's') classes += ' is-small';\n // else if (props.size == 'm') classes += ' is-medium';\n else if (props.size === 'l') classes += ' is-medium';\n else if (props.size === 'xl') classes += ' is-large';\n\n // const classes = `hero is-bold ${color} ${size}`.trim();\n const children = React.Children.map(props.children ?? [<div className=\"hero-body\"> </div>], (child: any) => child);\n\n return <header className={classes}>{children}</header>;\n};\n\nconst HeroHead = (props: { children: React.ReactNode }): JSX.Element => {\n const [burgerActive, setBurgerActive] = React.useState(false);\n\n const burgerClasses = burgerActive ? 'navbar-burger is-active' : 'navbar-burger';\n const menuClasses = burgerActive ? 'navbar-menu is-active' : 'navbar-menu';\n\n return (\n <div className=\"hero-head\">\n <nav className=\"navbar container\">\n <div className=\"navbar-brand\">\n <span\n className={burgerClasses}\n role=\"menu-toggle-mobile\"\n data-target=\"hero-header-menu\"\n onClick={() => setBurgerActive(!burgerActive)}\n >\n <span></span>\n <span></span>\n <span></span>\n </span>\n </div>\n <div id=\"hero-header-menu\" className={menuClasses}>\n <div className=\"navbar-end\">{props.children}</div>\n </div>\n </nav>\n </div>\n );\n};\n\n/** een button in de hero head\n * @param props props\n * @returns een button in de hero head\n * @example <Hero.Head.Button onClick={handleClick}>Button</Hero.Head.Button>\n */\nHeroHead.Button = (props: { children: React.ReactNode; tooltip?: string; onClick?: (e: any) => void }) => (\n <a className=\"navbar-item\" title={props.tooltip} onClick={props.onClick}>\n {props.children}\n </a>\n);\n/** Een link in de hero head\n * @param props props\n * @returns een link in de hero head\n * @example <Hero.Head.Link to=\"https://www.loon.be\" tooltip=\"Loon.be\">Loon.be</Hero.Head.Link>\n */\nHeroHead.Link = (props: {\n children: React.ReactNode;\n tooltip?: string;\n to?: string;\n target?: '_blank' | '_self' | '_parent' | '_top';\n rel?:\n | 'alternat'\n | 'author'\n | 'bookmark'\n | 'external'\n | 'help'\n | 'license'\n | 'next'\n | 'nofollow'\n | 'noreferrer'\n | 'noopener'\n | 'prev'\n | 'search'\n | 'tag';\n}) => (\n <a\n className=\"navbar-item\"\n title={props.tooltip}\n href={props.to}\n target={props.target ?? '_blank'}\n rel={props.rel ?? 'noopener'}\n >\n {props.children}\n </a>\n);\n\n/** Top-bar van de hero met\n * - een BurgerMenu voor de navigatie-items\n * - items aan de rechterkant van het scherm\n * @param props props\n * @returns een HeroHead met daarin optionele links of buttons\n * @example\n * <Hero.Head>\n * <Hero.Head.Button onClick={handleClickNotify}>Notify</Hero.Head.Button>\n * <Hero.Head.Button onClick={handleClickClear}>Clear</Hero.Head.Button>\n * <Hero.Head.Link to=\"https://www.bulma.io\">Bulma</Hero.Head.Link>\n * <Hero.Head.Link to=\"https://www.nodeJS.org\">NodeJS</Hero.Head.Link>\n * </Hero.Head>\n */\nHero.Head = HeroHead;\n\n/**\n * BOdy of the hero, which could contain a title and/or subtitle\n * @param props props\n * @returns hero body with content\n * @example\n * <Hero.Body>\n * <Title>Title</Title>\n * <Subtitle>Subtitle</Subtitle>\n * </Hero.Body>\n */\nHero.Body = (props: { children: React.ReactNode }) => (\n <div className=\"hero-body\">\n <div className=\"container\">{props.children}</div>\n </div>\n);\n\n/** hero foot */\nconst Foot = (props: { children: React.ReactNode }) => (\n <div className=\"hero-foot\">\n <nav className=\"tabs is-boxed is-fullwidth container\">{props.children}</nav>\n </div>\n);\n\n/** Navigation ItemList voor In een Hero Foot. Parent should be <Hero.Foot> and children should be <Hero.Foot.NavItem>\n * @param props props\n * @returns Navigation Item List for Hero's\n * @example\n * <Hero.Foot.NavList>\n * <Hero.Foot.NavItem to=\"/\">URL </Hero.Foot.NavItem>\n * <Hero.Foot.NavItem to=\"/\">URL </Hero.Foot.NavItem>\n * </Hero.Foot.NavList>\n */\nFoot.NavList = (props: { children: React.ReactNode }) => <ul>{props.children}</ul>;\n/** Navigation Item voor in een Hero Foot. Parent should be <Hero.Foot.NavList>\n * @param props props\n * @returns Navigation Item for Hero's\n * @example <Hero.Foot.NavItem to=\"/\">URL</Hero.Foot.NavItem>\n */\nFoot.NavItem = (props: {\n children: React.ReactNode;\n to: string;\n active?: boolean;\n target?: '_blank' | '_self' | '_parent' | '_top';\n tooltip?: string;\n rel?:\n | 'alternat'\n | 'author'\n | 'bookmark'\n | 'external'\n | 'help'\n | 'license'\n | 'next'\n | 'nofollow'\n | 'noreferrer'\n | 'noopener'\n | 'prev'\n | 'search'\n | 'tag';\n}) => (\n <li className={props.active ? 'is-active' : undefined} title={props.tooltip}>\n <a href={props.to} target={props.target ?? '_blank'} rel={props.rel ?? 'noopener'}>\n {props.children}\n </a>\n </li>\n);\n\n/**\n * Hero foot with navigation\n * @param props props\n * @returns hero foot with navigation\n * @example\n * <Hero.Foot>\n * <ul>\n * <li className=\"is-active\"><a href=\"\">Active Navigation Link </a></li>\n * <li><a href=\"\">Another Navigation Link</a></li>\n * </ul>\n * </Hero.Foot>\n\n* <Hero.NavList>\n * <Hero.NavItem to=\"/\">Navigation Link</Hero.NavItem>\n * </Hero.NavList>\n */\nHero.Foot = Foot;\n\nexport { Hero };\nexport type { HeroProps };\n","import React from 'react';\n\ntype ImageProps = {\n /** de ratio (width x height) van de afbeelding */\n ratio:\n | '1by1'\n | '5by4'\n | '4by5'\n | '4by3'\n | '3by4'\n | '3by2'\n | '2by3'\n | '5by3'\n | '3by5'\n | '16by9'\n | '9by16'\n | '2by1'\n | '1by2'\n | '3by1'\n | '1by3'\n | 'square';\n /** geef een gewenste width op in geval van een ratio. Als er geen waarde is, wordt de parent gevuld\n * voor ratio='square' MOETEN de string literal waarden worden gebruikt */\n imgWidth?: '16' | '24' | '32' | '48' | '64' | '96' | '128' | string;\n /** wordt de afbeelding rond ? LET OP: Alleen voor ratio == 'square'! */\n isRounded?: boolean;\n /** src-attribuut van image tag */\n src: string;\n /** alt-attribuut van image tag */\n alt: string;\n /** een optionele figcaption */\n figCaption?: string;\n /** classNames voor de omringende div */\n className?: string;\n};\n\n/**\n * Een afbeelding met een vastgestelde aspect ratio.\n * Voor de ratio 'square' kan er een size worden opgegeven.\n * De andere ratio's nemen de gehele width van de parent-container in.\n * @param props\n * @returns an image with a fixed aspect ratio\n * @example <Image ratio=\"1by1\" src=\"https://www.loon.be/images/logo.png\" alt=\"Loon.be\" />\n */\nfunction Image(props: ImageProps): JSX.Element {\n let figClasses = `image is-${props.ratio}`;\n if (props.ratio === 'square') figClasses = `image is-${props.imgWidth || 128}x${props.imgWidth || 128}`;\n\n const imgClasses = props.isRounded && props.ratio === 'square' ? 'is-rounded' : undefined;\n\n return (\n <div className={props.className} style={props.ratio === 'square' ? undefined : { width: props.imgWidth }}>\n <figure className={figClasses}>\n <img className={imgClasses} src={props.src} alt={props.alt}></img>\n {props.figCaption && <figcaption className=\"help is-info\">{props.figCaption}</figcaption>}\n </figure>\n </div>\n );\n}\n\nexport { Image };\nexport type { ImageProps };\n","import React, { CSSProperties } from 'react';\n\ntype SectionPropsType = {\n children: React.ReactNode;\n className?: string;\n styles?: CSSProperties;\n};\n\n/**\n * Maak een simpele container m een pagina te verdelen in secties.\n * een section heeft een responsive padding.\n * @param props alleen de children van de section\n * @returns een sectie voor op de pagina, met ruimte eromheen\n * @example <Section>This is a section</Section>\n */\nexport function Section({ children, className: classes, styles }: SectionPropsType): JSX.Element {\n let className = 'section ';\n if (className) className += ` ${classes}`;\n\n return (\n <section className={className} style={styles}>\n {children}\n </section>\n );\n}\n","import React, { CSSProperties } from 'react';\nimport { AlignmentProp } from '~/loon-react-bulma-types';\n\n/** maak een horizontale flexbox container om items naast elkaar (default: van links naar rechts) neer te zetten, met of zonder wrappen */\nconst Horizontal = (props: {\n /** wat moet er in de flexbox container komen */\n children: React.ReactNode;\n /** moeten de items gewrapped worden (meerdere rijen/kolommen) (default = false) */\n wrap?: boolean;\n /** moeten de items van eind tot begin of begin tot eind komen? (default = false) */\n reverse?: boolean;\n /** de ruimte tussen items (default = 0px):\n * - number: aantal px\n * - string: '16px', '1em', '1rem', etc\n * Kan voor kolom/rij anders worden aangegeven\n */\n gap?:\n | number\n | string\n | {\n /** gap voor row */\n row: number | string;\n /** gap voor column */\n col: number | string;\n };\n /** alignment van de items (default = 'l') */\n alignment?: AlignmentProp;\n /** max width van een item in de horizontal scroll area\n * - number: aantal px\n * - string: '160x', '10em', etc.\n */\n maxItemWidth?: number | string;\n /** max width van een item in de horizontal scroll area\n * - number: aantal px\n * - string: '160x', '10em', etc.\n */\n minItemWidth?: number | string;\n}) => {\n // gap instellingen voor flexbox\n let gap = '0px';\n if (typeof props.gap === 'number') gap = props.gap + 'px';\n else if (typeof props.gap === 'string' && !isNaN(+props.gap)) gap = props.gap + 'px';\n else if (typeof props.gap === 'string') gap = props.gap;\n else if (props.gap) {\n const row = typeof props.gap.row === 'number' ? props.gap.row + 'px' : props.gap.row;\n const col = typeof props.gap.col === 'number' ? props.gap.col + 'px' : props.gap.col;\n gap = `${row} ${col}`;\n }\n\n // alignment voor flexbox\n let alignment = 'flex-start';\n if (props.alignment === 'c') alignment = 'center';\n else if (props.alignment === 'r') alignment = 'flex-end';\n\n const itemStyle = React.useMemo(\n () =>\n ({\n maxWidth: typeof props.maxItemWidth === 'number' ? `${props.maxItemWidth}px` : props.maxItemWidth || null,\n minWidth: typeof props.minItemWidth === 'number' ? `${props.minItemWidth}px` : props.minItemWidth || null,\n } as CSSProperties),\n [props.maxItemWidth, props.minItemWidth]\n );\n\n const containerStyle = React.useMemo(\n () =>\n ({\n display: 'flex',\n flexDirection: props.reverse ? 'row-reverse' : 'row',\n flexWrap: props.wrap ? 'wrap' : 'nowrap',\n justifyContent: alignment,\n alignItems: 'center',\n alignContent: 'center',\n gap,\n overflowX: props.wrap ? 'hidden' : 'auto',\n paddingBottom: '22px', // om te voorkomen dat er een scrollbar in de verkeerde richting bijkomt\n } as CSSProperties),\n [props.reverse, props.alignment, props.wrap]\n );\n\n return (\n <div className=\"lbr-flex-horizontal\" style={containerStyle}>\n {React.Children.toArray(props.children).map((child, index) => (\n <div className=\"lbr-flex-item\" key={index} style={itemStyle}>\n {child}\n </div>\n ))}\n </div>\n );\n};\n\n/** maak een verticale flexbox container om items onder elkaar (default van boven naar beneden) neer te zetten, met of zonder wrappen */\nconst Vertical = (props: {\n /** wat moet er in de flexbox container komen */\n children: React.ReactNode;\n /** moeten de items gewrapped worden (meerdere rijen/kolommen) (default = false) */\n wrap?: boolean;\n /** moeten de items van eind tot begin of begin tot eind komen? (default = false) */\n reverse?: boolean;\n /** de ruimte tussen items (default = 0px):\n * - number: aantal px\n * - string: '16px', '1em', '1rem', etc\n * Kan voor kolom/rij anders worden aangegeven\n */\n gap?:\n | number\n | string\n | {\n /** gap voor row */\n row: number | string;\n /** gap voor column */\n col: number | string;\n };\n /** alignment van de items (default = 'l') */\n alignment?: AlignmentProp;\n /** alleen voor verticale flexboxen: een met een maximale hoogte waarna de container gaat scrollen */\n maxHeight?: number | string;\n}) => {\n // gap instellingen voor flexbox\n let gap = '0px';\n if (typeof props.gap === 'number') gap = props.gap + 'px';\n else if (typeof props.gap === 'string' && !isNaN(+props.gap)) gap = props.gap + 'px';\n else if (typeof props.gap === 'string') gap = props.gap;\n else if (props.gap) {\n const row = typeof props.gap.row === 'number' ? props.gap.row + 'px' : props.gap.row;\n const col = typeof props.gap.col === 'number' ? props.gap.col + 'px' : props.gap.col;\n gap = `${row} ${col}`;\n }\n\n // alignment voor flexbox\n let alignment = 'flex-start';\n if (props.alignment === 'c') alignment = 'center';\n if (props.alignment === 'r') alignment = 'flex-end';\n\n const containerStyle = React.useMemo(\n () =>\n ({\n display: 'flex',\n flexDirection: props.reverse ? 'column-reverse' : 'column',\n flexWrap: props.wrap ? 'wrap' : 'nowrap',\n justifyContent: alignment,\n alignItems: 'stretch',\n alignContent: 'stretch',\n gap,\n overflowY: props.wrap ? 'hidden' : 'auto',\n // specifiek voor verticale flexbox\n maxHeight:\n typeof props.maxHeight == 'number' || !isNaN(+(props.maxHeight || NaN))\n ? `${props.maxHeight}px`\n : props.maxHeight,\n } as CSSProperties),\n [props.reverse, props.wrap, props.alignment, props.gap, props.maxHeight]\n );\n\n return (\n <div className=\"lbr-flex-vertical\" style={containerStyle}>\n {React.Children.toArray(props.children).map((child, index) => (\n <div className=\"lbr-flex-item\" key={index}>\n {child}\n </div>\n ))}\n </div>\n );\n};\n\n/**\n * Maak een ScrollArea om in een bepaalde richting te kunnen scrollen. De scrollareas maken gebruik van flexbox.\n */\nconst ScrollArea = {\n /** maak een horizontale flexbox container om items naast elkaar (default: van links naar rechts) neer te zetten, met of zonder wrappen\n * @param props\n * @returns ScrollArea in horizontale richting\n * @example <ScrollArea.Horizontal>...</ScrollArea.Horizontal>\n */\n Horizontal,\n /** maak een verticale flexbox container om items onder elkaar (default van boven naar beneden) neer te zetten, met of zonder wrappen\n * @param props\n * @returns ScrollArea in verticale richting\n * @example <ScrollArea.Vertical>...</ScrollArea.Vertical>\n */\n Vertical,\n};\nexport { ScrollArea };\n","import React from 'react';\n\ntype CopyType = {\n /**\n * Kopieer een waarde naar het clipboard, om die daarna ergens te kunnen plakken.\n * @param valueToCopy De waarde omte copy-pasten\n */\n copy: (valueToCopy: any) => void;\n /** clear de time-out en reset \"copied\" naar \"false\" */\n reset: () => void;\n /** Als er bij het kopiëren iets mis gaat, is de error != null */\n error: Error | null;\n /** is de waarde gekopieerd? Is \"true\" als een item gekopieerd is, totdat reset() wordt aangeroepen of de timeout over is */\n copied: boolean;\n};\n\n/**\n * Hook om een waarde naar de navigator.clipboard te kopiëren en die daarna ergens te plakken.\n * @param timeout timeout in ms voordat de copy-reset gebeurt (default = 2000)\n * @returns een object met de functies copy() en reset(), een boolean copied en een error\n * @example const { copy, reset, copied, error } = useClipboard();\n */\nfunction useClipboard(timeout: number = 2000) {\n const [error, setError] = React.useState<Error | null>(null);\n const [copied, setCopied] = React.useState(false);\n const [copyTimeout, setCopyTimeout] = React.useState<any | null>(null);\n\n const handleCopyResult = (value: boolean) => {\n clearTimeout(copyTimeout);\n setCopyTimeout(setTimeout(() => setCopied(false), timeout));\n setCopied(value);\n };\n\n /**\n * Kopieer een waarde naar het clipboard, om die daarna ergens te kunnen plakken.\n * @param valueToCopy De waarde omte copy-pasten\n */\n const copy = (valueToCopy: any) => {\n if ('clipboard' in navigator)\n navigator.clipboard\n .writeText(valueToCopy)\n .then(() => handleCopyResult(true))\n .catch((err) => setError(err));\n else\n setError(new Error('useClipboard: navigator.clipboard is not supported'));\n\n };\n\n /** clear de time-out en reset \"copied\" naar \"false\" */\n const reset = () => {\n setCopied(false);\n setError(null);\n clearTimeout(copyTimeout);\n };\n\n return { copy, reset, error, copied } as CopyType;\n}\n\nexport { useClipboard };\n","import { useEffect, useState, useRef } from 'react';\n\n/** opties voor de useDebounce Hook */\ntype useDebounceHookOptions = {\n /** moet er wel een value-update zijn na de 1e wijziging (Default: false) */\n leading?: boolean;\n /** vertraging (in ms) voor het updaten van de debounced waarde (Default: 500ms) */\n delay: number;\n};\n\n/**\n * debounce-hook voor een value. Kan handig zijn om een zware operatie uit \n * te voeren, bijvoorbeeld op zoeken in een lijst van objecten, gebaseerd op react state.\n * met de cancel-function kan een value-update worden geannuleerd.\n * @param value de debounceable value\n * @param options extra opties\n * @returns de waarde en een cancel-functie\n * @example const { value, cancel } = useDebounce(value, { delay: 1000 });\n */\nfunction useDebouncedValue<T = any>(value: T, options: useDebounceHookOptions = { leading: false, delay: 500 }): readonly [T, () => void] {\n const [_value, setValue] = useState(value);\n const mountedRef = useRef(false);\n const timeoutRef = useRef<number | undefined>(undefined);\n const cooldownRef = useRef(false);\n\n /** annuleer het updaten van de debounce-value */\n const cancel = () => window.clearTimeout(timeoutRef.current);\n\n useEffect(() => {\n if (mountedRef.current)\n if (!cooldownRef.current && options.leading) {\n cooldownRef.current = true;\n setValue(value);\n } else {\n cancel();\n timeoutRef.current = window.setTimeout(() => {\n cooldownRef.current = false;\n setValue(value);\n }, options.delay);\n }\n\n }, [value, options.leading, options.delay]);\n\n useEffect(() => {\n mountedRef.current = true;\n return cancel;\n }, []);\n\n return [_value, cancel] as const;\n}\n\nexport { useDebouncedValue };\nexport type { useDebounceHookOptions };\n","import React from 'react';\n\ntype KeyboardModifiers = {\n alt: boolean;\n ctrl: boolean;\n meta: boolean;\n mod: boolean;\n shift: boolean;\n};\n\ntype Hotkey = KeyboardModifiers & {\n key?: string;\n};\n\ntype CheckHotkeyMatch = (event: KeyboardEvent) => boolean;\ntype ReactHotkeyItem = [string, (event: React.KeyboardEvent<HTMLElement>) => void];\ntype HotkeyItem = [string, (event: KeyboardEvent) => void];\n\n/** parse een key-combi naar een Hotkey object */\nfunction parseHotkey(hotkey: string): Hotkey {\n const keys = hotkey\n .toLowerCase()\n .split('+')\n .map((part) => part.trim());\n\n const modifiers: KeyboardModifiers = {\n alt: keys.includes('alt'),\n ctrl: keys.includes('ctrl'),\n meta: keys.includes('meta'),\n mod: keys.includes('mod'),\n shift: keys.includes('shift'),\n };\n\n const reservedKeys = ['alt', 'ctrl', 'meta', 'shift', 'mod'];\n const freeKey = keys.find((key) => !reservedKeys.includes(key));\n\n return {\n ...modifiers,\n key: freeKey,\n };\n}\n\n/** vergelijk hotkeys */\nfunction isExactHotkey(hotkey: Hotkey, event: KeyboardEvent): boolean {\n const { alt, ctrl, meta, mod, shift, key } = hotkey;\n const { altKey, ctrlKey, metaKey, shiftKey, key: pressedKey } = event;\n\n if (alt !== altKey)\n return false;\n\n if (mod) {\n if (!ctrlKey && !metaKey)\n return false;\n } else {\n if (ctrl !== ctrlKey)\n return false;\n\n if (meta !== metaKey)\n return false;\n }\n if (shift !== shiftKey)\n return false;\n\n\n if (\n key &&\n (pressedKey.toLowerCase() === key.toLowerCase() ||\n event.code.replace('Key', '').toLowerCase() === key.toLowerCase())\n )\n return true;\n\n return false;\n}\n\n/** match hotkeys */\nfunction getHotkeyMatcher(hotkey: string): CheckHotkeyMatch {\n return (event) => isExactHotkey(parseHotkey(hotkey), event);\n}\n\n/** getHotkeyHandler kan bijvoorbeeld op een onKeyDown() handler gebruikt worden. Om bijvoorbeeld hotkeys aan inputs toe te voegen\n * @param hotkeys een array van keyboard-combinaties met een handler.\n * @example\n * <input type=\"text\" onKeyDown={getHotkeyHandler(['alt+shift+l'])} />\n */\nfunction getHotkeyHandler(hotkeys: ReactHotkeyItem[]) {\n return (event: React.KeyboardEvent<HTMLElement>) => {\n hotkeys.forEach(([hotkey, handler]) => {\n if (getHotkeyMatcher(hotkey)(event.nativeEvent)) {\n event.preventDefault();\n handler(event);\n }\n });\n };\n}\n\nfunction shouldFireEvent(event: KeyboardEvent) {\n if (event.target instanceof HTMLElement)\n return !['INPUT', 'TEXTAREA', 'SELECT'].includes(event.target.tagName);\n\n return true;\n}\n\n/**\n * Hook om te luisteren naar keyboard-combinaties op het document.\n * formats: \n * \"mod+s\" = Cmd + s op macOS, Ctrl + S op Windows,\n * \"ctrl+shift+x\" = Ctrl + Shift + x,\n * \"alt + shiftt + L\" = Alt + Shfit + l, spaties zijn toegestaan,\n * \"ArrowLeft\" = @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values voor speciale keys\n * \n * @param hotkeys een array van keyboard-combinaties met een handler.\n * @example\n * const hks: HotkeyItem[] = [\n * ['mod+J', () => console.log('mod + J pressed')],\n * ['shift+L', () => console.log('Shift and L pressed')],\n * ];\n * useHotkeys(hks);\n */\nfunction useHotkeys(hotkeys: HotkeyItem[]) {\n React.useEffect(() => {\n const keydownListener = (event: KeyboardEvent) => {\n hotkeys.forEach(([hotkey, handler]) => {\n if (getHotkeyMatcher(hotkey)(event) && shouldFireEvent(event)) {\n event.preventDefault();\n handler(event);\n }\n });\n };\n\n document.documentElement.addEventListener('keydown', keydownListener);\n return () => document.documentElement.removeEventListener('keydown', keydownListener);\n }, [hotkeys]);\n}\n\n\nexport { useHotkeys, getHotkeyHandler, parseHotkey, getHotkeyMatcher };\nexport type { Hotkey, HotkeyItem };\n","import React from 'react';\n\n/** default serializer met `JSON.stringify` van de waar `T` naar een `string` */\nfunction serializeJSON<T>(value: T): string {\n try {\n return JSON.stringify(value);\n } catch (error) {\n throw new Error(`useLocalState failed to serialize the value: ${(error as Error).message}`);\n }\n}\n\n/** default deserializer met `JSON.parse` van een `string` naar de waarde `T` */\nfunction deserializeJSON<T>(value: string): T {\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n throw new Error(`useLocalState failed to deserialize the value: ${(error as Error).message}`);\n }\n}\n\ntype UseLocalStoredStateFn<T = string> = {\n /** key to store the value with in Local Storage */\n key: string;\n /** initial value (if its non-existent in Local Storage) */\n initialValue: T;\n /** your own serializing-function. Implement when you cannot use `JSON.stringify` */\n serialize?: (value: T, replacer?: (key: string, value: any) => any, space?: string | number) => string;\n /** your own deserializing-funtion. Implement when you cannot use `JSON.parse` */\n deserialize?: (value: string, reviver?: (key: string, value: any) => any) => T;\n}\n\n/**\n * Hook die werkt als `React.useState<T|undefined>()`, maar waarbij de waarde ook wordt opgeslagen in Local Storage.\n * De waarde blijft dan bij het refreshen van de pagina aanwezig. Als de pagina dan ververst wordt, word de al bestaande waarde gebruikt, niet de initialValue.\n * @param {UseLocalStoredStateFn} params voor de hook \n * @returns {[T, (value: T) => void]} tuple met een value en een setValue-function (net als React.useState)\n * @description\n * | Property | Type | Description |\n * |--------------|------------|---------------------------------------------------------------|\n * | key | `string` | De key waaronder de waarde in Local Storage wordt opgeslagen. |\n * | initialValue | `T` | De initiale waarde. |\n * | serialize | `function` | (optional) functie om de waarde om te zetten naar een string. Implementeer als de waarde __GEEN__ gebruik kan maken van `JSON.stringify()`! |\n * | deserialize | `function` | De functie die een string omzet naar de waarde. Implementeer als de waarde __GEEN__ gebruik kan maken van `JSON.parse()`! |\n * @example\n * import { useLocalStoredState } from 'loon-bulma-react';\n * const { value, setValue } = useLocalStoredState({ key: 'myKey', initialValue: 'Oompa Loompa' });\n * // 1. value is 'Oompa Loompa', put it somewhere on the screen\n * // 2. change the value to something else\n * // 3. refresh the page.\n * // 4. see te new value on the page.\n * // 5. you can also check the value in Local Storage in devtools.\n */\nfunction useLocalStoredState<T = string>({ key, initialValue, deserialize = deserializeJSON, serialize = serializeJSON }: UseLocalStoredStateFn<T>): readonly [T | undefined, (value: T) => void, () => void] {\n const [storedValue, setStoredValue] = React.useState<T | undefined>(() => {\n // als geen window, dan initialValue\n if (typeof window === \"undefined\") return initialValue;\n try {\n // haal de waarde op uit localStorage en deserialize deze\n const item = window.localStorage.getItem(key);\n return item ? deserialize(item) : initialValue;\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.error(`useLocalState failed to get the value: ${(error as Error).message}`);\n return initialValue;\n }\n });\n\n /**\n * Set state to a value AND save it in Local Storage\n */\n const setValue = React.useCallback((value: T) => {\n try {\n const val = value instanceof Function ? value(storedValue) : value;\n setStoredValue(val);\n if (typeof window !== \"undefined\")\n window.localStorage.setItem(key, serialize(val));\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.error(`useLocalState failed to store the value: ${(error as Error).message}`);\n }\n }, []);\n\n const remove = React.useCallback(() => {\n if (typeof window !== \"undefined\")\n window.localStorage.removeItem(key);\n }, []);\n\n return [\n /** the value */\n storedValue,\n /** set state to a value AND save it to Local Storage. */\n setValue,\n /** remove state from local storage */\n remove\n\n ] as const;\n}\n\nexport { useLocalStoredState, serializeJSON, deserializeJSON };\n","import React from 'react';\n\nexport type UncontrolledMode = 'initial' | 'controlled' | 'uncontrolled';\n\nexport type UncontrolledOptions<T> = {\n value: T | null | undefined;\n defaultValue: T | null | undefined;\n finalValue: T | null | undefined;\n onChange(value: T | null | undefined): void;\n onValueUpdate?(value: T | null | undefined): void;\n rule: (value: T | null | undefined) => boolean;\n};\n\n/** hook voor het managen van state voor 'controlled' en 'uncontrolled' componenten (inputs etc). \n * het is met deze hook mogelijk om een component als 'controlled' EN 'uncontrolled' te gebruiken.\n * @param options.value waarde\n * @param options.defaultValue default waarde\n * @param options.finalValue eindwaarde\n * @param options.onChange callback voor waarde verandering\n * @param options.onValueUpdate callback voor waarde update\n * @param options.rule bepaal welke waarde initieel gebruikt wordt. zie examples\n * @returns [value, setalue, controllerMode]\n *\n * @example \n * const [_value, handleChange] = useUncontrolled({\n * value: VALUE, \n * defaultValue: DEFAULT, \n * finalValue: 'final', \n * onChange: (v) => {console.log(v)}, \n * rule: (v) => typeof v === 'string'\n * });\n * \n * return <input type=\"text\" value={_value} onChange={(evt) => handleChange(evt.target.value)} />\n * \n * // als VALUE = 'oi' && DEFAULT = 'there': defaultValue & finalValue ignored in controlled components, _value == VALUE == 'oi'\n * // als VALUE = null && DEFAULT = 'there': rule() returns 'false', defaultValue is used, _value == defaultValue == 'there'\n * // als VALUE = null && DEFAULT = null: rule() returns 'false' voor beiden, finalValue is used, _value == defaultValue == 'final'\n * \n * @example - uncontrolled & controlled\n * // Uncontrolled\n* <input />\n* <input defaultValue=\"hello\" />\n* <input onChange={() => {}} /> // still possible since value is stored in internal state\n* \n* // Controlled\n* <input value=\"Hello\" onChange={() => {}} />\n\n */\nexport function useUncontrolled<T>({\n value,\n defaultValue,\n finalValue,\n rule,\n onChange,\n onValueUpdate,\n}: UncontrolledOptions<T>): readonly [T | null | undefined, (nextValue: T | null | undefined) => void, UncontrolledMode] {\n // als de rule `true` is, dan is deze component controlled\n const isControlled = rule(value);\n\n // initialize state\n const modeRef = React.useRef<UncontrolledMode>('initial');\n const initialValue = rule(defaultValue) ? defaultValue : finalValue;\n const [uncontrolledValue, setUncontrolledValue] = React.useState(initialValue);\n\n // bepaal de gebruikte waarde\n let definitiveValue = isControlled ? value : uncontrolledValue;\n\n // overgang van controlled naar uncontrolled\n // komt voor als de waarde op null of undefined geset wordt (invalid waarde)\n // in dat geval wordt de finalValue gebruikt.\n if (!isControlled && modeRef.current === 'controlled')\n definitiveValue = finalValue;\n\n modeRef.current = isControlled ? 'controlled' : 'uncontrolled';\n const mode = modeRef.current;\n\n const handleChange = (nextValue: T | null | undefined) => {\n typeof onChange === 'function' && onChange(nextValue);\n\n // Controlled input only triggers onChange event and expects\n // the controller to propagate new value back.\n\n // controlled inputs gebruiken alleen de onChange.Deze krijgen via de parameter `value` de nieuwe waarde\n if (mode === 'uncontrolled')\n setUncontrolledValue(nextValue);\n\n };\n\n React.useEffect(() => {\n if (mode === 'uncontrolled')\n setUncontrolledValue(definitiveValue);\n\n typeof onValueUpdate === 'function' && onValueUpdate(definitiveValue);\n }, [mode, definitiveValue]);\n\n return [definitiveValue, handleChange, modeRef.current] as const;\n}\n","\nimport React from 'react';\nimport { useUncontrolled } from './useUncontrolled';\n\ntype PaginationParams = {\n /** Geselecteerde pagina op 1e render, default = 1 */\n initialPage?: number;\n /** Controlled actieve page number */\n page?: number;\n /** Totaal aantal pages */\n total: number;\n /** aantal directe buren van de geselecteerde pagina (default = 1) */\n siblings?: number;\n /** aantal zichtbare pagina's aan de uiteinden van de paginatie (default = 1) */\n boundaries?: number;\n /** callback voor het wijzigigen van de pagina */\n onChange: (page: number | null | undefined) => void;\n}\n\nexport const DOTS = 'dots';\n\nexport function usePagination({\n total,\n siblings = 1,\n boundaries = 1,\n page,\n initialPage = 1,\n onChange,\n}: PaginationParams) {\n const [activePage, setActivePage] = useUncontrolled({\n value: page,\n onChange,\n defaultValue: initialPage,\n finalValue: initialPage,\n rule: (_page: number | null | undefined) => typeof _page === 'number' && _page <= total,\n });\n\n const setPage = (pageNumber: number) => {\n if (pageNumber <= 0)\n setActivePage(1);\n else if (pageNumber > total)\n setActivePage(total);\n else\n setActivePage(pageNumber);\n };\n\n const next = () => setPage((activePage ?? 0) + 1);\n const prev = () => setPage((activePage ?? 0) - 1);\n const first = () => setPage(1);\n const last = () => setPage(total);\n\n const range = React.useCallback((start: number, end: number): Array<number> => {\n const length = end - start + 1;\n return Array.from({ length }, (_, i) => i + start);\n }, []);\n\n const paginationRange = React.useMemo((): (number | 'dots')[] => {\n // siblings (left/right) + boundaries(left/right) + currentPage + 2*DOTS\n const totalPageNumbers = siblings * 2 + 3 + boundaries * 2;\n\n // als dat er meer zijn dan het totaal, dan gebruiken we totaal\n if (totalPageNumbers >= total)\n return range(1, total);\n\n const leftSiblingIndex = Math.max((activePage ?? 0) - siblings, boundaries);\n const rightSiblingIndex = Math.min((activePage ?? 0) + siblings, total - boundaries);\n\n // puntjes tonen we alleen als er meer dan 1 positie in die richting is\n const shouldShowLeftDots = leftSiblingIndex > boundaries + 2;\n const shouldShowRightDots = rightSiblingIndex < total - (boundaries + 1);\n\n if (!shouldShowLeftDots && shouldShowRightDots) {\n const leftItemCount = siblings * 2 + boundaries + 2;\n return [...range(1, leftItemCount), DOTS, ...range(total - (boundaries - 1), total)];\n }\n\n if (shouldShowLeftDots && !shouldShowRightDots) {\n const rightItemCount = boundaries + 1 + 2 * siblings;\n return [...range(1, boundaries), DOTS, ...range(total - rightItemCount, total)];\n }\n\n return [\n ...range(1, boundaries),\n DOTS,\n ...range(leftSiblingIndex, rightSiblingIndex),\n DOTS,\n ...range(total - boundaries + 1, total),\n ];\n }, [total, siblings, activePage]);\n\n return {\n range: paginationRange,\n active: activePage,\n setPage,\n next,\n prev,\n first,\n last,\n };\n}\n","import React from 'react';\n\n/**\n * Een toggle tussen twee state-opties. de state switched tussen de twee.\n * @param initialState startwaarde\n * @param options 2 toggle-opties\n * @returns een state-toggle function\n * @example const [state, toggle] = useToggle(\"yes\", [\"yes\", \"no\"]);\n */\nfunction useToggle<T>(initialState: T, options: [T, T]): readonly [T, (value?: T) => void] {\n const [state, setState] = React.useState<T>(initialState);\n\n const toggle = (value?: React.SetStateAction<T>) => {\n if (typeof value !== 'undefined')\n setState(value);\n else\n setState((current) => {\n if (current === options[0])\n return options[1];\n return options[0];\n });\n };\n return [state, toggle] as const;\n}\n\n/**\n * useToggle voor booleans\n * @param initialState initia\n * @returns een state-toggle met booleans\n * @example const [state, toggle] = useBoolToggle(true);\n */\nfunction useBoolToggle(initialState = false): readonly [boolean, (value?: boolean) => void] {\n return useToggle<boolean>(initialState, [true, false]);\n}\n\nexport { useToggle, useBoolToggle };\n","import React from 'react';\n\n/**\n * hook voor gebruik van een gevalideerde waarde.\n * @param initialValue de beginwaarde (optioneel)\n * @param validation validatie-functie (optioneel)\n * @returns een uitgebreid useState hook met een gevalideerde waarde\n * @example\n * const validation = (value?: string): [boolean, string] => {\n * console.log(value);\n * if (!value) return [false, 'required'];\n * else if (value.length < 3) return [false, 'too short'];\n * return [true, ''];\n * };\n * const [{ value, lastValidValue, valid, invalidMsg }, onChange] = useValidatedState<string>('', validation);\n *\n * <input onChange={onChange} value={value} />\n */\nexport function useValidatedState<T>(initialValue?: T, validation?: (value?: T) => [boolean, string]) {\n\n const [initialValid, initialMsg] = validation ? validation(initialValue) : [true, ''];\n const [value, setValue] = React.useState<T | undefined>(initialValue ?? undefined);\n const [valid, setValid] = React.useState<boolean>(initialValid);\n const [invalidMsg, setInvalidMsg] = React.useState<string>(initialMsg);\n const [lastValidValue, setLastValidValue] = React.useState<T | undefined>(initialValid ? initialValue : undefined);\n\n /** onChange handler */\n const onChange = (val: T) => {\n const [isValid, invalidMsg] = validation ? validation(val) : [true, ''];\n if (isValid)\n setLastValidValue(val);\n\n setValid(isValid);\n setInvalidMsg(invalidMsg);\n setValue(val);\n };\n\n return [{ value, lastValidValue, valid, invalidMsg }, onChange] as const;\n}\n","import { faSearch, faSort, faSortDown, faSortUp } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { Reducer } from 'react';\nimport { useDebouncedValue, usePagination } from '~/hooks';\nimport { AlignmentProp } from '~/loon-react-bulma-types';\n\n// #region DataTable Types\n\n/** De props voor de DataTable Component zelf. */\ntype DataTableProps<T extends unknown> = {\n /** Titels voor de kolommen als die afwijken van de object-properties */\n columns: DataTableColumn<T>[];\n /** header-name van de default-sorteer-kolom (default: 1e kolom die 'sortable' is) */\n defaultSortCol?: string;\n /** (optionele) content voor de header. Verschijnt links van de search-bar */\n headerContent?: React.ReactNode;\n /** De array met daarin de data voor de datatabel */\n data: T[];\n /** welke data-object-property is uniek? Anders wordt de index gebruikt (liever niet, react-performance-reasons)\n * - als string: de property die uniek is: obj.<string>\n * - als function: stel een string samen die uniek is.\n */\n rowIdentifier?: string | ((item: T) => string);\n /** een functie om de classes op een row te zetten, op basis van het object */\n rowClasses?: (item: T, index?: number) => string;\n /** moet de tabel zichzelf wat kleiner maken ? */\n narrow?: boolean;\n /** Is de tabel gestreept? (om-en-om wit/grijze rijen) */\n striped?: boolean;\n /** is de tabel fullwidth ? (default true) */\n fullwidth?: boolean;\n /** is de tabel bordered? */\n bordered?: boolean;\n /** is de tabel hoverbaar (verkleuring rij waar de muis op hangt) */\n hoverable?: boolean;\n /** wat is het maximaal aantal rijen dat zichtbaar is zonder paginatie? Als 0 is er geen maximum aantal rijen (default 0) */\n maxRows?: number;\n /** placeholder voor zoekveld. Als er geen placeholder is (undefined or emptystring), is er geen zoek-veld */\n searchTxt?: string;\n /**\n * (Optionele) eigen zoek-functie. De default-zoek-functie wordt dan vervangen.\n * @param searchTerm de content van het zoekveld\n * @param items de items waarbinnen gezocht moet worden\n * @returns een array met de gefilterde items\n */\n onSearch?: (searchTerm: string, items: T[]) => T[];\n /** terugkoppeling voor een geselecteerde rij.\n * @param item: Het geselecteerde item\n * @param row: de tabel-rij waarop geklikt is (<tr> tag). Om de row 'selected' te laten lijken: toggle de 'is-selected' class\n */\n onRowSelected?(item: T, row: HTMLTableRowElement): void;\n /**\n * Als er geen rijen zijn om te renderen, wordt de ReactNode van deze functie gerendered. Er wordt dan geen lege tabel gerendered, maar een boodschap\n * @param isSearchResult is de no-rows het resultaat van een zoek-actie?\n * @example (isSearch:boolean) => isSearch ? <div>Er zijn geen rijen die voldoen aan uw zoek-opdracht</div> : <div>U heeft geen of een lege data-array opgegeven</div>\n */\n onNoRowsToRender?(isSearchResult: boolean): React.ReactNode;\n};\n\n/** Props voor het samenstellen van de kolommen van de tabel */\ntype DataTableColumn<T extends unknown> = {\n /** naam voor de kolom, als die anders is dan de key-value */\n header?: string;\n /** Sorteren op deze kolom mogelijk? zo ja:\n * - string: sorteer alfabetisch\n * - number: sorteer numeriek\n * - boolean: sorteer op true/false\n * - function: een eigen sorteermechanisme\n */\n sort?: true | false | ((a: T, B: T) => -1 | 0 | 1 | number);\n /** Wat is de object property die bij deze kolom hoort als je wil sorteren\n * - string: de object-property-key --> obj['colValue']\n * - function: samenstellen van de waarde.\n */\n value: string | JSX.Element | ((e: T) => string | JSX.Element);\n /** moet de kolom-content link, rechts of centraal aligned worden (default = 'l') */\n alignment?: AlignmentProp;\n /** een functie om een class per cell toe te voegen */\n columnClasses?: (item: T, index?: number) => string;\n // search?(item: T): boolean;\n};\n\n/** props voor de footer onder de </table>-sluit tag */\ntype DataTableFooterProps = {\n pageCount: number;\n currentPage: number;\n onPageChange: (e: number) => void;\n pagination: {\n range: (number | 'dots')[];\n active: number | null | undefined;\n setPage: (pageNumber: number) => void;\n next: () => void;\n prev: () => void;\n first: () => void;\n last: () => void;\n };\n};\n\n/** DataTable Actions */\ntype DataTableDispatch<T> = {\n /** het type action voor gebruik in de reducer */\n type: 'SET' | 'SORT' | 'SEARCH' | 'PAGE';\n /** de nieuwe waarde (T[]) OF de nieuwe page */\n value: T[] | IDataTableState<T> | number;\n sort?: string;\n};\n/** De State van de DataTable */\ntype IDataTableState<T extends unknown> = {\n /** alle items, alleen aanpassen met type 'SET' of 'SOURCE' */\n items: T[];\n /** items gefilterd, aangepast met sorting en searching */\n filteredItems: T[];\n /** de zichtbare items, altijd een subset van de gefilterde items (spliced obv maxRows en currentPage) */\n visibleItems: T[];\n /** het maximaal aantal rijen (0 voor alles op 1 pagina) */\n maxRows: number;\n // /** het huidige page-number */\n currentPage: number;\n /** de tabelkolommen */\n headers: DataTableColumn<T>[];\n /** de huidige sorteer-header of sorteer-header-reverse */\n sort: string;\n};\n\n// #endregion\n\n/**\n * de Reducer voor gebruik met de DataTable.\n * @generic T het type van de items in de DataTable\n * @param state de huidige state van de DataTable\n * @param action de actie die de state aanpast\n */\nfunction dataTableReducer<T extends unknown>(\n state: IDataTableState<T>,\n action: DataTableDispatch<T>\n): IDataTableState<T> {\n switch (action.type) {\n case 'SET': // zet de gehele content van de tabel opnieuw\n const newState = action.value as IDataTableState<T>;\n return {\n ...state,\n items: [...newState.items],\n filteredItems: [...newState.filteredItems],\n visibleItems: [...newState.filteredItems].splice(0, newState.maxRows),\n currentPage: 1,\n maxRows: newState.maxRows,\n headers: newState.headers.map(headerMapping),\n sort: action.sort!,\n };\n case 'SORT': // items zijn gesorteerd, zet de benodigde arrays\n return {\n ...state,\n sort: action.sort!,\n filteredItems: [...(action.value as T[])],\n visibleItems: [...state.filteredItems].splice((action.value as number) * state.maxRows, state.maxRows),\n };\n case 'SEARCH': // items zijn gezocht binnen de data, zet de arrays die wijzigen\n return {\n ...state,\n currentPage: 1,\n filteredItems: [...(action.value as T[])],\n visibleItems: [...(action.value as T[])].splice(0, state.maxRows),\n };\n case 'PAGE': // de pagina is aangepast, pas alleen de visible-items aan\n return {\n ...state,\n visibleItems: [...state.filteredItems].splice(((action.value as number) - 1) * state.maxRows, state.maxRows),\n currentPage: action.value as number,\n };\n // default:\n // return state;\n }\n}\n\n/**\n * Maak een datatable voor grote hoeveelheden data. Voor kleinere hoeveelheden: gebruik @see{@link Table}.\n * Een DataTable heeft pagination, zoekfunctie en sortering ingebouwd.\n * @param props\n * @returns een datatable.\n * @example\n * const nameSortFn = (a: IUser, b: IUser) => {\n * const aNaam = a.first_name + ' ' + a.last_name;\n * const bNaam = b.first_name + ' ' + b.last_name;\n * return (aNaam < bNaam) ? -1 : 1;\n * };\n *\n * const columns = [\n * { sort: true, value: 'id' },\n * { header: 'Naam', sort: nameSortFn, value: (v: IUser) => `${v.first_name} ${v.last_name}`, },\n * { header: 'Voornaam', sort: false, value: 'first_name' },\n * { header: 'Achternaam', sort: true value: 'last_name' },\n *\n * ];\n *\n * const [data, setData] = useState(tableData);\n * const handleRowClick = (item: IPersoon, rowEl: HTMLTableRowElement) => {\n * console.log(item, rowEl);\n * rowEl.classList.toggle('is-selected');\n * };\n * return (\n * <DataTable<IUser>\n * data={data}\n * columns={columns}\n * onSearch={(term: string, users: IUser[]) => users.filter((u) => u.language.startsWith(term))}\n * onRowSelected={(i, r) => handleRowClick(i, r)}\n * defaultSortCol=\"Naam\"\n * rowClasses={(item: IUser) => (item.first_name.startsWith('C') ? 'is-dangerous' : '')}\n * searchTxt=\"Zoek een persoon ...\"\n * rowIdentifier=\"id\"\n * striped={true}\n * hoverable={true}\n * narrow={false}\n * maxRows={20}\n * bordered={false}\n * onNoRowsToRender={(isSearch:boolean) => isSearch ?\n * <div>Er zijn geen rijen die voldoen aan uw zoek-opdracht</div> :\n * <div>U heeft geen of een lege data-array opgegeven</div>\n * }\n * headerContent={\n * <Button.Primary>Add</Button.Primary>\n * <Button.Warning>Change</Button.Warning>\n * <Button.Success>Refresh</Button.Success>\n * }\n * />\n * );\n *\n */\nfunction DataTable<T extends unknown>(props: DataTableProps<T>): JSX.Element {\n // set de classes voor de table\n let className = 'table';\n const { fullwidth, bordered, narrow, striped, hoverable } = props;\n if (fullwidth) className += ' is-fullwidth';\n if (bordered) className += ' is-bordered';\n if (narrow) className += ' is-narrow';\n if (striped) className += ' is-striped';\n if (hoverable) className += ' is-hoverable';\n\n const [searchTerm, setSearchTerm] = React.useState('');\n let defaultSort = props.defaultSortCol ?? '';\n if (defaultSort === '') {\n const firstCol = props.columns.filter((h) => !!h.sort)[0];\n if (firstCol.header) defaultSort = firstCol.header;\n else if (typeof firstCol.value === 'string') defaultSort = firstCol.value;\n }\n\n // de initial state van de tabel MOET in useReducer opgegeven worden\n const initialStateFn = (): IDataTableState<T> => {\n const initialState: IDataTableState<T> = {\n filteredItems: [...props.data],\n items: [...props.data],\n visibleItems: [...props.data].splice(0, props.maxRows || props.data.length),\n maxRows: props.maxRows || props.data.length,\n currentPage: 1,\n headers: props.columns,\n sort: defaultSort,\n };\n return initialState;\n };\n\n const [dataTableState, setDataTableState] = React.useReducer<\n Reducer<IDataTableState<T>, DataTableDispatch<T>>,\n IDataTableState<T>\n >(dataTableReducer, {} as IDataTableState<T>, initialStateFn);\n\n /** als de data of de columns of de maxRows aangepast wordt, dan moet de gehele state refreshed worden */\n React.useEffect(() => {\n const newState: IDataTableState<T> = {\n items: props.data,\n filteredItems: [],\n visibleItems: [...props.data].splice(0, props.maxRows ?? props.data.length),\n maxRows: props.maxRows || props.data.length,\n currentPage: 1,\n headers: props.columns.map(headerMapping),\n sort: dataTableState.sort,\n };\n newState.filteredItems =\n searchTerm == ''\n ? props.data\n : onSearch(searchTerm, {\n items: props.data,\n headers: props.columns.map(headerMapping),\n });\n\n let reverse = false;\n if (newState.sort) {\n reverse = newState.sort.endsWith('-reverse');\n const sorted: T[] = onSort(newState.sort.replace('-reverse', ''), newState.filteredItems);\n newState.filteredItems = reverse ? sorted.reverse() : sorted;\n }\n\n setDataTableState({ type: 'SET', value: newState, sort: reverse ? newState.sort + '-reverse' : newState.sort });\n }, [props.data, props.columns, props.maxRows]);\n\n /**\n * stel de geselecteerde page in.\n * @param page het geselecteerde pagina nummer (zichtbaar - 1)\n */\n const pageChanged = (page: number) => setDataTableState({ type: 'PAGE', value: page });\n\n /** handel het selecteren van sorteren af */\n const handleSort = (sortCol: string) => {\n const reverse = dataTableState.sort == sortCol;\n const sorted = onSort(sortCol, dataTableState.filteredItems);\n setDataTableState({\n type: 'SORT',\n value: reverse ? sorted.reverse() : sorted,\n sort: reverse ? sortCol + '-reverse' : sortCol,\n });\n };\n\n /**\n * Sorteer de tabel op een bepaalde kolom\n * @param sortColHeader de kolom-key vwaarop gesorteerd moet worden.\n * @returns\n */\n const onSort = React.useCallback(\n (sortColHeader: string, items: T[]): T[] => {\n const sortColumn = dataTableState.headers.find((h) => h.header == sortColHeader && h.sort);\n if (typeof sortColumn!.sort == 'function') return items.sort(sortColumn!.sort);\n else if (sortColumn!.sort)\n try {\n return defaultSortItems<T>(sortColumn!, items);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`DataTable Sorting Error: ${(e as Error).message}`);\n }\n return items;\n },\n [dataTableState.headers]\n );\n\n /** search-change afhandeling */\n const handleSearch = (searchTerm: string) => {\n const searchRslts = props.onSearch ? props.onSearch(searchTerm, dataTableState.items) : onSearch(searchTerm);\n setSearchTerm(searchTerm);\n setDataTableState({ type: 'SEARCH', value: searchRslts });\n };\n\n /**\n * Zoek een bepaalde term of regex in de tabel\n * @param term de zoekterm / regex\n */\n const onSearch = React.useCallback(\n (searchStr: string, newData?: { items: T[]; headers: DataTableColumn<T>[] }): T[] => {\n const rgx = createValidRegex(searchStr);\n const items = newData?.items ?? dataTableState.items; // als de data aangepast is, gebruik dan de nieuwe data\n const headers = newData?.headers ?? dataTableState.headers; // als de headers aangepast zijn, gebruik dan de nieuwe headers\n return items.filter((item) => {\n for (const h of headers) {\n let value: JSX.Element | string | null = null;\n if (typeof h.value == 'function') {\n value = h.value(item);\n if (typeof value != 'string') value = value.toString();\n } else if (typeof h.value == 'string') {\n value = (item as any)[h.value];\n if (value && typeof value != 'string') value = value.toString();\n }\n\n if (typeof value == 'string' && rgx && rgx.test(value)) return true;\n else if (typeof value == 'string' && value.toLowerCase().includes(searchStr.toLowerCase())) return true;\n }\n return false;\n });\n },\n []\n );\n\n /** wat te doen als er een rij geselecteerd is (alleen onRowSelected doen als die gedefinieerd is) */\n const onRowClicked = (item: T, row: HTMLTableRowElement) => {\n if (props.onRowSelected) props.onRowSelected(item, row);\n };\n\n const pagination = usePagination({\n total: Math.ceil(dataTableState.filteredItems.length / dataTableState.maxRows),\n onChange: (p: number | null | undefined) => p && pageChanged(p),\n page: dataTableState.currentPage,\n });\n\n return (\n <React.Fragment>\n {(props.searchTxt || props.headerContent) && (\n <Header\n content={props.headerContent}\n placeholder={props.searchTxt}\n onSearchTermChanged={(term: string) => handleSearch(term)}\n />\n )}\n\n {dataTableState.filteredItems.length != props.data.length && (\n <p className=\"help is-link px-6\">\n Toon {dataTableState.filteredItems.length} van de {props.data.length} rijen\n </p>\n )}\n {dataTableState.visibleItems.length === 0 && props.onNoRowsToRender && props.onNoRowsToRender(searchTerm !== '')}\n\n {dataTableState.visibleItems.length > 0 && (\n <table className={className}>\n <TableHead<T>\n titles={dataTableState.headers}\n onSort={(col: string) => handleSort(col)}\n currentSort={dataTableState.sort}\n />\n <TableBody<T>\n columns={dataTableState.headers}\n data={dataTableState.visibleItems}\n rowClasses={props.rowClasses}\n rowIdentifier={props.rowIdentifier}\n onRowSelected={(i, r) => onRowClicked(i, r)}\n />\n </table>\n )}\n\n {dataTableState.maxRows < dataTableState.filteredItems.length && (\n <Footer\n pagination={pagination}\n pageCount={0}\n currentPage={dataTableState.currentPage}\n onPageChange={(num: number) => pageChanged(num)}\n />\n )}\n </React.Fragment>\n );\n}\n\n/** <tbody> & contents */\nfunction TableBody<T extends unknown>({\n columns,\n data,\n rowIdentifier,\n rowClasses,\n onRowSelected,\n}: {\n columns: DataTableColumn<T>[];\n data: T[];\n rowIdentifier?: number | string | ((item: T) => number | string);\n rowClasses?: (item: T, index?: number) => string;\n onRowSelected: (item: T, row: HTMLTableRowElement) => void;\n}): JSX.Element {\n const [rows] = useDebouncedValue(data, { delay: 200 });\n\n return (\n <tbody>\n {rows.map((obj: T, rowIndex: number) => {\n const rowClass = typeof rowClasses == 'function' ? rowClasses(obj, rowIndex) : rowClasses;\n return (\n <tr\n className={rowClass}\n key={typeof rowIdentifier == 'function' ? rowIdentifier(obj) : (obj as any)[rowIdentifier!]}\n onClick={(e) => onRowSelected(obj, e.currentTarget)}\n >\n {columns.map((col: DataTableColumn<T>, cellIndex: number) => {\n const val =\n typeof col.value == 'string'\n ? (obj as any)[col.value].toString()\n : typeof col.value == 'function' && col.value(obj);\n let align: 'left' | 'right' | 'center' = 'left';\n if (col.alignment == 'r') align = 'right';\n else if (col.alignment == 'c') align = 'center';\n const cellClass = col.columnClasses ? col.columnClasses(obj, cellIndex) : undefined;\n return (\n <td className={cellClass} align={align} key={cellIndex}>\n {val}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n );\n}\n\n/** <thead> & contents */\nfunction TableHead<T extends unknown>({\n titles,\n onSort,\n currentSort,\n}: {\n titles: DataTableColumn<T>[];\n onSort: (sortOn: string) => void;\n currentSort: string;\n}): JSX.Element {\n return (\n <thead>\n <tr role=\"tableheader\">\n {titles.map((h, i) => {\n let align: 'left' | 'right' | 'center' = 'left';\n if (h.alignment == 'r') align = 'right';\n else if (h.alignment == 'c') align = 'center';\n\n const key = h.header ? h.header + '-' + i : i;\n return h.sort && h.header ? (\n <th role=\"sort\" className=\"is-sortable\" align={align} key={key} onClick={() => onSort(h.header!)}>\n <span className=\"icon\">\n {currentSort == h.header && <FontAwesomeIcon icon={faSortDown} />}\n {currentSort == h.header + '-reverse' && <FontAwesomeIcon icon={faSortUp} />}\n {currentSort != h.header && currentSort != h.header + '-reverse' && <FontAwesomeIcon icon={faSort} />}\n </span>\n <span>{h.header}</span>\n </th>\n ) : (\n <th align={align} key={key}>\n {h.header}\n </th>\n );\n })}\n </tr>\n </thead>\n );\n}\n\n/** header boven de tabel met daarin zoek-functie */\nfunction Header({\n placeholder,\n content,\n onSearchTermChanged,\n}: {\n placeholder?: string;\n content?: React.ReactNode;\n onSearchTermChanged: (e: string) => void;\n}): JSX.Element {\n return (\n <div className=\"datatable-header is-flex flex-direction-row is-flex-wrap-wrap is-justify-content-space-evenly is-align-items-stretch mx-3\">\n <div className=\"is-flex-grow-1 is-flex-shrink-1\">{content}</div>\n <div className=\"is-flex-grow-1 is-flex-shrink-1\"></div>\n {placeholder && (\n <div className=\"field is-flex-grow-1 is-flex-shrink-1 ml-3\">\n <label className=\"is-sr-only\" htmlFor=\"datatable-search-field\">\n Zoek in tabel\n </label>\n <div className=\"control has-icons-left is-expanded\">\n <span className=\"icon is-left\">\n <FontAwesomeIcon size=\"sm\" icon={faSearch} />\n </span>\n\n <input\n id=\"datatable-search-field\"\n style={{ minWidth: '200px' }}\n className=\"input is-fullwidth is-rounded\"\n placeholder={placeholder}\n onChange={(e) => onSearchTermChanged(e.target.value)}\n />\n </div>\n </div>\n )}\n </div>\n );\n}\n\n/**\n * De footer bevat de pagination voor de datatable\n * @param props\n * @returns een footer met pagination\n */\nfunction Footer({ pagination }: DataTableFooterProps): JSX.Element {\n let dotscounter = 0;\n return (\n <div className=\"datatable-footer pagination is-centered is-small px-6 mb-3\" role=\"pagination\">\n <div className=\"pagination-list\">\n {pagination.range.map((p) =>\n p === 'dots' ? (\n <span key={p + dotscounter++} className=\"pagination-ellipsis\">\n …\n </span>\n ) : (\n <button key={p} className=\"pagination-link\" onClick={() => pagination.setPage(p)}>\n {p}\n </button>\n )\n )}\n </div>\n </div>\n );\n}\n\n/**\n * controleer of een regexp valid is.\n * @param s een regex of regex-string\n * @returns valid regex?\n */\nfunction createValidRegex(s: string): RegExp | null {\n if (s.startsWith('/') && s.endsWith('/')) return new RegExp(s.replaceAll('/', ''));\n return null;\n}\n\n/** Speciale functie voor het mappen van de column headers.\n * Dus gebruiken in: 'headers.map(...)'\n */\nfunction headerMapping<T extends unknown>(col: DataTableColumn<T>) {\n if (!col.header && typeof col.value == 'string') col.header = col.value;\n else if (!col.header) {\n col.header = '';\n col.sort = false;\n }\n return col;\n}\n\nfunction defaultSortItems<T extends unknown>(sortColumn: DataTableColumn<T>, items: T[]) {\n return items.sort((a: T, b: T): number => {\n let valA: number | boolean | string | JSX.Element = '';\n let valB: number | boolean | string | JSX.Element = '';\n if (typeof sortColumn!.value === 'function') {\n valA = sortColumn!.value(a);\n valB = sortColumn!.value(b);\n } else if (typeof sortColumn!.value === 'string') {\n valA = (a as any)[sortColumn!.value];\n valB = (b as any)[sortColumn!.value];\n } else throw new Error('[V] Voor sortering van JSX-elementen MOET je een eigen functie gebruiken');\n\n switch (typeof valA) {\n case 'boolean':\n return valA === valB ? 0 : valA ? -1 : 1;\n case 'number':\n return +valA - +valB;\n case 'string':\n return valA < valB ? -1 : valA > valB ? 1 : 0;\n default:\n throw new Error('[A, B] Voor sortering van JSX-elementen MOET je een eigen functie gebruiken');\n }\n });\n}\n\nexport { DataTable };\nexport type { DataTableProps, DataTableColumn };\n","import { IconProp, SizeProp as faSizeProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React from 'react';\nimport { ColorProp, SizeProp } from '~/loon-react-bulma-types';\n\ntype IconProps = {\n /** react font-awesome icon\n * - string: geef de gehele font-awesome-class op. 'flip', 'animate', 'rotation' worden dan al gebruikt in deze class.\n * - any: geef een react IconProp object door.\n */\n icon: string | IconProp;\n /** de icon-grootte */\n size?: SizeProp;\n /** de kleur voor het icoon */\n color?: ColorProp;\n /** hoeveel graden moet het icoon gedraait zijn (0 - 360) */\n rotation?: 90 | 180 | 270;\n /** horizontaal, verticaal of beiden gespiegeld */\n flip?: 'horizontal' | 'vertical' | 'both';\n /** moet het icon spinnen of pulseren */\n animate?: 'spin' | 'pulse';\n};\n\n/**\n * Toon een Font Awesome Icon\n * default: 1.5rem x 1.5rem, de font-size is inherited.\n * @returns een Icon element\n * @example\n * <Icon icon=\"fas fa-flag\" />\n * <Icon icon={faFlag} /> // import { faFlag } from '@fortawesome/free-solid-svg-icons';\n */\nconst Icon = (props: IconProps): JSX.Element => {\n let classes = 'icon';\n let faSize = '1x';\n\n if (props.color === 's') classes += ' has-text-success';\n else if (props.color === 'd') classes += ' has-text-danger';\n else if (props.color === 'w') classes += ' has-text-warning';\n else if (props.color === 'p') classes += ' has-text-primary';\n else if (props.color === 'i') classes += ' has-text-info';\n else if (props.color === 'l') classes += ' has-text-link';\n\n switch (props.size) {\n case 's':\n faSize = 'sm';\n classes += ' is-small';\n break;\n case 'm':\n faSize = '1x';\n classes += ' is-normal';\n break;\n case 'l':\n faSize = '2x';\n classes += ' is-medium';\n break;\n case 'xl':\n faSize = '3x';\n classes += ' is-large';\n break;\n default:\n faSize = '1x';\n classes += ' is-normal';\n break;\n }\n\n if (typeof props.icon === 'string')\n return (\n <span className={classes} role=\"icon\">\n <i className={props.icon}></i>\n </span>\n );\n else\n return (\n <span className={classes} role=\"icon\">\n <FontAwesomeIcon\n icon={props.icon}\n size={faSize as faSizeProp}\n rotation={props.rotation}\n flip={props.flip}\n spin={props.animate === 'spin'}\n pulse={props.animate === 'pulse'}\n />\n </span>\n );\n};\n\ntype IconTextProps = {\n /** react font-awesome icon */\n icon: string | any;\n /** de icon-grootte */\n size?: SizeProp;\n /** de kleur voor het icoon */\n color?: ColorProp;\n /** hoeveel graden moet het icoon gedraait zijn (0 - 360) */\n rotation?: 90 | 180 | 270;\n /** horizontaal, verticaal of beiden geflipt */\n flip?: 'horizontal' | 'vertical' | 'both';\n /** moet het icon spinnen of pulseren */\n animate?: 'spin' | 'pulse';\n /** tekst bij het icon */\n children: React.ReactNode;\n};\n/**\n * Toon een Font Awesome Icon met bijhorende tekst. De tekst krijgt dezeflde kleur als de icon\n * IconText is een inline-flex element dus kan in een paragraaf worden gebruikt.\n * default: 1.5rem x 1.5rem, de font-size is inherited.\n * @returns een Icon met tekst in dezelfde kleur als het icon\n * @example\n * <IconText icon=\"fas fa-flag\">Flag</IconText>\n * <IconText icon={faFlag}>Flag</IconText> // import { faFlag } from '@fortawesome/free-solid-svg-icons';\n */\nconst IconText = (props: IconTextProps): JSX.Element => {\n let classes = 'icon-text';\n\n if (props.color === 's') classes += ' has-text-success';\n else if (props.color === 'd') classes += ' has-text-danger';\n else if (props.color === 'w') classes += ' has-text-warning';\n else if (props.color === 'p') classes += ' has-text-primary';\n else classes += ' has-text-link';\n\n return (\n <span className={classes} role=\"icon-with-text\">\n <Icon\n icon={props.icon}\n size={props.size}\n color={props.color}\n rotation={props.rotation}\n flip={props.flip}\n animate={props.animate}\n />\n <span>{props.children}</span>\n </span>\n );\n};\n\nexport { Icon, IconText };\nexport type { IconProps, IconTextProps };\n","import React from 'react';\nimport { ColorProp, IndicatorPositionProp } from '~/loon-react-bulma-types';\n\ntype IndicatorProps = {\n /** positie van de indicator (default = 'tr' (top-right)) */\n position?: IndicatorPositionProp;\n /** Het element waar de indicator op moet */\n children: React.ReactNode;\n /** label voor op de indicator (optioneel) */\n label?: string | React.ReactNode;\n /** kleur van de indicator (default = 'l' ('link')) */\n color?: ColorProp;\n /** extra classes voor de indicator container (element waar indicator & target-element inzitten) (optioneel) */\n className?: string;\n /** tooltip voor indicator (optioneel) */\n tooltip?: string;\n};\n\n/**\n * Een indicator toont een badge op een ander element. Er zijn meerdere posities. De indicator moet als wrapper voor het gewenste element gebruikt worden.\n * @param props Indicator Props\n * @returns Een element met een indicator\n * @example\n * <Indicator position=\"tl\" color=\"p\" tooltip=\"There are 5 new messages\">\n * <Button>Check messages</Button>\n * 5\n * </Indicator>\n */\nfunction Indicator({ label, className, position, color, tooltip, children }: IndicatorProps): JSX.Element {\n let indicatorClasses = 'indicator';\n if (position === 'tl' || position === 'top-left') indicatorClasses += ' is-top-left';\n else if (position === 'tc' || position === 'top-center') indicatorClasses += ' is-top-center';\n else if (position === 'bl' || position === 'bottom-left') indicatorClasses += ' is-bottom-left';\n else if (position === 'br' || position === 'bottom-right') indicatorClasses += ' is-bottom-right';\n else if (position === 'bc' || position === 'bottom-center') indicatorClasses += ' is-bottom-center';\n else if (position === 'lc' || position === 'left-center') indicatorClasses += ' is-left-center';\n else if (position === 'rc' || position === 'right-center') indicatorClasses += ' is-right-center';\n else indicatorClasses += ' is-top-right'; // top-right is default\n\n if (color === 'p') indicatorClasses += ' is-primary';\n else if (color === 'i') indicatorClasses += ' is-info';\n else if (color === 'w') indicatorClasses += ' is-warning';\n else if (color === 'd') indicatorClasses += ' is-danger';\n else if (color === 's') indicatorClasses += ' is-success';\n else indicatorClasses += ' is-link';\n\n return (\n <div className={className}>\n <div className={indicatorClasses} title={tooltip}>\n {label}\n </div>\n {children}\n </div>\n );\n}\n\nexport { Indicator };\nexport type { IndicatorProps };\n","import React from 'react';\n\n/**\n * Toon een Keyboard-Key als een 'key' op een keyboard.\n * @param params\n * @returns een element dat lijkt op een keyboard-key\n * @example <Kbd>A</Kbd>\n */\nfunction Kbd({\n children,\n className,\n}: {\n /** optionele extra class */\n className?: string;\n /** content van de key */\n children: React.ReactNode;\n}): JSX.Element {\n const classNames = `kbd ${className ?? ''}`.trim();\n return <kbd className={classNames}>{children}</kbd>;\n}\n\n/**\n * Toont meerdere keyboard-keys, gescheiden door een teken (deafult = '+')\n * @param props\n * @returns een rijtje keyboard-keys\n * @example <Kbds keys={['ctrl+S', 'shift+D']} />\n */\nfunction Kbds({\n keys,\n separator,\n className,\n}: {\n /** weer te geven keys als string */\n keys: string[];\n /** de separator van de keys, default '+' */\n separator?: string;\n /** optionele className */\n className?: string;\n}): JSX.Element {\n const children = keys.map((key: string, index: number) => {\n if (index === keys.length - 1) return <Kbd key={key}>{key}</Kbd>;\n else\n return (\n <React.Fragment key={key}>\n <Kbd>{key}</Kbd>\n <span>{separator ?? '+'}</span>\n </React.Fragment>\n );\n });\n\n return <span className={className}>{children}</span>;\n}\n\nexport { Kbd, Kbds };\n","import { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg-icons';\nimport React from 'react';\nimport { Icon } from '../Icon/Icon';\n\n/** ALLEEN VOOR INTERN MENU GEBRUIK */\ntype MenuInternProps = {\n activeItem: string;\n onInternClick: (id: string) => void;\n};\n\ntype MenuProps = {\n /** welk item is het initiële geselecteerde item */\n initialItem?: string;\n /** de content van het menu (<MenuItem>, <ExpandableMenuItem> or <MenuItemGroup>) */\n children: React.ReactNode;\n /** callback voor menu-item selectie */\n onMenuItemClicked: (item: string) => void;\n};\n\ntype MenuItemProps = {\n /** (optional) naam voor menu-item dat geselecteert wordt. Als niet opgegevens, wordt de string-content van het item gebruikt */\n name?: string;\n /** content van het item */\n children: React.ReactNode;\n};\n\ntype MenuItemGroupProps = {\n /** label voor een groep MenuItems */\n label: string;\n /** items in de ze groep (<MenuItem> or <ExpandableMenuItem>) */\n children: React.ReactNode;\n};\n\ntype ExpandableMenuItemProps = {\n /** De content van het menu-item (MenuItem components) */\n children: React.ReactNode;\n /** Label voor exapnd/collapse */\n label: string;\n /** Begint de lijst expanded? */\n startExpanded?: boolean;\n /** click handler */\n onClick?: (label: string, e?: React.MouseEvent) => void;\n};\n\n/**\n * Render een Menu met <Menu.ItemGroup>, <Menu.Item> en <Menu.ExpandableItem> children\n * @param props\n * @returns een Menu\n * @example\n * <Menu initialItem=\"1\">\n * <Menu.ItemGroup label=\"Groep 1\">\n * <Menu.Item name=\"1\">Item 1</Menu.Item>\n * <Menu.Item name=\"2\">Item 2</Menu.Item>\n * </Menu.ItemGroup>\n * <Menu.ItemGroup label=\"Groep 2\">\n * ...\n * </Menu.ItemGroup>\n * </Menu>\n */\nconst Menu = (props: MenuProps): JSX.Element => {\n const [activeItem, setActiveItem] = React.useState(props.initialItem ?? '');\n\n const handleMenuItemClick = (item: string) => {\n props.onMenuItemClicked(item);\n setActiveItem(item);\n };\n // console.log(props);\n const menuContent = React.Children.map(props.children, (child: any) => {\n if (child.type === MenuItem)\n return (\n <ul>\n <InternMenuItem {...child.props} activeItem={activeItem} onInternClick={handleMenuItemClick} />\n </ul>\n );\n else if (child.type === MenuItemGroup)\n return <InternMenuItemGroup {...child.props} activeItem={activeItem} onInternClick={handleMenuItemClick} />;\n else if (child.type === ExpandableMenuItem)\n return (\n <ul className=\"menu-list\">\n <InternExpandableMenuItem {...child.props} activeItem={activeItem} onInternClick={handleMenuItemClick} />\n </ul>\n );\n else return child;\n });\n\n return (\n <aside className=\"menu\" role=\"menu\">\n {menuContent}\n </aside>\n );\n};\n\n/** menu item group */\nconst MenuItemGroup = ({ label, children }: MenuItemGroupProps): JSX.Element => (\n <div>\n {label}\n {children}\n </div>\n);\n/** ALLEEN VOOR INTERN MENU GEBRUIK */\nconst InternMenuItemGroup = (props: MenuItemGroupProps & MenuInternProps): JSX.Element => (\n <React.Fragment>\n <p className=\"menu-label\">{props.label}</p>\n <ul className=\"menu-list\">\n {React.Children.map(props.children, (child: any) => {\n if (child.type.name == 'MenuItem')\n return <InternMenuItem {...child.props} activeItem={props.activeItem} onInternClick={props.onInternClick} />;\n else if (child.type.name == 'ExpandableMenuItem')\n return (\n <InternExpandableMenuItem\n {...child.props}\n activeItem={props.activeItem}\n onInternClick={props.onInternClick}\n />\n );\n else return child;\n })}\n </ul>\n </React.Fragment>\n);\n\n/** een niet-selecteerbaar maar wel uitklapbaar menu-item met children (MenuItems) */\nconst ExpandableMenuItem = (props: ExpandableMenuItemProps): JSX.Element => <div>{props.children}</div>;\n/** ALLEEN VOOR INTERN MENU GEBRUIK */\nconst InternExpandableMenuItem = (props: ExpandableMenuItemProps & MenuInternProps): JSX.Element => {\n const [expanded, setExpanded] = React.useState(props.startExpanded ?? false);\n\n const handleOnClick = (e: React.MouseEvent) => {\n props.onClick && props.onClick(props.label, e);\n setExpanded(!expanded);\n };\n\n const children = React.Children.map(props.children, (child: any) => {\n if (child.type.name == 'MenuItem')\n return <InternMenuItem {...child.props} activeItem={props.activeItem} onInternClick={props.onInternClick} />;\n else return child;\n });\n\n return (\n <li>\n <span className=\"menu-list-item\" onClick={handleOnClick}>\n <Icon color=\"i\" size=\"s\" icon={expanded ? faChevronUp : faChevronDown} />\n <span> {props.label}</span>\n </span>\n {expanded && <ul>{children}</ul>}\n </li>\n );\n};\n\n/** selecatble menuitem */\nconst MenuItem = ({ name, children }: MenuItemProps): JSX.Element => (\n <span>\n {name}\n {children}\n </span>\n);\n/** ALLEEN VOOR INTERN MENU GEBRUIK */\nconst InternMenuItem = (props: MenuItemProps & MenuInternProps): JSX.Element => {\n const id =\n props.name ??\n React.Children.toArray(props.children)\n .filter((c) => typeof c == 'string')[0]\n .toString();\n return (\n <li onClick={() => props.onInternClick(id)} id={id}>\n <span className={props.activeItem == id ? 'menu-list-item is-active' : 'menu-list-item'}>{props.children}</span>\n </li>\n );\n};\n\n/**\n * Een selecteerbaar menu-item in het Menu\n * @param props\n * @return een selecteerbaar menu-item\n * @example <Menu.Item name=\"1\">Item 1</Menu.Item>\n */\nMenu.Item = MenuItem;\n\n/**\n * Groepeer Menu Items in een lijstje met een label om te laten weten dat ze bij elkaar horen\n * @param props\n * @returns een MenuItemGroup\n * @example\n * <Menu.ItemGroup label=\"Groep 1\">\n * <Menu.Item name=\"1\">Item 1</Menu.Item>\n * <Menu.Item name=\"2\">Item 2</Menu.Item>\n * </Menu.ItemGroup>\n */\nMenu.ItemGroup = MenuItemGroup;\n\n/**\n * Een niet-selecteerbare, maar wel collapsable / expandable menu item met een lijstje children\n * @param props\n * @returns een collapsible menu item\n * @example\n * <Menu.ExpandableItem label=\"Groep 1\">\n * <Menu.Item name=\"1\">Item 1</Menu.Item>\n * <Menu.Item name=\"2\">Item 2</Menu.Item>\n * </Menu.ExpandableItem>\n */\nMenu.ExpandableItem = ExpandableMenuItem;\n\nexport { Menu };\nexport type { MenuProps, MenuItemProps, MenuItemGroupProps };\n","import React from 'react';\nimport {\n faExclamation as warningIcon,\n faInfo as infoIcon,\n faExclamationTriangle as dangerIcon,\n faCheck as successIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ColorProp, SizeProp } from '~/loon-react-bulma-types';\n\ntype MessageProps = {\n /** content van de message */\n children: React.ReactNode;\n /** Optionele titel voor de message */\n title?: string | undefined;\n /** de grootte van de tekst in de messages (default = undefined|'m') */\n size?: SizeProp;\n};\n\n/** maak de uiteindelijke message */\n/**\n * Zelf regelbare message.\n * @param props\n * @returns een message\n * @example <Message color=\"p\" size=\"l\" tooltip=\"This is a tooltip\">This is a message</Message>\n */\nconst Message = ({ children, title, size, color }: MessageProps & { color?: ColorProp }): JSX.Element => {\n let classes = 'message';\n let icon = infoIcon;\n\n switch (color) {\n case 's':\n classes += ' is-success';\n icon = successIcon;\n break;\n case 'd':\n classes += ' is-danger';\n icon = dangerIcon;\n break;\n case 'w':\n classes += ' is-warning';\n icon = warningIcon;\n break;\n case 'p':\n classes += ' is-primary';\n icon = infoIcon;\n break;\n case 'l':\n classes += ' is-link';\n icon = infoIcon;\n break;\n // case 'i': // DIT IS DE DEFAULT\n default:\n classes += ' is-info';\n icon = infoIcon;\n break;\n }\n\n if (size === 's') classes += ' is-small';\n else if (size === 'l') classes += ' is-medium';\n else if (size === 'xl') classes += ' is-large';\n\n return (\n <article className={classes}>\n {title && <Header title={title} icon={icon} />}\n <Body hasHeader={!!title} icon={icon} size={size}>\n {children}\n </Body>\n </article>\n );\n};\n\n/**\n * Maakt de header\n * @param props\n * @returns message-header\n */\nconst Header = ({ title, icon }: { title: string; icon: any }): JSX.Element => {\n return (\n <div className=\"message-header\" data-testid=\"message-header\">\n <p>\n <span className=\"icon mr-3\">\n <FontAwesomeIcon icon={icon} />\n </span>\n {title}\n </p>\n </div>\n );\n};\n\n/**\n * Maakt de body\n * @param props\n * @returns message-body\n */\nconst Body = ({\n children,\n hasHeader,\n icon,\n size,\n}: {\n children: any;\n hasHeader: boolean;\n icon?: any;\n size?: SizeProp;\n}): JSX.Element => {\n let iconClasses = 'icon';\n if (size === 's') iconClasses += ' mr-1 is-small';\n else if (size === 'l' || size === 'xl') iconClasses += ' is-large';\n else iconClasses += ' mr-1 is-medium';\n\n return (\n <div className=\"message-body\" data-testid=\"message-body\">\n {hasHeader ? (\n children\n ) : (\n <div>\n <span className={iconClasses} style={{ float: 'left' }}>\n <FontAwesomeIcon icon={icon} />\n </span>\n {children}\n </div>\n )}\n </div>\n );\n};\n\n/** een primary-colored message\n * @param props props\n * @returns een primary-colored message\n * @example <Message color=\"p\" size=\"l\" tooltip=\"This is a tooltip\">This is a primary message</Message>\n */\nMessage.Primary = (props: MessageProps): JSX.Element => <Message {...props} color=\"p\" />;\n\n/** een success-colored message\n * @param props props\n * @returns een success-colored message\n * @example <Message color=\"s\" size=\"l\" tooltip=\"This is a tooltip\">This is a success message</Message>\n */\nMessage.Success = (props: MessageProps): JSX.Element => <Message {...props} color=\"s\" />;\n\n/** een danger-colored message\n * @param props props\n * @returns een danger-colored message\n * @example <Message color=\"d\" size=\"l\" tooltip=\"This is a tooltip\">This is a danger message</Message>\n */\nMessage.Danger = (props: MessageProps): JSX.Element => <Message {...props} color=\"d\" />;\n\n/** een warning-colored message\n * @param props props\n * @returns een warning-colored message\n * @example <Message color=\"w\" size=\"l\" tooltip=\"This is a tooltip\">This is a warning message</Message>\n */\nMessage.Warning = (props: MessageProps): JSX.Element => <Message {...props} color=\"w\" />;\n\n/** een info-colored message (OOK de default)\n * @param props props\n * @returns een info-colored message\n * @example <Message color=\"i\" size=\"l\" tooltip=\"This is a tooltip\">This is a info message</Message>\n */\nMessage.Info = (props: MessageProps): JSX.Element => <Message {...props} color=\"i\" />;\n\n/** een link-colored message\n * @param props props\n * @returns een link-colored message\n * @example <Message color=\"l\" size=\"l\" tooltip=\"This is a tooltip\">This is a link message</Message>\n */\nMessage.Link = (props: MessageProps): JSX.Element => <Message {...props} color=\"l\" />;\n\nexport { Message };\nexport type { MessageProps };\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","import warning from 'warning';\n\n/**\n * prints a message to the console if in development mode OR when force is true\n * @param msg warning message\n */\nexport const warnPackageUser = (msg: string, force: boolean = false, ...args: any[]) => {\n if (force || process.env.NODE_ENV == 'development')\n warning(false, `[loon-react-bulma] ${msg}`, args);\n};\n","import React from 'react';\nimport { SizeProp } from '~/loon-react-bulma-types';\nimport { warnPackageUser } from '~/utils/warn-dev-util';\n\ntype ModalProps = {\n /** content van de modal. Als deze te lang wordt, wordt hij scrollable */\n children: React.ReactNode;\n /**\n * Afhandeling van de dismiss van de modal\n * @param e event\n */\n onDismiss(e?: any): any;\n /** de grootte van de modal: met SizeProp of een string. ( DEFAULT = 'm', 800px)\n * - SizeProp: s: 600px, m: 800px, l: 1000px, xl: 1200px\n * - string: '834px', '50%, 60em', '100%'\n */\n size?: SizeProp | string;\n};\n\n/**\n * Een modal-component. Als een modal ene Foot en een Head heeft, wordt de rest automatisch toegevoegd in een Body\n * @param props modal props\n * @returns een modal\n * @example\n * <Modal onDismiss={handleDismiss}>Modal without head and foot, all body</Modal>\n *\n * <Modal onDismiss={handleDismissModal} size=\"m\">\n * <Modal.Head>Optional Modal Head</Modal.Head>\n * <Modal.Body>Optional Modal Body</Modal.Body>\n * <Modal.Foot>Optional Modal Foot</Modal.Foot>\n * </Modal>\n */\nconst Modal = (props: ModalProps): JSX.Element => {\n const onCloseModal = (e?: any) => props.onDismiss(e);\n\n React.useEffect(() => {\n document.documentElement.classList.add('is-clipped');\n return () => document.documentElement.classList.remove('is-clipped');\n }, []);\n const size = props.size ?? 'm';\n let modalWidth = '800px';\n if (size === 's') modalWidth = '600px';\n else if (size === 'm') modalWidth = '800px';\n else if (size === 'l') modalWidth = '1000px';\n else if (size === 'xl') modalWidth = '1200px';\n else modalWidth = size;\n\n const children = React.Children.map(props.children, (child: any) => {\n if (!child) return null;\n else if (child.type === Head) return <InternHead {...child.props} />;\n else if (child.type === Body) return <InternBody {...child.props} />;\n else if (child.type === Foot) return <InternFoot {...child.props} />;\n else return <InternBody>{child}</InternBody>;\n })?.sort((a: any, b: any) => {\n if (a.type.name === 'InternHead') return -1;\n else if (a.type.name === 'InternBody' && b.type.name === 'InternHead') return 1;\n else if (a.type.name === 'InternBody' && b.type.name === 'InternFoot') return -1;\n else if (a.type.name === 'InternFoot') return 1;\n return 0;\n });\n\n if (!children || children?.length === 0) warnPackageUser('<Modal> A Modal needs at least one child');\n else if (children.filter((c: any) => c.type === InternBody).length > 1)\n warnPackageUser('<Modal> A modal should have only one body. Wrap multiple children into a <Modal.Body>-tag.');\n\n return (\n <React.Fragment>\n <div className=\"modal is-active\" data-testid=\"modal\">\n <div className=\"modal-background\" data-testid=\"modal-bg\"></div>\n <div\n className=\"modal-content bulma-box modal-container\"\n data-testid=\"modal-content\"\n style={{ width: modalWidth }}\n >\n {children}\n </div>\n <button className=\"modal-close is-large\" aria-label=\"close\" onClick={(e: any) => onCloseModal(e)}></button>\n </div>\n </React.Fragment>\n );\n};\n\nconst Head = (props: { children: React.ReactNode }): JSX.Element => <div>{props.children}</div>;\nconst InternHead = (props: { children: React.ReactNode }): JSX.Element => (\n <div className=\"modal-header\" data-testid=\"modal-header\">\n {props.children}\n </div>\n);\n\nconst Body = (props: { children: React.ReactNode }) => <div>{props.children}</div>;\nconst InternBody = (props: { children: React.ReactNode }) => (\n <div className=\"modal-body\" data-testid=\"modal-body\">\n {props.children}\n </div>\n);\n\nconst Foot = (props: { children: React.ReactNode }) => <div>{props.children}</div>;\nconst InternFoot = (props: { children: React.ReactNode }) => (\n <div className=\"modal-footer\" data-testid=\"modal-footer\">\n {props.children}\n </div>\n);\n\n/**\n * een niet-scrollende, altijd zichtbare head voor de modal\n * @param props\n * @returns modal head\n * @example <Modal.Head>Optional Modal Head</Modal.Head>\n */\nModal.Head = Head;\n\n/**\n * een scrollende body voor de modal\n * @param props\n * @returns modal body\n * @example <Modal.Body>Modal Body</Modal.Body>\n */\nModal.Body = Body;\n\n/**\n * een niet-scrollende, altijd zichtbare foot voor de modal\n * @param props props\n * @returns modal foot\n * @example <Modal.Foot>Optional Modal Foot</Modal.Foot>\n */\nModal.Foot = Foot;\n\nexport { Modal };\nexport type { ModalProps };\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faExclamation as warningIcon,\n faInfo as infoIcon,\n faExclamationTriangle as dangerIcon,\n faCheck as successIcon,\n faTimesCircle as closeIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { ColorProp } from '~/loon-react-bulma-types';\n\n/**\n * Een instelbare notificatie. Default is een info-notificatie\n * @param props\n * @returns notificatie\n * @example <Notification>Hello World</Notification>\n */\nconst Notification = (props: NotificationProps & { color?: ColorProp }): JSX.Element => {\n const timer =\n props.autoDismissAfter && props.autoDismissAfter > 0\n ? setTimeout(() => handleDismiss(null), props.autoDismissAfter)\n : null;\n const [dismissTimer] = React.useState<NodeJS.Timeout | null>(timer);\n\n React.useEffect(() => () => dismissTimer ? clearTimeout(dismissTimer) : undefined, [dismissTimer]);\n\n const handleDismiss = (e?: any) => {\n if (dismissTimer) clearTimeout(dismissTimer);\n props.onDismiss(e);\n };\n\n let classes = 'notification is-light';\n let icon = infoIcon;\n switch (props.color) {\n case 's':\n classes += ' is-success';\n icon = successIcon;\n break;\n case 'd':\n classes += ' is-danger';\n icon = dangerIcon;\n break;\n case 'w':\n classes += ' is-warning';\n icon = warningIcon;\n break;\n case 'p':\n classes += ' is-primary';\n icon = infoIcon;\n break;\n case 'l':\n classes += ' is-link';\n icon = infoIcon;\n break;\n // case 'i': // IS DE DEFAULT\n default:\n classes += ' is-info';\n icon = infoIcon;\n break;\n }\n\n return (\n <article className={classes}>\n <DismissButton color={props.color ?? 'i'} onDismiss={(e) => handleDismiss(e)} />\n <NotificationContent icon={icon}>{props.children}</NotificationContent>\n </article>\n );\n};\n\n/**\n * Render de dismiss-button met state-update voor hovering.\n * @param props\n * @returns een dismiss button voor notificaties\n * @example <DismissButton onDismiss={handleDismiss} />\n */\nfunction DismissButton({ color, onDismiss }: { onDismiss(e: any): any; color: ColorProp }): JSX.Element {\n const [hovered, setHovered] = React.useState(false);\n let iconClasses = 'icon';\n if (color === 's') iconClasses += hovered ? ' has-text-success-dark' : ' has-text-success';\n else if (color === 'd') iconClasses += hovered ? ' has-text-danger-dark' : ' has-text-danger';\n else if (color === 'w') iconClasses += hovered ? ' has-text-warning-dark' : ' has-text-warning';\n else if (color === 'p') iconClasses += hovered ? ' has-text-primary-dark' : ' has-text-primary';\n else if (color === 'l') iconClasses += hovered ? ' has-text-link-dark' : ' has-text-link';\n else iconClasses += hovered ? ' has-text-info-dark' : ' has-text-info';\n\n return (\n <button\n className=\"notification-close\"\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={(e) => onDismiss(e)}\n >\n <span className={iconClasses} role=\"close-icon\">\n <FontAwesomeIcon icon={closeIcon} size=\"lg\" />\n </span>\n </button>\n );\n}\n\n/** maak de content van de notificatie */\nfunction NotificationContent(props: { children: React.ReactNode; icon: any }): JSX.Element {\n return (\n <div>\n <span className=\"icon is-medium mr-2\" style={{ float: 'left' }}>\n <FontAwesomeIcon icon={props.icon} />\n </span>\n {props.children}\n </div>\n );\n}\n\n/** een primary-colored notificatie\n * @param props\n * @returns een primary-colored notificatie\n * @example <Notification.Primary>Hello World</Notification.Primary>\n */\nNotification.Primary = (props: NotificationProps): JSX.Element => <Notification {...props} color=\"p\" />;\n\n/** een danger-colored notificatie\n * @param props\n * @returns een danger-colored notificatie\n * @example <Notification.Danger>Hello World</Notification.Danger>\n */\nNotification.Danger = (props: NotificationProps): JSX.Element => <Notification {...props} color=\"d\" />;\n\n/** een warning-colored notificatie\n * @param props\n * @returns een warning-colored notificatie\n * @example <Notification.Warning>Hello World</Notification.Warning>\n */\nNotification.Warning = (props: NotificationProps): JSX.Element => <Notification {...props} color=\"w\" />;\n\n/** een success-colored notificatie\n * @param props\n * @returns een success-colored notificatie\n * @example <Notification.Success>Hello World</Notification.Success>\n */\nNotification.Success = (props: NotificationProps): JSX.Element => <Notification {...props} color=\"s\" />;\n\n/** een link-colored notificatie\n * @param props\n * @returns een link-colored notificatie\n * @example <Notification.Link>Hello World</Notification.Link>\n */\nNotification.Link = (props: NotificationProps): JSX.Element => <Notification {...props} color=\"l\" />;\n\n/** een info-colored notificatie (OOK DE DEFAULT)\n * @param props\n * @returns een info-colored notificatie\n * @example <Notification.Info>Hello World</Notification.Info>\n */\nNotification.Info = (props: NotificationProps): JSX.Element => <Notification {...props} color=\"i\" />;\n\nexport { Notification };\n\n/** Props voor een Notification */\nexport type NotificationProps = {\n /** content van de notificatie */\n children: React.ReactNode;\n /**\n * afhandeling van dismiss-click notificatie\n * @param e event\n */\n onDismiss(e?: any): void;\n /** roep de @see onDismiss() automatisch aan na ... milliseconden */\n autoDismissAfter?: number;\n};\n","import React from 'react';\nimport { ColorProp, SizeProp } from '~/loon-react-bulma-types';\n\ntype ProgressBarProps = {\n /** grootte van de progressbar */\n size?: SizeProp;\n /** de maximale waarde, default = 100 */\n max?: number;\n /** de waarde waarop de progressbar staat. Vul niet in voor een onbepaalde, loopende progressbar */\n value?: number;\n /** waarde-extensie (default = '%') */\n extension?: '%' | 'pct' | '$' | string;\n /** de kleur van de progressbar */\n color?: ColorProp;\n};\n\n/** Maak een progress bar met de <progress> tag.\n * Door da value-attribuut leeg te laten, krijg je een loopende progress bar: https://bulma.io/documentation/elements/progress/\n */\n\n/**\n * Maak een progress-bar met de <progress> tag.\n * Door de attribut 'value' leeg te laten, krijg je een looping progress bar\n * @param props\n * @returns een progress bar\n * @example\n * <ProgressBar value={50} />\n * <ProgressBar value={50} extension=\"%\" />\n * <ProgressBar size='xl' />\n */\nfunction ProgressBar({ color, size, extension, max, value }: ProgressBarProps): JSX.Element {\n let classes = 'progress';\n // default is 'is-normal', ook als er GEEN size-class is\n if (size === 's') classes += ' is-small';\n else if (size === 'l') classes += ' is-medium';\n else if (size === 'xl') classes += ' is-large';\n else classes += ' is-normal';\n\n if (color === 's') classes += ' is-success';\n else if (color === 'p') classes += ' is-primary';\n else if (color === 'd') classes += ' is-danger';\n else if (color === 'l') classes += ' is-link';\n else if (color === 'w') classes += ' is-warning';\n else classes += ' is-info';\n\n return (\n <progress className={classes} value={value} max={max || 100} title={`${value ?? ''}${extension ?? ''}`}>\n {value}\n </progress>\n );\n}\n\nexport { ProgressBar };\nexport type { ProgressBarProps };\n","import React from 'react';\n\ntype SimpleTableProps<T extends unknown> = {\n /**\n * Zichtbare kolommen.:\n * - string[] >>> object keys\n * - TableColProps >>> naam van de kolom en de object-key die daarbij hoort. Als name undefined, wordt de key genomen\n * - undefined >>> alle object keys worden gebruikt en getoont\n */\n columns?: string[] | SimpleTableColProps<T>[] | undefined;\n /** de data van tabel: een array objects */\n data: T[];\n /** waarmee moet een rij worden geidentificeerd. Anders wordt index gebruikt, liever niet: react-performance */\n rowIdentifier?: string | number | ((item: T) => string | number);\n /** is de tabel narrow ? (default false) */\n narrow?: boolean;\n /** is de tabel striped ? (default false) */\n striped?: boolean;\n /** is de tabel bordered ? (default false) */\n bordered?: boolean;\n /** is de tabel hovered (default false) */\n hoverable?: boolean;\n /** is de tabel fullwidth (default false) */\n fullwidth?: boolean;\n /** moet de inhoud van de table-header ook onderaan verschijnen ? (default false) */\n hasFooter?: boolean;\n /** terugkoppeling voor een geselecteerde rij.\n * @param item: Het geselecteerde item\n * @param row: de tabel-rij waarop geklikt is (<tr> tag). Om de row 'selected' te laten lijken: toggle de 'is-selected' class\n */\n onRowSelected?(item: T, row: HTMLTableRowElement): void;\n};\n\ntype SimpleTableHeadProps<T> = {\n titles: SimpleTableColProps<T>[];\n};\n\ntype SimpleTableFootProps<T> = SimpleTableHeadProps<T>;\n\ntype SimpleTableBodyProps<T> = {\n columns: SimpleTableColProps<T>[];\n data: T[];\n rowIdentifier?: string | number | ((item: T) => string | number);\n onRowSelected: (item: T, row: HTMLTableRowElement) => void;\n};\n\ntype SimpleTableColProps<T> = {\n /** de naam van de kolom\n * - als niet opgegeven wordt de obj key gebruikt uit de 'value'prop (als dat een string is)\n * - als je geen header wil tonen, zet dan een lege string als header\n */\n header?: string;\n /** de obj property die gebruikt moet worden in de kolom\n * - als string: object[value] geeft de waarde\n * - als function: eigen function om de value te zetten\n */\n value: string | ((v: T) => string);\n};\n\n/**\n * Render een tabel. Als je een tabel met zoekfunctie, pagination en sorteren wil, moet je een @see DataTable nemen.\n * @param props\n * @returns een tabel gestyled met bulma\n * @example\n * <SimpleTable\n * data={customTableData}\n * columns={['id', 'first_name', 'last_name', 'email']}\n * rowIdentifier=\"id\"\n * striped={true}\n * fullwidth={true}\n * hoverable={true}\n * narrow={true}\n * bordered={false}\n * />\n */\nfunction SimpleTable<T>(props: SimpleTableProps<T>): JSX.Element {\n // zet de table classses\n let classes = 'table';\n if (props.bordered) classes += ' is-bordered';\n if (props.narrow) classes += ' is-narrow';\n if (props.striped) classes += ' is-striped';\n if (props.hoverable) classes += ' is-hoverable';\n if (props.fullwidth) classes += ' is-fullwidth';\n\n const rowKey = props.rowIdentifier; // identifier voor de row (als key)\n\n const handleRowClick = (item: T, rowEl: HTMLTableRowElement) => {\n if (props.onRowSelected) props.onRowSelected(item, rowEl);\n };\n\n const columns: SimpleTableColProps<T>[] = createColumns<T>(props.columns, props.data[0]);\n\n return (\n <div className=\"table-container\">\n <table className={classes}>\n <SimpleTableHead<T> titles={columns} />\n <SimpleTableBody<T>\n columns={columns}\n data={props.data}\n rowIdentifier={rowKey}\n onRowSelected={(i, r) => handleRowClick(i, r)}\n />\n {props.hasFooter && <SimpleTableFoot titles={columns} />}\n </table>\n </div>\n );\n}\n\nfunction SimpleTableBody<T>(props: SimpleTableBodyProps<T>): JSX.Element {\n return (\n <tbody>\n {props.data.map((obj: any, index: number) => {\n return (\n <tr\n key={\n typeof props.rowIdentifier == 'function'\n ? props.rowIdentifier(obj)\n : props.rowIdentifier\n ? obj[props.rowIdentifier]\n : index\n }\n onClick={(e) => props.onRowSelected(obj, e.currentTarget)}\n >\n {props.columns.map((p: SimpleTableColProps<T>, i: number) => {\n const val = typeof p.value == 'string' ? obj[p.value] : p.value(obj);\n return <td key={i}>{val}</td>;\n })}\n </tr>\n );\n })}\n </tbody>\n );\n}\n\nfunction SimpleTableHead<T>(props: SimpleTableHeadProps<T>): JSX.Element {\n return (\n <thead>\n <tr>\n {props.titles.map((h) => (\n <th key={h.header}>{h.header}</th>\n ))}\n </tr>\n </thead>\n );\n}\n\nfunction SimpleTableFoot<T>(props: SimpleTableFootProps<T>): JSX.Element {\n return (\n <tfoot>\n <tr>\n {props.titles.map((f) => (\n <th key={f.header}>{f.header}</th>\n ))}\n </tr>\n </tfoot>\n );\n}\n\nfunction createColumns<T>(\n columns: string[] | SimpleTableColProps<T>[] | undefined,\n firstEl: T\n): SimpleTableColProps<T>[] {\n if (columns && typeof columns[0] == 'string') {\n const cols = columns as string[];\n return cols.map((k) => {\n const kv: SimpleTableColProps<T> = {\n header: k,\n value: k,\n };\n return kv;\n });\n } else if (columns) {\n const cols = columns as SimpleTableColProps<T>[];\n return cols.map((k) => {\n if (!k.header && k.header != '' && typeof k.value == 'string') k.header = k.value;\n return k;\n });\n } else\n return Object.keys(firstEl).map((k) => {\n const kv: SimpleTableColProps<T> = {\n header: k,\n value: k,\n };\n return kv;\n });\n}\n\nexport { SimpleTable };\nexport type { SimpleTableProps, SimpleTableColProps };\n","import { SizeProp } from '~/loon-react-bulma-types';\nimport React from 'react';\n\ntype StatusType = 'active' | 'completed' | 'error' | 'pending';\ntype StepChoiceType = 'disabled' | 'up' | 'down' | 'allowed';\ntype StepsProps = {\n /** extra classes voor de steps-container */\n className?: string;\n /** Alleen <Steps.Item> componenten */\n children: React.ReactNode;\n /** grootte van de steps (default = 'm') */\n size?: SizeProp;\n /** wat is de actieve step @deprecated use activeStepindex */\n activeStep?: number;\n /** wat is de actieve step */\n activeStepIndex?: number;\n /** change-step callback */\n onChangeStep?: (step: number) => void;\n /** freeStepChoice:\n * - disabled: alleen links/recht selecteren\n * - up: alleen naar rechts vrij selecteren\n * - down: alleen links beneden vrij selecteren\n * - allowed: alles vrij selecteerbaar */\n freeStepChoice?: StepChoiceType;\n};\ntype StepItemProps = {\n /** step status */\n status?: StatusType;\n /** title van de step */\n title?: string;\n /** details bij de step */\n details?: string;\n /** een makering van de step (default = stepnr) */\n marker?: React.ReactNode | ((s?: StatusType) => React.ReactNode);\n /** tooltip voor deze step */\n tooltip?: string;\n};\n\ntype InternStepItemProps = StepItemProps & {\n /** interne actieve ste[] */ activeStep: number;\n /** interne step-herkenning */ stepKey: number;\n /** interne onclick voor step */ onClick: (key: number) => void;\n /** interne disable voor step */ disabled?: boolean;\n};\n\n/**\n * Maak een stappen-paneel voor een set van stappen.\n * @param props\n * @returns een stappen-paneel\n * @example\n * <Steps activeStep={1} onChangeStep={handleStepChange}>\n * <Steps.Item title=\"Step 1\" marker={1} />\n * <Steps.Item title=\"\" marker={<Icon icon={faFlask} />} />\n * <Steps.Item title=\"Step 2\" details=\"dit zijn de details voor deze stap\" />\n * <Steps.Item title=\"\" marker={<Icon icon={faBomb} />} status=\"error\" />\n * <Steps.Item\n * title=\"Step 3\"\n * marker={(status) => (status == 'pending' ? <Icon icon={faFlag} /> : <Icon icon={faFire} />)}\n * />\n * <Steps.Item title=\"Step 4\" marker=\"A\" />\n * </Steps>\n */\nconst Steps = (props: StepsProps): JSX.Element => {\n const [activeStep, setActiveStep] = React.useState(props.activeStepIndex ?? 0);\n\n const handleStepChange = (stepKey: number): void => {\n props.onChangeStep && props.onChangeStep(stepKey);\n setActiveStep(stepKey);\n };\n\n React.useEffect(() => {\n setActiveStep(props.activeStepIndex ?? props.activeStep ?? 0);\n }, [props.activeStepIndex]);\n\n let size = '';\n if (props.size === 's') size = 'is-small';\n else if (props.size === 'l') size = 'is-medium';\n else if (props.size === 'xl') size = 'is-large';\n\n const className = `steps is-animated ${size} ${props.className ?? ''}`.trim();\n\n return (\n <div className={className}>\n {React.Children.map(props.children, (child: any, i: number) => {\n if (child.type && child.type == Steps.Item) {\n let isDisabled = true;\n if (props.freeStepChoice === 'allowed') isDisabled = false;\n else if (props.freeStepChoice === 'down' && i < activeStep) isDisabled = false;\n else if (props.freeStepChoice === 'up' && i > activeStep) isDisabled = false;\n else isDisabled = i != activeStep + 1 && i != activeStep - 1;\n\n return (\n <InternStepsItem\n key={child.props.title}\n {...child.props}\n activeStep={activeStep}\n stepKey={i}\n disabled={isDisabled}\n onClick={handleStepChange}\n />\n );\n } else return child;\n })}\n </div>\n );\n};\n\n/**\n * Een stap in een stappen-paneel.\n * @param props\n * @returns een stap voor de <Steps> component\n * @example\n * <Steps.Item title=\"Step 1\" marker={1} />\n * <Steps.Item title=\"Step 2\" marker={2} tooltip=\"step 2\" status=\"error\" />\n */\nSteps.Item = (props: StepItemProps): JSX.Element => <React.Fragment>{props.title}</React.Fragment>;\n\nfunction InternStepsItem(props: InternStepItemProps): JSX.Element {\n const handleClick = () => {\n if (props.disabled || props.stepKey == props.activeStep) return;\n props.onClick(props.stepKey);\n setStatus('active');\n };\n\n const [status, setStatus] = React.useState<StatusType>(props.status ?? 'pending');\n React.useEffect(\n function statusUpdate() {\n let newStatus: StatusType = 'pending';\n if (props.status === 'error') newStatus = 'error';\n else if (props.status === 'completed' || props.activeStep > props.stepKey) newStatus = 'completed';\n else if (props.stepKey === props.activeStep) newStatus = 'active';\n setStatus(newStatus);\n },\n [props.status, props.stepKey, props.activeStep]\n );\n\n let className = 'step-item';\n if (props.activeStep === props.stepKey) className += ' is-active is-info';\n else if (status === 'error') className += ' is-error is-danger';\n else if (status === 'completed') className += ' is-completed is-success';\n else className += ' is-pending';\n\n let marker: React.ReactNode;\n if (!props.marker) marker = <React.Fragment>{props.stepKey + 1}</React.Fragment>;\n else if (typeof props.marker === 'function') marker = props.marker(status);\n else marker = props.marker;\n\n // console.log(status);\n\n return (\n <div className={className} onClick={handleClick} title={props.tooltip}>\n <div className=\"step-marker\">{marker}</div>\n <div className=\"step-details\">\n <p className=\"step-title\">{props.title}</p>\n {props.details && <p>{props.details}</p>}\n </div>\n </div>\n );\n}\n\nexport { Steps };\nexport type { StepItemProps, StepsProps };\n","import React from 'react';\nimport type { AlignmentProp, SizeProp } from '~/loon-react-bulma-types';\n\nexport type TabBarProps = {\n /** tab grootte. (default = 'n') */\n size?: SizeProp;\n /** style van de tabs */\n styling?: 'boxed' | 'toggle' | undefined;\n /** links, rechts of centered uilijnen (default = 'l') */\n alignment?: AlignmentProp | undefined;\n // /** de kleur van de tabs, default = 'p' */\n // color?: ColorProp | undefined;\n /** is de tabbar fullwidth */\n fullwidth?: boolean;\n /** initial active tab (default 1e item) */\n initialTab?: number | string | undefined;\n /** active tab, change the current tab AND sets the initial tab, (default 1e item) */\n activeTab?: number | string | undefined;\n /**\n * Afhandeling van een tab geselecteerd.\n * @param index index selected tab\n */\n onTabChange(index: number | string): void;\n /** De tab items: Allemaal TabItem-Components */\n children: React.ReactNode;\n};\n\nexport type TabBarItemProps = {\n /** tooltip voor dit tabbar item */ tooltip?: string;\n /** content voor dit tabbar item */ children: React.ReactNode;\n /** id van dit item */ tabId: number | string;\n};\n\n/**\n * Maak een tabs-lijst.\n * zichtbare content moet zelf geregeld worden.\n * @param props\n * @returns tabs component\n * @example\n * <TabBar onTabChange={handleTabChange} activeTab={activePage}>\n * <TabBar.Item tabId={1}>Tab 1</TabBar.Item>\n * <TabBar.Item tabId={2}><Icon icon={faFLag} />Tab 2</TabBar.Item>\n * <TabBar.Item tabId={3}>Tab 3</TabBar.Item>\n * </TabBar>\n */\nconst TabBar = (props: TabBarProps): JSX.Element => {\n const [activeTab, setActiveTab] = React.useState(props.activeTab ?? props.initialTab);\n\n const onTabSelected = (index: string) => {\n setActiveTab(index);\n props.onTabChange(index);\n };\n\n React.useEffect(() => {\n if (props.activeTab !== undefined) setActiveTab(props.activeTab);\n }, [props.activeTab]);\n\n const { size, alignment, fullwidth, styling } = props;\n let className = 'tabs';\n if (size === 's') className += ' is-small';\n else if (size === 'l') className += ' is-medium';\n else if (size === 'xl') className += ' is-large';\n\n // if (color === 'l') className += ' is-link';\n // else if (color === 's') className += ' is-success';\n // else if (color === 'w') className += ' is-white';\n // else if (color === 'i') className += ' is-info';\n // else if (color === 'd') className += ' is-dark';\n // else className += ' is-primary';\n\n if (styling === 'boxed') className += ' is-boxed';\n else if (styling === 'toggle') className += ' is-toggle';\n\n if (alignment === 'c') className += ' is-centered';\n else if (alignment === 'r') className += ' is-right';\n className += fullwidth ? ' is-fullwidth' : '';\n\n const tabItems = React.Children.map(props.children, (child: any, index: number) => {\n return (\n <TabBarItemWrapper\n isActive={activeTab ? activeTab == child.props.tabId : index == 0}\n onClick={() => onTabSelected(child.props.tabId)}\n >\n {child}\n </TabBarItemWrapper>\n );\n });\n\n return (\n <div className={className}>\n <ul>{tabItems}</ul>\n </div>\n );\n};\n\nfunction TabBarItemWrapper({\n children,\n isActive,\n onClick,\n}: {\n children: React.ReactNode;\n isActive: boolean;\n onClick: () => void;\n}) {\n return (\n <li role=\"tab\" className={isActive ? 'is-active' : undefined} onClick={onClick}>\n {children}\n </li>\n );\n}\n\nfunction TabBarItem({ children, tabId, tooltip }: TabBarItemProps): JSX.Element {\n const itemContent = React.Children.map(children, (child: any) => {\n if (!child || child === '') return null;\n return child;\n });\n\n return (\n <a title={tooltip || undefined} id={tabId?.toString() || undefined}>\n {itemContent}\n </a>\n );\n}\n\n/** Een item in deen <TabBar> component\n * @param props\n * @returns tab item component\n * @example <TabBar.Item tabId={1}>Tab 1</TabBar.Item>\n */\nTabBar.Item = TabBarItem;\nexport { TabBar };\n","/* eslint-disable no-unused-vars */\nimport React from 'react';\nimport { ColorProp, TagSizeProp, AlignmentProp } from '~/loon-react-bulma-types';\n\nexport type TagProps = {\n /** content van de tag */\n children: React.ReactNode;\n /** kleur van de tag, de standaard kleuren + dark & light */\n color?: ColorProp | 'dark' | 'light';\n /** sizes van de tag. (default = 's'). LET OP 3 verschillende sizes ipv 4! */\n size?: TagSizeProp;\n /** moet de light-colored versie van de tag getoont worden */\n light?: boolean;\n /** zijn de tags rounded ? */\n rounded?: boolean;\n /** moet er een dismiss-knop op de tag, en zo ja, definieer daar een functie voor */\n onDismiss?: (e: any) => void;\n /** tooltip voor de tag */\n tooltip?: string;\n};\n\nexport type TagsProps = {\n /** de content van de tags-div */\n children: React.ReactNode;\n /** moeten de tags aan elkaar geplakt worden */\n merged?: boolean;\n /** de grootte van alle tags , overschrijfbaar per tag (default = 's'). LET OP: 3 sizes ipv 4 */\n size?: TagSizeProp;\n /** alignment van de tags (default = 'l') */\n alignment?: AlignmentProp;\n /** extra classes op de tags container */\n className?: string | (() => string);\n};\n\n/**\n * Maak een tag\n * @param props Tag Props\n * @returns een tag\n * @example\n * <Tag>Hello</Tag>\n * <Tag color='d'>Danger</Tag>\n */\nexport function Tag(props: TagProps): JSX.Element {\n let classes = 'tag';\n classes += props.light ? ' is-light' : '';\n classes += props.rounded ? ' is-rounded' : '';\n\n if (props.color === 'p') classes += ' is-primary';\n else if (props.color === 'i') classes += ' is-info';\n else if (props.color === 'd') classes += ' is-danger';\n else if (props.color === 'w') classes += ' is-warning';\n else if (props.color === 's') classes += ' is-success';\n else if (props.color === 'dark') classes += ' is-dark';\n else if (props.color === 'light') classes += ' is-light';\n else classes += ' is-link';\n\n if (props.size === 'm') classes += ' is-medium';\n else if (props.size === 'l') classes += ' is-large';\n\n const handleDismiss = (e: any) => props.onDismiss && props.onDismiss(e);\n\n return (\n <span className={classes} title={props.tooltip}>\n {props.children}\n {props.onDismiss && <button className=\"delete\" onClick={(e: any) => handleDismiss(e)}></button>}\n </span>\n );\n}\n\n/**\n * Maak een tag-container aan. De tags kunnen aan elkaar geplakt worden of niet.\n * De grootte van de tags kan ook ingesteld worden\n * @param props\n * @returns een groep van tags\n * @example\n * <Tags size=\"m\">\n * <Tag>Tag 1</Tag>\n * <Tag color=\"i\">Tag 2</Tag>\n * </Tags>\n */\nexport function Tags(props: TagsProps): JSX.Element {\n let classes = 'tags';\n\n // size, default is 's'\n if (props.size === 'm') classes += ' are-medium';\n else if (props.size === 'l') classes += ' are-large';\n\n // alignment, default = 'l', links\n if (props.alignment === 'r') classes += ' is-right';\n else if (props.alignment === 'c') classes += ' is-centered';\n\n if (props.merged) classes += ' has-addons';\n\n classes = `${classes} ${typeof props.className == 'function' ? props.className() : props.className}`.trim();\n\n const children = React.Children.map(props.children, (child: any) => {\n if (child.type === Tag) return child;\n return child;\n });\n return <div className={classes}>{children}</div>;\n}\n","import { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport React from 'react';\nimport { AlignmentProp, ColorProp, TagSizeProp } from '~/loon-react-bulma-types';\nimport { Icon } from '../Icon/Icon';\nimport { Tag } from '../Tag/Tag';\n\ntype TimeLineProps = {\n /** alignment van de timeline (default = 'l', left) */\n alignment?: AlignmentProp;\n /** children van de timeline, dus TimeLine.Item & TimeLine.Point */\n children: React.ReactNode;\n /** extra classname op de timeline container */\n className?: string;\n};\n\ntype TimeLineItemProps = {\n /** aanpassingen aan de default grijze marker op de timeline. Los van elkaar instelbaar */\n marker?: {\n /** icon op de timeline */\n icon?: string | IconProp;\n /** aangepaste kleur */\n color?: ColorProp;\n };\n /** een title voor omschrijving van het item */\n heading?: string;\n /** content bij dit timeline item */\n children: React.ReactNode;\n /** een tooltip voor een timeline item */\n tooltip?: string;\n /** onClick() callback voor timeline content */\n onClick?: (heading?: string) => void;\n};\ntype TimeLinePointProps = {\n /** de content van het Point */\n children: React.ReactNode;\n /** de kleur van het point (default = 'l', link) */\n color?: ColorProp;\n /** de grotte van het point (default = 's', small) */\n size?: TagSizeProp;\n /** een optionele tooltip voor dit point */\n tooltip?: string;\n /** onClick() callback voor timeline content */\n onClick?: () => void;\n};\n\n/**\n * Een timeline is een lijst van items met een marker op een lijn.\n * @param props\n * @returns een Timeline component\n * @example\n * <TimeLine alignment=\"c\">\n * <TimeLine.Point>Start</TimeLine.Point>\n * <TimeLine.Point color=\"l\">2016</TimeLine.Point>\n * <TimeLine.Item heading=\"March 2016\">nothing happened</TimeLine.Item>\n * <TimeLine.Item marker={{ color: 's' }} heading=\"August 2016\">\n * Als nothing happened\n * </TimeLine.Item>\n * <TimeLine.Point color=\"d\" size=\"m\"> 2017</TimeLine.Point>\n * </TimeLine>\n */\nconst TimeLine = ({ alignment, children, className }: TimeLineProps): JSX.Element => {\n let align = 'is-left';\n if (alignment === 'r') align = 'is-rtl';\n else if (alignment === 'c') align = 'is-centered';\n\n className = `timeline ${align} ${className}`;\n return <div className={className}>{children}</div>;\n};\n\n/**\n * Een punt op de timeline, bijvoorbeeld een jaartal of een datum. Er wordt een <Tag> gebruikt\n * @param props\n * @returns een punt (Tag-component) op de timeline\n * @example <TimeLine.Point color=\"l\">2016</TimeLine.Point>\n */\nTimeLine.Point = ({ children, color, size, tooltip, onClick }: TimeLinePointProps): JSX.Element => {\n return (\n <div className=\"timeline-header\" onClick={onClick}>\n <Tag color={color ?? 'l'} size={size} tooltip={tooltip} light rounded>\n {children}\n </Tag>\n </div>\n );\n};\n\n/**\n * Een item met een omschrijving, heading en icon op de timeline\n * @param props\n * @returns een Item op de timeline\n * @example <TimeLine.Item heading=\"March 2016\">nothing happened</TimeLine.Item>\n */\nTimeLine.Item = ({ marker, heading, children, tooltip, onClick }: TimeLineItemProps): JSX.Element => {\n let markerClassName = 'timeline-marker';\n if (marker?.color === 'p') markerClassName += ' is-primary';\n else if (marker?.color === 'l') markerClassName += ' is-link';\n else if (marker?.color === 'i') markerClassName += ' is-info';\n else if (marker?.color === 's') markerClassName += ' is-success';\n else if (marker?.color === 'd') markerClassName += ' is-danger';\n else if (marker?.color === 'w') markerClassName += ' is-warning';\n if (marker?.icon) markerClassName += ' is-icon';\n\n return (\n <div className=\"timeline-item\" title={tooltip} onClick={() => onClick && onClick(heading)}>\n <div className={markerClassName}>{marker?.icon && <Icon icon={marker.icon} />}</div>\n\n <div className=\"timeline-content\">\n {heading && <p className=\"heading\">{heading}</p>}\n <div>{children}</div>\n </div>\n </div>\n );\n};\n\nexport { TimeLine };\nexport type { TimeLineProps, TimeLineItemProps, TimeLinePointProps };\n","import React from 'react';\n\ntype TitleProps = {\n /** content van de title. Kan ook met txt gezet worden */\n children?: React.ReactNode;\n /** content van de title. Kan ook met children gezet worden */\n txt?: string;\n /** de bulma-grootte die gebruikt wordt */\n bulmaSize?: '1' | '2' | '3' | '4' | '5' | '6' | number;\n /** de heading grootte: h1, h2, h3, h4, h5 of h6 */\n headingSize?: '1' | '2' | '3' | '4' | '5' | '6' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | undefined | number;\n};\n\ntype SubtitleProps = {\n /** content van de subtitle. Kan ook met txt gezet worden */\n children?: React.ReactNode;\n /** content van de subtitle. Kan ook met children gezet worden */\n txt?: string;\n /** de bulma-grootte die gebruikt wordt */\n bulmaSize?: '3' | '4' | '5' | '6' | number;\n /** de heading grootte: h1, h2, h3, h4, h5 of h6 */\n headingSize?: '1' | '2' | '3' | '4' | '5' | '6' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | undefined | number;\n};\n\ntype TitleWithSubtitleProps = {\n /** content van de title */\n titleTxt: string;\n /** content van de subtitle */\n subtitleTxt: string;\n /** de bulma-grootte die gebruikt wordt */\n bulmaSize?: '1' | '2' | '3' | '4' | '5' | '6' | number;\n /** de heading grootte: h1, h2, h3, h4, h5 of h6 */\n headingSize?: '1' | '2' | '3' | '4' | '5' | '6' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | undefined | number;\n};\n\n/**\n * Maak een heading. @see {@link TitleWithSubtitle} voor een combinatie met een subtitle.\n * @param props txt as string, size voor bulma (is-1 t/m is-6) en een heading-waarde (h1-h6)\n * @returns een heading (h1-h6) met class 'title'\n * @example\n * <Title txt=\"Default title\" />\n * <Title txt=\"Title\" bulmaSize={1} headingSize={4} />\n */\nfunction Title(props: TitleProps): JSX.Element {\n const bulmaSize = props.bulmaSize ?? 3;\n const hSize = typeof props.headingSize == 'string' ? +props.headingSize.replace('h', '') : props.headingSize;\n const heading = props.headingSize ? hSize : bulmaSize;\n const classes = `title is-${bulmaSize}`;\n const txt = props.children ?? props.txt;\n if (!txt) throw Error('Title moet children OF txt=\"...\" hebben');\n\n switch (heading) {\n case 1:\n return <h1 className={classes}>{txt}</h1>;\n case 2:\n return <h2 className={classes}>{txt}</h2>;\n // 3 is de default, dus via default\n // case 3:\n // return <h3 className={classes}>{txt}</h3>;\n case 4:\n return <h4 className={classes}>{txt}</h4>;\n case 5:\n return <h5 className={classes}>{txt}</h5>;\n case 6:\n return <h6 className={classes}>{txt}</h6>;\n default:\n return <h3 className={classes}>{txt}</h3>;\n }\n}\n\n/**\n * Maak een subtitle voor een heading. @see {@link TitleWithSubtitle} voor een combinatie van deze 2.\n * @param props text as string, size voor bulma (is-3 t/m is-6) en een heading-waarde (h2-h6)\n * @returns een heading (h1-h6) met class 'subtitle'.\n * @example\n * <Subtitle txt=\"Default subtitle\" />\n * <Subtitle txt=\"Subtitle\" bulmaSize={3} headingSize={4} />\n */\nfunction Subtitle(props: SubtitleProps): JSX.Element {\n const bulmaSize = props.bulmaSize ?? 5;\n const hSize = typeof props.headingSize == 'string' ? +props.headingSize.replace('h', '') : props.headingSize;\n const heading = props.headingSize ? hSize : bulmaSize;\n const classes = `subtitle is-${bulmaSize}`;\n const txt = props.children ?? props.txt;\n if (!txt) throw Error('Subtitle moet children OF txt=\"...\" hebben.');\n\n switch (heading) {\n case 1:\n return <h1 className={classes}>{txt}</h1>;\n case 2:\n return <h2 className={classes}>{txt}</h2>;\n case 3:\n return <h3 className={classes}>{txt}</h3>;\n case 4:\n return <h4 className={classes}>{txt}</h4>;\n // 5 is de default, dus via default\n // case 5:\n // return <h5 className={classes}>{txt}</h5>;\n case 6:\n return <h6 className={classes}>{txt}</h6>;\n default:\n return <h3 className={classes}>{txt}</h3>;\n }\n}\n\n/**\n * Combineer een title en een subtitle\n * @param props titleTxt as string, subtitleTxt as string, bulmaSize as number (1-4) en headingSize as number (1-4)\n * De subtitle sizes worden +2 gedaan, dus bij title bulmaSize = 1 en headingSize = 3 (<h3 class=\"title is-1\">)\n * komt een subtitle van (<h6 class=\"subtitle is-4\">)\n * @returns een title met daaronder een subtitle.\n * @example <TitleWithSubtitle titleTxt=\"Title\" subtitleTxt=\"Subtitle\" bulmaSize={1} headingSize={3} />\n */\nfunction TitleWithSubtitle(props: TitleWithSubtitleProps): JSX.Element {\n const bulmaSize = parseInt((props.bulmaSize ?? 3).toString());\n const hSize = typeof props.headingSize == 'string' ? +props.headingSize.replace('h', '') : props.headingSize;\n const heading = hSize || bulmaSize;\n return (\n <div>\n <Title txt={props.titleTxt} bulmaSize={bulmaSize} headingSize={heading} />\n <Subtitle txt={props.subtitleTxt} bulmaSize={bulmaSize + 2} headingSize={heading + 1} />\n </div>\n );\n}\n\nexport { Title, Subtitle, TitleWithSubtitle };\nexport type { TitleProps, SubtitleProps, TitleWithSubtitleProps };\n","import React from 'react';\nimport { SizeProp, ColorProp, AlignmentProp } from '~/loon-react-bulma-types';\n\ntype ToggleBarProps = {\n /** de beginwaarde (default = undefined)\n * Deze property wordt alleen voor ToggleItems gebruikt. voor OnOffToggleItems kan dat per item geset worden\n * Om een waarde van buitenaf te zete, gebruik je de 'value'-prop\n */\n initialValue?: string;\n /** de beginwaarde, alsd ie van buitenaf aangepast mag worden. gebruik 'initialValue' voor alleen een beginwaarde */\n value?: string;\n /** ToggleItems */\n children: React.ReactNode;\n /** callback voor toggelen */\n onToggle?: (toggledItem: string) => void;\n /** zijn de randen afgerond of vierkant (default true) */\n rounded?: boolean;\n /** alignment van de container */\n alignment?: AlignmentProp;\n /** size van de buttons (default = 's') */\n size?: SizeProp;\n /** color van de toggles (default = 's', success), (kan per item overschreven worden) */\n onColor?: ColorProp;\n /** color van de toggles (default = 'd', danger), (kan per item overschreven worden) */\n offColor?: ColorProp;\n /** zij de toggles light of niet (default = true) */\n light?: boolean;\n /** zijn de toggles outlined of niet (default = false) */\n outlined?: boolean;\n /** extra classes voor de toggle-bar */\n className?: string;\n};\n\ntype ToggleItemProps = {\n /** content van een Toggle Item */\n children: React.ReactNode;\n /** is dit item disabled? */\n disabled?: boolean;\n /** selectie-naam voor dit toggle-item. ALs undefined wordt de children-string-content gebruikt */\n identifier?: string;\n /** tooltip voor dit toggle-item */\n tooltip?: string;\n /** color voor on-status */\n onColor?: ColorProp;\n /** color voor off-status */\n offColor?: ColorProp;\n};\n\ntype InternToggleItemProps = ToggleItemProps & {\n toggled: boolean;\n onToggleClick: (toggledItem: string) => void;\n light?: boolean;\n outlined?: boolean;\n rounded?: boolean;\n};\n\ntype OnOffToggleItemProps = ToggleItemProps & {\n /** set de initiele waarde van dit toggle item */\n toggled?: boolean;\n /** onToggle callback, deze 'cancelt' de OnToggle van de <ItemToggleBar> voor dit item */\n onToggle?: (on: boolean, item: string) => void;\n};\n\ntype InternOnOffToggleItemProps = OnOffToggleItemProps & {\n children: React.ReactNode;\n light?: boolean;\n outlined?: boolean;\n rounded?: boolean;\n};\n\n/**\n * Een groep van bij-elkaar-horende buttons waar er maar 1 van actief kan zijn.\n * Om elk toggle-item APART te kunnen togglen, gebruik je de ItemToggleBar Component\n * @param props\n * @returns een Toggle bar\n * @example\n * <ToggleBar onToggle={handleToggle} initialValue={calendarView}>\n * <ToggleBar.Item>WeekView</ToggleBar.Item>\n * <ToggleBar.Item>MonthView</ToggleBar.Item>\n * </ToggleBar>\n *\n * <ToggleBar >\n * <ToggleBar.OnOffItem onToggle={handleToggle2} identifier=\"1\">\n * Toggle 2\n * </ToggleBar.OnOffItem>\n * <ToggleBar.OnOffItem toggled={true} onToggle={handleToggle3} identifier=\"2\">\n * Toggle 3\n * </ToggleBar.OnOffItem>\n * </ToggleBar>\n */\nconst ToggleBar = (props: ToggleBarProps): JSX.Element => {\n const { size, alignment } = props;\n const [toggledItem, setToggledItem] = React.useState<string | undefined>(props.value ?? props.initialValue);\n\n React.useEffect(() => {\n if (props.value != undefined && toggledItem != props.value) setToggledItem(props.value);\n }, [props.value]);\n\n const handleToggle = (item: string) => {\n if (toggledItem == item) return;\n props.onToggle && props.onToggle(item);\n setToggledItem(item);\n };\n\n const children = React.Children.map(props.children, (child: any, index: number) => {\n const toggleName: string =\n child.props?.identifier ??\n React.Children.map(child.props.children, (child: any) => {\n if (typeof child === 'string') return child;\n else if (typeof child.type === 'string') return child.type;\n else return child;\n })?.join('') ??\n '' + index;\n\n if (child.type === ToggleItem)\n return (\n <InternToggleItem\n {...child.props}\n toggled={toggledItem == toggleName}\n identifier={toggleName}\n onColor={child.props.onColor}\n offColor={child.props.onColor}\n light={props.light ?? true}\n outlined={props.outlined ?? false}\n rounded={props.rounded}\n onToggleClick={handleToggle}\n />\n );\n else if (child.type === OnOffToggleItem)\n return (\n <InternOnOffToggleItem\n {...child.props}\n identifier={toggleName}\n // onToggle={(item: string) => handleToggle(item)}\n outlined={props.outlined ?? false}\n light={props.light ?? true}\n rounded={props.rounded ?? true}\n offColor={child.props.offColor ?? props.offColor}\n onColor={child.props.onColor ?? props.onColor}\n />\n );\n\n return child;\n });\n\n let classes = 'buttons has-addons';\n\n if (size === 'm') classes += ' are-normal';\n else if (size === 'l') classes += ' are-medium';\n else if (size === 'xl') classes += ' are-large';\n else classes += ' are-small'; // default\n\n if (alignment === 'c') classes += ' is-centered';\n else if (alignment === 'r') classes += ' is-right';\n else classes += ' is-left'; // default\n\n if (props.className) classes += ' ' + props.className;\n\n return <div className={classes}>{children}</div>;\n};\n\n/** Toggle item */\nconst ToggleItem = (props: ToggleItemProps) => <button disabled={props.disabled}>{props.children}</button>;\n/** ALLEEN VOOR INTERN GEBRUIK!\n * Deze component vervang het ToggleItem\n */\nfunction InternToggleItem(props: InternToggleItemProps): JSX.Element {\n const propColor = props.toggled ? props.onColor ?? 's' : props.offColor ?? 'd';\n let color = '';\n if (propColor === 'i') color = ' is-info';\n else if (propColor === 'p') color = ' is-primary';\n else if (propColor === 'd') color = ' is-danger';\n else if (propColor === 's') color = ' is-success';\n else if (propColor === 'w') color = ' is-warning';\n\n let classes = `button ${color}`;\n if (props.outlined) classes += ' is-outlined';\n if (props.light) classes += ' is-light';\n if (props.rounded) classes += ' is-rounded';\n if (props.toggled) classes += ' is-toggled';\n\n return (\n <button\n disabled={props.disabled}\n title={props.tooltip}\n className={classes}\n onClick={() => props.onToggleClick(props.identifier!)}\n >\n {props.children}\n </button>\n );\n}\n\n/** On Off Toggle Item - zelfbepalend */\nconst OnOffToggleItem = (props: OnOffToggleItemProps) => <button disabled={props.disabled}></button>;\n/** INTERN GEBRUIKT - NIET EXPORTEREN\n * Deze component vervangt de OnOfToggleItem\n */\nfunction InternOnOffToggleItem(props: OnOffToggleItemProps & InternOnOffToggleItemProps): JSX.Element {\n const [toggled, setToggled] = React.useState(props.toggled);\n React.useEffect(() => {\n if (props.toggled != undefined) setToggled(props.toggled);\n }, [props.toggled]);\n\n const toggleColor = toggled ? props.onColor ?? 's' : props.offColor ?? 'd';\n let classes = 'button';\n if (toggleColor === 'i') classes += ' is-info';\n else if (toggleColor === 'p') classes += ' is-primary';\n else if (toggleColor === 'd') classes += ' is-danger';\n else if (toggleColor === 's') classes += ' is-success';\n else if (toggleColor === 'w') classes += ' is-warning';\n\n if (props.rounded) classes += ' is-rounded';\n if (props.light) classes += ' is-light';\n if (props.outlined) classes += ' is-outlined';\n if (toggled) classes += ' is-toggled';\n\n const handleToggle = () => {\n if (props.onToggle) props.onToggle(!toggled, props.identifier!);\n setToggled(!toggled);\n };\n\n return (\n <button\n disabled={props.disabled}\n title={props.tooltip}\n id={props.identifier!}\n className={classes}\n onClick={() => handleToggle()}\n >\n {props.children}\n </button>\n );\n}\n\n/**\n * Item binnen de ToggleBar. Een van de ToggleItems in een ToggleBar kan maar actief zijn.\n * @param props\n * @returns een item in de togglebar waarvan er maar 1 actief kan zijn\n * @example <ToggleBar.Item>Item 2</ToggleBar.Item>\n */\nToggleBar.Item = ToggleItem;\n\n/**\n * Een zelf-toggelend item in een ToggleBar. OnOffToggleItems regelen zelf de toggle-state.\n * @param props\n * @returns een losstaand toggle-baar item.\n * @example <ToggleBar.OnoffItem onToggle={handleToggle} identifier=\"1\">Toggle 1</ToggleBar.OnoffItem>\n */\nToggleBar.OnOffItem = OnOffToggleItem;\n\nexport { ToggleBar };\nexport type { ToggleBarProps, ToggleItemProps, OnOffToggleItemProps };\n","import React from 'react';\nimport { AlignmentProp } from '~/loon-react-bulma-types';\n\ntype ButtonGroupProps = {\n /** Een buttongroup kan alleen Buttons als children hebben! */\n children?: React.ReactNode;\n /** Moeten de buttons aan elkaar vast gezet worden (default = false) */\n hasAddons?: boolean;\n /** aan welke kant moeten de buttons aligned worden (default = l) */\n alignment?: AlignmentProp | undefined;\n /** voeg extra classes aan de buttons-container toe */\n className?: string;\n};\n\n/**\n * Groupeer buttons in een groep. Ze krijgen allemala dezelfde grootte en worden als gewenst anders aligned.\n * Een ButtonGroup mag ALLEEN buttons bevatten!\n * sizes: small, medium, large\n * alignment: l(eft), c(entered), r(ight)\n * merge: voeg de buttons samen tot een buttonbar\n * @param props\n * @returns een button groep\n * @example\n * <ButtonGroup hasAddons alignment=\"r\">\n * <Button>Left</Button>\n * <Button>Middle</Button>\n * <Button>Right</Button>\n * </ButtonGroup>\n */\nconst ButtonGroup = (props: ButtonGroupProps): JSX.Element => {\n const { alignment, className, children } = props;\n let classNames = 'field is-grouped';\n classNames += props.hasAddons ? ' has-addons' : '';\n\n // left aligned hoef je niks voor te doen, is default\n if (alignment === 'c') classNames += ' is-grouped-centered';\n else if (alignment === 'r') classNames += ' is-grouped-right';\n else classNames += ' is-grouped-left';\n\n if (className) classNames += ' ' + className;\n\n return (\n <div className={classNames}>\n {React.Children.map(children, (child) => {\n return <div className=\"control\">{child}</div>;\n })}\n </div>\n );\n};\n\nexport { ButtonGroup };\nexport type { ButtonGroupProps };\n","import React from 'react';\nimport { warnPackageUser } from '~/utils/warn-dev-util';\nimport { BaseButtonProps, ButtonProps } from './ButtonProps';\n\n/**\n * Button is helemaal instelbaar. Maak de button. Alle button instellingen worden hier verwerkt.\n * @param props\n * @returns een default button\n * @example <Button>Button</Button>\n * @description Alle mogelijke props voor de Button-component\n * | Prop | Value | Default | Description |\n * |----------|-------------------------|----------|-----------------------------------------|\n * | children | | | De content van de button (icon, text) |\n * | color | `p, l, i, w, d, s` | `p` | Kleuren voor de button |\n * | styling | `l`, light | | Light style voor de button |\n * | | `o`, outlined | | Outlined style voor de button |\n * | | `i`, inverted | | Inverted style voor de button |\n * | | `lo`, light-outlined | | Light & outlined style voor de button |\n * | | `s`, static | | static style voor de button (grey) |\n * | size | `s, m, l, xl` | | sizes voor de button |\n * | rounded | `true, false` | `false` | Afgeronde hoeken voor de button |\n * | loading | `true, false` | `false` | heeft button de loading state |\n * | disabled | `true, false` | `false` | is de button disabled |\n * | tooltip | string | | tooltip voor de button |\n * | id | string | | id voor de button |\n * | onClick | function | | onClick voor de button |\n * | type | `button, reset, submit` | `button` | type 'button' voor de button |\n */\nconst Button = (props: BaseButtonProps): JSX.Element => {\n const { color, size, rounded, loading, disabled, type, styling } = props;\n let className = 'button';\n\n if (styling === 'static' || styling === 's') className += ' is-static';\n else {\n if (color === 'i') className += ' is-info';\n else if (color === 'l') className += ' is-link';\n else if (color === 'd') className += ' is-danger';\n else if (color === 's') className += ' is-success';\n else if (color === 'w') className += ' is-warning';\n else className += ' is-primary';\n\n if (styling === 'light' || styling === 'l') className += ' is-light';\n else if (styling === 'outlined' || styling === 'o') className += ' is-outlined';\n else if (styling === 'inverted' || styling === 'i') className += ' is-inverted';\n else if (styling === 'light-outlined' || styling === 'lo') className += ' is-light is-outlined';\n }\n\n if (size === 's') className += ' is-small';\n else if (size === 'l') className += ' is-medium';\n else if (size === 'xl') className += ' is-large';\n\n if (rounded) className += ' is-rounded';\n if (loading) className += ' is-loading';\n\n const handleClick = (e: any) => {\n if (loading || disabled || styling == 'static') return;\n props.onClick && props.onClick(e);\n };\n\n const children: any[] | null | undefined = React.Children.map(props.children, (child: any) => {\n if (typeof child === 'string') return <span>{child}</span>;\n return child;\n });\n\n if (!children || children.length === 0)\n warnPackageUser(`<Button>: A <Button> should have at least one child (Current 0).`);\n\n return (\n <button\n className={className}\n type={type ?? 'button'}\n disabled={disabled}\n onClick={(e) => handleClick(e)}\n title={props.tooltip}\n id={props.id}\n >\n {children}\n </button>\n );\n};\n\n/**\n * Een Static Button\n * Een static button is niet interactief, maar wordt bijvoorbeeld gebruikt als scheiding voor add-ons\n * @example <Button.Static>Static Button</Button.Static>\n */\nButton.Static = (props: ButtonProps): JSX.Element => {\n return (\n <Button {...props} styling=\"static\">\n {props.children}\n </Button>\n );\n};\n\n/** Een Button in de primary kleur\n * @example <Button.Primary>Primary Button</Button.Primary>\n */\nButton.Primary = (props: ButtonProps): JSX.Element => (\n <Button {...props} color=\"p\" styling={props.styling ?? 'default'}>\n {props.children}\n </Button>\n);\n\n/** Een Button in de success kleur\n * @example <Button.Success>Success Button</Button.Success>\n */\nButton.Success = (props: ButtonProps): JSX.Element => (\n <Button {...props} color=\"s\" styling={props.styling ?? 'default'}>\n {props.children}\n </Button>\n);\n\n/** Een Button in de danger kleur\n * @example <Button.Danger>Danger Button</Button.Danger>\n */\nButton.Danger = (props: ButtonProps): JSX.Element => (\n <Button {...props} color=\"d\" styling={props.styling ?? 'default'}>\n {props.children}\n </Button>\n);\n\n/** Een Button in de warning kleur\n * @example <Button.Warning>Warning Button</Button.Warning>\n */\nButton.Warning = (props: ButtonProps): JSX.Element => (\n <Button {...props} color=\"w\" styling={props.styling ?? 'default'}>\n {props.children}\n </Button>\n);\n\n/** Een Button in de info kleur\n * @example <Button.Info>Info Button</Button.Info>\n */\nButton.Info = (props: ButtonProps): JSX.Element => (\n <Button {...props} color=\"i\" styling={props.styling ?? 'default'}>\n {props.children}\n </Button>\n);\n\n/** Een Button in de link kleur\n * @example <Button.Link>Link Button</Button.Link>\n */\nButton.Link = (props: ButtonProps): JSX.Element => (\n <Button {...props} color=\"l\" styling={props.styling ?? 'default'}>\n {props.children}\n </Button>\n);\n\nexport { Button };\n","import React from 'react';\n\ntype LinkButtonProps = {\n /** de content van de button */\n children?: React.ReactNode;\n /** onClick voor de button */\n onClick: (e: any) => any | void;\n /** een tooltip voor de button */\n tooltip?: string;\n id?: string;\n};\n\n/**\n * Een button die er uit ziet als een link. Om een link te maken met een onClick() ipv een href.\n * @param props\n * @returns een button die er uit ziet als een link\n * @example <LinkButton onClick={handleClick}>Click me!</LinkButton>\n */\nconst LinkButton = ({ children, onClick, tooltip, id }: LinkButtonProps): JSX.Element => (\n <button className=\"link-button\" onClick={(e) => onClick(e)} title={tooltip} id={id}>\n {children}\n </button>\n);\n\ntype LinkProps = {\n /** link / URL */\n href: string;\n /** open target\n * - default: _blank\n * - string: naam van een <iframe>\n */\n target?: '_blank' | '_self' | '_parent' | '_top' | string;\n /** releatie tussen het huidige document en het gelinkte document */\n rel?:\n | 'alternat'\n | 'author'\n | 'bookmark'\n | 'external'\n | 'help'\n | 'license'\n | 'next'\n | 'nofollow'\n | 'noreferrer'\n | 'noopener'\n | 'prev'\n | 'search'\n | 'tag';\n /** MIME type van een evt download */\n type?: string;\n /** de taal van het gelinkte document */\n hreflang?: string;\n /** is dit een downloadlink? */\n download?: boolean;\n /** de inhoud van de link: wat is er te lezen / zien */\n children?: React.ReactNode;\n /** een tooltip voor de button */\n tooltip?: string;\n id?: string;\n};\n\n/**\n * Een link (duh) die er hetzelfde uit ziet als de linkbutton.\n * @param props\n * @returns een link\n * @example <Link href=\"https://www.google.com\">Google</Link>\n */\nconst Link = (props: LinkProps): JSX.Element => (\n <a\n className=\"link-button\"\n href={props.href}\n target={props.target ?? '_blank'}\n title={props.tooltip}\n id={props.id}\n rel={props.rel ?? 'noopener'}\n >\n {props.children}\n </a>\n);\n\nexport { Link, LinkButton };\nexport type { LinkProps, LinkButtonProps };\n","/**\n * kikt of een jaar een schikkeljaar is\n * @param date een datum in het gewtenste jaar OF een jaartal\n * @returns true als het jaar een schikkeljaar is\n * @example\n * isLeapYear(new Date(2020, 0, 1)) // true\n * isLeapYear(2020) // true\n * isLeapYear(new Date(2019, 0, 1)) // false\n * isLeapYear(2019) // false\n * @deprecated: use JSDateTime class\n */\nexport const isLeapYear = (date: Date | number): boolean => {\n const year = typeof date === 'number' ? date : date.getFullYear();\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n};\n\n/**\n * vindt de 1e dag van het jaar voor een gegeven datum\n * @param date date\n * @returns new Date op 1e dag van het jaar\n * @example starOfYear(new Date(2022, 9, 20)) // 2022-01-01\n * @deprecated: use JSDateTime class\n */\nexport const startOfYear = (date: Date): Date => new Date(date.getFullYear(), 0, 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n/**\n * vindt de laatste dag van het jaar voor een gegeven datum\n * @param date date\n * @returns new Date op laatstee dag van het jaar\n * @example * endOfYear(new Date(2022, 9, 20)) // 2022-12-31\n * @deprecated: use JSDateTime class\n */\nexport const endOfYear = (date: Date): Date => new Date(date.getFullYear(), 11, 31, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n\n/**\n * vind de 1e dag van de maand voor een gegeven datum\n * @param date date\n * @returns new Date op laatste dag van de maand\n * @example startOfMonth(new Date(2022, 9, 20)) // 2022-10-01\n * @deprecated: use JSDateTime class\n */\nexport const startOfMonth = (date: Date): Date => new Date(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n/**\n * vindt de laatste dag van de maand voor een gegeven datum\n * @param date date\n * @returns new Date op laatste dag van de maand\n * @example endOfMonth(new Date(2022, 9, 20)) // 2022-10-31\n * @deprecated: use JSDateTime class\n */\nexport const endOfMonth = (date: Date): Date => new Date(date.getFullYear(), date.getMonth() + 1, 0, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n\n/**\n * vindt de 1e dag van een week (maandag) voor een gegeven datum\n * @param date date\n * @returns new Date op eerste dag van de week\n * @example startOfWeek(new Date(2022, 9, 20)) // 2022-10-17\n * @deprecated: use JSDateTime class\n */\nexport const startOfWeek = (date: Date): Date => {\n const newDate = new Date(date);\n const diff = newDate.getDate() - newDate.getDay() + (newDate.getDay() === 0 ? -6 : 1);\n newDate.setDate(diff);\n return newDate;\n};\n/**\n * vind de laatste dag van een week (zondag) voor een gegeven datum\n * @param date date\n * @returns new Date op laatste dag van de week\n * @example endOfWeek(new Date(2022, 9, 20)) // 2022-10-23\n * @deprecated: use JSDateTime class\n */\nexport const endOfWeek = (date: Date): Date => {\n const newDate = new Date(date);\n const lastDay = date.getDate() - (newDate.getDay() - 1) + 6;\n newDate.setDate(lastDay);\n return newDate;\n};\n\n/**\n * Date start van de dag\n * @param date date\n * @returns new Date\n * @example startOfDay(new Date(2022, 9, 20)) // 2022-10-20 00:00:00\n * @deprecated: use JSDateTime class\n */\nexport const startOfDay = (date: Date): Date => {\n const newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n};\n/**\n * Zet datum op einde van de dag\n * @param date date\n * @returns new Date\n * @example endOfDay(new Date(2022, 9, 20)) // 2022-10-20 23:59:59.999\n * @deprecated: use JSDateTime class\n */\nexport const endOfDay = (date: Date): Date => {\n const newDate = new Date(date);\n newDate.setHours(23, 59, 59, 999);\n return newDate;\n};\n\n\n/**\n * Vindt het weeknummer voor de gegeven datum\n * @param date date\n * @returns weeknummer\n * @example getWeekNumber(new Date(2022, 9, 20)) // 42 (week 42 van 2022)\n * @deprecated: use JSDateTime class\n */\nexport const weekNrForDate = (date: Date): number => {\n const newDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n newDate.setUTCDate(newDate.getUTCDate() + 4 - (newDate.getUTCDay() || 7));\n const yrStart = new Date(Date.UTC(newDate.getUTCFullYear(), 0, 1));\n const weekNR = Math.ceil((((newDate.getTime() - yrStart.getTime()) / 86400000) + 1) / 7);\n return weekNR;\n};\n\n/**\n * voegt n jaar toe aan een gegeven datum\n * @param date begindatum\n * @param n aantal jaren om toe te voegen\n * @returns new Date, n jaar later\n * @example addYears(new Date(2022, 9, 20), 1) // 2023-09-20\n * @deprecated: use JSDateTime class\n */\nexport const addYears = (date: Date, n: number): Date => {\n const newDate = new Date(date);\n return new Date(newDate.setFullYear(newDate.getFullYear() + n));\n};\n\n/**\n * voet n maanden toe aan een gegeven datum\n * @param date begindatum\n * @param n aantal maanden toe te voegen\n * @returns new Date, n maanden later\n * @example addMonths(new Date(2022, 9, 20), 1) // 2022-11-20, new Date starts as 2022-10-20 (month zero-indexed in JS)\n * @deprecated: use JSDateTime class\n */\nexport const addMonths = (date: Date, n: number): Date => {\n const newDate = new Date(date);\n return new Date(newDate.setMonth(newDate.getMonth() + n));\n};\n\n/**\n * voegt n dagen toe aan een Date\n * @param date begindatum\n * @param n aantal dagen toevoegen\n * @returns new Date\n * @example addDays(new Date(2022, 9, 20), 1) // 2022-09-21\n * @deprecated: use JSDateTime class\n */\nexport const addDays = (date: Date, n: number): Date => {\n const dt = new Date(date);\n return new Date(dt.setDate(dt.getDate() + n));\n};\n/**\n * voegt n uur toe aan een Date\n * @param date begindatum\n * @param n aantal uur toevoegen\n * @returns new Date\n * @example addHours(new Date(2022, 9, 20), 1) // 2022-09-20 01:00:00\n * @deprecated: use JSDateTime class\n */\nexport const addHours = (date: Date, n: number): Date => {\n const dt = new Date(date);\n return new Date(dt.setHours(dt.getHours() + n));\n};\n\n/**\n * voegt n minuten toe aan een Date\n * @param date begindatum\n * @param mins aantal minuten toe te voegen\n * @returns new Date\n * @example addMinutes(new Date(2022, 9, 20), 1) // 2022-09-20 00:01:00\n * @deprecated: use JSDateTime class\n */\nexport const addMinutes = (date: Date, n: number): Date => {\n const dt = new Date(date);\n return new Date(dt.setMinutes(dt.getMinutes() + n));\n};\n\n/**\n* voegt n seconden toe aan een Date\n* @param date begindatum\n* @param n aantal seconden om toe te voegen\n* @returns new Date\n* @deprecated: use JSDateTime class\n*/\nexport const addSeconds = (date: Date, n: number): Date => {\n const dt = new Date(date);\n return new Date(dt.setSeconds(dt.getSeconds() + n));\n};\n\n/**\n* voegt n milliseconden toe aan een Date\n* @param date begindatum\n* @param ms aantal ms om toe te voegen\n* @returns new Date\n* @example addMilliseconds(new Date(2022, 9, 20), 1) // 2022-09-20 00:00:00.001\n* @deprecated: use JSDateTime class\n*/\nexport const addMilliseconds = (date: Date, ms: number): Date => {\n const dt = new Date(date);\n return new Date(dt.setMilliseconds(dt.getMilliseconds() + ms));\n};\n\n/**\n * Controleert of een date tussen twee andere dates in ligt.\n * include met t, exclude met f. 1e positie is begin, 2e positie is einde\n * dus: 'tt' start & einde inclusief, 'ff' start & einde exclusief\n * @param date de datum om te controleren\n * @param start de meest vroege datum\n * @param end de meest late datum\n * @param include moeten de vroege en late datum inclusief (t) of exclusief (f) zijn. Kan ook met [true, false] worden meegegeven\n * @returns boolean\n * @example\n * isBetween(new Date(2022, 9, 20), new Date(2022, 9, 1), new Date(2022, 9, 30), 'tt') // true\n * isBetween(new Date(2022, 7, 20), new Date(2022, 9, 1), new Date(2022, 9, 30), 'ff') // false\n * isBetween(new Date(2022, 9, 20), new Date(2022, 9, 1), new Date(2022, 9, 30), [true, false]) // true\n * @deprecated: use JSDateTime class\n */\nexport const isBetween = (date: Date, start: Date, end: Date, include: 'tt' | 'tf' | 'ft' | 'ff' | [boolean, boolean] = [true, true]): boolean => {\n const format = typeof include == 'string' ? include : `${[include[0] ? 't' : 'f']}${[include[1] ? 't' : 'f']}`; // tt, t,\n if (format === 'tf')\n return date.getTime() >= start.getTime() && date.getTime() < end.getTime();\n else if (format === 'ft')\n return date.getTime() > start.getTime() && date.getTime() <= end.getTime();\n else if (format === 'ff')\n return date.getTime() > start.getTime() && date.getTime() < end.getTime();\n // tt is default\n return date.getTime() >= start.getTime() && date.getTime() <= end.getTime();\n};\n\n/**\n * controleert of een datum 'vandaag' is\n * @param date \n * @returns boolean\n * @example \n * isToday(new Date(1980, 9, 20)) // false\n * isToday(new Date()) // true\n * @deprecated: use JSDateTime class\n */\nexport const isToday = (date: Date): boolean => {\n const today = new Date();\n return isBetween(date, startOfDay(today), endOfDay(today));\n};\n\n/**\n * maak een tijd-string van een Date\n * @param date Date-obj waar een tijdstring van gewenst is\n * @param format het format van de tijdstring (default = hm --> 08:30) OF een DateTimeFormatOptions object\n * @param AM_PM moet er AM /PM in de tijdstring gezet worden (default = false)\n * @param locale de locale van de gewenste string (default = 'nl-NL')\n * @returns een tijdstring\n * @example\n * timeString(new Date(2022, 9, 20, 8, 30)) // '08:30'\n * timeString(new Date(2022, 9, 20, 8, 30), 'hm') // '08:30'\n * timeString(new Date(2022, 9, 20, 15, 30), 'hm', true) // '03:30 PM'\n * timeString(new Date(2022, 9, 20, 8, 30), {hour: '2-digit', minute: '2-digit'}) // '08:30'\n * @deprecated: use JSDateTime class\n */\nexport const timeString = (date: Date, format: 'hm' | 'hms' | 'hmsS' | Intl.DateTimeFormatOptions = 'hm', AM_PM: boolean = false, locale: string = 'nl-NL'): string => {\n if (format == 'hm')\n return date.toLocaleTimeString(locale, { hour: '2-digit', hour12: AM_PM, minute: '2-digit' });\n else if (format == 'hms')\n return date.toLocaleTimeString(locale, { hour: '2-digit', hour12: AM_PM, minute: '2-digit', second: '2-digit' });\n else if (format == 'hmsS') {\n const part1 = date.toLocaleTimeString(locale, { hour: '2-digit', hour12: AM_PM, minute: '2-digit', second: '2-digit' });\n const amOrPm = part1.substring(9) || '';\n\n return `${part1.substring(0, 8)}.${date.getMilliseconds().toString().padStart(3, \"0\")} ${amOrPm}`.trim();\n }\n return date.toLocaleTimeString(locale, format);\n};\n\n/**\n * Maak een date string van een Date\n * @param date de date waarvan een string gemaakt moet worden\n * @param format het format van de datumstring (default = ddMMyy --> 31-12-2019) OF een DateTimeFormatOptions object\n * @param locale de locale van de gewenste string (default = 'nl-NL')\n * @returns een datum-string\n * @example\n * dateString(new Date(2022, 9, 20)) // '20-10-2022'\n * dateString(new Date(2022, 9, 20), 'ddMMyy') // '20-10-2022'\n * dateString(new Date(2022, 8, 02), 'dMy') // '2-9-2022'\n * dateString(new Date(2022, 9, 20), 'ddd MMM yy') // 'Don 20 Okt 2022'\n * dateString(new Date(2022, 9, 20), 'dddd MMMM yy') // 'Donderdag 20 Oktober 2022'\n * dateString(new Date(2022, 9, 20), {day: '2-digit', month: '2-digit', year: '2-digit'}) // '20-10-2022'\n * @deprecated: use JSDateTime class\n */\nexport const dateString = (date: Date, format: 'dMy' | 'ddMMyy' | 'ddd MMM yy' | 'dddd MMMM yy' | Intl.DateTimeFormatOptions = 'ddMMyy', locale: string = 'nl-NL',): string => {\n if (format == 'dMy')\n return date.toLocaleDateString(locale, { day: 'numeric', month: 'numeric', year: '2-digit' });\n else if (format == 'ddMMyy')\n return date.toLocaleDateString(locale, { day: '2-digit', month: '2-digit', year: 'numeric' });\n else if (format == 'ddd MMM yy')\n return `${weekDay(date, 'short', locale)} ${dayNum(date, 'D', locale)} ${monthName(date, 'short', locale)} ${date.toLocaleString(locale, { year: 'numeric' })}`;\n else if (format == 'dddd MMMM yy')\n return `${weekDay(date, 'long', locale)} ${dayNum(date, 'DD', locale)} ${monthName(date, 'long', locale)} ${date.toLocaleString(locale, { year: 'numeric' })}`;\n return date.toLocaleDateString(locale, format);\n};\n\n/**\n * geef de naam van de dag (maandag, dinsdag, ...) van een Date\n * @param date de date waarvan de dagnaam gewenst is\n * @param format long (maandag), short (ma) of narrow (m) (default = short)\n * @param locale de locale van de gewenste string (default = 'nl-NL')\n * @returns de naam van de dag in de juiste locale\n * @example \n * weekDay(new Date(2022, 9, 20), 'narrow') // 'M'\n * weekDay(new Date(2022, 9, 20), 'short') // 'Ma'\n * weekDay(new Date(2022, 9, 20), 'long') // 'Maandag'\n * @deprecated: use JSDateTime class\n */\nexport const weekDay = (date: Date, format: 'narrow' | 'short' | 'long' = 'short', locale: string = 'nl-NL'): string => {\n return date.toLocaleString(locale, { weekday: format });\n};\n/**\n * Dag nummer in de maand van een datum\n * @param date de date waarvan het dagnummer (in de maand) gewenst is\n * @param format 2-digits of 1-digit (default = 2-digits)\n * @param locale de gewenste locale (default = 'nl-NL')\n * @returns een dagnummer als string\n * @example\n * dayNum(new Date(2022, 9, 20), '2-digit') // '20'\n * dayNum(new Date(2022, 9, 5), 'numeric') // '5'\n * dayNum(new Date(2022, 9, 5), '2-digit') // '05'\n * @deprecated: use JSDateTime class\n */\nexport const dayNum = (date: Date, format: 'D' | 'DD' = 'DD', locale: string = 'nl-NL'): string => {\n return date.toLocaleString(locale, { day: format == 'D' ? 'numeric' : '2-digit' });\n};\n\n/**\n * geeft de naam van een maand (januari, februari, ...) van een Date\n * @param date de date waarvan de maandnaam gewenst is\n * @param format long (januari), short (jan), narrow (j) (default = short)\n * @param locale de gewenste locale (default = 'nl-NL')\n * @returns een maandnaam in de juiste locale\n * @example\n * monthName(new Date(2022, 9, 20), 'short') // 'Okt'\n * monthName(new Date(2022, 9, 20), 'long') // 'Oktober'\n * @deprecated: use JSDateTime class\n */\nexport const monthName = (date: Date, format: 'short' | 'long' = 'short', locale: string = 'nl-NL'): string => {\n return date.toLocaleString(locale, { month: format });\n};\n\n\nexport type RelativeTimeOptionsType = {\n /** de gebruikte locale (default = 'nl-NL') */\n locale?: string;\n /** altijd numeriek of moet dat automatisch gedaan worden ('over 1 dag' ipv 'morgen'). (default = 'auto') */\n numeric?: 'auto' | 'always';\n /** volledige omschrijving, korte omschrijving of zo kort mogelijk. (default = 'long') */\n style?: 'long' | 'short' | 'narrow';\n};\nexport type RelativeTimeFormatUnit = 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years';\n/**\n * Geeft een relatieve tijd-verschil tov van vandaag. (bv. 'overmorgen', 'gisteren', 'over 2 weken', 'over 1 maand', 'over 1 jaar')\n * @param value De waarde waarvan de relatieve tijd gewenst is (Date of integer)\n * @param unit welke maat moet er gebruikt worden. (default = 'days')\n * @param options opties van voor deze functie\n * @returns een string met een relatief tijdsverschil ('morgen', 'volgende maand', 'eergisteren')\n * @example\n * relativeTime(addDays(new Date(), 1), 'days') // 'morgen'\n * relativeTime(addDays(new Date(), -1), 'days') // 'gisteren'\n * relativeTime(addYears(new Date(), 1), 'years') // 'volgend jaar'\n */\nexport const relativeTime = (value: number | Date, unit: RelativeTimeFormatUnit, options?: RelativeTimeOptionsType): string => {\n const rtf = new Intl.RelativeTimeFormat(options?.locale ?? 'nl-NL', { numeric: options?.numeric ?? 'auto', style: options?.style ?? 'long' });\n let v = 0;\n if (typeof value != 'number') {\n if (unit == 'minutes')\n v = minutesBetween(value);\n else if (unit == 'hours')\n v = hoursBetween(value);\n else if (unit == 'days')\n v = daysBetween(value);\n else if (unit == 'weeks')\n v = weeksBetween(value);\n else if (unit == 'months')\n v = monthsBetween(value);\n else if (unit == 'years')\n v = yearsBetween(value);\n }\n else\n v = value;\n return rtf.format(v, unit);\n};\n\n/** bereken het aantal jaren tussen twee datums\n * @param date1 de eerste datum\n * @param date2 de tweede datum (default = new Date())\n * @returns het aantal jaren tussen de twee Dates\n * @example\n * yearsBetween(new Date(2020, 9, 20), new Date(2022, 9, 10)) // 2\n */\nexport const yearsBetween = (date1: Date, date2: Date = new Date()): number => date1.getFullYear() - date2.getFullYear();\n\n/**\n * Bereken het aantal maanden tussen twee datums\n * @param date1 de eerste datum\n * @param date2 de tweede datum (default = new Date())\n * @returns aantal maanden tussen twee Dates\n * @example\n * monthsBetween(new Date(2020, 9, 20), new Date(2022, 9, 10)) // 24\n * monthsBetween(new Date(2020, 9, 20), new Date(2020, 11, 10)) // 2\n */\nexport const monthsBetween = (date1: Date, date2: Date = new Date()): number => {\n let months = (date1.getFullYear() - date2.getFullYear()) * 12;\n months -= date1.getMonth();\n months += date2.getMonth();\n return months * -1;\n};\n\n/**\n * Bereken het aantal weken tussen twee datums\n * @param date1 de eerste datum\n * @param date2 de tweede datum (default = new Date())\n * @returns het aantal weken tussen twee Dates\n * @example weeksBetween(new Date(2021, 9, 20), new Date(2022, 9, 10)) // 52\n */\nexport const weeksBetween = (date1: Date, date2: Date = new Date()): number => {\n const timeDiff = date1.getTime() - date2.getTime();\n return Math.ceil(timeDiff / (1000 * 60 * 60 * 24 * 7));\n};\n\n/**\n * Bereken het aantal dagen tussen twee datums\n * @param date1 de eerste datum\n * @param date2 de tweede datum (default = new Date())\n * @returns het aantal dagen tussen 2 Dates\n * @example daysBetween(new Date(2022, 9, 10), new Date(2022, 9, 20)) // 10\n */\nexport const daysBetween = (date1: Date, date2: Date = new Date()): number => {\n const timeDiff = date1.getTime() - date2.getTime();\n return Math.ceil(timeDiff / (1000 * 60 * 60 * 24));\n};\n\n/**\n * Bereken het aantal uren tussen twee datums\n * @param date1 de eerste datum\n * @param date2 de tweede datum (default = new Date())\n * @returns het aantal uren tussen 2 Dates\n * @example hoursBetween(new Date(2022, 9, 20, 0, 0, 0), new Date(2022, 9, 20, 23, 0, 0)) // 23\n */\nexport const hoursBetween = (date1: Date, date2: Date = new Date()): number => {\n const timeDiff = date1.getTime() - date2.getTime();\n return Math.ceil(timeDiff / (1000 * 60 * 60));\n};\n\n/**\n * Bereken het aantal minuten tussen twee datums\n * @param date1 de eerste datum\n * @param date2 de tweede datum (default = new Date())\n * @returns het aantal minuten tussen 2 Dates\n * @example minutesBetween(new Date(2022, 9, 20, 0, 0, 0), new Date(2022, 9, 20, 1, 0, 0)) // 60\n */\nexport const minutesBetween = (date1: Date, date2: Date = new Date()): number => {\n const timeDiff = date1.getTime() - date2.getTime();\n return Math.ceil(timeDiff / (1000 * 60));\n};\n","/* eslint-disable spaced-comment */\n/** type equal to Intl.DateTimeFormatOptions, but with a typed timeZone */\ntype JSDateTimeFormatOptions = Intl.DateTimeFormatOptions & { timeZone?: JSDateTimeZoneType };\n\n/** Type used for setting values in a JSDateTime */\ntype JSDateSetterType = {\n /** set the year value to ... */ year?: number;\n /** set the month value to ... (1 - 12, 0 automatic to 1)*/ month?: number;\n /** set the day value to ... (1 - 31) */ day?: number;\n /** set the hour value to ... (0 - 23) */ hour?: number;\n /** set the minute value to ... (0 - 59) */ minute?: number;\n /** set the second value to ... (0 - 59) */ second?: number;\n /** set the millisecond value to ... (0 - 999) */ millisecond?: number;\n};\n\n/** Type used for changing values in a JSDateTime */\ntype JSChangeDateTimeType = {\n /** number of years to add or subtract */ years?: number;\n /** number of months to add or subtract */ months?: number;\n /** number of weeks to add or subtract */ weeks?: number;\n /** number of days to add or subtract */ days?: number;\n /** number of hours to add or subtract */ hours?: number;\n /** number of minutes to add or subtract */ minutes?: number;\n /** number of seconds to add or subtract */ seconds?: number;\n /** number of milliseconds to add or subtract */ milliseconds?: number;\n};\n\n/**\n * @class JSDateTime\n * @summary\n * JSDateTime is een class voor het werken met datum & tijd in JavaScript. Elk JSDateTime object is een immutable object.\n * Het is niet echt een vervanging voor andere Datum-libraries, maar meer een kleine wrapper rond gewone Javascript Dates, want Dates gebruiken is lastig. \n * Kijk onder de decsription-tag van deze uitleg wat de functies zijn.\n * \n * @example // creating JSDateTime - all methods return a NEW JSDateTime object\n * const date1 = JSDateTime.now(); // timestamp of now\n * const date2 = JSDateTime.fromISO('2020-01-01T00:00:00.000Z'); // 01-01-2020\n * const date3 = JSDateTime.fromDate(new Date()); // timestamp of now\n * const date4 = JSDateTime.fromMillis(0); // 01-01-1970\n * const date5 = JSDateTime.from({ year: 2020, month: 1, day: 1 }) // 01-01-2020\n * \n * @example // changing & chaining JSDateTime - All methods return a NEW JSDateTime object\n * const date1 = JSDateTime.fromISO('2020-06-01T00:00:00.000Z'); // date1: 01-06-2020\n * const date2 = date1.set({ year: 2022, month: 1, day: 1 }); // date2: 01-06-2022, date1: 01-06-2020\n * const date3 = date1.plus({ years: 2, days: 15 }); // date3: 16-06-2022, date1: 01-06-2020\n * const date4 = date1.startOf('year'); // date4: 01-01-2020, date1: 01-06-2020\n * const date5 = date1.endOf('year').startOf('month') // date5: 01-12-2020, date1: 01-06-2020\n * \n * @example // formatting dates\n * const date = JSDateTime.from({year: 2022, month: 6, day: 18}); // date: 18-06-2022\n * date.ISO; // 2020-06-18T00:00:00.000Z\n * date.UTC // Mon, 18 Jul 2022 07:14:08 GMT\n * date.timeHM; // 07:14\n * date.timeHMS; // 07:14:08\n * date.monthLong; // Juli\n * date.monthShort; // Jul\n * date.dayLong; // Monday\n * date.dayShort; // Mon\n * date.toFormat('yyyy-MM-dd'); // 2020-01-01\n * \n * @example // comparing JSDateTimes\n * const date1 = JSDateTime.now(); // date1: 18-06-2022\n * const date2 = JSDateTime.epoch(); // date2: 01-01-1970\n * date1.isBetween(new Date(1970,0,1), new Date(2222, 0,1)) // true\n * date1.isBetween(JSDateTime.fromDate(new Date(1970,0,1), JSDateTime.fromDate(new Date(1900, 0, 1)))) // false\n * date1.isAfter(new Date(1970,0,1)) // true\n * date1.isBefore(new Date(2222, 0,1)) // true\n * date1.hasSame(new Date(2020, 0, 1), 'year') // true\n * date1.hasSame(new Date(2020, 0, 1), 'month') // false\n * const beforeEpoch: boolean = date2 < date1; // true\n * \n * @description Static values & methods on JSDateTime - used for creating JSDateTimes\n * | Value / Method | Description |\n * |------------------------|------------------------------------------------------------------------------------|\n * | `defaultLocale` | Default locale to use. Based on client locale |\n * | `defaultTimeZone` | Default Timezone to use. Based on client timezone |\n * | `MAX_DATE` | (readonly) Max and Min date as Date that can be used in JSDateTime |\n * | `MAX_DATE_NUM` | (readonly) Max and Min millis from 01-01-1970 00:00:00 that can be used |\n * | `defaultFormatOptions` | (readonly) Default format options to use when formatting dates |\n * | `fromISO()` | Creates a new JSDateTime from an ISO string. |\n * | `fromUTC()` | Creates a new JSDateTime from a UTC string. |\n * | `fromDate()` | Creates a new JSDateTime from a Date object. |\n * | `fromMillis()` | Creates a new JSDateTime based on milliseconds since 01-01-1970 00:00:00 |\n * | `from({})` | Creates a new JSDateTime object from a set of values. |\n * | `now()` | Creates a new JSDateTime object from the current timestamp. |\n * | `epoch()` | Creates a new JSDateTime on 01-01-1970 00:00:00. |\n * \n * @description values & methods on JSDateTime instances - used for changing, chaining and comparing JSDateTimes\n * | Value / Method | returns | Description |\n * |--------------------------|--------------|--------------------------------------------------------------------------------|\n * | `valueOf()` | `number ` | Returns the number of milliseconds since 01-01-1970 00:00:00 |\n * | `isLeapYear` | `boolean` | `(get)` Returns true if the year is a leap year |\n * | `isAM` | `boolean` | `(get)` Returns true if the time is AM |\n * | `isPM` | `boolean` | `(get)` Returns true if the time is PM |\n * | `isDST` | `boolean` | `(get)` Returns true if the time is in DST |\n * | `JSDate` | `Date ` | `(get)` Returns the Date as a Javascript Date |\n * | `ISO` | `string ` | `(get)` Returns the date as an ISO string |\n * | `UTC` | `string ` | `(get)` Returns the date as an UTC string |\n * | `locale` | `string ` | `(get)` Returns the locale used for formatting |\n * | `timeZoneLong` | `string ` | `(get)` Returns a long timezone name (Central European Standard Time) |\n * | `timeZoneShort` | `string ` | `(get)` Returns a short timezone name (CEST) |\n * | `timezoneOffsetLongStr` | `number ` | `(get)` Returns the timezone offset as a long string (GMT+02:00) |\n * | `timezoneOffsetShortStr` | `string ` | `(get)` Returns the timezone offset as a long string (+02:00) |\n * | `timezoneOffset` | `number ` | `(get)` Returns the timezone offset as a number |\n * | `timeHM` | `string ` | `(get)` Returns the time as a string (07:14) |\n * | `timeHMS` | `string ` | `(get)` Returns the time as a string (07:14:08) |\n * | `monthLong` | `string ` | `(get)` Returns the month as a long string (January) |\n * | `monthShort` | `string ` | `(get)` Returns the month as a short string (Jan) |\n * | `dayLong` | `string ` | `(get)` Returns the day as a long string (Monday) |\n * | `dayShort` | `string ` | `(get)` Returns the day as a short string (Mon) |\n * | `dateLong` | `string ` | `(get)` Returns the date as a long string (friday 7 september 1990) |\n * | `dateShort` | `string ` | `(get)` Returns the date as a short string (07-09-1990) |\n * | `yr`, `year` | `number ` | `(get)` Returns the year |\n * | `m`, `month` | `number ` | `(get)` Returns the month |\n * | `d`, `day` | `number ` | `(get)` Returns the number of the day in the month |\n * | `h`, `hour` | `number ` | `(get)` Returns the hour |\n * | `min`, `minute` | `number ` | `(get)` Returns the minute |\n * | `s`, `second` | `number ` | `(get)` Returns the second |\n * | `ms`, `millisecond` | `number ` | `(get)` Returns the millisecond |\n * | `weekNr` | `number ` | `(get)` Returns the week number |\n * | `daysInMonth` | `number ` | `(get)` Returns the number of days in the month |\n * | `daysInYear` | `number ` | `(get)` Returns the number of days in the year |\n * | `millis` | `number ` | `(get)` Returns the number of milliseconds since 01-01-1970 00:00:00 |\n * | `yearToDate` | `number ` | `(get)` Returns the number of days since the start of the year |\n * | `set()` | `JSDateTime` | `(method)` Sets the date and time from a set of values. |\n * | `startOf()` | `JSDateTime` | `(method)` Sets the date and time to the start of the given unit. |\n * | `endOf()` | `JSDateTime` | `(method)` Sets the date and time to the end of the given unit. |\n * | `plus()` | `JSDateTime` | `(method)` Adds a set of values to the date and time. |\n * | `isBetween()` | `boolean` | `(method)` true if this JSDateTime is between the given dates. |\n * | `hasSame()` | `boolean` | `(method)` true if this JSDateTime has te same value for the period (same year, same month, same day, etc). See `hasSame()` description for more |\n * | `isAfter()` | `boolean` | `(method)` true if this JSDateTime is after the given date. |\n * | `isBefore()` | `boolean` | `(method)` true if this JSDateTime is before the given date. |\n * | `toFormat()` | `string` | `(method)` Returns the date and time as a string using the given format. See `toFormat()` description for more |\n * | `toString()` | `string` | `(method)` Returns the date and time as a string using the default Intl.DateTimeFormat. See `toString()` description for more |\n */\nclass JSDateTime {\n /** default locale for JSDateTime classes, based on clients browser & location */\n public static defaultLocale = Intl.DateTimeFormat().resolvedOptions().locale;\n /** default Timezone for JSDateTime classes, based on clients browser & location */\n public static defaultTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone as JSDateTimeZoneType;\n /** max number of millies since epoch (01-01-1970) or before epoch */\n public static readonly MAX_DATE_NUM = 8.64e15;\n /** max date based on @see MAX_DATE_NUM */\n public static readonly MAX_DATE = new Date(JSDateTime.MAX_DATE_NUM);\n /** Default formatting options for JSDateTime */\n private static readonly defaultFormatOptions: JSDateTimeFormatOptions = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n };\n\n private readonly IGNORE_SIGN = '^';\n /** date on this JSDateTime object. everything based on this one */\n protected readonly _date: Date;\n /** setted locale on this JSDateTime */\n protected readonly _locale: string;\n /** setted format options on this JSDateTime */\n private readonly formatOptions: JSDateTimeFormatOptions = {};\n\n /** to compare JSDates with each other with <, >, <= and >= */\n valueOf(): number { return this._date.valueOf(); }\n\n protected constructor(date: Date, locale: string, formatOptions: JSDateTimeFormatOptions = {}) {\n this._date = new Date(date);\n this._locale = locale;\n this.formatOptions = {\n ...JSDateTime.defaultFormatOptions,\n timeZone: JSDateTime.defaultTimezone,\n ...formatOptions\n };\n Object.freeze(this);\n }\n\n /** @returns datetime string based on the default format options of this JSDateTime */\n toString(formatOptions: JSDateTimeFormatOptions = this.formatOptions): string { return this.intlDtf(formatOptions); }\n\n /**\n * use DateTimeFormat to get a date string\n * @param dtfOptions \n * @return \n */\n private intlDtf(dtfOptions: JSDateTimeFormatOptions = this.formatOptions): string {\n return new Intl.DateTimeFormat(this._locale, { ...dtfOptions, timeZone: this.formatOptions.timeZone }).format(this._date);\n }\n\n //#region GETTERS\n\n /** @return is JSDateTime in a leap-year (true/false) */\n get isLeapYear(): boolean {\n const year = this._date.getFullYear();\n return (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0);\n }\n\n /** @return is JSDateTime AM (true) or PM (false) */\n get isAM(): boolean { return this._date.getHours() < 12; }\n /** @return is JSDateTime AM (false) or PM (true) */\n get isPM(): boolean { return !this.isAM; }\n /** @returns is DST (Daylight Saving Time) observed */\n get isDST(): boolean {\n const jan = new Date(this._date.getFullYear(), 0, 1).getTimezoneOffset();\n const jul = new Date(this._date.getFullYear(), 6, 1).getTimezoneOffset();\n return Math.max(jan, jul) !== this._date.getTimezoneOffset();\n }\n\n /** @returns is this JSDateTime today? */\n get isToday(): boolean {\n const today = new Date();\n return this._date.getDate() === today.getDate() && this._date.getMonth() === today.getMonth() && this._date.getFullYear() === today.getFullYear();\n }\n\n /** @return JSDate-date as Javascript Date object */\n get JSDate(): Date { return new Date(this._date); }\n\n /** @return date as ISO string ('1990-09-07T12:30:55.666Z') */\n get ISO(): string { return this._date.toISOString(); }\n /** @return date as UTC string ('Fri, 08 Jul 2022 13:34:47 GMT') */\n get UTC(): string { return this._date.toUTCString(); }\n\n /** @return the locale (nl-NL) */\n get locale(): string { return this._locale; }\n\n /** @return a long timezone description (Midden-Europese zomertijd, Australian Standard Time) */\n get timezoneLong(): string { return this.intlDtf({ timeZoneName: 'long' }).replaceAll(/[^A-Z\\s-]/gi, '').replace('--', '').trim(); }\n /** @return a short timezone descriptn (CEST, CET, AEST) */\n get timezoneShort(): string { return this.intlDtf({ timeZoneName: 'short' }).replaceAll(/[^A-Z]/g, ''); }\n\n /** @return current timezone offset as a string (+02:00) */\n get timezoneOffsetShortStr(): string {\n const offsetStr = this.intlDtf({ timeZoneName: 'longOffset' });\n const indexOfPLus = offsetStr.indexOf('+');\n return offsetStr.substring(indexOfPLus);\n }\n\n /** @return current timezone offset as a string (GMT+02:00) */\n get timezoneOffsetLongStr(): string {\n const offsetStr = this.intlDtf({ timeZoneName: 'longOffset' });\n const indexOfPLus = offsetStr.indexOf('GMT');\n return offsetStr.substring(indexOfPLus);\n }\n\n /** @return current timezone offset (+2) */\n get timezoneOffset(): number {\n const offsetStr = this.intlDtf({ timeZoneName: 'shortOffset' });\n\n let signIndex = offsetStr.indexOf('+');\n if (signIndex < 0) signIndex = offsetStr.indexOf('-');\n if (signIndex < 0) return 0;\n\n return parseInt(offsetStr.substring(signIndex));\n }\n\n /** @return a time string (12:30) */\n get timeHM(): string { return this.intlDtf({ hour: '2-digit', minute: '2-digit' }); }\n /** @return a time string (12:30:45) */\n get timeHMS(): string { return this.intlDtf({ hour: '2-digit', minute: '2-digit', second: '2-digit' }); }\n\n /** @return the whole month name (september) */\n get monthLong(): string { return this.intlDtf({ month: 'long' }); }\n /** @return an abbreviated month name (sep) */\n get monthShort(): string { return this.intlDtf({ month: 'short' }); }\n\n /** @return the whole day name (friday) */\n get dayLong(): string { return this.intlDtf({ weekday: 'long' }); }\n /** @return an abbreviated day name (fri) */\n get dayShort(): string { return this.intlDtf({ weekday: 'short' }); }\n\n /** @return a long date string (friday 7 september 1990) */\n get dateLong(): string { return `${this.dayLong} ${this.day} ${this.monthLong} ${this.year}`; }\n /** @return a short date string (07-09-1990) */\n get dateShort(): string { return this.intlDtf({ day: '2-digit', month: '2-digit', year: 'numeric' }); }\n\n /** @return year (1990) */\n get yr(): number { return this.year; }\n /** @return year (1990) */\n get year(): number { return this._date.getFullYear(); }\n\n /** @return month number (1-12) */\n get m(): number { return this.month; }\n /** @return month number (1-12) */\n get month(): number { return this._date.getMonth() + 1; }\n\n get d(): number { return this.day; }\n /** @return day of the month number (1-31) */\n get day(): number { return this._date.getDate(); }\n /** @return day of the week number (1-7, ma = 1, di = 2, ... zo = 7) */\n get weekDay(): number { return this._date.getDay() == 0 ? 7 : this._date.getDay(); }\n\n /** @return hour (0-23) */\n get hr(): number { return this.hour; }\n /** @return hour (0-23) */\n get hour(): number { return this._date.getHours(); }\n\n /** @return minute (0-59) */\n get min(): number { return this.minute; }\n /** @return minute (0-59) */\n get minute(): number { return this._date.getMinutes(); }\n\n /** @return second (0-59) */\n get sec(): number { return this.second; }\n /** g@returnet second (0-59) */\n get second(): number { return this._date.getSeconds(); }\n\n /** @return millisecond (0-999) */\n get ms(): number { return this.millisecond; }\n /** @return millisecond (0-999) */\n get millisecond(): number { return this._date.getMilliseconds(); }\n\n /** @return week number (1-53) */\n get weekNr(): number {\n const newDate = new Date(Date.UTC(this._date.getFullYear(), this._date.getMonth(), this._date.getDate()));\n newDate.setUTCDate(newDate.getUTCDate() + 4 - (newDate.getUTCDay() || 7));\n const yrStart = new Date(Date.UTC(newDate.getUTCFullYear(), 0, 1));\n return Math.ceil((((newDate.getTime() - yrStart.getTime()) / 86400000) + 1) / 7);\n }\n\n /** @return number of milliseconds since epoch (01-01-1970 00:00:00) */\n get millis(): number { return this.valueOf(); }\n /** @return number of days in a month (28, 29, 30 or 31) */\n get daysInMonth(): number { return new Date(this._date.getFullYear(), this._date.getMonth() + 1, 0).getDate(); }\n /** @return number of days in year of this JSDateTime */\n get daysInYear(): number { return this.isLeapYear ? 366 : 365; }\n get yearToDate(): number {\n const dayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n const dayOfYear = dayCount[this._date.getMonth()] + this._date.getDate();\n return this.isLeapYear && this.month > 2 ? dayOfYear + 1 : dayOfYear;\n }\n\n //#endregion\n\n //#region changing data (no changing, only new objects)\n\n /**\n * return a new JSDateTime object with the given data, based on this JSDateTime object.\n * the old value is NOT changed\n * @param val the new values. if no values are given, the current values are used\n * @param locale a new locale, if not given, the current locale is used\n * @return a new JSDateTime with updated values\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * const date2 = date.set({year: 1990, month: 12, day: 1}); // 01-12-1990\n */\n set(val: JSDateSetterType, locale: string = this._locale): JSDateTime {\n const data = { year: this.year, month: this.month, day: this.day, hour: this.hour, minute: this.minute, second: this.second, millisecond: this.millisecond };\n return JSDateTime.from({ ...data, ...val }, locale);\n }\n\n /**\n * Returns a new JSDateTime object where the date is set to the start of a period.\n * the old value is NOT changed\n * @param period the period\n * @return a new readonly JSDateTime object\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 11, 31)); // 31-12-2020\n * const date2 = date.startof('year'); // 01-01-2020\n */\n startOf(period: 'year' | 'month' | 'week' | 'day' | 'hour'): JSDateTime {\n switch (period) {\n case 'year': return JSDateTime.from({ year: this.year, month: 0, day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 }, this._locale);\n case 'month': return JSDateTime.from({ year: this.year, month: this.month, day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 }, this._locale);\n case 'week': {\n const newDate = new Date(this.JSDate);\n const diff = newDate.getDate() - newDate.getDay() + (newDate.getDay() === 0 ? -6 : 1);\n return JSDateTime\n .fromDate(new Date(newDate.setDate(diff)), this._locale)\n .set({ hour: 0, minute: 0, second: 0, millisecond: 0 });\n }\n case 'day': return JSDateTime.from({ year: this.year, month: this.month, day: this.day, hour: 0, minute: 0, second: 0, millisecond: 0 }, this._locale);\n case 'hour': return JSDateTime.from({ year: this.year, month: this.month, day: this.day, hour: this.hour, minute: 0, second: 0, millisecond: 0 }, this._locale);\n default: throw new Error(`${period} is not a valid period for JSDateTime.startOf()`);\n }\n }\n\n /**\n * Returns a new JSDateTime object where the date is set to the end of a period.\n * the old value is NOT changed.\n * @param period the period\n * @return a new readonly JSDateTime object\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * const date2 = date.endOf('year'); // 31-12-2020\n */\n endOf(period: 'year' | 'month' | 'week' | 'day' | 'hour'): JSDateTime {\n switch (period) {\n case 'year': return JSDateTime.from({ year: this.year, month: 12, day: 31, hour: 23, minute: 59, second: 59, millisecond: 999 }, this._locale);\n case 'month': return JSDateTime.from({ year: this.year, month: this.month, day: this.daysInMonth, hour: 23, minute: 59, second: 59, millisecond: 999 }, this._locale);\n case 'week': {\n const newDate = new Date(this.JSDate);\n const lastDay = this.JSDate.getDate() - (newDate.getDay() - 1) + 6;\n return JSDateTime\n .fromDate(new Date(newDate.setDate(lastDay)), this._locale)\n .set({ hour: 23, minute: 59, second: 59, millisecond: 999 }, this._locale);\n }\n case 'day': return JSDateTime.from({ year: this.year, month: this.month, day: this.day, hour: 23, minute: 59, second: 59, millisecond: 999 }, this._locale);\n case 'hour': return JSDateTime.from({ year: this.year, month: this.month, day: this.day, hour: this.hour, minute: 59, second: 59, millisecond: 999 }, this._locale);\n default: throw new Error(`${period} is not a valid period for JSDateTime.endOf()`);\n }\n }\n\n /**\n * add values to a date. Starting with the biggest unit (year) to the smallest (millisecond).\n * the old value is NOT changed.\n * @param addVals object with values to add to the date\n * @return a new readonly JSDateTime object\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * const date2 = date.add({ year: 1, month: 1, day: 1 }); // 02-02-2021\n */\n plus(addVals: JSChangeDateTimeType): JSDateTime {\n let date = new Date(this.JSDate);\n if (addVals.years) date = new Date(date.setFullYear(date.getFullYear() + addVals.years));\n if (addVals.months) date = new Date(date.setMonth(date.getMonth() + addVals.months));\n if (addVals.weeks) date = new Date(date.setDate(date.getDate() + (addVals.weeks * 7)));\n if (addVals.days) date = new Date(date.setDate(date.getDate() + addVals.days));\n if (addVals.hours) date = new Date(date.setHours(date.getHours() + addVals.hours));\n if (addVals.minutes) date = new Date(date.setMinutes(date.getMinutes() + addVals.minutes));\n if (addVals.seconds) date = new Date(date.setSeconds(date.getSeconds() + addVals.seconds));\n if (addVals.milliseconds) date = new Date(date.setMilliseconds(date.getMilliseconds() + addVals.milliseconds));\n\n return JSDateTime.fromDate(date, this._locale);\n }\n\n /**\n * check if this JSDateTime object is between two other JSDates or Dates\n * @param dates a tuple with two JSDateTime|Date instances\n * @return is this JSDateTime between the two dates (true|false)\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * date.isBetween([new Date(2030, 0, 1), new Date(2010, 0, 1)]); // true\n * date.isBefore([new Date(2010, 0, 1), new Date(2015, 0, 1)]); // false\n */\n isBetween(dates: [JSDateTime | Date, JSDateTime | Date]): boolean {\n const [date1, date2] = dates;\n\n if (date1 < date2) return (date1 < this._date && this._date < date2);\n else if (date1 > date2) return (date2 < this._date && this._date < date1);\n else throw new Error('dates must be different');\n\n };\n\n /**\n * Is this JSDateTime before another Date or JSDateTime.\n * JSDateTime implements the .valueOf() method of objects, so it is possible to compare JSDateTime objects and Date objects through <, >, ==, <= and >=.\n * @param date the date to compare to\n * @param includeEqual if the dates are equal, return true or false? (default: false)\n * @return is the given date before this JSDateTime (true/false)\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * date.isBefore(new Date(2021, 0, 1)); // true\n * date.isBefore(new Date(2019, 0, 1)); // false\n */\n isBefore(date: Date | JSDateTime, includeEqual: boolean = false): boolean { return includeEqual ? this._date >= date : this._date > date; }\n\n /**\n * Is this JSDateTime after another Date or JSDateTime.\n * JSDateTime implements the .valueOf() method of objects, so it is possible to compare JSDateTime objects and Date objects through <, >, ==, <= and >=.\n * @param date the date to compare to\n * @param includeEqual if the dates are equal, return true or false? (default: false)\n * @return is the given date after this JSDateTime (true/false)\n * @example \n * const date = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * date.isAfter(new Date(2021, 0, 1)); // false\n * date.isAfter(new Date(2019, 0, 1)); // true\n */\n isAfter(date: Date | JSDateTime, includeEqual: boolean = false): boolean { return includeEqual ? this._date <= date : this._date < date; }\n\n /**\n * checks if a Date or JSDateTime is equal on some level to this JSDateTime. The method checks until given period-level. \n * If hasSame('xxx', 'day') returns true, the year, month and day are the same. hours, minutes, seconds and milliseconds are not checked\n * \n * \n * @param date Date or JSDateTime object to compare with\n * @param period the perio that should be the same (default = 'millisecond')\n * @return if the dates share the same period (true/false)\n * @example \n * const jsDate = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * jsDate.hasSame(new Date(2020, 7, 17)), 'year') // true\n * jsDate.hasSame(new Date(2020, 7, 17)), 'month') // true\n * jsDate.hasSame(new Date(2020, 7, 17)), 'day') // false\n * jsDate.hasSame(new Date(2021, 0, 01)), 'year') // false\n */\n hasSame(date: Date | JSDateTime, period: 'year' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second' | 'millisecond' = 'millisecond'): boolean {\n const dstDate = new Date(date.valueOf());\n switch (period) {\n case 'year': return this.yr === dstDate.getFullYear();\n case 'month': return this.yr === dstDate.getFullYear() && (this.m - 1) === dstDate.getMonth();\n case 'day': return this.yr === dstDate.getFullYear() && (this.m - 1) === dstDate.getMonth() && this.d === dstDate.getDate();\n case 'hour': return this.yr === dstDate.getFullYear() && (this.m - 1) === dstDate.getMonth() && this.d === dstDate.getDate() && this.hr === dstDate.getHours();\n case 'minute': return this.yr === dstDate.getFullYear() && (this.m - 1) === dstDate.getMonth() && this.d === dstDate.getDate() && this.hr === dstDate.getHours() && this.min === dstDate.getMinutes();\n case 'second': return this.yr === dstDate.getFullYear() && (this.m - 1) === dstDate.getMonth() && this.d === dstDate.getDate() && this.hr === dstDate.getHours() && this.min === dstDate.getMinutes() && this.sec === dstDate.getSeconds();\n case 'millisecond': return this.valueOf() === dstDate.valueOf();\n default: throw new Error(`invalid period '${period}' for hasSame()`);\n }\n }\n\n /**\n * Checks if a JSDateTime, Date or millis-since-epoch number is equal to this JSDateTime, since you cannot compare two JSDateTime items with '==' or '===', even with .valueOf() implemented.\n * This method compares the time and date of the values, not if they are the same objects.\n * \n * method `hasSame(date: Date|JSDateTime)` with default period 'millisecond' has the same functionality.\n * \n * @param val the value to compare to\n * @returns is the given value equal to this JSDateTime\n * @example \n * const jsDate = JSDateTime.fromDate(new Date(2020, 0, 1)); // 01-01-2020\n * jsDate.equals(new Date(2020, 0, 1)); // true\n * jsDate.equals(new Date(2020, 0, 2)); // false\n * jsDate.equals(JSDateTime.epoch); // false\n * jsDate.equals(0); // false\n * JSDateTime.epoch().is(0); // true\n */\n equals(val: Date | JSDateTime | number): boolean {\n if (val instanceof JSDateTime) return this._date.valueOf() === val.valueOf();\n else if (val instanceof Date) return this._date.valueOf() === val.valueOf();\n else if (typeof val === 'number') return this._date.valueOf() === val;\n throw new Error('invalid type');\n }\n\n /**\n * Clone this JSDateTIme to a new object.\n * @returns new JSDateTime object with the same time and date as this one\n */\n clone(): JSDateTime {\n return JSDateTime.fromMillis(this.valueOf(), this.locale);\n }\n\n //#endregion\n\n //#region creating JSDates (static methods)\n\n /**\n * a new JSDateTime object with the current date and time\n * @param locale locale, if different from default (JSData.defaultLocale)\n * @param formatOptions format options, if different from default (JSData.defaultFormatOptions)\n * @return readonly JSDateTime object\n * @example JSDateTime.now() // current Date & time\n */\n public static now(locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n const jsdate = new JSDateTime(new Date(), locale, formatOptions);\n return jsdate;\n }\n\n /**\n * a new JSDateTime object on 01 januari 1970 00:00:00\n * @param locale locale, if different from default (JSData.defaultLocale)\n * @param formatOptions format options, if different from default (JSData.defaultFormatOptions)\n * @param formatOptions \n * @returns readonly JSDateTime object with the date 01-01-1970 00:00:00\n * @example JSDateTime.epoch() // 01-01-1970 00:00:00\n */\n public static epoch(locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n const jsdate = new JSDateTime(new Date(0), locale, formatOptions);\n return jsdate;\n }\n\n /**\n * a new JSDateTime object for a given date (Date)\n * @param date Javascript Date object for a date\n * @param locale locale, if different from default (JSData.defaultLocale)\n * @param formatOptions format options, if different from default (JSData.defaultFormatOptions)\n * @return readonly JSDateTime object\n * @example JSDateTime.fromDate(new Date(2020, 0, 1)) // 01-01-2020\n */\n public static fromDate(date: Date, locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n return new JSDateTime(date, locale, formatOptions);\n }\n\n /**\n * a new JSDateTime object based on a @see JSDateSetterType. \n * @param value object with values for a date, like year, month, day, hour, minute, second, millisecond\n * @param locale locale, if different from default (JSData.defaultLocale)\n * @param formatOptions format options, if different from default (JSData.defaultFormatOptions)\n * @return readonly JSDateTime object\n * @example JSDateTime.from({ year: 2020, month: 1, day: 1 }) // 01-01-2020\n */\n public static from(value: JSDateSetterType, locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n const now = new Date();\n const data = {\n year: value.year ?? now.getFullYear(),\n month: value.month != undefined ? (value.month == 0 ? 1 : value.month) : now.getMonth() + 1,\n day: value.day ?? now.getDate(),\n hour: value.hour ?? now.getHours(),\n minute: value.minute ?? now.getMinutes(),\n second: value.second ?? now.getSeconds(),\n millisecond: value.millisecond ?? now.getMilliseconds()\n };\n\n const { year, month, day, hour, minute, second, millisecond } = data;\n\n // valideer de invoerwaarden\n if (month > 12 || month < 1) throw new RangeError(`month value should be between 1 and 12, got ${month}`);\n else if (hour > 23 || hour < 0) throw new RangeError(`hour value should be between 0 and 23, got ${hour}`);\n else if (minute > 59 || minute < 0) throw new RangeError(`minute value should be between 0 and 59, got ${minute}`);\n else if (second > 59 || second < 0) throw new RangeError(`second value should be between 0 and 59, got ${second}`);\n else if (millisecond > 999 || millisecond < 0) throw new RangeError(`milliseconds value should be between 0 and 999, got ${millisecond}`);\n\n const newDate = new Date(year, month, 0);\n const dayCount = newDate.getDate();\n if (day > dayCount || day < 1)\n throw new RangeError(`day value should be between 1 and ${dayCount} for ${newDate.toLocaleString(locale, { month: 'short' })} ${year}, got ${day}`);\n\n const jsdate = new JSDateTime(new Date(year, month - 1, day, hour, minute, second, millisecond), locale, formatOptions);\n return jsdate;\n }\n\n /**\n * a new JSDateTime object based on an ISO string\n * @param iso a date in ISO format (1990-09-07T12:30:55.666Z)\n * @param locale locale, if different from default (JSData.defaultLocale)\n * @return readonly JSDateTime object\n * @example JSDateTime.fromISO('1990-09-07T12:30:55.666Z')\n */\n public static fromISO(iso: string, locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n const d = new Date(Date.parse(iso));\n return new JSDateTime(d, locale, formatOptions);\n }\n\n /**\n * a new JSDateTime object based on an ISO string\n * @param utc a date in UTC format (Fri, 08 Jul 2022 13:34:47 GMT)\n * @param locale locale, if different from default (JSData.defaultLocale)\n * @param formatOptions format options, if different from default (JSData.defaultFormatOptions)\n * @return readonly JSDateTime object\n * @example JSDateTime.fromUTC('Fri, 08 Jul 2022 13:34:47 GMT')\n */\n public static fromUTC(utc: string, locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n const d = new Date(Date.parse(utc));\n return new JSDateTime(d, locale, formatOptions);\n }\n\n /**\n * A new JSDateTime object based on milliseconds sinde 1970-01-01T00:00:00.000Z\n * @param ms number of milliseconds\n * @param locale locale if different from default (JSData.defaultLocale)\n * @param formatOptions if different from default (JSData.defaultFormatOptions)\n * @return readonly JSDateTime object\n * @example JSDateTime.fromMillis(0) // 01-01-1970 00:00:00\n * @example JSDateTime.fromMillis(1000) // 01-01-1970 00:00:01\n */\n public static fromMillis(ms: number | string, locale: string = JSDateTime.defaultLocale, formatOptions: JSDateTimeFormatOptions = {}): JSDateTime {\n const millis: number = typeof ms === 'string' ? +ms : ms;\n if (isNaN(millis)) throw new Error(`fromMillis() expects a numeric value, got \"${ms}\"`);\n else if (millis > JSDateTime.MAX_DATE_NUM || millis < -JSDateTime.MAX_DATE_NUM) throw new Error(`fromMillis() expects a numeric value, got \"${ms}\"`);\n\n return new JSDateTime(new Date(millis), locale, formatOptions);\n }\n\n //#endregion\n\n //#region Formatting\n\n /**\n * Formatten van een datum mbv keys. Onderaan deze uitleg staan deze keys\n * new JSDateTime(2022, 1, 1, 3, 4, 5, 6,789).fo() // \"Tue, 01 Feb 2021 03:04:05.678 GMT, 01-02-2011\"\n * \n * @param format string, like \"dddd dd MMMM yyyy HH:mm:ss.SSS\" or DateTimeFormatOptions\n * @return date-string based on format\n *\n * @description Accepted patterns and characters:\n * | Unit | Pattern | Example | Description |\n * |--------------|-----------|------------------------------|------------------------------------------------|\n * | IGNORE CHAR | `^...^` | `^HADIHO^` | txt between 1st ^ and 2nd ^ are ignored |\n * | day of month | `d` | `7`, `14` | Day of the month as digits; no leading zero. |\n * | | `dd` | `07`, `14` | Day of the month as digits; leading zero |\n * | day of week | `ddd` | `thu` | Day of the week as a three-letter abbr. |\n * | | `dddd` | `thursday` | Day of the week as its full name. |\n * | month | `m` | `1`, `12` | Month as digits; no leading zero. |\n * | | `mm` | `01`, `12` | Month as digits; leading zero |\n * | | `mmm` | `Aug` | Month as a three-letter abbr. |\n * | | `mmmm` | `August` | Month as its full name. |\n * | year | `yy` | `22`, `19`, `07` | Year as last two digits. |\n * | | `yyyy` | `2022`, `2019`, `2007` | Year as four digits. |\n * | hour | `H` | `0`, `13` | Hour as digits (0-23); no leading zero. |\n * | | `HH` | `00`, `13` | Hour as digits (0-23); leading zero |\n * | | `h` | `1`, `12` | Hour as digits (0-12); no leading zero. |\n * | | `hh` | `01`, `12` | Hour as digits (0-12); leading zero |\n * | minute | `M` | `0`, `59` | Minute as digits; no leading zero. |\n * | | `MM` | `00`, `59` | Minute as digits; leading zero |\n * | second | `s` | `0`, `59` | Second as digits; no leading zero. |\n * | | `ss` | `00`, `59` | Second as digits; leading zero |\n * | millisecond | `S` | `0`, `999` | Millisecond as digits; no leading zero |\n * | | `SSS` | `000`, `999` | Millisecond as digits; leading zero's |\n * | am/pm | `T` | `A`, `P` | AM or PM, 1 character |\n * | | `TT` | `am`, `pm` | AM or PM, 2 characters |\n * | timezone | `Z` | `CEST`, `AEST` | Timezone name - short version |\n * | | `ZZ` | `Central Europe Summer Time` | Timezone name - long version |\n * | tz offset | `O` | `+2`, `-4` | Timezone offset in hours and minutes (short) |\n * | | `OO` | `+02:00` | Timezone offset in hours and minutes (longer) |\n * | | `OOO` | `GMT+02:00` | Timezone offset in hours and minutes (longest) |\n *\n * @example \n * // example for donderdag 7 oktober 1999 04:30:45.678 (AM), week 40 \n * const dt = JSDateTime.fromDate(new Date());\n * dt.toFormat('dddd dd mmmm yyyy HH:mm:ss.SSS tt'); // 'donderdag 7 oktober 1999 04:30:45.678 AM'\n * dt.toFormat('ddd d mmm yy') // 'do 7 okt 99'\n * dt.toFormat('DD-mm-yyyy') // '07-10-1990'\n * dt.toFormat('HH:MM:ss.SSS') // '04:30:45.678'\n * dt.toFormat('hh:MM tt') // '04:30 AM'\n * dt.toFormat('HH:MM OO') // '04:30 +02:00'\n * dt.toFormat('HH:MM Z') // '04:30 CEST'\n * dt.toFormat('^HH:MM ZZ^') // 'HH:MM ZZ'\n */\n toFormat(format: string | JSDateTimeFormatOptions): string {\n if (typeof format !== 'string') return this.intlDtf(format);\n let rslt = this.formatBuilder(format);\n\n // change year num\n if (rslt.includes('[y4]')) rslt = rslt.replaceAll('[y4]', this.yr + ''); // 1999\n if (rslt.includes('[y2]')) rslt = rslt.replaceAll('[y2]', (this.yr.toString().substring(2))); // 99\n\n // change month\n if (rslt.includes('[m4]')) rslt = rslt.replaceAll('[m4]', this.monthLong); // januari\n if (rslt.includes('[m3]')) rslt = rslt.replaceAll('[m3]', this.monthShort); // jan\n if (rslt.includes('[m2]')) rslt = rslt.replaceAll('[m2]', this.intlDtf({ month: '2-digit' })); // 01\n if (rslt.includes('[m1]')) rslt = rslt.replaceAll('[m1]', this.intlDtf({ month: 'numeric' })); // 1\n\n // change day\n if (rslt.includes('[d4]')) rslt = rslt.replaceAll('[d4]', this.dayLong); // donderdag\n if (rslt.includes('[d3]')) rslt = rslt.replaceAll('[d3]', this.dayShort); // do.\n if (rslt.includes('[d2]')) rslt = rslt.replaceAll('[d2]', this.intlDtf({ day: '2-digit' })); // 07\n if (rslt.includes('[d1]')) rslt = rslt.replaceAll('[d1]', this.day + ''); // 7\n\n // change hour num\n if (rslt.includes('[h2]')) rslt = rslt.replaceAll('[h2]', this.hr > 12 ? `${(this.hr - 12) < 10 ? '0' : ''}${this.hr - 12}` : `${this.hr < 10 ? '0' : ''}${this.hr}`); // 0-12\n if (rslt.includes('[h1]')) rslt = rslt.replaceAll('[h1]', this.hr > 12 ? (this.hr - 12).toString() : this.hr.toString()); // 00-12\n if (rslt.includes('[H2]')) rslt = rslt.replaceAll('[H2]', `${this.hr < 10 ? '0' : ''}${this.hr}`); // 00-23\n if (rslt.includes('[H1]')) rslt = rslt.replaceAll('[H1]', this.hr.toString()); // 0-23\n\n // change minute num\n if (rslt.includes('[M2]')) rslt = rslt.replaceAll('[M2]', `${this.minute < 10 ? '0' : ''}${this.minute}`); // 05, 45\n if (rslt.includes('[M1]')) rslt = rslt.replaceAll('[M1]', this.minute + ''); // 5, 45\n\n // change second num\n if (rslt.includes('[s2]')) rslt = rslt.replaceAll('[s2]', `${this.second < 10 ? '0' : ''}${this.second}`); // 05, 45\n if (rslt.includes('[s1]')) rslt = rslt.replaceAll('[s1]', this.second + ''); // 5, 45\n\n // change millisecond num\n if (rslt.includes('[S3]')) rslt = rslt.replaceAll('[S3]', this.millisecond < 10 ? `00${this.millisecond}` : this.millisecond < 100 ? `0${this.millisecond}` : this.millisecond + ''); // 001, 020, 200\n if (rslt.includes('[S2]')) rslt = rslt.replaceAll('[S2]', this.millisecond < 10 ? `00${this.millisecond}` : this.millisecond < 100 ? `0${this.millisecond}` : this.millisecond + ''); // 001, 020, 200\n if (rslt.includes('[S1]')) rslt = rslt.replaceAll('[S1]', this.millisecond + ''); // 1, 20, 300\n\n // change Week number\n if (rslt.includes('[W2]')) rslt = rslt.replaceAll('[W2]', this.weekNr + '');\n\n // change AM/PM\n if (rslt.includes('[t2]')) rslt = rslt.replaceAll('[t2]', this.isAM ? 'AM' : 'PM'); // AM, PM\n if (rslt.includes('[t1]')) rslt = rslt.replaceAll('[t1]', this.isAM ? 'A' : 'P'); // A, P\n\n // change timezone name\n if (rslt.includes('[Z2]')) rslt = rslt.replaceAll('[Z2]', this.timezoneLong); // Cental European Summer Time\n if (rslt.includes('[Z1]')) rslt = rslt.replaceAll('[Z1]', this.timezoneShort); // CEST\n\n // change timezone offset\n if (rslt.includes('[O3]')) rslt = rslt.replaceAll('[O3]', this.timezoneOffsetLongStr);\n if (rslt.includes('[O2]')) rslt = rslt.replaceAll('[O2]', (this.timezoneOffsetShortStr.replace('GMT', '')));\n if (rslt.includes('[O1]')) rslt = rslt.replaceAll('[O1]', this.timezoneOffset > 0 ? `+${this.timezoneOffset}` : this.timezoneOffset < 0 ? `${this.timezoneOffset}` : '');\n\n return rslt.replaceAll(this.IGNORE_SIGN, '').trim();\n\n }\n\n /** converteer een format naar een bruikbare replaceable string */\n private formatBuilder(format: string): string {\n\n let rslt = '';\n let prevToken = '';\n let counter = 0;\n let ignore = false;\n\n const allowed = 'ymdhHMsSWtZO';\n (format + ' ').split('').forEach((c) => {\n if (prevToken == '') counter = 1;\n else if (!ignore && c === prevToken && allowed.includes(c)) counter++;\n else if (!ignore && c === prevToken && !allowed.includes(c)) { counter++; rslt += prevToken; }\n else if (!ignore) {\n rslt += allowed.includes(prevToken) ? `[${prevToken}${counter}]` : prevToken;\n counter = 1;\n }\n else if (ignore) {\n rslt += prevToken;\n counter = 1;\n }\n\n if (c === this.IGNORE_SIGN) ignore = !ignore;\n prevToken = c;\n });\n return rslt;\n }\n //#endregion\n}\n\nexport { JSDateTime };\nexport type { JSChangeDateTimeType, JSDateSetterType, JSDateTimeZoneType };\n\n/** Type for timezones (<Continent>/<Location>), Is on the bottom side because its very long and just a lot of strings */\ntype JSDateTimeZoneType = 'Africa/Abidjan' |\n 'Africa/Accra' |\n 'Africa/Algiers' |\n 'Africa/Bissau' |\n 'Africa/Cairo' |\n 'Africa/Casablanca' |\n 'Africa/Ceuta' |\n 'Africa/El_Aaiun' |\n 'Africa/Johannesburg' |\n 'Africa/Juba' |\n 'Africa/Khartoum' |\n 'Africa/Lagos' |\n 'Africa/Maputo' |\n 'Africa/Monrovia' |\n 'Africa/Nairobi' |\n 'Africa/Ndjamena' |\n 'Africa/Sao_Tome' |\n 'Africa/Tripoli' |\n 'Africa/Tunis' |\n 'Africa/Windhoek' |\n 'America/Adak' |\n 'America/Anchorage' |\n 'America/Araguaina' |\n 'America/Argentina/Buenos_Aires' |\n 'America/Argentina/Catamarca' |\n 'America/Argentina/Cordoba' |\n 'America/Argentina/Jujuy' |\n 'America/Argentina/La_Rioja' |\n 'America/Argentina/Mendoza' |\n 'America/Argentina/Rio_Gallegos' |\n 'America/Argentina/Salta' |\n 'America/Argentina/San_Juan' |\n 'America/Argentina/San_Luis' |\n 'America/Argentina/Tucuman' |\n 'America/Argentina/Ushuaia' |\n 'America/Asuncion' |\n 'America/Atikokan' |\n 'America/Bahia' |\n 'America/Bahia_Banderas' |\n 'America/Barbados' |\n 'America/Belem' |\n 'America/Belize' |\n 'America/Blanc-Sablon' |\n 'America/Boa_Vista' |\n 'America/Bogota' |\n 'America/Boise' |\n 'America/Cambridge_Bay' |\n 'America/Campo_Grande' |\n 'America/Cancun' |\n 'America/Caracas' |\n 'America/Cayenne' |\n 'America/Chicago' |\n 'America/Chihuahua' |\n 'America/Costa_Rica' |\n 'America/Creston' |\n 'America/Cuiaba' |\n 'America/Curacao' |\n 'America/Danmarkshavn' |\n 'America/Dawson' |\n 'America/Dawson_Creek' |\n 'America/Denver' |\n 'America/Detroit' |\n 'America/Edmonton' |\n 'America/Eirunepe' |\n 'America/El_Salvador' |\n 'America/Fort_Nelson' |\n 'America/Fortaleza' |\n 'America/Glace_Bay' |\n 'America/Godthab' |\n 'America/Goose_Bay' |\n 'America/Grand_Turk' |\n 'America/Guatemala' |\n 'America/Guayaquil' |\n 'America/Guyana' |\n 'America/Halifax' |\n 'America/Havana' |\n 'America/Hermosillo' |\n 'America/Indiana/Indianapolis' |\n 'America/Indiana/Knox' |\n 'America/Indiana/Marengo' |\n 'America/Indiana/Petersburg' |\n 'America/Indiana/Tell_City' |\n 'America/Indiana/Vevay' |\n 'America/Indiana/Vincennes' |\n 'America/Indiana/Winamac' |\n 'America/Inuvik' |\n 'America/Iqaluit' |\n 'America/Jamaica' |\n 'America/Juneau' |\n 'America/Kentucky/Louisville' |\n 'America/Kentucky/Monticello' |\n 'America/La_Paz' |\n 'America/Lima' |\n 'America/Los_Angeles' |\n 'America/Maceio' |\n 'America/Managua' |\n 'America/Manaus' |\n 'America/Martinique' |\n 'America/Matamoros' |\n 'America/Mazatlan' |\n 'America/Menominee' |\n 'America/Merida' |\n 'America/Metlakatla' |\n 'America/Mexico_City' |\n 'America/Miquelon' |\n 'America/Moncton' |\n 'America/Monterrey' |\n 'America/Montevideo' |\n 'America/Nassau' |\n 'America/New_York' |\n 'America/Nipigon' |\n 'America/Nome' |\n 'America/Noronha' |\n 'America/North_Dakota/Beulah' |\n 'America/North_Dakota/Center' |\n 'America/North_Dakota/New_Salem' |\n 'America/Ojinaga' |\n 'America/Panama' |\n 'America/Pangnirtung' |\n 'America/Paramaribo' |\n 'America/Phoenix' |\n 'America/Port-au-Prince' |\n 'America/Port_of_Spain' |\n 'America/Porto_Velho' |\n 'America/Puerto_Rico' |\n 'America/Punta_Arenas' |\n 'America/Rainy_River' |\n 'America/Rankin_Inlet' |\n 'America/Recife' |\n 'America/Regina' |\n 'America/Resolute' |\n 'America/Rio_Branco' |\n 'America/Santarem' |\n 'America/Santiago' |\n 'America/Santo_Domingo' |\n 'America/Sao_Paulo' |\n 'America/Scoresbysund' |\n 'America/Sitka' |\n 'America/St_Johns' |\n 'America/Swift_Current' |\n 'America/Tegucigalpa' |\n 'America/Thule' |\n 'America/Thunder_Bay' |\n 'America/Tijuana' |\n 'America/Toronto' |\n 'America/Vancouver' |\n 'America/Whitehorse' |\n 'America/Winnipeg' |\n 'America/Yakutat' |\n 'America/Yellowknife' |\n 'Antarctica/Casey' |\n 'Antarctica/Davis' |\n 'Antarctica/DumontDUrville' |\n 'Antarctica/Macquarie' |\n 'Antarctica/Mawson' |\n 'Antarctica/Palmer' |\n 'Antarctica/Rothera' |\n 'Antarctica/Syowa' |\n 'Antarctica/Troll' |\n 'Antarctica/Vostok' |\n 'Asia/Almaty' |\n 'Asia/Amman' |\n 'Asia/Anadyr' |\n 'Asia/Aqtau' |\n 'Asia/Aqtobe' |\n 'Asia/Ashgabat' |\n 'Asia/Atyrau' |\n 'Asia/Baghdad' |\n 'Asia/Baku' |\n 'Asia/Bangkok' |\n 'Asia/Barnaul' |\n 'Asia/Beirut' |\n 'Asia/Bishkek' |\n 'Asia/Brunei' |\n 'Asia/Chita' |\n 'Asia/Choibalsan' |\n 'Asia/Colombo' |\n 'Asia/Damascus' |\n 'Asia/Dhaka' |\n 'Asia/Dili' |\n 'Asia/Dubai' |\n 'Asia/Dushanbe' |\n 'Asia/Famagusta' |\n 'Asia/Gaza' |\n 'Asia/Hebron' |\n 'Asia/Ho_Chi_Minh' |\n 'Asia/Hong_Kong' |\n 'Asia/Hovd' |\n 'Asia/Irkutsk' |\n 'Asia/Jakarta' |\n 'Asia/Jayapura' |\n 'Asia/Jerusalem' |\n 'Asia/Kabul' |\n 'Asia/Kamchatka' |\n 'Asia/Karachi' |\n 'Asia/Kathmandu' |\n 'Asia/Khandyga' |\n 'Asia/Kolkata' |\n 'Asia/Krasnoyarsk' |\n 'Asia/Kuala_Lumpur' |\n 'Asia/Kuching' |\n 'Asia/Macau' |\n 'Asia/Magadan' |\n 'Asia/Makassar' |\n 'Asia/Manila' |\n 'Asia/Nicosia' |\n 'Asia/Novokuznetsk' |\n 'Asia/Novosibirsk' |\n 'Asia/Omsk' |\n 'Asia/Oral' |\n 'Asia/Pontianak' |\n 'Asia/Pyongyang' |\n 'Asia/Qatar' |\n 'Asia/Qostanay' |\n 'Asia/Qyzylorda' |\n 'Asia/Riyadh' |\n 'Asia/Sakhalin' |\n 'Asia/Samarkand' |\n 'Asia/Seoul' |\n 'Asia/Shanghai' |\n 'Asia/Singapore' |\n 'Asia/Srednekolymsk' |\n 'Asia/Taipei' |\n 'Asia/Tashkent' |\n 'Asia/Tbilisi' |\n 'Asia/Tehran' |\n 'Asia/Thimphu' |\n 'Asia/Tokyo' |\n 'Asia/Tomsk' |\n 'Asia/Ulaanbaatar' |\n 'Asia/Urumqi' |\n 'Asia/Ust-Nera' |\n 'Asia/Vladivostok' |\n 'Asia/Yakutsk' |\n 'Asia/Yangon' |\n 'Asia/Yekaterinburg' |\n 'Asia/Yerevan' |\n 'Atlantic/Azores' |\n 'Atlantic/Bermuda' |\n 'Atlantic/Canary' |\n 'Atlantic/Cape_Verde' |\n 'Atlantic/Faroe' |\n 'Atlantic/Madeira' |\n 'Atlantic/Reykjavik' |\n 'Atlantic/South_Georgia' |\n 'Atlantic/Stanley' |\n 'Australia/Adelaide' |\n 'Australia/Brisbane' |\n 'Australia/Broken_Hill' |\n 'Australia/Currie' |\n 'Australia/Darwin' |\n 'Australia/Eucla' |\n 'Australia/Hobart' |\n 'Australia/Lindeman' |\n 'Australia/Lord_Howe' |\n 'Australia/Melbourne' |\n 'Australia/Perth' |\n 'Australia/Sydney' |\n 'Europe/Amsterdam' |\n 'Europe/Andorra' |\n 'Europe/Astrakhan' |\n 'Europe/Athens' |\n 'Europe/Belgrade' |\n 'Europe/Berlin' |\n 'Europe/Brussels' |\n 'Europe/Bucharest' |\n 'Europe/Budapest' |\n 'Europe/Chisinau' |\n 'Europe/Copenhagen' |\n 'Europe/Dublin' |\n 'Europe/Gibraltar' |\n 'Europe/Helsinki' |\n 'Europe/Istanbul' |\n 'Europe/Kaliningrad' |\n 'Europe/Kiev' |\n 'Europe/Kirov' |\n 'Europe/Lisbon' |\n 'Europe/London' |\n 'Europe/Luxembourg' |\n 'Europe/Madrid' |\n 'Europe/Malta' |\n 'Europe/Minsk' |\n 'Europe/Monaco' |\n 'Europe/Moscow' |\n 'Europe/Oslo' |\n 'Europe/Paris' |\n 'Europe/Prague' |\n 'Europe/Riga' |\n 'Europe/Rome' |\n 'Europe/Samara' |\n 'Europe/Saratov' |\n 'Europe/Simferopol' |\n 'Europe/Sofia' |\n 'Europe/Stockholm' |\n 'Europe/Tallinn' |\n 'Europe/Tirane' |\n 'Europe/Ulyanovsk' |\n 'Europe/Uzhgorod' |\n 'Europe/Vienna' |\n 'Europe/Vilnius' |\n 'Europe/Volgograd' |\n 'Europe/Warsaw' |\n 'Europe/Zaporozhye' |\n 'Europe/Zurich' |\n 'Indian/Chagos' |\n 'Indian/Christmas' |\n 'Indian/Cocos' |\n 'Indian/Kerguelen' |\n 'Indian/Mahe' |\n 'Indian/Maldives' |\n 'Indian/Mauritius' |\n 'Indian/Reunion' |\n 'Pacific/Apia' |\n 'Pacific/Auckland' |\n 'Pacific/Bougainville' |\n 'Pacific/Chatham' |\n 'Pacific/Chuuk' |\n 'Pacific/Easter' |\n 'Pacific/Efate' |\n 'Pacific/Enderbury' |\n 'Pacific/Fakaofo' |\n 'Pacific/Fiji' |\n 'Pacific/Funafuti' |\n 'Pacific/Galapagos' |\n 'Pacific/Gambier' |\n 'Pacific/Guadalcanal' |\n 'Pacific/Guam' |\n 'Pacific/Honolulu' |\n 'Pacific/Kiritimati' |\n 'Pacific/Kosrae' |\n 'Pacific/Kwajalein' |\n 'Pacific/Majuro' |\n 'Pacific/Marquesas' |\n 'Pacific/Nauru' |\n 'Pacific/Niue' |\n 'Pacific/Norfolk' |\n 'Pacific/Noumea' |\n 'Pacific/Pago_Pago' |\n 'Pacific/Palau' |\n 'Pacific/Pitcairn' |\n 'Pacific/Pohnpei' |\n 'Pacific/Port_Moresby' |\n 'Pacific/Rarotonga' |\n 'Pacific/Tahiti' |\n 'Pacific/Tarawa' |\n 'Pacific/Tongatapu' |\n 'Pacific/Wake' |\n 'Pacific/Wallis';\n\n","/**\n * Controleer of een string een BSN bevat. Om dat te doen worden alle karakters, behalve letters en getallen gewist. \n * Als er een of meer BSNs aangetroffen worden, worden ze allemaal teruggeven in een array.\n * @param txt a string which could contain a BSN\n * @returns false when there is no BSN or a tuple [true, Array<string>] where the string-array contains all found BSNs\n * @example\n * hasBSN('123456789') // [false, []]\n * hasBSN('200644440') // [true, ['200644440']]\n * hasBSN('xxx200644440xxx') // [true, ['200644440']]\n * hasBSN('xxx123456789xxx') // [false, []]\n * hasBSN('200x644x440') // [false, []]\n * hasBSN('200644440, 200644440, 200644440') // [true, ['200644440','200644440','200644440']]\n */\nfunction hasBSN(txt: string): [boolean, Array<string>] {\n txt = txt.replaceAll(/[^0-9a-zA-Z]/g, '');\n const possibleBSNs = txt.match(/[0-9]{9}/g);\n if (possibleBSNs) {\n const matches: string[] = [];\n for (const bsn of possibleBSNs) {\n\n let total = 0;\n let teller = 9;\n for (const char of bsn.split('')) {\n total += parseInt(char) * teller;\n teller = teller !== 2 ? teller - 1 : -1;\n }\n if (total % 11 === 0) matches.push(bsn);\n }\n return [matches.length > 0, matches];\n }\n return [false, []];\n}\n\nexport { hasBSN };\n","\ntype RGBType = [number, number, number, number?];\n\n/**\n * Bepaal op basis van de achtergrondkleur wat de kleur van de tekst moet zijn (zwart of wit).\n * - alpha-channel wordt genegeerd.\n * - gebaseerd op WCAG-guidelines\n * @param bgColor de achtergrondkleur van de tekst. string? hex colors (#abc of #abcdef). tuple? [r, g, b]\n * @returns zwart of wit (hex-color of rgb-tuple)\n * @example\n * txtColorDecision('#ffffff'); // '#000000'\n * txtColorDecision('#000000'); // '#ffffff'\n * txtColorDecision([0, 0, 0]); // [255, 255, 255]\n * txtColorDecision([255, 255, 255]); // [0, 0, 0]\n */\nfunction calculateTxtColor(bgColor: string | RGBType): '#ffffff' | '#000000' | [0, 0, 0] | [255, 255, 255] {\n const isRGB = (typeof bgColor !== 'string');\n let clr: RGBType;\n if (typeof bgColor === 'string')\n clr = hexToRGB(bgColor);\n else\n clr = bgColor;\n\n const [r = 255, g = 255, b = 255] = clr;\n const uicolors = [r / 255, g / 255, b / 255];\n const c = uicolors.map((col) => (col < 0.03928 ? col / 12.92 : Math.pow((col + 0.055) / 1.055, 2.4)));\n const lum = 0.02126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];\n\n if (isNaN(lum)) return [0, 0, 0];\n else if (lum > 0.179) return isRGB ? [0, 0, 0] : '#000000';\n else return isRGB ? [255, 255, 255] : '#ffffff';\n}\n\n/**\n * Converteer een hex-color naar een rgb-tuple.\n * @param hex \n * @returns een rgb-tuple [number, number, number]\n */\nfunction hexToRGB(hex: string): RGBType {\n let color = '#';\n if (!hex.startsWith('#')) hex = '#' + hex;\n const rgx = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)|(^#[0-9A-F]{4}$)/i;\n if (!rgx.test(hex)) throw new Error('Invalid hex-color: ' + hex);\n\n if (hex.length === 4)\n hex\n .substring(1, 5)\n .split('')\n .forEach((c) => (color += (c + c))); // #fff naar #ffffff\n else if (hex.length === 5)\n hex\n .substring(1, 5)\n .split('')\n .forEach((c) => (color += (c + c))); // #fffa naar #ffffff\n else if (hex.length === 7) color = hex; // #ffffff\n else if (hex.length === 9) color = hex.substring(0, 7); // alpha channel weg\n\n\n const r = parseInt(color.substring(1, 3), 16);\n const g = parseInt(color.substring(3, 5), 16);\n const b = parseInt(color.substring(5, 7), 16);\n const a = parseInt(color.substring(7, 9), 16);\n return [r, g, b, a];\n}\n\nexport { calculateTxtColor };\n","import { CSSProperties } from \"react\";\n\n/** default style van events */\nexport const eventStylesBase = {\n transition: 'background-color .2s ease-in-out, color .2s ease-in-out',\n fontSize: '0.7em',\n height: '1.5em',\n margin: '6px 3px',\n borderRadius: '5px',\n textAlign: 'start',\n paddingLeft: '3px',\n paddingRight: '3px',\n overflow: 'clip',\n textOverflow: 'ellipsis',\n};\n\n/** default styling van de header */\nexport const headerContainerStylesBase = {\n textAlign: 'center',\n borderBottom: '1px solid #f1f1f1',\n fontWeight: 'bold',\n color: '#888',\n} as CSSProperties;\n\n/** default styling van de grid */\nexport const gridContainerStylesBase = {\n display: 'grid',\n gridTemplateRows: `30px repeat(6, minmax(170px, auto))`,\n justifyItems: 'stretch',\n alignItems: 'stretch',\n} as CSSProperties;\n\n/** default styling van het weeknummer */\nexport const weekNumberStylesBase = {\n backgroundColor: '#f1f1f1',\n borderRight: '2px solid #f1f1f1',\n borderTop: 'thin solid #f1f1f1',\n textAlign: 'center',\n fontSize: '0.7em',\n color: '#888',\n paddingTop: '1em',\n} as CSSProperties;\n\n/** default styling van de day-container */\nexport const dayContainerStyleBase = {\n borderRight: 'thin solid #f1f1f1',\n borderBottom: 'thin solid #f1f1f1',\n textAlign: 'center',\n fontSize: '1.1em',\n color: '#888',\n} as CSSProperties;\n\n/** default styling van de datum in de daycontainer */\nexport const dayDateStyleBase = {\n marginBottom: '.5em',\n marginTop: '.25em',\n verticalAlign: 'middle',\n transition: 'background-color .2s ease-in-out',\n} as CSSProperties;\n\n/** default styling van de is-today datum */\nexport const todayStyleBase = {\n borderRadius: '15px',\n padding: '.25em .65em',\n transition: 'background-color .2s ease-in-out, color .2s ease-in-out',\n} as CSSProperties;\n\n/** kleur van het event op het blokje in de agenda */\nexport const eventKleurBlockStyleBase = {\n width: '0.9em',\n height: '0.9em',\n borderRadius: '3px',\n marginRight: '.5em',\n display: 'inline-block',\n transition: 'background-color .2s ease-in-out',\n} as CSSProperties;\n","import React, { CSSProperties, MouseEvent } from 'react';\nimport { EventOptions, BaseEventProps } from '../Props';\nimport { eventStylesBase } from '../base-styles';\nimport { calculateTxtColor } from '~/utils';\n\ntype CalendarColoredItemProps<T extends BaseEventProps> = {\n /** het event */\n desc: (event: T) => JSX.Element;\n event: T;\n /** opties voor events */\n options?: EventOptions<T>;\n /** onclick handler voor het event */\n onClick?: (event: T, clickEvent: MouseEvent<HTMLElement>) => void;\n};\n\n/**\n * Component voor een event dat de hele dag duurt\n * @param props\n * @returns\n */\nexport function CalendarColoredItem<T extends BaseEventProps>({\n event,\n options,\n onClick,\n desc,\n}: CalendarColoredItemProps<T>): JSX.Element {\n const [isHovered, setHovered] = React.useState(false);\n\n /** bereken de tekst kleur op basis van de achtergrond kleur */\n const pickTextColor = React.useCallback(calculateTxtColor, []);\n\n /** styles van het event */\n const eventStyle = React.useMemo<CSSProperties>(() => {\n let bgColor = 'p';\n if (event.evtColor) bgColor = event.evtColor(isHovered);\n else if (options?.evtColor) bgColor = options.evtColor(event, isHovered);\n\n // ColorProps opruimen, vervangen door hex colors\n if (bgColor === 'p') bgColor = '#113670';\n else if (bgColor === 'i') bgColor = '#3b59ec';\n else if (bgColor === 'l') bgColor = '#2f47bc';\n else if (bgColor === 'd') bgColor = '#d91000';\n else if (bgColor === 's') bgColor = '#519c43';\n else if (bgColor === 'w') bgColor = '#eea720';\n bgColor += isHovered ? 'aa' : 'ff';\n\n const txtColor = pickTextColor(bgColor);\n // voeg de hovering toe\n\n return {\n ...eventStylesBase,\n paddingLeft: '1em',\n backgroundColor: bgColor,\n color: txtColor,\n cursor: onClick ? 'pointer' : 'default',\n } as CSSProperties;\n }, [event, isHovered]);\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n return (\n <div\n ref={ref}\n onClick={(e) => onClick && onClick(event, e)}\n style={eventStyle}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n <span>{desc(event)}</span>\n </div>\n );\n}\n","import React, { CSSProperties, MouseEvent } from 'react';\nimport { EventOptions, BaseEventProps } from '../Props';\nimport { eventStylesBase, eventKleurBlockStyleBase } from '../base-styles';\nimport { calculateTxtColor } from '~/utils';\n\ntype CalendarItemProps<T extends BaseEventProps> = {\n desc: (event: T) => JSX.Element;\n /** het event */\n event: T;\n /** opties voor events */\n options?: EventOptions<T>;\n /** onclick handler */\n onClick?: (event: T, clickEvent: MouseEvent<HTMLElement>) => void;\n};\n\n/**\n * Component voor een event met een tijdstip en NIET de hele dag duurt\n * @param props\n * @returns\n */\nexport function CalendarItem<T extends BaseEventProps>({\n event,\n options,\n onClick,\n desc,\n}: CalendarItemProps<T>): JSX.Element {\n const [isHovered, setHovered] = React.useState(false);\n\n /** bereken de tekst kleur op basis van de achtergrond kleur */\n const pickTextColor = React.useCallback(calculateTxtColor, []);\n\n /** event styles */\n const eventStyle = React.useMemo<CSSProperties>(() => {\n const bgColor = isHovered ? '#f1f1f1' : '#ffffff';\n const txtColor = pickTextColor(bgColor);\n\n return {\n ...eventStylesBase,\n backgroundColor: bgColor,\n color: txtColor,\n cursor: onClick ? 'pointer' : 'default',\n } as CSSProperties;\n }, [isHovered]);\n\n /** styling kleur-icoon op event */\n const eventSpan = React.useMemo(() => {\n let evtColor = 'p';\n if (event.evtColor) evtColor = event.evtColor(isHovered);\n else if (options?.evtColor) evtColor = options.evtColor(event, isHovered);\n\n // ColorProps opruimen, vervangen door hex colors\n if (evtColor === 'p') evtColor = '#113670';\n else if (evtColor === 'i') evtColor = '#3b59ec';\n else if (evtColor === 'l') evtColor = '#2f47bc';\n else if (evtColor === 'd') evtColor = '#d91000';\n else if (evtColor === 's') evtColor = '#519c43';\n else if (evtColor === 'w') evtColor = '#eea720';\n return {\n ...eventKleurBlockStyleBase,\n backgroundColor: evtColor,\n };\n }, [event, isHovered]);\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n return (\n <div\n ref={ref}\n onClick={(e) => onClick && onClick(event, e)}\n style={eventStyle}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n <span style={eventSpan}></span>\n {desc(event)}\n </div>\n );\n}\n","import React, { CSSProperties, useEffect, MouseEvent } from 'react';\nimport { BaseEventProps, EventOptions } from '../Props';\nimport { CalendarColoredItem } from '../CalendarItems/CalendarColoredItem';\nimport { eventStylesBase } from '../base-styles';\nimport { CalendarItem } from '../CalendarItems/CalendarItem';\nimport { JSDateTime } from '~/utils';\n\ntype MoreEventsViewProps<T extends BaseEventProps> = {\n /** de events op deze dag */\n events: T[];\n /** event-click handling */\n onEventClick?: (event: T, clickEvent: MouseEvent<HTMLElement>) => void;\n /** global event options */\n options?: { allday?: EventOptions<T>; timed?: EventOptions<T> };\n};\n\n/**\n * expandable events als er meer dan 5 events op een dag vallen\n * @param props\n * @returns\n */\nexport function MoreEventsView<T extends BaseEventProps>({\n events,\n onEventClick,\n options,\n}: MoreEventsViewProps<T>): JSX.Element {\n const [visibleEvents, setVisibleEvents] = React.useState(() => events.slice(4));\n const [isHovered, setHovered] = React.useState(false);\n const [isExpanded, setExpanded] = React.useState(false);\n\n /** als de events wijzigen, dan de visibleEvents opnieuw zetten */\n useEffect(() => {\n setVisibleEvents(events.slice(4));\n }, [events]);\n\n /** style van de events */\n const eventStyle = React.useMemo<CSSProperties>(() => {\n const bgColor = isHovered ? '#f4f4f4' : 'transparent';\n const txtColor = isHovered ? '#3b59ec' : '#000000';\n\n return {\n ...eventStylesBase,\n backgroundColor: bgColor,\n color: txtColor,\n height: '1.5em',\n fontSize: '0.6em',\n // cursor: onClick && 'pointer',\n } as CSSProperties;\n }, [isHovered]);\n\n /** style van de \"nog xxx\" en de \"toon minder\" */\n const spanStyle = React.useMemo(() => {\n return {\n width: '0.9em',\n height: '0.9em',\n borderRadius: '3px',\n backgroundColor: 'transparent',\n marginRight: '.5em',\n display: 'inline-block',\n };\n }, [events]);\n\n /** afhandeling click van toon meer/minder */\n const handleClick = () => {\n setExpanded(!isExpanded);\n setHovered(false);\n };\n\n return (\n <React.Fragment>\n {isExpanded &&\n visibleEvents.map((evt) => {\n if (evt.allDay)\n return (\n <CalendarColoredItem<T>\n desc={(evt: T) => <span>{typeof evt.title == 'string' ? evt.title : evt.title()}</span>}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n event={evt}\n options={options?.allday}\n onClick={onEventClick}\n />\n );\n else\n return (\n <CalendarItem<T>\n desc={(evt: T) => (\n <React.Fragment>\n <strong>{(evt.startDateTime as JSDateTime).timeHM}</strong>\n <span>{typeof evt.title == 'string' ? evt.title : evt.title()}</span>\n </React.Fragment>\n )}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n event={evt}\n options={options?.timed}\n onClick={onEventClick}\n />\n );\n })}\n\n <div onMouseEnter={() => setHovered(true)} onMouseLeave={() => setHovered(false)} style={eventStyle}>\n {!isExpanded && (\n <div onClick={handleClick}>\n <span style={spanStyle}></span>\n <span>Nog {visibleEvents.length} ...</span>\n </div>\n )}\n\n {isExpanded && (\n <div onClick={handleClick}>\n <span style={spanStyle}></span>\n <span>Toon minder</span>\n </div>\n )}\n </div>\n </React.Fragment>\n );\n}\n","import React, { CSSProperties } from 'react';\nimport { dayContainerStyleBase, dayDateStyleBase, todayStyleBase } from '../base-styles';\nimport { CalendarColoredItem } from '../CalendarItems/CalendarColoredItem';\nimport { MoreEventsView } from './MoreEvents';\nimport { CalendarItem } from '../CalendarItems/CalendarItem';\nimport { BaseEventProps, CalendarOptions } from '../Props';\nimport { calculateTxtColor, JSDateTime } from '~/utils';\n\ntype DayContainerProps<T extends BaseEventProps> = {\n /** events op deze dag */\n events: T[];\n /** wat te doen als een event aangeklikt wordt */\n onEventClick?: (event: T, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** wat te doen als een dag aangeklikt wordt */\n onDayClick?: (date: JSDateTime, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** opties voor deze container */\n options?: CalendarOptions<T>;\n /** de datum voor de container */\n date: JSDateTime;\n};\n\n/**\n * Component voor de dag-container in de maand-view\n * @param props\n * @returns\n */\nexport function DayContainer<T extends BaseEventProps>({\n options,\n date,\n onDayClick,\n onEventClick,\n events,\n}: DayContainerProps<T>) {\n const [isHovered, setHovered] = React.useState(false);\n\n /** bereken de tekst kleur op basis van de achtergrond kleur */\n const pickTextColor = React.useCallback(calculateTxtColor, []);\n\n /** style van de container zelf */\n const dayContainerStyle = React.useMemo<CSSProperties>(() => ({ ...dayContainerStyleBase }), [date, events]);\n\n /** style van de today-header (wijkt af van normale header) */\n const todayHeaderStyle = React.useMemo<CSSProperties>(() => {\n if (options?.today?.doNotMarkToday) return {};\n\n let bgColor = 'p';\n if (options?.today?.bgColor) bgColor = options.today.bgColor(isHovered, date);\n\n // ColorProps opruimen\n if (bgColor === 'p') bgColor = '#113670';\n else if (bgColor === 'i') bgColor = '#3b59ec';\n else if (bgColor === 'l') bgColor = '#2f47bc';\n else if (bgColor === 'd') bgColor = '#d91000';\n else if (bgColor === 's') bgColor = '#519c43';\n else if (bgColor === 'w') bgColor = '#eea720';\n\n const txtColor = pickTextColor(bgColor);\n\n return {\n ...todayStyleBase,\n backgroundColor: bgColor,\n color: txtColor,\n };\n }, [date, isHovered]);\n\n return (\n <div style={dayContainerStyle}>\n {/** container van de header */}\n <div\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n ...dayDateStyleBase,\n cursor: onDayClick ? 'pointer' : 'default',\n backgroundColor: isHovered ? '#f4f4f4' : 'transparent',\n }}\n onClick={(e) => onDayClick && onDayClick(date, e)}\n >\n <span style={date.isToday ? todayHeaderStyle : undefined}>{date.day}</span>\n <span style={{ color: '#aaa', fontSize: '0.66em' }}> {date.monthLong}</span>\n </div>\n <div>\n {/** events container */}\n {events.map((evt, index) => {\n if (evt.allDay && index < 4)\n return (\n <CalendarColoredItem<T>\n desc={(evt: T) => <span>{typeof evt.title == 'string' ? evt.title : evt.title()}</span>}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n event={evt}\n options={options?.event?.allday}\n onClick={onEventClick}\n />\n );\n else if (!evt.allDay && index < 4)\n return (\n <CalendarItem<T>\n desc={(evt: T) => (\n <React.Fragment>\n <strong>{(evt.startDateTime as JSDateTime).timeHM}</strong>\n <span style={{ marginLeft: '3px' }}>{typeof evt.title == 'string' ? evt.title : evt.title()}</span>\n </React.Fragment>\n )}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n event={evt}\n options={options?.event?.timed}\n onClick={onEventClick}\n />\n );\n else if (index == 4 && events.length > 5)\n return (\n <MoreEventsView<T>\n key={date.dateShort + '-more'}\n events={events}\n onEventClick={onEventClick}\n options={options?.event}\n />\n );\n else if (index == 4 && evt.allDay)\n return (\n <CalendarColoredItem<T>\n desc={(evt: T) => <span>{typeof evt.title == 'string' ? evt.title : evt.title()}</span>}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n event={evt}\n options={options?.event?.allday}\n onClick={onEventClick}\n />\n );\n else if (index == 4 && !evt.allDay)\n return (\n <CalendarItem<T>\n desc={(evt: T) => (\n <React.Fragment>\n <strong>{(evt.startDateTime as JSDateTime).timeHM}</strong>\n <span style={{ marginLeft: '3px' }}>{typeof evt.title == 'string' ? evt.title : evt.title()}</span>\n </React.Fragment>\n )}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n event={evt}\n options={options?.event?.timed}\n onClick={onEventClick}\n />\n );\n else return null;\n })}\n </div>\n </div>\n );\n}\n","import React, { CSSProperties } from 'react';\nimport { JSDateTime } from '~/utils';\nimport { gridContainerStylesBase, headerContainerStylesBase, weekNumberStylesBase } from '../base-styles';\nimport { BaseEventProps, CalendarOptions } from '../Props';\nimport { DayContainer } from './DayContainer';\n\ntype MonthViewProps<T extends BaseEventProps> = {\n /** events voor deze view */\n events: T[];\n /** opties voor deze view */\n options?: CalendarOptions<T>;\n /** event aangeklikt */\n onEventClick?: (e: T, event: React.MouseEvent<HTMLElement>) => void;\n /** dag-datum geklikt? */\n onDayClick?: (date: JSDateTime, event: React.MouseEvent<HTMLElement>) => void;\n /** huidige geselecteerde datum */\n viewDate: Date | JSDateTime;\n};\n\n/**\n * maak een maand-view (grid) met events\n * @param props\n * @returns\n */\nfunction MonthView<T extends BaseEventProps>({\n viewDate: vd,\n options,\n onEventClick,\n onDayClick,\n events: orgEvents,\n}: MonthViewProps<T>): JSX.Element {\n const visibleDays =\n options?.visibleDays && options?.visibleDays?.size != 0 ? options?.visibleDays! : new Set([1, 2, 3, 4, 5, 6, 7]);\n\n const [viewDate, setViewDate] = React.useState<JSDateTime>(\n vd instanceof Date ? JSDateTime.fromDate(vd, options?.locale) : vd.clone()\n );\n\n /**\n * converteer alle events naar een array van [Datum, Event[]]-tuples.\n * @param vd datum om de view rond op te bouwen\n */\n const eventConverterFn = React.useCallback((vd: JSDateTime): Array<[JSDateTime, T[]]> => {\n const start = vd.startOf('month').startOf('week').startOf('day');\n const end = vd.endOf('month').endOf('week').startOf('day');\n\n // filter eerst alle events weg die NIET in deze maand + begin/eind van de week zitten\n const events = orgEvents\n .map((e) => {\n e.allDay = e.allDay || !e.endDateTime;\n if (e.startDateTime instanceof Date) e.startDateTime = JSDateTime.fromDate(e.startDateTime, options?.locale);\n if (e.endDateTime && e.endDateTime instanceof Date)\n e.endDateTime = JSDateTime.fromDate(e.endDateTime, options?.locale);\n return e;\n })\n .filter((e) => {\n return (e.startDateTime as JSDateTime).isBetween([start, end]);\n });\n\n let currDate = start.clone();\n const datesWithEvents: Array<[JSDateTime, T[]]> = [];\n\n while (currDate < end) {\n if (visibleDays.has(currDate.weekDay)) {\n const dayStart = currDate.startOf('day');\n const dayEnd = currDate.endOf('day');\n\n const dayEvents = events\n .filter((e) => (e.startDateTime as JSDateTime).isBetween([dayStart, dayEnd]))\n .sort((a, b) => {\n if (a.allDay && !b.allDay) return -1;\n if (!a.allDay && b.allDay) return 1;\n return a.startDateTime.valueOf() - b.startDateTime.valueOf();\n });\n\n datesWithEvents.push([currDate, dayEvents]);\n }\n currDate = currDate.plus({ days: 1 });\n }\n return datesWithEvents;\n }, []);\n\n const [datesWithEvents, setDatesWithEvents] = React.useState<Array<[JSDateTime, T[]]>>(eventConverterFn(viewDate));\n React.useEffect(() => {\n const newVd = vd instanceof Date ? JSDateTime.fromDate(vd, options?.locale) : vd.clone();\n setViewDate(newVd);\n setDatesWithEvents(eventConverterFn(newVd));\n }, [vd, orgEvents, options?.locale]);\n\n const gridContainerStyles = React.useMemo<CSSProperties>(\n () => ({ ...gridContainerStylesBase, gridTemplateColumns: `30px repeat(${visibleDays.size}, 1fr)` }),\n [options?.visibleDays]\n );\n return (\n <React.Fragment>\n <div className=\"lbr-grid-container\" style={gridContainerStyles}>\n <MonthViewHeader visibleDays={visibleDays} viewDate={viewDate} />\n <MonthViewDayBlocks<T>\n visibleDays={visibleDays}\n viewDate={viewDate}\n datesWithEvents={datesWithEvents}\n options={options}\n onDayClick={onDayClick}\n onEventClick={onEventClick}\n />\n </div>\n </React.Fragment>\n );\n}\n\n/**\n * Maak de header voor de maandview\n * @param visibleDays: set met dagen die getoond moeten worden\n * @param viewDate: huidige view-datum\n * @returns\n */\nfunction MonthViewHeader({ visibleDays, viewDate }: { visibleDays: Set<number>; viewDate: JSDateTime }): JSX.Element {\n const dayNames: string[] = [];\n let date = viewDate.startOf('week');\n const end = viewDate.endOf('week');\n const dayNums = Array.from(visibleDays).sort();\n let count = 0;\n while (date <= end && count < 7) {\n if (dayNums.includes(date.weekDay)) dayNames.push(date.dayLong);\n date = date.plus({ days: 1 });\n count++;\n }\n\n /** style van de container */\n const headerStyles = React.useMemo<CSSProperties>(() => ({ ...headerContainerStylesBase }), []);\n\n /** style van de dag-namen */\n const dayNameStyles = React.useMemo<CSSProperties>(() => ({ ...headerContainerStylesBase }), []);\n\n return (\n <React.Fragment>\n <div style={headerStyles}></div>\n {dayNames.map((d) => (\n <div key={d} style={dayNameStyles}>\n {d}\n </div>\n ))}\n </React.Fragment>\n );\n}\n\ntype MonthViewDayBlockProps<T extends BaseEventProps> = {\n /** de huidige geselecteerde datum */\n viewDate: JSDateTime;\n /** alle dates met de bijhorende events */\n datesWithEvents: Array<[JSDateTime, T[]]>;\n /** de zichtbare dagen (ma = 1, di = 2, etc) */\n visibleDays: Set<number>;\n /** event click callback */\n onEventClick?: (event: T, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** day click callback */\n onDayClick?: (date: JSDateTime, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** options bij de calendar */\n options?: CalendarOptions<T>;\n};\n\n/** blokjes bij de monthview */\nfunction MonthViewDayBlocks<T extends BaseEventProps>({\n visibleDays,\n onDayClick,\n onEventClick,\n options,\n datesWithEvents,\n}: MonthViewDayBlockProps<T>): JSX.Element {\n const weekLength = visibleDays.size;\n // de dag-counter, oom te bepalen wanneer er een weeknummer inmoet\n let counter = 0;\n\n return (\n <React.Fragment>\n {datesWithEvents.map(([date, events]) => {\n if (counter == weekLength) counter = 0;\n return (\n <React.Fragment key={date.ISO}>\n {counter++ == 0 && <WeekNumberCell weekNr={date.weekNr} />}\n <DayContainer\n date={date}\n events={events}\n onEventClick={onEventClick}\n onDayClick={onDayClick}\n options={options}\n />\n </React.Fragment>\n );\n })}\n </React.Fragment>\n );\n}\n\n/** speciale component voor het weeknummer */\nfunction WeekNumberCell({ weekNr }: { weekNr: number }): JSX.Element {\n /** css object voor de weeknummer */\n const weekNumStyle = React.useMemo<CSSProperties>(() => ({ ...weekNumberStylesBase }), []);\n return <div style={{ ...weekNumStyle, borderTopWidth: '0' }}>{weekNr}</div>;\n}\n\nexport { MonthView };\nexport type { MonthViewProps };\n","import React, { CSSProperties } from 'react';\nimport { dayContainerStyleBase } from '../base-styles';\nimport { BaseEventProps, CalendarOptions } from '../Props';\nimport { CalendarItem } from '../CalendarItems/CalendarItem';\n\ntype AlldayContainerProps<T extends BaseEventProps> = {\n events: T[];\n /** wat te doen als een event aangeklikt wordt */\n onEventClick?: (event: T, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** wat te doen als een dag aangeklikt wordt */\n options?: CalendarOptions<T>;\n};\n\n/**\n * Component voor allday objects in de calendar\n * @param props\n * @returns\n */\nexport function AlldayContainer<T extends BaseEventProps>({ options, events, onEventClick }: AlldayContainerProps<T>) {\n /** style van de container zelf */\n const dayContainerStyle = React.useMemo<CSSProperties>(() => ({ ...dayContainerStyleBase }), []);\n\n return (\n <div style={dayContainerStyle}>\n {events.map((e) => (\n <CalendarItem\n key={typeof e.id == 'function' ? e.id() : e.id}\n event={e}\n onClick={onEventClick}\n options={options?.event?.allday}\n desc={(e: T) => <span>{typeof e.title == 'function' ? e.title() : e.title}</span>}\n />\n ))}\n </div>\n );\n}\n","import React, { CSSProperties } from 'react';\nimport { DefinedHexColors } from '~/loon-react-bulma-types';\nimport { calculateTxtColor, JSDateTime } from '~/utils';\nimport { eventStylesBase, weekNumberStylesBase } from '../base-styles';\nimport { BaseEventProps, CalendarOptions, EventOptions } from '../Props';\n\n/**\n * Component om een uur-nummer weer te geven.\n * @param param0\n * @returns\n */\nexport function HourNumber({ hour }: { hour: number }): JSX.Element {\n const style = React.useMemo<React.CSSProperties>(\n () => ({ ...weekNumberStylesBase, paddingTop: '0', height: '60px', borderBottom: 'thin solid #e1e1e1' }),\n []\n );\n return <div style={style}>{hour.toString().padStart(2, '0')}:00</div>;\n}\n\ntype HourSlotProps<T extends BaseEventProps> = {\n /** de events voor deze HourProp */\n events: T[];\n /** event-selected callback Fn */\n onEventClick?: (event: T, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** options bij de calendar */\n options?: CalendarOptions<T>;\n};\n/**\n * Component voor een uur-slot.\n * @param param0\n * @returns\n */\nexport function HourSlot<T extends BaseEventProps>({ events, onEventClick, options }: HourSlotProps<T>): JSX.Element {\n const hourSlotStyle = React.useMemo<React.CSSProperties>(\n () => ({\n maxHeight: '60px',\n overflow: 'clip',\n borderBottom: 'thin solid #f1f1f1',\n borderRight: 'thin solid #f1f1f1',\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n }),\n []\n );\n const ref = React.useRef<HTMLDivElement>(null);\n\n const eventWidth = events.length !== 0 && ref.current?.offsetWidth ? ref.current.offsetWidth / events.length : 0;\n\n return (\n <div style={hourSlotStyle} ref={ref}>\n {events.map((evt, i) => (\n <WeekTimedItem<T>\n options={options?.event?.timed}\n event={evt}\n eventIndex={i}\n key={typeof evt.id == 'function' ? evt.id() : evt.id}\n desc={(e) => (\n <React.Fragment>\n <b>{(e.startDateTime as JSDateTime).timeHM}</b>\n <span> {typeof e.title === 'function' ? e.title() : e.title}</span>\n </React.Fragment>\n )}\n onClick={onEventClick}\n eventWidth={eventWidth}\n />\n ))}\n </div>\n );\n}\n\ntype WeekTimedEventProps<T extends BaseEventProps> = {\n /** omschrijving bij het event */\n desc: (event: T) => JSX.Element;\n /** het event zelf */\n event: T;\n /** opties voor events */\n options?: EventOptions<T>;\n /** onclick handler voor het event */\n onClick?: (event: T, clickEvent: React.MouseEvent<HTMLElement>) => void;\n /** parent breedte in px */\n eventWidth: number;\n eventIndex: number;\n};\n\n/**\n * Component voor een event dat de hele dag duurt\n * @param props\n * @returns\n */\nfunction WeekTimedItem<T extends BaseEventProps>({\n event,\n options,\n eventWidth,\n eventIndex,\n onClick,\n desc,\n}: WeekTimedEventProps<T>): JSX.Element {\n const [isHovered, setHovered] = React.useState(false);\n\n /** bereken de tekst kleur op basis van de achtergrond kleur */\n const pickTextColor = React.useCallback(calculateTxtColor, []);\n /** referentie naar element */\n const ref = React.useRef<HTMLDivElement>(null);\n\n /** styles van het event */\n const eventStyle = React.useMemo<CSSProperties>(() => {\n let bgColor = 'p';\n if (event.evtColor) bgColor = event.evtColor(isHovered);\n else if (options?.evtColor) bgColor = options.evtColor(event, isHovered);\n\n // ColorProps opruimen, vervangen door hex colors\n if (bgColor === 'p') bgColor = DefinedHexColors.Primary;\n else if (bgColor === 'i') bgColor = DefinedHexColors.Info;\n else if (bgColor === 'l') bgColor = DefinedHexColors.Link;\n else if (bgColor === 'd') bgColor = DefinedHexColors.Danger;\n else if (bgColor === 's') bgColor = DefinedHexColors.Success;\n else if (bgColor === 'w') bgColor = DefinedHexColors.Warning;\n bgColor += isHovered ? 'aa' : 'ff';\n\n const txtColor = pickTextColor(bgColor);\n\n const start = event.startDateTime as JSDateTime;\n let end = event.endDateTime as JSDateTime;\n if (!end.hasSame(start, 'day')) end = start.endOf('day');\n const diffInMS = end.valueOf() - start.valueOf();\n const minutesAsPixels = diffInMS / 1000 / 60;\n\n return {\n ...eventStylesBase,\n position: 'absolute',\n backgroundColor: bgColor,\n color: txtColor,\n margin: '0',\n marginX: '2px',\n marginTop: `${start.minute}px`,\n height: `${minutesAsPixels}px`,\n width: eventWidth,\n lineHeight: '1.05em',\n marginLeft: `${eventIndex * eventWidth}px`,\n cursor: onClick ? 'pointer' : 'default',\n } as CSSProperties;\n }, [event, isHovered, eventWidth, eventIndex]);\n\n return (\n <div\n ref={ref}\n onClick={(e) => onClick && onClick(event, e)}\n style={eventStyle}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n <span>{desc(event)}</span>\n </div>\n );\n}\n","import { BaseEventProps, CalendarOptions } from '../Props';\nimport React, { CSSProperties } from 'react';\nimport {\n gridContainerStylesBase,\n headerContainerStylesBase,\n todayStyleBase,\n weekNumberStylesBase,\n} from '../base-styles';\nimport { AlldayContainer } from './AlldayContainer';\nimport { HourNumber, HourSlot } from './HourRow';\nimport { calculateTxtColor, JSDateTime } from '~/utils';\n\ntype WeekEvents<T extends BaseEventProps> = {\n /** allday-items bij een date, in een array */\n allday: Array<[JSDateTime, T[]]>;\n /** events met begin- en eindtijd bij een date, in een array */\n timed: Array<[JSDateTime, T[]]>;\n};\ntype WeekViewProps<T extends BaseEventProps> = {\n /** events voor deze view */\n events: T[];\n /** opties voor deze view */\n options?: CalendarOptions<T>;\n /** event aangeklikt */\n onEventClick?: (e: T, event: React.MouseEvent<HTMLElement>) => void;\n /** dag-datum geklikt? */\n onDayClick?: (date: JSDateTime, event: React.MouseEvent<HTMLElement>) => void;\n /** huidige geselecteerde datum */\n viewDate: Date | JSDateTime;\n};\n\n/**\n * maak een week-view (grid) met events\n * @param props\n * @returns een weekview (grid) met de events\n * @ex\n */\nfunction WeekView<T extends BaseEventProps>(props: WeekViewProps<T>): JSX.Element {\n const { viewDate: vd, options, onEventClick, events: orgEvents, onDayClick } = props;\n const [visibleDays] = React.useState<Set<number>>(options?.visibleDays ?? new Set([1, 2, 3, 4, 5, 6, 7]));\n const [viewDate, setViewDate] = React.useState<JSDateTime>(\n vd instanceof Date ? JSDateTime.fromDate(vd, options?.locale) : vd.clone()\n );\n\n /**\n * converteer alle events naar een array van [Datum, Event[]]-tuples.\n * @param vd datum om de view rond op te bouwen\n */\n const eventConverterFn = React.useCallback((vd: JSDateTime): WeekEvents<T> => {\n const start = vd.startOf('week').startOf('day'); // start van de week\n const end = vd.endOf('week').plus({ days: 1 }).startOf('day'); // begin van de dag van de VOLGENDE week\n\n // filter eerste alle events weg die NIET in deze week vallen\n const events = orgEvents\n .map((e) => {\n e.allDay = e.allDay || !e.endDateTime;\n if (e.startDateTime instanceof Date) e.startDateTime = JSDateTime.fromDate(e.startDateTime, options?.locale);\n if (e.endDateTime && e.endDateTime instanceof Date)\n e.endDateTime = JSDateTime.fromDate(e.endDateTime, options?.locale);\n return e;\n })\n .filter((e) => (e.startDateTime as JSDateTime).isBetween([start, end]));\n\n let currDate = start.clone();\n const datesWithEvents: Array<[JSDateTime, T[]]> = [];\n\n while (currDate < end) {\n if (visibleDays.has(currDate.weekDay)) {\n const dayStart = currDate.startOf('day');\n const dayEnd = currDate.endOf('day');\n\n const dayEvents = events\n .filter((e) => (e.startDateTime as JSDateTime).isBetween([dayStart, dayEnd]))\n .sort((a, b) => {\n if (a.allDay && !b.allDay) return -1;\n if (!a.allDay && b.allDay) return 1;\n return a.startDateTime.valueOf() - b.startDateTime.valueOf();\n });\n\n datesWithEvents.push([currDate, dayEvents]);\n }\n currDate = currDate.plus({ days: 1 });\n }\n const allday = datesWithEvents.map(([date, events]): [JSDateTime, T[]] => {\n return [date, events.filter((e) => e.allDay)];\n });\n const timed = datesWithEvents.map(([date, events]): [JSDateTime, T[]] => {\n return [date, events.filter((e) => !e.allDay)];\n });\n\n return { allday, timed };\n }, []);\n\n /** zichtbare dagen in de view, Ma = 1, di = 2, etc */\n // const visibleDays =\n // options?.visibleDays && options?.visibleDays?.size !== 0 ? options?.visibleDays! : new Set([1, 2, 3, 4, 5, 6, 7]);\n\n const [datesWithEvents, setDatesWithEvents] = React.useState<WeekEvents<T>>(eventConverterFn(viewDate));\n\n React.useEffect(() => {\n const newVd = vd instanceof Date ? JSDateTime.fromDate(vd, options?.locale) : vd.clone();\n setViewDate(newVd);\n setDatesWithEvents(eventConverterFn(newVd));\n }, [vd, orgEvents, options?.visibleDays, options?.locale]);\n\n const gridContainerStyles = React.useMemo<CSSProperties>(\n () => ({\n ...gridContainerStylesBase,\n gridTemplateRows: `60px repeat(6, auto)`,\n gridTemplateColumns: `40px repeat(${visibleDays.size}, 1fr)`,\n }),\n [options?.visibleDays]\n );\n\n const hours = React.useMemo(() => Array.from(Array(24).keys()), []);\n\n return (\n <React.Fragment>\n <div className=\"lbr-grid-container\" style={gridContainerStyles}>\n <div></div>\n <Header<T> onDayClick={onDayClick} daysWithEvents={datesWithEvents.allday} options={options} />\n\n <div\n style={{ ...weekNumberStylesBase, paddingTop: '0', height: '60px', borderBottom: 'thin solid #e1e1e1' }}\n ></div>\n {datesWithEvents.allday.map(([date, events]) => {\n return (\n <AlldayContainer<T> key={date.dayShort} events={events} onEventClick={onEventClick} options={options} />\n );\n })}\n\n {hours.map((hour) => {\n return (\n <React.Fragment key={hour}>\n <HourNumber hour={hour} />\n {datesWithEvents.timed.map(([date, events]) => {\n const filteredEvts = events.filter((e) => (e.startDateTime as JSDateTime).hour === hour);\n return (\n <HourSlot\n key={date.dayShort + '-' + hour}\n events={filteredEvts}\n onEventClick={onEventClick}\n options={options}\n />\n );\n })}\n </React.Fragment>\n );\n })}\n </div>\n </React.Fragment>\n );\n}\n\ntype WeekViewHeaderProps<T extends BaseEventProps> = {\n /** callback voor dag geselecteerd */\n onDayClick?: (date: JSDateTime, event: React.MouseEvent<HTMLElement>) => void;\n /** datum met de bijhorende evnets */\n daysWithEvents: Array<[JSDateTime, T[]]>;\n /** de options bij de calendar */\n options?: CalendarOptions<T>;\n};\n\n/**\n * Maak de Header van de week-view\n * @param onDayClick: click-callback voor de header\n * @param {Array<[JSDateTime, T[]]>} daysWithEvents : array van [JSDateTime, T[]]-tuples (dag met bijhorende events)\n * @param {CalendarOptions} options: de options van de calendar\n * @returns\n */\nfunction Header<T extends BaseEventProps>({ onDayClick, daysWithEvents, options = {} }: WeekViewHeaderProps<T>) {\n /** style van de container */\n const headerStyle = React.useMemo<CSSProperties>(\n () => ({ ...headerContainerStylesBase, cursor: onDayClick ? 'pointer' : undefined }),\n [onDayClick]\n );\n\n /** style van de dag-namen */\n const dayNameStyles = React.useMemo<CSSProperties>(() => ({ ...headerStyle }), []);\n\n /** bereken de tekst kleur op basis van de achtergrond kleur */\n const pickTextColor = React.useCallback(calculateTxtColor, []);\n\n /** style van de today-header (wijkt af van normale header) */\n const todayStyle = React.useMemo<CSSProperties>(() => {\n if (options?.today?.doNotMarkToday) return {};\n\n let bgColor = 'p';\n if (options?.today?.bgColor) bgColor = options.today.bgColor(false);\n\n // ColorProps opruimen\n if (bgColor === 'p') bgColor = '#113670';\n else if (bgColor === 'i') bgColor = '#3b59ec';\n else if (bgColor === 'l') bgColor = '#2f47bc';\n else if (bgColor === 'd') bgColor = '#d91000';\n else if (bgColor === 's') bgColor = '#519c43';\n else if (bgColor === 'w') bgColor = '#eea720';\n\n const txtColor = pickTextColor(bgColor);\n\n return {\n ...todayStyleBase,\n marginBottom: '.5em',\n backgroundColor: bgColor,\n color: txtColor,\n };\n }, []);\n\n return (\n <React.Fragment>\n {daysWithEvents.map(([date]) => {\n return (\n <div style={dayNameStyles} key={date.dateShort} onClick={(e) => onDayClick && onDayClick(date, e)}>\n <div className=\"help my-1 mx-0\" style={{ color: '#aaaaaa' }}>\n {date.dayLong}\n </div>\n <span style={date.isToday ? todayStyle : undefined}>\n {date.day} {date.monthLong}\n </span>\n </div>\n );\n })}\n </React.Fragment>\n );\n}\n\nexport { WeekView };\nexport type { WeekViewProps };\n","import { MonthView, MonthViewProps } from \"./Month/MonthView\";\nimport { WeekView, WeekViewProps } from \"./Week/WeekView\";\n\nconst Calendar = {\n Month: MonthView,\n Week: WeekView,\n};\nexport { Calendar };\nexport type { WeekViewProps, MonthViewProps };\n","import React from 'react';\ntype InputErrorProps = {\n /** error gegenereerd door input-validation */\n stateError?: string;\n /** error van buitenaf opgegeven */\n outsideError?: string;\n /** is het field touched ? dan WEL een stateError opgeven */\n touched?: boolean;\n};\n\n/** Toon een erorr bij een input */\nconst InputError = (props: InputErrorProps) => {\n const { stateError, outsideError, touched } = props;\n\n if (outsideError) return <p className=\"help is-danger pl-3\">{outsideError}</p>;\n else if (touched && stateError) return <p className=\"help is-danger pl-3\">{stateError}</p>;\n else return null;\n};\n\nexport { InputError };\n","import { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { faCheck, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React from 'react';\n\ntype InputIconProps = {\n icons?: {\n start?: IconProp | string;\n end?: (v: boolean) => IconProp | string;\n };\n touched: boolean;\n valid: boolean;\n defaultIcon: IconProp | string;\n};\n\nfunction InputIcons({ icons, touched, valid, defaultIcon }: InputIconProps): JSX.Element {\n // bepaal het linker (start) icoon\n let iconLeft: React.ReactNode | undefined;\n if (typeof icons?.start === 'string') iconLeft = <i className={icons.start}></i>;\n else if (icons?.start) iconLeft = <FontAwesomeIcon icon={icons.start} />;\n else if (typeof defaultIcon === 'string') iconLeft = <i className={defaultIcon}></i>;\n else iconLeft = <FontAwesomeIcon icon={defaultIcon} />;\n\n // bepaal het rechter (end) icoon\n let iconRight: React.ReactNode | undefined;\n if (!icons?.end && !valid && touched) iconRight = <FontAwesomeIcon icon={faExclamationTriangle} />;\n else if (!icons?.end && valid && touched) iconRight = <FontAwesomeIcon icon={faCheck} />;\n else if (icons?.end) {\n const endIcon = icons.end(valid);\n if (typeof endIcon === 'string') iconRight = <i className={endIcon}></i>;\n else iconRight = <FontAwesomeIcon icon={endIcon} />;\n }\n\n // render de icons\n return (\n <React.Fragment>\n <span className=\"icon is-left\">{iconLeft}</span>\n <span className=\"icon is-right\">{iconRight}</span>\n </React.Fragment>\n );\n}\n\nexport { InputIcons };\n","import React from 'react';\nimport { DirectionProp, SizeProp } from '../../loon-react-bulma-types';\n\n/** een wrapper voor een input component, om te zorgen dat ze allemaal op dezelfde manier horizontaal of verticaal aligned worden. */\nexport const InputContainer = ({\n label,\n children: input,\n error,\n size,\n direction,\n}: {\n label?: { txt: string; id: string };\n children: React.ReactNode;\n error?: React.ReactNode;\n size?: SizeProp;\n direction: DirectionProp;\n}): JSX.Element => {\n return direction == 'horizontal' || direction == 'h' ? (\n <HorizontalInputContainer label={label} error={error} size={size ?? 'm'}>\n {input}\n </HorizontalInputContainer>\n ) : (\n <VerticalInputContainer label={label} error={error} size={size ?? 'm'}>\n {input}\n </VerticalInputContainer>\n );\n};\n\n/** een horizontale input met label */\nconst HorizontalInputContainer = ({\n label,\n children: input,\n error,\n size,\n}: {\n label?: { txt: string; id: string };\n children: React.ReactNode;\n error?: React.ReactNode;\n size?: SizeProp;\n}): JSX.Element => {\n let sizeClass = 'is-normal';\n if (size == 's') sizeClass += ' is-small';\n else if (size == 'l') sizeClass += ' is-medium';\n else if (size == 'xl') sizeClass += ' is-large';\n\n return (\n <div className=\"field is-horizontal\">\n <div className={`field-label ${sizeClass}`}>\n <label className={`label ${sizeClass}`} htmlFor={label?.id}>\n {label?.txt}\n </label>\n </div>\n <div className=\"field-body\">\n <div className=\"field\">\n {input}\n {error}\n </div>\n </div>\n </div>\n );\n};\n\n/** een verticale input met label */\nconst VerticalInputContainer = ({\n label,\n children: input,\n error,\n size,\n}: {\n label?: { txt: string; id: string };\n children: React.ReactNode;\n error: React.ReactNode;\n size?: SizeProp;\n}): JSX.Element => {\n let sizeClass = 'is-normal';\n if (size == 's') sizeClass += ' is-small';\n else if (size == 'l') sizeClass += ' is-medium';\n else if (size == 'xl') sizeClass += ' is-large';\n return (\n <div className={`field`}>\n <label className={`label ${sizeClass}`} htmlFor={label?.id}>\n {label?.txt}\n </label>\n {input}\n {error}\n </div>\n );\n};\n","import React from 'react';\nimport { CheckradioStylingType, ColorProp } from '~/loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\n\ntype CheckboxInputProps = Omit<BaseInputProps, 'icons'> & {\n /** kleur van de checkbox (default = 'l', link) */\n color?: ColorProp;\n /** speciale styling van de checkbox */\n styling?: CheckradioStylingType;\n /** de waarde */\n value?: boolean;\n /** Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param isValid is de waarde gevalideerd en geldig?\n */\n onValueChanged?(newVal: boolean, isValid?: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de checkbox */\n value: boolean;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: boolean };\ntype SetStateType = BaseSetStateType & { value: boolean };\n\n/**\n * De reducer van de CheckBox\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg == '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg == '',\n };\n }\n}\n\n/**\n * Maak een togglebare checkbox input\n * @param props\n * @returns een checkbox\n * @example <Checkbox value={true} {...props}/>\n * @description alle props voor Checkbox component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | validation | `FormValidationType` | `{} ` | de validatie voor de input |\n * | textAlign | `l`, `c`, `r` | `l` | de text-uitlijning van de input |\n * | keyboardType | `search`, `text`, | `text` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | value | `boolean` | `false` | de waarde |\n * | color | `l`,`p`,`s` | `l` | de kleur van de checkbox |\n * | | `d`,`w`,`i` | | |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | styling | `rounded`,`noborder` | | de styling van de checkbox |\n * | | `colored`, `blocky` | | |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | onValueChanged() | `function` | | (value: boolean, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction CheckBox(props: CheckboxInputProps) {\n const labelTxt = props.label || props.name;\n\n const [state, dispatch] = React.useReducer<React.Reducer<State, ChangeStateType | SetStateType>>(reducer, {\n description: props.name,\n value: props.value ?? false,\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n const handleClick = () => {\n if (!props.disabled) {\n const newVal = !state.value;\n const invalidMsg = validate(newVal, state.description, state.validation);\n\n props.onValueChanged && props.onValueChanged(!state.value, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: newVal, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? false, validation: props.validation });\n }, [props.value, props.validation]);\n\n // stel de className samen\n let className = 'is-checkradio';\n const { size, color, styling, textAlign } = props;\n if (size === 's') className += ' is-small';\n else if (size === 'l') className += ' is-medium';\n else if (size === 'xl') className += ' is-large';\n\n if (color === 'w') className += ' is-warning';\n else if (color === 'd') className += ' is-danger';\n else if (color === 'i') className += ' is-info';\n else if (color === 's') className += ' is-success';\n else if (color === 'p') className += ' is-primary';\n else className += ' is-link';\n\n if (styling === 'rounded') className += ' is-circle';\n else if (styling === 'noborder') className += ' has-no-border';\n else if (styling === 'colored') className += ' has-background-color';\n else if (styling === 'blocky') className += ' is-blocky';\n\n if (textAlign === 'c') className += ' has-text-centered';\n else if (textAlign === 'r') className += ' has-text-right';\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n const error = <InputError stateError={state.invalidMsg} outsideError={errorMsg} touched={state.touched} />;\n\n return (\n <InputContainer size=\"m\" error={error} direction={props.direction ?? 'h'}>\n <div className=\"control\" title={props.tooltip}>\n <div className=\"field\">\n <input\n className={className}\n type=\"checkbox\"\n name={props.name}\n id={props.id ?? props.name}\n required={state.validation?.required}\n checked={state.value}\n disabled={props.disabled}\n onChange={() => handleClick()}\n onKeyDown={props.onKeyDown}\n />\n <label htmlFor={props.id ?? props.name}>{labelTxt}</label>\n </div>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Voer validatie van de waarde uit\n * @param value de nieuwe waarde\n * @param desc de naam van de input\n * @param validationObject het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: boolean, desc: string, validationObject?: FormValidationType): string {\n if (!validationObject) return '';\n else if (validationObject.required && !value) return `${desc} is verplicht`;\n else if (validationObject.onValidate) return validationObject.onValidate(value);\n return '';\n}\n\nexport { CheckBox };\nexport type { CheckboxInputProps };\n","import { faCalendar } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype DateInputProps = BaseInputProps & {\n /** start value voor deze input (optioneel) FORMAT: YYYY-MM-DD */\n value?: string | Date;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, valid: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de DateInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg == '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg == '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Input voor het opgeven van een datum\n * @param props\n * @returns input met als value een datum\n * @example\n * <DateInput value=\"2020-01-01\" {...props}/>\n * <DateInput value={new Date()} {...props}/>\n * @description alle props voor Date component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-uitlijning van de input |\n * | keyboardType | `search`, `text`, | `text` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string`, `Date` | `now()` | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void ` */\nfunction DateInput(props: DateInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: typeof props.value == 'string' ? props.value : props.value?.toISOString().substring(0, 10) ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // classes van de input\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const handleChange = (val: string, date: Date): void => {\n if (!props.disabled || (!date && props.validation?.required)) {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({\n type: 'SET',\n value: typeof props.value === 'string' ? props.value : props.value?.toISOString().substring(0, 10) ?? '',\n validation: props.validation,\n });\n }, [props.value, props.validation]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n required={state.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value, e.target.valueAsDate)}\n type=\"date\"\n inputMode={props.keyboardType ?? 'text'}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faCalendar} />\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validatie?: FormValidationType): string {\n const newDateValue = new Date(value);\n if (validatie?.required && !value) return `${desc} is verplicht`;\n else if (validatie?.min && new Date(validatie.min) > newDateValue) return `${desc} moet na ${validatie.min} liggen`;\n else if (validatie?.max && new Date(validatie.max) < newDateValue) return `${desc} moet voor ${validatie.max} liggen`;\n else if (validatie?.onValidate) return validatie.onValidate(value);\n return '';\n}\n\nexport { DateInput };\nexport type { DateInputProps };\n","import { faCalendarDay } from '@fortawesome/free-solid-svg-icons';\nimport {} from '@fortawesome/react-fontawesome';\nimport React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype DateTimeInputProps = BaseInputProps & {\n /** start value voor deze input (optioneel) FORMAT: YYYY-MM-DDTHH:mm */\n value?: string | Date;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, valid: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de DateTimeInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg == '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg == '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/** Input voor het opgeven van een datum-tijd combinatie\n * @param props\n * @returns Een input voor een Datum en Tijd combinatie\n * @example\n * <DateTimeInput value=\"2020-01-01T00:00\" {...props}/>\n * <DateTimeInput value={new Date()} {...props}/>\n * @description alle props voor DateTime component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-uitlijning van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string`, `Date` | `now()` | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction DateTimeInput(props: DateTimeInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label || props.name,\n value: typeof props.value === 'string' ? props.value : props.value?.toISOString().substring(0, 16) ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // classes vand e input\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({\n type: 'SET',\n value: typeof props.value === 'string' ? props.value : props.value?.toISOString().substring(0, 16) ?? '',\n validation: props.validation,\n });\n }, [props.value, props.validation]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n required={state.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n type=\"datetime-local\"\n pattern=\"[0-9]{4}-[0-9]{2}-[0-9]{2}T?[0-9]{2}:[0-9]{2}\"\n inputMode={props.keyboardType ?? 'text'}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faCalendarDay} />\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string | Date, desc: string, validation?: FormValidationType): string {\n const date = new Date(value);\n // const pattern = /[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}Z/;\n const minDate = validation?.min ? new Date(validation.min as string) : null;\n const maxDate = validation?.max ? new Date(validation.max as string) : null;\n\n if (!validation) return '';\n else if (validation.required && !value) return `${desc} is verplicht`;\n // else if (typeof value == 'string' && pattern.test(value)) return `${desc} bevat een ongeldige waarde`;\n else if (minDate && minDate > date) return `${desc} moet later zijn dan ${validation.min}`;\n else if (maxDate && maxDate < date) return `${desc} moet later zijn dan ${validation.max}`;\n else if (validation.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { DateTimeInput };\nexport type { DateTimeInputProps };\n","import { faClock } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype TimeInputProps = BaseInputProps & {\n /** start value voor deze input (optioneel) FORMAT: HH:mm:SS */\n value?: string | Date;\n /** grootte van een stap verzetten. het aantal secondes om de klok te verzetten, default = 60 (1 minuut) */\n step?: number;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, valid: boolean): void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de TimeInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg == '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg == '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n/**\n * Input om een tijd op te geven (HH:mm OF HH:mm:SS) met optionele validatie\n * @param props\n * @returns\n * @example\n * <TimeInput value=\"12:30\" {...props}>\n * <TimeInput value={new Date()} {...props}>\n * * @description alle props voor Time component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-uitlijning van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{} ` | de validatie voor de input |\n * | value | `string`, `Date` | `now()` | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction TimeInput(props: TimeInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: typeof props.value == 'string' ? props.value : props.value?.toISOString().substring(11, 16) ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // classes van de input\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const invalidMsg = validate(val, state.description, props.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n React.useEffect(\n () =>\n dispatch({\n type: 'SET',\n value: typeof props.value === 'string' ? props.value : props.value?.toISOString().substring(11, 16) ?? '',\n validation: props.validation,\n }),\n [props.value, props.validation]\n );\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n required={state.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n type=\"time\"\n inputMode={props.keyboardType ?? 'numeric'}\n step={props.step}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faClock} />\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validation?: FormValidationType): string {\n const date = Date.parse('01/01/1970 ' + value);\n if (!validation) return '';\n else if (validation?.required && !value) return `${desc} is verplicht`;\n else if (validation?.max && Date.parse('01/01/1970 ' + validation.max) < date)\n return `${desc} moet eerder dan ${validation.max} zijn.`;\n else if (validation?.min && Date.parse('01/01/1970 ' + validation.min) > date)\n return `${desc} moet later dan ${validation.min} zijn.`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { TimeInput };\nexport type { TimeInputProps };\n","import React, { CSSProperties, Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\n\ntype MultiRangeInputProps = Omit<BaseInputProps, 'icons'> & {\n /** stap-grootte voor de input (optioneel, default = 1) */\n step?: number;\n /** de start-waarde voor de input (optioneel) */\n value?: [number, number];\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: [number, number], valid: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van het 1e nummer */\n valueA: number;\n /** de waarde van het 2e nummer */\n valueB: number;\n};\n\ntype ChangeStateType = BaseChangeStateType & { valueA: number; valueB: number };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { valueA: number; valueB: number };\n\n/**\n * De reducer van de MultiRangeInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nconst reducer = (state: State, action: ChangeStateType | SetStateType | TouchStateType) => {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.valueA, action.valueB, state.description, action.validation);\n return {\n ...state,\n valueA: action.valueA,\n valueB: action.valueB,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n valueA: action.valueA,\n valueB: action.valueB,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n};\n\n/**\n * Gebruik een input met een range-selector; <input type=\"range\" ... />\n * De min- en max-waarden zijn instelbaar via props.validatie. Default zijn dit (0 en 100)\n * @param props\n * @returns een range input met als value een array van twee waarden\n * @example <MultiRangeInput value={[valueA, valueB]} validation={{min: 10, max: 110}} {...props}/>\n * @description alle props voor MultiRange component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | step | `number ` | `1 ` | stapgrootte voor verschuiving |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `[number, number]` |`[0, 100]`| de waarde als number-tuple |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: [number, number], valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction MultiRangeInput(props: MultiRangeInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label || props.name,\n valueA: props.value ? props.value[0] : +(props.validation?.min ?? 0),\n valueB: props.value ? props.value[1] : +(props.validation?.max ?? 100),\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n const sliderStyle = React.useMemo(\n () =>\n ({\n width: '100%',\n marginTop: '1em',\n '--min': state.validation?.min ?? 0,\n '--max': state.validation?.max ?? 100,\n '--value-a': state.valueA,\n '--value-b': state.valueB,\n '--text-value-a': `${state.valueA}`,\n '--text-value-b': `${state.valueB}`,\n } as CSSProperties),\n [state.valueA, state.valueB, state.validation?.min, state.validation?.max, props.value]\n );\n\n const onChangeValue = (input: 'A' | 'B', newVal: string) => {\n if (!props.disabled) {\n const val = parseFloat(newVal);\n const a = input === 'A' ? val : state.valueA;\n const b = input === 'B' ? val : state.valueB;\n const invalidMsg = validate(a, b, state.description, state.validation);\n props.onValueChanged && props.onValueChanged([a, b], invalidMsg === '');\n dispatch({ type: 'CHANGE', valueA: a, valueB: b, invalidMsg });\n }\n };\n\n /** als de props value opnieuw gezet wordt */\n React.useEffect(() => {\n const [valueA, valueB] = props.value ?? [+(props.validation?.min ?? 0), +(props.validation?.max ?? 100)];\n dispatch({\n type: 'SET',\n valueA,\n valueB,\n validation: props.validation,\n });\n }, [props.value, props.validation]);\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg =\n typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage([state.valueA, state.valueB]);\n\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size=\"m\" error={error} direction={props.direction ?? 'h'}>\n <div className=\"field\" title={props.tooltip}>\n <div className=\"control\">\n <div className=\"range-slider flat\" style={sliderStyle}>\n <input\n type=\"hidden\"\n name={props.name}\n value={JSON.stringify([state.valueA, state.valueB])}\n id={props.id ?? props.name}\n />\n <input\n type=\"range\"\n name={props.name + '_A'}\n id={props.id + '_A'}\n min={state.validation?.min ?? 0}\n max={state.validation?.max ?? 100}\n value={state.valueA}\n step={props.step}\n required={state.validation?.required}\n disabled={props.disabled}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => onChangeValue('A', e.target.value)}\n />\n <output id={props.id + '_out_A'}>{state.valueA}</output>\n <input\n type=\"range\"\n name={props.name + '_B'}\n id={props.id + '_B'}\n min={state.validation?.min ?? 0}\n max={state.validation?.max ?? 100}\n value={state.valueB}\n step={props.step}\n required={state.validation?.required}\n disabled={props.disabled}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => onChangeValue('B', e.target.value)}\n />\n <output id={props.id + '_out_B'}>{state.valueB}</output>\n <div className=\"range-slider__progress\"></div>\n </div>\n </div>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer de waarden van de input (A & B)\n * @param a de waarde voor A\n * @param b de waarde voor B\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(a: number, b: number, desc: string, validation?: FormValidationType): string {\n // a & b valid, nu de rest\n const diff = Math.abs(a - b);\n if (validation?.minDiff && validation.minDiff >= diff)\n return `Het verschil in ${desc} tussen de 2 waarden moet minstens ${validation.minDiff} zijn`;\n else if (validation?.maxDiff && validation.maxDiff <= diff)\n return `Het verschil in ${desc} tussen de 2 waarden moet maximaal ${validation.maxDiff} zijn`;\n else if (validation?.onValidate) return validation.onValidate([a, b]);\n else return '';\n}\n\nexport { MultiRangeInput };\nexport type { MultiRangeInputProps };\n","import { faCalculator } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype NumberInputProps = BaseInputProps & {\n /** stap-grootte voor de input (optioneel, default = 1) */\n step?: number;\n /** de start-waarde voor de input (optioneel) */\n value?: number;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: number, valid: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: number;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: number };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: number };\n\n/**\n * De reducer van de NumberInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een input van type number met optionele validation.\n * @see RangeInput voor een input van type range die ook numbers oplevert.\n * @param props\n * @returns input with numeric values\n * @example <NumberInput value={10} onValueChanged={handleChange} {...props} />\n * @description alle props voor Number component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | step | `number ` | `1` | stapgrootte voor de input (+ & - aansturen)|\n * | tooltip | `string ` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `number` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: number, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction NumberInput(props: NumberInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label || props.name,\n value: props.value ?? 0,\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // stel de classname samen\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const handleChange = (val: number): void => {\n if (props.disabled) return;\n\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg === '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? 0, validation: props.validation });\n }, [props.value, props.validation]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n type=\"number\"\n inputMode={props.keyboardType ?? 'numeric'}\n name={props.name}\n value={isNaN(state.value) ? '' : state.value}\n max={props.validation?.max}\n min={props.validation?.min}\n step={props.step}\n required={props.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.valueAsNumber)}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faCalculator} />\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: number, desc: string, validation?: FormValidationType): string {\n if (validation?.required && !value && value != 0) return `${desc} is verplicht`;\n else if (isNaN(value)) return `${desc} bevat geen geldige waarde.`;\n else if (validation?.min && value < +validation.min)\n return `${desc} moet groter of gelijk zijn aan ${validation.min}`;\n else if (validation?.max && value > +validation.max)\n return `${desc} moet kleiner of gelijk zijn aan ${validation.max}`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { NumberInput };\nexport type { NumberInputProps };\n","import React, { CSSProperties, Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\ntype RangeInputProps = Omit<BaseInputProps, 'icons'> & {\n /** stap-grootte voor de input (optioneel, default = 1) */\n step?: number;\n /** de start-waarde voor de input (optioneel) */\n value?: number;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: number, valid: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: number;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: number };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: number };\n\n/**\n * De reducer van de RangeInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Gebruik een input met een range-selector; <input type=\"range\" ... />\n * De min- en max-waarden zijn instelbaar via props.validatie. Default zijn dit (0 en 100)\n * @see NumberInput om een nimerieke waarde in te typen\n * @param props\n * @returns een input om een range te selecteren\n * @example <RangeInput value={value} validation={{min: 10, max: 110}} {...props}/>\n * @description alle props voor Range component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | step | `number ` | `1 ` | stapgrootte voor verschuiving |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `number ` | | de waarde |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction RangeInput(props: RangeInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: props.value ?? 0,\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n const sliderStyle = React.useMemo(\n () =>\n ({\n width: '100%',\n marginTop: '1em',\n '--min': state.validation?.min ?? 0,\n '--max': state.validation?.max ?? 100,\n '--value': state.value || 0,\n '--text-value': `${state.value}`,\n } as CSSProperties),\n [state.value, state.validation]\n );\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const v = parseFloat(val);\n const invalidMsg = validate(v, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(v, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: v, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? 0, validation: props.validation });\n }, [props.value, props.validation]);\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size=\"m\" label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"field\" title={props.tooltip}>\n <div className=\"control\">\n <div className=\"range-slider\" style={sliderStyle}>\n <input\n type=\"range\"\n name={props.name}\n id={props.id ?? props.name}\n min={state.validation?.min ?? 0}\n max={state.validation?.max ?? 100}\n value={state.value}\n step={props.step}\n disabled={props.disabled}\n required={state.validation?.required}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n onKeyDown={props.onKeyDown}\n />\n <output>{state.value}</output>\n <div className=\"range-slider__progress\"></div>\n </div>\n </div>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: number, desc: string, validation?: FormValidationType): string {\n if (validation?.onValidate) return validation.onValidate(value);\n return desc != '' ? '' : ''; // desc == '' ? '' : '';\n}\n\nexport { RangeInput };\nexport type { RangeInputProps };\n","import { faPalette } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype ColorInputProps = BaseInputProps & {\n /** start value voor deze input (optioneel) */\n value?: string;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, isValid?: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de ColorInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg == '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg == '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een input voor hexadecimale kleuren.\n * altijd: #000000 t/m #ffffff\n * @param props\n * @returns input om een color te selecteren\n * @example <ColorInput value=\"#FF8000\" {...props}/>\n * @description alle props voor Color component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` |`#000000`| de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction ColorInput(props: ColorInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label || props.name,\n value: props.value ?? '#000000',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n let inputClasses = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n let outputClasses = 'button is-static';\n if (props.size === 's') {\n inputClasses += ' is-small';\n outputClasses += ' is-small';\n } else if (props.size === 'l') {\n inputClasses += ' is-medium';\n outputClasses += ' is-medium';\n } else if (props.size === 'xl') {\n inputClasses += ' is-large';\n outputClasses += ' is-large';\n }\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg === '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '#000000', validation: props.validation });\n }, [props.value, props.validation]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"field has-addons\" title={props.tooltip}>\n <div className=\"control is-expanded has-icons-right has-icons-left\" style={{ width: '15em' }}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n required={props.validation?.required}\n className={inputClasses}\n inputMode={props.keyboardType || 'text'}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n type=\"color\"\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faPalette} />\n </div>\n <div className=\"control\">\n <output className={outputClasses}>{state.value}</output>\n </div>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Voer validatie uit op een hexadecimale kleur\n * @param value een hex-color (#ff80000)\n * @param desc de field-omschrijving\n * @param validatieObj het object om mee te valideren\n * @returns een fout-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validatieObj?: FormValidationType): string {\n if (!validatieObj || !desc) return '';\n else if (validatieObj?.onValidate) return validatieObj.onValidate(value);\n return '';\n}\n\nexport { ColorInput };\nexport type { ColorInputProps };\n","import React from 'react';\n\ntype HiddenInputProps = {\n /** start value voor deze input (optioneel) */\n value?: string;\n /** name input: gebruikt voor een <label> als er geen label gedefinieerd is & de name-attribuut <input> */\n name: string;\n /** id voor de input: gebruikt voor een <label for=\"*id*}\"> */\n id: string;\n /** moet dit verborgen field worden ingevoerd */\n required?: boolean;\n /** (optionele) tooltip voor een hidden input ??? vooral voor test-doeleinden */\n tooltip?: string;\n};\n\n/**\n * Maak een input die verborgen is maar wel een waarde moet hebben.\n * @param props\n * @returns een hidden input\n * @example <HiddenInput value={value} {...props} />\n * @description alle props voor Hidden component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | id | `string ` | `name` | de id voor de input | |\n * | value | `string ` | '' | de waarde |\n * | required | `boolean` | | |\n */\nfunction HiddenInput(props: HiddenInputProps): JSX.Element {\n const [value, setValue] = React.useState(props.value ?? '');\n React.useEffect(() => setValue(props.value ?? ''), [props.value]);\n\n return (\n <input\n data-testid=\"hidden-input\"\n id={props.id ?? props.name}\n name={props.name}\n value={value}\n title={props.tooltip}\n required={props.required}\n type=\"hidden\"\n disabled={true}\n />\n );\n}\n\nexport { HiddenInput };\nexport type { HiddenInputProps };\n","import React from 'react';\n\nexport type SelectOptionType = {\n /** de waarde van een option */\n value: number | string;\n /** is deze select option disabled */\n disabled?: boolean;\n /** de naam van een option (optioneel, bij undefined wordt de waarde gebruikt) */\n label?: string;\n};\n\nexport type SelectOptionGroupType = {\n /** de naam van de <optgroup> */\n label: string;\n /** De options */\n selectOptions: SelectOptionType[];\n};\n\n/**\n * Maak een <optgroup>...</optgroup> of <option>...</option> array voor een <select> of een multiselect\n * @param options de options\n * @returns JSX-elementen-array\n */\nexport function createSelectOptions(options: string[] | SelectOptionType[] | SelectOptionGroupType[]): JSX.Element[] {\n if (options.length == 0) return [];\n else if (typeof options[0] == 'string') {\n const opts = options as string[];\n return opts.map((o) => (\n <option key={o} value={o}>\n {o}\n </option>\n ));\n } else if ('value' in options[0]) {\n const opts = options as SelectOptionType[];\n return opts.map((o) => (\n <option key={o.value} value={o.value} disabled={o.disabled}>\n {o.label || o.value}\n </option>\n ));\n } else {\n const ogs = options as SelectOptionGroupType[];\n return ogs.map((o) => (\n <optgroup key={o.label} label={o.label}>\n {o.selectOptions.map((opt) => {\n return (\n <option key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label || opt.value}\n </option>\n );\n })}\n </optgroup>\n ));\n }\n}\n","import React from 'react';\nimport {\n BaseChangeStateType,\n BaseFocusStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputError,\n} from '../shared';\nimport { SelectOptionType, SelectOptionGroupType, createSelectOptions } from './BaseSelectProps';\n\ntype MultiSelectInputProps = Omit<BaseInputProps, 'icons'> & {\n /** de waarde */\n value?: string[];\n /** de values voor de options. DEZE MOETEN UNIEK ZIJN! */\n options: string[] | SelectOptionType[] | SelectOptionGroupType[];\n /** aantal zichtbare rijen zonder scrollen */\n rows?: number;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string[], valid: boolean): void;\n};\n\ntype State = BaseState & {\n /** de waarde van de multiselect */\n value: string[];\n /** is de MultiSelect focused */\n focused: boolean;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string[] };\ntype TouchStateType = BaseTouchStateType;\ntype FocusStateType = BaseFocusStateType;\ntype SetStateType = BaseSetStateType & { value: string[] };\n\n/**\n * De reducer van de MultiSelect\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType | FocusStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n focused: false,\n };\n case 'FOCUS':\n return {\n ...state,\n focused: action.focus,\n };\n }\n}\n\n/**\n * Maak een select waarin meerdere opties geselecteerd kunnen worden.\n * Wordt weergegeven als een lijstje waarin met ctrl-click, shift-click of cmd-click 2 of meer waarden geselecteerd kunnen worden.\n * - lijstje van strings\n * - lijstje van {value: string, label: string, disabled: boolean}\n * - lijstje van {value: string, label: string, disabled: boolean} per group (<optgroup>)\n * @see Select voor een select waarin maar 1 waarde geselecteerd kan worden.\n * @param props\n * @returns Een MultiSelect waarvan de value ALTIJD een string[] is. Ook als er 1 optie geselecteerd is.\n * @example <MultiSelect value={['a', 'b']} options={['a', 'b', 'c']} {...props}/>\n * @description alle props voor MultiSelect component\n * | prop | type | default | description |\n * |-------------------|---------------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | rows | `number` | `6` | zichtbare rijen in de select |\n * | id | `string` | `name` | de id voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string[]` | `[]` | de waarde |\n * | options | `string[]` | `[]` | de opties |\n * | | `SelectOptionType[]` | | |\n * | | `SelectOptionGroupType[]` | | |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string[], valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction MultiSelect(props: MultiSelectInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<\n React.Reducer<State, ChangeStateType | TouchStateType | SetStateType | FocusStateType>\n >(reducer, {\n description: props.label ?? props.name,\n value: props.value ?? [],\n invalidMsg: '',\n valid: false,\n focused: false,\n touched: false,\n validation: props.validation,\n });\n const labelTxt = props.label ?? props.name;\n const visibleRows = props.rows ?? 6;\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // stel de classname samen\n let className =\n (!state.valid && state.touched) || errorMsg\n ? 'select is-danger is-fullwidth is-multiple'\n : 'select is-fullwidth is-multiple';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? [], validation: props.validation });\n }, [props.value, props.validation]);\n\n const options: JSX.Element[] = createSelectOptions(props.options);\n\n const handleSelectChange = (collection: HTMLCollection) => {\n if (!props.disabled) {\n const values: string[] = [];\n for (let i = 0; i < collection.length; i++) values.push((collection[i] as HTMLOptionElement).value);\n const invalidMsg = validate(values, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(values, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: values, invalidMsg });\n }\n };\n\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <React.Fragment>\n <div className=\"field\" title={props.tooltip}>\n <label className=\"label\" htmlFor={props.id ?? props.name}>\n {labelTxt}\n </label>\n <div className=\"control\">\n <div className={className}>\n <select\n multiple\n required={state.validation?.required}\n id={props.id ?? props.name}\n size={visibleRows}\n disabled={props.disabled}\n onFocus={() => dispatch({ type: 'FOCUS', focus: true })}\n onChange={(e) => handleSelectChange(e.target.selectedOptions)}\n onBlur={() => {\n !state.touched && dispatch({ type: 'TOUCH', touched: true });\n dispatch({ type: 'FOCUS', focus: false });\n }}\n defaultValue={state.value}\n >\n {props.placeholder && (\n <option disabled value=\"\">\n {props.placeholder}\n </option>\n )}\n {options}\n </select>\n </div>\n </div>\n {error}\n </div>\n </React.Fragment>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string[], desc: string, validation?: FormValidationType): string {\n if (validation?.required && (!value || value.length == 0)) return `${desc} is verplicht`;\n else if (validation?.min && value.length < validation.min)\n return `${desc} moet minimaal uit ${validation.min} geselecteerde opties betaan`;\n else if (validation?.max && value.length > validation.max)\n return `${desc} mag maximaal uit ${validation.min} geselecteerde opties bestaan`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { MultiSelect };\nexport type { MultiSelectInputProps };\n","import React, { Reducer } from 'react';\nimport { SizeProp } from '~/loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\nimport { SelectOptionType, SelectOptionGroupType, createSelectOptions } from './BaseSelectProps';\n\ntype SelectInputProps = Omit<BaseInputProps, 'icons'> & {\n /** de waarde */\n value?: number | string;\n /** de values voor de options. DEZE MOETEN UNIEK ZIJN! */\n options: string[] | SelectOptionType[] | SelectOptionGroupType[];\n /** grootte input (optioneel) */\n size?: SizeProp;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string | number, valid: boolean): void;\n};\n\ntype State = BaseState & {\n /** de waarde van de select */\n value: string | number;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string | number };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string | number };\n\n/**\n * De reducer van de Select\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Een select-input om een waarde te selecteren uit een lijstje\n * - lijstje van strings\n * - lijstje van {value: string, label: string, disabled: boolean}\n * - lijstje van {value: string, label: string, disabled: boolean} per group (<optgroup>)\n * @see MultiSelect voor een select waar meerdere waarden mogelijk zijn.\n * @param props\n * @returns een Select component\n * @example <Select {...props}/>\n * @description alle props voor Number component\n * | prop | type | default | description |\n * |-------------------|---------------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | rows | `number` | `6` | zichtbare rijen in de select |\n * | id | `string` | `name` | de id voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | | de waarde |\n * | options | `string[]` | `[]` | de opties |\n * | | `SelectOptionType[]` | | |\n * | | `SelectOptionGroupType[]` | | |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction Select(props: SelectInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: props.value ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // stel de className samen\n let className = (!state.valid && state.touched) || errorMsg ? 'select is-danger is-fullwidth' : 'select is-fullwidth';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg == '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '', validation: props.validation });\n }, [props.value, props.validation]);\n\n const options = createSelectOptions(props.options);\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control\">\n <div className={className}>\n <select\n onChange={(e) => handleChange(e.target.value)}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n disabled={props.disabled}\n required={state.validation?.required}\n value={state.value}\n id={props.id ?? props.name}\n >\n {props.placeholder && (\n <option disabled value={props.placeholder}>\n {props.placeholder}\n </option>\n )}\n {options}\n </select>\n </div>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string | number, desc: string, validation?: FormValidationType): string {\n if (validation?.required && !value) return `${desc} is verplicht`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { Select };\nexport type { SelectInputProps };\n","import { faAt } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport { AutoCompleteType } from '~/loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype EmailInputProps = BaseInputProps & {\n /** start value voor deze input (optioneel) */\n value?: string;\n /** speciaal voor password-managers. Wat is de functie van deze input */\n autocomplete?: AutoCompleteType;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param isValid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, isValid?: boolean): any | void;\n};\n\n/** standaard email regex */\nconst emailRgx = /[^@ \\t\\r\\n]+@[^@ \\t\\r\\n]+\\.[^@ \\t\\r\\n]+/;\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de EmailInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een input van een tekst-type met optionele validation.\n * een ingevoerd e-mailadres wordt al automatisch gevalideert met een regex.\n * Onder validatie kan zo nodig een ander pattern worden opgegeven.\n * @param props\n * @returns een input met als type e-mail\n * @example <EmailInput value=\" {...props} />\n * @description alle props voor Email component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | autoComplete | `AutoCompleteType` | `email` | de autocomplete type (password managers) |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n *\n */\nfunction EmailInput(props: EmailInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.name,\n value: props.value ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // classname samenstellen\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg === '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '', validation: props.validation });\n }, [props.value, props.validation]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n autoComplete={props.autocomplete}\n required={props.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n type=\"email\"\n inputMode={props.keyboardType ?? 'email'}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faAt} />\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validation?: FormValidationType): string {\n const rgx = validation?.pattern ? new RegExp(validation?.pattern) : emailRgx;\n if (!validation && !rgx.test(value)) return `${desc} bevat geen geldig e-mailadres`;\n else if (validation?.min && value.length < validation.min)\n return `${desc} moet uit minstens ${validation.min} karakters bestaan`;\n else if (validation?.max && value.length > validation.max)\n return `${desc} moet uit maximaal ${validation.max} karakters bestaan`;\n else if (validation?.required && !value) return `${desc} is verplicht`;\n else if (validation && !rgx.test(value)) return `${desc} bevat geen geldig e-mailadres`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { EmailInput };\nexport type { EmailInputProps };\n","import { faEye, faEyeSlash, faLock } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { Reducer } from 'react';\nimport { AutoCompleteType } from '~/loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype PasswordInputProps = BaseInputProps & {\n /** start value voor deze input (optioneel) */\n value?: string;\n /** speciaal voor password-managers. Wat is de functie van deze input */\n autocomplete?: AutoCompleteType;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, isValid?: boolean): any | void;\n revealPasswordTooltip?: string;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de PasswordInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een input van een tekst-type met optionele validation.\n * Het wachtwoord wordt door **** verborgen.\n * @param props\n * @returns een input met type password\n * @example <PasswordInput {...props}/>\n * @description alle props voor Password component\n * | prop | type | default | description |\n * |-----------------------|----------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | autoComplete | `AutoCompleteType` | | de autocomplete type (password managers) |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | revealPasswordTooltip | `string` | | tooltip voor show-password-button |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction PasswordInput(props: PasswordInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: props.value ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // stel de classes voor de input en de button samen\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n let bttnClassName = 'button is-light';\n if (state.valid) bttnClassName += ' is-info';\n else if (!state.valid) bttnClassName += ' is-danger';\n\n if (props.size === 's') {\n className += ' is-small';\n bttnClassName += ' is-small';\n } else if (props.size === 'l') {\n className += ' is-medium';\n bttnClassName += ' is-medium';\n } else if (props.size === 'xl') {\n className += ' is-large';\n bttnClassName += ' is-large';\n }\n\n const handleChange = (val: string): void => {\n if (!props.disabled) {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg === '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n }\n };\n\n const handlePasswordReadability = () => {\n if (passwordReadable === 'text') setPaswordReadable('password');\n else setPaswordReadable('text');\n };\n const [passwordReadable, setPaswordReadable] = React.useState<'password' | 'text'>('password');\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '', validation: props.validation });\n }, [props.value]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"field has-addons\" title={props.tooltip}>\n <div className=\"control has-icons-left has-icons-right is-expanded\">\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n inputMode={props.keyboardType ?? 'text'}\n autoComplete={props.autocomplete}\n required={props.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: false })}\n onChange={(e: any) => handleChange(e.target.value)}\n type={passwordReadable}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faLock} />\n </div>\n <div className=\"control\">\n <button\n title={props.revealPasswordTooltip ?? 'show password'}\n type=\"button\"\n className={bttnClassName}\n onClick={handlePasswordReadability}\n >\n {passwordReadable === 'text' && <FontAwesomeIcon icon={faEyeSlash} />}\n {passwordReadable === 'password' && <FontAwesomeIcon icon={faEye} />}\n </button>\n </div>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param type het type van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validation?: FormValidationType): string {\n const rgx = validation?.pattern ? new RegExp(validation?.pattern) : null;\n if (validation?.required && !value) return `${desc} is verplicht`;\n else if (validation?.min && value.length < validation.min)\n return `${desc} moet uit minstens ${validation.min} karakters bestaan`;\n else if (validation?.max && value.length > validation.max)\n return `${desc} moet uit maximaal ${validation.max} karakters bestaan`;\n else if (validation?.pattern && !rgx?.test(value)) return `${desc} voldoet niet aan het verwachte patroon`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { PasswordInput };\nexport type { PasswordInputProps };\n","import React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\n\ntype TextAreaProps = Omit<BaseInputProps, 'icons'> & {\n /** value van een texarea kan via de children of de value-prop */\n value?: string;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param valid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, valid: boolean): any | void;\n /** eigen onKeyDown voor TextAreas */\n onKeyDown?(e: React.KeyboardEvent<HTMLTextAreaElement>): void;\n};\n\ntype State = BaseState & {\n /** de waarde van de textarea */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de TextArea\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een textarea met optionele validation.\n * @param props\n * @returns een textarea\n * @example <TextArea {...props}/>\n * @description alle props voor TextArea component\n * | prop | type | default | description |\n * |-------------------|---------------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | type | `InputTypeProp` | | type voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | autocomplete | `AutoCompleteType` | | autocomplete voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction TextArea(props: TextAreaProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: props.value ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n // stel de className samen\n\n let className = (!state.valid && state.touched) || errorMsg ? 'textarea is-danger' : 'textarea';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '', validation: props.validation });\n }, [props.value, props.validation]);\n\n const handleChange = (newVal: string) => {\n if (!props.disabled) {\n const invalidMsg = validate(newVal, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(newVal, invalidMsg === '');\n dispatch({ type: 'CHANGE', value: newVal, invalidMsg });\n }\n };\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control\" title={props.tooltip}>\n <textarea\n className={className}\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n required={props.validation?.required}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n placeholder={props.placeholder}\n disabled={props.disabled}\n inputMode={props.keyboardType ?? 'text'}\n onKeyDown={props.onKeyDown}\n ></textarea>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validation?: FormValidationType): string {\n const rgx = validation?.pattern ? new RegExp(validation?.pattern) : null;\n\n if (validation?.min && value.length < validation.min)\n return `${desc} moet uit minstens ${validation.min} karakters bestaan`;\n else if (validation?.max && value.length > validation.max)\n return `${desc} moet uit maximaal ${validation.max} karakters bestaan`;\n else if (validation?.required && !value) return `${desc} is verplicht`;\n else if (validation?.pattern && !rgx?.test(value)) return `${desc} voldoet niet aan het verwachte patroon`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { TextArea };\nexport type { TextAreaProps };\n","import { faKeyboard } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport { AutoCompleteType } from '~/loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype CharType = '0-9' | 'a-z' | 'A-Z' | 'a-Z' | '0-Z' | string | RegExp;\ntype TextInputProps = BaseInputProps & {\n /** type van de tekst input (default = 'text') */\n type?: 'text' | 'tel' | 'url';\n /** start value voor deze input (optioneel) */\n value?: string;\n /** speciaal voor password-managers. Wat is de functie van deze input */\n autocomplete?: AutoCompleteType;\n /** toegestane karakters in de input\n * 0-9: alleen numeriek\n * a-z: alleen lowercase letters. Uppercase maken we lowercase\n * A-Z: alleen uppercase letters. lowercase maken we uppercase\n * a-Z: alleen lowercase en uppercase letters\n * 0-Z: lowercase, uppercase & numeriek\n * RegExp: geef een regex op met alle toegestande karakters om NIET te replacen\n */\n characters?: CharType;\n\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param isValid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: string, isValid?: boolean): any | void;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n /** type van de input */\n type: 'text' | 'url' | 'tel';\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string; inputType: 'tel' | 'text' | 'url' };\n\n/**\n * De reducer van de TextInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg: '',\n type: action.inputType,\n valid: true,\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een input van een tekst-type met optionele validation.\n * @param props\n * @returns En TextInput met validatie en karakter-checking\n * @example <TextInput value=\"oompa loompa dooba di dee\" {...props} />\n * @description alle props voor TextArea component\n * | prop | type | default | description |\n * |-------------------|---------------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | type | `text`, `tel`, `url` | `text` | type voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | characters | `string`, `RegExp`, `0-Z`,| | de toegestane karakters in de input |\n * | | `0-9`, `a-z`, `A-Z`, `a-Z`| | |\n * | autocomplete | `AutoCompleteType` | | de autocomplete type voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction TextInput(props: TextInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: props.value ?? '',\n invalidMsg: '',\n valid: false,\n type: props.type ?? 'text',\n touched: false,\n validation: props.validation,\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // stel de className samen\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n /**\n * Wat te doen als de waarde is veranderd\n */\n const handleChange = React.useCallback((val: string): void => {\n if (props.disabled) return;\n\n const validationError = validate(val, state.description);\n\n if (props.characters) {\n let processedVal = val;\n if (props.characters === '0-9') processedVal = val.replaceAll(/[^0-9]/g, '');\n else if (props.characters === 'a-z') processedVal = val.toLowerCase().replaceAll(/[^a-z]/g, '');\n else if (props.characters === 'A-Z') processedVal = val.toUpperCase().replaceAll(/[^A-Z]/g, '');\n else if (props.characters === 'a-Z') processedVal = val.replaceAll(/[^a-zA-Z]/g, '');\n else if (props.characters === '0-Z') processedVal = val.replaceAll(/[^0-9a-zA-Z]/g, '');\n else if (typeof props.characters === 'string') {\n const allowedChars = (props.characters ?? '') as string;\n processedVal = val.split('').reduce((v, char) => (allowedChars.includes(char) ? v + char : v), '');\n } else if (props.characters instanceof RegExp)\n processedVal = val.replaceAll(new RegExp(props.characters, 'g'), '');\n val = processedVal;\n }\n\n props.onValueChanged && props.onValueChanged(val, validationError === '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg: validationError });\n }, []);\n\n /**\n * Valideer de waarde in de input\n */\n const validate = React.useCallback(\n (value: string, desc: string) => {\n let rgx = state.validation?.pattern ? new RegExp(state.validation?.pattern) : null;\n if (state.type == 'url' && !rgx)\n rgx = /(https?:\\/\\/)(www.)?[-a-zA-Z0-9@:%_+.~#?&//=]{2,256}\\.[a-z]{2,4}\\b(\\/[-a-zA-Z0-9@:%_+.~#?&//=]*)?/; // /https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{2,25}\\b([-a-zA-Z0-9()!@:%_+.~#?&//=]*)/\n\n if (!state.validation && state.type != 'url') return '';\n else if (!state.validation && state.type == 'url') return rgx?.test(value) ? '' : `${desc} is geen geldige url`;\n else if (state.validation?.min && value.length < state.validation.min)\n return `${desc} moet uit minstens ${state.validation.min} karakters bestaan`;\n else if (state.validation?.max && value.length > state.validation.max)\n return `${desc} moet uit maximaal ${state.validation.max} karakters bestaan`;\n else if (state.validation?.required && !value) return `${desc} is verplicht`;\n else if (rgx && !rgx?.test(value)) return `${desc} voldoet niet aan het verwachte patroon`;\n else if (state.validation?.onValidate) return state.validation.onValidate(value);\n return '';\n },\n [props.validation]\n );\n\n React.useEffect(() => {\n dispatch({\n type: 'SET',\n value: props.value ?? '',\n validation: props.validation,\n inputType: props.type ?? 'text',\n });\n }, [props.value, props.validation]);\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={state.value}\n autoComplete={props.autocomplete}\n required={props.validation?.required}\n className={className}\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n type={state.type}\n inputMode={props.keyboardType ?? 'text'}\n placeholder={props.placeholder}\n onKeyDown={props.onKeyDown}\n disabled={props.disabled}\n />\n\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faKeyboard} />\n </div>\n </InputContainer>\n );\n}\n\nexport { TextInput };\nexport type { TextInputProps };\n","import { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { faKeyboard } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport { AutoCompleteType } from '~/loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n InputIcons,\n InputTypeProp,\n} from './shared';\n\ntype InputValueType = string | number | readonly string[] | Date | undefined;\n\ntype InputProps<T extends InputValueType> = BaseInputProps<T> & {\n /** default icon voor aan begin van de input\n */\n icon?: string | IconProp;\n /** type van de tekst input (default = 'text') */\n type: InputTypeProp;\n /** start value voor deze input (optioneel) */\n value?: T;\n /** speciaal voor autocomplete-managers, zoals password-managers. Wat is de functie van deze input */\n autocomplete?: AutoCompleteType;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param isValid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: T, isValid?: boolean): any | void;\n};\n\ntype State<T extends InputValueType> = BaseState<T> & {\n /** de waarde van de input */\n value: T;\n /** type van de input */\n type: InputTypeProp;\n};\n\ntype ChangeStateType<T extends InputValueType> = BaseChangeStateType & { value: T };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType<T extends InputValueType> = BaseSetStateType<T> & { value: T };\n\n/**\n * De reducer van de BasicInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer<T extends InputValueType>(\n state: State<T>,\n action: ChangeStateType<T> | SetStateType<T> | TouchStateType\n) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Input met alle gewone <input> properties zelf in te vullen.\n * LET OP: Voor validatie kan ALLEEN de onValidate() function gebruikt\n * @param props\n * @returns input element\n * @example <Input<T> type=\"text\" placeholder=\"placeholder\" name=\"name\" id=\"id\" value={value} {...props}/>\n * @description alle props voor Input<T> component\n * | prop | type | default | description |\n * |-------------------|---------------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | type | `InputTypeProp` | | type voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | icon | `string`, `IconProp` | | Optioneel icon voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | autocomplete | `AutoCompleteType` | | autocomplete voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `T` | | de waarde, generic<T> |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: T, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction Input<T extends InputValueType>(props: InputProps<T>): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State<T>, ChangeStateType<T> | TouchStateType | SetStateType<T>>>(\n reducer,\n {\n description: props.label ?? props.name,\n value: (props.value ?? '') as T,\n invalidMsg: '',\n valid: false,\n type: props.type === 'datetime' ? 'datetime-local' : props.type,\n touched: false,\n validation: props.validation,\n }\n );\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: (props.value ?? '') as T, validation: props.validation });\n }, [props.value, props.validation]);\n\n const handleChange = React.useCallback((val: T): void => {\n if (!props.disabled) {\n const validationError = validate(val, state.validation);\n props.onValueChanged && props.onValueChanged(val, validationError == '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg: validationError });\n }\n }, []);\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage == 'string' ? props.errorMessage : props.errorMessage(state.value);\n\n // classname samen stellen\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n if (props.textAlign === 'c') className += ' has-text-centered';\n else if (props.textAlign === 'r') className += ' has-text-right';\n\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n let pVal: string | number | readonly string[];\n if (typeof state.value === 'string') pVal = state.value;\n else if (typeof state.value === 'number') pVal = state.value;\n else if (state.value instanceof Array) pVal = state.value;\n else if (state.value instanceof Date && state.type === 'date') pVal = state.value?.toISOString().substring(0, 10);\n else if (state.value instanceof Date && state.type === 'datetime') pVal = state.value?.toISOString().substring(0, 16);\n else if (state.value instanceof Date && state.type === 'time') pVal = state.value?.toISOString().substring(11, 16);\n else pVal = '';\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={props.tooltip}>\n <input\n id={props.id ?? props.name}\n name={props.name}\n value={pVal}\n autoComplete={props.autocomplete}\n required={props.validation?.required}\n className={className}\n onBlur={() => dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value)}\n type={state.type}\n inputMode={props.keyboardType ?? 'text'}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n\n <InputIcons\n icons={props.icons}\n valid={state.valid}\n touched={state.touched}\n defaultIcon={props.icon ?? faKeyboard}\n />\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate<T extends InputValueType>(value: T, validation?: FormValidationType<T>): string {\n if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { Input };\nexport type { InputProps, InputValueType };\n","import { faFileUpload } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport React, { Reducer } from 'react';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\n\ntype FileInputProps = Omit<BaseInputProps, 'icons'> & {\n /** file types die een file-input zou moeten accepteren. Komma-gescheiden lijst van unieke file-type-specificaties (zie MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file) */\n accept?: string;\n /** welke camera moet er gebruikt maken voor afbeelding/video data, als dat via de accept-prop is toegestaan */\n capture?: 'user' | 'environment';\n /** toon de input als een block */\n boxed?: boolean;\n /** mag een gebruik meerdere files selecteren */\n multiple?: boolean;\n /** tekst voor op selecteer-file-button. default wordt de 'name'-prop gebruikt */\n kiesLabel?: string;\n /** tekst voor 'er-is-nog-geen-bestand'. default = '' */\n nogGeenBestandLabel?: string;\n /** value van de input (LET OP: MAG NIET BIJ INITIALISATIE EEN ANDERE WAARDE DAN '' HEBBEN) */\n value?: string;\n /**\n * Wat te doen als de waarde is veranderd\n * @param files: de nieuwe waarde\n * @param isValid: is de nieuwe waarde geldig?\n */\n onValueChanged?(files: FileList, isValid?: boolean): any | void;\n /** formatteer de weergegeven filenaamm volgens een eigen functie */\n filenameFormatter?(val: string, files: FileList): string;\n};\n\ntype State = BaseState & {\n /** de waarde van de input (in dit geval een path) */\n value: string;\n /** file naam, dus zonder de rest van het path */\n filename: string;\n files: FileList | undefined;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string; filename: string; files?: FileList };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string; filename: string; files?: FileList };\n\n/**\n * De reducer van de FileInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.files, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n filename: action.filename,\n files: action.files,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg == '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n filename: action.filename,\n files: action.files,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg == '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een file input\n * @param props\n * @returns an input for files\n * @example <FileInput name=\"file\" {...props}/>\n * @description alle props voor File component\n * | prop | type | default | description |\n * |-------------------|----------------------|-----------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | kiesLabel | `string` | | de tekst voor de selecteer-file-button |\n * | multiple | `boolean` | `false` | of er meerdere files geselecteerd moeten |\n * | boxed | `boolean` | `false` | of de input als een block moet worden |\n * | accept | `string` | | de file-types die geselecteerd mogen worden|\n * | capture | `user`, `environment`|`undefined`| de camera die gebruikt moet worden |\n * | id | `string` | `name` | de id voor de input |\n * | icon | `string`, `IconProp` | | de icon voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | FORBIDDEN | de waarde, mag NIET default geset worden |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: FileList, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n * | filenameFormatter | `function` | | (value: string, files: FileList) => string |\n */\nfunction FileInput(props: FileInputProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(reducer, {\n description: props.label ?? props.name,\n value: '',\n filename: '',\n invalidMsg: '',\n files: undefined,\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n let className = 'file has-name';\n if (props.boxed) className += ' is-boxed';\n else className += ' is-fullwidth';\n\n if (props.size === 's') className += ' is-small';\n else if (props.size === 'l') className += ' is-medium';\n else if (props.size === 'xl') className += ' is-large';\n\n const handleChange = (path: string, files: FileList): void => {\n if (!props.disabled) {\n const validationError = validate(files, state.description, state.validation);\n const filename = props.filenameFormatter ? props.filenameFormatter(path, files) : defaultFilenameFormatter(path);\n\n props.onValueChanged && props.onValueChanged(files, validationError === '');\n dispatch({ type: 'CHANGE', value: path, filename, files, invalidMsg: validationError });\n }\n };\n\n const defaultFilenameFormatter = React.useCallback((path: string): string => path.replace(/^.*[\\\\/]/, ''), []);\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '', filename: '', files: undefined, validation: props.validation });\n }, [props.value, props.validation]);\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n const label = { txt: props.label ?? props.name, id: props.id ?? props.name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={props.size} label={label} error={error} direction={props.direction ?? 'h'}>\n <div className={className}>\n <label className=\"file-label\">\n <input\n id={props.id ?? props.name}\n accept={props.accept}\n capture={props.capture}\n multiple={props.multiple}\n name={props.name}\n value={state.value}\n required={props.validation?.required}\n className=\"file-input\"\n onBlur={() => !state.touched && dispatch({ type: 'TOUCH', touched: true })}\n onChange={(e: any) => handleChange(e.target.value, e.target.files)}\n type=\"file\"\n inputMode={props.keyboardType ?? 'text'}\n placeholder={props.placeholder}\n disabled={props.disabled}\n onKeyDown={props.onKeyDown}\n />\n <span className=\"file-cta\">\n <span className=\"file-icon\" role=\"icon\">\n <FontAwesomeIcon icon={faFileUpload} />\n </span>\n <span className=\"file-label\">{props.kiesLabel ?? props.name}</span>\n </span>\n <span className=\"file-name\">{state.filename ?? props.nogGeenBestandLabel ?? ''}</span>\n </label>\n </div>\n </InputContainer>\n );\n}\n\n/**\n * Valideer een waarde van de input\n * @param value de nieuwe waarde\n * @param desc een omschrijving van de input\n * @param validation het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: FileList | undefined, desc: string, validation?: FormValidationType): string {\n if (validation?.required && (!value || value.length < 1)) return `${desc} is verplicht`;\n else if (validation?.onValidate) return validation.onValidate(value);\n return '';\n}\n\nexport { FileInput };\nexport type { FileInputProps };\n","import React from 'react';\nimport { CheckradioStylingType, ColorProp, DirectionProp, SizeProp, TextAlignmentProp } from '~/loon-react-bulma-types';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n FormValidationType,\n InputContainer,\n InputError,\n} from '../shared';\n\ntype RadioInputProps = Omit<BaseInputProps, 'icons'> & {\n value?: string;\n children?: React.ReactNode;\n onValueChanged?(newVal: string, isValid?: boolean): any | void;\n};\ntype RadioItemProps = {\n /** id van radio item */\n id?: string;\n /** radio item value */\n value: string;\n /** is disabled */\n disabled?: boolean;\n /** tootlip */\n tooltip?: string;\n /** content */\n children?: React.ReactNode;\n /** grootte van de radiobutton (defaulkt = 'm', normal) */\n size?: SizeProp;\n /** kleur van de radiobutton (default = 'l', link) */\n color?: ColorProp;\n /** speciale styling van de radiobutton */\n styling?: CheckradioStylingType;\n /** verticaal of horizontall weergeven? */\n direction?: DirectionProp;\n /** Waar moet de tekst van de input uitgelijnd worden (default = 'l', links) */\n textAlign?: TextAlignmentProp;\n};\ntype State = BaseState & {\n /** de waarde van de checkbox */\n value: string;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string };\ntype SetStateType = BaseSetStateType & { value: string };\n\n/**\n * De reducer van de RadioInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType) {\n switch (action.type) {\n case 'SET':\n const invalidMsg = validate(action.value, state.description, action.validation);\n return {\n ...state,\n value: action.value,\n validation: action.validation,\n invalidMsg,\n valid: invalidMsg === '',\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n }\n}\n\n/**\n * Een groep radio-buttons voor een <input type=\"radio\" />\n * @param props\n * @returns een radio-group\n * @example\n * <RadioGroup name=\"radioGroup\" value=\"1\" onValueChanged={change}>\n * <RadioGroup.Item value=\"1\">Radio 1</RadioGroup.Item>\n * <RadioGroup.Item value=\"2\">Radio 2</RadioGroup.Item>\n * </RadioGroup>\n * @description alle props voor RadioGroup component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | label | `string ` | `name` | de label voor de input |\n * | id | `string ` | `name` | de id voor de input |\n * | tooltip | `string ` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string ` | | een error message (van buiten setbaar) |\n * | placeholder | `string ` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nconst RadioGroup = (props: RadioInputProps): JSX.Element => {\n const [state, dispatch] = React.useReducer<React.Reducer<State, ChangeStateType | SetStateType>>(reducer, {\n description: props.name,\n value: props.value ?? '',\n invalidMsg: '',\n valid: false,\n touched: false,\n validation: props.validation,\n });\n\n const handleSet = (val: string) => {\n const invalidMsg = validate(val, state.description, state.validation);\n props.onValueChanged && props.onValueChanged(val, invalidMsg === '');\n dispatch({ type: 'CHANGE', value: val, invalidMsg });\n };\n\n React.useEffect(() => {\n dispatch({ type: 'SET', value: props.value ?? '', validation: props.validation });\n }, [props.value, props.validation]);\n\n const children = React.Children.map(props.children, (child: any) => {\n if (child.type === RadioItem)\n return (\n <InternRadioItem\n {...child.props}\n size={child.size ?? props.size}\n name={props.name}\n id={child.props.id ?? `${props.name}-${child.props.value}`}\n selectedItem={state.value}\n textAlign={child.textAlign ?? props.textAlign}\n setter={(val: string) => handleSet(val)}\n disabled={props.disabled ?? child.props.disabled}\n direction={props.direction ?? 'h'}\n />\n );\n return child;\n });\n\n let errorMsg = '';\n if (props.errorMessage)\n errorMsg = typeof props.errorMessage === 'string' ? props.errorMessage : props.errorMessage(state.value);\n const error = <InputError stateError={state.invalidMsg} outsideError={errorMsg} touched={state.touched} />;\n\n return (\n <InputContainer size=\"m\" error={error} direction={props.direction ?? 'h'}>\n <div className=\"control\" title={props.tooltip}>\n {children}\n </div>\n </InputContainer>\n );\n};\n\n/** ONLY EXPORT USE -- Exported on RadioGroup.Item */\nconst RadioItem = (props: RadioItemProps): JSX.Element => (\n <label className=\"radio\" id={props.id}>\n <input type=\"radio\" disabled={props.disabled} title={props.tooltip} />\n {props.children}\n </label>\n);\n\n/** DO NOT EXPORT -- INTERN USE ONLY */\nfunction InternRadioItem(\n props: RadioItemProps & { name: string; selectedItem: string; setter: (identifier: string) => void }\n): JSX.Element {\n const { size, color, styling, textAlign } = props;\n let className = 'is-checkradio block';\n if (size === 's') className += ' is-small';\n else if (size === 'l') className += ' is-medium';\n else if (size === 'xl') className += ' is-large';\n\n if (color === 'w') className += ' is-warning';\n else if (color === 'd') className += ' is-danger';\n else if (color === 'i') className += ' is-info';\n else if (color === 's') className += ' is-success';\n else if (color === 'p') className += ' is-primary';\n else className += ' is-link';\n\n if (styling === 'rounded') className += ' is-circle';\n else if (styling === 'noborder') className += ' has-no-border';\n else if (styling === 'colored') className += ' has-background-color';\n else if (styling === 'blocky') className += ' is-blocky';\n\n if (textAlign === 'c') className += ' has-text-centered';\n else if (textAlign === 'r') className += ' has-text-right';\n\n const containerClassName = props.direction?.startsWith('v') ? 'field my-1' : 'radio field my-1';\n\n return (\n <div className={containerClassName}>\n <input\n className={className}\n type=\"radio\"\n value={props.value}\n disabled={props.disabled}\n name={props.name}\n id={props.id ?? `${props.name}-${props.value}`}\n checked={props.selectedItem === props.value}\n onChange={() => props.setter(props.value)}\n title={props.tooltip ?? props.value}\n />\n <label\n className={props.disabled ? 'radio has-text-grey-light mx-2 pl-6' : 'radio mx-2'}\n title={props.tooltip}\n htmlFor={props.id ?? `${props.name}-${props.value}`}\n >\n {props.children ?? props.value}\n </label>\n </div>\n );\n}\n\n/**\n * Een Radio-button voor in de RadioGroup\n * @param props\n * @returns een radio-item\n * @example\n * <RadioGroup.Item name=\"item 1\" value=\"item1\">Radio item 1</RadioGroup.Item>\n * @description alle props voor RadioGroup.Item component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | id | `string ` | `name` | de id voor het radioitem |\n * | tooltip | `string ` | | tooltip voor het item |\n * | labelHidden | `boolean` | false | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | false | de input is disabled |\n * | value | `string ` | #000000 | de waarde (REQUIRED) |\n * | children | `React.ReactNode` | | de tekst van het item (REQUIRED) |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | color | `w`,`d`,`i`,`s`,`p` | `l` | de kleur van de input |\n * | styling | `rounded`,`noborder` | | de styling van de checkbox |\n * | | `colored`, `blocky` | | |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | icons | | | RADIOGROUP HEEFT GEEN ICONS |\n */\nRadioGroup.Item = RadioItem;\n\n/**\n * Voer validatie van de waarde uit\n * @param value de nieuwe waarde\n * @param desc de naam van de input\n * @param validationObject het validatie-object\n * @returns een invalid-msg of een lege string als 'valid'\n */\nfunction validate(value: string, desc: string, validationObject?: FormValidationType): string {\n if (!validationObject) return '';\n else if (validationObject.required && !value) return `${desc} is verplicht`;\n else if (validationObject.onValidate) return validationObject.onValidate(value);\n return '';\n}\n\n/**\n * Een losstaand radio-item om zelf de groep te maken\n * @param props\n * @returns een radio-item\n * @example\n * <RadioItem name=\"item 1\" value=\"item1\" selecteditem={radioItem}>Radio item 1</RadioItem>\n * @description alle props voor RadioItem component\n * | prop | type | default | description |\n * |-------------------|----------------------|---------|--------------------------------------------|\n * | name | `string ` | | de naam voor de input (REQUIRED) |\n * | selectedItem | `string ` | | de naam voor de input (REQUIRED) |\n * | id | `string ` | `name` | de id voor het radioitem |\n * | tooltip | `string ` | | tooltip voor het item |\n * | labelHidden | `boolean` | false | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | false | de input is disabled |\n * | value | `string ` | | de waarde (REQUIRED) |\n * | children | `React.ReactNode` | | de tekst van het item (REQUIRED) |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | color | `w`,`d`,`i`,`s`,`p` | `l` | de kleur van de input |\n * | styling | `rounded`,`noborder` | | de styling van de checkbox |\n * | | `colored`, `blocky` | | |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | setter() | `function` | | (val: string) => void |\n */\n\nconst Radio = InternRadioItem;\nexport { RadioGroup, Radio };\nexport type { RadioInputProps };\n","/* eslint-disable no-console */\nimport { AlignmentProp, DirectionProp, SizeProp } from '~/loon-react-bulma-types';\nimport React from 'react';\nimport { CheckBox } from './Checkbox/Checkbox';\nimport { DateInput } from './Datetimes/DateInput';\nimport { DateTimeInput } from './Datetimes/DateTimeInput';\nimport { TimeInput } from './Datetimes/TimeInput';\nimport { MultiRangeInput } from './Numeric/MultiRangeInput';\nimport { NumberInput } from './Numeric/NumberInput';\nimport { RangeInput } from './Numeric/RangeInput';\nimport { ColorInput } from './Others/ColorInput';\nimport { HiddenInput } from './Others/HiddenInput';\nimport { MultiSelect } from './Selects/MultiSelect';\nimport { Select } from './Selects/Select';\nimport { EmailInput } from './Text/EmailInput';\nimport { PasswordInput } from './Text/PasswordInput';\nimport { TextArea } from './Text/TextArea';\nimport { TextInput } from './Text/TextInput';\nimport { Input } from './Input';\nimport { InputContainer } from './shared/Base.Input.Container';\nimport { FileInput } from './File/FileInput';\nimport { RadioGroup } from './Radio/Radio';\nimport { ButtonGroup } from '../components';\n\ntype FormProps = {\n /** de inputs voor dit form */\n children: React.ReactNode;\n /** form attribuut \\<form action=\"...\" > */\n action?: string;\n /** form attribuut \\<form name=\"...\" > */\n name?: string;\n /** form attribuut \\<form method=\"...\" > */\n method?: 'post' | 'get';\n /** form attribuut <form target=\"...\" > */\n target?: '_self' | '_blank' | '_parent' | '_top';\n /** form onsubmit handler */\n onSubmit?: (event: React.FormEvent<HTMLFormElement>) => void;\n /** size voor alle form-elementen (default = 'm') */\n size?: SizeProp;\n /** form attribuut\\ <form autocomplete=\"...\" >. */\n autocomplete?: 'on' | 'off';\n /** direction voor form-elementen (horizontaal (1 lijn, default) of vertical (label boven, input onder)) */\n direction?: DirectionProp;\n /** form attribuut \\<form novalidate=\"...\" > */\n novalidate?: boolean;\n /** extra classnames voor de form */\n className?: string;\n};\n\n/**\n * Maak een form met verschillende inputs. De inputs zelf zijn hetzelfde als de losse inputs.\n * @param props\n * @returns een form\n * @example\n * <Form action=\"POST\" name=\"formpie\">\n * <TextInput name=\"name\" label=\"Naam\" />\n * <TextInput name=\"email\" label=\"Email\" />\n * <PasswordInput name=\"password\" label=\"Wachtwoord\" />\n * </Form>\n */\nconst Form = (props: FormProps) => {\n const allowedContent = React.useMemo(\n () => [\n TextInput,\n TextArea,\n PasswordInput,\n EmailInput,\n Select,\n MultiSelect,\n ColorInput,\n HiddenInput,\n NumberInput,\n RangeInput,\n MultiRangeInput,\n DateInput,\n DateTimeInput,\n TimeInput,\n CheckBox,\n RadioGroup,\n Input,\n FileInput,\n ],\n []\n );\n const { action, method, target, onSubmit, direction, name, novalidate, className, size } = props;\n const children = React.Children.map(props.children, (child: any) => {\n if (!child) return null;\n else if (child.type === FormLine)\n return <InternFormLine children={child.props.children} direction={direction} size={size} />;\n else if (child.type === Buttons)\n return (\n <InputContainer direction={direction ?? 'h'}>\n <ButtonGroup size={size} {...child.props} />\n </InputContainer>\n );\n else if (child.type === FreeSpace) return <InternFreeSpace {...child.props} direction={direction} size={size} />;\n else if (allowedContent.includes(child.type))\n return <child.type {...child.props} direction={direction} size={size} />;\n else if (typeof child === 'string')\n console.warn(\n `<Form> should only contain children of type: <Form.XXX /> or <...Input> elements. You passed a string (\"${child}\"), which will be ignored`\n );\n else if (typeof child.type === 'string')\n console.warn(\n `<Form> should only contain children of type: <Form.XXX /> or <...Input> elements. You passed a HTMLElement (<${child.type}>), which will be ignored`\n );\n else if (typeof child.type.name === 'string')\n console.warn(\n `<Form> should only contain children of type: <Form.XXX /> or <...Input> elements. You passed a Component (<${child.type.name}>), which will be ignored`\n );\n return null;\n });\n\n return (\n <form\n className={className}\n action={action}\n target={target}\n method={method}\n onSubmit={onSubmit}\n name={name}\n noValidate={novalidate}\n >\n {children}\n </form>\n );\n};\n\n/** export-fn voor een form-line */\nconst FormLine = ({ children }: { children: React.ReactNode }) => <div>{children}</div>;\nconst InternFormLine = (props: { children: React.ReactNode; direction?: DirectionProp; size?: SizeProp }) => {\n return (\n <InputContainer direction={props.direction ?? 'h'} size={props.size ?? 'm'}>\n <div className=\"columns \">\n {React.Children.map(props.children, (child: any, index) => (\n <div className=\"column\" key={index}>\n <child.type {...child.props} size={props.size} />\n </div>\n ))}\n </div>\n </InputContainer>\n );\n};\n\nconst FreeSpace = ({ children }: { children: React.ReactNode }): JSX.Element => <div>{children}</div>;\nconst InternFreeSpace = ({\n children,\n direction,\n size,\n}: {\n children: React.ReactNode;\n direction: DirectionProp;\n size: SizeProp;\n}): JSX.Element => (\n <InputContainer direction={direction} size={size}>\n {children}\n </InputContainer>\n);\n\nconst Buttons = ({\n children,\n size,\n alignment,\n}: {\n children: React.ReactNode;\n size?: SizeProp;\n alignment?: AlignmentProp;\n}) => (\n <div className=\"buttons\">\n {children}\n {size}\n {alignment}\n </div>\n);\n\n/** een zelf-configureerbare base input\n * @see Input\n */\nForm.Input = Input;\n/** input voor type url, text of tel\n * @see TextInput\n */\nForm.Text = TextInput;\n/** password input\n * @see PasswordInput\n */\nForm.Password = PasswordInput;\n/** email input\n * @see EmailInput\n */\nForm.Email = EmailInput;\n/** text area input\n * @see TextArea\n */\nForm.TextArea = TextArea;\n/** select input\n * @see Select\n */\nForm.Select = Select;\n/** multi-select input\n * @see MultiSelect\n */\nForm.MultiSelect = MultiSelect;\n/** color input\n * @see ColorInput\n */\nForm.Color = ColorInput;\n/** hidden input\n * @see HiddenInput\n */\nForm.Hidden = HiddenInput;\n/** number input\n * @see NumberInput\n */\nForm.Number = NumberInput;\n/** range input (als a number input)\n * @see RangeInput\n */\nForm.Range = RangeInput;\n/** multi-range input (2 numbers)\n * @see MultiRangeInput\n */\nForm.MultiRange = MultiRangeInput;\n/** input for dates\n * @see DateInput\n */\nForm.Date = DateInput;\n/** input for date & time combinations\n * @see DateTimeInput\n */\nForm.DateTime = DateTimeInput;\n/** time input\n * @see TimeInput\n */\nForm.Time = TimeInput;\n/** checkbox input\n * @see CheckBox\n */\nForm.CheckBox = CheckBox;\n/** radio input\n * @see RadioGroup\n */\nForm.RadioGroup = RadioGroup;\n/** een file-input\n * @see FileInput\n */\nForm.File = FileInput;\n/**\n * Gebruik om de richting (direction-attribuut) van meerdere inputs te wijzigen.\n * @return een aantal inputs op een lijn\n * @example\n * <Form.Line>\n * <Form.Date name={`date-${i}-${ii}`} id={`date-${direction}-${size}-1`} direction=\"vertical\" />\n * <Form.Time name={`time-${i}-${ii}`} id={`date-${direction}-${size}-2`} direction=\"vertical\" />\n * </Form.Line>\n */\nForm.Line = FormLine;\n/** Open ruimte voor eigen content, die zich aan de direction van het form houdt.\n * @return eigen componenten of content.\n * @example\n * <Form.Space>\n * <Message size={size} color=\"w\">\n * Met de component <strong>{'<Form.Line>'}</strong> kan je twee inputs achter elkaar kwijt. Dan\n * moet je wel zelf nog de direction instellen (default = 'horizontal')\n * </Message>\n * </Form.Space>\n */\nForm.Space = FreeSpace;\n/** container voor de buttons van het form. Grootte van de buttons kan onafhankelijk worden ingesteld */\n/**\n * Buttons container voor het form. Mag alleen buttons bevatten. Grootte van de buttons kan onafhankelijk worden ingesteld, maar ook voor allemaal.\n * @return een buttons-container\n * @example\n * <Form.Buttons>\n * <Button.Success type=\"submit\">Verstuur</Button.Success>\n * <Button.Danger>Reset</Button.Danger>\n * <Button.Info>Meer...</Button.Info>\n * </Form.Buttons>\n */\nForm.Buttons = Buttons;\n\nexport { Form };\nexport type { FormProps };\n","import React, { Reducer } from 'react';\nimport { CheckBox } from './../Checkbox/Checkbox';\nimport { DateInput } from './../Datetimes/DateInput';\nimport { DateTimeInput } from './../Datetimes/DateTimeInput';\nimport { TimeInput } from './../Datetimes/TimeInput';\nimport { FormBuilderFieldProps, FormBuilderProps, ChangedValue, FormBuilderButton } from './FormBuilderProps';\nimport { MultiRangeInput } from './../Numeric/MultiRangeInput';\nimport { NumberInput } from './../Numeric/NumberInput';\nimport { RangeInput } from './../Numeric/RangeInput';\nimport { HiddenInput } from './../Others/HiddenInput';\nimport { MultiSelect } from './../Selects/MultiSelect';\nimport { Select } from './../Selects/Select';\nimport { EmailInput } from './../Text/EmailInput';\nimport { PasswordInput } from './../Text/PasswordInput';\nimport { TextArea } from './../Text/TextArea';\nimport { TextInput } from './../Text/TextInput';\nimport { DirectionProp } from '~/loon-react-bulma-types';\nimport { Button } from '~/components';\n\ntype Field = FormBuilderFieldProps & { id: string };\ntype FormState = {\n fields: Field[];\n valid: boolean;\n loading: boolean;\n method: 'post' | 'get';\n};\n\ntype ChangeFormDispatch = {\n type: 'CHANGE';\n value: string | string[] | number | [number, number] | boolean | null | undefined;\n valid: boolean;\n name: string;\n};\n\ntype SetFormDispatch = {\n type: 'SET';\n fields: Field[];\n};\n\nfunction reducer(state: FormState, action: ChangeFormDispatch | SetFormDispatch) {\n switch (action.type) {\n case 'SET':\n return {\n ...state,\n fields: [...action.fields],\n valid: false,\n loading: false,\n };\n case 'CHANGE':\n const updatedFields = [...state.fields];\n const i = updatedFields.findIndex((f) => f.name == action.name);\n updatedFields[i].value = action.value;\n updatedFields[i].valid = action.valid;\n return {\n ...state,\n fields: updatedFields,\n valid: updatedFields.findIndex((f) => !f.valid) == -1,\n };\n }\n}\n\n/**\n * stel een form samen op basis van een array van fields, met een submit-button en optionele extra buttons.\n * Kan ook in een modal getoont worden.\n * @param props\n * @returns een object voor POST requests OF een URLPARAMS string voor GET requests\n */\nexport function FormBuilder(props: FormBuilderProps): JSX.Element {\n const [state, dispatch] = React.useReducer<Reducer<FormState, ChangeFormDispatch | SetFormDispatch>>(reducer, {\n valid: false,\n loading: false,\n method: props.method,\n fields: [...props.fields.map(fieldMapper)],\n });\n\n /** verwerkt field wijzigingen */\n const handleValueChange = (cv: ChangedValue) => {\n dispatch({ type: 'CHANGE', value: cv.new, valid: cv.valid, name: cv.name });\n };\n\n React.useEffect(() => {\n dispatch({\n type: 'SET',\n fields: [...props.fields.map(fieldMapper)],\n });\n }, [props.fields]);\n\n const handleModalDismiss = (e: any) => props.useModal && props.onDismiss && props.onDismiss(e);\n\n /**\n * Zorg voor de afhandeling van het versturen als de onSubmit methode gezet is.\n * @param e click-event voor preventDefault\n * @returns POST: key-value pair als object, GET: urlsearchparams als string (id=100&name=henkie).\n */\n const handleSubmit = (e: any) => {\n e.preventDefault();\n const obj: any = {};\n state.fields.forEach((f) => {\n obj[f.name] = f.value;\n });\n props.onSubmit(props.method == 'post' ? obj : new URLSearchParams(obj).toString());\n };\n\n if (props.useModal)\n return (\n <div className=\"modal is-active\">\n <div className=\"modal-background\"></div>\n <form\n role=\"form\"\n className=\"modal-content bulma-box modal-container\"\n onSubmit={(e) => handleSubmit(e)}\n name={props.name}\n >\n <div className=\"modal-body\">\n {/* map all fields in het form */}\n {state.fields.map((f) => (\n <FormField\n key={f.name}\n fieldProps={f}\n onValueChanged={(e: ChangedValue) => handleValueChange(e)}\n direction={props.direction ?? 'h'}\n />\n ))}\n {/* plaats de buttons op de bodem van het form */}\n </div>\n <div className=\"modal-footer\">\n <FormButtons buttons={props.buttons} valid={state.valid} loading={state.loading} />\n </div>\n </form>\n <button\n className=\"modal-close is-large\"\n aria-label=\"close\"\n onClick={(e: any) => handleModalDismiss(e)}\n ></button>\n </div>\n );\n\n return (\n <form onSubmit={(e) => handleSubmit(e)}>\n {/* map all fields in het form */}\n {state.fields.map((f) => (\n <FormField\n key={f.name}\n fieldProps={f}\n onValueChanged={(e: ChangedValue) => handleValueChange(e)}\n direction={props.direction ?? 'h'}\n />\n ))}\n {/* plaats de buttons op de bodem van het form */}\n <FormButtons buttons={props.buttons} valid={state.valid} loading={state.loading} />\n </form>\n );\n}\n\n/**\n * Maak een field voor elke aparte input\n * @param props\n * @returns\n */\nfunction FormField(props: { fieldProps: Field; direction: DirectionProp; onValueChanged(e: ChangedValue): void }) {\n const input = props.fieldProps;\n const handleValueChange = (\n newVal: number | string | boolean | [number, number] | string[],\n isValid: boolean,\n name: string\n ) => {\n props.onValueChanged({\n new: newVal,\n old: input.value,\n valid: isValid,\n name,\n });\n };\n\n switch (input.type) {\n case 'text':\n case 'url':\n case 'tel':\n return (\n <TextInput\n {...input}\n value={input.value as string}\n type={input.type}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'textarea':\n return (\n <TextArea\n {...input}\n value={input.value as string}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'password':\n return (\n <PasswordInput\n {...input}\n value={input.value as string}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'email':\n return (\n <EmailInput\n {...input}\n value={input.value as string}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'number':\n return (\n <NumberInput\n {...input}\n value={input.value ? +input.value : undefined}\n onValueChanged={(v: number, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'checkbox':\n return (\n <CheckBox\n {...input}\n value={input.value as boolean}\n onValueChanged={(v: boolean, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'date':\n return (\n <DateInput\n {...input}\n value={input.value as string}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'time':\n return (\n <TimeInput\n {...input}\n value={input.value as string}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'datetime':\n return (\n <DateTimeInput\n {...input}\n value={input.value as string}\n onValueChanged={(v: string, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'select':\n return (\n <Select\n {...input}\n options={input.selectOptions || []}\n value={input.value as string}\n onValueChanged={(v: string | number, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'multiselect':\n return (\n <MultiSelect\n {...input}\n options={input.selectOptions || []}\n value={input.value as string[]}\n onValueChanged={(v: string[], isValid: boolean) => handleValueChange(v, isValid, input.name)}\n />\n );\n case 'range':\n return (\n <RangeInput\n {...input}\n value={input.value as number}\n onValueChanged={(v: number, isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'multirange':\n return (\n <MultiRangeInput\n {...input}\n value={input.value as [number, number]}\n onValueChanged={(v: [number, number], isValid: boolean) => handleValueChange(v, isValid, input.name)}\n direction={props.direction}\n />\n );\n case 'hidden':\n return <HiddenInput {...input} value={input.value as string} required={input.validation?.required} />;\n }\n // return <input />;\n}\n\nfunction FormButtons(props: {\n valid: boolean;\n loading: boolean;\n buttons: { submit: string; other?: FormBuilderButton[] };\n}) {\n const valid = props.valid;\n const buttons = props.buttons;\n return (\n <div className=\"lbr-form-footer buttons mt-3\">\n <Button.Success type=\"submit\" disabled={!valid}>\n {buttons.submit}\n </Button.Success>\n {buttons.other &&\n buttons.other.map((btn) => {\n return (\n <Button\n key={btn.txt}\n color={btn.color}\n onClick={btn.onClick}\n type={btn.type}\n disabled={!valid && btn.mustValidate}\n >\n {btn.txt}\n </Button>\n );\n })}\n </div>\n );\n}\n\n/**\n *function om de fields van een form te mappen, zodat ze allemaal dezelfde structuur hebben\n * zorgt ervoor dat een field ALTIJD een id en een valid heeft\n * @param f een field\n * @returns een geupdate field met in ieder geval een 'valid' en een 'id' property\n */\nconst fieldMapper = (f: FormBuilderFieldProps): Field => {\n const field: Field = { ...f, ...{ id: f.id || '', valid: false } };\n // voeg een ID toe als dat er nog niet is.\n if (field.id == '') field.id = f.name;\n\n // als het field type 'hidden' is, dan is deze altijd valid\n if (field.type == 'hidden') field.valid = true;\n // als het field al een waarde heeft, is het field altijd true (om te beginnen)\n else if (field.value) field.valid = true;\n return field;\n};\n","import { faEuroSign } from '@fortawesome/free-solid-svg-icons';\nimport React, { Reducer } from 'react';\nimport CurrencyInput from 'react-currency-input-field';\nimport {\n BaseChangeStateType,\n BaseInputProps,\n BaseSetStateType,\n BaseState,\n BaseTouchStateType,\n InputContainer,\n InputError,\n InputIcons,\n} from '../shared';\n\ntype CurrencyInputProps = Omit<BaseInputProps, 'labelHidden'> & {\n /** start value voor deze input (optioneel) */\n value?: number;\n /**\n * Wat te doen als de waarde is veranderd\n * @param newVal: de nieuwe waarde\n * @param isValid: is de nieuwe waarde geldig?\n */\n onValueChanged?(newVal: [number, string], isValid?: boolean): void;\n\n /** scheidingsteken gehele getallen en decimalen (default = ',' ) */\n decimalSeparator?: string;\n /** scheidingsteken per duizend (default = '.') */\n thousandsSeparator?: string;\n};\n\ntype State = BaseState & {\n /** de waarde van de input */\n value: string;\n numValue: number;\n};\n\ntype ChangeStateType = BaseChangeStateType & { value: string; numValue: number };\ntype TouchStateType = BaseTouchStateType;\ntype SetStateType = BaseSetStateType & { value: string; numValue: number };\n\n/** De reducer van de CurrencyInput\n * @param state de state voor wijzigingen\n * @param action de actie die uitgevoerd wordt op de state\n * @returns de nieuwe state\n */\nfunction reducer(state: State, action: ChangeStateType | SetStateType | TouchStateType) {\n switch (action.type) {\n case 'SET':\n return {\n ...state,\n value: action.value,\n numValue: action.numValue,\n validation: action.validation,\n invalidMsg: '',\n valid: true,\n };\n case 'CHANGE':\n return {\n ...state,\n value: action.value,\n numValue: action.numValue,\n touched: true,\n invalidMsg: action.invalidMsg,\n valid: action.invalidMsg === '',\n };\n case 'TOUCH':\n return {\n ...state,\n touched: action.touched,\n };\n }\n}\n\n/**\n * Maak een input van een tekst-type met optionele validation.\n * @param props\n * @returns Een CurrencyInput\n * @example <CurrencyInput value=\"12\" {...props} />\n * @description alle props voor CurencyInput component\n * | prop | type | default | description |\n * |-------------------|---------------------------|---------|--------------------------------------------|\n * | name | `string` | | de naam voor de input (REQUIRED) |\n * | label | `string` | `name` | de label voor de input |\n * | autocomplete | `AutoCompleteType` | | de autocomplete type voor de input |\n * | id | `string` | `name` | de id voor de input |\n * | tooltip | `string` | | tooltip voor de input |\n * | labelHidden | `boolean` | `false` | de label is verborgen (screenreaders) |\n * | disabled | `boolean` | `false` | de input is disabled |\n * | textAlign | `l`, `c`, `r` | `l` | de text-align van de input |\n * | keyboardType | `search`, `text`, | `text ` | de type van de keyboard (touch-devices) |\n * | | `email`,`tel`,`url` | | |\n * | | `numeric`, `decimal` | | |\n * | validation | `FormValidationType` | `{}` | de validatie voor de input |\n * | value | `string`|`number` | | de waarde |\n * | size | `s`,`m`,`l`,`xl` | `m` | de grootte van de input |\n * | direction | `h`,`v` | `h` | de form-richting voor de input |\n * | errorMessage | `string`, `function` | | een error message (van buiten setbaar) |\n * | placeholder | `string` | | de placeholder voor de input |\n * | onValueChanged() | `function` | | (value: string, valid?: boolean) => void |\n * | onKeyDown() | `function` | | (event: React.KeyboardEvent) => void |\n */\nfunction LbrCurrencyInput({\n label,\n name,\n id,\n value,\n validation,\n errorMessage,\n size,\n textAlign,\n disabled,\n placeholder,\n keyboardType,\n tooltip,\n direction,\n onValueChanged,\n onKeyDown,\n decimalSeparator = ',',\n ...props\n}: CurrencyInputProps): JSX.Element {\n const defaultState: State = {\n description: label ?? name,\n value: typeof value === 'number' ? value.toString() : value ?? '0',\n numValue: 0,\n invalidMsg: '',\n valid: false,\n touched: false,\n validation,\n };\n\n const [state, dispatch] = React.useReducer<Reducer<State, ChangeStateType | TouchStateType | SetStateType>>(\n reducer,\n defaultState\n );\n\n let errorMsg = '';\n if (errorMessage) errorMsg = typeof errorMessage === 'string' ? errorMessage : errorMessage(state.value);\n\n // stel de className samen\n let className = (!state.valid && state.touched) || errorMsg ? 'input is-danger' : 'input';\n if (size === 's') className += ' is-small';\n else if (size === 'l') className += ' is-medium';\n else if (size === 'xl') className += ' is-large';\n\n if (textAlign === 'c') className += ' has-text-centered';\n else if (textAlign === 'r') className += ' has-text-right';\n\n /**\n * Wat te doen als de waarde is veranderd\n */\n const handleChange = React.useCallback((strVal: string, name?: string): void => {\n if (disabled || !name) return;\n\n const numVal = +strVal.replace(',', '.');\n const validationError = validate(numVal, state.description);\n onValueChanged && onValueChanged([numVal, strVal], validationError === '');\n dispatch({ type: 'CHANGE', value: strVal, numValue: numVal, invalidMsg: validationError });\n }, []);\n\n /**\n * Valideer de waarde in de input\n */\n const validate = React.useCallback(\n (value: number, desc: string) => {\n if (state.validation?.min && value < state.validation.min)\n return `${desc} moet groter of gelijk zijn aan ${state.validation.min}`;\n else if (state.validation?.max && value > state.validation.max)\n return `${desc} moet kleiner of gelijk zijn aan ${state.validation.max}`;\n else if (state.validation?.required && !value) return `${desc} is verplicht`;\n else if (state.validation?.onValidate) return state.validation.onValidate(value);\n return '';\n },\n [validation]\n );\n\n React.useEffect(() => {\n const v = value?.toString() ?? '0';\n dispatch({\n type: 'SET',\n value: v.toString(),\n numValue: value ?? 0,\n validation,\n });\n }, [value, validation]);\n\n const containerLabel = { txt: label ?? name, id: id ?? name };\n const error = <InputError stateError={state.invalidMsg} touched={state.touched} outsideError={errorMsg} />;\n\n return (\n <InputContainer size={size} label={containerLabel} error={error} direction={direction ?? 'h'}>\n <div className=\"control has-icons-left has-icons-right\" title={tooltip}>\n <CurrencyInput\n className={className}\n id=\"input-example\"\n name=\"input-name\"\n placeholder=\"Please enter a number\"\n decimalSeparator=\",\"\n defaultValue={value}\n decimalsLimit={2}\n onValueChange={(value?: string, name?: string) => handleChange(value ?? '0', name)}\n />\n\n <InputIcons icons={props.icons} valid={state.valid} touched={state.touched} defaultIcon={faEuroSign} />\n </div>\n </InputContainer>\n );\n}\n\nexport { LbrCurrencyInput as CurrencyInput };\nexport type { CurrencyInputProps };\n","/* eslint-disable dot-notation */\n/*\n * gemaakt mbh https://blog.logrocket.com/how-to-create-a-custom-toast-component-with-react/\n * en https://dev.to/aibolik/creating-toast-api-with-react-hooks-1bm8\n */\nimport React from 'react';\nimport {\n faExclamation as warningIcon,\n faInfo as infoIcon,\n faExclamationTriangle as dangerIcon,\n faCheck as successIcon,\n} from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { NotifierItemProps, NotifierProps } from './NotifierProps';\nimport { ColorProp } from '~/loon-react-bulma-types';\n\ntype ReducerActionType = 'add' | 'remove' | 'clear';\n\n/** De functie om de state van de notifications aan te passen\n * @param notifierItems de huidige state, dus de huidige notifier items\n * @param action de actie die moet worden uitgevoerd met het type en het item waarop.\n */\nfunction notificationReducer(\n notifierItems: NotifierItemProps[],\n action: { type: ReducerActionType; item: NotifierItemProps | undefined }\n): NotifierItemProps[] {\n switch (action.type) {\n case 'add': // voeg een notificatie toe\n return [...notifierItems, action.item!];\n case 'remove': // haal een notificatie weg\n return notifierItems.filter((item) => action.item!.id != item.id);\n case 'clear': // haal alle notificaties weg\n return [];\n }\n}\n\n/**\n * een component om notificaties in weer te geven, die na verloop van tijd weer verdwijnen. Dat is per notificatie instelbaar.\n * Notificaties hebben ook een click-handler om een onClick() actie uit te voeren. De notificatie wordt dan ook gesloten.\n * @param props\n * @returns een Notificatie-component die (tijdelijke) berichtjes weergeeft aan de rechterkant van het scherm.\n */\nexport function Notifier(props: NotifierProps): JSX.Element {\n const [notifications, updateNotifications] = React.useReducer(notificationReducer, []);\n const [lastNotificationID, setLastNotificationID] = React.useState<number | undefined>(undefined);\n const [lastDeleted, setLastDeleted] = React.useState<number | undefined>(undefined);\n const [clearedAt, setLastCleared] = React.useState<Date>(props.clearTime);\n\n React.useEffect(() => {\n if (props.next && props.next.id != lastNotificationID) {\n setLastNotificationID(props.next.id);\n updateNotifications({ type: 'add', item: props.next });\n }\n }, [props.next]);\n\n React.useEffect(() => {\n if (props.clearTime != clearedAt) {\n updateNotifications({ type: 'clear', item: undefined });\n setLastCleared(props.clearTime);\n }\n }, [props.clearTime]);\n\n React.useEffect(() => {\n if (props.del != lastDeleted) {\n const n = notifications.find((item) => item.id === props.del);\n updateNotifications({ type: 'remove', item: n! });\n setLastDeleted(props.del);\n }\n }, [props.del]);\n\n const notifierClasses =\n 'notifications-container' + (props.location && props.location === 'bottom' ? ' at-bottom' : ' at-top');\n return (\n <div className={notifierClasses} data-testid=\"notifier-container\">\n {notifications.map((n: NotifierItemProps) => {\n const dismissTime = n.dismissAfter ?? n.dismissAfter ?? props.defaultDismissTime ?? 5000;\n return (\n <NotifierItem\n key={n.id}\n dismissAfter={dismissTime}\n type={n.type}\n onClick={(e: any) => n.onClick && n.onClick(e)}\n onDismiss={() => updateNotifications({ type: 'remove', item: n })}\n >\n {n.content}\n </NotifierItem>\n );\n })}\n </div>\n );\n}\n\n/**\n * Maak de uiteindelijke notificatie\n * @param props { dismissAfter, timerID, onClick, onDismiss}\n * @returns een notificatie\n */\nfunction NotifierItem(props: {\n children: React.ReactNode;\n onDismiss: () => void;\n onClick?: (e: any) => void;\n dismissAfter: number;\n type?: ColorProp;\n}): JSX.Element {\n React.useEffect(() => {\n const timer: NodeJS.Timeout | null =\n props.dismissAfter > 0\n ? setTimeout(() => {\n props.onDismiss();\n }, props.dismissAfter)\n : null;\n return () => {\n if (timer) clearTimeout(timer);\n };\n }, []);\n\n const handleClick = (e: any) => {\n if (props.onClick) props.onClick(e);\n props.onDismiss();\n };\n\n let classes = 'notification';\n let icon;\n switch (true) {\n case props.type == 's':\n classes += ' is-success';\n icon = successIcon;\n break;\n case props.type == 'd':\n classes += ' is-danger';\n icon = dangerIcon;\n break;\n case props.type == 'w':\n classes += ' is-warning';\n icon = warningIcon;\n break;\n case props.type == 'p':\n classes += ' is-primary';\n icon = warningIcon;\n break;\n case props.type == 'l':\n classes += ' is-link';\n icon = warningIcon;\n break;\n default:\n classes += ' is-info';\n icon = infoIcon;\n break;\n }\n return (\n <div\n onClick={(e: any) => handleClick(e)}\n className={classes}\n style={{\n zIndex: 9999,\n position: 'relative',\n cursor: props.onClick && 'pointer',\n marginBottom: '0.5em',\n boxShadow: '2px 2px 20px -4px #333 ',\n }}\n >\n <div>\n <span className=\"icon is-medium mr-2\" style={{ float: 'left' }}>\n <FontAwesomeIcon icon={icon} />\n </span>\n {props.children}\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { Notifier } from './Notifier';\nimport { NotifierItemProps, NotifierProviderProps } from './NotifierProps';\n\nexport type NotifierContextType = {\n /** toon een notificatie\n * @param notification de notificatie-data\n * @returns ID van de notificatie (om te kunnen verwijderen)\n */\n notify: (notification: NotifierItemProps) => number;\n /** verwijder een notificatie\n * @param id ID van de notificatie\n */\n remove: (id: number) => void;\n /**\n * Verwijder ALLE notificaties\n */\n clear: () => void;\n};\n\nconst NotifierContext = React.createContext<NotifierContextType | null>(null);\nNotifierContext.displayName = 'NotifierContext';\n\n/** provider voor de notifier.\n * De inhoud van de app moet binnen deze <NotifierProvider>...</NotifierProvider vallen.\n * De notifier is dan via de hook @see useNotifier te gebruiken in child-components van de App zelf, niet in APP!\n * @param props: bevat alleen de children van de notifier, dus ook van de app.\n * @example\n * <NotifierProvider>\n * <App />\n * </NotifierProvider>\n * */\nexport const NotifierProvider = (props: NotifierProviderProps) => {\n const [notification, setNotification] = React.useState<NotifierItemProps | undefined>(undefined);\n const [lastDeleted, setLastDeleted] = React.useState<number | undefined>(undefined);\n const [clearTime, setCleared] = React.useState<Date>(new Date());\n\n /** post een notificatie */\n const notify = React.useCallback(\n (notification: NotifierItemProps): number => {\n if (notification.id == undefined) notification.id = Math.floor(Math.random() * 10_000_000);\n setNotification(notification);\n return notification.id;\n },\n [setNotification]\n );\n\n /** verwijder een notificatie */\n const remove = React.useCallback(\n (id: number) => {\n setLastDeleted(id);\n },\n [setLastDeleted]\n );\n\n /** Verwijder ALLE notificaties */\n const clear = React.useCallback(() => {\n setNotification(undefined);\n setLastDeleted(undefined);\n setCleared(new Date());\n }, [setLastDeleted]);\n\n const values: NotifierContextType = {\n notify,\n remove,\n clear,\n };\n return (\n <React.Fragment>\n <Notifier\n defaultDismissTime={props.defaultAutoDismiss}\n next={notification}\n del={lastDeleted}\n clearTime={clearTime}\n location={props.location ?? 'top'}\n />\n <NotifierContext.Provider value={values}>{props.children}</NotifierContext.Provider>\n </React.Fragment>\n );\n};\n\n/** React Hook om notificaties in de notifier te beïnvloeden\n * @function notify(n: NotifierItemProps): toon een notificatie, returns ID\n * @function remove(id: number): verwijder een notificatie obv ID\n * @function clear(): verwijder alle notificaties\n * @example\n * const { notify, remove, clear } = useNotifier();\n */\nexport function useNotifier(): NotifierContextType {\n const notifierHelpers = React.useContext<NotifierContextType | null>(NotifierContext);\n if (!notifierHelpers) throw new Error('useNotifier must be used inside a NotifierProvider');\n return notifierHelpers;\n}\n","import React, { Dispatch } from 'react';\nimport { Box, ButtonGroup, Button } from '~/components';\n\ntype ConfirmContextType = {\n setState: Dispatch<ActionType>;\n state: State;\n};\ntype ActionType = {\n type: 'SHOW' | 'HIDE' | 'UPDATE';\n payload?: {\n content?: string | React.ReactNode;\n };\n ok?: string;\n cancel?: string;\n others?: React.ReactNode;\n};\ntype State = {\n show: boolean;\n content: string | React.ReactNode;\n ok: string;\n cancel: string;\n others?: React.ReactNode;\n};\n\nlet resolveCallback: any;\nconst ConfirmContext = React.createContext<ConfirmContextType | null>(null);\nConfirmContext.displayName = 'ConfirmContext';\n\n/**\n * Confirm provider om `useConfirm`-hook te kunnen gebruiken.\n * @param children de children\n * @returns\n * @example // index.tsx of App.tsx\n * root.render(\n * <ConfirmProvider>\n * <>\n * // ...\n * </>\n * </ConfirmProvider>)\n */\nfunction ConfirmProvider({ children }: { children: React.ReactNode }): JSX.Element {\n const [state, setState] = React.useReducer(confirmReducer, initialState);\n\n return (\n <ConfirmContext.Provider value={{ state, setState }}>\n <ConfirmDialog />\n {children}\n </ConfirmContext.Provider>\n );\n}\n\nconst initialState: State = {\n show: false,\n content: '',\n ok: 'Ok',\n cancel: 'Annuleren',\n others: undefined,\n};\n\n/** reducer-function voor de confirm state */\nfunction confirmReducer(state: State = initialState, action: ActionType): State {\n switch (action.type) {\n case 'SHOW':\n return {\n ...state,\n show: true,\n content: action.payload?.content,\n ok: action.ok ?? 'Ok',\n cancel: action.cancel ?? 'Annuleren',\n others: action.others,\n };\n case 'HIDE':\n return initialState;\n // case 'UPDATE':\n // return { ...state, ok: action.ok, cancel: action.cancel };\n\n default:\n return initialState;\n }\n}\n\n/**\n * Hook voor de confirmation\n * @param ok tekst voor op de OK-button (default = 'Ok')\n * @param cancel tekst voor opd e cancel-button (default = 'Annuleren')\n * @param others eventuele andere buttons (default = undefined)\n * @returns onConfirm-fn, onCancel-fn, confirm-fn, confirmState\n * @example\n * const { confirm } = useConfirm(\"Ja\", \"Nee\", <Button>Extra</Button>);\n * const confirmSomethingFromString = (msg: string) => {\n * const isConfirmed = await (confirm(msg))\n * }\n * @example\n * const { confirm } = useConfirm(\"Ja\", \"Nee\", <Button>Extra</Button>);\n * const confirmSomethingFromFragment = (fragment: React.ReactNode) => {\n * const isConfirmed = await (confirm(fragment))\n * }\n */\nfunction useConfirm(\n ok: string = 'OK',\n cancel: string = 'Annuleren',\n others: React.ReactNode = undefined\n): {\n /** INTERNAL USE ONLY - DO NOT USE */\n onConfirm: () => void;\n /** INTERNAL USE ONLY - DO NOT USE */\n onCancel: () => void;\n /**\n * awaitable confirm function. Geef een string of Fragment op om iets in de confirm-modal te tonen\n * @param content string of Fragment met de boodschap voor de confirm\n * @returns Promise<boolean> met true als de gebruiker op OK heeft geklikt, false als anders\n * @example const isConfirmed = await confirm(\"Weet je het zeker?\")\n */\n confirm: (content: string | React.ReactNode) => Promise<boolean>;\n /** INTERNAL USE ONLY - DO NOT USE */\n confirmState: State;\n} {\n const confirmContext = React.useContext<ConfirmContextType | null>(ConfirmContext);\n if (!confirmContext) throw new Error('useConfirm must be used inside a ConfirmProvider');\n\n /** INTERNAL USE ONLY */\n const onConfirm = () => {\n closeConfirm();\n resolveCallback(true);\n };\n\n /** INTERNAL USE ONLY */\n const onCancel = () => {\n closeConfirm();\n resolveCallback(false);\n };\n\n const confirm = (content: string | React.ReactNode): Promise<boolean> => {\n confirmContext.setState({ ...confirmContext.state, type: 'SHOW', payload: { content }, ok, cancel, others });\n\n return new Promise(function (resolve) {\n resolveCallback = resolve;\n });\n };\n\n const closeConfirm = () => {\n confirmContext.setState({ type: 'HIDE', payload: undefined });\n };\n\n return { confirm, onConfirm, onCancel, confirmState: confirmContext.state };\n}\n\nfunction ConfirmDialog() {\n const { onConfirm, onCancel, confirmState } = useConfirm();\n\n return confirmState.show ? (\n <div className=\"modal is-active\">\n <div className=\"modal-background\"></div>\n <div className=\"modal-content\">\n <Box>\n {typeof confirmState.content === 'string' && <p>{confirmState?.content}</p>}\n {typeof confirmState.content !== 'string' && confirmState?.content}\n <ButtonGroup alignment=\"c\" className=\"mt-6\">\n <Button.Success onClick={onConfirm}>{confirmState.ok}</Button.Success>\n <Button.Danger onClick={onCancel}>{confirmState.cancel}</Button.Danger>\n {confirmState.others}\n </ButtonGroup>\n </Box>\n </div>\n </div>\n ) : null;\n}\n\nexport { ConfirmProvider, useConfirm };\n"],"names":["AspectRatio","props","figClasses","ratio","className","trim","React","caption","placement","text","children","Box","classes","styles","style","Columns","gap","multiline","centered","C","Column","narrow","Full","Half","Thirds","One","Two","Quarters","Three","Fifths","Four","Twelves","Five","Six","Seven","Eight","Nine","Ten","Eleven","Twelve","displayName","Container","Wide","Widest","Max","Content","size","Footer","alignment","containerClasses","Hero","heroColorFor","Children","map","child","HeroHead","useState","burgerActive","setBurgerActive","burgerClasses","menuClasses","role","onClick","id","Button","title","tooltip","Link","href","to","target","rel","Head","Body","Foot","NavList","NavItem","active","undefined","Image","imgWidth","imgClasses","isRounded","width","src","alt","figCaption","Section","Horizontal","isNaN","row","col","itemStyle","useMemo","maxWidth","maxItemWidth","minWidth","minItemWidth","containerStyle","display","flexDirection","reverse","flexWrap","wrap","justifyContent","alignItems","alignContent","overflowX","paddingBottom","toArray","index","key","Vertical","overflowY","maxHeight","NaN","ScrollArea","useClipboard","timeout","error","setError","copied","setCopied","copyTimeout","setCopyTimeout","handleCopyResult","value","clearTimeout","setTimeout","copy","valueToCopy","navigator","clipboard","writeText","then","catch","err","Error","reset","useDebouncedValue","options","leading","delay","_value","setValue","mountedRef","useRef","timeoutRef","cooldownRef","cancel","window","current","useEffect","parseHotkey","hotkey","keys","toLowerCase","split","part","modifiers","includes","ctrl","meta","mod","shift","reservedKeys","freeKey","find","isExactHotkey","event","altKey","ctrlKey","metaKey","shiftKey","pressedKey","code","replace","getHotkeyMatcher","getHotkeyHandler","hotkeys","forEach","handler","nativeEvent","preventDefault","shouldFireEvent","HTMLElement","tagName","useHotkeys","keydownListener","document","documentElement","addEventListener","removeEventListener","serializeJSON","JSON","stringify","message","deserializeJSON","parse","useLocalStoredState","initialValue","deserialize","serialize","item","localStorage","getItem","console","storedValue","setStoredValue","useCallback","val","Function","setItem","remove","removeItem","useUncontrolled","defaultValue","finalValue","rule","onChange","onValueUpdate","isControlled","modeRef","uncontrolledValue","setUncontrolledValue","definitiveValue","mode","handleChange","nextValue","DOTS","usePagination","total","siblings","boundaries","page","initialPage","_page","activePage","setActivePage","setPage","pageNumber","next","prev","first","last","range","start","end","length","Array","from","_","i","paginationRange","totalPageNumbers","leftSiblingIndex","Math","max","rightSiblingIndex","min","shouldShowLeftDots","shouldShowRightDots","leftItemCount","rightItemCount","useToggle","initialState","state","setState","toggle","useBoolToggle","useValidatedState","validation","initialValid","initialMsg","valid","setValid","invalidMsg","setInvalidMsg","lastValidValue","setLastValidValue","isValid","dataTableReducer","action","type","newState","items","filteredItems","visibleItems","splice","maxRows","currentPage","headers","headerMapping","sort","DataTable","fullwidth","bordered","striped","hoverable","searchTerm","setSearchTerm","defaultSort","defaultSortCol","firstCol","columns","filter","h","header","initialStateFn","data","useReducer","dataTableState","setDataTableState","onSearch","endsWith","sorted","onSort","pageChanged","handleSort","sortCol","sortColHeader","sortColumn","defaultSortItems","e","handleSearch","searchRslts","searchStr","newData","rgx","createValidRegex","toString","test","onRowClicked","onRowSelected","pagination","ceil","p","Fragment","searchTxt","headerContent","Header","content","placeholder","onSearchTermChanged","term","onNoRowsToRender","TableHead","titles","currentSort","TableBody","rowClasses","rowIdentifier","r","pageCount","onPageChange","num","rows","obj","rowIndex","rowClass","currentTarget","cellIndex","align","cellClass","columnClasses","FontAwesomeIcon","icon","faSortDown","faSortUp","faSort","htmlFor","faSearch","dotscounter","s","startsWith","RegExp","replaceAll","a","b","valA","valB","Icon","faSize","color","rotation","flip","spin","animate","pulse","IconText","Indicator","label","position","indicatorClasses","Kbd","classNames","Kbds","separator","Menu","initialItem","activeItem","setActiveItem","handleMenuItemClick","onMenuItemClicked","menuContent","MenuItem","InternMenuItem","onInternClick","MenuItemGroup","InternMenuItemGroup","ExpandableMenuItem","InternExpandableMenuItem","name","startExpanded","expanded","setExpanded","handleOnClick","faChevronUp","faChevronDown","c","Item","ItemGroup","ExpandableItem","Message","infoIcon","successIcon","dangerIcon","warningIcon","hasHeader","iconClasses","float","Primary","Success","Danger","Warning","Info","warnPackageUser","msg","force","args","process","env","NODE_ENV","warning","Modal","onCloseModal","onDismiss","classList","add","modalWidth","InternHead","InternBody","InternFoot","Notification","timer","autoDismissAfter","handleDismiss","dismissTimer","DismissButton","NotificationContent","hovered","setHovered","onMouseEnter","onMouseLeave","closeIcon","ProgressBar","extension","SimpleTable","rowKey","handleRowClick","rowEl","createColumns","SimpleTableHead","SimpleTableBody","hasFooter","SimpleTableFoot","f","firstEl","cols","k","kv","Object","Steps","activeStepIndex","activeStep","setActiveStep","handleStepChange","stepKey","onChangeStep","isDisabled","freeStepChoice","InternStepsItem","disabled","handleClick","setStatus","status","statusUpdate","newStatus","marker","details","TabBar","activeTab","initialTab","setActiveTab","onTabSelected","onTabChange","styling","tabItems","TabBarItemWrapper","isActive","tabId","TabBarItem","itemContent","Tag","light","rounded","Tags","merged","TimeLine","Point","heading","markerClassName","Title","bulmaSize","hSize","headingSize","txt","Subtitle","TitleWithSubtitle","parseInt","titleTxt","subtitleTxt","ToggleBar","toggledItem","setToggledItem","handleToggle","onToggle","toggleName","identifier","join","ToggleItem","InternToggleItem","toggled","onColor","offColor","outlined","onToggleClick","OnOffToggleItem","InternOnOffToggleItem","propColor","setToggled","toggleColor","OnOffItem","ButtonGroup","hasAddons","loading","Static","LinkButton","isLeapYear","date","year","getFullYear","startOfYear","Date","getHours","getMinutes","getSeconds","getMilliseconds","endOfYear","startOfMonth","getMonth","endOfMonth","startOfWeek","newDate","diff","getDate","getDay","setDate","endOfWeek","lastDay","startOfDay","setHours","endOfDay","weekNrForDate","UTC","setUTCDate","getUTCDate","getUTCDay","yrStart","getUTCFullYear","weekNR","getTime","addYears","n","setFullYear","addMonths","setMonth","addDays","dt","addHours","addMinutes","setMinutes","addSeconds","setSeconds","addMilliseconds","ms","setMilliseconds","isBetween","include","format","isToday","today","timeString","AM_PM","locale","toLocaleTimeString","hour","hour12","minute","second","part1","amOrPm","substring","padStart","dateString","toLocaleDateString","day","month","weekDay","dayNum","monthName","toLocaleString","weekday","relativeTime","unit","rtf","Intl","RelativeTimeFormat","numeric","v","minutesBetween","hoursBetween","daysBetween","weeksBetween","monthsBetween","yearsBetween","date1","date2","months","timeDiff","JSDateTime","formatOptions","_date","_locale","defaultFormatOptions","timeZone","defaultTimezone","freeze","valueOf","intlDtf","dtfOptions","DateTimeFormat","set","millisecond","startOf","period","JSDate","fromDate","endOf","daysInMonth","plus","addVals","years","weeks","days","hours","minutes","seconds","milliseconds","dates","isBefore","includeEqual","isAfter","hasSame","dstDate","yr","m","d","hr","sec","equals","clone","fromMillis","now","defaultLocale","jsdate","epoch","RangeError","dayCount","fromISO","iso","fromUTC","utc","millis","MAX_DATE_NUM","toFormat","rslt","formatBuilder","monthLong","monthShort","dayLong","dayShort","weekNr","isAM","timezoneLong","timezoneShort","timezoneOffsetLongStr","timezoneOffsetShortStr","timezoneOffset","IGNORE_SIGN","prevToken","counter","ignore","allowed","jan","getTimezoneOffset","jul","toISOString","toUTCString","timeZoneName","offsetStr","indexOfPLus","indexOf","signIndex","dayOfYear","resolvedOptions","hasBSN","possibleBSNs","match","matches","bsn","teller","char","push","calculateTxtColor","bgColor","isRGB","clr","hexToRGB","g","uicolors","pow","lum","hex","eventStylesBase","transition","fontSize","height","margin","borderRadius","textAlign","paddingLeft","paddingRight","overflow","textOverflow","headerContainerStylesBase","borderBottom","fontWeight","gridContainerStylesBase","gridTemplateRows","justifyItems","weekNumberStylesBase","backgroundColor","borderRight","borderTop","paddingTop","dayContainerStyleBase","dayDateStyleBase","marginBottom","marginTop","verticalAlign","todayStyleBase","padding","eventKleurBlockStyleBase","marginRight","CalendarColoredItem","desc","isHovered","pickTextColor","eventStyle","evtColor","txtColor","cursor","ref","CalendarItem","eventSpan","MoreEventsView","events","onEventClick","slice","visibleEvents","setVisibleEvents","isExpanded","spanStyle","evt","allDay","allday","startDateTime","timeHM","timed","DayContainer","onDayClick","dayContainerStyle","todayHeaderStyle","doNotMarkToday","marginLeft","dateShort","MonthView","vd","viewDate","orgEvents","visibleDays","Set","setViewDate","eventConverterFn","endDateTime","currDate","datesWithEvents","has","dayStart","dayEnd","dayEvents","setDatesWithEvents","newVd","gridContainerStyles","gridTemplateColumns","MonthViewHeader","MonthViewDayBlocks","dayNames","dayNums","count","headerStyles","dayNameStyles","weekLength","ISO","WeekNumberCell","weekNumStyle","borderTopWidth","AlldayContainer","HourNumber","HourSlot","hourSlotStyle","eventWidth","offsetWidth","WeekTimedItem","eventIndex","diffInMS","minutesAsPixels","marginX","lineHeight","WeekView","daysWithEvents","filteredEvts","headerStyle","todayStyle","Calendar","Month","Week","InputError","stateError","outsideError","touched","InputIcons","icons","defaultIcon","iconLeft","iconRight","faExclamationTriangle","faCheck","endIcon","InputContainer","input","direction","HorizontalInputContainer","VerticalInputContainer","sizeClass","reducer","validate","description","CheckBox","labelTxt","dispatch","newVal","onValueChanged","errorMsg","errorMessage","required","checked","onKeyDown","validationObject","onValidate","DateInput","onBlur","valueAsDate","inputMode","keyboardType","faCalendar","validatie","newDateValue","DateTimeInput","pattern","faCalendarDay","minDate","maxDate","TimeInput","step","faClock","valueA","valueB","MultiRangeInput","sliderStyle","onChangeValue","parseFloat","abs","minDiff","maxDiff","NumberInput","valueAsNumber","faCalculator","RangeInput","ColorInput","inputClasses","outputClasses","faPalette","validatieObj","HiddenInput","createSelectOptions","opts","o","ogs","selectOptions","opt","focused","focus","MultiSelect","visibleRows","handleSelectChange","collection","values","multiple","onFocus","selectedOptions","Select","emailRgx","EmailInput","autoComplete","autocomplete","faAt","PasswordInput","bttnClassName","handlePasswordReadability","passwordReadable","setPaswordReadable","faLock","revealPasswordTooltip","faEyeSlash","faEye","TextArea","inputType","TextInput","validationError","characters","processedVal","toUpperCase","allowedChars","reduce","faKeyboard","Input","pVal","files","filename","FileInput","boxed","path","filenameFormatter","defaultFilenameFormatter","accept","capture","faFileUpload","kiesLabel","nogGeenBestandLabel","RadioGroup","handleSet","RadioItem","InternRadioItem","selectedItem","setter","containerClassName","Radio","Form","allowedContent","method","onSubmit","novalidate","FormLine","InternFormLine","Buttons","FreeSpace","InternFreeSpace","warn","noValidate","Text","Password","Email","Color","Hidden","Number","Range","MultiRange","DateTime","Time","File","Line","Space","fields","updatedFields","findIndex","FormBuilder","fieldMapper","handleValueChange","cv","new","handleModalDismiss","useModal","handleSubmit","URLSearchParams","FormField","fieldProps","FormButtons","buttons","old","submit","other","btn","mustValidate","field","numValue","LbrCurrencyInput","defaultState","strVal","numVal","containerLabel","CurrencyInput","decimalSeparator","decimalsLimit","onValueChange","faEuroSign","notificationReducer","notifierItems","Notifier","notifications","updateNotifications","lastNotificationID","setLastNotificationID","lastDeleted","setLastDeleted","clearTime","clearedAt","setLastCleared","del","notifierClasses","location","dismissTime","dismissAfter","defaultDismissTime","NotifierItem","zIndex","boxShadow","NotifierContext","createContext","NotifierProvider","notification","setNotification","setCleared","notify","floor","random","clear","defaultAutoDismiss","Provider","useNotifier","notifierHelpers","useContext","resolveCallback","ConfirmContext","ConfirmProvider","confirmReducer","ConfirmDialog","show","ok","others","payload","useConfirm","confirmContext","onConfirm","closeConfirm","onCancel","confirm","Promise","resolve","confirmState"],"mappings":"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"}
|