@nuvia-ui/components 4.0.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.
- package/package.json +27 -0
- package/src/ds-accordion/ds-accordion-item.js +288 -0
- package/src/ds-accordion/ds-accordion-item.stories.js +82 -0
- package/src/ds-accordion/ds-accordion.a11y.test.js +92 -0
- package/src/ds-accordion/ds-accordion.js +68 -0
- package/src/ds-accordion/ds-accordion.stories.js +118 -0
- package/src/ds-accordion/ds-accordion.test.js +146 -0
- package/src/ds-accordion/index.js +2 -0
- package/src/ds-action-bar/ds-action-bar.js +116 -0
- package/src/ds-action-bar/ds-action-bar.stories.js +86 -0
- package/src/ds-action-bar/ds-action-bar.test.js +64 -0
- package/src/ds-action-bar/index.js +1 -0
- package/src/ds-alert/ds-alert.a11y.test.js +151 -0
- package/src/ds-alert/ds-alert.js +223 -0
- package/src/ds-alert/ds-alert.mdx +142 -0
- package/src/ds-alert/ds-alert.stories.js +166 -0
- package/src/ds-alert/ds-alert.test.js +256 -0
- package/src/ds-alert/index.js +1 -0
- package/src/ds-avatar/ds-avatar.a11y.test.js +45 -0
- package/src/ds-avatar/ds-avatar.js +216 -0
- package/src/ds-avatar/ds-avatar.stories.js +120 -0
- package/src/ds-avatar/ds-avatar.test.js +83 -0
- package/src/ds-avatar/index.js +1 -0
- package/src/ds-avatar-extended/ds-avatar-extended.a11y.test.js +29 -0
- package/src/ds-avatar-extended/ds-avatar-extended.js +108 -0
- package/src/ds-avatar-extended/ds-avatar-extended.stories.js +93 -0
- package/src/ds-avatar-extended/ds-avatar-extended.test.js +66 -0
- package/src/ds-avatar-extended/index.js +1 -0
- package/src/ds-banner/ds-banner.a11y.test.js +51 -0
- package/src/ds-banner/ds-banner.js +233 -0
- package/src/ds-banner/ds-banner.stories.js +185 -0
- package/src/ds-banner/ds-banner.test.js +116 -0
- package/src/ds-banner/index.js +1 -0
- package/src/ds-breadcrumb-item/ds-breadcrumb-item.js +135 -0
- package/src/ds-breadcrumb-item/ds-breadcrumb-item.stories.js +49 -0
- package/src/ds-breadcrumb-item/ds-breadcrumb-item.test.js +55 -0
- package/src/ds-breadcrumbs/ds-breadcrumbs.js +194 -0
- package/src/ds-breadcrumbs/ds-breadcrumbs.stories.js +54 -0
- package/src/ds-breadcrumbs/ds-breadcrumbs.test.js +33 -0
- package/src/ds-button/ds-button.a11y.test.js +49 -0
- package/src/ds-button/ds-button.js +205 -0
- package/src/ds-button/ds-button.mdx +141 -0
- package/src/ds-button/ds-button.stories.js +152 -0
- package/src/ds-button/ds-button.test.js +62 -0
- package/src/ds-button/index.js +1 -0
- package/src/ds-button-group/ds-button-group.js +82 -0
- package/src/ds-button-group/ds-button-group.mdx +39 -0
- package/src/ds-button-group/ds-button-group.stories.js +47 -0
- package/src/ds-button-group/ds-button-group.test.js +47 -0
- package/src/ds-button-group/index.js +1 -0
- package/src/ds-checkbox/ds-checkbox.a11y.test.js +79 -0
- package/src/ds-checkbox/ds-checkbox.js +271 -0
- package/src/ds-checkbox/ds-checkbox.stories.js +77 -0
- package/src/ds-checkbox/ds-checkbox.test.js +191 -0
- package/src/ds-checkbox/index.js +1 -0
- package/src/ds-checkbox-group/ds-checkbox-group.a11y.test.js +146 -0
- package/src/ds-checkbox-group/ds-checkbox-group.js +235 -0
- package/src/ds-checkbox-group/ds-checkbox-group.stories.js +210 -0
- package/src/ds-checkbox-group/ds-checkbox-group.test.js +150 -0
- package/src/ds-checkbox-group/index.js +1 -0
- package/src/ds-dialog/ds-dialog.js +466 -0
- package/src/ds-dialog/ds-dialog.stories.js +274 -0
- package/src/ds-dialog/ds-dialog.test.js +441 -0
- package/src/ds-dialog/index.js +1 -0
- package/src/ds-dropdown/ds-dropdown.a11y.test.js +80 -0
- package/src/ds-dropdown/ds-dropdown.js +891 -0
- package/src/ds-dropdown/ds-dropdown.stories.js +259 -0
- package/src/ds-dropdown/ds-dropdown.test.js +268 -0
- package/src/ds-dropdown/index.js +1 -0
- package/src/ds-dropdown-group/ds-dropdown-group.js +55 -0
- package/src/ds-dropdown-panel/ds-dropdown-panel.js +34 -0
- package/src/ds-file-uploaded/ds-file-uploaded.a11y.test.js +40 -0
- package/src/ds-file-uploaded/ds-file-uploaded.js +135 -0
- package/src/ds-file-uploaded/ds-file-uploaded.mdx +33 -0
- package/src/ds-file-uploaded/ds-file-uploaded.stories.js +81 -0
- package/src/ds-file-uploaded/ds-file-uploaded.test.js +85 -0
- package/src/ds-file-uploader/ds-file-uploader.a11y.test.js +61 -0
- package/src/ds-file-uploader/ds-file-uploader.js +442 -0
- package/src/ds-file-uploader/ds-file-uploader.mdx +44 -0
- package/src/ds-file-uploader/ds-file-uploader.stories.js +76 -0
- package/src/ds-file-uploader/ds-file-uploader.test.js +142 -0
- package/src/ds-header/ds-header.a11y.test.js +38 -0
- package/src/ds-header/ds-header.js +149 -0
- package/src/ds-header/ds-header.stories.js +63 -0
- package/src/ds-header/ds-header.test.js +52 -0
- package/src/ds-header/index.js +1 -0
- package/src/ds-header-nav/ds-header-nav.a11y.test.js +69 -0
- package/src/ds-header-nav/ds-header-nav.js +114 -0
- package/src/ds-header-nav/ds-header-nav.stories.js +17 -0
- package/src/ds-header-nav/ds-header-nav.test.js +93 -0
- package/src/ds-header-nav-item/ds-header-nav-item.a11y.test.js +71 -0
- package/src/ds-header-nav-item/ds-header-nav-item.js +124 -0
- package/src/ds-header-nav-item/ds-header-nav-item.stories.js +43 -0
- package/src/ds-header-nav-item/ds-header-nav-item.test.js +61 -0
- package/src/ds-icon/ds-icon.a11y.test.js +49 -0
- package/src/ds-icon/ds-icon.js +75 -0
- package/src/ds-icon/ds-icon.mdx +36 -0
- package/src/ds-icon/ds-icon.stories.js +88 -0
- package/src/ds-icon/ds-icon.test.js +97 -0
- package/src/ds-icon/index.js +1 -0
- package/src/ds-icon-button/ds-icon-button.a11y.test.js +55 -0
- package/src/ds-icon-button/ds-icon-button.js +224 -0
- package/src/ds-icon-button/ds-icon-button.mdx +131 -0
- package/src/ds-icon-button/ds-icon-button.stories.js +128 -0
- package/src/ds-icon-button/ds-icon-button.test.js +90 -0
- package/src/ds-icon-button/index.js +1 -0
- package/src/ds-input/ds-input.a11y.test.js +145 -0
- package/src/ds-input/ds-input.js +645 -0
- package/src/ds-input/ds-input.mdx +251 -0
- package/src/ds-input/ds-input.stories.js +298 -0
- package/src/ds-input/ds-input.test.js +792 -0
- package/src/ds-input/index.js +1 -0
- package/src/ds-link/ds-link.js +111 -0
- package/src/ds-link/ds-link.stories.js +56 -0
- package/src/ds-link/ds-link.test.js +74 -0
- package/src/ds-list-item/ds-list-item.a11y.test.js +39 -0
- package/src/ds-list-item/ds-list-item.js +292 -0
- package/src/ds-list-item/ds-list-item.stories.js +101 -0
- package/src/ds-list-item/ds-list-item.test.js +63 -0
- package/src/ds-menu/ds-menu.js +30 -0
- package/src/ds-menu/ds-menu.stories.js +120 -0
- package/src/ds-menu/ds-menu.test.js +123 -0
- package/src/ds-menu-group/ds-menu-group.js +101 -0
- package/src/ds-menu-group/ds-menu-group.stories.js +99 -0
- package/src/ds-nav-item/ds-nav-item.a11y.test.js +91 -0
- package/src/ds-nav-item/ds-nav-item.js +307 -0
- package/src/ds-nav-item/ds-nav-item.stories.js +99 -0
- package/src/ds-nav-item/ds-nav-item.test.js +169 -0
- package/src/ds-nav-item/index.js +1 -0
- package/src/ds-nav-vertical/ds-nav-vertical.a11y.test.js +69 -0
- package/src/ds-nav-vertical/ds-nav-vertical.js +173 -0
- package/src/ds-nav-vertical/ds-nav-vertical.stories.js +124 -0
- package/src/ds-nav-vertical/ds-nav-vertical.test.js +176 -0
- package/src/ds-nav-vertical/index.js +1 -0
- package/src/ds-pagination/ds-pagination.a11y.test.js +50 -0
- package/src/ds-pagination/ds-pagination.js +232 -0
- package/src/ds-pagination/ds-pagination.stories.js +63 -0
- package/src/ds-pagination/ds-pagination.test.js +141 -0
- package/src/ds-pagination/index.js +1 -0
- package/src/ds-progress-bar/ds-progress-bar.a11y.test.js +25 -0
- package/src/ds-progress-bar/ds-progress-bar.js +81 -0
- package/src/ds-progress-bar/ds-progress-bar.stories.js +69 -0
- package/src/ds-progress-bar/ds-progress-bar.test.js +60 -0
- package/src/ds-radio/ds-radio.a11y.test.js +69 -0
- package/src/ds-radio/ds-radio.js +240 -0
- package/src/ds-radio/ds-radio.stories.js +102 -0
- package/src/ds-radio/ds-radio.test.js +114 -0
- package/src/ds-radio/index.js +1 -0
- package/src/ds-radio-group/ds-radio-group.a11y.test.js +164 -0
- package/src/ds-radio-group/ds-radio-group.js +257 -0
- package/src/ds-radio-group/ds-radio-group.stories.js +247 -0
- package/src/ds-radio-group/ds-radio-group.test.js +194 -0
- package/src/ds-radio-group/index.js +1 -0
- package/src/ds-rich-list/ds-rich-list.js +246 -0
- package/src/ds-rich-list/ds-rich-list.stories.js +368 -0
- package/src/ds-rich-list/ds-rich-list.test.js +293 -0
- package/src/ds-rich-list-item/ds-rich-list-item.js +579 -0
- package/src/ds-rich-list-item/ds-rich-list-item.stories.js +197 -0
- package/src/ds-rich-list-item/ds-rich-list-item.test.js +434 -0
- package/src/ds-slider/ds-slider.js +399 -0
- package/src/ds-slider/ds-slider.stories.js +107 -0
- package/src/ds-slider/ds-slider.test.js +308 -0
- package/src/ds-spinner/ds-spinner.js +173 -0
- package/src/ds-spinner/ds-spinner.stories.js +52 -0
- package/src/ds-spinner/ds-spinner.test.js +50 -0
- package/src/ds-status-border/ds-status-border.js +88 -0
- package/src/ds-status-border/ds-status-border.stories.js +242 -0
- package/src/ds-status-border/ds-status-border.test.js +168 -0
- package/src/ds-stepper/ds-stepper.a11y.test.js +198 -0
- package/src/ds-stepper/ds-stepper.js +207 -0
- package/src/ds-stepper/ds-stepper.stories.js +530 -0
- package/src/ds-stepper/ds-stepper.test.js +311 -0
- package/src/ds-stepper-item/ds-stepper-item.js +485 -0
- package/src/ds-stepper-item/ds-stepper-item.stories.js +288 -0
- package/src/ds-switch/ds-switch.js +348 -0
- package/src/ds-switch/ds-switch.stories.js +145 -0
- package/src/ds-switch/ds-switch.test.js +226 -0
- package/src/ds-switch/index.js +1 -0
- package/src/ds-tab-item/ds-tab-item.js +341 -0
- package/src/ds-tab-item/ds-tab-item.stories.js +69 -0
- package/src/ds-tabs/ds-tab-panel.js +48 -0
- package/src/ds-tabs/ds-tabs.a11y.test.js +56 -0
- package/src/ds-tabs/ds-tabs.js +180 -0
- package/src/ds-tabs/ds-tabs.stories.js +152 -0
- package/src/ds-tabs/ds-tabs.test.js +306 -0
- package/src/ds-tabs/index.js +3 -0
- package/src/ds-tag-action/ds-tag-action.a11y.test.js +32 -0
- package/src/ds-tag-action/ds-tag-action.js +185 -0
- package/src/ds-tag-action/ds-tag-action.stories.js +55 -0
- package/src/ds-tag-action/ds-tag-action.test.js +44 -0
- package/src/ds-tag-removable/ds-tag-removable.a11y.test.js +24 -0
- package/src/ds-tag-removable/ds-tag-removable.js +146 -0
- package/src/ds-tag-removable/ds-tag-removable.stories.js +52 -0
- package/src/ds-tag-removable/ds-tag-removable.test.js +46 -0
- package/src/ds-tag-status/ds-tag-status.a11y.test.js +93 -0
- package/src/ds-tag-status/ds-tag-status.js +164 -0
- package/src/ds-tag-status/ds-tag-status.stories.js +200 -0
- package/src/ds-tag-status/ds-tag-status.test.js +140 -0
- package/src/ds-tag-status/index.js +1 -0
- package/src/ds-textarea/ds-textarea-clearable.test.js +89 -0
- package/src/ds-textarea/ds-textarea.a11y.test.js +66 -0
- package/src/ds-textarea/ds-textarea.js +505 -0
- package/src/ds-textarea/ds-textarea.stories.js +335 -0
- package/src/ds-textarea/ds-textarea.test.js +218 -0
- package/src/ds-textarea/index.js +1 -0
- package/src/ds-thumbnail/ds-thumbnail.js +207 -0
- package/src/ds-thumbnail/ds-thumbnail.stories.js +217 -0
- package/src/ds-thumbnail/ds-thumbnail.test.js +220 -0
- package/src/ds-toast/ds-toast-provider.js +110 -0
- package/src/ds-toast/ds-toast.a11y.test.js +34 -0
- package/src/ds-toast/ds-toast.js +243 -0
- package/src/ds-toast/ds-toast.stories.js +143 -0
- package/src/ds-toast/ds-toast.test.js +93 -0
- package/src/ds-toast/index.js +2 -0
- package/src/ds-tooltip/ds-tooltip.a11y.test.js +110 -0
- package/src/ds-tooltip/ds-tooltip.js +217 -0
- package/src/ds-tooltip/ds-tooltip.mdx +75 -0
- package/src/ds-tooltip/ds-tooltip.stories.js +72 -0
- package/src/ds-tooltip/ds-tooltip.test.js +191 -0
- package/src/ds-tooltip/index.js +1 -0
- package/src/ds-tooltip/positioner.js +117 -0
- package/src/index.js +50 -0
- package/src/mixins/field-label.mixin.js +113 -0
- package/src/mixins/field-message.mixin.js +66 -0
- package/src/token-provider/index.js +1 -0
- package/src/token-provider/token-provider.a11y.test.js +44 -0
- package/src/token-provider/token-provider.js +85 -0
- package/src/token-provider/token-provider.stories.js +105 -0
- package/src/token-provider/token-provider.test.js +134 -0
- package/src/utils/number-input.utils.js +42 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import { useArgs } from '@storybook/preview-api';
|
|
3
|
+
import './ds-dialog.js';
|
|
4
|
+
import '../ds-action-bar/ds-action-bar.js';
|
|
5
|
+
import '../ds-header/ds-header.js';
|
|
6
|
+
import '../ds-nav-vertical/ds-nav-vertical.js';
|
|
7
|
+
import '../ds-nav-item/ds-nav-item.js';
|
|
8
|
+
import '../ds-input/ds-input.js';
|
|
9
|
+
import '../ds-icon/ds-icon.js';
|
|
10
|
+
import '../ds-icon-button/ds-icon-button.js';
|
|
11
|
+
import '../ds-button/ds-button.js';
|
|
12
|
+
import '../ds-button-group/ds-button-group.js';
|
|
13
|
+
|
|
14
|
+
export default {
|
|
15
|
+
title: 'Components/Dialog',
|
|
16
|
+
component: 'ds-dialog',
|
|
17
|
+
argTypes: {
|
|
18
|
+
open: { control: 'boolean' },
|
|
19
|
+
heading: { control: 'text' },
|
|
20
|
+
size: {
|
|
21
|
+
control: { type: 'select' },
|
|
22
|
+
options: ['sm', 'md', 'lg', 'fullscreen']
|
|
23
|
+
},
|
|
24
|
+
preventClose: { control: 'boolean' },
|
|
25
|
+
modal: { control: 'boolean', description: 'If true, shows as modal with backdrop.' },
|
|
26
|
+
position: {
|
|
27
|
+
control: { type: 'select' },
|
|
28
|
+
options: ['center', 'top-left', 'top-right', 'bottom-left', 'bottom-right'],
|
|
29
|
+
description: 'Where to display the dialog (Non-modal only)'
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
parameters: {
|
|
33
|
+
layout: 'fullscreen',
|
|
34
|
+
},
|
|
35
|
+
decorators: [
|
|
36
|
+
(Story) => html`<div style="min-height: 100vh; padding: 24px; box-sizing: border-box; display: flex; align-items: flex-start; justify-content: center;">${Story()}</div>`
|
|
37
|
+
]
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const Template = (args) => {
|
|
41
|
+
const [{ open }, updateArgs] = useArgs();
|
|
42
|
+
|
|
43
|
+
const handleClose = () => {
|
|
44
|
+
updateArgs({ open: false });
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const handleOpen = () => {
|
|
48
|
+
updateArgs({ open: true });
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return html`
|
|
52
|
+
<ds-button @click=${handleOpen}>Open Dialog</ds-button>
|
|
53
|
+
|
|
54
|
+
<ds-dialog
|
|
55
|
+
?open=${open}
|
|
56
|
+
heading=${args.heading}
|
|
57
|
+
size=${args.size}
|
|
58
|
+
?prevent-close=${args.preventClose}
|
|
59
|
+
?modal=${args.modal}
|
|
60
|
+
@ds-close=${handleClose}
|
|
61
|
+
>
|
|
62
|
+
<div>
|
|
63
|
+
<p>This is the default content passed to the body slot.</p>
|
|
64
|
+
<p>It has the default typography and padding defined by the requirements.</p>
|
|
65
|
+
${!args.modal ? html`<p><strong>Non-Modal Mode:</strong> Try clicking the "Open Dialog" button behind me. You should be able to interact with the page.</p>` : ''}
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<ds-action-bar slot="footer" variant="pattern" divider>
|
|
69
|
+
<ds-button-group align="end">
|
|
70
|
+
<ds-button variant="primary" @click=${handleClose}>Confirm</ds-button>
|
|
71
|
+
<ds-button variant="secondary" @click=${handleClose}>Cancel</ds-button>
|
|
72
|
+
</ds-button-group>
|
|
73
|
+
</ds-action-bar>
|
|
74
|
+
</ds-dialog>
|
|
75
|
+
`;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export const Default = Template.bind({});
|
|
79
|
+
Default.args = {
|
|
80
|
+
open: false,
|
|
81
|
+
heading: 'Dialog Title',
|
|
82
|
+
size: 'md',
|
|
83
|
+
preventClose: false,
|
|
84
|
+
modal: true // Explicitly set to true for default story
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// Dedicated visual test for Non-Modal behavior
|
|
88
|
+
export const NonModal = (args) => {
|
|
89
|
+
const [{ open }, updateArgs] = useArgs();
|
|
90
|
+
|
|
91
|
+
// Auto-open for better DX on first view
|
|
92
|
+
const handleClose = () => updateArgs({ open: false });
|
|
93
|
+
const handleOpen = () => updateArgs({ open: true });
|
|
94
|
+
|
|
95
|
+
return html`
|
|
96
|
+
<div style="height: 100vh; display: flex; flex-direction: column; background: var(--ds-color-bg-surface-secondary, #f4f4f4);">
|
|
97
|
+
<!-- DS Header -->
|
|
98
|
+
<ds-header>
|
|
99
|
+
<div slot="logo" style="display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; background: var(--ds-color-bg-brand, #0052cc); color: white; border-radius: 4px;">DS</div>
|
|
100
|
+
<span slot="app-name">App Dashboard</span>
|
|
101
|
+
|
|
102
|
+
<div slot="actions">
|
|
103
|
+
<!-- Trigger inside standard location -->
|
|
104
|
+
<ds-button variant="primary" size="small" @click=${handleOpen}>Open Utility Window</ds-button>
|
|
105
|
+
</div>
|
|
106
|
+
</ds-header>
|
|
107
|
+
|
|
108
|
+
<div style="flex: 1; display: flex; overflow: hidden;">
|
|
109
|
+
<!-- DS Sidebar -->
|
|
110
|
+
<aside style="width: 250px; border-right: 1px solid var(--ds-color-border-subtle, #e0e0e0); background: white;">
|
|
111
|
+
<ds-nav-vertical value="dashboard">
|
|
112
|
+
<ds-nav-item label="Dashboard" icon="dashboard" value="dashboard" selected></ds-nav-item>
|
|
113
|
+
<ds-nav-item label="Projects" icon="folder" value="projects"></ds-nav-item>
|
|
114
|
+
<ds-nav-item label="Settings" icon="settings" value="settings"></ds-nav-item>
|
|
115
|
+
</ds-nav-vertical>
|
|
116
|
+
</aside>
|
|
117
|
+
|
|
118
|
+
<!-- Main Content Area -->
|
|
119
|
+
<main style="flex: 1; padding: 32px; overflow-y: auto; position: relative;">
|
|
120
|
+
<div style="max-width: 800px; margin: 0 auto;">
|
|
121
|
+
<h1 style="font: var(--ds-typo-heading-xl, bold 32px sans-serif); margin-bottom: 16px;">
|
|
122
|
+
Interactive Workflow
|
|
123
|
+
</h1>
|
|
124
|
+
<p style="font: var(--ds-typo-content-body-regular); color: var(--ds-color-text-secondary); margin-bottom: 32px;">
|
|
125
|
+
This layout demonstrates how a <strong>Non-Modal Dialog</strong> co-exists with the main application flow.
|
|
126
|
+
You can interact with the sidebar or the form below without closing the dialog.
|
|
127
|
+
</p>
|
|
128
|
+
|
|
129
|
+
<!-- Interactive Form using DS Components -->
|
|
130
|
+
<div style="background: white; padding: 24px; border-radius: 8px; border: 1px solid var(--ds-color-border-subtle, #e0e0e0); display: flex; flex-direction: column; gap: 24px;">
|
|
131
|
+
<h3 style="font: var(--ds-typo-heading-sm); margin: 0;">User Profile</h3>
|
|
132
|
+
|
|
133
|
+
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 24px;">
|
|
134
|
+
<ds-input label="First Name" placeholder="e.g. Miguel" value="Miguel"></ds-input>
|
|
135
|
+
<ds-input label="Last Name" placeholder="e.g. Silva"></ds-input>
|
|
136
|
+
</div>
|
|
137
|
+
|
|
138
|
+
<ds-input label="Email Address" type="email" placeholder="name@company.com" info="We will never share your email."></ds-input>
|
|
139
|
+
|
|
140
|
+
<div style="display: flex; justify-content: flex-end; gap: 16px;">
|
|
141
|
+
<ds-button variant="secondary">Cancel</ds-button>
|
|
142
|
+
<ds-button variant="primary">Save Changes</ds-button>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
|
|
147
|
+
<!-- The Non-Modal Dialog -->
|
|
148
|
+
<!-- Positioned relative to viewport or simply centered but non-blocking -->
|
|
149
|
+
<ds-dialog
|
|
150
|
+
?open=${open}
|
|
151
|
+
heading=${args.heading}
|
|
152
|
+
size=${args.size}
|
|
153
|
+
?prevent-close=${args.preventClose}
|
|
154
|
+
?modal=${args.modal}
|
|
155
|
+
position=${args.position}
|
|
156
|
+
@ds-close=${handleClose}
|
|
157
|
+
>
|
|
158
|
+
<div style="padding-bottom: 16px;">
|
|
159
|
+
<p style="margin-top: 0">I am a floating utility window.</p>
|
|
160
|
+
<p>Try ignoring me and clicking "Save Changes" on the form behind me!</p>
|
|
161
|
+
</div>
|
|
162
|
+
<ds-action-bar slot="footer" variant="pattern" divider>
|
|
163
|
+
<ds-button-group align="end">
|
|
164
|
+
<ds-button variant="secondary" @click=${handleClose}>Close</ds-button>
|
|
165
|
+
</ds-button-group>
|
|
166
|
+
</ds-action-bar>
|
|
167
|
+
</ds-dialog>
|
|
168
|
+
</main>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
`;
|
|
172
|
+
};
|
|
173
|
+
NonModal.args = {
|
|
174
|
+
...Default.args,
|
|
175
|
+
open: true, // Start open to demonstrate immediate non-blocking nature
|
|
176
|
+
heading: 'Utility Window',
|
|
177
|
+
modal: false,
|
|
178
|
+
position: 'bottom-right'
|
|
179
|
+
};
|
|
180
|
+
NonModal.parameters = {
|
|
181
|
+
layout: 'fullscreen', // Ensure it takes full space
|
|
182
|
+
docs: {
|
|
183
|
+
story: {
|
|
184
|
+
description: 'Non-modal dialogs allow full interaction with the underlying page. Perfect for reference tools, tutorials, or secondary workflows.'
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
export const Small = Template.bind({});
|
|
191
|
+
Small.args = {
|
|
192
|
+
...Default.args,
|
|
193
|
+
size: 'sm',
|
|
194
|
+
heading: 'Small Dialog'
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
export const Large = Template.bind({});
|
|
198
|
+
Large.args = {
|
|
199
|
+
...Default.args,
|
|
200
|
+
size: 'lg',
|
|
201
|
+
heading: 'Large Dialog'
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
export const Fullscreen = Template.bind({});
|
|
205
|
+
Fullscreen.args = {
|
|
206
|
+
...Default.args,
|
|
207
|
+
size: 'fullscreen',
|
|
208
|
+
heading: 'Fullscreen Dialog'
|
|
209
|
+
};
|
|
210
|
+
// Override the template for Fullscreen to use 'page' variant action bar
|
|
211
|
+
Fullscreen.decorators = [
|
|
212
|
+
(Story, context) => {
|
|
213
|
+
const { args } = context;
|
|
214
|
+
// We can't easily change the internal Template logic from here without duplicating it or using a refined Template.
|
|
215
|
+
// Let's define a specific render for this story to ensure 'page' variant usage.
|
|
216
|
+
const [{ open }, updateArgs] = useArgs();
|
|
217
|
+
const handleClose = () => updateArgs({ open: false });
|
|
218
|
+
const handleOpen = () => updateArgs({ open: true });
|
|
219
|
+
|
|
220
|
+
return html`
|
|
221
|
+
<ds-button @click=${handleOpen}>Open Fullscreen Dialog</ds-button>
|
|
222
|
+
|
|
223
|
+
<ds-dialog
|
|
224
|
+
?open=${open}
|
|
225
|
+
heading=${args.heading}
|
|
226
|
+
size="fullscreen"
|
|
227
|
+
?prevent-close=${args.preventClose}
|
|
228
|
+
?modal=${args.modal}
|
|
229
|
+
@ds-close=${handleClose}
|
|
230
|
+
>
|
|
231
|
+
<div>
|
|
232
|
+
${Array(20).fill(html`<p>This is a fullscreen dialog with a lot of content to demonstrate scrolling behavior and sticky headers/footers.</p>`).map(p => p)}
|
|
233
|
+
</div>
|
|
234
|
+
|
|
235
|
+
<!-- Requirement: 'page' variant for fullscreen -->
|
|
236
|
+
<ds-action-bar slot="footer" variant="page" divider>
|
|
237
|
+
<ds-button-group align="end">
|
|
238
|
+
<ds-button variant="primary" @click=${handleClose}>Save Changes</ds-button>
|
|
239
|
+
<ds-button variant="secondary" @click=${handleClose}>Cancel</ds-button>
|
|
240
|
+
</ds-button-group>
|
|
241
|
+
</ds-action-bar>
|
|
242
|
+
</ds-dialog>
|
|
243
|
+
`;
|
|
244
|
+
}
|
|
245
|
+
];
|
|
246
|
+
|
|
247
|
+
export const ScrollingContent = (args) => {
|
|
248
|
+
const [{ open }, updateArgs] = useArgs();
|
|
249
|
+
|
|
250
|
+
const handleClose = () => updateArgs({ open: false });
|
|
251
|
+
const handleOpen = () => updateArgs({ open: true });
|
|
252
|
+
|
|
253
|
+
return html`
|
|
254
|
+
<ds-button @click=${handleOpen}>Open Long Dialog</ds-button>
|
|
255
|
+
|
|
256
|
+
<ds-dialog ?open=${open} heading="Terms and Conditions" size="md" ?modal=${args.modal} @ds-close=${handleClose}>
|
|
257
|
+
|
|
258
|
+
<!-- Added tabindex to demonstrate focus style, with inline style to remove native outline as requested -->
|
|
259
|
+
<div tabindex="0" class="focusable-content" style="outline: none;">
|
|
260
|
+
${Array(10).fill(html`<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>`).map(p => p)}
|
|
261
|
+
</div>
|
|
262
|
+
|
|
263
|
+
<ds-action-bar slot="footer" variant="pattern" divider>
|
|
264
|
+
<ds-button-group align="end">
|
|
265
|
+
<ds-button variant="primary" @click=${handleClose}>Accept</ds-button>
|
|
266
|
+
<ds-button variant="secondary" @click=${handleClose}>Decline</ds-button>
|
|
267
|
+
</ds-button-group>
|
|
268
|
+
</ds-action-bar>
|
|
269
|
+
</ds-dialog>
|
|
270
|
+
`;
|
|
271
|
+
};
|
|
272
|
+
ScrollingContent.args = {
|
|
273
|
+
modal: true
|
|
274
|
+
};
|