fcad-core-dragon 2.1.0 → 2.1.2

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 (160) hide show
  1. package/.editorconfig +7 -7
  2. package/.gitlab-ci.yml +124 -0
  3. package/.prettierrc +11 -11
  4. package/.vscode/extensions.json +8 -8
  5. package/.vscode/settings.json +46 -16
  6. package/CHANGELOG +520 -520
  7. package/README.md +57 -57
  8. package/documentation/.vitepress/config.js +114 -114
  9. package/documentation/api-examples.md +49 -49
  10. package/documentation/composants/app-base-button.md +58 -58
  11. package/documentation/composants/app-base-error-display.md +59 -59
  12. package/documentation/composants/app-base-popover.md +68 -68
  13. package/documentation/composants/app-comp-audio.md +75 -75
  14. package/documentation/composants/app-comp-branch-buttons.md +111 -111
  15. package/documentation/composants/app-comp-button-progress.md +53 -53
  16. package/documentation/composants/app-comp-carousel.md +53 -53
  17. package/documentation/composants/app-comp-container.md +53 -53
  18. package/documentation/composants/app-comp-input-checkbox-next.md +42 -42
  19. package/documentation/composants/app-comp-input-dropdown-next.md +34 -34
  20. package/documentation/composants/app-comp-input-radio-next.md +39 -39
  21. package/documentation/composants/app-comp-input-text-next.md +35 -35
  22. package/documentation/composants/app-comp-input-text-table-next.md +34 -34
  23. package/documentation/composants/app-comp-input-text-to-fill-dropdown-next.md +53 -53
  24. package/documentation/composants/app-comp-input-text-to-fill-next.md +31 -31
  25. package/documentation/composants/app-comp-jauge.md +31 -31
  26. package/documentation/composants/app-comp-menu-item.md +55 -55
  27. package/documentation/composants/app-comp-menu.md +29 -29
  28. package/documentation/composants/app-comp-navigation.md +41 -41
  29. package/documentation/composants/app-comp-note-call.md +53 -53
  30. package/documentation/composants/app-comp-note-credit.md +53 -53
  31. package/documentation/composants/app-comp-play-bar-next.md +53 -53
  32. package/documentation/composants/app-comp-pop-up-next.md +93 -93
  33. package/documentation/composants/app-comp-quiz-next.md +235 -235
  34. package/documentation/composants/app-comp-quiz-recall.md +53 -53
  35. package/documentation/composants/app-comp-svg-next.md +53 -53
  36. package/documentation/composants/app-comp-table-of-content.md +50 -50
  37. package/documentation/composants/app-comp-video-player.md +82 -82
  38. package/documentation/composants.md +46 -46
  39. package/documentation/composants_critiques/ModelPageComposant.md +53 -53
  40. package/documentation/composants_critiques/app-base-module.md +43 -43
  41. package/documentation/composants_critiques/app-base-page.md +48 -48
  42. package/documentation/composants_critiques/app-base.md +311 -311
  43. package/documentation/composants_critiques/main.md +15 -15
  44. package/documentation/demarrage.md +50 -50
  45. package/documentation/deploiement.md +57 -57
  46. package/documentation/index.md +33 -33
  47. package/documentation/markdown-examples.md +85 -85
  48. package/documentation/public/vite.svg +14 -14
  49. package/documentation/public/vuejs.svg +1 -1
  50. package/documentation/public/vuetify.svg +5 -5
  51. package/eslint.config.js +60 -60
  52. package/junit-report.xml +182 -0
  53. package/package.json +66 -59
  54. package/playwright/index.html +12 -0
  55. package/playwright/index.js +21 -0
  56. package/playwright-ct.config.js +95 -0
  57. package/src/$locales/en.json +157 -157
  58. package/src/$locales/fr.json +120 -120
  59. package/src/assets/data/onboardingMessages.json +47 -47
  60. package/src/components/AppBase.vue +1171 -1169
  61. package/src/components/AppBaseButton.vue +90 -95
  62. package/src/components/AppBaseErrorDisplay.vue +438 -438
  63. package/src/components/AppBaseFlipCard.vue +84 -84
  64. package/src/components/AppBaseModule.vue +1639 -1634
  65. package/src/components/AppBasePage.vue +3 -2
  66. package/src/components/AppBasePopover.vue +41 -41
  67. package/src/components/AppBaseSkeleton.vue +66 -66
  68. package/src/components/AppCompAudio.vue +261 -256
  69. package/src/components/AppCompBranchButtons.vue +508 -508
  70. package/src/components/AppCompButtonProgress.vue +137 -132
  71. package/src/components/AppCompCarousel.vue +342 -336
  72. package/src/components/AppCompContainer.vue +29 -29
  73. package/src/components/AppCompInputCheckBoxNx.vue +325 -323
  74. package/src/components/AppCompInputDropdownNx.vue +302 -299
  75. package/src/components/AppCompInputRadioNx.vue +287 -284
  76. package/src/components/AppCompInputTextNx.vue +156 -153
  77. package/src/components/AppCompInputTextTableNx.vue +205 -202
  78. package/src/components/AppCompInputTextToFillDropdownNx.vue +343 -340
  79. package/src/components/AppCompInputTextToFillNx.vue +316 -313
  80. package/src/components/AppCompJauge.vue +81 -81
  81. package/src/components/AppCompMenu.vue +6 -2
  82. package/src/components/AppCompMenuItem.vue +246 -240
  83. package/src/components/AppCompNavigation.vue +977 -972
  84. package/src/components/AppCompNoteCall.vue +167 -161
  85. package/src/components/AppCompNoteCredit.vue +496 -491
  86. package/src/components/AppCompPlayBarNext.vue +2290 -2288
  87. package/src/components/AppCompPopUpNext.vue +508 -504
  88. package/src/components/AppCompQuizNext.vue +515 -510
  89. package/src/components/AppCompQuizRecall.vue +355 -350
  90. package/src/components/AppCompSVGNext.vue +346 -346
  91. package/src/components/AppCompSettingsMenu.vue +177 -172
  92. package/src/components/AppCompTableOfContent.vue +433 -427
  93. package/src/components/AppCompVideoPlayer.vue +377 -377
  94. package/src/components/AppCompViewDisplay.vue +6 -6
  95. package/src/components/BaseModule.vue +55 -55
  96. package/src/composables/useIdleDetector.js +56 -56
  97. package/src/composables/useQuiz.js +89 -89
  98. package/src/composables/useTimer.js +172 -172
  99. package/src/directives/nvdaFix.js +53 -53
  100. package/src/externalComps/ModuleView.vue +22 -22
  101. package/src/externalComps/SummaryView.vue +91 -91
  102. package/src/main.js +493 -476
  103. package/src/module/stores/appStore.js +960 -947
  104. package/src/module/xapi/ADL.js +520 -520
  105. package/src/module/xapi/Crypto/Hasher.js +241 -241
  106. package/src/module/xapi/Crypto/WordArray.js +278 -278
  107. package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +103 -103
  108. package/src/module/xapi/Crypto/algorithms/C_algo.js +315 -315
  109. package/src/module/xapi/Crypto/algorithms/HMAC.js +9 -9
  110. package/src/module/xapi/Crypto/algorithms/SHA1.js +9 -9
  111. package/src/module/xapi/Crypto/encoders/Base.js +105 -105
  112. package/src/module/xapi/Crypto/encoders/Base64.js +99 -99
  113. package/src/module/xapi/Crypto/encoders/Hex.js +61 -61
  114. package/src/module/xapi/Crypto/encoders/Latin1.js +61 -61
  115. package/src/module/xapi/Crypto/encoders/Utf8.js +45 -45
  116. package/src/module/xapi/Crypto/index.js +53 -53
  117. package/src/module/xapi/Statement/activity.js +47 -47
  118. package/src/module/xapi/Statement/agent.js +55 -55
  119. package/src/module/xapi/Statement/group.js +26 -26
  120. package/src/module/xapi/Statement/index.js +259 -259
  121. package/src/module/xapi/Statement/statement.js +253 -253
  122. package/src/module/xapi/Statement/statementRef.js +23 -23
  123. package/src/module/xapi/Statement/substatement.js +22 -22
  124. package/src/module/xapi/Statement/verb.js +36 -36
  125. package/src/module/xapi/activitytypes.js +17 -17
  126. package/src/module/xapi/launch.js +157 -157
  127. package/src/module/xapi/utils.js +167 -167
  128. package/src/module/xapi/verbs.js +294 -294
  129. package/src/module/xapi/wrapper.js +1895 -1895
  130. package/src/module/xapi/xapiStatement.js +444 -444
  131. package/src/plugins/analytics.js +34 -34
  132. package/src/plugins/bus.js +12 -8
  133. package/src/plugins/gsap.js +17 -15
  134. package/src/plugins/helper.js +355 -358
  135. package/src/plugins/i18n.js +27 -26
  136. package/src/plugins/idb.js +227 -227
  137. package/src/plugins/save.js +37 -37
  138. package/src/plugins/scorm.js +287 -287
  139. package/src/plugins/xapi.js +11 -11
  140. package/src/public/index.html +33 -33
  141. package/src/router/index.js +57 -57
  142. package/src/router/routes.js +312 -312
  143. package/src/shared/generalfuncs.js +344 -344
  144. package/src/shared/validators.js +1018 -1018
  145. package/tests/component/AppBaseButton.spec.js +53 -0
  146. package/tests/component/pinia.spec.js +24 -0
  147. package/{src/components/tests__ → tests/unit}/AppBaseButton.spec.js +53 -53
  148. package/tests/unit/AppCompInputCheckBoxNx.spec.js +59 -0
  149. package/tests/unit/AppCompInputDropdownNx.spec.js +51 -0
  150. package/tests/unit/AppCompInputRadioNx.spec.js +59 -0
  151. package/tests/unit/AppCompInputTextNx.spec.js +44 -0
  152. package/tests/unit/AppCompInputTextTableNx.spec.js +77 -0
  153. package/tests/unit/AppCompInputTextToFillDropdownNx.spec.js +60 -0
  154. package/tests/unit/AppCompInputTextToFillNx.spec.js +45 -0
  155. package/tests/unit/AppCompQuizNext.spec.js +114 -0
  156. package/tests/unit/AppCompVideoPlayer.spec.js +177 -0
  157. package/{src/components/tests__ → tests/unit}/useTimer.spec.js +91 -91
  158. package/vitest.config.js +28 -19
  159. package/vitest.setup.js +28 -0
  160. package/src/components/AppBaseButton.test.js +0 -21
@@ -0,0 +1,182 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <testsuites name="vitest tests" tests="46" failures="0" errors="0" time="3.169429509">
3
+ <testsuite name="tests/unit/AppBaseButton.spec.js" timestamp="2025-12-03T20:05:11.487Z" hostname="SRV-Gitlab" tests="5" failures="0" errors="0" skipped="0" time="0.131117392">
4
+ <testcase classname="tests/unit/AppBaseButton.spec.js" name="AppBaseButton.vue &gt; It renders a button" time="0.05882012">
5
+ </testcase>
6
+ <testcase classname="tests/unit/AppBaseButton.spec.js" name="AppBaseButton.vue &gt; Button has the correct type" time="0.015720066">
7
+ </testcase>
8
+ <testcase classname="tests/unit/AppBaseButton.spec.js" name="AppBaseButton.vue &gt; Button render a correct state" time="0.020113937">
9
+ </testcase>
10
+ <testcase classname="tests/unit/AppBaseButton.spec.js" name="AppBaseButton.vue &gt; Renders slot content properly" time="0.02276366">
11
+ </testcase>
12
+ <testcase classname="tests/unit/AppBaseButton.spec.js" name="AppBaseButton.vue &gt; Emit event with value of the the $el when clicked" time="0.01187684">
13
+ </testcase>
14
+ </testsuite>
15
+ <testsuite name="tests/unit/AppCompInputCheckBoxNx.spec.js" timestamp="2025-12-03T20:05:11.489Z" hostname="SRV-Gitlab" tests="3" failures="0" errors="0" skipped="0" time="0.118534334">
16
+ <testcase classname="tests/unit/AppCompInputCheckBoxNx.spec.js" name="AppCompInputRadioNx.vue &gt; renders a list of 6 checkboxes" time="0.075774746">
17
+ </testcase>
18
+ <testcase classname="tests/unit/AppCompInputCheckBoxNx.spec.js" name="AppCompInputRadioNx.vue &gt; initially displays a single selected checkbox (checkbox #6 : cyan)" time="0.021754596">
19
+ </testcase>
20
+ <testcase classname="tests/unit/AppCompInputCheckBoxNx.spec.js" name="AppCompInputRadioNx.vue &gt; emits enable-submit and update:modelValue events on input change" time="0.019506127">
21
+ </testcase>
22
+ </testsuite>
23
+ <testsuite name="tests/unit/AppCompInputDropdownNx.spec.js" timestamp="2025-12-03T20:05:11.490Z" hostname="SRV-Gitlab" tests="4" failures="0" errors="0" skipped="0" time="0.467758792">
24
+ <testcase classname="tests/unit/AppCompInputDropdownNx.spec.js" name="AppCompInputDropdownNx.vue &gt; renders a list of vuetify v-select components" time="0.214814467">
25
+ </testcase>
26
+ <testcase classname="tests/unit/AppCompInputDropdownNx.spec.js" name="AppCompInputDropdownNx.vue &gt; displays the right labels" time="0.084565078">
27
+ </testcase>
28
+ <testcase classname="tests/unit/AppCompInputDropdownNx.spec.js" name="AppCompInputDropdownNx.vue &gt; has the right initial data to display (modelValue prop)" time="0.106591392">
29
+ </testcase>
30
+ <testcase classname="tests/unit/AppCompInputDropdownNx.spec.js" name="AppCompInputDropdownNx.vue &gt; emits enable-submit and update:modelValue events on input change" time="0.06009774">
31
+ </testcase>
32
+ </testsuite>
33
+ <testsuite name="tests/unit/AppCompInputRadioNx.spec.js" timestamp="2025-12-03T20:05:11.491Z" hostname="SRV-Gitlab" tests="3" failures="0" errors="0" skipped="0" time="0.147644103">
34
+ <testcase classname="tests/unit/AppCompInputRadioNx.spec.js" name="AppCompInputRadioNx.vue &gt; renders a list of 6 radio buttons" time="0.083020241">
35
+ </testcase>
36
+ <testcase classname="tests/unit/AppCompInputRadioNx.spec.js" name="AppCompInputRadioNx.vue &gt; has the id A02_P02_Q4" time="0.035284597">
37
+ </testcase>
38
+ <testcase classname="tests/unit/AppCompInputRadioNx.spec.js" name="AppCompInputRadioNx.vue &gt; emits enable-submit and update:modelValue events on input change" time="0.027748826">
39
+ </testcase>
40
+ </testsuite>
41
+ <testsuite name="tests/unit/AppCompInputTextNx.spec.js" timestamp="2025-12-03T20:05:11.492Z" hostname="SRV-Gitlab" tests="5" failures="0" errors="0" skipped="0" time="0.185895362">
42
+ <testcase classname="tests/unit/AppCompInputTextNx.spec.js" name="AppCompInputTextNx.vue &gt; renders a vuetify textarea component" time="0.097669644">
43
+ </testcase>
44
+ <testcase classname="tests/unit/AppCompInputTextNx.spec.js" name="AppCompInputTextNx.vue &gt; contains placeholder text &quot;Écrivez ici.&quot;" time="0.026554837">
45
+ </testcase>
46
+ <testcase classname="tests/unit/AppCompInputTextNx.spec.js" name="AppCompInputTextNx.vue &gt; has the id textArea_A02_P02_Q4" time="0.024371271">
47
+ </testcase>
48
+ <testcase classname="tests/unit/AppCompInputTextNx.spec.js" name="AppCompInputTextNx.vue &gt; accepts some input text" time="0.019585788">
49
+ </testcase>
50
+ <testcase classname="tests/unit/AppCompInputTextNx.spec.js" name="AppCompInputTextNx.vue &gt; emits enable-submit and update:modelValue events on input change" time="0.016004427">
51
+ </testcase>
52
+ </testsuite>
53
+ <testsuite name="tests/unit/AppCompInputTextTableNx.spec.js" timestamp="2025-12-03T20:05:11.493Z" hostname="SRV-Gitlab" tests="5" failures="0" errors="0" skipped="0" time="0.614624008">
54
+ <testcase classname="tests/unit/AppCompInputTextTableNx.spec.js" name="AppCompInputTextTableNx.vue &gt; renders a list of vuetify v-text-field" time="0.216719223">
55
+ </testcase>
56
+ <testcase classname="tests/unit/AppCompInputTextTableNx.spec.js" name="AppCompInputTextTableNx.vue &gt; displays a list of labels according to props received" time="0.141385495">
57
+ </testcase>
58
+ <testcase classname="tests/unit/AppCompInputTextTableNx.spec.js" name="AppCompInputTextTableNx.vue &gt; displays the user saved answers" time="0.086800567">
59
+ </testcase>
60
+ <testcase classname="tests/unit/AppCompInputTextTableNx.spec.js" name="AppCompInputTextTableNx.vue &gt; accepts some input text" time="0.084986931">
61
+ </testcase>
62
+ <testcase classname="tests/unit/AppCompInputTextTableNx.spec.js" name="AppCompInputTextTableNx.vue &gt; emits enable-submit and update:modelValue events on input change" time="0.082963249">
63
+ </testcase>
64
+ </testsuite>
65
+ <testsuite name="tests/unit/AppCompInputTextToFillDropdownNx.spec.js" timestamp="2025-12-03T20:05:11.494Z" hostname="SRV-Gitlab" tests="3" failures="0" errors="0" skipped="0" time="0.66867566">
66
+ <testcase classname="tests/unit/AppCompInputTextToFillDropdownNx.spec.js" name="AppCompInputTextToFillDropdownNx.vue &gt; renders a list of vuetify v-select components" time="0.265334782">
67
+ </testcase>
68
+ <testcase classname="tests/unit/AppCompInputTextToFillDropdownNx.spec.js" name="AppCompInputTextToFillDropdownNx.vue &gt; has the right initial data to display (modelValue prop)" time="0.248612194">
69
+ </testcase>
70
+ <testcase classname="tests/unit/AppCompInputTextToFillDropdownNx.spec.js" name="AppCompInputTextToFillDropdownNx.vue &gt; emits enable-submit and update:modelValue events on input change" time="0.153249249">
71
+ </testcase>
72
+ </testsuite>
73
+ <testsuite name="tests/unit/AppCompInputTextToFillNx.spec.js" timestamp="2025-12-03T20:05:11.495Z" hostname="SRV-Gitlab" tests="4" failures="0" errors="0" skipped="0" time="0.542162683">
74
+ <testcase classname="tests/unit/AppCompInputTextToFillNx.spec.js" name="AppCompInputTextToFillNx.vue &gt; renders a paragraph with multiple vuetify v-text-field" time="0.266254499">
75
+ </testcase>
76
+ <testcase classname="tests/unit/AppCompInputTextToFillNx.spec.js" name="AppCompInputTextToFillNx.vue &gt; displays the user saved answers" time="0.105401228">
77
+ </testcase>
78
+ <testcase classname="tests/unit/AppCompInputTextToFillNx.spec.js" name="AppCompInputTextToFillNx.vue &gt; accepts some input text" time="0.093048312">
79
+ </testcase>
80
+ <testcase classname="tests/unit/AppCompInputTextToFillNx.spec.js" name="AppCompInputTextToFillNx.vue &gt; emits enable-submit and update:modelValue events on input change" time="0.07593334">
81
+ </testcase>
82
+ </testsuite>
83
+ <testsuite name="tests/unit/AppCompQuizNext.spec.js" timestamp="2025-12-03T20:05:11.496Z" hostname="SRV-Gitlab" tests="1" failures="0" errors="0" skipped="0" time="0.127558291">
84
+ <testcase classname="tests/unit/AppCompQuizNext.spec.js" name="AppCompQuizNext &gt; rend un input radio si la question est de type choix_unique" time="0.125999081">
85
+ </testcase>
86
+ </testsuite>
87
+ <testsuite name="tests/unit/AppCompVideoPlayer.spec.js" timestamp="2025-12-03T20:05:11.496Z" hostname="SRV-Gitlab" tests="4" failures="0" errors="0" skipped="0" time="0.150221064">
88
+ <testcase classname="tests/unit/AppCompVideoPlayer.spec.js" name="AppCompVideoPlayer &gt; Validate received props" time="0.079283338">
89
+ <system-err>
90
+ [Vue warn]: Failed to resolve component: app-base-error-display
91
+ If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.
92
+ at &lt;AppCompVideoPlayer vidData= {
93
+ id: [32m&apos;vid1&apos;[39m,
94
+ mSources: [ { type: [32m&apos;mp4&apos;[39m, src: [32m&apos;exemple_video.mp4&apos;[39m } ],
95
+ mSubtitles: [
96
+ { label: [32m&apos;Français&apos;[39m, src: [32m&apos;exemple_soustitres.vtt&apos;[39m, srclang: [32m&apos;fr&apos;[39m }
97
+ ],
98
+ mPoster: [32m&apos;video_poster.jpg&apos;[39m,
99
+ mTranscript: [32m&apos;exemple_transcript.html&apos;[39m
100
+ } ref=&quot;VTU_COMPONENT&quot; &gt;
101
+ at &lt;VTUROOT&gt;
102
+ [Vue warn]: Property &quot;$pinia&quot; was accessed during render but is not defined on instance.
103
+ at &lt;AppCompVideoPlayer vidData= {
104
+ id: [32m&apos;vid1&apos;[39m,
105
+ mSources: [ { type: [32m&apos;mp4&apos;[39m, src: [32m&apos;exemple_video.mp4&apos;[39m } ],
106
+ mSubtitles: [
107
+ { label: [32m&apos;Français&apos;[39m, src: [32m&apos;exemple_soustitres.vtt&apos;[39m, srclang: [32m&apos;fr&apos;[39m }
108
+ ],
109
+ mPoster: [32m&apos;video_poster.jpg&apos;[39m,
110
+ mTranscript: [32m&apos;exemple_transcript.html&apos;[39m
111
+ } ref=&quot;VTU_COMPONENT&quot; &gt;
112
+ at &lt;VTUROOT&gt;
113
+
114
+ [Vue warn]: Failed to resolve component: app-base-error-display
115
+ If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.
116
+ at &lt;AppCompVideoPlayer vidData= {
117
+ id: [32m&apos;vid1&apos;[39m,
118
+ mSources: [ { type: [32m&apos;mp4&apos;[39m, src: [32m&apos;exemple_video.mp4&apos;[39m } ],
119
+ mSubtitles: [
120
+ { label: [32m&apos;Français&apos;[39m, src: [32m&apos;exemple_soustitres.vtt&apos;[39m, srclang: [32m&apos;fr&apos;[39m }
121
+ ],
122
+ mPoster: [32m&apos;video_poster.jpg&apos;[39m,
123
+ mTranscript: [32m&apos;exemple_transcript.html&apos;[39m
124
+ } ref=&quot;VTU_COMPONENT&quot; &gt;
125
+ at &lt;VTUROOT&gt;
126
+
127
+ </system-err>
128
+ </testcase>
129
+ <testcase classname="tests/unit/AppCompVideoPlayer.spec.js" name="AppCompVideoPlayer &gt; renders ErrorDisplay When validator returns errors" time="0.040805915">
130
+ <system-err>
131
+ [Vue warn]: Invalid prop: custom validator check failed for prop &quot;vidData&quot;.
132
+ at &lt;AppCompVideoPlayer vidData= { id: [1mnull[22m } ref=&quot;VTU_COMPONENT&quot; &gt;
133
+ at &lt;VTUROOT&gt;
134
+
135
+ </system-err>
136
+ </testcase>
137
+ <testcase classname="tests/unit/AppCompVideoPlayer.spec.js" name="AppCompVideoPlayer &gt; It renders HTML video Element" time="0.013200088">
138
+ <system-err>
139
+ [Vue warn]: Property &quot;$pinia&quot; was accessed during render but is not defined on instance.
140
+ at &lt;AppCompVideoPlayer vidData= { id: [1mnull[22m } ref=&quot;VTU_COMPONENT&quot; &gt;
141
+ at &lt;VTUROOT&gt;
142
+
143
+ </system-err>
144
+ </testcase>
145
+ <testcase classname="tests/unit/AppCompVideoPlayer.spec.js" name="AppCompVideoPlayer &gt; Video Element has correct sources" time="0.014878878">
146
+ <system-err>
147
+ [Vue warn]: Property &quot;$pinia&quot; was accessed during render but is not defined on instance.
148
+ at &lt;AppCompVideoPlayer vidData= {
149
+ id: [32m&apos;vid1&apos;[39m,
150
+ mSources: [ { type: [32m&apos;mp4&apos;[39m, src: [32m&apos;exemple_video.mp4&apos;[39m } ],
151
+ mSubtitles: [
152
+ { label: [32m&apos;Français&apos;[39m, src: [32m&apos;exemple_soustitres.vtt&apos;[39m, srclang: [32m&apos;fr&apos;[39m }
153
+ ],
154
+ mPoster: [32m&apos;video_poster.jpg&apos;[39m,
155
+ mTranscript: [32m&apos;exemple_transcript.html&apos;[39m
156
+ } ref=&quot;VTU_COMPONENT&quot; &gt;
157
+ at &lt;VTUROOT&gt;
158
+
159
+ </system-err>
160
+ </testcase>
161
+ </testsuite>
162
+ <testsuite name="tests/unit/useTimer.spec.js" timestamp="2025-12-03T20:05:11.498Z" hostname="SRV-Gitlab" tests="9" failures="0" errors="0" skipped="0" time="0.01523782">
163
+ <testcase classname="tests/unit/useTimer.spec.js" name="Timer class &gt; should create a Timer instance with a unique ID" time="0.004283024">
164
+ </testcase>
165
+ <testcase classname="tests/unit/useTimer.spec.js" name="Timer class &gt; should return a timer instance by it ID" time="0.001041552">
166
+ </testcase>
167
+ <testcase classname="tests/unit/useTimer.spec.js" name="Timer class &gt; should throw error when a timer instance doesn`t exist" time="0.001328963">
168
+ </testcase>
169
+ <testcase classname="tests/unit/useTimer.spec.js" name="Timer class &gt; should initialize timer at 0 seconds" time="0.000432473">
170
+ </testcase>
171
+ <testcase classname="tests/unit/useTimer.spec.js" name="Timer class &gt; should start the timer and increment time every second" time="0.001382178">
172
+ </testcase>
173
+ <testcase classname="tests/unit/useTimer.spec.js" name="Timer class &gt; should display time in correct format when converting to ISOformats" time="0.003260798">
174
+ </testcase>
175
+ <testcase classname="tests/unit/useTimer.spec.js" name="Timer class &gt; should pause the timer" time="0.000603134">
176
+ </testcase>
177
+ <testcase classname="tests/unit/useTimer.spec.js" name="Timer class &gt; should reset the timer to 0 when timer stops" time="0.000482659">
178
+ </testcase>
179
+ <testcase classname="tests/unit/useTimer.spec.js" name="Timer class &gt; should destroy timer" time="0.000666707">
180
+ </testcase>
181
+ </testsuite>
182
+ </testsuites>
package/package.json CHANGED
@@ -1,59 +1,66 @@
1
- {
2
- "name": "fcad-core-dragon",
3
- "version": "2.1.0",
4
- "private": false,
5
- "type": "module",
6
- "main": "./src/main.js",
7
- "scripts": {
8
- "build": "vite build",
9
- "dev": "vite",
10
- "docs:build": "vitepress build documentation",
11
- "docs:dev": "vitepress dev documentation",
12
- "docs:preview": "vitepress preview documentation",
13
- "lintfix": "eslint --fix src",
14
- "lintreport": "eslint ./src",
15
- "preview": "vite preview",
16
- "reset": "rm -rf ./node_modules package-lock.json .cache dist && npm i && npm run watch",
17
- "test:unit": "vitest",
18
- "vue": "vue",
19
- "watch": "nodemon -e js,vue,html,json -x yalc publish --push",
20
- "format": "prettier --write src/"
21
- },
22
- "config": {
23
- "projname": ""
24
- },
25
- "browserslist": [
26
- "> 1%",
27
- "last 2 versions",
28
- "not dead"
29
- ],
30
- "dependencies": {
31
- "axios": "^1.6.8",
32
- "gsap": "^3.12.5",
33
- "idb": "^8.0.0",
34
- "mobile-detect": "^1.4.5",
35
- "pinia": "^3.0.3",
36
- "tiny-emitter": "^2.1.0",
37
- "vue-safe-teleport": "^0.1.2"
38
- },
39
- "devDependencies": {
40
- "@eslint/js": "^9.38.0",
41
- "@vitejs/plugin-vue": "^6.0.1",
42
- "@vue/eslint-config-prettier": "^10.2.0",
43
- "@vue/test-utils": "^2.4.6",
44
- "eslint": "^9.38.0",
45
- "eslint-plugin-cypress": "^5.1.0",
46
- "eslint-plugin-vue": "~10.3.0",
47
- "globals": "^16.4.0",
48
- "jsdom": "^25.0.1",
49
- "nodemon": "^3.1.0",
50
- "prettier": "^3.6.2",
51
- "sass-embedded": "^1.91.0",
52
- "vitepress": "^1.6.3",
53
- "vitest": "^3.2.4",
54
- "vue-router": "^4.4.5"
55
- },
56
- "engines": {
57
- "node": ">0.11.9"
58
- }
59
- }
1
+ {
2
+ "name": "fcad-core-dragon",
3
+ "version": "2.1.2",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "./src/main.js",
7
+ "scripts": {
8
+ "build": "vite build",
9
+ "dev": "vite",
10
+ "docs:build": "vitepress build documentation",
11
+ "docs:dev": "vitepress dev documentation",
12
+ "docs:preview": "vitepress preview documentation",
13
+ "lintfix": "eslint --fix src",
14
+ "lintreport": "eslint ./src",
15
+ "preview": "vite preview",
16
+ "reset": "rm -rf ./node_modules package-lock.json .cache dist && npm i && npm run watch",
17
+ "test:unit": "vitest",
18
+ "vue": "vue",
19
+ "watch": "nodemon -e js,vue,html,json -x yalc publish --push",
20
+ "format": "prettier --write src/",
21
+ "test-ct": "playwright test -c playwright-ct.config.js"
22
+ },
23
+ "config": {
24
+ "projname": ""
25
+ },
26
+ "browserslist": [
27
+ "> 1%",
28
+ "last 2 versions",
29
+ "not dead"
30
+ ],
31
+ "dependencies": {
32
+ "axios": "^1.6.8",
33
+ "gsap": "^3.12.5",
34
+ "idb": "^8.0.0",
35
+ "mobile-detect": "^1.4.5",
36
+ "pinia": "^3.0.3",
37
+ "tiny-emitter": "^2.1.0",
38
+ "vue-safe-teleport": "^0.1.2"
39
+ },
40
+ "devDependencies": {
41
+ "@eslint/js": "^9.38.0",
42
+ "@pinia/testing": "^1.0.3",
43
+ "@playwright/experimental-ct-vue": "^1.56.1",
44
+ "@playwright/test": "^1.56.1",
45
+ "@types/node": "^24.10.0",
46
+ "@vitejs/plugin-vue": "^6.0.1",
47
+ "@vue/eslint-config-prettier": "^10.2.0",
48
+ "@vue/test-utils": "^2.4.6",
49
+ "eslint": "^9.38.0",
50
+ "eslint-plugin-cypress": "^5.1.0",
51
+ "eslint-plugin-vue": "~10.3.0",
52
+ "globals": "^16.4.0",
53
+ "jsdom": "^25.0.1",
54
+ "nodemon": "^3.1.0",
55
+ "prettier": "^3.6.2",
56
+ "sass-embedded": "^1.91.0",
57
+ "vitepress": "^1.6.3",
58
+ "vitest": "^3.2.4",
59
+ "vue-i18n": "^11.1.12",
60
+ "vue-router": "^4.4.5",
61
+ "vuetify": "^3.10.10"
62
+ },
63
+ "engines": {
64
+ "node": ">0.11.9"
65
+ }
66
+ }
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Testing Page</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ <script type="module" src="./index.js"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,21 @@
1
+ // Import styles, initialize component theme here.
2
+ //import '../src/sass/main.scss'
3
+ import { beforeMount } from '@playwright/experimental-ct-vue/hooks'
4
+ import { createTestingPinia } from '@pinia/testing'
5
+ // import { StoreState } from 'pinia'
6
+ // import { useAppStore } from '../src/module/stores/appStore.js'
7
+
8
+ beforeMount(async ({ hooksConfig }) => {
9
+ createTestingPinia({
10
+ initialState: hooksConfig?.store,
11
+ /**
12
+ * Use HTTP intercepting to mock API calls instead:
13
+ * https://playwright.dev/docs/mock#mock-api-requests
14
+ */
15
+ stubActions: false,
16
+ createSpy(args) {
17
+ console.log('spy', args)
18
+ return () => console.log('spy-returns')
19
+ }
20
+ })
21
+ })
@@ -0,0 +1,95 @@
1
+ // @ts-check
2
+ import { defineConfig, devices } from '@playwright/experimental-ct-vue'
3
+ import { mergeConfig } from 'vite'
4
+ import vue from '@vitejs/plugin-vue'
5
+ import path from 'path'
6
+ import fs from 'fs'
7
+ import { pathToFileURL } from 'url'
8
+ import { fileURLToPath } from 'url'
9
+
10
+ const __filename = fileURLToPath(import.meta.url)
11
+ const __dirname = path.dirname(__filename)
12
+
13
+ //===================================================
14
+ // Load base Vite config
15
+ const viteConfigPath = process.env.VITE_CONFIG_PATH
16
+ ? path.resolve(process.env.VITE_CONFIG_PATH)
17
+ : path.resolve(
18
+ path.dirname(import.meta.url.replace('file:///', '')),
19
+ 'vite.config.js'
20
+ )
21
+
22
+ // if (!fs.existsSync(viteConfigPath)) {
23
+ // throw new Error(`vite.config.js introuvable à ${viteConfigPath}`)
24
+ // }
25
+
26
+ const viteConfig = !fs.existsSync(viteConfigPath)
27
+ ? {}
28
+ : (await import(pathToFileURL(viteConfigPath).href)).default
29
+ //===================================================
30
+
31
+ /**
32
+ * @see https://playwright.dev/docs/test-configuration
33
+ */
34
+ export default defineConfig({
35
+ testDir: './tests/component',
36
+ testMatch: ['**/*.spec.js'],
37
+ /* The base directory, relative to the config file, for snapshot files created with toMatchSnapshot and toHaveScreenshot. */
38
+ snapshotDir: './__snapshots__',
39
+ /* Maximum time one test can run for. */
40
+ timeout: 30 * 1000,
41
+ /* Run tests in files in parallel */
42
+ fullyParallel: true,
43
+ /* Fail the build on CI if you accidentally left test.only in the source code. */
44
+ forbidOnly: !!process.env.CI,
45
+ /* Retry on CI only */
46
+ retries: process.env.CI ? 2 : 0,
47
+ /* Opt out of parallel tests on CI. */
48
+ workers: process.env.CI ? 1 : undefined,
49
+ /* Reporter to use. See https://playwright.dev/docs/test-reporters */
50
+ reporter: [
51
+ ['line'],
52
+ ['junit', { outputFile: 'results.xml' }],
53
+ ['html', { outputFolder: 'playwright-report', open: 'never' }]
54
+ ],
55
+ /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
56
+ use: {
57
+ /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
58
+ trace: 'on-first-retry',
59
+
60
+ /* Port to use for Playwright component endpoint. */
61
+ ctPort: 3100,
62
+ headless: true
63
+ },
64
+ ctViteConfig: {
65
+ plugins: [vue()],
66
+ optimizeDeps: { include: ['vue', 'pinia', 'vue-router'] },
67
+ resolve: {
68
+ alias: {
69
+ '@': path.resolve(__dirname, './src')
70
+ }
71
+ }
72
+ },
73
+ expect: {
74
+ /**
75
+ * Maximum time expect() should wait for the condition to be met.
76
+ * For example in `await expect(locator).toHaveText();`
77
+ */
78
+ timeout: 10000
79
+ },
80
+ /* Configure projects for major browsers */
81
+ projects: [
82
+ {
83
+ name: 'chromium',
84
+ use: { ...devices['Desktop Chrome'] }
85
+ },
86
+ {
87
+ name: 'firefox',
88
+ use: { ...devices['Desktop Firefox'] }
89
+ },
90
+ {
91
+ name: 'webkit',
92
+ use: { ...devices['Desktop Safari'] }
93
+ }
94
+ ]
95
+ })