@supersoniks/concorde 1.1.40 → 1.1.42

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 (31) hide show
  1. package/concorde-core.bundle.js +12 -12
  2. package/concorde-core.es.js +1518 -1002
  3. package/core/components/functional/sdui/SDUIDescriptorTransformer.d.ts +59 -0
  4. package/core/components/functional/sdui/SDUIDescriptorTransformer.js +219 -0
  5. package/core/components/functional/sdui/sdui.d.ts +81 -21
  6. package/core/components/functional/sdui/sdui.js +190 -78
  7. package/core/components/functional/sdui/types.d.ts +35 -0
  8. package/core/components/functional/sdui/types.js +1 -0
  9. package/core/components/ui/alert/alert.d.ts +2 -2
  10. package/core/components/ui/alert/alert.js +12 -11
  11. package/core/components/ui/divider/divider.js +1 -1
  12. package/core/components/ui/form/checkbox/checkbox.js +2 -1
  13. package/core/components/ui/form/fieldset/legend.js +1 -1
  14. package/core/components/ui/form/input/input.d.ts +4 -0
  15. package/core/components/ui/form/input/input.js +20 -3
  16. package/core/components/ui/form/input/password-helper.d.ts +25 -0
  17. package/core/components/ui/form/input/password-helper.js +118 -0
  18. package/core/components/ui/form/input/same-value-helper.d.ts +16 -0
  19. package/core/components/ui/form/input/same-value-helper.js +76 -0
  20. package/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts +35 -0
  21. package/core/components/ui/form/input-autocomplete/input-autocomplete.js +137 -0
  22. package/core/components/ui/form/select/select.js +5 -1
  23. package/core/components/ui/form/textarea/textarea.js +5 -1
  24. package/core/components/ui/pop/pop.d.ts +4 -4
  25. package/core/components/ui/pop/pop.js +43 -42
  26. package/core/components/ui/ui.d.ts +3 -0
  27. package/core/components/ui/ui.js +3 -0
  28. package/core/mixins/Fetcher.js +6 -2
  29. package/core/utils/HTML.d.ts +8 -0
  30. package/core/utils/HTML.js +41 -0
  31. package/package.json +11 -1
@@ -16,88 +16,190 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
16
16
  import { LitElement } from "lit";
17
17
  import { customElement, property } from "lit/decorators.js";
18
18
  import { Fetcher, Subscriber } from "@supersoniks/concorde/mixins";
19
- import { Objects } from "@supersoniks/concorde/utils";
19
+ import { HTML, Objects } from "@supersoniks/concorde/utils";
20
20
  const tagName = "sonic-sdui"; // For Astro.build
21
- let SonicComponent = class SonicComponent extends Fetcher(Subscriber(LitElement)) {
21
+ import SDUIDescriptorTransformer from "@supersoniks/concorde/core/components/functional/sdui/SDUIDescriptorTransformer";
22
+ /**
23
+ * ### sonic-sdui (Server Driven User Interface) est un fetcher chargant un JSON décrivant une interface utilisateur
24
+ *
25
+ * Extends mixins : Fetcher, [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page)
26
+ *
27
+ * * Si le composant possède un attribut *fetch*, il charge un contenu via un appel d'api web.<br>
28
+ * Voir [fetcher](./?path=/docs/core-components-functional-fetch--basic) pour la configuration des autres attributs.
29
+ * * Le format du JSON est décrit par le type SDUIDescriptor
30
+ * * Un attribut supplémentaire `transformation` permet de transformer le json reçu avant la générationd e l'interface utilisateur<br>
31
+ * Son format est décrit par le type SDUITransformDescription
32
+ *
33
+ * * Si le résultat de la requête est un objet, il est imbriqué dans un tableau pour garantir le fonctionnement.<br>
34
+ * Cependant, si l'attribut `extractValues` est présent, les valeurs des propriétés de l'objet sont mises dans dans un tableau pour le rendu.
35
+ * * La propriété _key_ est ajoutés à la donnée de chaque item. Elle contient l'index dans le cas d'un liste simple ou la clés associée à la valeur si `extractValues` est définit.
36
+ * * On peut appler la methode invalidate() sur son publishe pour declencher le rechargement des données
37
+ * *
38
+ */
39
+ let SonicSDUI = class SonicSDUI extends Fetcher(Subscriber(LitElement)) {
22
40
  connectedCallback() {
23
41
  this.noShadowDom = "";
42
+ this.displayContents = true;
24
43
  this.isFetchEnabled = this.hasAttribute("fetch");
25
44
  super.connectedCallback();
26
45
  }
46
+ /**
47
+ * On peut passer la description sous form de props, sinon il faut utiliser l'attribut fetch
48
+ */
27
49
  get props() {
28
50
  return super.props;
29
51
  }
30
- loadJS(src) {
31
- return __awaiter(this, void 0, void 0, function* () {
32
- const p = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
33
- let script = document.createElement("script");
34
- script.src = src;
35
- script.onload = () => resolve(true);
36
- script.onerror = () => resolve(true);
37
- document.head.appendChild(script);
38
- }));
39
- return p;
40
- });
41
- }
42
- loadCSS(src) {
43
- return __awaiter(this, void 0, void 0, function* () {
44
- const p = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
45
- var cssnode = document.createElement("link");
46
- cssnode.type = "text/css";
47
- cssnode.rel = "stylesheet";
48
- cssnode.href = src;
49
- cssnode.onload = () => resolve(true);
50
- cssnode.onerror = () => resolve(true);
51
- document.head.appendChild(cssnode);
52
- }));
53
- return p;
54
- });
55
- }
56
52
  set props(value) {
57
53
  super.props = value;
58
54
  this.updateContents();
59
55
  }
56
+ /**
57
+ * updateContents est déclenché quand les props sont renseignées
58
+ * Le contenu du composant est regénéré en fonction du descripteur fourni
59
+ */
60
60
  updateContents() {
61
61
  return __awaiter(this, void 0, void 0, function* () {
62
- while ([...this.children].filter((elt) => elt.nodeName != "SLOT").length > 0) {
63
- this.removeChild(this.children[0]);
64
- }
62
+ this.removeChildren();
65
63
  if (!this.props)
66
64
  return;
67
- try {
68
- if (this.props.js) {
69
- for (const src of this.props.js)
70
- this.loadJS(src);
71
- }
72
- if (this.props.css) {
73
- for (const src of this.props.css)
74
- this.loadCSS(src);
75
- }
76
- }
77
- catch (e) { }
78
- let children = this.props.nodes;
79
- if (!children)
65
+ this.loadAssets();
66
+ yield this.loadLibrary();
67
+ yield this.transformSDUIDescriptor();
68
+ this.parseRootNodes();
69
+ });
70
+ }
71
+ /**
72
+ * Suppressiond du contenu du composant avant le génération de la nouvelle ui
73
+ */
74
+ removeChildren() {
75
+ while ([...this.children].filter((elt) => elt.nodeName != "SLOT").length > 0) {
76
+ this.removeChild(this.children[0]);
77
+ }
78
+ }
79
+ /**
80
+ * Chargement de fichiers js et css associés si besoin
81
+ **/
82
+ loadAssets() {
83
+ if (!this.props)
84
+ return;
85
+ if (this.props.js) {
86
+ for (const src of this.props.js)
87
+ HTML.loadJS(src);
88
+ }
89
+ if (this.props.css) {
90
+ for (const src of this.props.css)
91
+ HTML.loadCSS(src);
92
+ }
93
+ }
94
+ /**
95
+ * Transformation de la data fournie via props si il y a un attribut transformation
96
+ * */
97
+ transformSDUIDescriptor() {
98
+ return __awaiter(this, void 0, void 0, function* () {
99
+ if (!this.hasAttribute("transformation"))
80
100
  return;
101
+ let result = yield fetch(this.getAttribute("transformation"));
102
+ let json = yield result.json();
103
+ let transformer = new SDUIDescriptorTransformer();
104
+ yield transformer.transform(this.props, json);
105
+ });
106
+ }
107
+ /**
108
+ * Charge la library à utiliser
109
+ * */
110
+ loadLibrary() {
111
+ return __awaiter(this, void 0, void 0, function* () {
112
+ if (!this.hasAttribute("library"))
113
+ return;
114
+ let result = yield fetch(this.getAttribute("library"));
115
+ let json = yield result.json();
116
+ this.props.library = json;
117
+ });
118
+ }
119
+ /**
120
+ * Point d'entrée : transformation des noeuds fournis en éléments graphiques
121
+ **/
122
+ parseRootNodes() {
123
+ if (!this.props)
124
+ return;
125
+ let nodes = this.props.nodes;
126
+ if (!nodes)
127
+ return;
128
+ nodes.forEach((node) => this.appendChild(this.parseChild(node)));
129
+ }
130
+ /**
131
+ * On parse un noeud ce qui crée un éléments graphique et ses enfants par recursivité via `handleChildNodes`
132
+ */
133
+ parseChild(node) {
134
+ let tagName = node.tagName || "div";
135
+ let { element, contentElement } = this.handleLibrary(node, tagName);
136
+ this.handleAttributes(node, element);
137
+ element = this.handleMarkup(node, element);
138
+ if (!contentElement)
139
+ contentElement = element;
140
+ this.handleChildNodes(node, contentElement, element);
141
+ this.handleInnerHTML(node, contentElement);
142
+ if (node.prefix || node.suffix) {
143
+ const container = this.handlePrefixSuffix(node, element);
144
+ return container;
145
+ }
146
+ return element;
147
+ }
148
+ /**
149
+ * Si le noeud courant a des propriétés prefix et ou suffix il est entouré des markups fournis dans ces props.
150
+ * Le tout est inclu dans une div en display contents
151
+ */
152
+ handlePrefixSuffix(node, element) {
153
+ const container = document.createElement("div");
154
+ container.innerHTML = (node.prefix || "") + element.outerHTML + (node.suffix || "");
155
+ container.style.display = "contents";
156
+ return container;
157
+ }
158
+ /**
159
+ * Création des enfants du noeud courant
160
+ * Si l'enfant à un attribut parentElementSelector, il est ajouté dans le noeud correspondant au sélecteur css associé et non pas dans l'élément directement.
161
+ */
162
+ handleChildNodes(node, contentElement, element) {
163
+ if (node.nodes) {
164
+ let children = node.nodes;
81
165
  for (let child of children) {
82
- this.appendChild(this.parseChild(child));
166
+ let childElement = this.parseChild(child);
167
+ let nodeToAppendOn = contentElement;
168
+ if (child.parentElementSelector) {
169
+ nodeToAppendOn = element.querySelector(child.parentElementSelector) || contentElement;
170
+ }
171
+ if (nodeToAppendOn.shadowRoot)
172
+ nodeToAppendOn.shadowRoot.appendChild(childElement);
173
+ else
174
+ nodeToAppendOn.appendChild(childElement);
83
175
  }
84
- });
176
+ }
85
177
  }
86
- parseChild(props) {
87
- let type = props.type || "div";
178
+ /**
179
+ * Gestion de librarie :
180
+ * * Si l'élément référence un élément de la librairie, on se sert de cet élément comme model pour créer le composant graphique.
181
+ * * Sa propriété contentElement retournée vaut element par défaut.
182
+ * * Si contentElementSelector est definit, alors contentElement correspond à l'élément obtenu par selection css d'après la valeurs de contentElementSelector
183
+ * * Les éléments enfants seront ensuite ajoutés dans contentElement
184
+ */
185
+ handleLibrary(node, tagName) {
88
186
  let element;
89
- if (props.markup) {
90
- element = document.createElement("div");
91
- element.style.display = "contents";
92
- element.innerHTML = props.markup;
93
- return element;
94
- }
95
- if (props.library && this.props.library) {
96
- element = this.parseChild(this.props.library[props.library] || { type: "div" });
187
+ let contentElement;
188
+ if (node.libraryKey && this.props.library) {
189
+ element = this.parseChild(this.props.library[node.libraryKey] || { tagName: "div" });
190
+ let selector = (this.props.library[node.libraryKey] || {}).contentElementSelector;
191
+ if (selector)
192
+ contentElement = element.querySelector(selector);
97
193
  }
98
194
  else
99
- element = document.createElement(type);
100
- let attributes = props.attributes;
195
+ element = document.createElement(tagName);
196
+ return { element, contentElement };
197
+ }
198
+ /**
199
+ * Remplissage des attributs html avec les attributs fournis dans le noeud
200
+ */
201
+ handleAttributes(node, element) {
202
+ let attributes = node.attributes;
101
203
  for (let k in attributes) {
102
204
  let attr = attributes[k];
103
205
  if (Objects.isObject(attr)) {
@@ -105,31 +207,41 @@ let SonicComponent = class SonicComponent extends Fetcher(Subscriber(LitElement)
105
207
  }
106
208
  element.setAttribute(k, attr);
107
209
  }
108
- if (props.innerHTML) {
109
- element.innerHTML = props.innerHTML;
210
+ }
211
+ /**
212
+ * Si une propriété markup est fournie, l'élément est créé à partir de la chaine html fournie avant d'être configuré
213
+ */
214
+ handleMarkup(node, element) {
215
+ if (node.markup) {
216
+ element = document.createElement("div");
217
+ element.style.display = "contents";
218
+ element.innerHTML = node.markup;
110
219
  }
111
- if (props.nodes) {
112
- let children = props.nodes;
113
- for (let child of children) {
114
- if (element.shadowRoot)
115
- element.shadowRoot.appendChild(this.parseChild(child));
116
- else
117
- element.appendChild(this.parseChild(child));
118
- }
220
+ return element;
221
+ }
222
+ /**
223
+ * si le noeud à une propriété innerHTML, on l'ajout ay innerHTML de l'élément html en cours de création
224
+ */
225
+ handleInnerHTML(node, contentElement) {
226
+ var _a;
227
+ if (!node.innerHTML)
228
+ return;
229
+ if (node.innerHTML.indexOf("wording_") != -1) {
230
+ let wordingProvider = this.getAncestorAttributeValue("wordingProvider");
231
+ (_a = this.api) === null || _a === void 0 ? void 0 : _a.post(wordingProvider, { labels: [node.innerHTML.substring(8)] }).then((value) => {
232
+ if (contentElement)
233
+ contentElement.innerHTML += value;
234
+ });
119
235
  }
120
- if (props.prefix || props.suffix) {
121
- const container = document.createElement("div");
122
- container.innerHTML = (props.prefix || "") + element.outerHTML + (props.suffix || "");
123
- container.style.display = "contents";
124
- return container;
236
+ else if (contentElement) {
237
+ contentElement.innerHTML += node.innerHTML;
125
238
  }
126
- return element;
127
239
  }
128
240
  };
129
241
  __decorate([
130
242
  property()
131
- ], SonicComponent.prototype, "props", null);
132
- SonicComponent = __decorate([
243
+ ], SonicSDUI.prototype, "props", null);
244
+ SonicSDUI = __decorate([
133
245
  customElement(tagName)
134
- ], SonicComponent);
135
- export { SonicComponent };
246
+ ], SonicSDUI);
247
+ export { SonicSDUI };
@@ -0,0 +1,35 @@
1
+ export declare type SDUIDescriptor = {
2
+ js?: Array<string>;
3
+ css?: Array<string>;
4
+ library?: Record<string, SDUINode>;
5
+ nodes?: Array<SDUINode>;
6
+ };
7
+ export declare type SDUINode = {
8
+ libraryKey?: string;
9
+ markup?: string;
10
+ tagName?: string;
11
+ attributes: Record<string, string>;
12
+ nodes?: Array<SDUINode>;
13
+ innerHTML?: string;
14
+ prefix?: string;
15
+ suffix?: string;
16
+ contentElementSelector?: string;
17
+ parentElementSelector?: string;
18
+ };
19
+ export declare type SDUITransformDescription = {
20
+ library?: Record<string, SDUINode>;
21
+ transforms: Array<SDUITransformAction>;
22
+ };
23
+ export declare type SDUITransformAction = {
24
+ action: "remap" | "unwrap" | "wrap" | "delete" | "insert" | "move";
25
+ patterns?: Array<SDUINode>;
26
+ after?: SDUINode;
27
+ before?: SDUINode;
28
+ in?: SDUINode;
29
+ ui?: string;
30
+ };
31
+ export declare type SDUITransformList = Array<{
32
+ parent: SDUINode;
33
+ child: SDUINode;
34
+ index: number;
35
+ }>;
@@ -0,0 +1 @@
1
+ export {};
@@ -13,8 +13,8 @@ export declare class Alert extends LitElement {
13
13
  * Peut être renseigné dans le slot pour créer des messages plus complexes
14
14
  */
15
15
  text: string;
16
- size?: "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
16
+ size?: '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
17
17
  background: boolean;
18
- status: "default" | "error" | "warning" | "primary" | "info";
18
+ status: 'default' | 'error' | 'warning' | 'primary' | 'info';
19
19
  render(): import("lit-html").TemplateResult<1>;
20
20
  }
@@ -26,13 +26,13 @@ let Alert = class Alert extends LitElement {
26
26
  /**
27
27
  * Titre du message d'erreur
28
28
  */
29
- this.label = "";
29
+ this.label = '';
30
30
  /**
31
31
  * Peut être renseigné dans le slot pour créer des messages plus complexes
32
32
  */
33
- this.text = "";
33
+ this.text = '';
34
34
  this.background = false;
35
- this.status = "default";
35
+ this.status = 'default';
36
36
  }
37
37
  render() {
38
38
  return html `<div part="alert" class="alert">
@@ -66,20 +66,21 @@ Alert.styles = [
66
66
  line-height: 1.2;
67
67
  border-radius: var(--sc-alert-rounded);
68
68
  }
69
- z .label {
69
+
70
+ .label {
70
71
  font-weight: var(--sc-alert-label-fw);
71
72
  }
72
73
 
73
- :host([status="warning"]) {
74
+ :host([status='warning']) {
74
75
  --sc-alert-color: var(--sc-warning);
75
76
  }
76
- :host([status="error"]) {
77
+ :host([status='error']) {
77
78
  --sc-alert-color: var(--sc-danger);
78
79
  }
79
- :host([status="info"]) {
80
+ :host([status='info']) {
80
81
  --sc-alert-color: var(--sc-info);
81
82
  }
82
- :host([status="success"]) {
83
+ :host([status='success']) {
83
84
  --sc-alert-color: var(--sc-success);
84
85
  }
85
86
 
@@ -90,7 +91,7 @@ Alert.styles = [
90
91
  }
91
92
  :host([background]) .alert:before {
92
93
  background-color: currentColor;
93
- content: "";
94
+ content: '';
94
95
  display: block;
95
96
  position: absolute;
96
97
  left: 0;
@@ -111,10 +112,10 @@ Alert.styles = [
111
112
  }
112
113
 
113
114
  /*Rounded*/
114
- :host([size="xs"]) .alert {
115
+ :host([size='xs']) .alert {
115
116
  --sc-alert-rounded: var(--sc-rounded-sm);
116
117
  }
117
- :host([size="sm"]) .alert {
118
+ :host([size='sm']) .alert {
118
119
  --sc-alert-rounded: var(--sc-rounded-sm);
119
120
  }
120
121
  `,
@@ -22,7 +22,7 @@ let Divider = class Divider extends LitElement {
22
22
  }
23
23
  render() {
24
24
  return html `<div part="divider">
25
- <span class="text">${unsafeHTML(this.label)}<slot></slot></span>
25
+ <span class="text">${unsafeHTML(this.label ? this.label : "")}<slot></slot></span>
26
26
  </div>`;
27
27
  }
28
28
  };
@@ -51,6 +51,7 @@ let Checkbox = class Checkbox extends FormCheckable(FormInput(FormElement(Subscr
51
51
  super.connectedCallback();
52
52
  }
53
53
  render() {
54
+ //let labelStarSuffix = this.label && this.required && this.label.indexOf("*") == -1 ? " *" : "";
54
55
  return html `
55
56
  <label class="checkbox-container ${this.disabled ? "disabled" : ""}">
56
57
  <span class="icon-container">
@@ -68,7 +69,7 @@ let Checkbox = class Checkbox extends FormCheckable(FormInput(FormElement(Subscr
68
69
  <sonic-icon name="${this.iconName}" class="sc-input-icon"></sonic-icon>
69
70
  </span>
70
71
  <div class="checkbox-text">
71
- ${this.label ? unsafeHTML(this.label) : ""}
72
+ ${this.label ? unsafeHTML(this.label /*+ labelStarSuffix*/) : ""}
72
73
  <slot></slot>
73
74
  <slot name="description" class="${this.hasDescription ? "description" : "hidden"} ">
74
75
  ${this.description ? html `${unsafeHTML(this.description)}` : ""}
@@ -46,7 +46,7 @@ let Legend = class Legend extends LitElement {
46
46
  : ""}
47
47
 
48
48
  <div class="legend-content">
49
- ${unsafeHTML(this.label)}
49
+ ${unsafeHTML(this.label ? this.label : "")}
50
50
  ${this.description
51
51
  ? html `<sonic-legend-description>${unsafeHTML(this.description)}</sonic-legend-description>`
52
52
  : ""}
@@ -88,6 +88,10 @@ export declare class Input extends Input_base {
88
88
  hasSuffix: boolean;
89
89
  hasPrefix: boolean;
90
90
  updated(): void;
91
+ sameValueAsHandle?: (v: string) => void;
92
+ sameValueAsName?: string;
93
+ connectedCallback(): void;
94
+ disconnectedCallback(): void;
91
95
  onSlotChange(): void;
92
96
  inlineContentFocus(): void;
93
97
  render(): import("lit-html").TemplateResult<1>;
@@ -43,6 +43,20 @@ let Input = class Input extends FormInput(FormElement(Subscriber(LitElement))) {
43
43
  this.hasSuffix = ((_c = this.slotSuffixNodes) === null || _c === void 0 ? void 0 : _c.length) ? true : false;
44
44
  this.hasPrefix = ((_d = this.slotPrefixNodes) === null || _d === void 0 ? void 0 : _d.length) ? true : false;
45
45
  }
46
+ connectedCallback() {
47
+ super.connectedCallback();
48
+ if (this.hasAttribute("sameValueAs")) {
49
+ this.sameValueAsName = this.getAttribute("sameValueAs");
50
+ this.sameValueAsHandle = (v) => (this.pattern = v);
51
+ this.getFormPublisher()[this.sameValueAsName].onAssign(this.sameValueAsHandle);
52
+ }
53
+ }
54
+ disconnectedCallback() {
55
+ super.disconnectedCallback();
56
+ if (this.hasAttribute("sameValueAs") && this.sameValueAsName) {
57
+ this.getFormPublisher()[this.sameValueAsName].offAssign(this.sameValueAsHandle);
58
+ }
59
+ }
46
60
  onSlotChange() {
47
61
  this.requestUpdate();
48
62
  }
@@ -50,7 +64,6 @@ let Input = class Input extends FormInput(FormElement(Subscriber(LitElement))) {
50
64
  var _a;
51
65
  if (!this.inlineContent)
52
66
  return;
53
- console.log("oypouaze");
54
67
  (_a = this.input) === null || _a === void 0 ? void 0 : _a.focus();
55
68
  }
56
69
  render() {
@@ -58,9 +71,13 @@ let Input = class Input extends FormInput(FormElement(Subscriber(LitElement))) {
58
71
  "has-prefix": this.hasPrefix,
59
72
  "has-suffix": this.hasSuffix,
60
73
  };
74
+ //let labelStarSuffix = this.label && this.required && this.label.indexOf("*") == -1 ? " *" : "";
61
75
  return html `
62
76
  <label for="form-element" class="${this.hasLabel ? "form-label" : "hidden"}"
63
- >${this.label ? unsafeHTML(this.label) : ""}<slot name="label" @slotchange=${this.onSlotChange}></slot
77
+ >${this.label ? unsafeHTML(this.label /*+ labelStarSuffix*/) : ""}<slot
78
+ name="label"
79
+ @slotchange=${this.onSlotChange}
80
+ ></slot
64
81
  ></label>
65
82
 
66
83
  <div @click=${this.inlineContentFocus} class="form-control ${classMap(slotClasses)}">
@@ -94,7 +111,7 @@ let Input = class Input extends FormInput(FormElement(Subscriber(LitElement))) {
94
111
  <slot name="suffix" @slotchange=${this.onSlotChange}></slot>
95
112
  </div>
96
113
  </div>
97
- <slot name="description" class=" ${this.hasDescription ? "form-description" : "hidden"}">
114
+ <slot name="description" class="${this.hasDescription ? "form-description" : "hidden"}">
98
115
  ${this.description ? html `${unsafeHTML(this.description)}` : ""}
99
116
  </slot>
100
117
  `;
@@ -0,0 +1,25 @@
1
+ import { LitElement, nothing } from "lit";
2
+ import "@supersoniks/concorde/core/components/ui/icon/icon";
3
+ declare const SonicComponent_base: (new (...args: any[]) => import("../../../../mixins/Subscriber").SubscriberInterface) & typeof LitElement;
4
+ export declare class SonicComponent extends SonicComponent_base {
5
+ name?: string;
6
+ minChars: number;
7
+ hasNoChar: boolean;
8
+ hasEnoughChars: boolean;
9
+ hasMinuscule: boolean;
10
+ hasMajuscule: boolean;
11
+ hasNumber: boolean;
12
+ hasSpecialChar: boolean;
13
+ wording_password_helper_decription: string;
14
+ wording_password_helper_min_length: string;
15
+ wording_password_helper_lower_case: string;
16
+ wording_password_helper_upper_case: string;
17
+ wording_password_helper_number: string;
18
+ wording_password_helper_special_char: string;
19
+ checkValue?: (v: string) => void;
20
+ connectedCallback(): void;
21
+ disconnectedCallback(): void;
22
+ getIcon(test: boolean): import("lit-html").TemplateResult<1>;
23
+ render(): import("lit-html").TemplateResult<1> | typeof nothing;
24
+ }
25
+ export {};