@grantcodes/ui 2.15.6 → 2.16.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/CHANGELOG.md +67 -0
- package/custom-elements.json +476 -346
- package/package.json +23 -23
- package/src/components/accordion/accordion-item.component.js +17 -19
- package/src/components/accordion/accordion-item.css +40 -44
- package/src/components/accordion/accordion.component.js +7 -7
- package/src/components/accordion/accordion.css +5 -5
- package/src/components/accordion/accordion.js +6 -6
- package/src/components/accordion/accordion.react.js +6 -6
- package/src/components/accordion/accordion.stories.js +10 -10
- package/src/components/accordion/accordion.test.js +100 -100
- package/src/components/accordion/index.js +6 -6
- package/src/components/app-bar/app-bar.component.js +86 -92
- package/src/components/app-bar/app-bar.css +187 -203
- package/src/components/app-bar/app-bar.js +3 -3
- package/src/components/app-bar/app-bar.react.js +9 -9
- package/src/components/app-bar/app-bar.stories.js +20 -20
- package/src/components/app-bar/app-bar.test.js +190 -237
- package/src/components/app-bar/index.js +1 -1
- package/src/components/app-bar/nav-link.component.js +7 -9
- package/src/components/app-bar/nav-link.css +23 -28
- package/src/components/app-bar/nav-link.js +3 -3
- package/src/components/app-bar/nav-link.react.js +6 -6
- package/src/components/avatar/avatar.component.js +79 -68
- package/src/components/avatar/avatar.css +18 -18
- package/src/components/avatar/avatar.js +3 -3
- package/src/components/avatar/avatar.react.js +6 -6
- package/src/components/avatar/avatar.stories.js +24 -23
- package/src/components/avatar/avatar.test.js +128 -84
- package/src/components/avatar/index.js +1 -1
- package/src/components/badge/badge.component.js +23 -23
- package/src/components/badge/badge.css +39 -52
- package/src/components/badge/badge.js +3 -3
- package/src/components/badge/badge.react.js +6 -6
- package/src/components/badge/badge.stories.js +23 -23
- package/src/components/badge/badge.test.js +53 -68
- package/src/components/badge/index.js +1 -1
- package/src/components/breadcrumb/breadcrumb.component.js +95 -96
- package/src/components/breadcrumb/breadcrumb.css +42 -44
- package/src/components/breadcrumb/breadcrumb.js +6 -9
- package/src/components/breadcrumb/breadcrumb.react.js +9 -12
- package/src/components/breadcrumb/breadcrumb.stories.js +5 -5
- package/src/components/breadcrumb/breadcrumb.test.js +139 -151
- package/src/components/breadcrumb/index.js +1 -1
- package/src/components/button/button.component.js +101 -103
- package/src/components/button/button.css +90 -94
- package/src/components/button/button.js +3 -3
- package/src/components/button/button.react.js +6 -6
- package/src/components/button/button.stories.js +25 -25
- package/src/components/button/button.test.js +324 -344
- package/src/components/button/index.js +1 -1
- package/src/components/button-group/button-group.component.js +18 -18
- package/src/components/button-group/button-group.css +16 -16
- package/src/components/button-group/button-group.js +3 -3
- package/src/components/button-group/button-group.react.js +6 -6
- package/src/components/button-group/button-group.stories.js +23 -23
- package/src/components/button-group/button-group.test.js +54 -54
- package/src/components/button-group/index.js +1 -1
- package/src/components/card/card.component.js +31 -33
- package/src/components/card/card.css +85 -85
- package/src/components/card/card.js +4 -4
- package/src/components/card/card.react.js +6 -6
- package/src/components/card/card.stories.js +27 -26
- package/src/components/card/card.test.js +56 -56
- package/src/components/card/index.js +1 -1
- package/src/components/code-preview/code-preview.component.js +47 -48
- package/src/components/code-preview/code-preview.css +11 -11
- package/src/components/code-preview/code-preview.js +3 -3
- package/src/components/code-preview/code-preview.react.js +6 -6
- package/src/components/code-preview/code-preview.stories.js +29 -29
- package/src/components/code-preview/code-preview.test.js +112 -135
- package/src/components/code-preview/index.js +1 -1
- package/src/components/container/container.component.js +27 -27
- package/src/components/container/container.css +22 -22
- package/src/components/container/container.js +3 -3
- package/src/components/container/container.react.js +6 -6
- package/src/components/container/container.stories.js +44 -44
- package/src/components/container/container.test.js +54 -66
- package/src/components/container/index.js +1 -1
- package/src/components/countdown/countdown.component.js +160 -162
- package/src/components/countdown/countdown.css +50 -34
- package/src/components/countdown/countdown.js +3 -3
- package/src/components/countdown/countdown.react.js +6 -6
- package/src/components/countdown/countdown.stories.js +34 -34
- package/src/components/countdown/index.js +1 -1
- package/src/components/cta/cta.component.js +77 -81
- package/src/components/cta/cta.css +24 -24
- package/src/components/cta/cta.js +3 -3
- package/src/components/cta/cta.react.js +6 -6
- package/src/components/cta/cta.stories.js +32 -32
- package/src/components/cta/index.js +1 -1
- package/src/components/dialog/dialog.component.js +95 -58
- package/src/components/dialog/dialog.css +45 -50
- package/src/components/dialog/dialog.js +3 -3
- package/src/components/dialog/dialog.react.js +6 -6
- package/src/components/dialog/dialog.stories.js +38 -29
- package/src/components/dialog/dialog.test.js +188 -102
- package/src/components/dialog/index.js +1 -1
- package/src/components/dropdown/dropdown.component.js +220 -201
- package/src/components/dropdown/dropdown.css +60 -84
- package/src/components/dropdown/dropdown.js +6 -9
- package/src/components/dropdown/dropdown.react.js +15 -15
- package/src/components/dropdown/dropdown.stories.js +10 -10
- package/src/components/dropdown/dropdown.test.js +211 -157
- package/src/components/dropdown/index.js +1 -1
- package/src/components/dropzone/dropzone.component.js +126 -129
- package/src/components/dropzone/dropzone.css +35 -37
- package/src/components/dropzone/dropzone.js +3 -3
- package/src/components/dropzone/dropzone.react.js +6 -6
- package/src/components/dropzone/dropzone.stories.js +28 -28
- package/src/components/dropzone/dropzone.test.js +91 -99
- package/src/components/dropzone/index.js +1 -1
- package/src/components/feature-list/feature-list.component.js +78 -86
- package/src/components/feature-list/feature-list.css +37 -37
- package/src/components/feature-list/feature-list.js +3 -3
- package/src/components/feature-list/feature-list.react.js +6 -6
- package/src/components/feature-list/feature-list.stories.js +86 -90
- package/src/components/feature-list/index.js +1 -1
- package/src/components/footer/footer-column.component.js +7 -7
- package/src/components/footer/footer-column.css +22 -22
- package/src/components/footer/footer.component.js +19 -19
- package/src/components/footer/footer.css +38 -38
- package/src/components/footer/footer.js +8 -8
- package/src/components/footer/footer.react.js +9 -9
- package/src/components/footer/footer.stories.js +9 -9
- package/src/components/footer/footer.test.js +101 -111
- package/src/components/footer/index.js +2 -2
- package/src/components/form-field/form-field.component.js +167 -125
- package/src/components/form-field/form-field.css +24 -24
- package/src/components/form-field/form-field.js +3 -3
- package/src/components/form-field/form-field.react.js +6 -6
- package/src/components/form-field/form-field.stories.js +53 -44
- package/src/components/form-field/form-field.test.js +280 -134
- package/src/components/form-field/index.js +1 -1
- package/src/components/gallery/gallery-image.component.js +30 -30
- package/src/components/gallery/gallery-image.js +3 -3
- package/src/components/gallery/gallery-image.react.js +6 -6
- package/src/components/gallery/gallery.component.js +24 -17
- package/src/components/gallery/gallery.css +79 -72
- package/src/components/gallery/gallery.js +3 -3
- package/src/components/gallery/gallery.react.js +6 -6
- package/src/components/gallery/gallery.stories.js +69 -68
- package/src/components/gallery/gallery.test.js +95 -88
- package/src/components/gallery/index.js +2 -2
- package/src/components/hero/hero.component.js +53 -57
- package/src/components/hero/hero.css +27 -27
- package/src/components/hero/hero.js +3 -3
- package/src/components/hero/hero.react.js +6 -6
- package/src/components/hero/hero.stories.js +39 -39
- package/src/components/hero/index.js +1 -1
- package/src/components/icon/icon.component.js +10 -10
- package/src/components/icon/icon.css +13 -13
- package/src/components/icon/icon.js +4 -4
- package/src/components/icon/icon.react.js +6 -6
- package/src/components/icon/icon.stories.js +8 -9
- package/src/components/icon/icon.test.js +54 -55
- package/src/components/icon/index.js +1 -1
- package/src/components/loading/index.js +1 -1
- package/src/components/loading/loading.component.js +41 -14
- package/src/components/loading/loading.css +47 -30
- package/src/components/loading/loading.js +4 -4
- package/src/components/loading/loading.react.js +6 -6
- package/src/components/loading/loading.stories.js +19 -18
- package/src/components/loading/loading.test.js +77 -54
- package/src/components/logo-cloud/index.js +1 -1
- package/src/components/logo-cloud/logo-cloud.component.js +39 -43
- package/src/components/logo-cloud/logo-cloud.css +31 -31
- package/src/components/logo-cloud/logo-cloud.js +3 -3
- package/src/components/logo-cloud/logo-cloud.react.js +6 -6
- package/src/components/logo-cloud/logo-cloud.stories.js +80 -80
- package/src/components/map/index.js +1 -1
- package/src/components/map/map.component.js +103 -107
- package/src/components/map/map.css +22 -22
- package/src/components/map/map.js +3 -3
- package/src/components/map/map.react.js +6 -6
- package/src/components/map/map.stories.js +38 -38
- package/src/components/media-text/index.js +1 -1
- package/src/components/media-text/media-text.component.js +76 -70
- package/src/components/media-text/media-text.css +32 -32
- package/src/components/media-text/media-text.js +3 -3
- package/src/components/media-text/media-text.react.js +6 -6
- package/src/components/media-text/media-text.stories.js +45 -45
- package/src/components/media-text/media-text.test.js +72 -0
- package/src/components/newsletter/index.js +1 -1
- package/src/components/newsletter/newsletter.component.js +56 -64
- package/src/components/newsletter/newsletter.css +48 -48
- package/src/components/newsletter/newsletter.js +3 -3
- package/src/components/newsletter/newsletter.react.js +6 -6
- package/src/components/newsletter/newsletter.stories.js +35 -35
- package/src/components/notice/index.js +1 -1
- package/src/components/notice/notice.component.js +66 -55
- package/src/components/notice/notice.css +37 -38
- package/src/components/notice/notice.js +3 -3
- package/src/components/notice/notice.react.js +6 -6
- package/src/components/notice/notice.stories.js +54 -53
- package/src/components/notice/notice.test.js +210 -156
- package/src/components/pagination/index.js +1 -1
- package/src/components/pagination/pagination.component.js +44 -44
- package/src/components/pagination/pagination.css +6 -6
- package/src/components/pagination/pagination.js +4 -4
- package/src/components/pagination/pagination.react.js +6 -6
- package/src/components/pagination/pagination.stories.js +20 -18
- package/src/components/pagination/pagination.test.js +95 -102
- package/src/components/person/index.js +1 -1
- package/src/components/person/person.component.js +29 -29
- package/src/components/person/person.css +17 -17
- package/src/components/person/person.js +4 -4
- package/src/components/person/person.react.js +6 -6
- package/src/components/person/person.stories.js +34 -33
- package/src/components/person/person.test.js +55 -68
- package/src/components/pricing/index.js +1 -1
- package/src/components/pricing/pricing.component.js +58 -70
- package/src/components/pricing/pricing.css +65 -65
- package/src/components/pricing/pricing.js +3 -3
- package/src/components/pricing/pricing.react.js +6 -6
- package/src/components/pricing/pricing.stories.js +96 -96
- package/src/components/sidebar/index.js +1 -1
- package/src/components/sidebar/sidebar.component.js +157 -130
- package/src/components/sidebar/sidebar.css +118 -115
- package/src/components/sidebar/sidebar.js +4 -4
- package/src/components/sidebar/sidebar.react.js +10 -10
- package/src/components/sidebar/sidebar.stories.js +10 -10
- package/src/components/sidebar/sidebar.test.js +250 -230
- package/src/components/stats/index.js +1 -1
- package/src/components/stats/stats.component.js +42 -50
- package/src/components/stats/stats.css +29 -29
- package/src/components/stats/stats.js +3 -3
- package/src/components/stats/stats.react.js +6 -6
- package/src/components/stats/stats.stories.js +40 -40
- package/src/components/tabs/index.js +2 -2
- package/src/components/tabs/internal/tabs-button.component.js +16 -27
- package/src/components/tabs/internal/tabs-button.js +3 -3
- package/src/components/tabs/internal/tabs-button.react.js +6 -6
- package/src/components/tabs/internal/tabs-item.component.js +30 -30
- package/src/components/tabs/tab.component.js +9 -11
- package/src/components/tabs/tab.js +3 -3
- package/src/components/tabs/tab.react.js +6 -6
- package/src/components/tabs/tabs.component.js +107 -109
- package/src/components/tabs/tabs.css +50 -59
- package/src/components/tabs/tabs.js +4 -4
- package/src/components/tabs/tabs.react.js +6 -6
- package/src/components/tabs/tabs.stories.js +23 -22
- package/src/components/tabs/tabs.test.js +201 -147
- package/src/components/testimonials/index.js +1 -1
- package/src/components/testimonials/testimonials.component.js +47 -51
- package/src/components/testimonials/testimonials.css +31 -31
- package/src/components/testimonials/testimonials.js +3 -3
- package/src/components/testimonials/testimonials.react.js +6 -6
- package/src/components/testimonials/testimonials.stories.js +49 -51
- package/src/components/toast/index.js +1 -1
- package/src/components/toast/toast.component.js +217 -148
- package/src/components/toast/toast.css +101 -99
- package/src/components/toast/toast.js +6 -9
- package/src/components/toast/toast.react.js +12 -12
- package/src/components/toast/toast.stories.js +75 -49
- package/src/components/toast/toast.test.js +260 -221
- package/src/components/tooltip/index.js +1 -1
- package/src/components/tooltip/tooltip.component.js +56 -49
- package/src/components/tooltip/tooltip.css +61 -50
- package/src/components/tooltip/tooltip.js +4 -4
- package/src/components/tooltip/tooltip.react.js +6 -6
- package/src/components/tooltip/tooltip.stories.js +24 -23
- package/src/components/tooltip/tooltip.test.js +143 -155
- package/src/constructor.test.js +31 -0
- package/src/css/base.css +1 -0
- package/src/css/colors.stories.js +120 -122
- package/src/css/elements/a.css +28 -28
- package/src/css/elements/forms/button.css +1 -1
- package/src/css/elements/forms/input.css +80 -80
- package/src/css/elements/forms/label.css +3 -3
- package/src/css/elements/media/image.css +2 -2
- package/src/css/elements.stories.js +48 -49
- package/src/css/helpers.css +8 -8
- package/src/css/layers.stories.js +5 -5
- package/src/css/reset.css +102 -102
- package/src/css/themes/todomap.css +1 -1
- package/src/css/tokens.stories.js +50 -53
- package/src/css/typography.css +30 -32
- package/src/css/typography.stories.js +92 -92
- package/src/css/util/focus-ring.css +12 -20
- package/src/css/view-transitions.css +16 -0
- package/src/exports.test.js +89 -105
- package/src/icons.js +1 -1
- package/src/lib/generate-id.js +1 -1
- package/src/lib/slot-presence-controller.js +48 -0
- package/src/lib/styles/all.css +38 -37
- package/src/lib/styles/focus-ring.css +12 -20
- package/src/lib/view-transition.js +42 -0
- package/src/lib/view-transition.test.js +105 -0
- package/src/main.js +29 -29
- package/src/pages/agency.stories.js +59 -59
- package/src/pages/blog-post.stories.js +48 -48
- package/src/pages/saas-landing.stories.js +180 -180
- package/src/react.js +44 -44
- package/src/react.test.js +42 -51
- package/src/test-utils/assert-helpers.js +39 -58
- package/src/test-utils/events.js +32 -34
- package/src/test-utils/fixture.js +31 -31
- package/src/test-utils/index.js +3 -3
- package/src/types.d.ts +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { GrantCodesNotice } from
|
|
1
|
+
import { GrantCodesNotice } from './notice.component.js';
|
|
2
2
|
|
|
3
|
-
export * from
|
|
3
|
+
export * from './notice.component.js';
|
|
4
4
|
export default GrantCodesNotice;
|
|
5
5
|
|
|
6
|
-
customElements.define(
|
|
6
|
+
customElements.define('grantcodes-notice', GrantCodesNotice);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import { GrantCodesNotice } from
|
|
1
|
+
import { createComponent } from '@lit/react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { GrantCodesNotice } from './notice.js';
|
|
4
4
|
|
|
5
5
|
export const Notice = createComponent({
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
tagName: 'grantcodes-notice',
|
|
7
|
+
elementClass: GrantCodesNotice,
|
|
8
|
+
react: React,
|
|
9
9
|
});
|
|
@@ -1,31 +1,32 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { getStorybookHelpers } from '@wc-toolkit/storybook-helpers';
|
|
2
|
+
import { html } from 'lit/static-html.js';
|
|
3
|
+
|
|
4
|
+
const { events, args, argTypes, template } = getStorybookHelpers('grantcodes-notice');
|
|
5
|
+
|
|
6
|
+
import './notice.js';
|
|
6
7
|
|
|
7
8
|
const meta = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
9
|
+
title: 'Components/Notice',
|
|
10
|
+
component: 'grantcodes-notice',
|
|
11
|
+
args: {
|
|
12
|
+
...args,
|
|
13
|
+
text: 'This is the notice content',
|
|
14
|
+
title: 'Notice title',
|
|
15
|
+
variant: 'info',
|
|
16
|
+
dismissable: false,
|
|
17
|
+
},
|
|
18
|
+
argTypes: {
|
|
19
|
+
...argTypes,
|
|
20
|
+
variant: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
render: (args) => template(args, html`${args.text}`),
|
|
25
|
+
parameters: {
|
|
26
|
+
actions: {
|
|
27
|
+
handles: events,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
29
30
|
};
|
|
30
31
|
|
|
31
32
|
export default meta;
|
|
@@ -41,11 +42,11 @@ export const InfoNotice = {};
|
|
|
41
42
|
* Use after successful form submissions, saves, or completions.
|
|
42
43
|
*/
|
|
43
44
|
export const SuccessNotice = {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
args: {
|
|
46
|
+
variant: 'success',
|
|
47
|
+
title: 'Success',
|
|
48
|
+
text: 'Your changes have been saved successfully.',
|
|
49
|
+
},
|
|
49
50
|
};
|
|
50
51
|
|
|
51
52
|
/**
|
|
@@ -53,11 +54,11 @@ export const SuccessNotice = {
|
|
|
53
54
|
* Use to alert users about potential problems that don't block their workflow.
|
|
54
55
|
*/
|
|
55
56
|
export const WarningNotice = {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
args: {
|
|
58
|
+
variant: 'warning',
|
|
59
|
+
title: 'Warning',
|
|
60
|
+
text: 'Your session will expire in 5 minutes.',
|
|
61
|
+
},
|
|
61
62
|
};
|
|
62
63
|
|
|
63
64
|
/**
|
|
@@ -65,11 +66,11 @@ export const WarningNotice = {
|
|
|
65
66
|
* Use when an operation fails or there's a blocking error.
|
|
66
67
|
*/
|
|
67
68
|
export const ErrorNotice = {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
args: {
|
|
70
|
+
variant: 'error',
|
|
71
|
+
title: 'Error',
|
|
72
|
+
text: 'Failed to save changes. Please try again.',
|
|
73
|
+
},
|
|
73
74
|
};
|
|
74
75
|
|
|
75
76
|
/**
|
|
@@ -77,30 +78,30 @@ export const ErrorNotice = {
|
|
|
77
78
|
* The notice will be removed from the DOM when dismissed.
|
|
78
79
|
*/
|
|
79
80
|
export const Dismissable = {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
args: {
|
|
82
|
+
variant: 'info',
|
|
83
|
+
title: 'Dismissable Notice',
|
|
84
|
+
text: 'You can close this notice by clicking the X button.',
|
|
85
|
+
dismissable: true,
|
|
86
|
+
},
|
|
86
87
|
};
|
|
87
88
|
|
|
88
89
|
/**
|
|
89
90
|
* Notice without a title, showing only the message.
|
|
90
91
|
*/
|
|
91
92
|
export const NoTitle = {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
args: {
|
|
94
|
+
variant: 'info',
|
|
95
|
+
title: '',
|
|
96
|
+
text: 'This is a notice without a title, just the content message.',
|
|
97
|
+
},
|
|
97
98
|
};
|
|
98
99
|
|
|
99
100
|
/**
|
|
100
101
|
* All notice variants displayed together for comparison.
|
|
101
102
|
*/
|
|
102
103
|
export const AllVariants = {
|
|
103
|
-
|
|
104
|
+
render: () => html`
|
|
104
105
|
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
105
106
|
<grantcodes-notice variant="info" title="Information">
|
|
106
107
|
This is an informational message for general updates.
|
|
@@ -1,156 +1,210 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
describe(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
1
|
+
import { strict as assert } from 'node:assert';
|
|
2
|
+
import { afterEach, describe, it } from 'node:test';
|
|
3
|
+
import { cleanup, click, fixture } from '../../test-utils/index.js';
|
|
4
|
+
import './notice.js';
|
|
5
|
+
|
|
6
|
+
describe('Notice Component', () => {
|
|
7
|
+
let element;
|
|
8
|
+
|
|
9
|
+
afterEach(() => {
|
|
10
|
+
cleanup(element);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('should render with default properties', async () => {
|
|
14
|
+
element = await fixture('grantcodes-notice');
|
|
15
|
+
assert.ok(element, 'Element should be created');
|
|
16
|
+
assert.ok(element.shadowRoot, 'Element should have shadow root');
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('should have info variant by default', async () => {
|
|
20
|
+
element = await fixture('grantcodes-notice');
|
|
21
|
+
assert.strictEqual(element.variant, 'info', 'Default variant should be info');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('should render with info variant class', async () => {
|
|
25
|
+
element = await fixture('grantcodes-notice', {
|
|
26
|
+
variant: 'info',
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const notice = element.shadowRoot.querySelector('.notice--info');
|
|
30
|
+
assert.ok(notice, 'Notice should have info class');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('should render with success variant class', async () => {
|
|
34
|
+
element = await fixture('grantcodes-notice', {
|
|
35
|
+
variant: 'success',
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const notice = element.shadowRoot.querySelector('.notice--success');
|
|
39
|
+
assert.ok(notice, 'Notice should have success class');
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('should render with warning variant class', async () => {
|
|
43
|
+
element = await fixture('grantcodes-notice', {
|
|
44
|
+
variant: 'warning',
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
const notice = element.shadowRoot.querySelector('.notice--warning');
|
|
48
|
+
assert.ok(notice, 'Notice should have warning class');
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('should render with error variant class', async () => {
|
|
52
|
+
element = await fixture('grantcodes-notice', {
|
|
53
|
+
variant: 'error',
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const notice = element.shadowRoot.querySelector('.notice--error');
|
|
57
|
+
assert.ok(notice, 'Notice should have error class');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('should display title when provided', async () => {
|
|
61
|
+
element = await fixture('grantcodes-notice', {
|
|
62
|
+
title: 'Important Notice',
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const title = element.shadowRoot.querySelector('.notice__title');
|
|
66
|
+
assert.ok(title, 'Title element should exist');
|
|
67
|
+
assert.strictEqual(title.textContent, 'Important Notice', 'Title text should match');
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('should not display title when not provided', async () => {
|
|
71
|
+
element = await fixture('grantcodes-notice');
|
|
72
|
+
|
|
73
|
+
const title = element.shadowRoot.querySelector('.notice__title');
|
|
74
|
+
assert.ok(!title, 'Title element should not exist');
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('should not be dismissable by default', async () => {
|
|
78
|
+
element = await fixture('grantcodes-notice');
|
|
79
|
+
assert.strictEqual(element.dismissable, false, 'Should not be dismissable by default');
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('should render dismiss button when dismissable', async () => {
|
|
83
|
+
element = await fixture('grantcodes-notice', {
|
|
84
|
+
dismissable: true,
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
const closeButton = element.shadowRoot.querySelector('.notice__close');
|
|
88
|
+
assert.ok(closeButton, 'Close button should exist');
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('should not render dismiss button when not dismissable', async () => {
|
|
92
|
+
element = await fixture('grantcodes-notice', {
|
|
93
|
+
dismissable: false,
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
const closeButton = element.shadowRoot.querySelector('.notice__close');
|
|
97
|
+
assert.ok(!closeButton, 'Close button should not exist');
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('should render appropriate icon for variant', async () => {
|
|
101
|
+
element = await fixture('grantcodes-notice', {
|
|
102
|
+
variant: 'success',
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
const icon = element.shadowRoot.querySelector('.notice__icon');
|
|
106
|
+
assert.ok(icon, 'Icon should be present');
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('should have content slot', async () => {
|
|
110
|
+
element = await fixture('grantcodes-notice');
|
|
111
|
+
const slot = element.shadowRoot.querySelector('slot');
|
|
112
|
+
assert.ok(slot, 'Slot should exist for content');
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('should render slotted content', async () => {
|
|
116
|
+
element = await fixture('grantcodes-notice');
|
|
117
|
+
element.textContent = 'This is a notice message';
|
|
118
|
+
|
|
119
|
+
await element.updateComplete;
|
|
120
|
+
|
|
121
|
+
assert.strictEqual(
|
|
122
|
+
element.textContent,
|
|
123
|
+
'This is a notice message',
|
|
124
|
+
'Slotted content should be present',
|
|
125
|
+
);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('should remove element when dismissed', async () => {
|
|
129
|
+
element = await fixture('grantcodes-notice', {
|
|
130
|
+
dismissable: true,
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
const closeButton = element.shadowRoot.querySelector('.notice__close');
|
|
134
|
+
const parentBeforeDismiss = element.parentNode;
|
|
135
|
+
|
|
136
|
+
assert.ok(parentBeforeDismiss, 'Element should have a parent');
|
|
137
|
+
|
|
138
|
+
// Note: In actual tests, the element removal via view transitions might need special handling
|
|
139
|
+
click(closeButton);
|
|
140
|
+
|
|
141
|
+
// Give time for the dismiss handler to execute
|
|
142
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it('should give the dismiss button a type that cannot submit forms', async () => {
|
|
146
|
+
element = await fixture('grantcodes-notice', { dismissable: true });
|
|
147
|
+
|
|
148
|
+
const closeButton = element.shadowRoot.querySelector('.notice__close');
|
|
149
|
+
assert.strictEqual(closeButton.getAttribute('type'), 'button');
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
it('should give the dismiss button an accessible name', async () => {
|
|
153
|
+
element = await fixture('grantcodes-notice', { dismissable: true });
|
|
154
|
+
|
|
155
|
+
const closeButton = element.shadowRoot.querySelector('.notice__close');
|
|
156
|
+
assert.ok(
|
|
157
|
+
closeButton.getAttribute('aria-label')?.trim(),
|
|
158
|
+
'Dismiss button needs an accessible name',
|
|
159
|
+
);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it('should hide the decorative close icon from assistive tech', async () => {
|
|
163
|
+
element = await fixture('grantcodes-notice', { dismissable: true });
|
|
164
|
+
|
|
165
|
+
const icon = element.shadowRoot.querySelector('.notice__close grantcodes-icon');
|
|
166
|
+
assert.strictEqual(icon.getAttribute('title'), null, 'An icon title cannot name the button');
|
|
167
|
+
assert.strictEqual(icon.getAttribute('aria-hidden'), 'true');
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
it('should remove the notice without a view transition when reduced motion is preferred', async () => {
|
|
171
|
+
element = await fixture('grantcodes-notice', { dismissable: true });
|
|
172
|
+
|
|
173
|
+
const originalMatchMedia = globalThis.window.matchMedia;
|
|
174
|
+
let transitions = 0;
|
|
175
|
+
globalThis.window.matchMedia = () => ({ matches: true });
|
|
176
|
+
globalThis.document.startViewTransition = () => {
|
|
177
|
+
transitions++;
|
|
178
|
+
return { finished: Promise.resolve() };
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
click(element.shadowRoot.querySelector('.notice__close'));
|
|
182
|
+
|
|
183
|
+
globalThis.window.matchMedia = originalMatchMedia;
|
|
184
|
+
globalThis.document.startViewTransition = undefined;
|
|
185
|
+
|
|
186
|
+
assert.strictEqual(transitions, 0, 'Reduced motion must skip the view transition');
|
|
187
|
+
assert.strictEqual(element.parentNode, null, 'Notice should still be removed');
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
it('should dismiss through a view transition when motion is allowed', async () => {
|
|
191
|
+
element = await fixture('grantcodes-notice', { dismissable: true });
|
|
192
|
+
|
|
193
|
+
const originalMatchMedia = globalThis.window.matchMedia;
|
|
194
|
+
let transitions = 0;
|
|
195
|
+
globalThis.window.matchMedia = () => ({ matches: false });
|
|
196
|
+
globalThis.document.startViewTransition = (callback) => {
|
|
197
|
+
transitions++;
|
|
198
|
+
callback();
|
|
199
|
+
return { finished: Promise.resolve() };
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
click(element.shadowRoot.querySelector('.notice__close'));
|
|
203
|
+
|
|
204
|
+
globalThis.window.matchMedia = originalMatchMedia;
|
|
205
|
+
globalThis.document.startViewTransition = undefined;
|
|
206
|
+
|
|
207
|
+
assert.strictEqual(transitions, 1, 'Dismissal should animate when motion is allowed');
|
|
208
|
+
assert.strictEqual(element.parentNode, null, 'Notice should be removed');
|
|
209
|
+
});
|
|
210
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from './pagination.js';
|