dap-design-system 0.62.1 → 0.62.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/combobox/comboboxBase.d.ts +6 -0
- package/dist/components/combobox/comboboxBase.js +79 -61
- package/dist/components/combobox/comboboxBase.js.map +1 -1
- package/dist/components/datatable/datatable.component.d.ts +2 -0
- package/dist/components/datatable/datatable.component.js +131 -112
- package/dist/components/datatable/datatable.component.js.map +1 -1
- package/dist/components/datatable/datatable.scss.js +1 -1
- package/dist/components/icon-button/icon-button.component.js +15 -12
- package/dist/components/icon-button/icon-button.component.js.map +1 -1
- package/dist/components/input/input-base-element.js +42 -38
- package/dist/components/input/input-base-element.js.map +1 -1
- package/dist/components/input/input.component.d.ts +1 -0
- package/dist/components/input/input.component.js.map +1 -1
- package/dist/components/option-list/option-list.component.js +16 -12
- package/dist/components/option-list/option-list.component.js.map +1 -1
- package/dist/components/select/select.component.js +71 -66
- package/dist/components/select/select.component.js.map +1 -1
- package/dist/components/snackbar/snackbar-message.component.js +16 -18
- package/dist/components/snackbar/snackbar-message.component.js.map +1 -1
- package/dist/components/snackbar/snackbar.component.js +48 -35
- package/dist/components/snackbar/snackbar.component.js.map +1 -1
- package/dist/components/table/table-header.component.d.ts +5 -1
- package/dist/components/table/table-header.component.js +24 -18
- package/dist/components/table/table-header.component.js.map +1 -1
- package/dist/components/table/table.component.d.ts +3 -0
- package/dist/components/table/table.component.js +33 -28
- package/dist/components/table/table.component.js.map +1 -1
- package/dist/components/textarea/textarea.component.d.ts +6 -1
- package/dist/components/textarea/textarea.component.js +43 -36
- package/dist/components/textarea/textarea.component.js.map +1 -1
- package/dist/components/tooltip/tooltip.component.d.ts +2 -0
- package/dist/components/tooltip/tooltip.component.js +51 -53
- package/dist/components/tooltip/tooltip.component.js.map +1 -1
- package/dist/internal/mixin/labelableMixin.d.ts +3 -0
- package/dist/internal/mixin/labelableMixin.js +15 -12
- package/dist/internal/mixin/labelableMixin.js.map +1 -1
- package/dist/manifest/types/vue/index.d.ts +632 -628
- package/dist/manifest/vscode.html-custom-data.json +348 -339
- package/dist/manifest/web-types.json +1206 -1186
- package/dist/react/dap-ds-input/index.d.ts +1 -0
- package/dist/react/dap-ds-input/index.js.map +1 -1
- package/dist/react/index.d.ts +23 -23
- package/dist/react-types.ts +24 -24
- package/dist/react.js +160 -160
- package/package.json +1 -1
|
@@ -1,41 +1,42 @@
|
|
|
1
|
-
var y = Object.defineProperty,
|
|
2
|
-
var
|
|
1
|
+
var y = Object.defineProperty, v = Object.defineProperties;
|
|
2
|
+
var k = Object.getOwnPropertyDescriptors;
|
|
3
3
|
var p = Object.getOwnPropertySymbols;
|
|
4
|
-
var
|
|
4
|
+
var E = Object.prototype.hasOwnProperty, M = Object.prototype.propertyIsEnumerable;
|
|
5
5
|
var m = (t, e, s) => e in t ? y(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s, r = (t, e) => {
|
|
6
6
|
for (var s in e || (e = {}))
|
|
7
|
-
|
|
7
|
+
E.call(e, s) && m(t, s, e[s]);
|
|
8
8
|
if (p)
|
|
9
9
|
for (var s of p(e))
|
|
10
|
-
|
|
10
|
+
M.call(e, s) && m(t, s, e[s]);
|
|
11
11
|
return t;
|
|
12
|
-
}, c = (t, e) =>
|
|
13
|
-
import { clsx as
|
|
12
|
+
}, c = (t, e) => v(t, k(e));
|
|
13
|
+
import { clsx as C } from "../../node_modules/clsx/dist/clsx.js";
|
|
14
14
|
import "../../node_modules/@lit/reactive-element/reactive-element.js";
|
|
15
15
|
import "../../node_modules/lit-html/lit-html.js";
|
|
16
16
|
import "../../node_modules/lit-element/lit-element.js";
|
|
17
17
|
import { property as h } from "../../node_modules/@lit/reactive-element/decorators/property.js";
|
|
18
|
-
import { state as
|
|
19
|
-
import { ifDefined as
|
|
20
|
-
import { repeat as
|
|
21
|
-
import { html as
|
|
18
|
+
import { state as w } from "../../node_modules/@lit/reactive-element/decorators/state.js";
|
|
19
|
+
import { ifDefined as b } from "../../node_modules/lit-html/directives/if-defined.js";
|
|
20
|
+
import { repeat as T } from "../../node_modules/lit-html/directives/repeat.js";
|
|
21
|
+
import { html as f } from "../../node_modules/lit-html/static.js";
|
|
22
22
|
import "../../localization/localization.js";
|
|
23
|
-
import { DdsElement as
|
|
24
|
-
import
|
|
25
|
-
import
|
|
26
|
-
import { unsafeCSS as
|
|
27
|
-
import { translate as
|
|
28
|
-
var
|
|
23
|
+
import { DdsElement as A } from "../../internal/dds-hu-element.js";
|
|
24
|
+
import x from "./snackbar.scss.js";
|
|
25
|
+
import $ from "./snackbar-message.component.js";
|
|
26
|
+
import { unsafeCSS as S } from "../../node_modules/@lit/reactive-element/css-tag.js";
|
|
27
|
+
import { translate as L } from "../../node_modules/lit-i18n/src/lit-i18n.js";
|
|
28
|
+
var N = Object.defineProperty, l = (t, e, s, o) => {
|
|
29
29
|
for (var i = void 0, n = t.length - 1, u; n >= 0; n--)
|
|
30
30
|
(u = t[n]) && (i = u(e, s, i) || i);
|
|
31
|
-
return i &&
|
|
31
|
+
return i && N(e, s, i), i;
|
|
32
32
|
};
|
|
33
|
+
const g = "dds-snackbar-announcer";
|
|
33
34
|
typeof window != "undefined" && (window.showDapSnackbar = (t, e) => {
|
|
34
35
|
a.show(t, e);
|
|
35
36
|
}, window.closeAllDapSnackbars = () => {
|
|
36
37
|
a.closeAll();
|
|
37
38
|
});
|
|
38
|
-
const d = class d extends
|
|
39
|
+
const d = class d extends A {
|
|
39
40
|
constructor() {
|
|
40
41
|
super(...arguments), this.maxItems = 4, this.position = "bottom-right", this.duration = 6e3, this.announceMessages = !0, this.messages = [], this.idCounter = 0, this.timeouts = /* @__PURE__ */ new Map(), this.handleShowSnackbarEvent = (e) => {
|
|
41
42
|
const { message: s, options: o } = e.detail;
|
|
@@ -167,37 +168,49 @@ const d = class d extends T {
|
|
|
167
168
|
this.handleCloseAllEvent
|
|
168
169
|
), document.removeEventListener("keydown", this.handleKeyDown), super.disconnectedCallback();
|
|
169
170
|
}
|
|
171
|
+
// Single announcement channel (WCAG 4.1.3, Figma #127). A polite status region
|
|
172
|
+
// in light DOM is announced reliably by VoiceOver, unlike live regions inside
|
|
173
|
+
// shadow roots, so the messages themselves carry no live role.
|
|
170
174
|
announceToScreenReader(e) {
|
|
171
|
-
|
|
172
|
-
s.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
+
let s = document.getElementById(g);
|
|
176
|
+
s || (s = document.createElement("div"), s.id = g, s.setAttribute("role", "status"), s.setAttribute("aria-live", "polite"), s.setAttribute("aria-atomic", "true"), Object.assign(s.style, {
|
|
177
|
+
position: "absolute",
|
|
178
|
+
width: "1px",
|
|
179
|
+
height: "1px",
|
|
180
|
+
margin: "-1px",
|
|
181
|
+
overflow: "hidden",
|
|
182
|
+
clip: "rect(0 0 0 0)",
|
|
183
|
+
whiteSpace: "nowrap"
|
|
184
|
+
}), document.body.appendChild(s)), s.textContent = "";
|
|
185
|
+
const o = s;
|
|
186
|
+
setTimeout(() => {
|
|
187
|
+
o.textContent = e;
|
|
188
|
+
}, 100);
|
|
175
189
|
}
|
|
176
190
|
_closeMessage(e) {
|
|
177
191
|
var s;
|
|
178
192
|
(s = e == null ? void 0 : e.detail) != null && s.id && this.removeMessage(e.detail.id);
|
|
179
193
|
}
|
|
180
194
|
render() {
|
|
181
|
-
return
|
|
182
|
-
class=${
|
|
195
|
+
return f`<div
|
|
196
|
+
class=${C("snackbar", `snackbar--${this.position}`)}
|
|
183
197
|
role="region"
|
|
184
|
-
aria-
|
|
185
|
-
|
|
186
|
-
${C(
|
|
198
|
+
aria-label=${L("snackbar.notifications")}>
|
|
199
|
+
${T(
|
|
187
200
|
this.messages,
|
|
188
201
|
(e) => e.id,
|
|
189
202
|
(e) => {
|
|
190
203
|
var s, o, i, n;
|
|
191
|
-
return
|
|
204
|
+
return f`
|
|
192
205
|
<dap-ds-snackbar-message
|
|
193
206
|
part="message"
|
|
194
207
|
exportparts="base:message-base, text:message-text, closebutton:message-closebutton, close-icon:message-close-icon, actions:message-actions"
|
|
195
208
|
@dds-close=${this._closeMessage}
|
|
196
209
|
id=${e.id}
|
|
197
210
|
message=${e.message}
|
|
198
|
-
alertType=${
|
|
211
|
+
alertType=${b((s = e == null ? void 0 : e.options) == null ? void 0 : s.alertType)}
|
|
199
212
|
.actions=${(o = e == null ? void 0 : e.options) == null ? void 0 : o.actions}
|
|
200
|
-
closeButton=${
|
|
213
|
+
closeButton=${b((i = e == null ? void 0 : e.options) == null ? void 0 : i.closeButton)}
|
|
201
214
|
.customStyle=${(n = e == null ? void 0 : e.options) == null ? void 0 : n.customStyle}
|
|
202
215
|
position=${this.position}></dap-ds-snackbar-message>
|
|
203
216
|
`;
|
|
@@ -207,8 +220,8 @@ const d = class d extends T {
|
|
|
207
220
|
}
|
|
208
221
|
};
|
|
209
222
|
d.tagName = "dap-ds-snackbar", d.dependencies = {
|
|
210
|
-
"dap-ds-snackbar-message":
|
|
211
|
-
}, d.styles =
|
|
223
|
+
"dap-ds-snackbar-message": $
|
|
224
|
+
}, d.styles = S(x);
|
|
212
225
|
let a = d;
|
|
213
226
|
l([
|
|
214
227
|
h({ type: Number })
|
|
@@ -223,10 +236,10 @@ l([
|
|
|
223
236
|
h({ type: Boolean })
|
|
224
237
|
], a.prototype, "announceMessages");
|
|
225
238
|
l([
|
|
226
|
-
|
|
239
|
+
w()
|
|
227
240
|
], a.prototype, "messages");
|
|
228
241
|
l([
|
|
229
|
-
|
|
242
|
+
w()
|
|
230
243
|
], a.prototype, "idCounter");
|
|
231
244
|
export {
|
|
232
245
|
a as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snackbar.component.js","sources":["../../../src/components/snackbar/snackbar.component.ts"],"sourcesContent":["import clsx from 'clsx'\nimport { unsafeCSS } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { html } from 'lit/static-html.js'\n\nimport {\n MessageOptionsType,\n SnackbarMessage,\n SnackbarPosition,\n} from '@/common/types'\nimport { translate } from '@/localization/localization'\n\nimport { DdsElement } from '../../internal/dds-hu-element'\nimport styles from './snackbar.scss?inline'\nimport DapDSSnackbarMessage from './snackbar-message.component'\n\nif (typeof window !== 'undefined') {\n window.showDapSnackbar = (message: string, options?: MessageOptionsType) => {\n DapDSSnackbar.show(message, options)\n }\n\n window.closeAllDapSnackbars = () => {\n DapDSSnackbar.closeAll()\n }\n}\n\n/**\n * `dap-ds-snackbar`\n * @summary The Snackbar is a container of sliding messages.\n * @element dap-ds-snackbar\n * @title - Snackbar\n *\n * @csspart host - The host element\n * @csspart message - The message part of the snackbar\n * @csspart message-base - The base part of the message\n * @csspart message-text - The text part of the message\n * @csspart message-closebutton - The close button part of the message\n * @csspart message-close-icon - The close icon part of the message\n * @csspart message-actions - The actions part of the message\n *\n * @cssproperty --dds-snackbar-spacing - Spacing used for positioning the snackbar (default: var(--dds-spacing-400))\n * @cssproperty --dds-snackbar-z-index - Z-index of the snackbar container (default: 10000)\n * @cssproperty --dds-snackbar-pointer-events - Pointer events behavior for the snackbar (default: auto)\n */\nexport default class DapDSSnackbar extends DdsElement {\n static tagName = 'dap-ds-snackbar'\n\n static dependencies = {\n 'dap-ds-snackbar-message': DapDSSnackbarMessage,\n }\n\n /** The maximum number of snackbar messages at a given time. */\n @property({ type: Number }) maxItems = 4\n\n /** The position of the snackbar\n * @type {'bottom-left' | 'bottom-right' | 'bottom-center' | 'top-right' | 'top-center'}\n */\n @property({ type: String }) position: SnackbarPosition = 'bottom-right'\n\n /** The duration of the snackbar message in milliseconds */\n @property({ type: Number }) duration = 6000\n\n /** Whether the snackbar should announce new messages to screen readers */\n @property({ type: Boolean }) announceMessages = true\n\n @state() private messages: SnackbarMessage[] = []\n @state() private idCounter = 0\n private timeouts: Map<string, ReturnType<typeof setTimeout>> = new Map()\n\n static readonly styles = unsafeCSS(styles)\n\n /**\n * Static method to show a snackbar message anywhere in the application\n * @param message - The message to display\n * @param options - Optional configuration for the message\n */\n static show(message: string, options?: MessageOptionsType): void {\n document.dispatchEvent(\n new CustomEvent('dds-show-snackbar', {\n detail: { message, options },\n bubbles: true,\n }),\n )\n }\n\n /**\n * Static method to show a success message\n * @param message - The message to display\n * @param options - Optional configuration (alertType will be overridden to 'successful')\n */\n static success(\n message: string,\n options?: Omit<MessageOptionsType, 'alertType'>,\n ): void {\n this.show(message, { ...options, alertType: 'successful' })\n }\n\n /**\n * Static method to show an error message\n * @param message - The message to display\n * @param options - Optional configuration (alertType will be overridden to 'error')\n */\n static error(\n message: string,\n options?: Omit<MessageOptionsType, 'alertType'>,\n ): void {\n this.show(message, { ...options, alertType: 'error' })\n }\n\n /**\n * Static method to show an information message\n * @param message - The message to display\n * @param options - Optional configuration (alertType will be overridden to 'information')\n */\n static info(\n message: string,\n options?: Omit<MessageOptionsType, 'alertType'>,\n ): void {\n this.show(message, { ...options, alertType: 'information' })\n }\n\n /**\n * Static method to show a default message\n * @param message - The message to display\n * @param options - Optional configuration (alertType will be overridden to 'default')\n */\n static default(\n message: string,\n options?: Omit<MessageOptionsType, 'alertType'>,\n ): void {\n this.show(message, { ...options, alertType: 'default' })\n }\n\n /**\n * Static method to close all snackbar messages globally\n */\n static closeAll(): void {\n document.dispatchEvent(\n new CustomEvent('dds-close-all-snackbars', {\n bubbles: true,\n }),\n )\n }\n\n /**\n * Close all currently displayed messages\n */\n closeAll(): void {\n this.clearAllTimeouts()\n this.messages = []\n }\n\n private generateId(): string {\n this.idCounter++\n\n return `dap-snackbar-${this.idCounter}`\n }\n\n addMessage(message: string, options?: MessageOptionsType): void {\n if (!message || typeof message !== 'string') {\n console.warn('DapDSSnackbar: Message must be a non-empty string')\n return\n }\n\n const newId = this.generateId()\n if (this.messages.length >= this.maxItems) {\n this.sliceMessage()\n }\n\n const newMessage: SnackbarMessage = {\n id: newId,\n message: message.trim(),\n ...(options && { options }),\n }\n\n this.messages = [...this.messages, newMessage]\n this.elapseMessages(newId, options?.duration, options?.persistent)\n\n // Announce the message if enabled\n if (this.announceMessages) {\n this.announceToScreenReader(message)\n }\n }\n\n private sliceMessage(): void {\n if (this.messages) {\n this.messages = this.messages.slice(1)\n }\n }\n\n private removeMessage(id: string): void {\n if (id) {\n this.messages = this.messages.filter(\n (messageItem: SnackbarMessage) => messageItem.id !== id,\n )\n this.clearTimeout(id)\n }\n }\n\n private elapseMessages(\n id: string,\n duration?: number,\n persistent?: boolean,\n ): void {\n // Persistent messages stay until the user closes them manually\n if (persistent) {\n return\n }\n\n const durationTime = duration ?? this.duration\n const timeoutId = setTimeout(() => {\n this.removeMessage(id)\n }, durationTime)\n this.timeouts.set(id, timeoutId)\n }\n\n private clearTimeout(id: string): void {\n const timeoutId = this.timeouts.get(id)\n if (timeoutId) {\n clearTimeout(timeoutId)\n this.timeouts.delete(id)\n }\n }\n\n private clearAllTimeouts(): void {\n this.timeouts.forEach(timeoutId => clearTimeout(timeoutId))\n this.timeouts.clear()\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n document.addEventListener(\n 'dds-show-snackbar',\n this.handleShowSnackbarEvent as EventListener,\n )\n document.addEventListener(\n 'dds-close-all-snackbars',\n this.handleCloseAllEvent as EventListener,\n )\n document.addEventListener('keydown', this.handleKeyDown)\n }\n\n disconnectedCallback(): void {\n this.clearAllTimeouts()\n document.removeEventListener(\n 'dds-show-snackbar',\n this.handleShowSnackbarEvent as EventListener,\n )\n document.removeEventListener(\n 'dds-close-all-snackbars',\n this.handleCloseAllEvent as EventListener,\n )\n document.removeEventListener('keydown', this.handleKeyDown)\n super.disconnectedCallback()\n }\n\n private handleShowSnackbarEvent = (\n event: CustomEvent<{ message: string; options?: MessageOptionsType }>,\n ) => {\n const { message, options } = event.detail\n this.addMessage(message, options)\n }\n\n private handleCloseAllEvent = () => {\n this.closeAll()\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && this.messages.length > 0) {\n // Close the most recent message\n const lastMessage = this.messages[this.messages.length - 1]\n if (lastMessage) {\n this.removeMessage(lastMessage.id)\n }\n }\n }\n\n private announceToScreenReader(message: string): void {\n const announcer = document.createElement('div')\n announcer.setAttribute('aria-live', 'assertive')\n announcer.setAttribute('aria-atomic', 'true')\n announcer.style.position = 'absolute'\n announcer.style.left = '-10000px'\n announcer.style.width = '1px'\n announcer.style.height = '1px'\n announcer.style.overflow = 'hidden'\n\n document.body.appendChild(announcer)\n announcer.textContent = message\n\n // Remove the announcer after a short delay\n setTimeout(() => {\n document.body.removeChild(announcer)\n }, 1000)\n }\n\n private _closeMessage(event: CustomEvent<{ id: string }>) {\n if (event?.detail?.id) {\n this.removeMessage(event.detail.id)\n }\n }\n\n render() {\n return html`<div\n class=${clsx('snackbar', `snackbar--${this.position}`)}\n role=\"region\"\n aria-live=\"polite\"\n aria-label=${translate('snackbar.notifications')}>\n ${repeat(\n this.messages,\n messageItem => messageItem.id,\n messageItem => html`\n <dap-ds-snackbar-message\n part=\"message\"\n exportparts=\"base:message-base, text:message-text, closebutton:message-closebutton, close-icon:message-close-icon, actions:message-actions\"\n @dds-close=${this._closeMessage}\n id=${messageItem.id}\n message=${messageItem.message}\n alertType=${ifDefined(messageItem?.options?.alertType)}\n .actions=${messageItem?.options?.actions}\n closeButton=${ifDefined(messageItem?.options?.closeButton)}\n .customStyle=${messageItem?.options?.customStyle}\n position=${this.position}></dap-ds-snackbar-message>\n `,\n )}\n </div>`\n }\n}\n"],"names":["message","options","DapDSSnackbar","_DapDSSnackbar","DdsElement","event","lastMessage","__spreadProps","__spreadValues","newId","newMessage","id","messageItem","duration","persistent","durationTime","timeoutId","announcer","_a","html","clsx","translate","repeat","ifDefined","_b","_c","_d","DapDSSnackbarMessage","unsafeCSS","styles","__decorateClass","property","state"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"snackbar.component.js","sources":["../../../src/components/snackbar/snackbar.component.ts"],"sourcesContent":["import clsx from 'clsx'\nimport { unsafeCSS } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { html } from 'lit/static-html.js'\n\nimport {\n MessageOptionsType,\n SnackbarMessage,\n SnackbarPosition,\n} from '@/common/types'\nimport { translate } from '@/localization/localization'\n\nimport { DdsElement } from '../../internal/dds-hu-element'\nimport styles from './snackbar.scss?inline'\nimport DapDSSnackbarMessage from './snackbar-message.component'\n\n// Shared by every snackbar instance so a message is announced exactly once\nconst ANNOUNCER_ID = 'dds-snackbar-announcer'\n\nif (typeof window !== 'undefined') {\n window.showDapSnackbar = (message: string, options?: MessageOptionsType) => {\n DapDSSnackbar.show(message, options)\n }\n\n window.closeAllDapSnackbars = () => {\n DapDSSnackbar.closeAll()\n }\n}\n\n/**\n * `dap-ds-snackbar`\n * @summary The Snackbar is a container of sliding messages.\n * @element dap-ds-snackbar\n * @title - Snackbar\n *\n * @csspart host - The host element\n * @csspart message - The message part of the snackbar\n * @csspart message-base - The base part of the message\n * @csspart message-text - The text part of the message\n * @csspart message-closebutton - The close button part of the message\n * @csspart message-close-icon - The close icon part of the message\n * @csspart message-actions - The actions part of the message\n *\n * @cssproperty --dds-snackbar-spacing - Spacing used for positioning the snackbar (default: var(--dds-spacing-400))\n * @cssproperty --dds-snackbar-z-index - Z-index of the snackbar container (default: 10000)\n * @cssproperty --dds-snackbar-pointer-events - Pointer events behavior for the snackbar (default: auto)\n */\nexport default class DapDSSnackbar extends DdsElement {\n static tagName = 'dap-ds-snackbar'\n\n static dependencies = {\n 'dap-ds-snackbar-message': DapDSSnackbarMessage,\n }\n\n /** The maximum number of snackbar messages at a given time. */\n @property({ type: Number }) maxItems = 4\n\n /** The position of the snackbar\n * @type {'bottom-left' | 'bottom-right' | 'bottom-center' | 'top-right' | 'top-center'}\n */\n @property({ type: String }) position: SnackbarPosition = 'bottom-right'\n\n /** The duration of the snackbar message in milliseconds */\n @property({ type: Number }) duration = 6000\n\n /** Whether the snackbar should announce new messages to screen readers */\n @property({ type: Boolean }) announceMessages = true\n\n @state() private messages: SnackbarMessage[] = []\n @state() private idCounter = 0\n private timeouts: Map<string, ReturnType<typeof setTimeout>> = new Map()\n\n static readonly styles = unsafeCSS(styles)\n\n /**\n * Static method to show a snackbar message anywhere in the application\n * @param message - The message to display\n * @param options - Optional configuration for the message\n */\n static show(message: string, options?: MessageOptionsType): void {\n document.dispatchEvent(\n new CustomEvent('dds-show-snackbar', {\n detail: { message, options },\n bubbles: true,\n }),\n )\n }\n\n /**\n * Static method to show a success message\n * @param message - The message to display\n * @param options - Optional configuration (alertType will be overridden to 'successful')\n */\n static success(\n message: string,\n options?: Omit<MessageOptionsType, 'alertType'>,\n ): void {\n this.show(message, { ...options, alertType: 'successful' })\n }\n\n /**\n * Static method to show an error message\n * @param message - The message to display\n * @param options - Optional configuration (alertType will be overridden to 'error')\n */\n static error(\n message: string,\n options?: Omit<MessageOptionsType, 'alertType'>,\n ): void {\n this.show(message, { ...options, alertType: 'error' })\n }\n\n /**\n * Static method to show an information message\n * @param message - The message to display\n * @param options - Optional configuration (alertType will be overridden to 'information')\n */\n static info(\n message: string,\n options?: Omit<MessageOptionsType, 'alertType'>,\n ): void {\n this.show(message, { ...options, alertType: 'information' })\n }\n\n /**\n * Static method to show a default message\n * @param message - The message to display\n * @param options - Optional configuration (alertType will be overridden to 'default')\n */\n static default(\n message: string,\n options?: Omit<MessageOptionsType, 'alertType'>,\n ): void {\n this.show(message, { ...options, alertType: 'default' })\n }\n\n /**\n * Static method to close all snackbar messages globally\n */\n static closeAll(): void {\n document.dispatchEvent(\n new CustomEvent('dds-close-all-snackbars', {\n bubbles: true,\n }),\n )\n }\n\n /**\n * Close all currently displayed messages\n */\n closeAll(): void {\n this.clearAllTimeouts()\n this.messages = []\n }\n\n private generateId(): string {\n this.idCounter++\n\n return `dap-snackbar-${this.idCounter}`\n }\n\n addMessage(message: string, options?: MessageOptionsType): void {\n if (!message || typeof message !== 'string') {\n console.warn('DapDSSnackbar: Message must be a non-empty string')\n return\n }\n\n const newId = this.generateId()\n if (this.messages.length >= this.maxItems) {\n this.sliceMessage()\n }\n\n const newMessage: SnackbarMessage = {\n id: newId,\n message: message.trim(),\n ...(options && { options }),\n }\n\n this.messages = [...this.messages, newMessage]\n this.elapseMessages(newId, options?.duration, options?.persistent)\n\n // Announce the message if enabled\n if (this.announceMessages) {\n this.announceToScreenReader(message)\n }\n }\n\n private sliceMessage(): void {\n if (this.messages) {\n this.messages = this.messages.slice(1)\n }\n }\n\n private removeMessage(id: string): void {\n if (id) {\n this.messages = this.messages.filter(\n (messageItem: SnackbarMessage) => messageItem.id !== id,\n )\n this.clearTimeout(id)\n }\n }\n\n private elapseMessages(\n id: string,\n duration?: number,\n persistent?: boolean,\n ): void {\n // Persistent messages stay until the user closes them manually\n if (persistent) {\n return\n }\n\n const durationTime = duration ?? this.duration\n const timeoutId = setTimeout(() => {\n this.removeMessage(id)\n }, durationTime)\n this.timeouts.set(id, timeoutId)\n }\n\n private clearTimeout(id: string): void {\n const timeoutId = this.timeouts.get(id)\n if (timeoutId) {\n clearTimeout(timeoutId)\n this.timeouts.delete(id)\n }\n }\n\n private clearAllTimeouts(): void {\n this.timeouts.forEach(timeoutId => clearTimeout(timeoutId))\n this.timeouts.clear()\n }\n\n connectedCallback(): void {\n super.connectedCallback()\n document.addEventListener(\n 'dds-show-snackbar',\n this.handleShowSnackbarEvent as EventListener,\n )\n document.addEventListener(\n 'dds-close-all-snackbars',\n this.handleCloseAllEvent as EventListener,\n )\n document.addEventListener('keydown', this.handleKeyDown)\n }\n\n disconnectedCallback(): void {\n this.clearAllTimeouts()\n document.removeEventListener(\n 'dds-show-snackbar',\n this.handleShowSnackbarEvent as EventListener,\n )\n document.removeEventListener(\n 'dds-close-all-snackbars',\n this.handleCloseAllEvent as EventListener,\n )\n document.removeEventListener('keydown', this.handleKeyDown)\n super.disconnectedCallback()\n }\n\n private handleShowSnackbarEvent = (\n event: CustomEvent<{ message: string; options?: MessageOptionsType }>,\n ) => {\n const { message, options } = event.detail\n this.addMessage(message, options)\n }\n\n private handleCloseAllEvent = () => {\n this.closeAll()\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && this.messages.length > 0) {\n // Close the most recent message\n const lastMessage = this.messages[this.messages.length - 1]\n if (lastMessage) {\n this.removeMessage(lastMessage.id)\n }\n }\n }\n\n // Single announcement channel (WCAG 4.1.3, Figma #127). A polite status region\n // in light DOM is announced reliably by VoiceOver, unlike live regions inside\n // shadow roots, so the messages themselves carry no live role.\n private announceToScreenReader(message: string): void {\n let announcer = document.getElementById(ANNOUNCER_ID)\n if (!announcer) {\n announcer = document.createElement('div')\n announcer.id = ANNOUNCER_ID\n announcer.setAttribute('role', 'status')\n announcer.setAttribute('aria-live', 'polite')\n announcer.setAttribute('aria-atomic', 'true')\n Object.assign(announcer.style, {\n position: 'absolute',\n width: '1px',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n whiteSpace: 'nowrap',\n })\n document.body.appendChild(announcer)\n }\n\n // Clear first so repeating the same message is announced again\n announcer.textContent = ''\n const region = announcer\n setTimeout(() => {\n region.textContent = message\n }, 100)\n }\n\n private _closeMessage(event: CustomEvent<{ id: string }>) {\n if (event?.detail?.id) {\n this.removeMessage(event.detail.id)\n }\n }\n\n render() {\n return html`<div\n class=${clsx('snackbar', `snackbar--${this.position}`)}\n role=\"region\"\n aria-label=${translate('snackbar.notifications')}>\n ${repeat(\n this.messages,\n messageItem => messageItem.id,\n messageItem => html`\n <dap-ds-snackbar-message\n part=\"message\"\n exportparts=\"base:message-base, text:message-text, closebutton:message-closebutton, close-icon:message-close-icon, actions:message-actions\"\n @dds-close=${this._closeMessage}\n id=${messageItem.id}\n message=${messageItem.message}\n alertType=${ifDefined(messageItem?.options?.alertType)}\n .actions=${messageItem?.options?.actions}\n closeButton=${ifDefined(messageItem?.options?.closeButton)}\n .customStyle=${messageItem?.options?.customStyle}\n position=${this.position}></dap-ds-snackbar-message>\n `,\n )}\n </div>`\n }\n}\n"],"names":["ANNOUNCER_ID","message","options","DapDSSnackbar","_DapDSSnackbar","DdsElement","event","lastMessage","__spreadProps","__spreadValues","newId","newMessage","id","messageItem","duration","persistent","durationTime","timeoutId","announcer","region","_a","html","clsx","translate","repeat","ifDefined","_b","_c","_d","DapDSSnackbarMessage","unsafeCSS","styles","__decorateClass","property","state"],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PropertyValueMap } from 'lit';
|
|
1
2
|
import { DdsElement } from '../../internal/dds-hu-element';
|
|
2
3
|
/**
|
|
3
4
|
* Table header cell component.
|
|
@@ -23,7 +24,10 @@ export default class DapDSTableHeader extends DdsElement {
|
|
|
23
24
|
static readonly styles: import('lit').CSSResult;
|
|
24
25
|
/**If the header cell is the last one.*/
|
|
25
26
|
last: boolean;
|
|
26
|
-
/** The html role of the header cell */
|
|
27
|
+
/** The html role of the header cell. Derived from `scope` unless set explicitly. */
|
|
27
28
|
role: string;
|
|
29
|
+
/** Which cells the header labels, like the native `<th scope>`: `col` (cells below) or `row` (cells beside). */
|
|
30
|
+
scope: 'col' | 'row';
|
|
31
|
+
protected willUpdate(changedProperties: PropertyValueMap<this>): void;
|
|
28
32
|
render(): import('lit-html').TemplateResult;
|
|
29
33
|
}
|
|
@@ -1,32 +1,38 @@
|
|
|
1
1
|
import "../../node_modules/@lit/reactive-element/reactive-element.js";
|
|
2
2
|
import "../../node_modules/lit-html/lit-html.js";
|
|
3
3
|
import "../../node_modules/lit-element/lit-element.js";
|
|
4
|
-
import { property as
|
|
5
|
-
import { html as
|
|
6
|
-
import { DdsElement as
|
|
7
|
-
import
|
|
8
|
-
import { unsafeCSS as
|
|
9
|
-
var
|
|
10
|
-
for (var t = void 0,
|
|
11
|
-
(
|
|
12
|
-
return t &&
|
|
4
|
+
import { property as p } from "../../node_modules/@lit/reactive-element/decorators/property.js";
|
|
5
|
+
import { html as c } from "../../node_modules/lit-html/static.js";
|
|
6
|
+
import { DdsElement as f } from "../../internal/dds-hu-element.js";
|
|
7
|
+
import n from "./table-header.scss.js";
|
|
8
|
+
import { unsafeCSS as h } from "../../node_modules/@lit/reactive-element/css-tag.js";
|
|
9
|
+
var u = Object.defineProperty, i = (l, e, a, d) => {
|
|
10
|
+
for (var t = void 0, s = l.length - 1, m; s >= 0; s--)
|
|
11
|
+
(m = l[s]) && (t = m(e, a, t) || t);
|
|
12
|
+
return t && u(e, a, t), t;
|
|
13
13
|
};
|
|
14
|
-
const
|
|
14
|
+
const o = class o extends f {
|
|
15
15
|
constructor() {
|
|
16
|
-
super(...arguments), this.role = "columnheader";
|
|
16
|
+
super(...arguments), this.role = "columnheader", this.scope = "col";
|
|
17
|
+
}
|
|
18
|
+
willUpdate(e) {
|
|
19
|
+
e.has("scope") && this.hasAttribute("scope") && (this.role = this.scope === "row" ? "rowheader" : "columnheader");
|
|
17
20
|
}
|
|
18
21
|
render() {
|
|
19
|
-
return
|
|
22
|
+
return c` <slot part="base"></slot> `;
|
|
20
23
|
}
|
|
21
24
|
};
|
|
22
|
-
|
|
23
|
-
let r =
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
o.tagName = "dap-ds-table-header", o.styles = h(n);
|
|
26
|
+
let r = o;
|
|
27
|
+
i([
|
|
28
|
+
p({ type: Boolean, reflect: !0 })
|
|
26
29
|
], r.prototype, "last");
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
i([
|
|
31
|
+
p({ reflect: !0 })
|
|
29
32
|
], r.prototype, "role");
|
|
33
|
+
i([
|
|
34
|
+
p({ type: String, reflect: !0 })
|
|
35
|
+
], r.prototype, "scope");
|
|
30
36
|
export {
|
|
31
37
|
r as default
|
|
32
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-header.component.js","sources":["../../../src/components/table/table-header.component.ts"],"sourcesContent":["import { unsafeCSS } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { html } from 'lit/static-html.js'\n\nimport { DdsElement } from '../../internal/dds-hu-element'\nimport styles from './table-header.scss?inline'\n\n/**\n * Table header cell component.\n * @element dap-ds-table-header\n * @title - Table header\n * @group table\n *\n * @slot - The default slot.\n *\n * @csspart base - The main header cell container.\n *\n * @cssproperty --dds-table-header-padding-block - Padding for the top and bottom of the header cell. (default: var(--dds-spacing-200))\n * @cssproperty --dds-table-header-padding-inline-start - Padding for the start (left in LTR) of the header cell. (default: var(--dds-spacing-500))\n * @cssproperty --dds-table-header-padding-inline-end - Padding for the end (right in LTR) of the header cell. (default: var(--dds-spacing-200))\n * @cssproperty --dds-table-header-border-width - Width of the header cell's bottom border. (default: var(--dds-border-width-base))\n * @cssproperty --dds-table-header-border-color - Color of the header cell's bottom border. (default: var(--dds-border-neutral-subtle))\n * @cssproperty --dds-table-header-text-color - Text color of the header cell. (default: var(--dds-text-neutral-strong))\n * @cssproperty --dds-table-header-font-weight - Font weight of the header cell text. (default: var(--dds-font-weight-bold))\n * @cssproperty --dds-table-header-line-height - Line height of the header cell text. (default: var(--dds-font-line-height-xlarge))\n */\nexport default class DapDSTableHeader extends DdsElement {\n static tagName = 'dap-ds-table-header'\n\n static readonly styles = unsafeCSS(styles)\n\n /**If the header cell is the last one.*/\n @property({ type: Boolean, reflect: true }) last: boolean\n /** The html role of the header cell */\n @property({ reflect: true })\n public role = 'columnheader'\n\n render() {\n return html` <slot part=\"base\"></slot> `\n }\n}\n"],"names":["_DapDSTableHeader","DdsElement","html","unsafeCSS","styles","DapDSTableHeader","__decorateClass","property"],"mappings":";;;;;;;;;;;;;AA0BA,MAAqBA,IAArB,MAAqBA,UAAyBC,EAAW;AAAA,EAAzD,cAAA;AAAA,UAAA,GAAA,SAAA,GASE,KAAO,OAAO;AAAA,EAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"table-header.component.js","sources":["../../../src/components/table/table-header.component.ts"],"sourcesContent":["import { PropertyValueMap, unsafeCSS } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { html } from 'lit/static-html.js'\n\nimport { DdsElement } from '../../internal/dds-hu-element'\nimport styles from './table-header.scss?inline'\n\n/**\n * Table header cell component.\n * @element dap-ds-table-header\n * @title - Table header\n * @group table\n *\n * @slot - The default slot.\n *\n * @csspart base - The main header cell container.\n *\n * @cssproperty --dds-table-header-padding-block - Padding for the top and bottom of the header cell. (default: var(--dds-spacing-200))\n * @cssproperty --dds-table-header-padding-inline-start - Padding for the start (left in LTR) of the header cell. (default: var(--dds-spacing-500))\n * @cssproperty --dds-table-header-padding-inline-end - Padding for the end (right in LTR) of the header cell. (default: var(--dds-spacing-200))\n * @cssproperty --dds-table-header-border-width - Width of the header cell's bottom border. (default: var(--dds-border-width-base))\n * @cssproperty --dds-table-header-border-color - Color of the header cell's bottom border. (default: var(--dds-border-neutral-subtle))\n * @cssproperty --dds-table-header-text-color - Text color of the header cell. (default: var(--dds-text-neutral-strong))\n * @cssproperty --dds-table-header-font-weight - Font weight of the header cell text. (default: var(--dds-font-weight-bold))\n * @cssproperty --dds-table-header-line-height - Line height of the header cell text. (default: var(--dds-font-line-height-xlarge))\n */\nexport default class DapDSTableHeader extends DdsElement {\n static tagName = 'dap-ds-table-header'\n\n static readonly styles = unsafeCSS(styles)\n\n /**If the header cell is the last one.*/\n @property({ type: Boolean, reflect: true }) last: boolean\n /** The html role of the header cell. Derived from `scope` unless set explicitly. */\n @property({ reflect: true })\n public role = 'columnheader'\n\n /** Which cells the header labels, like the native `<th scope>`: `col` (cells below) or `row` (cells beside). */\n @property({ type: String, reflect: true }) scope: 'col' | 'row' = 'col'\n\n protected willUpdate(changedProperties: PropertyValueMap<this>): void {\n // Only follow scope after the first render's default, so an explicit\n // role=\"...\" attribute without a scope is kept\n if (changedProperties.has('scope') && this.hasAttribute('scope')) {\n this.role = this.scope === 'row' ? 'rowheader' : 'columnheader'\n }\n }\n\n render() {\n return html` <slot part=\"base\"></slot> `\n }\n}\n"],"names":["_DapDSTableHeader","DdsElement","changedProperties","html","unsafeCSS","styles","DapDSTableHeader","__decorateClass","property"],"mappings":";;;;;;;;;;;;;AA0BA,MAAqBA,IAArB,MAAqBA,UAAyBC,EAAW;AAAA,EAAzD,cAAA;AAAA,UAAA,GAAA,SAAA,GASE,KAAO,OAAO,gBAGoD,KAAA,QAAA;AAAA,EAAA;AAAA,EAExD,WAAWC,GAAiD;AAGpE,IAAIA,EAAkB,IAAI,OAAO,KAAK,KAAK,aAAa,OAAO,MAC7D,KAAK,OAAO,KAAK,UAAU,QAAQ,cAAc;AAAA,EACnD;AAAA,EAGF,SAAS;AACA,WAAAC;AAAAA,EAAA;AAEX;AAxBEH,EAAO,UAAU,uBAEDA,EAAA,SAASI,EAAUC,CAAM;AAH3C,IAAqBC,IAArBN;AAM8CO,EAAA;AAAA,EAA3CC,EAAS,EAAE,MAAM,SAAS,SAAS,GAAM,CAAA;AAAA,GANvBF,EAMyB,WAAA,MAAA;AAGrCC,EAAA;AAAA,EADNC,EAAS,EAAE,SAAS,GAAM,CAAA;AAAA,GARRF,EASZ,WAAA,MAAA;AAGoCC,EAAA;AAAA,EAA1CC,EAAS,EAAE,MAAM,QAAQ,SAAS,GAAM,CAAA;AAAA,GAZtBF,EAYwB,WAAA,OAAA;"}
|
|
@@ -16,12 +16,15 @@ export default class DapDSTable extends DdsElement {
|
|
|
16
16
|
static tagName: string;
|
|
17
17
|
/**@ignore */
|
|
18
18
|
rows: Array<HTMLElement>;
|
|
19
|
+
/** The html role of the table. Defaults to `table`; use `grid` only for an interactive table. */
|
|
19
20
|
role: string;
|
|
20
21
|
/**If the table has mobile design */
|
|
21
22
|
mobile: boolean;
|
|
22
23
|
/** The caption of the table */
|
|
23
24
|
caption: string;
|
|
24
25
|
static readonly styles: import('lit').CSSResult;
|
|
26
|
+
private captionLabelApplied;
|
|
25
27
|
protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
|
|
28
|
+
protected willUpdate(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
|
|
26
29
|
render(): import('lit-html').TemplateResult;
|
|
27
30
|
}
|
|
@@ -1,50 +1,55 @@
|
|
|
1
1
|
import "../../node_modules/@lit/reactive-element/reactive-element.js";
|
|
2
|
-
import "../../node_modules/lit-html/lit-html.js";
|
|
2
|
+
import { nothing as f } from "../../node_modules/lit-html/lit-html.js";
|
|
3
3
|
import "../../node_modules/lit-element/lit-element.js";
|
|
4
|
-
import { property as
|
|
5
|
-
import { queryAssignedElements as
|
|
4
|
+
import { property as p } from "../../node_modules/@lit/reactive-element/decorators/property.js";
|
|
5
|
+
import { queryAssignedElements as d } from "../../node_modules/@lit/reactive-element/decorators/query-assigned-elements.js";
|
|
6
6
|
import { html as c } from "../../node_modules/lit-html/static.js";
|
|
7
|
-
import { DdsElement as
|
|
8
|
-
import
|
|
7
|
+
import { DdsElement as m } from "../../internal/dds-hu-element.js";
|
|
8
|
+
import b from "./table.scss.js";
|
|
9
9
|
import { unsafeCSS as u } from "../../node_modules/@lit/reactive-element/css-tag.js";
|
|
10
|
-
var y = Object.defineProperty, s = (
|
|
11
|
-
for (var t = void 0,
|
|
12
|
-
(
|
|
13
|
-
return t && y(i,
|
|
10
|
+
var y = Object.defineProperty, s = (l, i, a, n) => {
|
|
11
|
+
for (var t = void 0, o = l.length - 1, h; o >= 0; o--)
|
|
12
|
+
(h = l[o]) && (t = h(i, a, t) || t);
|
|
13
|
+
return t && y(i, a, t), t;
|
|
14
14
|
};
|
|
15
|
-
const
|
|
15
|
+
const r = class r extends m {
|
|
16
16
|
constructor() {
|
|
17
|
-
super(...arguments), this.role = "
|
|
17
|
+
super(...arguments), this.role = "table", this.mobile = !1, this.caption = "", this.captionLabelApplied = !1;
|
|
18
18
|
}
|
|
19
19
|
firstUpdated(i) {
|
|
20
|
-
this.rows.forEach((
|
|
21
|
-
|
|
22
|
-
}), this.
|
|
20
|
+
this.rows.forEach((a, n) => {
|
|
21
|
+
n === this.rows.length - 1 && a.toggleAttribute("last");
|
|
22
|
+
}), !this.caption && !this.hasAttribute("aria-label") && !this.hasAttribute("aria-labelledby") && console.warn(
|
|
23
|
+
"dap-ds-table: the table has no accessible name. Set a caption (or aria-label / aria-labelledby) that describes its purpose."
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
willUpdate(i) {
|
|
27
|
+
i.has("caption") && (this.caption ? (this.setAttribute("aria-label", this.caption), this.captionLabelApplied = !0) : this.captionLabelApplied && (this.removeAttribute("aria-label"), this.captionLabelApplied = !1));
|
|
23
28
|
}
|
|
24
29
|
render() {
|
|
25
30
|
return c`
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
${this.caption ? c`<caption class="caption" part="caption" aria-hidden="true">
|
|
32
|
+
${this.caption}
|
|
33
|
+
</caption>` : f}
|
|
29
34
|
<slot></slot>
|
|
30
35
|
`;
|
|
31
36
|
}
|
|
32
37
|
};
|
|
33
|
-
|
|
34
|
-
let
|
|
38
|
+
r.tagName = "dap-ds-table", r.styles = u(b);
|
|
39
|
+
let e = r;
|
|
35
40
|
s([
|
|
36
|
-
|
|
37
|
-
],
|
|
41
|
+
d()
|
|
42
|
+
], e.prototype, "rows");
|
|
38
43
|
s([
|
|
39
|
-
|
|
40
|
-
],
|
|
44
|
+
p({ reflect: !0 })
|
|
45
|
+
], e.prototype, "role");
|
|
41
46
|
s([
|
|
42
|
-
|
|
43
|
-
],
|
|
47
|
+
p({ type: Boolean, reflect: !0 })
|
|
48
|
+
], e.prototype, "mobile");
|
|
44
49
|
s([
|
|
45
|
-
|
|
46
|
-
],
|
|
50
|
+
p({ type: String })
|
|
51
|
+
], e.prototype, "caption");
|
|
47
52
|
export {
|
|
48
|
-
|
|
53
|
+
e as default
|
|
49
54
|
};
|
|
50
55
|
//# sourceMappingURL=table.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.component.js","sources":["../../../src/components/table/table.component.ts"],"sourcesContent":["import { PropertyValueMap, unsafeCSS } from 'lit'\nimport { property, queryAssignedElements } from 'lit/decorators.js'\nimport { html } from 'lit/static-html.js'\n\nimport { DdsElement } from '../../internal/dds-hu-element'\nimport styles from './table.scss?inline'\n\n/**\n * Data table component.\n * @element dap-ds-table\n * @title - Table\n *\n * @slot - The default slot. Accepts `dap-ds-table-row` elements.\n *\n * @cssprop --dds-table-border-width - Width of the table border. (default: var(--dds-border-width-base, 1px))\n * @cssprop --dds-table-border-color - Color of the table border. (default: var(--dds-border-neutral-subtle))\n * @cssprop --dds-table-border-radius - Border radius of the table. (default: var(--dds-radius-small, 4px))\n * @cssprop --dds-table-row-divider-color - Color of the divider between rows in mobile view. (default: var(--dds-border-neutral-subtle))\n */\nexport default class DapDSTable extends DdsElement {\n static tagName = 'dap-ds-table'\n\n /**@ignore */\n @queryAssignedElements() rows!: Array<HTMLElement>\n @property({ reflect: true }) public role = '
|
|
1
|
+
{"version":3,"file":"table.component.js","sources":["../../../src/components/table/table.component.ts"],"sourcesContent":["import { nothing, PropertyValueMap, unsafeCSS } from 'lit'\nimport { property, queryAssignedElements } from 'lit/decorators.js'\nimport { html } from 'lit/static-html.js'\n\nimport { DdsElement } from '../../internal/dds-hu-element'\nimport styles from './table.scss?inline'\n\n/**\n * Data table component.\n * @element dap-ds-table\n * @title - Table\n *\n * @slot - The default slot. Accepts `dap-ds-table-row` elements.\n *\n * @cssprop --dds-table-border-width - Width of the table border. (default: var(--dds-border-width-base, 1px))\n * @cssprop --dds-table-border-color - Color of the table border. (default: var(--dds-border-neutral-subtle))\n * @cssprop --dds-table-border-radius - Border radius of the table. (default: var(--dds-radius-small, 4px))\n * @cssprop --dds-table-row-divider-color - Color of the divider between rows in mobile view. (default: var(--dds-border-neutral-subtle))\n */\nexport default class DapDSTable extends DdsElement {\n static tagName = 'dap-ds-table'\n\n /**@ignore */\n @queryAssignedElements() rows!: Array<HTMLElement>\n // `grid` is only right for an interactive table with keyboard-navigable cells\n /** The html role of the table. Defaults to `table`; use `grid` only for an interactive table. */\n @property({ reflect: true }) public role = 'table'\n /**If the table has mobile design */\n @property({ type: Boolean, reflect: true }) mobile = false\n\n /** The caption of the table */\n @property({ type: String }) caption = ''\n\n static readonly styles = unsafeCSS(styles)\n\n // Whether the host's aria-label came from the caption (and so is ours to\n // remove); an aria-label the author set is left alone\n private captionLabelApplied = false\n\n protected firstUpdated(\n _changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>,\n ): void {\n this.rows.forEach((row, index) => {\n if (index === this.rows.length - 1) {\n row.toggleAttribute('last')\n }\n })\n\n if (\n !this.caption &&\n !this.hasAttribute('aria-label') &&\n !this.hasAttribute('aria-labelledby')\n ) {\n console.warn(\n 'dap-ds-table: the table has no accessible name. Set a caption (or aria-label / aria-labelledby) that describes its purpose.',\n )\n }\n }\n\n protected willUpdate(\n _changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>,\n ): void {\n // The caption names the table. The rendered <caption> is in the shadow root\n // and not tied to the host's role, so the name goes on the host instead;\n // never set an empty label. Done before render (not in updated()) because\n // aria-label is a reactive property and setting it after would re-render.\n if (_changedProperties.has('caption')) {\n if (this.caption) {\n this.setAttribute('aria-label', this.caption)\n this.captionLabelApplied = true\n } else if (this.captionLabelApplied) {\n this.removeAttribute('aria-label')\n this.captionLabelApplied = false\n }\n }\n }\n\n render() {\n // aria-hidden: the caption text is already the host's aria-label, so screen\n // readers would otherwise announce it twice\n return html`\n ${this.caption\n ? html`<caption class=\"caption\" part=\"caption\" aria-hidden=\"true\">\n ${this.caption}\n </caption>`\n : nothing}\n <slot></slot>\n `\n }\n}\n"],"names":["_DapDSTable","DdsElement","_changedProperties","row","index","html","nothing","unsafeCSS","styles","DapDSTable","__decorateClass","queryAssignedElements","property"],"mappings":";;;;;;;;;;;;;;AAmBA,MAAqBA,IAArB,MAAqBA,UAAmBC,EAAW;AAAA,EAAnD,cAAA;AAAA,UAAA,GAAA,SAAA,GAO+B,KAAO,OAAO,SAEU,KAAA,SAAA,IAGf,KAAA,UAAA,IAMtC,KAAQ,sBAAsB;AAAA,EAAA;AAAA,EAEpB,aACRC,GACM;AACN,SAAK,KAAK,QAAQ,CAACC,GAAKC,MAAU;AAChC,MAAIA,MAAU,KAAK,KAAK,SAAS,KAC/BD,EAAI,gBAAgB,MAAM;AAAA,IAC5B,CACD,GAGC,CAAC,KAAK,WACN,CAAC,KAAK,aAAa,YAAY,KAC/B,CAAC,KAAK,aAAa,iBAAiB,KAE5B,QAAA;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAAA,EAGQ,WACRD,GACM;AAKF,IAAAA,EAAmB,IAAI,SAAS,MAC9B,KAAK,WACF,KAAA,aAAa,cAAc,KAAK,OAAO,GAC5C,KAAK,sBAAsB,MAClB,KAAK,wBACd,KAAK,gBAAgB,YAAY,GACjC,KAAK,sBAAsB;AAAA,EAE/B;AAAA,EAGF,SAAS;AAGA,WAAAG;AAAAA,QACH,KAAK,UACHA;AAAAA,cACI,KAAK,OAAO;AAAA,wBAEhBC,CAAO;AAAA;AAAA;AAAA,EAAA;AAIjB;AArEEN,EAAO,UAAU,gBAaDA,EAAA,SAASO,EAAUC,CAAM;AAd3C,IAAqBC,IAArBT;AAI2BU,EAAA;AAAA,EAAxBC,EAAsB;AAAA,GAJJF,EAIM,WAAA,MAAA;AAGWC,EAAA;AAAA,EAAnCE,EAAS,EAAE,SAAS,GAAM,CAAA;AAAA,GAPRH,EAOiB,WAAA,MAAA;AAEQC,EAAA;AAAA,EAA3CE,EAAS,EAAE,MAAM,SAAS,SAAS,GAAM,CAAA;AAAA,GATvBH,EASyB,WAAA,QAAA;AAGhBC,EAAA;AAAA,EAA3BE,EAAS,EAAE,MAAM,OAAQ,CAAA;AAAA,GAZPH,EAYS,WAAA,SAAA;"}
|
|
@@ -72,7 +72,6 @@ export default class DapDSTextarea extends GenericFormElement {
|
|
|
72
72
|
private static nextId;
|
|
73
73
|
private readonly inputId;
|
|
74
74
|
private readonly labelId;
|
|
75
|
-
private readonly descriptionId;
|
|
76
75
|
private readonly counterId;
|
|
77
76
|
/**@ignore */
|
|
78
77
|
input: HTMLTextAreaElement;
|
|
@@ -103,6 +102,12 @@ export default class DapDSTextarea extends GenericFormElement {
|
|
|
103
102
|
onSelect(e: Event): void;
|
|
104
103
|
formResetCallback(): void;
|
|
105
104
|
handleInvalid(event: Event): void;
|
|
105
|
+
/**
|
|
106
|
+
* Combines description and feedback ids. Built as one value because a Lit
|
|
107
|
+
* attribute with several parts is removed entirely if any part is `nothing`.
|
|
108
|
+
* The description element is rendered by LabelableMixin with id="description".
|
|
109
|
+
*/
|
|
110
|
+
private getAriaDescribedBy;
|
|
106
111
|
private _renderFooter;
|
|
107
112
|
render(): unknown;
|
|
108
113
|
private _renderFeedback;
|