@supersoniks/concorde 3.1.76 → 3.1.78

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 (216) hide show
  1. package/build-infos.json +1 -1
  2. package/concorde-core.bundle.js +2 -2
  3. package/concorde-core.es.js +2 -2
  4. package/dist/concorde-core.bundle.js +2 -2
  5. package/dist/concorde-core.es.js +2 -2
  6. package/docs/assets/index-D9bBwsCn.js +4537 -0
  7. package/docs/assets/index-DCRPZO3x.css +1 -0
  8. package/docs/css/docs.css +0 -0
  9. package/docs/fonts/ClashGrotesk-Bold.eot +0 -0
  10. package/docs/fonts/ClashGrotesk-Bold.ttf +0 -0
  11. package/docs/fonts/ClashGrotesk-Bold.woff +0 -0
  12. package/docs/fonts/ClashGrotesk-Bold.woff2 +0 -0
  13. package/docs/fonts/ClashGrotesk-Extralight.eot +0 -0
  14. package/docs/fonts/ClashGrotesk-Extralight.ttf +0 -0
  15. package/docs/fonts/ClashGrotesk-Extralight.woff +0 -0
  16. package/docs/fonts/ClashGrotesk-Extralight.woff2 +0 -0
  17. package/docs/fonts/ClashGrotesk-Light.eot +0 -0
  18. package/docs/fonts/ClashGrotesk-Light.ttf +0 -0
  19. package/docs/fonts/ClashGrotesk-Light.woff +0 -0
  20. package/docs/fonts/ClashGrotesk-Light.woff2 +0 -0
  21. package/docs/fonts/ClashGrotesk-Medium.eot +0 -0
  22. package/docs/fonts/ClashGrotesk-Medium.ttf +0 -0
  23. package/docs/fonts/ClashGrotesk-Medium.woff +0 -0
  24. package/docs/fonts/ClashGrotesk-Medium.woff2 +0 -0
  25. package/docs/fonts/ClashGrotesk-Regular.eot +0 -0
  26. package/docs/fonts/ClashGrotesk-Regular.ttf +0 -0
  27. package/docs/fonts/ClashGrotesk-Regular.woff +0 -0
  28. package/docs/fonts/ClashGrotesk-Regular.woff2 +0 -0
  29. package/docs/fonts/ClashGrotesk-Semibold.eot +0 -0
  30. package/docs/fonts/ClashGrotesk-Semibold.ttf +0 -0
  31. package/docs/fonts/ClashGrotesk-Semibold.woff +0 -0
  32. package/docs/fonts/ClashGrotesk-Semibold.woff2 +0 -0
  33. package/docs/fonts/ClashGrotesk-Variable.eot +0 -0
  34. package/docs/fonts/ClashGrotesk-Variable.ttf +0 -0
  35. package/docs/fonts/ClashGrotesk-Variable.woff +0 -0
  36. package/docs/fonts/ClashGrotesk-Variable.woff2 +0 -0
  37. package/docs/img/concorde-icon.svg +5 -0
  38. package/docs/img/concorde-logo.svg +1 -0
  39. package/docs/img/concorde.png +0 -0
  40. package/docs/img/concorde_def.png +0 -0
  41. package/docs/img/concorde_seuil.png.webp +0 -0
  42. package/docs/img/concorde_seuil_invert.png +0 -0
  43. package/docs/img/paul_metrand.jpg +0 -0
  44. package/docs/img/paul_metrand_xs.jpg +0 -0
  45. package/docs/index.html +93 -0
  46. package/docs/src/core/components/functional/date/date.md +290 -0
  47. package/docs/src/core/components/functional/fetch/fetch.md +117 -0
  48. package/docs/src/core/components/functional/if/if.md +16 -0
  49. package/docs/src/core/components/functional/list/list.md +199 -0
  50. package/docs/src/core/components/functional/mix/mix.md +41 -0
  51. package/docs/src/core/components/functional/queue/queue.md +87 -0
  52. package/docs/src/core/components/functional/router/router.md +108 -0
  53. package/docs/src/core/components/functional/sdui/default-library.json +108 -0
  54. package/docs/src/core/components/functional/sdui/example.json +99 -0
  55. package/docs/src/core/components/functional/sdui/sdui.md +356 -0
  56. package/docs/src/core/components/functional/states/states.md +87 -0
  57. package/docs/src/core/components/functional/submit/submit.md +83 -0
  58. package/docs/src/core/components/functional/subscriber/subscriber.md +91 -0
  59. package/docs/src/core/components/functional/value/value.md +35 -0
  60. package/docs/src/core/components/ui/alert/alert.md +121 -0
  61. package/docs/src/core/components/ui/alert-messages/alert-messages.md +0 -0
  62. package/docs/src/core/components/ui/badge/badge.md +127 -0
  63. package/docs/src/core/components/ui/button/button.md +182 -0
  64. package/docs/src/core/components/ui/captcha/captcha.md +12 -0
  65. package/docs/src/core/components/ui/card/card.md +97 -0
  66. package/docs/src/core/components/ui/divider/divider.md +35 -0
  67. package/docs/src/core/components/ui/form/checkbox/checkbox.md +94 -0
  68. package/docs/src/core/components/ui/form/fieldset/fieldset.md +129 -0
  69. package/docs/src/core/components/ui/form/form-actions/form-actions.md +77 -0
  70. package/docs/src/core/components/ui/form/form-layout/form-layout.md +44 -0
  71. package/docs/src/core/components/ui/form/input/input.md +167 -0
  72. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +130 -0
  73. package/docs/src/core/components/ui/form/radio/radio.md +84 -0
  74. package/docs/src/core/components/ui/form/select/select.md +97 -0
  75. package/docs/src/core/components/ui/form/switch/switch.md +84 -0
  76. package/docs/src/core/components/ui/form/textarea/textarea.md +65 -0
  77. package/docs/src/core/components/ui/group/group.md +75 -0
  78. package/docs/src/core/components/ui/icon/icon.md +125 -0
  79. package/docs/src/core/components/ui/icon/icons.json +1 -0
  80. package/docs/src/core/components/ui/image/image.md +107 -0
  81. package/docs/src/core/components/ui/link/link.md +43 -0
  82. package/docs/src/core/components/ui/loader/loader.md +67 -0
  83. package/docs/src/core/components/ui/menu/menu.md +288 -0
  84. package/docs/src/core/components/ui/modal/modal.md +123 -0
  85. package/docs/src/core/components/ui/pop/pop.md +79 -0
  86. package/docs/src/core/components/ui/progress/progress.md +63 -0
  87. package/docs/src/core/components/ui/table/table.md +455 -0
  88. package/docs/src/core/components/ui/tooltip/tooltip.md +82 -0
  89. package/docs/src/docs/_core-concept/overview.md +57 -0
  90. package/docs/src/docs/_core-concept/subscriber.md +76 -0
  91. package/docs/src/docs/_getting-started/concorde-outside.md +143 -0
  92. package/docs/src/docs/_getting-started/create-a-component.md +137 -0
  93. package/docs/src/docs/_getting-started/my-first-subscriber.md +174 -0
  94. package/docs/src/docs/_getting-started/pubsub.md +150 -0
  95. package/docs/src/docs/_getting-started/start.md +39 -0
  96. package/docs/src/docs/_getting-started/theming.md +91 -0
  97. package/docs/src/docs/search/docs-search.json +3902 -0
  98. package/docs/src/tag-list.json +1 -0
  99. package/docs/src/tsconfig-model.json +23 -0
  100. package/docs/src/tsconfig.json +835 -0
  101. package/docs/svg/regular/plane.svg +1 -0
  102. package/docs/svg/solid/plane.svg +1 -0
  103. package/index.html +0 -0
  104. package/package.json +1 -1
  105. package/php/get-challenge.php +34 -0
  106. package/php/some-service.php +42 -0
  107. package/scripts/create-search.js +0 -0
  108. package/scripts/generate-routes.js +0 -0
  109. package/src/core/_types/types.ts +0 -0
  110. package/src/core/components/functional/date/date.ts +0 -0
  111. package/src/core/components/functional/functional.ts +0 -0
  112. package/src/core/components/functional/if/if.md +0 -0
  113. package/src/core/components/functional/if/if.test.ts +0 -0
  114. package/src/core/components/functional/list/list.demo.ts +0 -0
  115. package/src/core/components/functional/list/list.spec.ts +0 -0
  116. package/src/core/components/functional/queue/queue.demo.ts +0 -0
  117. package/src/core/components/functional/queue/queue.ts +1 -1
  118. package/src/core/components/functional/router/router.demo.ts +0 -0
  119. package/src/core/components/functional/router/router.md +0 -0
  120. package/src/core/components/functional/router/router.spec.ts +0 -0
  121. package/src/core/components/functional/router/router.ts +0 -0
  122. package/src/core/components/functional/sonic-scope/sonic-scope.ts +0 -0
  123. package/src/core/components/functional/states/states.demo.ts +0 -0
  124. package/src/core/components/functional/states/states.md +0 -0
  125. package/src/core/components/functional/states/states.spec.ts +0 -0
  126. package/src/core/components/functional/states/states.ts +0 -0
  127. package/src/core/components/functional/translation/translation.ts +0 -0
  128. package/src/core/components/ui/_css/scroll.ts +0 -0
  129. package/src/core/components/ui/_css/shadow.ts +0 -0
  130. package/src/core/components/ui/_css/size.ts +0 -0
  131. package/src/core/components/ui/_css/type.ts +0 -0
  132. package/src/core/components/ui/alert/alert.md +0 -0
  133. package/src/core/components/ui/alert/alert.ts +0 -0
  134. package/src/core/components/ui/alert-messages/alert-messages.md +0 -0
  135. package/src/core/components/ui/badge/badge.md +0 -0
  136. package/src/core/components/ui/badge/badge.ts +0 -0
  137. package/src/core/components/ui/button/button.md +0 -0
  138. package/src/core/components/ui/button/button.ts +0 -0
  139. package/src/core/components/ui/captcha/captcha.md +0 -0
  140. package/src/core/components/ui/card/card-footer.ts +0 -0
  141. package/src/core/components/ui/card/card-header-descripton.ts +0 -0
  142. package/src/core/components/ui/card/card-header.ts +0 -0
  143. package/src/core/components/ui/card/card-main.ts +0 -0
  144. package/src/core/components/ui/card/card.md +0 -0
  145. package/src/core/components/ui/card/card.ts +0 -0
  146. package/src/core/components/ui/divider/divider.ts +0 -0
  147. package/src/core/components/ui/form/css/form-control.ts +0 -0
  148. package/src/core/components/ui/form/fieldset/fieldset.ts +0 -0
  149. package/src/core/components/ui/form/fieldset/legend-description.ts +0 -0
  150. package/src/core/components/ui/form/fieldset/legend.ts +0 -0
  151. package/src/core/components/ui/form/form-layout/form-layout.md +0 -0
  152. package/src/core/components/ui/form/input/input.md +0 -0
  153. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.ts +0 -0
  154. package/src/core/components/ui/form/radio/radio.md +0 -0
  155. package/src/core/components/ui/form/radio/radio.ts +0 -0
  156. package/src/core/components/ui/form/select/select.md +0 -0
  157. package/src/core/components/ui/form/switch/switch.md +0 -0
  158. package/src/core/components/ui/form/switch/switch.ts +0 -0
  159. package/src/core/components/ui/icon/icon.ts +0 -0
  160. package/src/core/components/ui/icon/icons.ts +1 -1
  161. package/src/core/components/ui/image/image.md +0 -0
  162. package/src/core/components/ui/image/image.ts +0 -0
  163. package/src/core/components/ui/loader/loader.md +0 -0
  164. package/src/core/components/ui/loader/loader.ts +0 -0
  165. package/src/core/components/ui/loader/styles/fixed.ts +0 -0
  166. package/src/core/components/ui/loader/styles/inline.ts +0 -0
  167. package/src/core/components/ui/menu/menu.ts +0 -0
  168. package/src/core/components/ui/modal/modal-actions.ts +0 -0
  169. package/src/core/components/ui/modal/modal-subtitle.ts +0 -0
  170. package/src/core/components/ui/modal/modal-title.ts +0 -0
  171. package/src/core/components/ui/modal/modal.md +0 -0
  172. package/src/core/components/ui/modal/modal.ts +0 -0
  173. package/src/core/components/ui/progress/progress.ts +0 -0
  174. package/src/core/components/ui/table/table-tbody.ts +0 -0
  175. package/src/core/components/ui/table/table-th.ts +0 -0
  176. package/src/core/components/ui/table/table.ts +0 -0
  177. package/src/core/components/ui/theme/theme-collection/core-variables.ts +0 -0
  178. package/src/core/components/ui/theme/theme-collection/dark.ts +0 -0
  179. package/src/core/components/ui/theme/theme-collection/light.ts +0 -0
  180. package/src/core/components/ui/theme/theme.ts +0 -0
  181. package/src/core/components/ui/toast/toast-item.ts +0 -0
  182. package/src/core/components/ui/toast/toast.ts +0 -0
  183. package/src/core/components/ui/tooltip/tooltip.ts +0 -0
  184. package/src/core/components/ui/ui.ts +0 -0
  185. package/src/core/directives/DataProvider.ts +0 -0
  186. package/src/core/directives/Wording.ts +0 -0
  187. package/src/core/mixins/Fetcher.ts +0 -0
  188. package/src/core/mixins/Subscriber.ts +0 -0
  189. package/src/core/mixins/TemplatesContainer.ts +0 -0
  190. package/src/core/utils/LocationHandler.ts +0 -0
  191. package/src/core/utils/Objects.ts +0 -0
  192. package/src/core/utils/Utils.ts +0 -0
  193. package/src/core/utils/aesCrypto.ts +0 -0
  194. package/src/core/utils/api.ts +0 -0
  195. package/src/core/utils/route.spec.ts +0 -0
  196. package/src/core/utils/route.ts +0 -0
  197. package/src/docs/code.ts +0 -0
  198. package/src/docs/docs.ts +0 -0
  199. package/src/docs/header/header.ts +0 -0
  200. package/src/docs/layout.ts +0 -0
  201. package/src/docs/navigation/navigation.ts +0 -0
  202. package/src/docs/search/docs-search.json +0 -0
  203. package/src/docs/search/markdown-renderer.ts +0 -0
  204. package/src/docs/search/page.ts +0 -0
  205. package/src/docs/search/search.ts +0 -0
  206. package/src/docs/tailwind/css/tailwind.css +0 -0
  207. package/src/docs/tailwind/css.d.ts +0 -0
  208. package/src/index.ts +0 -0
  209. package/src/test-utils/TestUtils.ts +0 -0
  210. package/src/tsconfig-model.json +0 -0
  211. package/src/tsconfig.json +0 -0
  212. package/src/tsconfig.tsbuildinfo +0 -0
  213. package/tailwind.config.js +0 -0
  214. package/templates-test.html +0 -0
  215. package/vite/config.js +0 -0
  216. package/vite.config.mts +0 -0
@@ -0,0 +1,150 @@
1
+ # Sharing data
2
+
3
+ This section describes how we share data between graphical and non graphical components and classes.
4
+
5
+ Especialy, graphical components should not reference each other in order to **remain decoupled**.
6
+
7
+ Thats why we use **publish/subscribe** paradigm to addresse this issue.
8
+
9
+
10
+ ## The Publisher
11
+
12
+ ### Principle
13
+
14
+ * The **publisher** is a [JavaScript proxy](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Proxy) that contains some data.<br>**
15
+ Example of data : `{foo:{hello:["world"]}, bar:"baz"}`
16
+
17
+ * if a property of the **publisher** (dot syntax / array access), it returns another **publisher**.
18
+ Using the previous example `myPublisher.foo.hello` is also a publisher containing `["world"]`
19
+
20
+ * If the property doesn't exist at the time of the request, a publisher is created. its internal data is set to `null`.<br>
21
+ The value that can then be provided later.
22
+
23
+ * **Subscribers** can subscribe to the publisher's modifications and be updated in different ways (see : onAssign, onInternalMutation, startTemplateFilling).
24
+
25
+ * Data inside the publisher is updated by modifying the publisher itself, for example `myPublisher.foo.hello = ["Joey", "Smith"]`
26
+
27
+ * The publisher publishes modifications to any of its **Subscribers**.
28
+
29
+
30
+ ❇️ The order of data creation and subscription theoretically has no importance.
31
+
32
+ ### Methods
33
+
34
+ * **set (complete replacement):** Assign/modifies the internal value of the publisher.
35
+ <sonic-code language="javascript">
36
+ <template>
37
+ publisher.set({foo:{hello:["world"]}, bar:"baz"});
38
+ </template>
39
+ </sonic-code>
40
+ * **get:** Get the internal value of the publisher.
41
+ <sonic-code language="javascript">
42
+ <template>
43
+ publisher.get() //{foo:{hello:["world"]}, bar:"baz"};
44
+ </template>
45
+ </sonic-code>
46
+ * **onAssign/offAssign:** Subscribe/unsubscribe to value assignments (via `set`) of the publisher.
47
+ <sonic-code language="javascript">
48
+ <template>
49
+ publisher.a.b.onAssign(console.log);
50
+ //indirect
51
+ publisher.a = {b:"dramatic change"}; //log: "dramatic change"
52
+ //via set
53
+ publisher.a.b.set(["Hello"]) //log: ["Hello"]
54
+ </template>
55
+ </sonic-code>
56
+ * **onInternalMutation/offInternalMutation:** Listen to any internal mutation regardless of its depth level.
57
+ <sonic-code language="javascript">
58
+ <template>
59
+ function save(){
60
+ console.log("Something has changed, let's save");
61
+ }
62
+ publisher.onInternalMutation(save);
63
+ publisher.a.b[0] = "e";
64
+ </template>
65
+ </sonic-code>
66
+ * **startTemplateFilling/stopTemplateFilling:** Fill an object model, a principle used with the Subscriber mixin on which most Concorde components rely.
67
+ <sonic-code language="javascript">
68
+ <template>
69
+ const fillableTemplate = { title: "A title to be replaced"};
70
+ publisher.startTemplateFilling(fillableTemplate);
71
+ state.title = "Good morning";
72
+ publisher.stopTemplateFilling(fillableTemplate);
73
+ state.title = "Oops";
74
+ console.log(fillableTemplate);
75
+ </template>
76
+ </sonic-code>
77
+ * **invalidate:** Flag the data as invalid. Used by sonic-fetch and sonic-list to trigger data reloading.
78
+ <sonic-code language="javascript">
79
+ <template>
80
+ publisher.invalidate();
81
+ </template>
82
+ </sonic-code>
83
+ * **onInvalidate/offInvalidate:** Subscribe/unsubscribe to data invalidation of the publisher. Used by sonic-fetch and sonic-list to trigger data reloading.
84
+ <sonic-code language="javascript">
85
+ <template>
86
+ function reloadData(){
87
+ console.log("Reload data to inject it again into the publisher");
88
+ }
89
+ publisher.onInvalidate(reloadData);
90
+ </template>
91
+ </sonic-code>
92
+
93
+ ## DataProvider
94
+
95
+ Denotes the identifier of a publisher as referenced in the PublisherManager (see below).
96
+ Uses the dataProvider attribut in html tags to scop the content with some data.
97
+ see [Subscribers](#docs/_core-concept/subscriber.md/subscriber).
98
+
99
+
100
+ ## PublisherManager
101
+
102
+ The **PublisherManager** is a utility class to get publishers
103
+
104
+ It plays a central role in the components, especially through the "subscriber" mixin.<br>
105
+ Automatic data communication between components in concorde uses this principle in conjunction with Lit's reactive properties. <br>
106
+ Refer to the documentation for [Subscriber](#docs/_core-concept/subscriber.md/subscriber).
107
+
108
+ <sonic-code language="javascript">
109
+ <template>
110
+ import { PublisherManager } from "publisherproxy";
111
+ let dataProvider = "cart";
112
+ let publisher = PublisherManager.get(dataProvider);
113
+
114
+ </template>
115
+ </sonic-code>
116
+
117
+ It is declared on the `window` object to allow usage in a web page, so the equivalent one-liner would be:
118
+
119
+ <sonic-code language="javascript">
120
+ <template>
121
+ let dataProvider = "cart";
122
+ let publisher = SonicPublisherManager.get(dataProvider);
123
+
124
+ </template>
125
+ </sonic-code>
126
+
127
+
128
+ ## Basic Example
129
+
130
+ This example can be tested in a console when Concorde is loaded on the page (for example, in a ticketing system).
131
+ In a component, you will need to perform an `import` as explained earlier.
132
+
133
+ <sonic-code language="javascript">
134
+ <template>
135
+ // Anywhere, anytime
136
+ SonicPublisherManager.get("mySubject").title.onAssign(console.log)
137
+
138
+ </template>
139
+ </sonic-code>
140
+
141
+ <sonic-code language="javascript">
142
+ <template>
143
+ // Anywhere, anytime
144
+ let publisher = SonicPublisherManager.get("mySubject");
145
+ // ...
146
+ publisher.set({title: "A title"});
147
+ publisher.title.set("A second title");
148
+
149
+ </template>
150
+ </sonic-code>
@@ -0,0 +1,39 @@
1
+ # Introduction
2
+
3
+ ## What is Concorde ?
4
+
5
+ Based on **[lit.dev](https://lit.dev)**, Concorde is a collection of webcomponents made to build shared apps or websites.
6
+ Develop user interfaces without thinking about the implementation context, where everything is scoped, but preserving graphic consistency by setting the strict minimum of css variables.
7
+
8
+ ## Why and use case
9
+
10
+ In 2022, Supersoniks wanted to create a new version of his ticketing app, in production un nearly 100 websites. We needed shared components which could be implemented in mobile apps, modern websites, and also old ones made in php, without bundlers or whatever.
11
+ Instead of building a new app for each type of project, which would become impossible to maintain, we've decided to create one app, composed by a few webcomponents wich could easily be recomposed on any website.
12
+ Webcomponents appeared to be a the perfect solution to guarantee that compatibility with all past, present and futures environment, and lit seemed to be the best choice to build them.
13
+
14
+ ### Stack
15
+
16
+ * Lit
17
+ * Typescript
18
+ * Vite
19
+ * Tailwind, not in the core, but in the starter kit
20
+
21
+ ### Functionnal features and components
22
+
23
+ * Data management with Publisher / Subscriber pattern
24
+ * Form management
25
+ * Fetching data, lists, queue with lazyload
26
+ * Data binding
27
+ * Simple router, state component, ...
28
+ * And all ui component, with status variants to build an app with a consistent design
29
+
30
+
31
+ ## Start a new project easily
32
+
33
+ A new project with Vite, Typescript and Tailwind already configured and a simple example of a subscriber component :
34
+
35
+ <sonic-code language="bash">
36
+ <template>
37
+ npx @supersoniks/create-concorde-ts-starter "project_name"
38
+ </template>
39
+ </sonic-code>
@@ -0,0 +1,91 @@
1
+ # Adding styles
2
+
3
+ ## Normal Behavior
4
+
5
+ No style crosses the shadow root of a component, except for inheritable properties (which have the "inherit" property possible) and CSS variables.
6
+ Properties integrated via a "[slot](https://developer.mozilla.org/en/docs/Web/HTML/Element/slot)" remain stylizable in a conventional way.
7
+
8
+ - **During creation / from the inside:**
9
+ - We edit the [static "styles" property of the lit component](https://lit.dev/docs/components/styles/), which can also reference shared and dynamic styles.
10
+ These styles are scoped and do not impact the outside.
11
+ - We use CSS variables as the value of properties intended to be customized from the outside.
12
+ For each variable, we define a default value to have a simple but consistent base style.
13
+ - We only rewrite inheritable properties with hard values if they are truly specific to the component.
14
+ - The `<style>` tag as a direct child can be used as a last resort, especially if there is a need for particularly dynamic customization. Performance is reduced.
15
+ - **During use / from the outside:**
16
+ We define values for **inheritable CSS properties** (e.g., font-\_, color...) using tools like Tailwind.
17
+ We modify the value of **CSS variables** used by the component.
18
+
19
+ ## Choosing Style Presets via Reactive Properties:
20
+
21
+ The declaration of reactive properties is useful for selecting a particular configuration that mostly affects a set of properties.
22
+
23
+ For example, a `size` property (xs, sm, md, xl) will affect margins, font, line heights to align them with the corresponding CSS vars, which can be customized using the methods mentioned earlier if necessary.
24
+
25
+ It is recommended to use the `{reflect: true}` property for reactive properties that have an associated style on the `:host()`. For example: `:host([type='primary']){...}`
26
+
27
+ ☢️ **Caution:** Passing class names via reactive properties / HTML attributes of the component should be avoided as it can quickly lead to difficult-to-manage situations.
28
+
29
+ #### CSS "display" Property
30
+
31
+ By default, the display property is `inline`.
32
+ Therefore, be careful to define it according to the needs, as one might mistakenly expect it to be `block` as with a regular `<div>`.
33
+
34
+ ☢️ **Caution:** Defining the `display` property as `contents` may seem attractive at first, but:
35
+
36
+ - It almost always leads to the creation of wrappers to style the content (instead of using `:host`).
37
+ - It is no longer possible to directly add classes to the component or style it from the outside.
38
+ Ultimately, the amount of code to write increases significantly.
39
+
40
+ ## TAILWIND Functional Classes
41
+
42
+ [tailwind](https://tailwindcss.com/) has been integrated into Concorde and is available in scoped components (with Shadow DOM).
43
+ To use it, you need to import the following:
44
+
45
+ <sonic-code language="javascript">
46
+ <template>
47
+ import { tailwind } from "@supersoniks/concorde/la-billetterie/ui/theme/theme";
48
+ </template>
49
+ </sonic-code>
50
+
51
+ Then include the `tailwind` style in the static `styles` property of the component:
52
+
53
+ <sonic-code language="javascript">
54
+ <template>
55
+ static styles = [tailwind];
56
+ </template>
57
+ </sonic-code>
58
+
59
+ Finally, use it in the HTML within the render function:
60
+
61
+ <sonic-code language="html">
62
+ <template>
63
+ <p class="m-2">A paragraph with margin</p>
64
+ </template>
65
+ </sonic-code>
66
+
67
+ The colors from Concorde's theme are referenced in Tailwind's theme.
68
+
69
+ ## Operation without Shadow DOM
70
+
71
+ ### Usefulness
72
+
73
+ This operation is particularly useful when it comes to **adding behavior to a simple existing element**.
74
+ It may also become necessary to establish **compatibility with a traditional JS library**.
75
+
76
+ For example, with a text input:
77
+
78
+ - Trigger automatic data or filter update when typing text.
79
+ - Automatic formatting.
80
+ - Constraints that cannot be handled by native methods.
81
+
82
+ ### Consequences
83
+
84
+ If there is no shadow DOM (see the **noShadowDom** property of **Subscriber**):
85
+
86
+ - Styling using the static "styles" property of the lit component will not be applied.
87
+ - The element and its content can be styled in a traditional manner.
88
+
89
+ For example, the components `queue`, `list`, and `fetch` do not have a shadow DOM.
90
+
91
+ ℹ️ **Note:** Specifically in this case, it may be useful to set the `display` property to `contents`.