@supersoniks/concorde 1.1.45 → 1.1.47

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 (63) hide show
  1. package/README.md +0 -0
  2. package/cli.js +0 -0
  3. package/concorde-core.bundle.js +36 -23
  4. package/concorde-core.es.js +1156 -864
  5. package/concorde-customer.bundle.js +129 -0
  6. package/concorde-customer.es.js +22004 -0
  7. package/core/_types/types.d.ts +0 -1
  8. package/core/components/functional/date/date.js +15 -7
  9. package/core/components/functional/fetch/fetch.d.ts +3 -1
  10. package/core/components/functional/list/list.d.ts +36 -19
  11. package/core/components/functional/list/list.js +15 -23
  12. package/core/components/functional/queue/queue.d.ts +6 -1
  13. package/core/components/functional/queue/queue.js +92 -54
  14. package/core/components/functional/sdui/sdui.d.ts +3 -4
  15. package/core/components/functional/sdui/sdui.js +0 -3
  16. package/core/components/ui/_css/type.js +12 -12
  17. package/core/components/ui/alert/alert.d.ts +3 -0
  18. package/core/components/ui/alert/alert.js +33 -1
  19. package/core/components/ui/badge/badge.d.ts +1 -1
  20. package/core/components/ui/badge/badge.js +9 -3
  21. package/core/components/ui/button/button.d.ts +2 -0
  22. package/core/components/ui/button/button.js +37 -12
  23. package/core/components/ui/form/checkbox/checkbox.d.ts +3 -0
  24. package/core/components/ui/form/checkbox/checkbox.js +14 -3
  25. package/core/components/ui/form/css/form-control.d.ts +1 -0
  26. package/core/components/ui/form/css/form-control.js +17 -0
  27. package/core/components/ui/form/input/input.d.ts +4 -3
  28. package/core/components/ui/form/input/input.js +38 -1
  29. package/core/components/ui/form/textarea/textarea.d.ts +1 -0
  30. package/core/components/ui/icon/icon.js +1 -1
  31. package/core/components/ui/image/image.d.ts +2 -0
  32. package/core/components/ui/image/image.js +28 -0
  33. package/core/components/ui/modal/modal-close.js +2 -3
  34. package/core/components/ui/modal/modal-content.js +1 -0
  35. package/core/components/ui/modal/modal.d.ts +8 -0
  36. package/core/components/ui/modal/modal.js +34 -6
  37. package/core/components/ui/pop/pop.js +1 -1
  38. package/core/components/ui/theme/css/tailwind.css +0 -0
  39. package/core/components/ui/theme/css/tailwind.d.ts +0 -0
  40. package/core/components/ui/theme/theme-collection/core-variables.js +18 -9
  41. package/core/components/ui/theme/theme.js +15 -8
  42. package/core/components/ui/toast/toast.d.ts +1 -1
  43. package/core/components/ui/toast/types.d.ts +1 -1
  44. package/core/components/ui/ui.d.ts +0 -1
  45. package/core/components/ui/ui.js +0 -1
  46. package/core/mixins/Fetcher.d.ts +3 -1
  47. package/core/mixins/Fetcher.js +45 -14
  48. package/core/mixins/FormCheckable.d.ts +1 -0
  49. package/core/mixins/FormInput.d.ts +1 -0
  50. package/core/mixins/Subscriber.d.ts +1 -0
  51. package/core/mixins/Subscriber.js +12 -7
  52. package/core/utils/LocationHandler.js +9 -3
  53. package/core/utils/PublisherProxy.d.ts +30 -4
  54. package/core/utils/PublisherProxy.js +218 -7
  55. package/core/utils/api.d.ts +3 -0
  56. package/core/utils/api.js +3 -1
  57. package/img/concorde-logo.svg +0 -0
  58. package/img/concorde.png +0 -0
  59. package/img/concorde_def.png +0 -0
  60. package/mixins.d.ts +5 -1
  61. package/package.json +5 -1
  62. package/svg/regular/plane.svg +0 -0
  63. package/svg/solid/plane.svg +0 -0
@@ -26,6 +26,5 @@ export type CoreJSType = string | number | boolean | null | {
26
26
  export type TypeAndRecordOfType<U> = U & Record<string | number, U>;
27
27
  export type PublisherContentType = CoreJSType & {
28
28
  __value?: CoreJSType;
29
- _key_?: number;
30
29
  };
31
30
  export type HTMLFormControl = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
@@ -45,7 +45,9 @@ let SonicDate = class SonicDate extends Subscriber(TemplatesContainer(LitElement
45
45
  }
46
46
  set wording_billet_periode_validite(value) {
47
47
  this._wording_billet_periode_validite = value;
48
- this.duAu = this.wording_billet_periode_validite.split("%s").map((str) => str.trim());
48
+ this.duAu = this.wording_billet_periode_validite
49
+ .split("%s")
50
+ .map((str) => str.trim());
49
51
  this.duAu.pop();
50
52
  this.requestUpdate();
51
53
  }
@@ -74,25 +76,31 @@ let SonicDate = class SonicDate extends Subscriber(TemplatesContainer(LitElement
74
76
  }
75
77
  const format = new Intl.DateTimeFormat(this.language || this.pageLanguage, options);
76
78
  parts = format.formatRangeToParts(start, end);
77
- //En mode design on cache les ","
78
- if (this.designMode) {
79
- parts.forEach((part) => (part.hidden = part.value.trim() == ","));
80
- }
81
79
  //on affiche du au uniquement si on a deux dates différentes
82
80
  if (!isSameDay) {
83
- const to = parts.find((part) => part.type == "literal" && part.source == "shared" && part.value.trim().length > 0);
81
+ const to = parts.find((part) => part.type == "literal" &&
82
+ part.source == "shared" &&
83
+ part.value.trim().length > 0);
84
84
  if (to) {
85
85
  to.value = " " + this.duAu[1] + " ";
86
86
  to.type = "to";
87
87
  }
88
88
  if (!this.designMode)
89
- parts.unshift({ type: "from", value: this.duAu[0] + " ", source: "shared" });
89
+ parts.unshift({
90
+ type: "from",
91
+ value: this.duAu[0] + " ",
92
+ source: "shared",
93
+ });
90
94
  }
91
95
  }
92
96
  else {
93
97
  const format = new Intl.DateTimeFormat(this.language || this.pageLanguage, options);
94
98
  parts = format.formatToParts(start);
95
99
  }
100
+ //En mode design on cache les ","
101
+ if (this.designMode) {
102
+ parts.forEach((part) => (part.hidden = part.value.trim() == ","));
103
+ }
96
104
  parts[0].value = Format.ucFirst(parts[0].value);
97
105
  return parts.filter((p) => p.hidden !== true);
98
106
  }
@@ -19,7 +19,8 @@ declare const Fetch_base: {
19
19
  onInvalidate?: (() => void) | undefined;
20
20
  disconnectedCallback(): void;
21
21
  connectedCallback(): void;
22
- firstUpdated(): void;
22
+ lazyLoadSpan?: HTMLSpanElement | undefined;
23
+ handleLazyLoad(): void;
23
24
  onIntersection(entries: IntersectionObserverEntry[]): void;
24
25
  propertyMap: object;
25
26
  isConnected: boolean;
@@ -45,6 +46,7 @@ declare const Fetch_base: {
45
46
  requestUpdate(): void;
46
47
  getAttribute(name: string): string;
47
48
  hasAttribute(attributeName: string): boolean;
49
+ getBoundingClientRect(): DOMRect;
48
50
  };
49
51
  } & (new (...args: any[]) => import("@supersoniks/concorde/core/mixins/Subscriber").SubscriberInterface<import("../../../_types/types").CoreJSType>) & typeof LitElement;
50
52
  /**
@@ -5,6 +5,38 @@ import "@supersoniks/concorde/core/components/functional/subscriber/subscriber";
5
5
  import { DirectiveResult } from "lit/directive";
6
6
  import { TemplateContentDirective } from "lit/directives/template-content.js";
7
7
  import { TemplateResult } from "lit";
8
+ /**
9
+ * ### List boucle sur sa propriété "props" et crée des éléments a partir des données en bouclant également sur ses templates.
10
+ *
11
+ * Extends mixins : Fetcher, [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page)
12
+ *
13
+ * * Si le composant possède un attribut *fetch*, il charge un contenu via un appel d'api web.<br>
14
+ * Voir [fetcher](./?path=/docs/core-components-functional-fetch--basic) pour la configuration des autres attributs.
15
+ * * Chaque élément créé est englobé dans un objet [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page).<br>
16
+ * Un dataProvider y est associé a l'adresse suivante *dataProvider-de-la-liste$/*index-de-la-ligne-courante*
17
+ * Les données de la ligne sont donc disponible pour les élements internes (subscribers, data-binding)
18
+ * * Lors du chargement un objet loader inline est affiché.
19
+ * * Si le résultat de la requête est un objet, il est imbriqué dans un tableau pour garantir le fonctionnement.<br>
20
+ * 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.
21
+ * * La propriété _metadata_ est ajoutés à la donnée de chaque item. Elle contient les informations suivantes :
22
+ * * key : l'index de l'item dans la liste
23
+ * * even : true si l'index est pair
24
+ * * odd : true si l'index est impair
25
+ * * onlyChild : true si la liste ne contient qu'un seul item
26
+ * * firstChild : true si l'item est le premier de la liste
27
+ * * lastChild : true si l'item est le dernier de la liste
28
+ * * Si la liste ne contient aucun item, le template "no-item" est utilisé si il est défini.
29
+ * * On peut appler la methode invalidate() sur son publishe pour declencher le rechargement des données
30
+ * *
31
+ */
32
+ export type ListItemMetadata = {
33
+ key?: string;
34
+ even?: boolean;
35
+ odd?: boolean;
36
+ onlyChild?: boolean;
37
+ firstChild?: boolean;
38
+ lastChild?: boolean;
39
+ };
8
40
  declare const List_base: {
9
41
  new (...args: any[]): {
10
42
  api: import("../../../utils/api").default | null;
@@ -24,7 +56,8 @@ declare const List_base: {
24
56
  onInvalidate?: (() => void) | undefined;
25
57
  disconnectedCallback(): void;
26
58
  connectedCallback(): void;
27
- firstUpdated(): void;
59
+ lazyLoadSpan?: HTMLSpanElement | undefined;
60
+ handleLazyLoad(): void;
28
61
  onIntersection(entries: IntersectionObserverEntry[]): void;
29
62
  propertyMap: object;
30
63
  isConnected: boolean;
@@ -50,25 +83,9 @@ declare const List_base: {
50
83
  requestUpdate(): void;
51
84
  getAttribute(name: string): string;
52
85
  hasAttribute(attributeName: string): boolean;
86
+ getBoundingClientRect(): DOMRect;
53
87
  };
54
88
  } & (new (...args: any[]) => import("@supersoniks/concorde/core/mixins/Subscriber").SubscriberInterface<import("../../../_types/types").CoreJSType>) & (new (...args: any[]) => import("@supersoniks/concorde/core/mixins/TemplatesContainer").TemplatesContainerInterface) & typeof LitElement;
55
- /**
56
- * ### List boucle sur sa propriété "props" et crée des éléments a partir des données en bouclant également sur ses templates.
57
- *
58
- * Extends mixins : Fetcher, [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page)
59
- *
60
- * * Si le composant possède un attribut *fetch*, il charge un contenu via un appel d'api web.<br>
61
- * Voir [fetcher](./?path=/docs/core-components-functional-fetch--basic) pour la configuration des autres attributs.
62
- * * Chaque élément créé est englobé dans un objet [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page).<br>
63
- * Un dataProvider y est associé a l'adresse suivante *dataProvider-de-la-liste$/*index-de-la-ligne-courante*
64
- * Les données de la ligne sont donc disponible pour les élements internes (subscribers, data-binding)
65
- * * Lors du chargement un objet loader inline est affiché.
66
- * * Si le résultat de la requête est un objet, il est imbriqué dans un tableau pour garantir le fonctionnement.<br>
67
- * 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.
68
- * * 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.
69
- * * On peut appler la methode invalidate() sur son publishe pour declencher le rechargement des données
70
- * *
71
- */
72
89
  export declare class List extends List_base {
73
90
  itemPropertyMap?: object;
74
91
  /**
@@ -81,11 +98,11 @@ export declare class List extends List_base {
81
98
  */
82
99
  idKey: string;
83
100
  connectedCallback(): void;
101
+ disconnectedCallback(): void;
84
102
  renderLoadingState(): DirectiveResult<typeof TemplateContentDirective> | TemplateResult;
85
103
  renderNoResultState(): TemplateResult<1>;
86
104
  formatProps(): (import("../../../_types/types").CoreJSType[] & {
87
105
  __value?: import("../../../_types/types").CoreJSType | undefined;
88
- _key_?: number | undefined;
89
106
  } & {
90
107
  _sonic_http_response_?: Response | undefined;
91
108
  text?: string | undefined;
@@ -14,23 +14,6 @@ import "@supersoniks/concorde/core/components/functional/subscriber/subscriber";
14
14
  import Objects from "@supersoniks/concorde/core/utils/Objects";
15
15
  import TemplatesContainer from "@supersoniks/concorde/core/mixins/TemplatesContainer";
16
16
  const tagName = "sonic-list";
17
- /**
18
- * ### List boucle sur sa propriété "props" et crée des éléments a partir des données en bouclant également sur ses templates.
19
- *
20
- * Extends mixins : Fetcher, [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page)
21
- *
22
- * * Si le composant possède un attribut *fetch*, il charge un contenu via un appel d'api web.<br>
23
- * Voir [fetcher](./?path=/docs/core-components-functional-fetch--basic) pour la configuration des autres attributs.
24
- * * Chaque élément créé est englobé dans un objet [Subscriber](./?path=/docs/miscallenous-🔔-subscriber--page).<br>
25
- * Un dataProvider y est associé a l'adresse suivante *dataProvider-de-la-liste$/*index-de-la-ligne-courante*
26
- * Les données de la ligne sont donc disponible pour les élements internes (subscribers, data-binding)
27
- * * Lors du chargement un objet loader inline est affiché.
28
- * * Si le résultat de la requête est un objet, il est imbriqué dans un tableau pour garantir le fonctionnement.<br>
29
- * 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.
30
- * * 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.
31
- * * On peut appler la methode invalidate() sur son publishe pour declencher le rechargement des données
32
- * *
33
- */
34
17
  let List = class List extends Fetcher(Subscriber(TemplatesContainer(LitElement))) {
35
18
  constructor() {
36
19
  super(...arguments);
@@ -53,6 +36,9 @@ let List = class List extends Fetcher(Subscriber(TemplatesContainer(LitElement))
53
36
  this.isLoading = true;
54
37
  super.connectedCallback();
55
38
  }
39
+ disconnectedCallback() {
40
+ super.disconnectedCallback();
41
+ }
56
42
  renderLoadingState() {
57
43
  return this.templateParts["skeleton"]
58
44
  ? templateContent(this.templateParts["skeleton"])
@@ -150,13 +136,19 @@ let List = class List extends Fetcher(Subscriber(TemplatesContainer(LitElement))
150
136
  }
151
137
  if (key == "_sonic_http_response_")
152
138
  return nothing;
153
- ;
154
139
  if (typeof key != "string" && typeof key != "number")
155
140
  return nothing;
156
- const pub = this.publisher[key];
157
- pub._key_ = key + "";
141
+ const isLastChild = index >= length - 1;
142
+ const indexMod2 = index % 2;
143
+ const childPublisher = this.publisher[key];
144
+ /**
145
+ * Ajout de metatdonnées au publisher de l'enfant
146
+ */
147
+ //La prop key est gardée pour le moment pour compatibilité
148
+ //TODO : supprimer la prop key cquand c'est ok côté covoit.
149
+ childPublisher._key_ = key + "";
150
+ childPublisher._metadata_ = Object.assign(Object.assign({}, childPublisher._metadata_.get()), { key: key, even: indexMod2 == 0, odd: indexMod2 == 1, onlyChild: length == 1, firstChild: index == 0, lastChild: isLastChild });
158
151
  counter++;
159
- const isNotLast = index < length - 1;
160
152
  if (templatePart)
161
153
  counter = -1;
162
154
  return (item &&
@@ -164,7 +156,7 @@ let List = class List extends Fetcher(Subscriber(TemplatesContainer(LitElement))
164
156
  <sonic-subscriber
165
157
  ?debug=${this.defferedDebug === true}
166
158
  .bindPublisher=${function () {
167
- return pub;
159
+ return childPublisher;
168
160
  }}
169
161
  .propertyMap?=${this.itemPropertyMap}
170
162
  dataProvider="${this.dataProvider}/list-item/${key}"
@@ -173,7 +165,7 @@ let List = class List extends Fetcher(Subscriber(TemplatesContainer(LitElement))
173
165
  ? templateContent(templatePart)
174
166
  : templateContent(this.templateList[counter % templateCount])}
175
167
  </sonic-subscriber>
176
- ${separator && isNotLast ? templateContent(separator) : nothing}
168
+ ${separator && !isLastChild ? templateContent(separator) : nothing}
177
169
  `);
178
170
  })}
179
171
  `;
@@ -27,19 +27,24 @@ export default class Queue extends Queue_base {
27
27
  /**
28
28
  * Durée cible en ms d'une requête pour afficher 1 lot.
29
29
  */
30
+ cache: RequestCache;
30
31
  targetRequestDuration: number;
31
32
  limit: number;
33
+ lazyBoundsRatio: number;
32
34
  offset: number;
33
35
  resultCount: number;
36
+ noLazyload: boolean;
34
37
  filteredFields: string;
35
38
  disconnectedCallback(): void;
36
39
  static instanceCounter: number;
37
- connectedCallback(): void;
40
+ localStorage: string;
41
+ connectedCallback(): Promise<void>;
38
42
  filterPublisher: PublisherProxy | null;
39
43
  configFilter(): void;
40
44
  filterTimeoutId?: ReturnType<typeof setTimeout>;
41
45
  searchHash: string;
42
46
  requestId: number;
47
+ isFirstRequest: boolean;
43
48
  updateFilteredContent(): void;
44
49
  /**
45
50
  * Cette expression est utilisée comme modèle par le composant Queue pour renseigngner le dataProvider de la [liste](./?path=/docs/core-components-functional-list-list--basic) créée.
@@ -4,11 +4,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
8
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9
+ return new (P || (P = Promise))(function (resolve, reject) {
10
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
11
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
12
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
14
+ });
15
+ };
7
16
  var Queue_1;
8
17
  import { html, LitElement, nothing } from "lit";
9
18
  import { customElement, property } from "lit/decorators.js";
10
19
  import Subscriber from "@supersoniks/concorde/core/mixins/Subscriber";
11
- import { repeat } from "lit/directives/repeat.js";
20
+ import { map } from "lit/directives/map.js";
12
21
  import { PublisherManager } from "@supersoniks/concorde/core/utils/PublisherProxy";
13
22
  import "@supersoniks/concorde/core/components/functional/list/list";
14
23
  import { HTML } from "@supersoniks/concorde/utils";
@@ -31,18 +40,23 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
31
40
  /**
32
41
  * Durée cible en ms d'une requête pour afficher 1 lot.
33
42
  */
43
+ this.cache = "default";
34
44
  this.targetRequestDuration = 500;
35
45
  /*
36
46
  * Quantité d'éléments devant être chargés dans le premier lot.
37
47
  * Cette valeur est mise à jour ensuite par Queue pour chauq lot pour se rapprocher tanque possible de *targetRequestDuration*
38
48
  */
39
49
  this.limit = 5;
50
+ this.lazyBoundsRatio = 1;
40
51
  this.offset = 0;
41
52
  this.resultCount = 0;
53
+ this.noLazyload = false;
42
54
  this.filteredFields = "";
55
+ this.localStorage = "disabled";
43
56
  this.filterPublisher = null;
44
57
  this.searchHash = "";
45
58
  this.requestId = 0;
59
+ this.isFirstRequest = true;
46
60
  /**
47
61
  * Cette expression est utilisée comme modèle par le composant Queue pour renseigngner le dataProvider de la [liste](./?path=/docs/core-components-functional-list-list--basic) créée.
48
62
  * * l'expression *$offset* est alors remplacée par le numéro de l'élément à partir duquel démarrer
@@ -63,33 +77,40 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
63
77
  return;
64
78
  }
65
79
  connectedCallback() {
66
- this.noShadowDom = "";
67
- this.defferedDebug = this.hasAttribute("debug") || null;
68
- /**Compat avec states et routing **/
69
- if (!this.dataProviderExpression) {
70
- this.dataProviderExpression = HTML.getAncestorAttributeValue(this.parentElement, "dataProvider") || "";
71
- }
72
- if (!this.dataProvider)
73
- this.dataProvider = "sonic-queue-" + Queue_1.instanceCounter++;
74
- this.configFilter();
75
- super.connectedCallback();
76
- this.key = this.getAttribute("key");
77
- if (!this.templates)
78
- this.templates = Array.from(this.querySelectorAll("template"));
79
- this.lastRequestTime = new Date().getTime();
80
- const func = window.requestAnimationFrame;
81
- func(() => this.next());
80
+ const _super = Object.create(null, {
81
+ connectedCallback: { get: () => super.connectedCallback }
82
+ });
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ this.localStorage = this.getAttribute("localStorage") || this.localStorage;
85
+ this.removeAttribute("localStorage");
86
+ this.noShadowDom = "";
87
+ this.defferedDebug = this.hasAttribute("debug") || null;
88
+ /**Compat avec states et routing **/
89
+ if (!this.dataProvider)
90
+ this.dataProvider =
91
+ this.dataProviderExpression ||
92
+ "sonic-queue-" + Queue_1.instanceCounter++ + "-" + Math.random().toString(36).substring(7);
93
+ if (!this.dataProviderExpression) {
94
+ this.dataProviderExpression = HTML.getAncestorAttributeValue(this.parentElement, "dataProvider") || "";
95
+ }
96
+ _super.connectedCallback.call(this);
97
+ this.key = this.getAttribute("key");
98
+ if (!this.templates)
99
+ this.templates = Array.from(this.querySelectorAll("template"));
100
+ this.lastRequestTime = new Date().getTime();
101
+ yield PublisherManager.getInstance().isLocalStrorageReady;
102
+ this.configFilter();
103
+ });
82
104
  }
83
105
  configFilter() {
84
106
  var _a;
85
107
  const dataFilterProvider = this.getAncestorAttributeValue("dataFilterProvider");
86
- if (!dataFilterProvider)
108
+ if (!dataFilterProvider) {
109
+ this.next();
87
110
  return;
111
+ }
88
112
  this.filterPublisher = PublisherManager.getInstance().get(dataFilterProvider);
89
113
  (_a = this.filterPublisher) === null || _a === void 0 ? void 0 : _a.onInternalMutation(() => {
90
- var _a;
91
- if (Object.keys((_a = this.filterPublisher) === null || _a === void 0 ? void 0 : _a.get()).length == 0)
92
- return;
93
114
  this.updateFilteredContent();
94
115
  });
95
116
  }
@@ -113,7 +134,7 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
113
134
  searchParams.set(f, filterData[f].toString());
114
135
  }
115
136
  const searchHash = searchParams.toString();
116
- if (searchHash == this.searchHash)
137
+ if (searchHash == this.searchHash && !this.isFirstRequest)
117
138
  return;
118
139
  this.searchHash = searchHash;
119
140
  /**
@@ -124,20 +145,22 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
124
145
  }
125
146
  this.listDataProviders = [];
126
147
  clearTimeout(this.filterTimeoutId);
127
- this.filterTimeoutId = setTimeout(() => {
148
+ this.filterTimeoutId = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
128
149
  const count = this.resultCount;
129
150
  this.props = null;
130
151
  //On garde le décompte au cas ou il n'y aurait pas rechargement
131
- this.resultCount = count;
132
152
  this.requestId++;
133
- this.next();
134
- }, 250);
153
+ this.resultCount = count;
154
+ yield PublisherManager.getInstance().isLocalStrorageReady;
155
+ window.requestAnimationFrame(() => this.next());
156
+ }), this.isFirstRequest ? 0 : 400);
157
+ this.isFirstRequest = false;
135
158
  }
136
159
  resetDuration() {
137
160
  this.lastRequestTime = new Date().getTime();
138
161
  }
139
162
  next(e) {
140
- var _a, _b;
163
+ var _a;
141
164
  let offset = this.offset;
142
165
  const newTime = new Date().getTime();
143
166
  const requestDuration = newTime - this.lastRequestTime;
@@ -150,7 +173,7 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
150
173
  }
151
174
  this.nextHadEvent = !!e;
152
175
  if (e) {
153
- if (e.detail.requestId != this.requestId)
176
+ if (e.detail.requestId < this.requestId)
154
177
  return;
155
178
  this.resultCount += e.detail.props.length;
156
179
  if (!e.detail.isFirstLoad || !e.detail.props.length || this.dataProviderExpression.indexOf("$offset") == -1) {
@@ -168,7 +191,7 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
168
191
  const item = props[props.length - 1];
169
192
  offset = parseInt(item.offset.toString()) + parseInt(item.limit.toString());
170
193
  }
171
- if (requestDuration > 0 && e)
194
+ if (requestDuration > 0 && e && !this.localStorage)
172
195
  this.limit = Math.round((this.limit / requestDuration) * this.targetRequestDuration);
173
196
  if (this.limit < 1)
174
197
  this.limit = 1;
@@ -189,7 +212,7 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
189
212
  this.searchHash = searchParams.toString();
190
213
  dataProvider = endpoint + "?" + searchParams.toString();
191
214
  this.listDataProviders.push(dataProvider);
192
- this.currentScrollPosition = (_b = document.scrollingElement) === null || _b === void 0 ? void 0 : _b.scrollTop;
215
+ // this.currentScrollPosition = document.scrollingElement?.scrollTop;
193
216
  const newProps = [
194
217
  ...this.props,
195
218
  {
@@ -204,36 +227,42 @@ let Queue = Queue_1 = class Queue extends Subscriber(LitElement, {}) {
204
227
  this.lastRequestTime = new Date().getTime();
205
228
  }
206
229
  render() {
207
- if (this.currentScrollPosition) {
208
- window.requestAnimationFrame(() => {
209
- if (document.scrollingElement && this.currentScrollPosition != undefined)
210
- document.scrollingElement.scrollTop = this.currentScrollPosition;
211
- this.currentScrollPosition = undefined;
212
- });
213
- }
230
+ /**
231
+ * supression du retablisment de la scroll pos.
232
+ **/
233
+ // if (this.currentScrollPosition) {
234
+ // window.requestAnimationFrame(() => {
235
+ // if (document.scrollingElement && this.currentScrollPosition != undefined)
236
+ // document.scrollingElement.scrollTop = this.currentScrollPosition;
237
+ // this.currentScrollPosition = undefined;
238
+ // });
239
+ // }
214
240
  if (!Array.isArray(this.props))
215
241
  return nothing;
216
242
  return html `
217
- ${repeat(this.props, (item) => item.id, (item, index) => {
243
+ ${map(this.props, (item, index) => {
218
244
  var _a;
219
245
  const templates = index == 0 ? this.templates : (_a = this.templates) === null || _a === void 0 ? void 0 : _a.filter((elt) => elt.getAttribute("data-value") != "no-item");
220
246
  return html `
221
- <sonic-list
222
- fetch
223
- displayContents
224
- lazyload
225
- requestId=${this.requestId}
226
- .itemPropertyMap=${this.itemPropertyMap}
227
- ?debug=${this.defferedDebug === true}
228
- @load=${this.next}
229
- key=${this.key}
230
- @loading=${this.resetDuration}
231
- dataProvider="${item.dataProvider}"
232
- idKey=${this.idKey}
233
- .templates=${templates}
234
- >
235
- </sonic-list>
236
- `;
247
+ <sonic-list
248
+ fetch
249
+ cache=${this.cache}
250
+ displayContents
251
+ lazyBoundsRatio=${this.lazyBoundsRatio}
252
+ ?lazyload=${!this.noLazyload}
253
+ localStorage=${this.localStorage}
254
+ requestId=${this.requestId}
255
+ .itemPropertyMap=${this.itemPropertyMap}
256
+ ?debug=${this.defferedDebug === true}
257
+ @load=${this.next}
258
+ key=${this.key}
259
+ @loading=${this.resetDuration}
260
+ dataProvider="${item.dataProvider}"
261
+ idKey=${this.idKey}
262
+ .templates=${templates}
263
+ >
264
+ </sonic-list>
265
+ `;
237
266
  })}
238
267
  `;
239
268
  }
@@ -245,18 +274,27 @@ __decorate([
245
274
  __decorate([
246
275
  property({ type: Object })
247
276
  ], Queue.prototype, "itemPropertyMap", void 0);
277
+ __decorate([
278
+ property()
279
+ ], Queue.prototype, "cache", void 0);
248
280
  __decorate([
249
281
  property()
250
282
  ], Queue.prototype, "targetRequestDuration", void 0);
251
283
  __decorate([
252
284
  property()
253
285
  ], Queue.prototype, "limit", void 0);
286
+ __decorate([
287
+ property()
288
+ ], Queue.prototype, "lazyBoundsRatio", void 0);
254
289
  __decorate([
255
290
  property()
256
291
  ], Queue.prototype, "offset", void 0);
257
292
  __decorate([
258
293
  property()
259
294
  ], Queue.prototype, "resultCount", void 0);
295
+ __decorate([
296
+ property({ type: Boolean })
297
+ ], Queue.prototype, "noLazyload", void 0);
260
298
  __decorate([
261
299
  property()
262
300
  ], Queue.prototype, "filteredFields", void 0);
@@ -19,7 +19,8 @@ declare const SonicSDUI_base: {
19
19
  onInvalidate?: (() => void) | undefined;
20
20
  disconnectedCallback(): void;
21
21
  connectedCallback(): void;
22
- firstUpdated(): void;
22
+ lazyLoadSpan?: HTMLSpanElement | undefined;
23
+ handleLazyLoad(): void;
23
24
  onIntersection(entries: IntersectionObserverEntry[]): void;
24
25
  propertyMap: object;
25
26
  isConnected: boolean;
@@ -45,6 +46,7 @@ declare const SonicSDUI_base: {
45
46
  requestUpdate(): void;
46
47
  getAttribute(name: string): string;
47
48
  hasAttribute(attributeName: string): boolean;
49
+ getBoundingClientRect(): DOMRect;
48
50
  };
49
51
  } & (new (...args: any[]) => import("../../../mixins/Subscriber").SubscriberInterface<import("../../../_types/types").CoreJSType>) & typeof LitElement;
50
52
  /**
@@ -59,9 +61,6 @@ declare const SonicSDUI_base: {
59
61
  * Son format est décrit par le type SDUITransformDescription
60
62
  *
61
63
  * * Si le résultat de la requête est un objet, il est imbriqué dans un tableau pour garantir le fonctionnement.<br>
62
- * 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.
63
- * * 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.
64
- * * On peut appler la methode invalidate() sur son publishe pour declencher le rechargement des données
65
64
  * *
66
65
  */
67
66
  export declare class SonicSDUI extends SonicSDUI_base {
@@ -32,9 +32,6 @@ const tagName = "sonic-sdui"; // For Astro.build
32
32
  * Son format est décrit par le type SDUITransformDescription
33
33
  *
34
34
  * * Si le résultat de la requête est un objet, il est imbriqué dans un tableau pour garantir le fonctionnement.<br>
35
- * 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.
36
- * * 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.
37
- * * On peut appler la methode invalidate() sur son publishe pour declencher le rechargement des données
38
35
  * *
39
36
  */
40
37
  let SonicSDUI = class SonicSDUI extends Fetcher(Subscriber(LitElement)) {
@@ -1,8 +1,8 @@
1
1
  import { css } from "lit";
2
2
  export const typeColor = css `
3
- :host{
4
- --sc-color:inherit;
5
- color:var(--sc-color);
3
+ :host {
4
+ --sc-color: inherit;
5
+ color: var(--sc-color);
6
6
  }
7
7
 
8
8
  :host([type="primary"]) {
@@ -21,16 +21,16 @@ export const typeColor = css `
21
21
  --sc-color: var(--sc-success);
22
22
  }
23
23
 
24
- .inherit-color{
25
- color:var(--sc-color);
24
+ .inherit-color {
25
+ color: var(--sc-color);
26
26
  }
27
27
  `;
28
28
  export const typesBg = css `
29
- :host{
30
- --sc-color:inherit;
31
- --sc-bg:inherit;
32
- color:var(--sc-color);
33
- background:var(--sc-bg);
29
+ :host {
30
+ --sc-color: inherit;
31
+ --sc-bg: inherit;
32
+ color: var(--sc-color);
33
+ background: var(--sc-bg);
34
34
  }
35
35
 
36
36
  :host([type="primary"]) {
@@ -54,7 +54,7 @@ export const typesBg = css `
54
54
  --sc-bg: var(--sc-success);
55
55
  }
56
56
 
57
- .inherit-bg{
58
- color:inherit;
57
+ .inherit-bg {
58
+ color: inherit;
59
59
  }
60
60
  `;
@@ -9,12 +9,15 @@ export declare class Alert extends LitElement {
9
9
  * Titre du message d'erreur
10
10
  */
11
11
  label: string;
12
+ noIcon: boolean;
12
13
  /**
13
14
  * Peut être renseigné dans le slot pour créer des messages plus complexes
14
15
  */
15
16
  text: string;
16
17
  size?: "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
18
+ dismissible: boolean;
17
19
  background: boolean;
18
20
  status: "default" | "error" | "warning" | "primary" | "info";
19
21
  render(): import("lit-html").TemplateResult<1>;
22
+ close(): void;
20
23
  }