@uva-glass/component-library 1.37.1 → 1.39.0
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/Button.module-DfLXeuUK.js +14 -0
- package/dist/Button.module-DfLXeuUK.js.map +1 -0
- package/dist/{MenuLink-DoSTuelN.js → MenuLink-CSnr2Az4.js} +6 -6
- package/dist/MenuLink-CSnr2Az4.js.map +1 -0
- package/dist/{MultiSelect-Drcfmp0z.js → MultiSelect-Blc_VDxu.js} +2 -2
- package/dist/{MultiSelect-Drcfmp0z.js.map → MultiSelect-Blc_VDxu.js.map} +1 -1
- package/dist/MultiSelectItem-CPf7drsR.js +24 -0
- package/dist/MultiSelectItem-CPf7drsR.js.map +1 -0
- package/dist/assets/ActionList.css +1 -0
- package/dist/assets/Button.css +1 -1
- package/dist/assets/Container.css +1 -1
- package/dist/assets/CourseCard.css +1 -0
- package/dist/assets/CourseCardHeader.css +1 -0
- package/dist/assets/CourseCardOffering.css +1 -0
- package/dist/assets/MultiSelectItem.css +1 -1
- package/dist/assets/Periods.css +1 -0
- package/dist/assets/StatusPill.css +1 -1
- package/dist/components/Accordion/Accordion.stories.d.ts +2 -2
- package/dist/components/ActionList/ActionList.d.ts +12 -0
- package/dist/components/ActionList/ActionList.js +76 -0
- package/dist/components/ActionList/ActionList.js.map +1 -0
- package/dist/components/ActionList/ActionList.stories.d.ts +6 -0
- package/dist/components/ActionList/ActionList.stories.js +29 -0
- package/dist/components/ActionList/ActionList.stories.js.map +1 -0
- package/dist/components/ActionList/index.d.ts +1 -0
- package/dist/components/ActionList/index.js +5 -0
- package/dist/components/ActionList/index.js.map +1 -0
- package/dist/components/AppStatusBar/AppStatusBar.stories.d.ts +1 -1
- package/dist/components/Attention/Attention.stories.d.ts +1 -1
- package/dist/components/Backdrop/Backdrop.stories.d.ts +1 -1
- package/dist/components/Button/Button.js +14 -21
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Button/Button.stories.d.ts +2 -2
- package/dist/components/Button/Button.stories.js +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.stories.d.ts +1 -1
- package/dist/components/Card/Card.stories.d.ts +3 -3
- package/dist/components/Checkbox/Checkbox.stories.d.ts +1 -1
- package/dist/components/Checkbox/Checkbox.stories.js +1 -1
- package/dist/components/CourseCard/CourseCard.d.ts +33 -0
- package/dist/components/CourseCard/CourseCard.js +50 -0
- package/dist/components/CourseCard/CourseCard.js.map +1 -0
- package/dist/components/CourseCard/CourseCard.stories.d.ts +7 -0
- package/dist/components/CourseCard/CourseCard.stories.js +461 -0
- package/dist/components/CourseCard/CourseCard.stories.js.map +1 -0
- package/dist/components/CourseCard/CourseCardHeader/CourseCardHeader.d.ts +13 -0
- package/dist/components/CourseCard/CourseCardHeader/CourseCardHeader.js +39 -0
- package/dist/components/CourseCard/CourseCardHeader/CourseCardHeader.js.map +1 -0
- package/dist/components/CourseCard/CourseCardHeader/index.d.ts +1 -0
- package/dist/components/CourseCard/CourseCardHeader/index.js +5 -0
- package/dist/components/CourseCard/CourseCardHeader/index.js.map +1 -0
- package/dist/components/CourseCard/CourseCardOffering/CourseCardOffering.d.ts +8 -0
- package/dist/components/CourseCard/CourseCardOffering/CourseCardOffering.js +24 -0
- package/dist/components/CourseCard/CourseCardOffering/CourseCardOffering.js.map +1 -0
- package/dist/components/CourseCard/CourseCardOffering/index.d.ts +1 -0
- package/dist/components/CourseCard/CourseCardOffering/index.js +5 -0
- package/dist/components/CourseCard/CourseCardOffering/index.js.map +1 -0
- package/dist/components/CourseCard/index.d.ts +1 -0
- package/dist/components/CourseCard/index.js +5 -0
- package/dist/components/CourseCard/index.js.map +1 -0
- package/dist/components/CourseCard/mockdata.d.ts +23 -0
- package/dist/components/Drawer/Drawer.js +1 -1
- package/dist/components/Drawer/Drawer.stories.d.ts +2 -2
- package/dist/components/Drawer/Drawer.stories.js +2 -2
- package/dist/components/FieldHint/FieldHint.stories.d.ts +2 -2
- package/dist/components/Fieldset/Fieldset.stories.d.ts +2 -2
- package/dist/components/FormField/FormField.stories.d.ts +1 -1
- package/dist/components/GridRow/GridRow.stories.d.ts +2 -2
- package/dist/components/HorizontalList/HorizontalList.stories.d.ts +1 -1
- package/dist/components/Icon/Icon.stories.d.ts +1 -1
- package/dist/components/Icon/icons/index.d.ts +6 -0
- package/dist/components/Icon/icons/index.js +40 -38
- package/dist/components/Icon/icons/index.js.map +1 -1
- package/dist/components/IconButton/IconButton.stories.d.ts +1 -1
- package/dist/components/IconButton/IconButton.stories.js +1 -1
- package/dist/components/InfoMessage/InfoMessage.stories.d.ts +1 -1
- package/dist/components/Input/Input.stories.d.ts +4 -4
- package/dist/components/InputField/InputField.stories.d.ts +3 -3
- package/dist/components/InputField/InputField.stories.js +2 -2
- package/dist/components/Label/Label.stories.d.ts +2 -2
- package/dist/components/MenuButton/MenuButton.d.ts +13 -0
- package/dist/components/MenuButton/MenuButton.js +621 -0
- package/dist/components/MenuButton/MenuButton.js.map +1 -0
- package/dist/components/MenuButton/MenuButton.stories.d.ts +8 -0
- package/dist/components/MenuButton/MenuButton.stories.js +58 -0
- package/dist/components/MenuButton/MenuButton.stories.js.map +1 -0
- package/dist/components/MenuButton/index.d.ts +1 -0
- package/dist/components/MenuButton/index.js +5 -0
- package/dist/components/MenuButton/index.js.map +1 -0
- package/dist/components/MenuLink/MenuLink.js +1 -1
- package/dist/components/MenuLink/MenuLink.stories.d.ts +1 -1
- package/dist/components/MenuLink/MenuLink.stories.js +1 -1
- package/dist/components/MenuLink/index.js +1 -1
- package/dist/components/MetaDataList/MetaDataList.stories.d.ts +1 -1
- package/dist/components/ModalDialog/ModalDialog.js +1 -1
- package/dist/components/ModalDialog/ModalDialog.stories.d.ts +2 -2
- package/dist/components/ModalDialog/ModalDialog.stories.js +2 -2
- package/dist/components/MultiSelect/MultiSelect.js +2 -2
- package/dist/components/MultiSelect/MultiSelect.stories.d.ts +3 -3
- package/dist/components/MultiSelect/MultiSelect.stories.js +25 -24
- package/dist/components/MultiSelect/MultiSelect.stories.js.map +1 -1
- package/dist/components/MultiSelect/components/MultiSelectHeader.js +2 -2
- package/dist/components/MultiSelect/components/MultiSelectItem.d.ts +2 -1
- package/dist/components/MultiSelect/components/MultiSelectItem.js +1 -1
- package/dist/components/MultiSelect/index.js +1 -1
- package/dist/components/OverlayCloseButton/OverlayCloseButton.stories.d.ts +1 -1
- package/dist/components/OverlayCloseButton/OverlayCloseButton.stories.js +1 -1
- package/dist/components/Periods/Periods.d.ts +13 -0
- package/dist/components/Periods/Periods.js +35 -0
- package/dist/components/Periods/Periods.js.map +1 -0
- package/dist/components/Periods/Periods.stories.d.ts +6 -0
- package/dist/components/Periods/Periods.stories.js +54 -0
- package/dist/components/Periods/Periods.stories.js.map +1 -0
- package/dist/components/Periods/index.d.ts +1 -0
- package/dist/components/Periods/index.js +5 -0
- package/dist/components/Periods/index.js.map +1 -0
- package/dist/components/ProgrammeCard/ProgrammeCard.stories.d.ts +3 -3
- package/dist/components/ProgrammeCard/ProgrammeCard.stories.js +2 -2
- package/dist/components/RadioButton/RadioButton.stories.d.ts +1 -1
- package/dist/components/Repeater/Repeater.stories.d.ts +1 -1
- package/dist/components/SectionNotification/SectionNotification.stories.d.ts +1 -1
- package/dist/components/SelectListbox/SelectListBox.stories.d.ts +2 -2
- package/dist/components/SelectListbox/SelectListBox.stories.js +1 -1
- package/dist/components/Spinner/Spinner.stories.d.ts +1 -1
- package/dist/components/StatusPill/StatusPill.d.ts +1 -1
- package/dist/components/StatusPill/StatusPill.js +8 -7
- package/dist/components/StatusPill/StatusPill.js.map +1 -1
- package/dist/components/StatusPill/StatusPill.stories.d.ts +1 -1
- package/dist/components/Tooltip/Tooltip.stories.d.ts +1 -1
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.js +73 -65
- package/dist/components/index.js.map +1 -1
- package/dist/components/storyComponents/Container/Container.js +12 -12
- package/dist/focusSafely-b94Glb9J.js +402 -0
- package/dist/focusSafely-b94Glb9J.js.map +1 -0
- package/dist/index-0Faxlks_.js +25525 -0
- package/dist/index-0Faxlks_.js.map +1 -0
- package/dist/{index-BNwc4sai.js → index-HuvfQN5H.js} +427 -425
- package/dist/{index-BNwc4sai.js.map → index-HuvfQN5H.js.map} +1 -1
- package/dist/index.js +73 -65
- package/dist/index.js.map +1 -1
- package/dist/types/UserInterface.d.ts +4 -0
- package/dist/types/UserInterface.js +2 -0
- package/dist/types/UserInterface.js.map +1 -0
- package/dist/useDialog-DZhIlo2a.js +785 -0
- package/dist/useDialog-DZhIlo2a.js.map +1 -0
- package/package.json +30 -27
- package/dist/MenuLink-DoSTuelN.js.map +0 -1
- package/dist/MultiSelectItem-CwKowz2B.js +0 -24
- package/dist/MultiSelectItem-CwKowz2B.js.map +0 -1
- package/dist/_commonjsHelpers-DaMA6jEr.js +0 -9
- package/dist/_commonjsHelpers-DaMA6jEr.js.map +0 -1
- package/dist/index-Do6xof80.js +0 -14702
- package/dist/index-Do6xof80.js.map +0 -1
- package/dist/useDialog-D4QXqVAd.js +0 -1133
- package/dist/useDialog-D4QXqVAd.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
._status-
|
|
1
|
+
._status-pill_1dh6p_1{align-items:center;border-radius:1.5rem;display:flex;gap:.25rem;padding:.25rem .5rem;width:fit-content}._status-pill__possible_1dh6p_10{background-color:var(--color-mint-cream);color:var(--color-san-felix)}._status-pill__impossible_1dh6p_15{background-color:var(--color-amour);color:var(--color-uva-red-dark)}._status-pill__new_1dh6p_20{background-color:var(--color-blue-50);color:var(--color-blue-500)}._status-pill--bar_1dh6p_25{border-radius:0;justify-content:center;padding:.5rem;width:100%}
|
|
@@ -3,5 +3,5 @@ import { AccordionProps } from './Accordion';
|
|
|
3
3
|
|
|
4
4
|
declare const _default: Meta<AccordionProps>;
|
|
5
5
|
export default _default;
|
|
6
|
-
export declare const AccordionExample: import('@storybook/
|
|
7
|
-
export declare const WithComplexProps: import('@storybook/
|
|
6
|
+
export declare const AccordionExample: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, AccordionProps>;
|
|
7
|
+
export declare const WithComplexProps: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, AccordionProps>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
import { IconProps } from 'components/Icon';
|
|
3
|
+
import { UIButtonVariant } from 'types/UserInterface';
|
|
4
|
+
|
|
5
|
+
export interface ActionListProps {
|
|
6
|
+
label: string;
|
|
7
|
+
prefixIcon?: IconProps['name'];
|
|
8
|
+
iconName?: IconProps['name'];
|
|
9
|
+
variant?: UIButtonVariant;
|
|
10
|
+
children: ReactElement | ReactElement[];
|
|
11
|
+
}
|
|
12
|
+
export declare function ActionList({ label, prefixIcon, iconName, variant, children }: ActionListProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsxs as k, jsx as c } from "react/jsx-runtime";
|
|
2
|
+
import { c as T } from "../../clsx-OuTLNxxd.js";
|
|
3
|
+
import { useId as U, useRef as m, Children as w, useState as b, useEffect as D } from "react";
|
|
4
|
+
import { MenuButton as $ } from "../MenuButton/MenuButton.js";
|
|
5
|
+
import { Icon as p } from "../Icon/Icon.js";
|
|
6
|
+
import '../../assets/ActionList.css';const h = {
|
|
7
|
+
"action-list": "_action-list_1vi7f_1",
|
|
8
|
+
"action-list--open": "_action-list--open_1vi7f_13",
|
|
9
|
+
"action-list-container": "_action-list-container_1vi7f_17"
|
|
10
|
+
}, O = -1, s = 1;
|
|
11
|
+
function K({ label: E, prefixIcon: C, iconName: I, variant: L = "secondary", children: a }) {
|
|
12
|
+
const _ = U(), l = m(null), n = m(null), r = m(null), d = w.count(a), [f, i] = b(O), [u, g] = b(!1);
|
|
13
|
+
function R() {
|
|
14
|
+
g(!0), document.addEventListener("click", N, { once: !1, capture: !0 });
|
|
15
|
+
}
|
|
16
|
+
function o(e) {
|
|
17
|
+
var t;
|
|
18
|
+
e && r.current && !r.current.contains(e.target) || (i(O), g(!1), document.removeEventListener("click", N, { capture: !0 }), (t = l.current) == null || t.focus());
|
|
19
|
+
}
|
|
20
|
+
function x() {
|
|
21
|
+
u ? o() : R();
|
|
22
|
+
}
|
|
23
|
+
function y(e) {
|
|
24
|
+
if (!u) return;
|
|
25
|
+
if (["ArrowUp", "ArrowDown", "Home", "End"].includes(e.code)) {
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
e.code === "Tab" && o();
|
|
30
|
+
}
|
|
31
|
+
function A(e) {
|
|
32
|
+
(e.code === "Space" || e.key === "Enter") && (e.target === l.current ? x() : e.key === "Enter" && e.target !== n.current && "firstChild" in e.target && e.target.firstChild.click()), e.code === "Escape" && o(), e.code === "ArrowUp" && i((t) => t === 0 ? d - s : t - s), e.code === "ArrowDown" && i((t) => t === d - s ? 0 : t + s), e.code === "Home" && i(0), e.code === "End" && i(d - s);
|
|
33
|
+
}
|
|
34
|
+
const N = (e) => {
|
|
35
|
+
const { target: t } = e;
|
|
36
|
+
!t || !r.current || r.current.contains(t) || o();
|
|
37
|
+
};
|
|
38
|
+
return D(() => {
|
|
39
|
+
if (f < 0 || !n.current) return;
|
|
40
|
+
const e = n.current.children.item(f);
|
|
41
|
+
e && e.focus();
|
|
42
|
+
}, [f]), D(() => {
|
|
43
|
+
!n.current || !n.current.hasChildNodes() || Array.from(n.current.children).filter((e) => e.nodeType === Node.ELEMENT_NODE && e.hasChildNodes()).forEach((e) => {
|
|
44
|
+
Array.from(e.children).filter((t) => t.nodeType === Node.ELEMENT_NODE).forEach((t) => {
|
|
45
|
+
t.setAttribute("tabIndex", "-1");
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}, [a]), /* @__PURE__ */ k("div", { className: h["action-list-container"], ref: r, children: [
|
|
49
|
+
/* @__PURE__ */ k($, { onClick: x, onKeyDown: y, onKeyUp: A, buttonRef: l, variant: L, children: [
|
|
50
|
+
C && /* @__PURE__ */ c(p, { size: 24, name: C }),
|
|
51
|
+
E,
|
|
52
|
+
I ? /* @__PURE__ */ c(p, { size: 24, name: I }) : /* @__PURE__ */ c(p, { size: 16, name: u ? "CheveronUp" : "CheveronDown" })
|
|
53
|
+
] }),
|
|
54
|
+
/* @__PURE__ */ c(
|
|
55
|
+
"div",
|
|
56
|
+
{
|
|
57
|
+
"aria-activedescendant": `${_}-child-${f}`,
|
|
58
|
+
"aria-label": E,
|
|
59
|
+
className: T(h["action-list"], {
|
|
60
|
+
[h["action-list--open"]]: u
|
|
61
|
+
}),
|
|
62
|
+
onClickCapture: o,
|
|
63
|
+
onKeyDown: y,
|
|
64
|
+
onKeyUp: A,
|
|
65
|
+
ref: n,
|
|
66
|
+
role: "menu",
|
|
67
|
+
tabIndex: -1,
|
|
68
|
+
children: w.map(a, (e, t) => /* @__PURE__ */ c("div", { role: "menuitem", tabIndex: -1, children: e }, `${_}-child-${t}`))
|
|
69
|
+
}
|
|
70
|
+
)
|
|
71
|
+
] });
|
|
72
|
+
}
|
|
73
|
+
export {
|
|
74
|
+
K as ActionList
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=ActionList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionList.js","sources":["../../../src/components/ActionList/ActionList.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { Children, useEffect, useId, useRef, useState } from 'react';\n\nimport type { KeyboardEvent, ReactElement, MouseEvent as ReactMouseEvent } from 'react';\nimport type { IconProps } from 'components/Icon';\nimport type { UIButtonVariant } from 'types/UserInterface';\n\nimport styles from './ActionList.module.css';\n\nimport { MenuButton } from 'components/MenuButton';\nimport { Icon } from 'components/Icon';\n\nexport interface ActionListProps {\n label: string;\n prefixIcon?: IconProps['name'];\n iconName?: IconProps['name'];\n variant?: UIButtonVariant;\n children: ReactElement | ReactElement[];\n}\n\nconst inactiveIndex = -1;\nconst indexIncrement = 1;\n\nexport function ActionList({ label, prefixIcon, iconName, variant = 'secondary', children }: ActionListProps) {\n const listId = useId();\n const triggerRef = useRef<HTMLButtonElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const numberOfChildren = Children.count(children);\n\n const [activeIndex, setActiveIndex] = useState(inactiveIndex);\n const [isOpen, setIsOpen] = useState(false);\n\n function open() {\n setIsOpen(true);\n\n document.addEventListener('click', onClickOutside, { once: false, capture: true });\n }\n\n function close(event?: ReactMouseEvent<HTMLDivElement>) {\n // When a click occurs on an element that is not an immediate descendant of the action list container\n // (can happen when a modal window is triggered from a button in the action list), the setIsOpen state\n // handler should not be called, because this causes a re-render of the entire component and can lead\n // to undesired effects, like a select element closing immediately after it has been clicked.\n if (event && containerRef.current && !containerRef.current.contains(event.target as Node)) {\n return;\n }\n\n setActiveIndex(inactiveIndex);\n setIsOpen(false);\n\n document.removeEventListener('click', onClickOutside, { capture: true });\n\n triggerRef.current?.focus();\n }\n\n function toggle() {\n if (isOpen) close();\n else open();\n }\n\n function onKeyDown(event: KeyboardEvent) {\n if (!isOpen) return;\n\n const eventPreventCodes = ['ArrowUp', 'ArrowDown', 'Home', 'End'];\n\n if (eventPreventCodes.includes(event.code)) {\n // prevent page from scrolling when navigating through items in list\n event.preventDefault();\n return;\n }\n\n if (event.code === 'Tab') {\n close();\n }\n }\n\n function onKeyUp(event: KeyboardEvent) {\n if (event.code === 'Space' || event.key === 'Enter') {\n if (event.target === triggerRef.current) {\n toggle();\n } else if (event.key === 'Enter' && event.target !== listRef.current) {\n if ('firstChild' in event.target) {\n const firstChild = event.target.firstChild as HTMLButtonElement;\n\n firstChild.click();\n }\n }\n }\n\n if (event.code === 'Escape') close();\n\n if (event.code === 'ArrowUp') {\n setActiveIndex((prevState) => {\n if (prevState === 0) return numberOfChildren - indexIncrement;\n\n return prevState - indexIncrement;\n });\n }\n\n if (event.code === 'ArrowDown') {\n setActiveIndex((prevState) => {\n if (prevState === numberOfChildren - indexIncrement) return 0;\n\n return prevState + indexIncrement;\n });\n }\n\n if (event.code === 'Home') {\n setActiveIndex(0);\n }\n\n if (event.code === 'End') {\n setActiveIndex(numberOfChildren - indexIncrement);\n }\n }\n\n const onClickOutside = (event: MouseEvent) => {\n const { target } = event;\n\n if (!target || !containerRef.current) return;\n\n if (!containerRef.current.contains(target as Node)) {\n close();\n }\n };\n\n useEffect(() => {\n if (activeIndex < 0 || !listRef.current) return;\n\n const listItem = listRef.current.children.item(activeIndex);\n\n if (listItem) {\n (listItem as HTMLDivElement).focus();\n }\n }, [activeIndex]);\n\n useEffect(() => {\n if (!listRef.current || !listRef.current.hasChildNodes()) return;\n\n Array.from(listRef.current.children)\n .filter((overlayChild) => overlayChild.nodeType === Node.ELEMENT_NODE && overlayChild.hasChildNodes())\n .forEach((overlayChild) => {\n Array.from(overlayChild.children)\n .filter((childOfChild) => childOfChild.nodeType === Node.ELEMENT_NODE)\n .forEach((childOfChild) => {\n // internal children may be buttons and can get focus when tab is pressed; preventing those elements\n // from getting focus so that list can be tabbed over and traversed with arrow keys\n childOfChild.setAttribute('tabIndex', '-1');\n });\n });\n }, [children]);\n\n return (\n <div className={styles['action-list-container']} ref={containerRef}>\n <MenuButton onClick={toggle} onKeyDown={onKeyDown} onKeyUp={onKeyUp} buttonRef={triggerRef} variant={variant}>\n {prefixIcon && <Icon size={24} name={prefixIcon} />}\n {label}\n {iconName ? (\n <Icon size={24} name={iconName} />\n ) : (\n <Icon size={16} name={isOpen ? 'CheveronUp' : 'CheveronDown'} />\n )}\n </MenuButton>\n <div\n aria-activedescendant={`${listId}-child-${activeIndex}`}\n aria-label={label}\n className={clsx(styles['action-list'], {\n [styles['action-list--open']]: isOpen,\n })}\n onClickCapture={close}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n ref={listRef}\n role=\"menu\"\n tabIndex={-1}\n >\n {Children.map(children, (child, index) => (\n <div key={`${listId}-child-${index}`} role=\"menuitem\" tabIndex={-1}>\n {child}\n </div>\n ))}\n </div>\n </div>\n );\n}\n"],"names":["inactiveIndex","indexIncrement","ActionList","label","prefixIcon","iconName","variant","children","listId","useId","triggerRef","useRef","listRef","containerRef","numberOfChildren","Children","activeIndex","setActiveIndex","useState","isOpen","setIsOpen","open","onClickOutside","close","event","_a","toggle","onKeyDown","onKeyUp","prevState","target","useEffect","listItem","overlayChild","childOfChild","styles","jsxs","MenuButton","jsx","Icon","clsx","child","index"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Meta } from '@storybook/react';
|
|
2
|
+
import { ActionListProps } from './ActionList';
|
|
3
|
+
|
|
4
|
+
declare const _default: Meta<ActionListProps>;
|
|
5
|
+
export default _default;
|
|
6
|
+
export declare const ActionListExample: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, ActionListProps>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { ActionList as i } from "./ActionList.js";
|
|
3
|
+
const a = {
|
|
4
|
+
title: "Atoms/ActionList",
|
|
5
|
+
component: i,
|
|
6
|
+
argTypes: {
|
|
7
|
+
variant: {
|
|
8
|
+
options: ["primary", "secondary", "destructive-primary", "destructive-secondary", "blank", "blank-icon"],
|
|
9
|
+
control: { type: "radio" }
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}, o = (n) => /* @__PURE__ */ t("div", { style: { marginLeft: "5rem", width: "40px" }, children: /* @__PURE__ */ t(i, { ...n }) }), e = {
|
|
13
|
+
label: "",
|
|
14
|
+
variant: "blank-icon",
|
|
15
|
+
iconName: "EllipsisVertical",
|
|
16
|
+
children: [
|
|
17
|
+
/* @__PURE__ */ t("button", { type: "button", children: "Action 1" }, "1"),
|
|
18
|
+
/* @__PURE__ */ t("button", { type: "button", children: "Action 2" }, "2"),
|
|
19
|
+
/* @__PURE__ */ t("button", { type: "button", children: "Action 3" }, "3")
|
|
20
|
+
]
|
|
21
|
+
}, r = o.bind({});
|
|
22
|
+
r.args = {
|
|
23
|
+
...e
|
|
24
|
+
};
|
|
25
|
+
export {
|
|
26
|
+
r as ActionListExample,
|
|
27
|
+
a as default
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=ActionList.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionList.stories.js","sources":["../../../src/components/ActionList/ActionList.stories.tsx"],"sourcesContent":["import type { Meta, StoryFn } from '@storybook/react';\nimport type { ActionListProps } from './ActionList';\n\nimport { ActionList } from './ActionList';\n\n// eslint-disable-next-line import/no-default-export\nexport default {\n title: 'Atoms/ActionList',\n component: ActionList,\n argTypes: {\n variant: {\n options: ['primary', 'secondary', 'destructive-primary', 'destructive-secondary', 'blank', 'blank-icon'],\n control: { type: 'radio' },\n },\n },\n} as Meta<ActionListProps>;\n\nconst Template: StoryFn<ActionListProps> = (args) => (\n <div style={{ marginLeft: '5rem', width: '40px' }}>\n <ActionList {...args} />\n </div>\n);\n\nconst defaultArgs: Partial<ActionListProps> = {\n label: '',\n variant: 'blank-icon',\n iconName: 'EllipsisVertical',\n children: [\n <button key=\"1\" type=\"button\">\n Action 1\n </button>,\n <button key=\"2\" type=\"button\">\n Action 2\n </button>,\n <button key=\"3\" type=\"button\">\n Action 3\n </button>,\n ],\n};\n\nexport const ActionListExample = Template.bind({});\nActionListExample.args = {\n ...defaultArgs,\n};\n"],"names":["ActionList_stories","ActionList","Template","args","jsx","defaultArgs","ActionListExample"],"mappings":";;AAMA,MAAeA,IAAA;AAAA,EACb,OAAO;AAAA,EACP,WAAWC;AAAA,EACX,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS,CAAC,WAAW,aAAa,uBAAuB,yBAAyB,SAAS,YAAY;AAAA,MACvG,SAAS,EAAE,MAAM,QAAQ;AAAA,IAC3B;AAAA,EACF;AACF,GAEMC,IAAqC,CAACC,MACzC,gBAAAC,EAAA,OAAA,EAAI,OAAO,EAAE,YAAY,QAAQ,OAAO,OACvC,GAAA,UAAA,gBAAAA,EAACH,GAAY,EAAA,GAAGE,GAAM,EACxB,CAAA,GAGIE,IAAwC;AAAA,EAC5C,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,IACP,gBAAAD,EAAA,UAAA,EAAe,MAAK,UAAS,wBAAlB,GAEZ;AAAA,IACC,gBAAAA,EAAA,UAAA,EAAe,MAAK,UAAS,wBAAlB,GAEZ;AAAA,IACC,gBAAAA,EAAA,UAAA,EAAe,MAAK,UAAS,wBAAlB,GAEZ;AAAA,EACF;AACF,GAEaE,IAAoBJ,EAAS,KAAK,EAAE;AACjDI,EAAkB,OAAO;AAAA,EACvB,GAAGD;AACL;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ActionList';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -6,4 +6,4 @@ interface AppStatusBarProps {
|
|
|
6
6
|
}
|
|
7
7
|
declare const _default: Meta<AppStatusBarProps>;
|
|
8
8
|
export default _default;
|
|
9
|
-
export declare const AppStatusBarExample: import('@storybook/
|
|
9
|
+
export declare const AppStatusBarExample: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, AppStatusBarProps>;
|
|
@@ -3,6 +3,6 @@ import { PropsWithChildren } from 'react';
|
|
|
3
3
|
|
|
4
4
|
declare const _default: Meta<PropsWithChildren>;
|
|
5
5
|
export default _default;
|
|
6
|
-
export declare const AttentionExample: import('@storybook/
|
|
6
|
+
export declare const AttentionExample: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, {
|
|
7
7
|
children?: import('react').ReactNode | undefined;
|
|
8
8
|
}>;
|
|
@@ -6,4 +6,4 @@ type BackdropStoryProps = BackdropProps & {
|
|
|
6
6
|
};
|
|
7
7
|
declare const _default: Meta<BackdropStoryProps>;
|
|
8
8
|
export default _default;
|
|
9
|
-
export declare const BackdropExample: import('@storybook/
|
|
9
|
+
export declare const BackdropExample: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, BackdropStoryProps>;
|
|
@@ -1,30 +1,23 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { c as
|
|
3
|
-
import { forwardRef as
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
"button
|
|
7
|
-
|
|
8
|
-
"button--secondary": "_button--secondary_gc28t_70",
|
|
9
|
-
"button--destructive-primary": "_button--destructive-primary_gc28t_86",
|
|
10
|
-
"button--destructive-secondary": "_button--destructive-secondary_gc28t_104",
|
|
11
|
-
"button--wide-column": "_button--wide-column_gc28t_122"
|
|
12
|
-
}, p = a((o, n) => {
|
|
13
|
-
const { children: r, type: u = "button", variant: c, displayColumn: e = !1, ...s } = o;
|
|
14
|
-
return /* @__PURE__ */ b(
|
|
1
|
+
import { jsx as u } from "react/jsx-runtime";
|
|
2
|
+
import { c as f } from "../../clsx-OuTLNxxd.js";
|
|
3
|
+
import { forwardRef as i } from "react";
|
|
4
|
+
import { s as t } from "../../Button.module-DfLXeuUK.js";
|
|
5
|
+
const d = i((o, r) => {
|
|
6
|
+
const { children: s, type: n = "button", variant: e, displayColumn: m = !1, ...a } = o;
|
|
7
|
+
return /* @__PURE__ */ u(
|
|
15
8
|
"button",
|
|
16
9
|
{
|
|
17
|
-
...
|
|
18
|
-
type:
|
|
19
|
-
ref:
|
|
20
|
-
className:
|
|
21
|
-
[t["button--wide-column"]]:
|
|
10
|
+
...a,
|
|
11
|
+
type: n,
|
|
12
|
+
ref: r,
|
|
13
|
+
className: f(t.button, t[`button--${e}`], {
|
|
14
|
+
[t["button--wide-column"]]: m
|
|
22
15
|
}),
|
|
23
|
-
children:
|
|
16
|
+
children: s
|
|
24
17
|
}
|
|
25
18
|
);
|
|
26
19
|
});
|
|
27
20
|
export {
|
|
28
|
-
|
|
21
|
+
d as Button
|
|
29
22
|
};
|
|
30
23
|
//# sourceMappingURL=Button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef } from 'react';\n\nimport type { ButtonHTMLAttributes, ReactNode } from 'react';\n\nimport styles from './Button.module.css';\n\nexport type UIButtonVariant = 'primary' | 'secondary' | 'destructive-primary' | 'destructive-secondary' | 'blank';\n\nexport interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'style'> {\n variant: UIButtonVariant;\n children: ReactNode;\n displayColumn?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>((props, forwardedRef) => {\n const { children, type = 'button', variant, displayColumn = false, ...restProps } = props;\n\n return (\n <button\n {...restProps}\n type={type}\n ref={forwardedRef}\n className={clsx(styles['button'], styles[`button--${variant}`], {\n [styles['button--wide-column']]: displayColumn,\n })}\n >\n {children}\n </button>\n );\n});\n"],"names":["Button","forwardRef","props","forwardedRef","children","type","variant","displayColumn","restProps","jsx","clsx","styles"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { forwardRef } from 'react';\n\nimport type { ButtonHTMLAttributes, ReactNode } from 'react';\n\nimport styles from './Button.module.css';\n\nexport type UIButtonVariant = 'primary' | 'secondary' | 'destructive-primary' | 'destructive-secondary' | 'blank';\n\nexport interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'style'> {\n variant: UIButtonVariant;\n children: ReactNode;\n displayColumn?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>((props, forwardedRef) => {\n const { children, type = 'button', variant, displayColumn = false, ...restProps } = props;\n\n return (\n <button\n {...restProps}\n type={type}\n ref={forwardedRef}\n className={clsx(styles['button'], styles[`button--${variant}`], {\n [styles['button--wide-column']]: displayColumn,\n })}\n >\n {children}\n </button>\n );\n});\n"],"names":["Button","forwardRef","props","forwardedRef","children","type","variant","displayColumn","restProps","jsx","clsx","styles"],"mappings":";;;;AAeO,MAAMA,IAASC,EAA2C,CAACC,GAAOC,MAAiB;AAClF,QAAA,EAAE,UAAAC,GAAU,MAAAC,IAAO,UAAU,SAAAC,GAAS,eAAAC,IAAgB,IAAO,GAAGC,EAAc,IAAAN;AAGlF,SAAA,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAGD;AAAA,MACJ,MAAAH;AAAA,MACA,KAAKF;AAAA,MACL,WAAWO,EAAKC,EAAO,QAAWA,EAAO,WAAWL,CAAO,EAAE,GAAG;AAAA,QAC9D,CAACK,EAAO,qBAAqB,CAAC,GAAGJ;AAAA,MAAA,CAClC;AAAA,MAEA,UAAAH;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;"}
|
|
@@ -3,5 +3,5 @@ import { ButtonProps } from './Button';
|
|
|
3
3
|
|
|
4
4
|
declare const _default: Meta<ButtonProps>;
|
|
5
5
|
export default _default;
|
|
6
|
-
export declare const ButtonExample: import('@storybook/
|
|
7
|
-
export declare const WithMultipleChildren: import('@storybook/
|
|
6
|
+
export declare const ButtonExample: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, ButtonProps>;
|
|
7
|
+
export declare const WithMultipleChildren: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, ButtonProps>;
|
|
@@ -4,4 +4,4 @@ import { ButtonGroupProps } from './ButtonGroup';
|
|
|
4
4
|
|
|
5
5
|
declare const _default: Meta<PropsWithChildren<ButtonGroupProps>>;
|
|
6
6
|
export default _default;
|
|
7
|
-
export declare const ButtonGroupExample: import('@storybook/
|
|
7
|
+
export declare const ButtonGroupExample: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, PropsWithChildren<ButtonGroupProps>>;
|
|
@@ -4,6 +4,6 @@ import { CardProps } from './Card';
|
|
|
4
4
|
|
|
5
5
|
declare const _default: Meta<PropsWithChildren<CardProps>>;
|
|
6
6
|
export default _default;
|
|
7
|
-
export declare const CardExample: import('@storybook/
|
|
8
|
-
export declare const WithNotification: import('@storybook/
|
|
9
|
-
export declare const WithChildren: import('@storybook/
|
|
7
|
+
export declare const CardExample: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, PropsWithChildren<CardProps>>;
|
|
8
|
+
export declare const WithNotification: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, PropsWithChildren<CardProps>>;
|
|
9
|
+
export declare const WithChildren: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, PropsWithChildren<CardProps>>;
|
|
@@ -3,4 +3,4 @@ import { CheckboxProps } from './Checkbox';
|
|
|
3
3
|
|
|
4
4
|
declare const _default: Meta<CheckboxProps>;
|
|
5
5
|
export default _default;
|
|
6
|
-
export declare const CheckboxExample: import('@storybook/
|
|
6
|
+
export declare const CheckboxExample: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, CheckboxProps>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs as t, jsx as o } from "react/jsx-runtime";
|
|
2
|
-
import { f as m } from "../../index-
|
|
2
|
+
import { f as m } from "../../index-0Faxlks_.js";
|
|
3
3
|
import { Checkbox as e } from "./Checkbox.js";
|
|
4
4
|
import { FormField as i } from "../FormField/FormField.js";
|
|
5
5
|
import { Label as n } from "../Label/Label.js";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
interface Offering {
|
|
2
|
+
academicYear: number;
|
|
3
|
+
courseId: string;
|
|
4
|
+
id: string;
|
|
5
|
+
offeringNumber: number;
|
|
6
|
+
periods: number[];
|
|
7
|
+
maxPeriods: number;
|
|
8
|
+
}
|
|
9
|
+
interface Name {
|
|
10
|
+
EN: string;
|
|
11
|
+
NL: string;
|
|
12
|
+
}
|
|
13
|
+
interface Courses {
|
|
14
|
+
code: string;
|
|
15
|
+
credits: number;
|
|
16
|
+
departmentId: string;
|
|
17
|
+
id: string;
|
|
18
|
+
level: string;
|
|
19
|
+
name: Name;
|
|
20
|
+
offerings: Offering[];
|
|
21
|
+
programmeId: string;
|
|
22
|
+
isNew: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface CourseCardProps {
|
|
25
|
+
course: Courses;
|
|
26
|
+
localeTags: Record<string, Record<'NL' | 'EN', string>>;
|
|
27
|
+
currentLanguage: 'NL' | 'EN';
|
|
28
|
+
actions?: Record<string, string>[];
|
|
29
|
+
onActionClick: ({ action, id }: Record<string, string>) => void;
|
|
30
|
+
onClick?: (id: string) => void;
|
|
31
|
+
}
|
|
32
|
+
export declare const CourseCard: ({ course, localeTags, currentLanguage, actions, onClick }: CourseCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsxs as f, jsx as c } from "react/jsx-runtime";
|
|
2
|
+
import { c as C } from "../../clsx-OuTLNxxd.js";
|
|
3
|
+
import { CourseCardHeader as p } from "./CourseCardHeader/CourseCardHeader.js";
|
|
4
|
+
import { CourseCardOffering as v } from "./CourseCardOffering/CourseCardOffering.js";
|
|
5
|
+
import '../../assets/CourseCard.css';const s = {
|
|
6
|
+
"course-container": "_course-container_j1mva_3",
|
|
7
|
+
"course-container--clickable": "_course-container--clickable_j1mva_12",
|
|
8
|
+
"course__instance-container": "_course__instance-container_j1mva_18"
|
|
9
|
+
}, N = ({ course: i, localeTags: n, currentLanguage: e, actions: t, onClick: o }) => {
|
|
10
|
+
const a = i.offerings, r = typeof o == "function", d = () => {
|
|
11
|
+
r && o(i.id);
|
|
12
|
+
};
|
|
13
|
+
return /* @__PURE__ */ f(
|
|
14
|
+
"div",
|
|
15
|
+
{
|
|
16
|
+
className: C(s["course-container"], r && s["course-container--clickable"]),
|
|
17
|
+
...o && { onClick: d },
|
|
18
|
+
children: [
|
|
19
|
+
/* @__PURE__ */ c(
|
|
20
|
+
p,
|
|
21
|
+
{
|
|
22
|
+
id: i.id,
|
|
23
|
+
code: i.code,
|
|
24
|
+
name: i.name[e],
|
|
25
|
+
credits: i.credits,
|
|
26
|
+
actions: t,
|
|
27
|
+
localeTags: n,
|
|
28
|
+
currentLanguage: e,
|
|
29
|
+
isNew: i.isNew ? n["is-new"][e] : void 0,
|
|
30
|
+
onActionClick: console.log
|
|
31
|
+
}
|
|
32
|
+
),
|
|
33
|
+
/* @__PURE__ */ c("div", { className: s["course__instance-container"], children: a.map(({ id: m, periods: _, maxPeriods: l }) => /* @__PURE__ */ c(
|
|
34
|
+
v,
|
|
35
|
+
{
|
|
36
|
+
periods: _,
|
|
37
|
+
currentLanguage: e,
|
|
38
|
+
localeTags: n,
|
|
39
|
+
maxPeriods: l
|
|
40
|
+
},
|
|
41
|
+
m
|
|
42
|
+
)) })
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
};
|
|
47
|
+
export {
|
|
48
|
+
N as CourseCard
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=CourseCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CourseCard.js","sources":["../../../src/components/CourseCard/CourseCard.tsx"],"sourcesContent":["import clsx from 'clsx';\n\nimport styles from './CourseCard.module.css';\nimport { CourseCardHeader } from './CourseCardHeader';\nimport { CourseCardOffering } from './CourseCardOffering';\n\ninterface Offering {\n academicYear: number;\n courseId: string;\n id: string;\n offeringNumber: number;\n periods: number[];\n maxPeriods: number;\n}\n\ninterface Name {\n EN: string;\n NL: string;\n}\n\ninterface Courses {\n code: string;\n credits: number;\n departmentId: string;\n id: string;\n level: string;\n name: Name;\n offerings: Offering[];\n programmeId: string;\n isNew: boolean;\n}\n\nexport interface CourseCardProps {\n course: Courses;\n localeTags: Record<string, Record<'NL' | 'EN', string>>;\n currentLanguage: 'NL' | 'EN';\n actions?: Record<string, string>[];\n onActionClick: ({ action, id }: Record<string, string>) => void;\n onClick?: (id: string) => void;\n}\n\nexport const CourseCard = ({ course, localeTags, currentLanguage, actions, onClick }: CourseCardProps) => {\n const offerings = course.offerings;\n const isClickable = typeof onClick === 'function';\n\n const handleOnClick = () => {\n if (isClickable) onClick(course.id);\n };\n\n return (\n <div\n className={clsx(styles['course-container'], isClickable && styles['course-container--clickable'])}\n {...(onClick && { onClick: handleOnClick })}\n >\n <CourseCardHeader\n id={course.id}\n code={course.code}\n name={course.name[currentLanguage]}\n credits={course.credits}\n actions={actions}\n localeTags={localeTags}\n currentLanguage={currentLanguage}\n isNew={course.isNew ? localeTags['is-new'][currentLanguage] : undefined}\n onActionClick={console.log}\n />\n <div className={styles['course__instance-container']}>\n {offerings.map(({ id, periods, maxPeriods }) => (\n <CourseCardOffering\n periods={periods}\n key={id}\n currentLanguage={currentLanguage}\n localeTags={localeTags}\n maxPeriods={maxPeriods}\n />\n ))}\n </div>\n </div>\n );\n};\n"],"names":["CourseCard","course","localeTags","currentLanguage","actions","onClick","offerings","isClickable","handleOnClick","jsxs","clsx","styles","jsx","CourseCardHeader","id","periods","maxPeriods","CourseCardOffering"],"mappings":";;;;;;;;GAyCaA,IAAa,CAAC,EAAE,QAAAC,GAAQ,YAAAC,GAAY,iBAAAC,GAAiB,SAAAC,GAAS,SAAAC,QAA+B;AACxG,QAAMC,IAAYL,EAAO,WACnBM,IAAc,OAAOF,KAAY,YAEjCG,IAAgB,MAAM;AACtB,IAAAD,KAAqBF,EAAAJ,EAAO,EAAE;AAAA,EAAA;AAIlC,SAAA,gBAAAQ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAKC,EAAO,kBAAkB,GAAGJ,KAAeI,EAAO,6BAA6B,CAAC;AAAA,MAC/F,GAAIN,KAAW,EAAE,SAASG,EAAc;AAAA,MAEzC,UAAA;AAAA,QAAA,gBAAAI;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,IAAIZ,EAAO;AAAA,YACX,MAAMA,EAAO;AAAA,YACb,MAAMA,EAAO,KAAKE,CAAe;AAAA,YACjC,SAASF,EAAO;AAAA,YAChB,SAAAG;AAAA,YACA,YAAAF;AAAA,YACA,iBAAAC;AAAA,YACA,OAAOF,EAAO,QAAQC,EAAW,QAAQ,EAAEC,CAAe,IAAI;AAAA,YAC9D,eAAe,QAAQ;AAAA,UAAA;AAAA,QACzB;AAAA,QACC,gBAAAS,EAAA,OAAA,EAAI,WAAWD,EAAO,4BAA4B,GAChD,UAAUL,EAAA,IAAI,CAAC,EAAE,IAAAQ,GAAI,SAAAC,GAAS,YAAAC,EAC7B,MAAA,gBAAAJ;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,SAAAF;AAAA,YAEA,iBAAAZ;AAAA,YACA,YAAAD;AAAA,YACA,YAAAc;AAAA,UAAA;AAAA,UAHKF;AAAA,QAKR,CAAA,GACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Meta } from '@storybook/react';
|
|
2
|
+
import { CourseCardProps } from './CourseCard';
|
|
3
|
+
|
|
4
|
+
declare const _default: Meta<CourseCardProps>;
|
|
5
|
+
export default _default;
|
|
6
|
+
export declare const CourseCardExample: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, CourseCardProps>;
|
|
7
|
+
export declare const WithMultipleCourseCards: import('@storybook/csf').AnnotatedStoryFn<import('@storybook/react').ReactRenderer, CourseCardProps>;
|