@maggioli-design-system/mds-modal 3.1.0 → 3.3.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.
Files changed (68) hide show
  1. package/dist/cjs/{index-90939077.js → index-6de6438b.js} +251 -198
  2. package/dist/cjs/loader.cjs.js +3 -2
  3. package/dist/cjs/mds-modal.cjs.entry.js +34 -7
  4. package/dist/cjs/mds-modal.cjs.js +6 -2
  5. package/dist/collection/collection-manifest.json +2 -2
  6. package/dist/collection/common/aria.js +19 -0
  7. package/dist/collection/components/mds-modal/mds-modal.css +37 -67
  8. package/dist/collection/components/mds-modal/mds-modal.js +33 -6
  9. package/dist/collection/components/mds-modal/test/mds-modal.stories.js +8 -0
  10. package/dist/collection/dictionary/typography.js +3 -3
  11. package/dist/components/index.d.ts +9 -0
  12. package/dist/components/index.js +1 -1
  13. package/dist/components/mds-modal.js +33 -6
  14. package/dist/esm/{index-5dfae565.js → index-640a40d3.js} +251 -199
  15. package/dist/esm/loader.js +3 -2
  16. package/dist/esm/mds-modal.entry.js +34 -7
  17. package/dist/esm/mds-modal.js +3 -2
  18. package/dist/esm/polyfills/css-shim.js +1 -1
  19. package/dist/esm-es5/index-640a40d3.js +2 -0
  20. package/dist/esm-es5/loader.js +1 -1
  21. package/dist/esm-es5/mds-modal.entry.js +1 -1
  22. package/dist/esm-es5/mds-modal.js +1 -1
  23. package/dist/mds-modal/mds-modal.esm.js +1 -1
  24. package/dist/mds-modal/mds-modal.js +1 -1
  25. package/dist/mds-modal/p-0f3e1d2d.system.js +2 -0
  26. package/dist/mds-modal/{p-4288d1a7.system.entry.js → p-2c61dab9.system.entry.js} +1 -1
  27. package/dist/mds-modal/p-6fde22cf.js +2 -0
  28. package/dist/mds-modal/p-ba28961b.entry.js +1 -0
  29. package/dist/mds-modal/p-bea21063.system.js +1 -0
  30. package/dist/stats.json +36 -32
  31. package/dist/types/common/aria.d.ts +4 -0
  32. package/dist/types/components/mds-modal/meta/types.d.ts +2 -2
  33. package/dist/types/components/mds-modal/test/mds-modal.stories.d.ts +1 -0
  34. package/dist/types/stencil-public-runtime.d.ts +68 -7
  35. package/dist/types/types/autocomplete.d.ts +2 -2
  36. package/dist/types/types/button.d.ts +4 -4
  37. package/dist/types/types/floating-ui.d.ts +2 -2
  38. package/dist/types/types/form-rel.d.ts +1 -1
  39. package/dist/types/types/input-text-type.d.ts +1 -1
  40. package/dist/types/types/input-value-type.d.ts +1 -1
  41. package/dist/types/types/loading.d.ts +1 -1
  42. package/dist/types/types/typography.d.ts +8 -8
  43. package/dist/types/types/variant.d.ts +10 -10
  44. package/loader/index.d.ts +9 -0
  45. package/package.json +4 -4
  46. package/src/common/aria.ts +27 -0
  47. package/src/components/mds-modal/mds-modal.tsx +39 -4
  48. package/src/components/mds-modal/test/mds-modal.e2e.ts +4 -5
  49. package/src/components/mds-modal/test/mds-modal.stories.tsx +20 -0
  50. package/src/dictionary/typography.ts +3 -3
  51. package/src/fixtures/icons.json +5 -2
  52. package/src/types/typography.ts +3 -3
  53. package/www/build/mds-modal.esm.js +1 -1
  54. package/www/build/mds-modal.js +1 -1
  55. package/www/build/p-0f3e1d2d.system.js +2 -0
  56. package/www/build/{p-4288d1a7.system.entry.js → p-2c61dab9.system.entry.js} +1 -1
  57. package/www/build/p-6fde22cf.js +2 -0
  58. package/www/build/p-ba28961b.entry.js +1 -0
  59. package/www/build/p-bea21063.system.js +1 -0
  60. package/dist/esm-es5/index-5dfae565.js +0 -2
  61. package/dist/mds-modal/p-19fa0f59.js +0 -2
  62. package/dist/mds-modal/p-5935b9a5.system.js +0 -1
  63. package/dist/mds-modal/p-9c47a964.system.js +0 -2
  64. package/dist/mds-modal/p-f1135a2e.entry.js +0 -1
  65. package/www/build/p-19fa0f59.js +0 -2
  66. package/www/build/p-5935b9a5.system.js +0 -1
  67. package/www/build/p-9c47a964.system.js +0 -2
  68. package/www/build/p-f1135a2e.entry.js +0 -1
@@ -1,65 +1,17 @@
1
1
  const NAMESPACE = 'mds-modal';
2
2
 
3
+ /**
4
+ * Virtual DOM patching algorithm based on Snabbdom by
5
+ * Simon Friis Vindum (@paldepind)
6
+ * Licensed under the MIT License
7
+ * https://github.com/snabbdom/snabbdom/blob/master/LICENSE
8
+ *
9
+ * Modified for Stencil's renderer and slot projection
10
+ */
3
11
  let scopeId;
4
12
  let hostTagName;
5
13
  let isSvgMode = false;
6
14
  let queuePending = false;
7
- const win = typeof window !== 'undefined' ? window : {};
8
- const doc = win.document || { head: {} };
9
- const plt = {
10
- $flags$: 0,
11
- $resourcesUrl$: '',
12
- jmp: (h) => h(),
13
- raf: (h) => requestAnimationFrame(h),
14
- ael: (el, eventName, listener, opts) => el.addEventListener(eventName, listener, opts),
15
- rel: (el, eventName, listener, opts) => el.removeEventListener(eventName, listener, opts),
16
- ce: (eventName, opts) => new CustomEvent(eventName, opts),
17
- };
18
- const promiseResolve = (v) => Promise.resolve(v);
19
- const supportsConstructableStylesheets = /*@__PURE__*/ (() => {
20
- try {
21
- new CSSStyleSheet();
22
- return typeof new CSSStyleSheet().replaceSync === 'function';
23
- }
24
- catch (e) { }
25
- return false;
26
- })()
27
- ;
28
- const addHostEventListeners = (elm, hostRef, listeners, attachParentListeners) => {
29
- if (listeners) {
30
- listeners.map(([flags, name, method]) => {
31
- const target = getHostListenerTarget(elm, flags) ;
32
- const handler = hostListenerProxy(hostRef, method);
33
- const opts = hostListenerOpts(flags);
34
- plt.ael(target, name, handler, opts);
35
- (hostRef.$rmListeners$ = hostRef.$rmListeners$ || []).push(() => plt.rel(target, name, handler, opts));
36
- });
37
- }
38
- };
39
- const hostListenerProxy = (hostRef, methodName) => (ev) => {
40
- try {
41
- {
42
- if (hostRef.$flags$ & 256 /* HOST_FLAGS.isListenReady */) {
43
- // instance is ready, let's call it's member method for this event
44
- hostRef.$lazyInstance$[methodName](ev);
45
- }
46
- else {
47
- (hostRef.$queuedListeners$ = hostRef.$queuedListeners$ || []).push([methodName, ev]);
48
- }
49
- }
50
- }
51
- catch (e) {
52
- consoleError(e);
53
- }
54
- };
55
- const getHostListenerTarget = (elm, flags) => {
56
- if (flags & 4 /* LISTENER_FLAGS.TargetDocument */)
57
- return doc;
58
- return elm;
59
- };
60
- // prettier-ignore
61
- const hostListenerOpts = (flags) => (flags & 2 /* LISTENER_FLAGS.Capture */) !== 0;
62
- const HYDRATED_CSS = '{visibility:hidden}.hydrated{visibility:inherit}';
63
15
  const createTime = (fnName, tagName = '') => {
64
16
  {
65
17
  return () => {
@@ -74,76 +26,7 @@ const uniqueTime = (key, measureText) => {
74
26
  };
75
27
  }
76
28
  };
77
- const rootAppliedStyles = /*@__PURE__*/ new WeakMap();
78
- const registerStyle = (scopeId, cssText, allowCS) => {
79
- let style = styles.get(scopeId);
80
- if (supportsConstructableStylesheets && allowCS) {
81
- style = (style || new CSSStyleSheet());
82
- if (typeof style === 'string') {
83
- style = cssText;
84
- }
85
- else {
86
- style.replaceSync(cssText);
87
- }
88
- }
89
- else {
90
- style = cssText;
91
- }
92
- styles.set(scopeId, style);
93
- };
94
- const addStyle = (styleContainerNode, cmpMeta, mode, hostElm) => {
95
- let scopeId = getScopeId(cmpMeta);
96
- const style = styles.get(scopeId);
97
- // if an element is NOT connected then getRootNode() will return the wrong root node
98
- // so the fallback is to always use the document for the root node in those cases
99
- styleContainerNode = styleContainerNode.nodeType === 11 /* NODE_TYPE.DocumentFragment */ ? styleContainerNode : doc;
100
- if (style) {
101
- if (typeof style === 'string') {
102
- styleContainerNode = styleContainerNode.head || styleContainerNode;
103
- let appliedStyles = rootAppliedStyles.get(styleContainerNode);
104
- let styleElm;
105
- if (!appliedStyles) {
106
- rootAppliedStyles.set(styleContainerNode, (appliedStyles = new Set()));
107
- }
108
- if (!appliedStyles.has(scopeId)) {
109
- {
110
- {
111
- styleElm = doc.createElement('style');
112
- styleElm.innerHTML = style;
113
- }
114
- styleContainerNode.insertBefore(styleElm, styleContainerNode.querySelector('link'));
115
- }
116
- if (appliedStyles) {
117
- appliedStyles.add(scopeId);
118
- }
119
- }
120
- }
121
- else if (!styleContainerNode.adoptedStyleSheets.includes(style)) {
122
- styleContainerNode.adoptedStyleSheets = [...styleContainerNode.adoptedStyleSheets, style];
123
- }
124
- }
125
- return scopeId;
126
- };
127
- const attachStyles = (hostRef) => {
128
- const cmpMeta = hostRef.$cmpMeta$;
129
- const elm = hostRef.$hostElement$;
130
- const flags = cmpMeta.$flags$;
131
- const endAttachStyles = createTime('attachStyles', cmpMeta.$tagName$);
132
- const scopeId = addStyle(elm.shadowRoot ? elm.shadowRoot : elm.getRootNode(), cmpMeta);
133
- if (flags & 10 /* CMP_FLAGS.needsScopedEncapsulation */) {
134
- // only required when we're NOT using native shadow dom (slot)
135
- // or this browser doesn't support native shadow dom
136
- // and this host element was NOT created with SSR
137
- // let's pick out the inner content for slot projection
138
- // create a node to represent where the original
139
- // content was first placed, which is useful later on
140
- // DOM WRITE!!
141
- elm['s-sc'] = scopeId;
142
- elm.classList.add(scopeId + '-h');
143
- }
144
- endAttachStyles();
145
- };
146
- const getScopeId = (cmp, mode) => 'sc-' + (cmp.$tagName$);
29
+ const HYDRATED_CSS = '{visibility:hidden}[hydrated]{visibility:inherit}';
147
30
  /**
148
31
  * Default style mode id
149
32
  */
@@ -158,6 +41,18 @@ const isComplexType = (o) => {
158
41
  o = typeof o;
159
42
  return o === 'object' || o === 'function';
160
43
  };
44
+ /**
45
+ * Helper method for querying a `meta` tag that contains a nonce value
46
+ * out of a DOM's head.
47
+ *
48
+ * @param doc The DOM containing the `head` to query against
49
+ * @returns The content of the meta tag representing the nonce value, or `undefined` if no tag
50
+ * exists or the tag has no content.
51
+ */
52
+ function queryNonceMetaTagContent(doc) {
53
+ var _a, _b, _c;
54
+ return (_c = (_b = (_a = doc.head) === null || _a === void 0 ? void 0 : _a.querySelector('meta[name="csp-nonce"]')) === null || _b === void 0 ? void 0 : _b.getAttribute('content')) !== null && _c !== void 0 ? _c : undefined;
55
+ }
161
56
  /**
162
57
  * Production h() function based on Preact by
163
58
  * Jason Miller (@developit)
@@ -166,7 +61,6 @@ const isComplexType = (o) => {
166
61
  *
167
62
  * Modified for Stencil's compiler and vdom
168
63
  */
169
- // const stack: any[] = [];
170
64
  // export function h(nodeName: string | d.FunctionalComponent, vnodeData: d.PropsType, child?: d.ChildType): d.VNode;
171
65
  // export function h(nodeName: string | d.FunctionalComponent, vnodeData: d.PropsType, ...children: d.ChildType[]): d.VNode;
172
66
  const h = (nodeName, vnodeData, ...children) => {
@@ -232,6 +126,151 @@ const newVNode = (tag, text) => {
232
126
  };
233
127
  const Host = {};
234
128
  const isHost = (node) => node && node.$tag$ === Host;
129
+ /**
130
+ * Parse a new property value for a given property type.
131
+ *
132
+ * While the prop value can reasonably be expected to be of `any` type as far as TypeScript's type checker is concerned,
133
+ * it is not safe to assume that the string returned by evaluating `typeof propValue` matches:
134
+ * 1. `any`, the type given to `propValue` in the function signature
135
+ * 2. the type stored from `propType`.
136
+ *
137
+ * This function provides the capability to parse/coerce a property's value to potentially any other JavaScript type.
138
+ *
139
+ * Property values represented in TSX preserve their type information. In the example below, the number 0 is passed to
140
+ * a component. This `propValue` will preserve its type information (`typeof propValue === 'number'`). Note that is
141
+ * based on the type of the value being passed in, not the type declared of the class member decorated with `@Prop`.
142
+ * ```tsx
143
+ * <my-cmp prop-val={0}></my-cmp>
144
+ * ```
145
+ *
146
+ * HTML prop values on the other hand, will always a string
147
+ *
148
+ * @param propValue the new value to coerce to some type
149
+ * @param propType the type of the prop, expressed as a binary number
150
+ * @returns the parsed/coerced value
151
+ */
152
+ const parsePropertyValue = (propValue, propType) => {
153
+ // ensure this value is of the correct prop type
154
+ if (propValue != null && !isComplexType(propValue)) {
155
+ if (propType & 4 /* MEMBER_FLAGS.Boolean */) {
156
+ // per the HTML spec, any string value means it is a boolean true value
157
+ // but we'll cheat here and say that the string "false" is the boolean false
158
+ return propValue === 'false' ? false : propValue === '' || !!propValue;
159
+ }
160
+ if (propType & 1 /* MEMBER_FLAGS.String */) {
161
+ // could have been passed as a number or boolean
162
+ // but we still want it as a string
163
+ return String(propValue);
164
+ }
165
+ // redundant return here for better minification
166
+ return propValue;
167
+ }
168
+ // not sure exactly what type we want
169
+ // so no need to change to a different type
170
+ return propValue;
171
+ };
172
+ const getElement = (ref) => (getHostRef(ref).$hostElement$ );
173
+ const createEvent = (ref, name, flags) => {
174
+ const elm = getElement(ref);
175
+ return {
176
+ emit: (detail) => {
177
+ return emitEvent(elm, name, {
178
+ bubbles: !!(flags & 4 /* EVENT_FLAGS.Bubbles */),
179
+ composed: !!(flags & 2 /* EVENT_FLAGS.Composed */),
180
+ cancelable: !!(flags & 1 /* EVENT_FLAGS.Cancellable */),
181
+ detail,
182
+ });
183
+ },
184
+ };
185
+ };
186
+ /**
187
+ * Helper function to create & dispatch a custom Event on a provided target
188
+ * @param elm the target of the Event
189
+ * @param name the name to give the custom Event
190
+ * @param opts options for configuring a custom Event
191
+ * @returns the custom Event
192
+ */
193
+ const emitEvent = (elm, name, opts) => {
194
+ const ev = plt.ce(name, opts);
195
+ elm.dispatchEvent(ev);
196
+ return ev;
197
+ };
198
+ const rootAppliedStyles = /*@__PURE__*/ new WeakMap();
199
+ const registerStyle = (scopeId, cssText, allowCS) => {
200
+ let style = styles.get(scopeId);
201
+ if (supportsConstructableStylesheets && allowCS) {
202
+ style = (style || new CSSStyleSheet());
203
+ if (typeof style === 'string') {
204
+ style = cssText;
205
+ }
206
+ else {
207
+ style.replaceSync(cssText);
208
+ }
209
+ }
210
+ else {
211
+ style = cssText;
212
+ }
213
+ styles.set(scopeId, style);
214
+ };
215
+ const addStyle = (styleContainerNode, cmpMeta, mode, hostElm) => {
216
+ var _a;
217
+ let scopeId = getScopeId(cmpMeta);
218
+ const style = styles.get(scopeId);
219
+ // if an element is NOT connected then getRootNode() will return the wrong root node
220
+ // so the fallback is to always use the document for the root node in those cases
221
+ styleContainerNode = styleContainerNode.nodeType === 11 /* NODE_TYPE.DocumentFragment */ ? styleContainerNode : doc;
222
+ if (style) {
223
+ if (typeof style === 'string') {
224
+ styleContainerNode = styleContainerNode.head || styleContainerNode;
225
+ let appliedStyles = rootAppliedStyles.get(styleContainerNode);
226
+ let styleElm;
227
+ if (!appliedStyles) {
228
+ rootAppliedStyles.set(styleContainerNode, (appliedStyles = new Set()));
229
+ }
230
+ if (!appliedStyles.has(scopeId)) {
231
+ {
232
+ {
233
+ styleElm = doc.createElement('style');
234
+ styleElm.innerHTML = style;
235
+ }
236
+ // Apply CSP nonce to the style tag if it exists
237
+ const nonce = (_a = plt.$nonce$) !== null && _a !== void 0 ? _a : queryNonceMetaTagContent(doc);
238
+ if (nonce != null) {
239
+ styleElm.setAttribute('nonce', nonce);
240
+ }
241
+ styleContainerNode.insertBefore(styleElm, styleContainerNode.querySelector('link'));
242
+ }
243
+ if (appliedStyles) {
244
+ appliedStyles.add(scopeId);
245
+ }
246
+ }
247
+ }
248
+ else if (!styleContainerNode.adoptedStyleSheets.includes(style)) {
249
+ styleContainerNode.adoptedStyleSheets = [...styleContainerNode.adoptedStyleSheets, style];
250
+ }
251
+ }
252
+ return scopeId;
253
+ };
254
+ const attachStyles = (hostRef) => {
255
+ const cmpMeta = hostRef.$cmpMeta$;
256
+ const elm = hostRef.$hostElement$;
257
+ const flags = cmpMeta.$flags$;
258
+ const endAttachStyles = createTime('attachStyles', cmpMeta.$tagName$);
259
+ const scopeId = addStyle(elm.shadowRoot ? elm.shadowRoot : elm.getRootNode(), cmpMeta);
260
+ if (flags & 10 /* CMP_FLAGS.needsScopedEncapsulation */) {
261
+ // only required when we're NOT using native shadow dom (slot)
262
+ // or this browser doesn't support native shadow dom
263
+ // and this host element was NOT created with SSR
264
+ // let's pick out the inner content for slot projection
265
+ // create a node to represent where the original
266
+ // content was first placed, which is useful later on
267
+ // DOM WRITE!!
268
+ elm['s-sc'] = scopeId;
269
+ elm.classList.add(scopeId + '-h');
270
+ }
271
+ endAttachStyles();
272
+ };
273
+ const getScopeId = (cmp, mode) => 'sc-' + (cmp.$tagName$);
235
274
  /**
236
275
  * Production setAccessor() function based on Preact by
237
276
  * Jason Miller (@developit)
@@ -688,32 +727,6 @@ const renderVdom = (hostRef, renderFnResults) => {
688
727
  // synchronous patch
689
728
  patch(oldVNode, rootVnode);
690
729
  };
691
- const getElement = (ref) => (getHostRef(ref).$hostElement$ );
692
- const createEvent = (ref, name, flags) => {
693
- const elm = getElement(ref);
694
- return {
695
- emit: (detail) => {
696
- return emitEvent(elm, name, {
697
- bubbles: !!(flags & 4 /* EVENT_FLAGS.Bubbles */),
698
- composed: !!(flags & 2 /* EVENT_FLAGS.Composed */),
699
- cancelable: !!(flags & 1 /* EVENT_FLAGS.Cancellable */),
700
- detail,
701
- });
702
- },
703
- };
704
- };
705
- /**
706
- * Helper function to create & dispatch a custom Event on a provided target
707
- * @param elm the target of the Event
708
- * @param name the name to give the custom Event
709
- * @param opts options for configuring a custom Event
710
- * @returns the custom Event
711
- */
712
- const emitEvent = (elm, name, opts) => {
713
- const ev = plt.ce(name, opts);
714
- elm.dispatchEvent(ev);
715
- return ev;
716
- };
717
730
  const attachToAncestor = (hostRef, ancestorComponent) => {
718
731
  if (ancestorComponent && !hostRef.$onRenderResolve$ && ancestorComponent['s-p']) {
719
732
  ancestorComponent['s-p'].push(new Promise((r) => (hostRef.$onRenderResolve$ = r)));
@@ -880,51 +893,8 @@ const safeCall = (instance, method, arg) => {
880
893
  const then = (promise, thenFn) => {
881
894
  return promise && promise.then ? promise.then(thenFn) : thenFn();
882
895
  };
883
- const addHydratedFlag = (elm) => elm.classList.add('hydrated')
884
- ;
885
- /**
886
- * Parse a new property value for a given property type.
887
- *
888
- * While the prop value can reasonably be expected to be of `any` type as far as TypeScript's type checker is concerned,
889
- * it is not safe to assume that the string returned by evaluating `typeof propValue` matches:
890
- * 1. `any`, the type given to `propValue` in the function signature
891
- * 2. the type stored from `propType`.
892
- *
893
- * This function provides the capability to parse/coerce a property's value to potentially any other JavaScript type.
894
- *
895
- * Property values represented in TSX preserve their type information. In the example below, the number 0 is passed to
896
- * a component. This `propValue` will preserve its type information (`typeof propValue === 'number'`). Note that is
897
- * based on the type of the value being passed in, not the type declared of the class member decorated with `@Prop`.
898
- * ```tsx
899
- * <my-cmp prop-val={0}></my-cmp>
900
- * ```
901
- *
902
- * HTML prop values on the other hand, will always a string
903
- *
904
- * @param propValue the new value to coerce to some type
905
- * @param propType the type of the prop, expressed as a binary number
906
- * @returns the parsed/coerced value
907
- */
908
- const parsePropertyValue = (propValue, propType) => {
909
- // ensure this value is of the correct prop type
910
- if (propValue != null && !isComplexType(propValue)) {
911
- if (propType & 4 /* MEMBER_FLAGS.Boolean */) {
912
- // per the HTML spec, any string value means it is a boolean true value
913
- // but we'll cheat here and say that the string "false" is the boolean false
914
- return propValue === 'false' ? false : propValue === '' || !!propValue;
915
- }
916
- if (propType & 1 /* MEMBER_FLAGS.String */) {
917
- // could have been passed as a number or boolean
918
- // but we still want it as a string
919
- return String(propValue);
920
- }
921
- // redundant return here for better minification
922
- return propValue;
923
- }
924
- // not sure exactly what type we want
925
- // so no need to change to a different type
926
- return propValue;
927
- };
896
+ const addHydratedFlag = (elm) => elm.setAttribute('hydrated', '')
897
+ ;
928
898
  const getValue = (ref, propName) => getHostRef(ref).$instanceValues$.get(propName);
929
899
  const setValue = (ref, propName, newVal, cmpMeta) => {
930
900
  // check our new property value against our internal value
@@ -968,6 +938,16 @@ const setValue = (ref, propName, newVal, cmpMeta) => {
968
938
  }
969
939
  }
970
940
  };
941
+ /**
942
+ * Attach a series of runtime constructs to a compiled Stencil component
943
+ * constructor, including getters and setters for the `@Prop` and `@State`
944
+ * decorators, callbacks for when attributes change, and so on.
945
+ *
946
+ * @param Cstr the constructor for a component that we need to process
947
+ * @param cmpMeta metadata collected previously about the component
948
+ * @param flags a number used to store a series of bit flags
949
+ * @returns a reference to the same constructor passed in (but now mutated)
950
+ */
971
951
  const proxyComponent = (Cstr, cmpMeta, flags) => {
972
952
  if (cmpMeta.$members$) {
973
953
  if (Cstr.watchers) {
@@ -1191,15 +1171,20 @@ const connectedCallback = (elm) => {
1191
1171
  const disconnectedCallback = (elm) => {
1192
1172
  if ((plt.$flags$ & 1 /* PLATFORM_FLAGS.isTmpDisconnected */) === 0) {
1193
1173
  const hostRef = getHostRef(elm);
1174
+ const instance = hostRef.$lazyInstance$ ;
1194
1175
  {
1195
1176
  if (hostRef.$rmListeners$) {
1196
1177
  hostRef.$rmListeners$.map((rmListener) => rmListener());
1197
1178
  hostRef.$rmListeners$ = undefined;
1198
1179
  }
1199
1180
  }
1181
+ {
1182
+ safeCall(instance, 'disconnectedCallback');
1183
+ }
1200
1184
  }
1201
1185
  };
1202
1186
  const bootstrapLazy = (lazyBundles, options = {}) => {
1187
+ var _a;
1203
1188
  const endBootstrap = createTime();
1204
1189
  const cmpTags = [];
1205
1190
  const exclude = options.exclude || [];
@@ -1282,6 +1267,11 @@ const bootstrapLazy = (lazyBundles, options = {}) => {
1282
1267
  {
1283
1268
  visibilityStyle.innerHTML = cmpTags + HYDRATED_CSS;
1284
1269
  visibilityStyle.setAttribute('data-styles', '');
1270
+ // Apply CSP nonce to the style tag if it exists
1271
+ const nonce = (_a = plt.$nonce$) !== null && _a !== void 0 ? _a : queryNonceMetaTagContent(doc);
1272
+ if (nonce != null) {
1273
+ visibilityStyle.setAttribute('nonce', nonce);
1274
+ }
1285
1275
  head.insertBefore(visibilityStyle, metaCharset ? metaCharset.nextSibling : head.firstChild);
1286
1276
  }
1287
1277
  // Process deferred connectedCallbacks now all components have been registered
@@ -1297,6 +1287,47 @@ const bootstrapLazy = (lazyBundles, options = {}) => {
1297
1287
  // Fallback appLoad event
1298
1288
  endBootstrap();
1299
1289
  };
1290
+ const addHostEventListeners = (elm, hostRef, listeners, attachParentListeners) => {
1291
+ if (listeners) {
1292
+ listeners.map(([flags, name, method]) => {
1293
+ const target = getHostListenerTarget(elm, flags) ;
1294
+ const handler = hostListenerProxy(hostRef, method);
1295
+ const opts = hostListenerOpts(flags);
1296
+ plt.ael(target, name, handler, opts);
1297
+ (hostRef.$rmListeners$ = hostRef.$rmListeners$ || []).push(() => plt.rel(target, name, handler, opts));
1298
+ });
1299
+ }
1300
+ };
1301
+ const hostListenerProxy = (hostRef, methodName) => (ev) => {
1302
+ try {
1303
+ {
1304
+ if (hostRef.$flags$ & 256 /* HOST_FLAGS.isListenReady */) {
1305
+ // instance is ready, let's call it's member method for this event
1306
+ hostRef.$lazyInstance$[methodName](ev);
1307
+ }
1308
+ else {
1309
+ (hostRef.$queuedListeners$ = hostRef.$queuedListeners$ || []).push([methodName, ev]);
1310
+ }
1311
+ }
1312
+ }
1313
+ catch (e) {
1314
+ consoleError(e);
1315
+ }
1316
+ };
1317
+ const getHostListenerTarget = (elm, flags) => {
1318
+ if (flags & 4 /* LISTENER_FLAGS.TargetDocument */)
1319
+ return doc;
1320
+ return elm;
1321
+ };
1322
+ // prettier-ignore
1323
+ const hostListenerOpts = (flags) => (flags & 2 /* LISTENER_FLAGS.Capture */) !== 0;
1324
+ /**
1325
+ * Assigns the given value to the nonce property on the runtime platform object.
1326
+ * During runtime, this value is used to set the nonce attribute on all dynamically created script and style tags.
1327
+ * @param nonce The value to be assigned to the platform nonce property.
1328
+ * @returns void
1329
+ */
1330
+ const setNonce = (nonce) => (plt.$nonce$ = nonce);
1300
1331
  const hostRefs = /*@__PURE__*/ new WeakMap();
1301
1332
  const getHostRef = (ref) => hostRefs.get(ref);
1302
1333
  const registerInstance = (lazyInstance, hostRef) => hostRefs.set((hostRef.$lazyInstance$ = lazyInstance), hostRef);
@@ -1340,6 +1371,27 @@ const loadModule = (cmpMeta, hostRef, hmrVersionId) => {
1340
1371
  }, consoleError);
1341
1372
  };
1342
1373
  const styles = /*@__PURE__*/ new Map();
1374
+ const win = typeof window !== 'undefined' ? window : {};
1375
+ const doc = win.document || { head: {} };
1376
+ const plt = {
1377
+ $flags$: 0,
1378
+ $resourcesUrl$: '',
1379
+ jmp: (h) => h(),
1380
+ raf: (h) => requestAnimationFrame(h),
1381
+ ael: (el, eventName, listener, opts) => el.addEventListener(eventName, listener, opts),
1382
+ rel: (el, eventName, listener, opts) => el.removeEventListener(eventName, listener, opts),
1383
+ ce: (eventName, opts) => new CustomEvent(eventName, opts),
1384
+ };
1385
+ const promiseResolve = (v) => Promise.resolve(v);
1386
+ const supportsConstructableStylesheets = /*@__PURE__*/ (() => {
1387
+ try {
1388
+ new CSSStyleSheet();
1389
+ return typeof new CSSStyleSheet().replaceSync === 'function';
1390
+ }
1391
+ catch (e) { }
1392
+ return false;
1393
+ })()
1394
+ ;
1343
1395
  const queueDomReads = [];
1344
1396
  const queueDomWrites = [];
1345
1397
  const queueTask = (queue, write) => (cb) => {
@@ -1383,4 +1435,4 @@ const flush = () => {
1383
1435
  const nextTick = /*@__PURE__*/ (cb) => promiseResolve().then(cb);
1384
1436
  const writeTask = /*@__PURE__*/ queueTask(queueDomWrites, true);
1385
1437
 
1386
- export { Host as H, bootstrapLazy as b, createEvent as c, getElement as g, h, promiseResolve as p, registerInstance as r };
1438
+ export { Host as H, bootstrapLazy as b, createEvent as c, getElement as g, h, promiseResolve as p, registerInstance as r, setNonce as s };
@@ -1,7 +1,8 @@
1
- import { p as promiseResolve, b as bootstrapLazy } from './index-5dfae565.js';
1
+ import { p as promiseResolve, b as bootstrapLazy } from './index-640a40d3.js';
2
+ export { s as setNonce } from './index-640a40d3.js';
2
3
 
3
4
  /*
4
- Stencil Client Patch Esm v2.18.0 | MIT Licensed | https://stenciljs.com
5
+ Stencil Client Patch Esm v2.22.1 | MIT Licensed | https://stenciljs.com
5
6
  */
6
7
  const patchEsm = () => {
7
8
  return promiseResolve();
@@ -1,4 +1,4 @@
1
- import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-5dfae565.js';
1
+ import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-640a40d3.js';
2
2
 
3
3
  function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);else for(t in e)e[t]&&(n&&(n+=" "),n+=t);return n}function clsx(){for(var e,t,f=0,n="";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
4
4
 
@@ -14,13 +14,14 @@ const MdsModal = class {
14
14
  this.top = null;
15
15
  this.bottom = null;
16
16
  this.animationState = 'intro';
17
- /**
18
- * Specifies the animation position of the modal window
19
- */
20
- this.position = null;
21
17
  this.animationName = (customState = null, customPosition = null) => {
22
18
  return `animate-${customPosition !== null ? customPosition : this.position}${customState !== null ? '-' + customState : ''}`;
23
19
  };
20
+ this.checkKeyboardEscape = (event) => {
21
+ if (event.code === 'Escape') {
22
+ this.close.emit();
23
+ }
24
+ };
24
25
  this.closeModal = (e = null) => {
25
26
  var _a;
26
27
  if (((_a = e.target) === null || _a === void 0 ? void 0 : _a.localName) !== 'mds-modal') {
@@ -31,6 +32,9 @@ const MdsModal = class {
31
32
  this.close.emit();
32
33
  }
33
34
  };
35
+ this.stateOpened = undefined;
36
+ this.opened = undefined;
37
+ this.position = null;
34
38
  }
35
39
  componentWillLoad() {
36
40
  this.bottom = this.hostElement.querySelector('[slot="bottom"]') !== null;
@@ -43,6 +47,10 @@ const MdsModal = class {
43
47
  if (this.position === null) {
44
48
  this.position = 'right';
45
49
  }
50
+ if (this.window) {
51
+ const modal = this.hostElement.querySelector('[slot="window"]');
52
+ modal.setAttribute('role', 'modal');
53
+ }
46
54
  }
47
55
  componentWillRender() {
48
56
  this.animationState = this.opened ? 'intro' : 'outro';
@@ -55,6 +63,14 @@ const MdsModal = class {
55
63
  this.hostElement.classList.add(this.animationName(this.animationState));
56
64
  window.clearTimeout(this.animationDeelay);
57
65
  }, 500);
66
+ if (this.opened) {
67
+ this.addKeyboardEscapeListener();
68
+ return;
69
+ }
70
+ this.removeKeyboardEscapeListener();
71
+ }
72
+ disconnectedCallback() {
73
+ this.removeKeyboardEscapeListener();
58
74
  }
59
75
  positionChange(_newValue, oldValue) {
60
76
  window.clearTimeout(this.animationDeelay);
@@ -62,19 +78,30 @@ const MdsModal = class {
62
78
  this.hostElement.classList.remove(this.animationName('intro', oldValue));
63
79
  this.hostElement.classList.remove(this.animationName('outro', oldValue));
64
80
  }
81
+ addKeyboardEscapeListener() {
82
+ window.addEventListener('keydown', this.checkKeyboardEscape.bind(this));
83
+ }
84
+ removeKeyboardEscapeListener() {
85
+ window.removeEventListener('keydown', this.checkKeyboardEscape.bind(this));
86
+ }
65
87
  openedChange(newValue) {
66
88
  this.stateOpened = newValue;
67
89
  window.clearTimeout(this.animationDeelay);
90
+ if (newValue) {
91
+ this.addKeyboardEscapeListener();
92
+ return;
93
+ }
94
+ this.removeKeyboardEscapeListener();
68
95
  }
69
96
  onCloseListener() {
70
97
  this.opened = false;
71
98
  }
72
99
  render() {
73
- return (h(Host, { class: clsx(this.stateOpened && this.animationName('opened')), onClick: (e) => { this.closeModal(e); } }, this.window
100
+ return (h(Host, { "aria-modal": clsx(this.opened ? 'true' : 'false'), class: clsx(this.stateOpened && this.animationName('opened')), onClick: (e) => { this.closeModal(e); } }, this.window
74
101
  ?
75
102
  h("slot", { name: "window" })
76
103
  :
77
- h("div", { class: clsx('window', (this.top || this.bottom) && `window-${this.top ? '-top' : ''}${this.bottom ? '-bottom' : ''}`) }, this.top &&
104
+ h("div", { class: clsx('window', (this.top || this.bottom) && `window-${this.top ? '-top' : ''}${this.bottom ? '-bottom' : ''}`), role: "dialog" }, this.top &&
78
105
  h("slot", { name: "top" }), h("slot", null), this.bottom &&
79
106
  h("slot", { name: "bottom" })), !this.window && h("i", { innerHTML: miBaselineClose, class: "svg close" })));
80
107
  }
@@ -1,7 +1,8 @@
1
- import { p as promiseResolve, b as bootstrapLazy } from './index-5dfae565.js';
1
+ import { p as promiseResolve, b as bootstrapLazy } from './index-640a40d3.js';
2
+ export { s as setNonce } from './index-640a40d3.js';
2
3
 
3
4
  /*
4
- Stencil Client Patch Browser v2.18.0 | MIT Licensed | https://stenciljs.com
5
+ Stencil Client Patch Browser v2.22.1 | MIT Licensed | https://stenciljs.com
5
6
  */
6
7
  const patchBrowser = () => {
7
8
  const importMeta = import.meta.url;