@aarhus-university/au-lib-react-components 12.5.1 → 12.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/.claude/settings.local.json +12 -0
  2. package/.eslintrc.js +35 -35
  3. package/.storybook/main.js +34 -34
  4. package/.storybook/preview.js +17 -17
  5. package/.vscode/settings.json +22 -0
  6. package/README.md +19 -19
  7. package/__tests__/jest/AUButtonComponent.test.tsx +165 -165
  8. package/__tests__/jest/AUDynamicContentComponent.test.tsx +386 -0
  9. package/__tests__/jest/AUErrorComponent.test.tsx +142 -142
  10. package/__tests__/jest/AUModalComponent.test.tsx +186 -186
  11. package/__tests__/jest/AUNotificationComponent.test.tsx +115 -115
  12. package/__tests__/jest/AUSpinnerComponent.test.tsx +57 -57
  13. package/__tests__/jest/AUToolbarComponent.test.tsx +46 -46
  14. package/__tests__/jest/context.test.ts +25 -25
  15. package/__tests__/jest/helpers.test.ts +15 -15
  16. package/__tests__/jest/setupTests.ts +2 -2
  17. package/babel.config.js +8 -8
  18. package/build/umd/all.css +3 -2
  19. package/build/umd/all.css.map +1 -7
  20. package/build/umd/all.js +2 -45
  21. package/build/umd/all.js.map +1 -7
  22. package/build/umd/alphabox.js +2 -45
  23. package/build/umd/alphabox.js.map +1 -7
  24. package/build/umd/databox.js +2 -45
  25. package/build/umd/databox.js.map +1 -7
  26. package/build/umd/diagramme.js +2 -44
  27. package/build/umd/diagramme.js.map +1 -7
  28. package/build/umd/flowbox.js +2 -44
  29. package/build/umd/flowbox.js.map +1 -7
  30. package/build/umd/universe.js +1 -1
  31. package/build-storybook.log +386 -386
  32. package/esbuild.mjs +22 -22
  33. package/package.json +107 -105
  34. package/src/components/AUAlertComponent.tsx +128 -128
  35. package/src/components/AUAutoSuggestComponent.js +148 -148
  36. package/src/components/AUButtonComponent.tsx +99 -97
  37. package/src/components/AUCalendarComponent.tsx +497 -497
  38. package/src/components/AUCharacterCountComponent.tsx +56 -56
  39. package/src/components/AUComboBoxComponent.tsx +195 -195
  40. package/src/components/AUContentToggleComponent.tsx +50 -50
  41. package/src/components/AUDatepickerComponent.tsx +124 -124
  42. package/src/components/AUDialogModalComponent.tsx +124 -124
  43. package/src/components/AUDynamicContentComponent.tsx +137 -0
  44. package/src/components/AUEditorComponent.tsx +126 -117
  45. package/src/components/AUErrorComponent.tsx +73 -73
  46. package/src/components/AUMobilePrefixComponent.tsx +20 -20
  47. package/src/components/AUModalComponent.tsx +72 -72
  48. package/src/components/AUNotificationComponent.tsx +44 -44
  49. package/src/components/AUReceiptComponent.tsx +34 -34
  50. package/src/components/AUSpinnerComponent.tsx +40 -40
  51. package/src/components/AUStepComponent.tsx +75 -75
  52. package/src/components/AUSubNavComponent.tsx +57 -57
  53. package/src/components/AUSubmitButtonContainerComponent.tsx +38 -38
  54. package/src/components/AUTabbedContentComponent.tsx +154 -154
  55. package/src/components/AUTableComponent.tsx +29 -29
  56. package/src/components/AUToastComponent.tsx +104 -104
  57. package/src/components/AUToolbarComponent.tsx +108 -108
  58. package/src/components/AUTruncatorComponent.tsx +141 -141
  59. package/src/components/wrapping/AUEmbedComponent.js +47 -47
  60. package/src/layout-2016/components/alphabox/AlphaBoxComponent.js +142 -143
  61. package/src/layout-2016/components/alphabox/AlphaBoxContentComponent.js +136 -136
  62. package/src/layout-2016/components/common/AUCollapsibleComponent.js +152 -152
  63. package/src/layout-2016/components/common/AUSpinnerComponent.js +103 -103
  64. package/src/layout-2016/components/databox/DataBoxAlphabetComponent.js +144 -144
  65. package/src/layout-2016/components/databox/DataBoxAssociationComponent.js +122 -122
  66. package/src/layout-2016/components/databox/DataBoxButtonComponent.js +157 -157
  67. package/src/layout-2016/components/databox/DataBoxComponent.js +297 -297
  68. package/src/layout-2016/components/databox/DataBoxGroupingComponent.js +64 -64
  69. package/src/layout-2016/components/databox/DataBoxSearchResultComponent.js +36 -36
  70. package/src/layout-2016/components/databox/DataBoxStackedAssociationComponent.js +54 -54
  71. package/src/layout-2016/components/databox/DataBoxSuggestionComponent.js +39 -39
  72. package/src/layout-2016/components/diagramme/AUDiagrammeComponent.js +309 -309
  73. package/src/layout-2016/components/flowbox/FlowBoxComponent.js +126 -126
  74. package/src/layout-2016/components/flowbox/FlowBoxPhoneComponent.js +104 -104
  75. package/src/layout-2016/lib/all.js +3 -3
  76. package/src/layout-2016/lib/au-alphabox.js +99 -100
  77. package/src/layout-2016/lib/au-databox.js +399 -400
  78. package/src/layout-2016/lib/au-diagramme.js +85 -85
  79. package/src/layout-2016/lib/au-flowbox.js +119 -93
  80. package/src/lib/context.tsx +59 -59
  81. package/src/lib/dates.ts +52 -52
  82. package/src/lib/helpers.ts +208 -208
  83. package/src/lib/hooks.ts +157 -157
  84. package/src/lib/i18n.ts +600 -600
  85. package/src/lib/portals.tsx +150 -150
  86. package/src/lib/tinymce.ts +84 -84
  87. package/src/lib/wrapping.ts +21 -21
  88. package/src/styles/_settings.scss +10 -10
  89. package/src/styles/alphabox.scss +222 -222
  90. package/src/styles/app.scss +7 -7
  91. package/src/styles/autosuggest.scss +57 -57
  92. package/src/styles/databox.scss +563 -563
  93. package/src/styles/diagramme.scss +119 -119
  94. package/src/styles/flowbox.scss +72 -72
  95. package/src/styles/maps.scss +395 -395
  96. package/stories/AUAlertComponent.stories.tsx +133 -133
  97. package/stories/AUAutoSuggestComponent.stories.tsx +95 -95
  98. package/stories/AUButtonComponent.stories.tsx +139 -139
  99. package/stories/AUCharacterCountComponent.stories.tsx +121 -121
  100. package/stories/AUComboBoxComponent.stories.tsx +101 -101
  101. package/stories/AUContentToggleComponent.stories.tsx +87 -87
  102. package/stories/AUDialogModalComponent.stories.tsx +75 -75
  103. package/stories/AUDynamicContentComponent.stories.tsx +119 -0
  104. package/stories/AUEditorComponent.stories.tsx +66 -66
  105. package/stories/AUErrorComponent.stories.tsx +132 -132
  106. package/stories/AUModalComponent.stories.tsx +160 -160
  107. package/stories/AUNotificationComponent.stories.tsx +151 -151
  108. package/stories/AUSpinnerComponent.stories.tsx +44 -44
  109. package/stories/AUStepComponent.stories.tsx +91 -91
  110. package/stories/AUToolbarComponent.stories.tsx +389 -389
  111. package/stories/AUTruncatorComponent.stories.tsx +123 -123
  112. package/stories/lib/helpers.tsx +146 -146
  113. package/tsconfig.json +46 -46
  114. package/webpack.config.js +88 -88
  115. package/src/lib/tracking.ts +0 -69
@@ -1,101 +1,101 @@
1
- import React from 'react';
2
- import { StoryObj, Meta } from '@storybook/react';
3
- import AUComboBoxComponent from '../src/components/AUComboBoxComponent';
4
- import { ThemeWrapper } from './lib/helpers';
5
-
6
- const countries: IComboBoxSearch[] = [
7
- {
8
- id: 1,
9
- name: 'Denmark',
10
- },
11
- {
12
- id: 2,
13
- name: 'Sweden',
14
- },
15
- {
16
- id: 3,
17
- name: 'Norway',
18
- },
19
- {
20
- id: 4,
21
- name: 'Finland',
22
- },
23
- {
24
- id: 5,
25
- name: 'Iceland',
26
- },
27
- {
28
- id: 6,
29
- name: 'Greenland',
30
- },
31
- {
32
- id: 7,
33
- name: 'Faroe Islands',
34
- },
35
- {
36
- id: 8,
37
- name: 'United Kingdom',
38
- },
39
- {
40
- id: 9,
41
- name: 'Germany',
42
- },
43
- {
44
- id: 10,
45
- name: 'France',
46
- },
47
- {
48
- id: 11,
49
- name: 'Spain',
50
- },
51
- {
52
- id: 12,
53
- name: 'Portugal',
54
- },
55
- {
56
- id: 13,
57
- name: 'Italy',
58
- },
59
- {
60
- id: 14,
61
- name: 'Greece',
62
- },
63
- ];
64
-
65
- export default {
66
- title: 'Delphinus/ComboBox',
67
- component: AUComboBoxComponent,
68
- argTypes: {
69
- onItemSelect: {
70
- table: {
71
- disable: true,
72
- }
73
- },
74
- },
75
- decorators: [
76
- (Story, context) => (
77
- <ThemeWrapper theme={context.globals.theme}>
78
- <form action="get" method="/">
79
- {Story()}
80
- </form>
81
- </ThemeWrapper>
82
- )
83
- ],
84
- } as Meta<typeof AUComboBoxComponent>;
85
-
86
- type Story = StoryObj<typeof AUComboBoxComponent>;
87
-
88
- export const ComboBox: Story = {
89
- args: {
90
- data: countries,
91
- label: 'Country',
92
- resultsText: {
93
- one: 'There is {{dataLength}} country available.',
94
- other: 'There are {{dataLength}} countries available.',
95
- },
96
- noResultsText: 'No countries found.',
97
- noResultsTextSecondary: 'Try searching for something else.',
98
- clearOnSelect: true,
99
- },
100
- render: (args) => <AUComboBoxComponent {...args} />,
101
- };
1
+ import React from 'react';
2
+ import { StoryObj, Meta } from '@storybook/react';
3
+ import AUComboBoxComponent from '../src/components/AUComboBoxComponent';
4
+ import { ThemeWrapper } from './lib/helpers';
5
+
6
+ const countries: IComboBoxSearch[] = [
7
+ {
8
+ id: 1,
9
+ name: 'Denmark',
10
+ },
11
+ {
12
+ id: 2,
13
+ name: 'Sweden',
14
+ },
15
+ {
16
+ id: 3,
17
+ name: 'Norway',
18
+ },
19
+ {
20
+ id: 4,
21
+ name: 'Finland',
22
+ },
23
+ {
24
+ id: 5,
25
+ name: 'Iceland',
26
+ },
27
+ {
28
+ id: 6,
29
+ name: 'Greenland',
30
+ },
31
+ {
32
+ id: 7,
33
+ name: 'Faroe Islands',
34
+ },
35
+ {
36
+ id: 8,
37
+ name: 'United Kingdom',
38
+ },
39
+ {
40
+ id: 9,
41
+ name: 'Germany',
42
+ },
43
+ {
44
+ id: 10,
45
+ name: 'France',
46
+ },
47
+ {
48
+ id: 11,
49
+ name: 'Spain',
50
+ },
51
+ {
52
+ id: 12,
53
+ name: 'Portugal',
54
+ },
55
+ {
56
+ id: 13,
57
+ name: 'Italy',
58
+ },
59
+ {
60
+ id: 14,
61
+ name: 'Greece',
62
+ },
63
+ ];
64
+
65
+ export default {
66
+ title: 'Delphinus/ComboBox',
67
+ component: AUComboBoxComponent,
68
+ argTypes: {
69
+ onItemSelect: {
70
+ table: {
71
+ disable: true,
72
+ }
73
+ },
74
+ },
75
+ decorators: [
76
+ (Story, context) => (
77
+ <ThemeWrapper theme={context.globals.theme}>
78
+ <form action="get" method="/">
79
+ {Story()}
80
+ </form>
81
+ </ThemeWrapper>
82
+ )
83
+ ],
84
+ } as Meta<typeof AUComboBoxComponent>;
85
+
86
+ type Story = StoryObj<typeof AUComboBoxComponent>;
87
+
88
+ export const ComboBox: Story = {
89
+ args: {
90
+ data: countries,
91
+ label: 'Country',
92
+ resultsText: {
93
+ one: 'There is {{dataLength}} country available.',
94
+ other: 'There are {{dataLength}} countries available.',
95
+ },
96
+ noResultsText: 'No countries found.',
97
+ noResultsTextSecondary: 'Try searching for something else.',
98
+ clearOnSelect: true,
99
+ },
100
+ render: (args) => <AUComboBoxComponent {...args} />,
101
+ };
@@ -1,87 +1,87 @@
1
- import React from 'react';
2
- import { StoryObj, Meta } from '@storybook/react';
3
- import AUContentToggleComponent from '../src/components/AUContentToggleComponent';
4
- import { ThemeWrapper } from './lib/helpers';
5
-
6
- export default {
7
- title: 'Delphinus/Content Toggle',
8
- component: AUContentToggleComponent,
9
- argTypes: {
10
- toggled: {
11
- table: {
12
- disable: true,
13
- }
14
- },
15
- children: {
16
- table: {
17
- disable: true,
18
- }
19
- },
20
- classNames: {
21
- table: {
22
- disable: true,
23
- }
24
- },
25
- onClick: {
26
- table: {
27
- disable: true,
28
- }
29
- },
30
- beforeCallback: {
31
- table: {
32
- disable: true,
33
- }
34
- },
35
- afterCallback: {
36
- table: {
37
- disable: true,
38
- }
39
- },
40
- },
41
- decorators: [
42
- (Story, context) => (
43
- <ThemeWrapper theme={context.globals.theme}>
44
- {Story()}
45
- </ThemeWrapper>
46
- )
47
- ],
48
- } as Meta<typeof AUContentToggleComponent>;
49
-
50
- type Story = StoryObj<typeof AUContentToggleComponent>;
51
-
52
- export const Hidden_when_loaded: Story = {
53
- args: {
54
- toggled: false,
55
- children: (
56
- <div className="box theme--background-secondary box--constrain-width">
57
- <button className="content-toggle__toggle button button--small" aria-expanded="false">
58
- Very interesting content is hidden
59
- </button>
60
- <div className="content-toggle__content vertical-spacing-top" hidden>
61
- <h4 className="text--label-header text--pull">The content that is toggled</h4>
62
- <p>Collapsible sections are perhaps the most rudimentary of interactive design patterns on the web. All they do is let you toggle the visibility of content by clicking that content's label. Big whoop.</p>
63
- </div>
64
- </div>
65
- ),
66
- },
67
- render: (args) => <AUContentToggleComponent {...args} />,
68
- };
69
-
70
- export const Shown_when_loaded: Story = {
71
- args: {
72
- toggled: true,
73
- children: (
74
- <div className="box theme--background-secondary box--constrain-width">
75
- <button className="content-toggle__toggle button button--small" aria-expanded="true">
76
- Very interesting content is hidden
77
- </button>
78
- <div className="content-toggle__content vertical-spacing-top">
79
- <h4 className="text--label-header text--pull">The content that is toggled</h4>
80
- <p>Collapsible sections are perhaps the most rudimentary of interactive design patterns on the web. All they do is let you toggle the visibility of content by clicking that content's label. Big whoop.</p>
81
- </div>
82
- </div>
83
- ),
84
- },
85
- render: (args) => <AUContentToggleComponent {...args} />,
86
- };
87
-
1
+ import React from 'react';
2
+ import { StoryObj, Meta } from '@storybook/react';
3
+ import AUContentToggleComponent from '../src/components/AUContentToggleComponent';
4
+ import { ThemeWrapper } from './lib/helpers';
5
+
6
+ export default {
7
+ title: 'Delphinus/Content Toggle',
8
+ component: AUContentToggleComponent,
9
+ argTypes: {
10
+ toggled: {
11
+ table: {
12
+ disable: true,
13
+ }
14
+ },
15
+ children: {
16
+ table: {
17
+ disable: true,
18
+ }
19
+ },
20
+ classNames: {
21
+ table: {
22
+ disable: true,
23
+ }
24
+ },
25
+ onClick: {
26
+ table: {
27
+ disable: true,
28
+ }
29
+ },
30
+ beforeCallback: {
31
+ table: {
32
+ disable: true,
33
+ }
34
+ },
35
+ afterCallback: {
36
+ table: {
37
+ disable: true,
38
+ }
39
+ },
40
+ },
41
+ decorators: [
42
+ (Story, context) => (
43
+ <ThemeWrapper theme={context.globals.theme}>
44
+ {Story()}
45
+ </ThemeWrapper>
46
+ )
47
+ ],
48
+ } as Meta<typeof AUContentToggleComponent>;
49
+
50
+ type Story = StoryObj<typeof AUContentToggleComponent>;
51
+
52
+ export const Hidden_when_loaded: Story = {
53
+ args: {
54
+ toggled: false,
55
+ children: (
56
+ <div className="box theme--background-secondary box--constrain-width">
57
+ <button className="content-toggle__toggle button button--small" aria-expanded="false">
58
+ Very interesting content is hidden
59
+ </button>
60
+ <div className="content-toggle__content vertical-spacing-top" hidden>
61
+ <h4 className="text--label-header text--pull">The content that is toggled</h4>
62
+ <p>Collapsible sections are perhaps the most rudimentary of interactive design patterns on the web. All they do is let you toggle the visibility of content by clicking that content's label. Big whoop.</p>
63
+ </div>
64
+ </div>
65
+ ),
66
+ },
67
+ render: (args) => <AUContentToggleComponent {...args} />,
68
+ };
69
+
70
+ export const Shown_when_loaded: Story = {
71
+ args: {
72
+ toggled: true,
73
+ children: (
74
+ <div className="box theme--background-secondary box--constrain-width">
75
+ <button className="content-toggle__toggle button button--small" aria-expanded="true">
76
+ Very interesting content is hidden
77
+ </button>
78
+ <div className="content-toggle__content vertical-spacing-top">
79
+ <h4 className="text--label-header text--pull">The content that is toggled</h4>
80
+ <p>Collapsible sections are perhaps the most rudimentary of interactive design patterns on the web. All they do is let you toggle the visibility of content by clicking that content's label. Big whoop.</p>
81
+ </div>
82
+ </div>
83
+ ),
84
+ },
85
+ render: (args) => <AUContentToggleComponent {...args} />,
86
+ };
87
+
@@ -1,75 +1,75 @@
1
- import React from 'react';
2
- import { StoryObj, Meta } from '@storybook/react';
3
- import { useArgs } from '@storybook/preview-api';
4
- import AUDialogModalComponent from '../src/components/AUDialogModalComponent';
5
- import AUButtonComponent from '../src/components/AUButtonComponent';
6
- import { ThemeWrapper } from './lib/helpers';
7
- import { useAUDialogModalContext } from '../src/lib/context';
8
-
9
- const ModalContent = () => {
10
- const close = useAUDialogModalContext();
11
- return (
12
- <>
13
- <h2 className="modal-view__header">
14
- The quick brown fox jumps over the lazy dog
15
- </h2>
16
- <div className="modal-view__content">
17
- <p>"The quick brown fox jumps over the lazy dog" is an English-language pangram—a sentence that contains all of the letters of the alphabet. It is commonly used for touch-typing practice, testing typewriters and computer keyboards, displaying examples of fonts, and other applications involving text where the use of all letters in the alphabet is desired. Owing to its brevity and coherence, it has become widely known.</p><h3>History</h3><p>The earliest known appearance of the phrase is from The Boston Journal. In an article titled "Current Notes" in the February 10, 1885, morning edition, the phrase is mentioned as a good practice sentence for writing students: "A favorite copy set by writing teachers for their pupils is the following, because it contains every letter of the alphabet: 'A quick brown fox jumps over the lazy dog.'"[1] Dozens of other newspapers published the phrase over the next few months, all using the version of the sentence starting with "A" rather than "The".[2] The earliest known use of the phrase in its modern form (starting with "The") is from the 1888 book Illustrative Shorthand by Linda Bronson.[3] The modern form (starting with "The") became more common despite the fact that it is slightly longer than the original (starting with "A").</p>
18
- </div>
19
- <AUButtonComponent
20
- label="Close modal"
21
- ariaHasPopup
22
- onClick={() => {
23
- if (typeof close === 'function') {
24
- close();
25
- }
26
- }}
27
- />
28
- </>
29
- );
30
- }
31
-
32
- // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
33
- export default {
34
- title: 'Delphinus/Dialog Modal',
35
- component: AUDialogModalComponent,
36
- argTypes: {
37
- sender: {
38
- table: {
39
- disable: true,
40
- },
41
- },
42
- },
43
- decorators: [
44
- (Story, context) => (
45
- <ThemeWrapper theme={context.globals.theme}>
46
- {Story()}
47
- </ThemeWrapper>
48
- )
49
- ],
50
- } as Meta<typeof AUDialogModalComponent>;
51
-
52
- type Story = StoryObj<typeof AUDialogModalComponent>;
53
-
54
- export const Default: Story = {
55
- args: {
56
- show: true,
57
- closeButtonDisabled: false,
58
- },
59
- render: (args) => {
60
- const [_, updateArgs] = useArgs();
61
-
62
- return (
63
- <div className="page__content__block">
64
- <AUButtonComponent
65
- label="Open modal"
66
- ariaHasPopup
67
- onClick={() => updateArgs({ ...args, show: true })}
68
- />
69
- <AUDialogModalComponent {...args} onClose={() => updateArgs({ ...args, show: false })}>
70
- <ModalContent />
71
- </AUDialogModalComponent>
72
- </div>
73
- );
74
- },
75
- };
1
+ import React from 'react';
2
+ import { StoryObj, Meta } from '@storybook/react';
3
+ import { useArgs } from '@storybook/preview-api';
4
+ import AUDialogModalComponent from '../src/components/AUDialogModalComponent';
5
+ import AUButtonComponent from '../src/components/AUButtonComponent';
6
+ import { ThemeWrapper } from './lib/helpers';
7
+ import { useAUDialogModalContext } from '../src/lib/context';
8
+
9
+ const ModalContent = () => {
10
+ const close = useAUDialogModalContext();
11
+ return (
12
+ <>
13
+ <h2 className="modal-view__header">
14
+ The quick brown fox jumps over the lazy dog
15
+ </h2>
16
+ <div className="modal-view__content">
17
+ <p>"The quick brown fox jumps over the lazy dog" is an English-language pangram—a sentence that contains all of the letters of the alphabet. It is commonly used for touch-typing practice, testing typewriters and computer keyboards, displaying examples of fonts, and other applications involving text where the use of all letters in the alphabet is desired. Owing to its brevity and coherence, it has become widely known.</p><h3>History</h3><p>The earliest known appearance of the phrase is from The Boston Journal. In an article titled "Current Notes" in the February 10, 1885, morning edition, the phrase is mentioned as a good practice sentence for writing students: "A favorite copy set by writing teachers for their pupils is the following, because it contains every letter of the alphabet: 'A quick brown fox jumps over the lazy dog.'"[1] Dozens of other newspapers published the phrase over the next few months, all using the version of the sentence starting with "A" rather than "The".[2] The earliest known use of the phrase in its modern form (starting with "The") is from the 1888 book Illustrative Shorthand by Linda Bronson.[3] The modern form (starting with "The") became more common despite the fact that it is slightly longer than the original (starting with "A").</p>
18
+ </div>
19
+ <AUButtonComponent
20
+ label="Close modal"
21
+ ariaHasPopup
22
+ onClick={() => {
23
+ if (typeof close === 'function') {
24
+ close();
25
+ }
26
+ }}
27
+ />
28
+ </>
29
+ );
30
+ }
31
+
32
+ // More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
33
+ export default {
34
+ title: 'Delphinus/Dialog Modal',
35
+ component: AUDialogModalComponent,
36
+ argTypes: {
37
+ sender: {
38
+ table: {
39
+ disable: true,
40
+ },
41
+ },
42
+ },
43
+ decorators: [
44
+ (Story, context) => (
45
+ <ThemeWrapper theme={context.globals.theme}>
46
+ {Story()}
47
+ </ThemeWrapper>
48
+ )
49
+ ],
50
+ } as Meta<typeof AUDialogModalComponent>;
51
+
52
+ type Story = StoryObj<typeof AUDialogModalComponent>;
53
+
54
+ export const Default: Story = {
55
+ args: {
56
+ show: true,
57
+ closeButtonDisabled: false,
58
+ },
59
+ render: (args) => {
60
+ const [_, updateArgs] = useArgs();
61
+
62
+ return (
63
+ <div className="page__content__block">
64
+ <AUButtonComponent
65
+ label="Open modal"
66
+ ariaHasPopup
67
+ onClick={() => updateArgs({ ...args, show: true })}
68
+ />
69
+ <AUDialogModalComponent {...args} onClose={() => updateArgs({ ...args, show: false })}>
70
+ <ModalContent />
71
+ </AUDialogModalComponent>
72
+ </div>
73
+ );
74
+ },
75
+ };
@@ -0,0 +1,119 @@
1
+ import React from 'react';
2
+ import { StoryObj, Meta } from '@storybook/react';
3
+ import AUDynamicContentComponent from '../src/components/AUDynamicContentComponent';
4
+ import { ThemeWrapper } from './lib/helpers';
5
+
6
+ export default {
7
+ title: 'Delphinus/Dynamic Content',
8
+ component: AUDynamicContentComponent,
9
+ decorators: [
10
+ (Story, context) => (
11
+ <ThemeWrapper theme={context.globals.theme}>
12
+ {Story()}
13
+ </ThemeWrapper>
14
+ )
15
+ ],
16
+ } as Meta<typeof AUDynamicContentComponent>;
17
+
18
+ type Story = StoryObj<typeof AUDynamicContentComponent>;
19
+
20
+ const imageLinks = [
21
+ {
22
+ title: 'WISEflow',
23
+ description: 'Digital aflevering af eksamensbesvarelser',
24
+ url: 'javascript:void(0);',
25
+ linkType: 'system' as const,
26
+ },
27
+ {
28
+ title: 'Eksamensformalia på din uddannelse',
29
+ description: 'Bliv klogere på hvilke krav der er til dine eksamener.',
30
+ url: 'javascript:void(0);',
31
+ linkType: 'information' as const,
32
+ },
33
+ {
34
+ title: 'Tag hånd om din nervøsitet før eksamen',
35
+ description: 'Lær hvordan du kan vende din nervøsitet til en fordel i eksamenssituationen.',
36
+ url: 'javascript:void(0);',
37
+ linkType: 'information' as const,
38
+ },
39
+ ];
40
+
41
+ const videoLinks = [
42
+ {
43
+ title: 'WISEflow',
44
+ description: 'Digital aflevering af eksamensbesvarelser',
45
+ url: 'javascript:void(0);',
46
+ linkType: 'information' as const,
47
+ },
48
+ {
49
+ title: 'Eksamensformalia på din uddannelse',
50
+ description: 'Bliv klogere på hvilke krav der er til dine eksamener.',
51
+ url: 'javascript:void(0);',
52
+ linkType: 'system' as const,
53
+ },
54
+ {
55
+ title: 'Tag hånd om din nervøsitet før eksamen',
56
+ description: 'Lær hvordan du kan vende din nervøsitet til en fordel i eksamenssituationen.',
57
+ url: 'javascript:void(0);',
58
+ linkType: 'information' as const,
59
+ },
60
+ ];
61
+
62
+ const infoboxLinks = [
63
+ {
64
+ title: 'WISEflow',
65
+ description: 'Digital aflevering af eksamensbesvarelser',
66
+ url: 'javascript:void(0);',
67
+ linkType: 'system' as const,
68
+ },
69
+ {
70
+ title: 'Eksamensformalia på din uddannelse',
71
+ description: 'Bliv klogere på hvilke krav der er til dine eksamener.',
72
+ url: 'javascript:void(0);',
73
+ linkType: 'system' as const,
74
+ },
75
+ {
76
+ title: 'Tag hånd om din nervøsitet før eksamen',
77
+ description: 'Lær hvordan du kan vende din nervøsitet til en fordel i eksamenssituationen.',
78
+ url: 'javascript:void(0);',
79
+ linkType: 'information' as const,
80
+ },
81
+ ]
82
+
83
+ export const InfoboxContent: Story = {
84
+ args: {
85
+ name: 'Kom godt igennem eksamensperioden',
86
+ featuredContentDescription: 'Til en mundtlig eksamen skal du præstere intenst i kort tid, og det kræver en særlig forberedelse. Derudover er eksamen en mulighed for at lære en masse om dit stof og forbedre dine formidlingsevner.',
87
+ links: infoboxLinks,
88
+ featuredContent: {
89
+ type: 'infoBox',
90
+ htmlContent: '<h4>Frister for tilmelding</h4><ul><li>1.-5. maj: Tilmelding til kurser i efterårssemesteret</li><li>10. juni: Sidste frist for tilmelding til sommerens eksamener</li></ul>',
91
+ },
92
+ },
93
+ };
94
+
95
+ export const ImageContent: Story = {
96
+ args: {
97
+ name: 'Kom godt igennem eksamensperioden',
98
+ featuredContentDescription: 'Til en mundtlig eksamen skal du præstere intenst i kort tid, og det kræver en særlig forberedelse. Derudover er eksamen en mulighed for at lære en masse om dit stof og forbedre dine formidlingsevner.',
99
+ links: imageLinks,
100
+ featuredContent: {
101
+ type: 'image',
102
+ url: 'https://picsum.photos/640/360',
103
+ altText: 'Placeholder billede',
104
+ caption: 'Foto: John Doe',
105
+ },
106
+ },
107
+ };
108
+
109
+ export const VideoContent: Story = {
110
+ args: {
111
+ name: 'Kom godt igennem eksamensperioden',
112
+ featuredContentDescription: 'Til en mundtlig eksamen skal du præstere intenst i kort tid, og det kræver en særlig forberedelse. Derudover er eksamen en mulighed for at lære en masse om dit stof og forbedre dine formidlingsevner.',
113
+ links: videoLinks,
114
+ featuredContent: {
115
+ type: 'video',
116
+ url: 'https://www.youtube-nocookie.com/embed/LI8Oo5xQMDE',
117
+ },
118
+ },
119
+ };