reneco-advanced-input-module 0.0.1-beta.1

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 (108) hide show
  1. package/.editorconfig +15 -0
  2. package/.prettierrc.json +13 -0
  3. package/LICENSE +21 -0
  4. package/api-key-inject.js +46 -0
  5. package/dist/cjs/app-globals-V2Kpy_OQ.js +8 -0
  6. package/dist/cjs/app-globals-V2Kpy_OQ.js.map +1 -0
  7. package/dist/cjs/index-BTSzTkSZ.js +1494 -0
  8. package/dist/cjs/index-BTSzTkSZ.js.map +1 -0
  9. package/dist/cjs/index.cjs.js +5 -0
  10. package/dist/cjs/index.cjs.js.map +1 -0
  11. package/dist/cjs/loader.cjs.js +16 -0
  12. package/dist/cjs/loader.cjs.js.map +1 -0
  13. package/dist/cjs/ocr-file-uploader.voice-input-module.entry.cjs.js.map +1 -0
  14. package/dist/cjs/ocr-file-uploader_2.cjs.entry.js +1340 -0
  15. package/dist/cjs/ocr-file-uploader_2.cjs.entry.js.map +1 -0
  16. package/dist/cjs/voice-input-module.cjs.js +28 -0
  17. package/dist/cjs/voice-input-module.cjs.js.map +1 -0
  18. package/dist/collection/collection-manifest.json +13 -0
  19. package/dist/collection/components/ocr-file-uploader/ocr-file-uploader.css +26 -0
  20. package/dist/collection/components/ocr-file-uploader/ocr-file-uploader.js +130 -0
  21. package/dist/collection/components/ocr-file-uploader/ocr-file-uploader.js.map +1 -0
  22. package/dist/collection/components/voice-input-module/voice-input-module.css +286 -0
  23. package/dist/collection/components/voice-input-module/voice-input-module.js +897 -0
  24. package/dist/collection/components/voice-input-module/voice-input-module.js.map +1 -0
  25. package/dist/collection/index.js +12 -0
  26. package/dist/collection/index.js.map +1 -0
  27. package/dist/collection/services/audio-recorder.service.js +66 -0
  28. package/dist/collection/services/audio-recorder.service.js.map +1 -0
  29. package/dist/collection/services/llm.service.js +193 -0
  30. package/dist/collection/services/llm.service.js.map +1 -0
  31. package/dist/collection/services/speech-to-text.service.js +60 -0
  32. package/dist/collection/services/speech-to-text.service.js.map +1 -0
  33. package/dist/collection/types/form-schema.types.js +2 -0
  34. package/dist/collection/types/form-schema.types.js.map +1 -0
  35. package/dist/collection/types/service-providers.types.js +2 -0
  36. package/dist/collection/types/service-providers.types.js.map +1 -0
  37. package/dist/collection/utils/schema-converter.js +422 -0
  38. package/dist/collection/utils/schema-converter.js.map +1 -0
  39. package/dist/components/index.d.ts +33 -0
  40. package/dist/components/index.js +4 -0
  41. package/dist/components/index.js.map +1 -0
  42. package/dist/components/ocr-file-uploader.d.ts +11 -0
  43. package/dist/components/ocr-file-uploader.js +9 -0
  44. package/dist/components/ocr-file-uploader.js.map +1 -0
  45. package/dist/components/ocr-file-uploader2.js +98 -0
  46. package/dist/components/ocr-file-uploader2.js.map +1 -0
  47. package/dist/components/voice-input-module.d.ts +11 -0
  48. package/dist/components/voice-input-module.js +1313 -0
  49. package/dist/components/voice-input-module.js.map +1 -0
  50. package/dist/esm/app-globals-DQuL1Twl.js +6 -0
  51. package/dist/esm/app-globals-DQuL1Twl.js.map +1 -0
  52. package/dist/esm/index-jmc2yzBp.js +1487 -0
  53. package/dist/esm/index-jmc2yzBp.js.map +1 -0
  54. package/dist/esm/index.js +4 -0
  55. package/dist/esm/index.js.map +1 -0
  56. package/dist/esm/loader.js +14 -0
  57. package/dist/esm/loader.js.map +1 -0
  58. package/dist/esm/ocr-file-uploader.voice-input-module.entry.js.map +1 -0
  59. package/dist/esm/ocr-file-uploader_2.entry.js +1337 -0
  60. package/dist/esm/ocr-file-uploader_2.entry.js.map +1 -0
  61. package/dist/esm/voice-input-module.js +24 -0
  62. package/dist/esm/voice-input-module.js.map +1 -0
  63. package/dist/index.cjs.js +1 -0
  64. package/dist/index.js +1 -0
  65. package/dist/types/components/ocr-file-uploader/ocr-file-uploader.d.ts +8 -0
  66. package/dist/types/components/voice-input-module/voice-input-module.d.ts +60 -0
  67. package/dist/types/components.d.ts +158 -0
  68. package/dist/types/index.d.ts +9 -0
  69. package/dist/types/services/audio-recorder.service.d.ts +9 -0
  70. package/dist/types/services/llm.service.d.ts +15 -0
  71. package/dist/types/services/speech-to-text.service.d.ts +11 -0
  72. package/dist/types/stencil-public-runtime.d.ts +1709 -0
  73. package/dist/types/types/form-schema.types.d.ts +70 -0
  74. package/dist/types/types/service-providers.types.d.ts +20 -0
  75. package/dist/types/utils/schema-converter.d.ts +22 -0
  76. package/dist/voice-input-module/index.esm.js +2 -0
  77. package/dist/voice-input-module/index.esm.js.map +1 -0
  78. package/dist/voice-input-module/loader.esm.js.map +1 -0
  79. package/dist/voice-input-module/ocr-file-uploader.voice-input-module.entry.esm.js.map +1 -0
  80. package/dist/voice-input-module/p-52e59129.entry.js +2 -0
  81. package/dist/voice-input-module/p-52e59129.entry.js.map +1 -0
  82. package/dist/voice-input-module/p-DQuL1Twl.js +2 -0
  83. package/dist/voice-input-module/p-DQuL1Twl.js.map +1 -0
  84. package/dist/voice-input-module/p-jmc2yzBp.js +3 -0
  85. package/dist/voice-input-module/p-jmc2yzBp.js.map +1 -0
  86. package/dist/voice-input-module/voice-input-module.esm.js +2 -0
  87. package/dist/voice-input-module/voice-input-module.esm.js.map +1 -0
  88. package/env-config.js +4 -0
  89. package/inject-env.js +20 -0
  90. package/package.json +37 -0
  91. package/readme.md +111 -0
  92. package/src/components/ocr-file-uploader/ocr-file-uploader.css +26 -0
  93. package/src/components/ocr-file-uploader/ocr-file-uploader.tsx +100 -0
  94. package/src/components/ocr-file-uploader/readme.md +31 -0
  95. package/src/components/voice-input-module/readme.md +114 -0
  96. package/src/components/voice-input-module/voice-input-module.css +286 -0
  97. package/src/components/voice-input-module/voice-input-module.tsx +778 -0
  98. package/src/components.d.ts +158 -0
  99. package/src/index.html +1015 -0
  100. package/src/index.ts +12 -0
  101. package/src/services/audio-recorder.service.ts +74 -0
  102. package/src/services/llm.service.ts +221 -0
  103. package/src/services/speech-to-text.service.ts +70 -0
  104. package/src/types/form-schema.types.ts +78 -0
  105. package/src/types/service-providers.types.ts +22 -0
  106. package/src/utils/schema-converter.ts +494 -0
  107. package/stencil.config.ts +24 -0
  108. package/tsconfig.json +30 -0
package/src/index.html ADDED
@@ -0,0 +1,1015 @@
1
+ <!DOCTYPE html>
2
+ <html dir="ltr" lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=5.0" />
6
+ <title>Voice Input Module Demo</title>
7
+ <script type="module" src="/build/voice-input-module.esm.js"></script>
8
+ <script nomodule src="/build/voice-input-module.js"></script>
9
+ <style>
10
+ body {
11
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
12
+ margin: 0;
13
+ padding: 2rem;
14
+ background: #f8fafc;
15
+ line-height: 1.6;
16
+ }
17
+ .container {
18
+ max-width: 1000px;
19
+ margin: 0 auto;
20
+ background: white;
21
+ padding: 2rem;
22
+ border-radius: 1rem;
23
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
24
+ }
25
+ h1 {
26
+ color: #1e293b;
27
+ margin-bottom: 1rem;
28
+ }
29
+ textarea {
30
+ width:800px;
31
+ height:300px;
32
+ }
33
+ .description {
34
+ color: #64748b;
35
+ margin-bottom: 2rem;
36
+ }
37
+ .demo-section {
38
+ margin: 2rem 0;
39
+ padding: 1.5rem;
40
+ background: #f8fafc;
41
+ border-radius: 0.5rem;
42
+ border: 1px solid #e2e8f0;
43
+ }
44
+ .demo-title {
45
+ font-weight: 600;
46
+ color: #374151;
47
+ margin-bottom: 1rem;
48
+ }
49
+ .schema-example {
50
+ background: #1e293b;
51
+ color: #e2e8f0;
52
+ padding: 1rem;
53
+ border-radius: 0.375rem;
54
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
55
+ font-size: 0.875rem;
56
+ overflow-x: auto;
57
+ margin: 1rem 0;
58
+ }
59
+ .result-display {
60
+ margin-top: 1rem;
61
+ padding: 1rem;
62
+ background: #f0f9ff;
63
+ border: 1px solid #0ea5e9;
64
+ border-radius: 0.375rem;
65
+ }
66
+ .setup-note {
67
+ background: #fef3c7;
68
+ border: 1px solid #f59e0b;
69
+ border-radius: 0.375rem;
70
+ padding: 1rem;
71
+ margin-bottom: 2rem;
72
+ color: #92400e;
73
+ }
74
+
75
+ .toggle-section {
76
+ margin: 1rem 0;
77
+ }
78
+
79
+ .toggle-button {
80
+ background: #3b82f6;
81
+ color: white;
82
+ border: none;
83
+ padding: 0.5rem 1rem;
84
+ border-radius: 0.375rem;
85
+ cursor: pointer;
86
+ font-size: 0.875rem;
87
+ display: flex;
88
+ align-items: center;
89
+ gap: 0.5rem;
90
+ margin-bottom: 0.5rem;
91
+ }
92
+
93
+ .toggle-button:hover {
94
+ background: #2563eb;
95
+ }
96
+
97
+ .toggle-content {
98
+ display: none;
99
+ padding: 1rem;
100
+ background: white;
101
+ border: 1px solid #e5e7eb;
102
+ border-radius: 0.375rem;
103
+ }
104
+
105
+ .toggle-content.visible {
106
+ display: block;
107
+ }
108
+
109
+ .editable-schema {
110
+ min-height: 200px;
111
+ padding: 1rem;
112
+ border: 1px solid #d1d5db;
113
+ border-radius: 0.375rem;
114
+ font-family: 'Monaco', 'Menlo', monospace;
115
+ font-size: 0.875rem;
116
+ white-space: pre-wrap;
117
+ background: #f9fafb;
118
+ width: 100%;
119
+ box-sizing: border-box;
120
+ resize: vertical;
121
+ }
122
+
123
+ .editable-schema:focus {
124
+ outline: none;
125
+ border-color: #3b82f6;
126
+ box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
127
+ }
128
+
129
+ .debug-title {
130
+ font-weight: 600;
131
+ color: #374151;
132
+ margin-bottom: 0.5rem;
133
+ }
134
+
135
+ .debug-content {
136
+ background: #1e293b;
137
+ color: #e2e8f0;
138
+ padding: 1rem;
139
+ border-radius: 0.375rem;
140
+ font-family: 'Monaco', 'Menlo', monospace;
141
+ font-size: 0.875rem;
142
+ overflow-x: auto;
143
+ white-space: pre-wrap;
144
+ }
145
+ </style>
146
+ </head>
147
+ <body>
148
+ <div class="container">
149
+ <h1>Voice Input Module Component</h1>
150
+ <div class="setup-note">
151
+ <strong>Setup Required:</strong> This component requires OpenAI API key to be passed in options.
152
+ </div>
153
+
154
+ <div class="demo-section">
155
+ <div class="demo-title">NG component</div>
156
+ <voice-input-module
157
+ id="demo3"
158
+ form-json='{"ID":1003,"System_Name":"Adoption_End","Type":"Container","Settings":{"ID":1003,"Flex_Direction":"row","Flex_Wrap":"wrap","Align_Items":"flex-start","Field_Width":8,"Label_Translation_ID":{"fr":"Adoption_End","en":"Adoption_End"},"Description_Translation_ID":{"fr":"Adoption_End","en":"Adoption_End"},"Label":"Root"},"Children":[{"ID":2016,"System_Name":"Individual_ID","Type":"InputAutocomplete","Settings":{"Autocomplete_Start":0,"Operator":"contains","Field_Width":4,"Source_View":"Individuals","Source_Field":["Adult_ID","Egg_ID"],"Trigger_Min_Length":3,"Label_Translation_ID":{"fr":"Individual_ID","en":"Individual_ID"},"Description_Translation_ID":{"fr":"Individual_ID","en":"Individual_ID"},"Label":"Individual_ID"},"Children":[],"Is_Virtual":false,"Required":true},{"ID":2017,"System_Name":"ID","Type":"InputInteger","Settings":{"ID":1005,"Min":null,"Max":null,"Default_Value":null,"Unit":null,"Field_Width":4,"Label_Translation_ID":{"fr":"ID","en":"ID"},"Description_Translation_ID":{"fr":"ID","en":"ID"},"Label":"ID"},"Children":[],"Is_Virtual":false,"Required":true},{"ID":2018,"System_Name":"End_Of_Adoption_Cause","Type":"InputInteger","Settings":{"ID":1006,"Min":null,"Max":null,"Default_Value":null,"Unit":null,"Field_Width":4,"Label_Translation_ID":{"fr":"End_Of_Adoption_Cause","en":"End_Of_Adoption_Cause"},"Description_Translation_ID":{"fr":"End_Of_Adoption_Cause","en":"End_Of_Adoption_Cause"},"Label":"End_Of_Adoption_Cause"},"Children":[],"Is_Virtual":false,"Required":false},{"ID":2019,"System_Name":"New_Position","Type":"InputInteger","Settings":{"ID":1007,"Min":null,"Max":null,"Default_Value":null,"Unit":null,"Field_Width":4,"Label_Translation_ID":{"fr":"New_Position","en":"New_Position"},"Description_Translation_ID":{"fr":"New_Position","en":"New_Position"},"Label":"New_Position"},"Children":[],"Is_Virtual":false,"Required":true},{"ID":2020,"System_Name":"Comment","Type":"InputTextArea","Settings":{"ID":1005,"Min_Length":null,"Max_Length":null,"Default_Value":null,"Field_Width":4,"Label_Translation_ID":{"fr":"Comment","en":"Comment"},"Description_Translation_ID":{"fr":"Comment","en":"Comment"},"Label":"Comment"},"Children":[],"Is_Virtual":false,"Required":false},{"ID":2021,"System_Name":"Former_Adoptive_Father","Type":"InputTextArea","Settings":{"ID":1006,"Min_Length":null,"Max_Length":null,"Default_Value":null,"Field_Width":4,"Label_Translation_ID":{"fr":"Former Adoptive Father","en":"Former_Adoptive_Father"},"Description_Translation_ID":{"fr":"Former_Adoptive_Father","en":"Former_Adoptive_Father"},"Label":"Former_Adoptive_Father"},"Children":[],"Is_Virtual":false,"Required":false},{"ID":2022,"System_Name":"Former_Adoptive_Mother","Type":"InputTextArea","Settings":{"ID":1007,"Min_Length":null,"Max_Length":null,"Default_Value":null,"Field_Width":4,"Label_Translation_ID":{"fr":"Former_Adoptive_Mother","en":"Former_Adoptive_Mother"},"Description_Translation_ID":{"fr":"Former_Adoptive_Mother","en":"Former_Adoptive_Mother"},"Label":"Former_Adoptive_Mother"},"Children":[],"Is_Virtual":false,"Required":false},{"ID":2023,"System_Name":"Start_Date","Type":"InputDateTimePicker","Settings":{"ID":1003,"Format":null,"Default_Value":null,"Field_Width":4,"Is_Default_Value_Now":null,"Has_Future_Date":null,"Label_Translation_ID":{"fr":"Start Date","en":"Start Date"},"Description_Translation_ID":{"fr":"Start Date","en":"Start Date"},"Label":"Start_Date"},"Children":[],"Is_Virtual":false,"Required":true},{"ID":2024,"System_Name":"Test_Decimal","Type":"InputDecimal","Settings":{"ID":1003,"Min":null,"Max":null,"Default_Value":null,"Unit":null,"Field_Width":4,"Number_Of_Decimal":3,"Label_Translation_ID":{"fr":"Test_Decimal","en":"Test_Decimal"},"Description_Translation_ID":{"fr":"Test_Decimal","en":"Test_Decimal"},"Label":"Test_Decimal"},"Children":[],"Is_Virtual":false,"Required":false},{"ID":2025,"System_Name":"Test_Classap","Type":"InputClassification","Settings":{"ID":1003,"Start_Node_ID":222957,"Default_Value":null,"Is_Fullpath_Used":null,"Is_Multiple":null,"Field_Width":4,"Type":"thesaurus","Label_Translation_ID":{"fr":"Test_Classap","en":"Test_Classap"},"Description_Translation_ID":{"fr":"Test_Classap","en":"Test_Classap"},"Label":"Test_Classap"},"Children":["hello","world"],"Is_Virtual":false,"Required":false},{"ID":2026,"System_Name":"Test_Checkbox","Type":"InputCheckbox","Settings":{"ID":2,"Default_Value":null,"Field_Width":4,"Label_Translation_ID":{"fr":"Test_Checkbox","en":"Test_Checkbox"},"Description_Translation_ID":{"fr":"Test_Checkbox","en":"Test_Checkbox"},"Label":"Test_Checkbox"},"Children":[],"Is_Virtual":false,"Required":true},{"ID":2027,"System_Name":"Test_Translation_ID","Type":"InputTextTranslation","Settings":{"ID":2,"Min_Length":null,"Max_Length":null,"Default_Value":null,"Field_Width":4,"Label_Translation_ID":{"fr":"Test_Translation_ID","en":"Test_Translation_ID"},"Description_Translation_ID":{"fr":"Test_Translation_ID","en":"Test_Translation_ID"},"Label":"Test_Translation_ID"},"Children":[],"Is_Virtual":false,"Required":false}],"Is_Virtual":false,"Required":false,"Meta":{"ID":3,"System_Name":"Protocol"},"Object_Type":{"ID":81,"System_Name":"Adoption_End"}}'
159
+ api-key="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"
160
+ render-form="true"
161
+ display-status="true"
162
+ debug="true"
163
+ context="ng"
164
+ classification-root-url="http://localhost:8888"
165
+ voice-or-ocr="both"
166
+ >
167
+ </voice-input-module>
168
+ </div>
169
+
170
+ <!-- NOTE STEP 1 -->
171
+ <div class="demo-section">
172
+ <div class="demo-title">Ecoll component</div>
173
+ <voice-input-module
174
+ id="demo2"
175
+ form-json='[{"name":"general informations","label":"Informations générales de l&apos;événement","role":"main","class":"general-infos","items":[{"type":"number","name":"Event_ID","label":"ID","readonly":true,"disabled":false},{"type":"text","name":"Subject","label":"Sujet","readonly":true,"tooltip_value":"M19N08550","disabled":false},{"type":"date","name":"Start_Date","label":"Date de l&apos;événement","required":true,"disabled":false},{"type":"text","name":"TUse_Login","label":"Opérateur","readonly":true,"disabled":false}]},{"name":"eventdetails","label":"Détails de l&apos;événement","role":"event-details","class":"event-details","items":[{"name":"Sample_Status","label":"Statut","icon":"reneco-logo-thesaurus","type":"thesaurus","config":{"options":{"source":"webservice","origin":"classification","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJpc3MiOiJOU3BvcnRhbCIsInN1YiI6IjE4NzUiLCJ1c2VybmFtZSI6Iktvc3Rob3dhIEx1ZG92aWMiLCJ1c2VybGFuZ3VhZ2UiOiJlbiIsImV4cCI6MTc2NDA2NDk1Nywicm9sZXMiOnsiREVWIFRSQUNLIjoiQWRtaW5pc3RyYXRldXIiLCJQb3J0YWwiOiJBZG1pbmlzdHJhdGV1ciIsIlBhcmFtZXRlcnMiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBQYXJhbWV0ZXJzIjoiQWRtaW5pc3RyYXRldXIiLCJOUyBUaFx1MDBlOXNhdXJ1cyAocmVhZCBvbmx5KSI6IkFkbWluaXN0cmF0ZXVyIiwiUG9zaXRpb24gKHJlYWQgb25seSkiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIEVudG9tb2xvZ3kiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBEYXRhIEVudHJ5IFVuZHVsYXRhIjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gTWFuYWdlbWVudCBVbmR1bGF0YSI6IkFkbWluaXN0cmF0ZXVyIiwiU2VjdXJpdGUiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIFZldGVyaW5hcnkiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBlQ29sbGVjdGlvbiBWZXRlcmluYXJ5IjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gRGF0YSBFbnRyeSBVbmR1bGF0YSBERVYiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBNYW5hZ2VtZW50IFVuZHVsYXRhIERFViI6IkFkbWluaXN0cmF0ZXVyIiwiREVWIGVDb2xsZWN0aW9uIEJvdGEiOiJBZG1pbmlzdHJhdGV1ciJ9fQ.qNQfo8hqzyyrEOJSi_32wvxCsd2K2jX3FxzJe-CSpXNU1ABvc7pCyqXVqpTIB2VA2xUioNlGnvTTCNzb4fuYjYv46QaTeCzcTcsjc3Mf-1coeBkufov7CGF2mCcA-MaE4Zpzgz01qP1Ud9JMJ9glldwkNRPXt9rjOLjoEsq88ITgC8i0cpFArCzzRdqx5PbQMcaQXcnVjU2y4k1qASLm6UxvO5W6TnDyuRAKfcGeN7iMEP8wvdI-UrwvCLyNb6mKk3VtHfuvc--TO9HrCyTtxxWnXLltWsEu4ne1wGx7PogUFY-wST_mqjEg2SnJ8GzdR0My4LW8lAWJlSzVCI2pNA","url":"https://nsdev01.int/ng/api/v1/classification/getTree/Thesaurus","language":"fr","options":{"IsDeprecated":false,"startNode":2014257,"StartNodeID":2014257,"lng":"fr","Reach":[2014257]},"multiple":false,"searchPlaceholder":"Search","mode":"input","loading":"display","displayTree":true,"isFullpath":false,"displayRootNode":true,"defaultValue":["2014257"]}},"dynprop":{"ID":1792,"Name":"Sample_Status","Label_EN":"Status","Label_FR":"Statut","Type":"thesaurus","Is_Required":true,"Is_Readonly":true,"Min_Value":0,"Default_Value":"2014257","External_Info":2014257,"Linked_Entity":"Sample","Linked_Field":"Sample_Status","Event_Type_ID":1,"Is_Hidden":false,"Extraction_Field":false},"required":true,"readonly":true,"editable":true,"extraction_field":false,"hide":false,"disabled":false},{"name":"Sample_Type","label":"Type d&apos;échantillon","icon":"reneco-logo-thesaurus","type":"thesaurus","config":{"options":{"source":"webservice","origin":"classification","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJpc3MiOiJOU3BvcnRhbCIsInN1YiI6IjE4NzUiLCJ1c2VybmFtZSI6Iktvc3Rob3dhIEx1ZG92aWMiLCJ1c2VybGFuZ3VhZ2UiOiJlbiIsImV4cCI6MTc2NDA2NDk1Nywicm9sZXMiOnsiREVWIFRSQUNLIjoiQWRtaW5pc3RyYXRldXIiLCJQb3J0YWwiOiJBZG1pbmlzdHJhdGV1ciIsIlBhcmFtZXRlcnMiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBQYXJhbWV0ZXJzIjoiQWRtaW5pc3RyYXRldXIiLCJOUyBUaFx1MDBlOXNhdXJ1cyAocmVhZCBvbmx5KSI6IkFkbWluaXN0cmF0ZXVyIiwiUG9zaXRpb24gKHJlYWQgb25seSkiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIEVudG9tb2xvZ3kiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBEYXRhIEVudHJ5IFVuZHVsYXRhIjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gTWFuYWdlbWVudCBVbmR1bGF0YSI6IkFkbWluaXN0cmF0ZXVyIiwiU2VjdXJpdGUiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIFZldGVyaW5hcnkiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBlQ29sbGVjdGlvbiBWZXRlcmluYXJ5IjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gRGF0YSBFbnRyeSBVbmR1bGF0YSBERVYiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBNYW5hZ2VtZW50IFVuZHVsYXRhIERFViI6IkFkbWluaXN0cmF0ZXVyIiwiREVWIGVDb2xsZWN0aW9uIEJvdGEiOiJBZG1pbmlzdHJhdGV1ciJ9fQ.qNQfo8hqzyyrEOJSi_32wvxCsd2K2jX3FxzJe-CSpXNU1ABvc7pCyqXVqpTIB2VA2xUioNlGnvTTCNzb4fuYjYv46QaTeCzcTcsjc3Mf-1coeBkufov7CGF2mCcA-MaE4Zpzgz01qP1Ud9JMJ9glldwkNRPXt9rjOLjoEsq88ITgC8i0cpFArCzzRdqx5PbQMcaQXcnVjU2y4k1qASLm6UxvO5W6TnDyuRAKfcGeN7iMEP8wvdI-UrwvCLyNb6mKk3VtHfuvc--TO9HrCyTtxxWnXLltWsEu4ne1wGx7PogUFY-wST_mqjEg2SnJ8GzdR0My4LW8lAWJlSzVCI2pNA","url":"https://nsdev01.int/ng/api/v1/classification/getTree/Thesaurus","language":"fr","options":{"IsDeprecated":false,"startNode":"2014261","StartNodeID":"2014261","lng":"fr"},"multiple":false,"searchPlaceholder":"Search","mode":"input","loading":"display","displayTree":true,"isFullpath":false,"displayRootNode":false}},"dynprop":{"ID":1793,"Name":"Sample_Type","Label_EN":"Sample type","Label_FR":"Type d&apos;échantillon","Type":"thesaurus","Is_Required":true,"Is_Readonly":false,"Min_Value":0,"External_Info":"2014261","Linked_Entity":"Sample","Linked_Field":"Sample_Type","Event_Type_ID":1,"Is_Hidden":false,"Extraction_Field":false},"required":true,"readonly":false,"editable":true,"extraction_field":false,"hide":false,"disabled":false},{"name":"Context","label":"Contexte","icon":"reneco-logo-thesaurus","type":"thesaurus","config":{"options":{"source":"webservice","origin":"classification","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJpc3MiOiJOU3BvcnRhbCIsInN1YiI6IjE4NzUiLCJ1c2VybmFtZSI6Iktvc3Rob3dhIEx1ZG92aWMiLCJ1c2VybGFuZ3VhZ2UiOiJlbiIsImV4cCI6MTc2NDA2NDk1Nywicm9sZXMiOnsiREVWIFRSQUNLIjoiQWRtaW5pc3RyYXRldXIiLCJQb3J0YWwiOiJBZG1pbmlzdHJhdGV1ciIsIlBhcmFtZXRlcnMiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBQYXJhbWV0ZXJzIjoiQWRtaW5pc3RyYXRldXIiLCJOUyBUaFx1MDBlOXNhdXJ1cyAocmVhZCBvbmx5KSI6IkFkbWluaXN0cmF0ZXVyIiwiUG9zaXRpb24gKHJlYWQgb25seSkiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIEVudG9tb2xvZ3kiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBEYXRhIEVudHJ5IFVuZHVsYXRhIjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gTWFuYWdlbWVudCBVbmR1bGF0YSI6IkFkbWluaXN0cmF0ZXVyIiwiU2VjdXJpdGUiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIFZldGVyaW5hcnkiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBlQ29sbGVjdGlvbiBWZXRlcmluYXJ5IjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gRGF0YSBFbnRyeSBVbmR1bGF0YSBERVYiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBNYW5hZ2VtZW50IFVuZHVsYXRhIERFViI6IkFkbWluaXN0cmF0ZXVyIiwiREVWIGVDb2xsZWN0aW9uIEJvdGEiOiJBZG1pbmlzdHJhdGV1ciJ9fQ.qNQfo8hqzyyrEOJSi_32wvxCsd2K2jX3FxzJe-CSpXNU1ABvc7pCyqXVqpTIB2VA2xUioNlGnvTTCNzb4fuYjYv46QaTeCzcTcsjc3Mf-1coeBkufov7CGF2mCcA-MaE4Zpzgz01qP1Ud9JMJ9glldwkNRPXt9rjOLjoEsq88ITgC8i0cpFArCzzRdqx5PbQMcaQXcnVjU2y4k1qASLm6UxvO5W6TnDyuRAKfcGeN7iMEP8wvdI-UrwvCLyNb6mKk3VtHfuvc--TO9HrCyTtxxWnXLltWsEu4ne1wGx7PogUFY-wST_mqjEg2SnJ8GzdR0My4LW8lAWJlSzVCI2pNA","url":"https://nsdev01.int/ng/api/v1/classification/getTree/Thesaurus","language":"fr","options":{"IsDeprecated":false,"startNode":"2014303","StartNodeID":"2014303","lng":"fr"},"multiple":false,"searchPlaceholder":"Search","mode":"input","loading":"display","displayTree":true,"isFullpath":false,"displayRootNode":false}},"dynprop":{"ID":1794,"Name":"Context","Label_EN":"Context","Label_FR":"Contexte","Type":"thesaurus","Is_Required":true,"Is_Readonly":false,"Min_Value":0,"External_Info":"2014303","Linked_Entity":"Sample","Linked_Field":"Context","Event_Type_ID":1,"Is_Hidden":false,"Extraction_Field":false},"required":true,"readonly":false,"editable":true,"extraction_field":false,"hide":false,"disabled":false},{"name":"Purpose","label":"But","icon":"reneco-logo-thesaurus","type":"thesaurus","config":{"options":{"source":"webservice","origin":"classification","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJpc3MiOiJOU3BvcnRhbCIsInN1YiI6IjE4NzUiLCJ1c2VybmFtZSI6Iktvc3Rob3dhIEx1ZG92aWMiLCJ1c2VybGFuZ3VhZ2UiOiJlbiIsImV4cCI6MTc2NDA2NDk1Nywicm9sZXMiOnsiREVWIFRSQUNLIjoiQWRtaW5pc3RyYXRldXIiLCJQb3J0YWwiOiJBZG1pbmlzdHJhdGV1ciIsIlBhcmFtZXRlcnMiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBQYXJhbWV0ZXJzIjoiQWRtaW5pc3RyYXRldXIiLCJOUyBUaFx1MDBlOXNhdXJ1cyAocmVhZCBvbmx5KSI6IkFkbWluaXN0cmF0ZXVyIiwiUG9zaXRpb24gKHJlYWQgb25seSkiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIEVudG9tb2xvZ3kiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBEYXRhIEVudHJ5IFVuZHVsYXRhIjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gTWFuYWdlbWVudCBVbmR1bGF0YSI6IkFkbWluaXN0cmF0ZXVyIiwiU2VjdXJpdGUiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIFZldGVyaW5hcnkiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBlQ29sbGVjdGlvbiBWZXRlcmluYXJ5IjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gRGF0YSBFbnRyeSBVbmR1bGF0YSBERVYiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBNYW5hZ2VtZW50IFVuZHVsYXRhIERFViI6IkFkbWluaXN0cmF0ZXVyIiwiREVWIGVDb2xsZWN0aW9uIEJvdGEiOiJBZG1pbmlzdHJhdGV1ciJ9fQ.qNQfo8hqzyyrEOJSi_32wvxCsd2K2jX3FxzJe-CSpXNU1ABvc7pCyqXVqpTIB2VA2xUioNlGnvTTCNzb4fuYjYv46QaTeCzcTcsjc3Mf-1coeBkufov7CGF2mCcA-MaE4Zpzgz01qP1Ud9JMJ9glldwkNRPXt9rjOLjoEsq88ITgC8i0cpFArCzzRdqx5PbQMcaQXcnVjU2y4k1qASLm6UxvO5W6TnDyuRAKfcGeN7iMEP8wvdI-UrwvCLyNb6mKk3VtHfuvc--TO9HrCyTtxxWnXLltWsEu4ne1wGx7PogUFY-wST_mqjEg2SnJ8GzdR0My4LW8lAWJlSzVCI2pNA","url":"https://nsdev01.int/ng/api/v1/classification/getTree/Thesaurus","language":"fr","options":{"IsDeprecated":false,"startNode":"168027","StartNodeID":"168027","lng":"fr"},"multiple":false,"searchPlaceholder":"Search","mode":"input","loading":"display","displayTree":true,"isFullpath":false,"displayRootNode":false}},"dynprop":{"ID":1795,"Name":"Purpose","Label_EN":"Purpose","Label_FR":"But","Type":"thesaurus","Is_Required":true,"Is_Readonly":false,"Min_Value":0,"External_Info":"168027","Linked_Entity":"Sample","Linked_Field":"Purpose","Event_Type_ID":1,"Is_Hidden":false,"Extraction_Field":false},"required":true,"readonly":false,"editable":true,"extraction_field":false,"hide":false,"disabled":false},{"name":"Position","label":"Position","icon":"reneco-localtion","type":"position","config":{"options":{"source":"webservice","origin":"classification","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJpc3MiOiJOU3BvcnRhbCIsInN1YiI6IjE4NzUiLCJ1c2VybmFtZSI6Iktvc3Rob3dhIEx1ZG92aWMiLCJ1c2VybGFuZ3VhZ2UiOiJlbiIsImV4cCI6MTc2NDA2NDk1Nywicm9sZXMiOnsiREVWIFRSQUNLIjoiQWRtaW5pc3RyYXRldXIiLCJQb3J0YWwiOiJBZG1pbmlzdHJhdGV1ciIsIlBhcmFtZXRlcnMiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBQYXJhbWV0ZXJzIjoiQWRtaW5pc3RyYXRldXIiLCJOUyBUaFx1MDBlOXNhdXJ1cyAocmVhZCBvbmx5KSI6IkFkbWluaXN0cmF0ZXVyIiwiUG9zaXRpb24gKHJlYWQgb25seSkiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIEVudG9tb2xvZ3kiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBEYXRhIEVudHJ5IFVuZHVsYXRhIjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gTWFuYWdlbWVudCBVbmR1bGF0YSI6IkFkbWluaXN0cmF0ZXVyIiwiU2VjdXJpdGUiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIFZldGVyaW5hcnkiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBlQ29sbGVjdGlvbiBWZXRlcmluYXJ5IjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gRGF0YSBFbnRyeSBVbmR1bGF0YSBERVYiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBNYW5hZ2VtZW50IFVuZHVsYXRhIERFViI6IkFkbWluaXN0cmF0ZXVyIiwiREVWIGVDb2xsZWN0aW9uIEJvdGEiOiJBZG1pbmlzdHJhdGV1ciJ9fQ.qNQfo8hqzyyrEOJSi_32wvxCsd2K2jX3FxzJe-CSpXNU1ABvc7pCyqXVqpTIB2VA2xUioNlGnvTTCNzb4fuYjYv46QaTeCzcTcsjc3Mf-1coeBkufov7CGF2mCcA-MaE4Zpzgz01qP1Ud9JMJ9glldwkNRPXt9rjOLjoEsq88ITgC8i0cpFArCzzRdqx5PbQMcaQXcnVjU2y4k1qASLm6UxvO5W6TnDyuRAKfcGeN7iMEP8wvdI-UrwvCLyNb6mKk3VtHfuvc--TO9HrCyTtxxWnXLltWsEu4ne1wGx7PogUFY-wST_mqjEg2SnJ8GzdR0My4LW8lAWJlSzVCI2pNA","url":"https://nsdev01.int/ng/api/v1/classification/getTree/Position","language":"fr","options":{"IsDeprecated":false,"startNode":213847,"StartNodeID":213847,"lng":"fr","Reach":[213847]},"multiple":false,"searchPlaceholder":"Search","mode":"input","loading":"display","displayTree":true,"isFullpath":false,"displayRootNode":true,"defaultValue":["213847"]}},"dynprop":{"ID":1796,"Name":"Position","Label_EN":"Location","Label_FR":"Position","Type":"position","Is_Required":true,"Is_Readonly":true,"Min_Value":0,"Default_Value":"213847","External_Info":213847,"Linked_Entity":"Sample","Linked_Field":"Position","Event_Type_ID":1,"Is_Hidden":false,"Extraction_Field":false},"required":true,"readonly":true,"editable":true,"extraction_field":false,"hide":false,"disabled":false},{"name":"Analysis_Request","label":"Demande d&apos;analyse","icon":"reneco-logo-thesaurus","type":"thesaurus","config":{"options":{"source":"webservice","origin":"classification","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJpc3MiOiJOU3BvcnRhbCIsInN1YiI6IjE4NzUiLCJ1c2VybmFtZSI6Iktvc3Rob3dhIEx1ZG92aWMiLCJ1c2VybGFuZ3VhZ2UiOiJlbiIsImV4cCI6MTc2NDA2NDk1Nywicm9sZXMiOnsiREVWIFRSQUNLIjoiQWRtaW5pc3RyYXRldXIiLCJQb3J0YWwiOiJBZG1pbmlzdHJhdGV1ciIsIlBhcmFtZXRlcnMiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBQYXJhbWV0ZXJzIjoiQWRtaW5pc3RyYXRldXIiLCJOUyBUaFx1MDBlOXNhdXJ1cyAocmVhZCBvbmx5KSI6IkFkbWluaXN0cmF0ZXVyIiwiUG9zaXRpb24gKHJlYWQgb25seSkiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIEVudG9tb2xvZ3kiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBEYXRhIEVudHJ5IFVuZHVsYXRhIjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gTWFuYWdlbWVudCBVbmR1bGF0YSI6IkFkbWluaXN0cmF0ZXVyIiwiU2VjdXJpdGUiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIFZldGVyaW5hcnkiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBlQ29sbGVjdGlvbiBWZXRlcmluYXJ5IjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gRGF0YSBFbnRyeSBVbmR1bGF0YSBERVYiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBNYW5hZ2VtZW50IFVuZHVsYXRhIERFViI6IkFkbWluaXN0cmF0ZXVyIiwiREVWIGVDb2xsZWN0aW9uIEJvdGEiOiJBZG1pbmlzdHJhdGV1ciJ9fQ.qNQfo8hqzyyrEOJSi_32wvxCsd2K2jX3FxzJe-CSpXNU1ABvc7pCyqXVqpTIB2VA2xUioNlGnvTTCNzb4fuYjYv46QaTeCzcTcsjc3Mf-1coeBkufov7CGF2mCcA-MaE4Zpzgz01qP1Ud9JMJ9glldwkNRPXt9rjOLjoEsq88ITgC8i0cpFArCzzRdqx5PbQMcaQXcnVjU2y4k1qASLm6UxvO5W6TnDyuRAKfcGeN7iMEP8wvdI-UrwvCLyNb6mKk3VtHfuvc--TO9HrCyTtxxWnXLltWsEu4ne1wGx7PogUFY-wST_mqjEg2SnJ8GzdR0My4LW8lAWJlSzVCI2pNA","url":"https://nsdev01.int/ng/api/v1/classification/getTree/Thesaurus","language":"fr","options":{"IsDeprecated":false,"startNode":"81768","StartNodeID":"81768","lng":"fr"},"multiple":true,"searchPlaceholder":"Search","mode":"input","loading":"display","displayTree":true,"isFullpath":false,"displayRootNode":false}},"dynprop":{"ID":1797,"Name":"Analysis_Request","Label_EN":"Analysis request","Label_FR":"Demande d&apos;analyse","Type":"thesaurus","Is_Required":true,"Is_Readonly":false,"Min_Value":0,"External_Info":"start_node_id=81768|multiple=true","Event_Type_ID":1,"Is_Hidden":false,"Extraction_Field":false},"required":true,"readonly":false,"editable":true,"extraction_field":false,"hide":false,"disabled":false},{"name":"Targeted_Pathogen","label":"Pathogène ciblé","icon":"reneco-logo-thesaurus","type":"thesaurus","config":{"options":{"source":"webservice","origin":"classification","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJpc3MiOiJOU3BvcnRhbCIsInN1YiI6IjE4NzUiLCJ1c2VybmFtZSI6Iktvc3Rob3dhIEx1ZG92aWMiLCJ1c2VybGFuZ3VhZ2UiOiJlbiIsImV4cCI6MTc2NDA2NDk1Nywicm9sZXMiOnsiREVWIFRSQUNLIjoiQWRtaW5pc3RyYXRldXIiLCJQb3J0YWwiOiJBZG1pbmlzdHJhdGV1ciIsIlBhcmFtZXRlcnMiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBQYXJhbWV0ZXJzIjoiQWRtaW5pc3RyYXRldXIiLCJOUyBUaFx1MDBlOXNhdXJ1cyAocmVhZCBvbmx5KSI6IkFkbWluaXN0cmF0ZXVyIiwiUG9zaXRpb24gKHJlYWQgb25seSkiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIEVudG9tb2xvZ3kiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBEYXRhIEVudHJ5IFVuZHVsYXRhIjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gTWFuYWdlbWVudCBVbmR1bGF0YSI6IkFkbWluaXN0cmF0ZXVyIiwiU2VjdXJpdGUiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIFZldGVyaW5hcnkiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBlQ29sbGVjdGlvbiBWZXRlcmluYXJ5IjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gRGF0YSBFbnRyeSBVbmR1bGF0YSBERVYiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBNYW5hZ2VtZW50IFVuZHVsYXRhIERFViI6IkFkbWluaXN0cmF0ZXVyIiwiREVWIGVDb2xsZWN0aW9uIEJvdGEiOiJBZG1pbmlzdHJhdGV1ciJ9fQ.qNQfo8hqzyyrEOJSi_32wvxCsd2K2jX3FxzJe-CSpXNU1ABvc7pCyqXVqpTIB2VA2xUioNlGnvTTCNzb4fuYjYv46QaTeCzcTcsjc3Mf-1coeBkufov7CGF2mCcA-MaE4Zpzgz01qP1Ud9JMJ9glldwkNRPXt9rjOLjoEsq88ITgC8i0cpFArCzzRdqx5PbQMcaQXcnVjU2y4k1qASLm6UxvO5W6TnDyuRAKfcGeN7iMEP8wvdI-UrwvCLyNb6mKk3VtHfuvc--TO9HrCyTtxxWnXLltWsEu4ne1wGx7PogUFY-wST_mqjEg2SnJ8GzdR0My4LW8lAWJlSzVCI2pNA","url":"https://nsdev01.int/ng/api/v1/classification/getTree/Thesaurus","language":"fr","options":{"IsDeprecated":false,"startNode":"87227","StartNodeID":"87227","lng":"fr"},"multiple":true,"searchPlaceholder":"Search","mode":"input","loading":"display","displayTree":true,"isFullpath":false,"displayRootNode":false}},"dynprop":{"ID":1798,"Name":"Targeted_Pathogen","Label_EN":"Targeted pathogen","Label_FR":"Pathogène ciblé","Type":"thesaurus","Is_Required":false,"Is_Readonly":false,"Min_Value":0,"External_Info":"start_node_id=87227|multiple=true","Event_Type_ID":1,"Is_Hidden":false,"Extraction_Field":false},"required":false,"readonly":false,"editable":true,"extraction_field":false,"hide":false,"disabled":false},{"name":"Anatomy","label":"Anatomie","icon":"reneco-logo-thesaurus","type":"thesaurus","config":{"options":{"source":"webservice","origin":"classification","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJpc3MiOiJOU3BvcnRhbCIsInN1YiI6IjE4NzUiLCJ1c2VybmFtZSI6Iktvc3Rob3dhIEx1ZG92aWMiLCJ1c2VybGFuZ3VhZ2UiOiJlbiIsImV4cCI6MTc2NDA2NDk1Nywicm9sZXMiOnsiREVWIFRSQUNLIjoiQWRtaW5pc3RyYXRldXIiLCJQb3J0YWwiOiJBZG1pbmlzdHJhdGV1ciIsIlBhcmFtZXRlcnMiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBQYXJhbWV0ZXJzIjoiQWRtaW5pc3RyYXRldXIiLCJOUyBUaFx1MDBlOXNhdXJ1cyAocmVhZCBvbmx5KSI6IkFkbWluaXN0cmF0ZXVyIiwiUG9zaXRpb24gKHJlYWQgb25seSkiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIEVudG9tb2xvZ3kiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBEYXRhIEVudHJ5IFVuZHVsYXRhIjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gTWFuYWdlbWVudCBVbmR1bGF0YSI6IkFkbWluaXN0cmF0ZXVyIiwiU2VjdXJpdGUiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIFZldGVyaW5hcnkiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBlQ29sbGVjdGlvbiBWZXRlcmluYXJ5IjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gRGF0YSBFbnRyeSBVbmR1bGF0YSBERVYiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBNYW5hZ2VtZW50IFVuZHVsYXRhIERFViI6IkFkbWluaXN0cmF0ZXVyIiwiREVWIGVDb2xsZWN0aW9uIEJvdGEiOiJBZG1pbmlzdHJhdGV1ciJ9fQ.qNQfo8hqzyyrEOJSi_32wvxCsd2K2jX3FxzJe-CSpXNU1ABvc7pCyqXVqpTIB2VA2xUioNlGnvTTCNzb4fuYjYv46QaTeCzcTcsjc3Mf-1coeBkufov7CGF2mCcA-MaE4Zpzgz01qP1Ud9JMJ9glldwkNRPXt9rjOLjoEsq88ITgC8i0cpFArCzzRdqx5PbQMcaQXcnVjU2y4k1qASLm6UxvO5W6TnDyuRAKfcGeN7iMEP8wvdI-UrwvCLyNb6mKk3VtHfuvc--TO9HrCyTtxxWnXLltWsEu4ne1wGx7PogUFY-wST_mqjEg2SnJ8GzdR0My4LW8lAWJlSzVCI2pNA","url":"https://nsdev01.int/ng/api/v1/classification/getTree/Thesaurus","language":"fr","options":{"IsDeprecated":false,"startNode":"78255","StartNodeID":"78255","lng":"fr"},"multiple":true,"searchPlaceholder":"Search","mode":"input","loading":"display","displayTree":true,"isFullpath":false,"displayRootNode":false}},"dynprop":{"ID":1799,"Name":"Anatomy","Label_EN":"Anatomy","Label_FR":"Anatomie","Type":"thesaurus","Is_Required":false,"Is_Readonly":false,"Min_Value":0,"External_Info":"start_node_id=78255|multiple=true","Required_When":"{input:Sample_Type|op:like|value:Organ}|{input:Sample_Type|op:like|value:FTA}|{input:Sample_Type|op:like|value:Swab}|{input:Sample_Type|op:like|value:Prepared slide}|{input:Sample_Type|op:=|value:DNA}|{input:Sample_Type|op:like|value:RNA}","Hide_When":"{input:Sample_Type|op:notlike|value:Organ}|{input:Sample_Type|op:notlike|value:FTA}|{input:Sample_Type|op:notlike|value:Swab}|{input:Sample_Type|op:notlike|value:Prepared slide}|{input:Sample_Type|op:notlike|value:Faeces}|{input:Sample_Type|op:!=|value:DNA}|{input:Sample_Type|op:notlike|value:RNA}|{input:Sample_Type|op:notlike|value:Blood}","Disabled_When":"{input:Sample_Type|op:like|value:Faeces}|{input:Sample_Type|op:like|value:Blood}","Default_Value_When":"{input:Sample_Type|op:like|value:Faeces|default_value:81126}|{input:Sample_Type|op:like|value:Blood|default_value:2017986}","Linked_Entity":"Sample","Linked_Field":"Anatomy","Event_Type_ID":1,"Is_Hidden":false,"Extraction_Field":false},"required":false,"readonly":false,"editable":true,"extraction_field":false,"required_when":[{"input":"Sample_Type","op":"like","value":"Organ"},{"input":"Sample_Type","op":"like","value":"FTA"},{"input":"Sample_Type","op":"like","value":"Swab"},{"input":"Sample_Type","op":"like","value":"Prepared slide"},{"input":"Sample_Type","op":"=","value":"DNA"},{"input":"Sample_Type","op":"like","value":"RNA"}],"hide_when":[{"input":"Sample_Type","op":"notlike","value":"Organ"},{"input":"Sample_Type","op":"notlike","value":"FTA"},{"input":"Sample_Type","op":"notlike","value":"Swab"},{"input":"Sample_Type","op":"notlike","value":"Prepared slide"},{"input":"Sample_Type","op":"notlike","value":"Faeces"},{"input":"Sample_Type","op":"!=","value":"DNA"},{"input":"Sample_Type","op":"notlike","value":"RNA"},{"input":"Sample_Type","op":"notlike","value":"Blood"}],"disabled_when":[{"input":"Sample_Type","op":"like","value":"Faeces"},{"input":"Sample_Type","op":"like","value":"Blood"}],"default_value_when":[{"input":"Sample_Type","op":"like","value":"Faeces","default_value":"81126"},{"input":"Sample_Type","op":"like","value":"Blood","default_value":"2017986"}],"hide":true,"disabled":false},{"name":"FTA_Card_Code","label":"Code de carte FTA","icon":"","type":"text","dynprop":{"ID":1800,"Name":"FTA_Card_Code","Label_EN":"FTA card code","Label_FR":"Code de carte FTA","Type":"string","Is_Required":false,"Is_Readonly":false,"Min_Value":0,"Required_When":"{input:Sample_Type|op:like|value:FTA}","Hide_When":"{input:Sample_Type|op:notlike|value:FTA}","Linked_Entity":"Sample","Linked_Field":"FTA_Card_Code","Event_Type_ID":1,"Is_Hidden":false,"Extraction_Field":false},"required":false,"readonly":false,"editable":true,"extraction_field":false,"required_when":[{"input":"Sample_Type","op":"like","value":"FTA"}],"hide_when":[{"input":"Sample_Type","op":"notlike","value":"FTA"}],"hide":true,"disabled":false},{"name":"FTA_Card_Position","label":"Emplacement sur la carte","icon":"reneco-logo-thesaurus","type":"thesaurus","config":{"options":{"source":"webservice","origin":"classification","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJpc3MiOiJOU3BvcnRhbCIsInN1YiI6IjE4NzUiLCJ1c2VybmFtZSI6Iktvc3Rob3dhIEx1ZG92aWMiLCJ1c2VybGFuZ3VhZ2UiOiJlbiIsImV4cCI6MTc2NDA2NDk1Nywicm9sZXMiOnsiREVWIFRSQUNLIjoiQWRtaW5pc3RyYXRldXIiLCJQb3J0YWwiOiJBZG1pbmlzdHJhdGV1ciIsIlBhcmFtZXRlcnMiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBQYXJhbWV0ZXJzIjoiQWRtaW5pc3RyYXRldXIiLCJOUyBUaFx1MDBlOXNhdXJ1cyAocmVhZCBvbmx5KSI6IkFkbWluaXN0cmF0ZXVyIiwiUG9zaXRpb24gKHJlYWQgb25seSkiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIEVudG9tb2xvZ3kiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBEYXRhIEVudHJ5IFVuZHVsYXRhIjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gTWFuYWdlbWVudCBVbmR1bGF0YSI6IkFkbWluaXN0cmF0ZXVyIiwiU2VjdXJpdGUiOiJBZG1pbmlzdHJhdGV1ciIsImVDb2xsZWN0aW9uIFZldGVyaW5hcnkiOiJBZG1pbmlzdHJhdGV1ciIsIkRFViBlQ29sbGVjdGlvbiBWZXRlcmluYXJ5IjoiQWRtaW5pc3RyYXRldXIiLCJSZXByb2R1Y3Rpb24gRGF0YSBFbnRyeSBVbmR1bGF0YSBERVYiOiJBZG1pbmlzdHJhdGV1ciIsIlJlcHJvZHVjdGlvbiBNYW5hZ2VtZW50IFVuZHVsYXRhIERFViI6IkFkbWluaXN0cmF0ZXVyIiwiREVWIGVDb2xsZWN0aW9uIEJvdGEiOiJBZG1pbmlzdHJhdGV1ciJ9fQ.qNQfo8hqzyyrEOJSi_32wvxCsd2K2jX3FxzJe-CSpXNU1ABvc7pCyqXVqpTIB2VA2xUioNlGnvTTCNzb4fuYjYv46QaTeCzcTcsjc3Mf-1coeBkufov7CGF2mCcA-MaE4Zpzgz01qP1Ud9JMJ9glldwkNRPXt9rjOLjoEsq88ITgC8i0cpFArCzzRdqx5PbQMcaQXcnVjU2y4k1qASLm6UxvO5W6TnDyuRAKfcGeN7iMEP8wvdI-UrwvCLyNb6mKk3VtHfuvc--TO9HrCyTtxxWnXLltWsEu4ne1wGx7PogUFY-wST_mqjEg2SnJ8GzdR0My4LW8lAWJlSzVCI2pNA","url":"https://nsdev01.int/ng/api/v1/classification/getTree/Thesaurus","language":"fr","options":{"IsDeprecated":false,"startNode":"2014322","StartNodeID":"2014322","lng":"fr"},"multiple":false,"searchPlaceholder":"Search","mode":"input","loading":"display","displayTree":true,"isFullpath":false,"displayRootNode":false}},"dynprop":{"ID":1801,"Name":"FTA_Card_Position","Label_EN":"Position in card","Label_FR":"Emplacement sur la carte","Type":"thesaurus","Is_Required":false,"Is_Readonly":false,"Min_Value":0,"External_Info":"2014322","Required_When":"{input:Sample_Type|op:like|value:FTA}","Hide_When":"{input:Sample_Type|op:notlike|value:FTA}","Linked_Entity":"Sample","Linked_Field":"FTA_Card_Position","Event_Type_ID":1,"Is_Hidden":false,"Extraction_Field":false},"required":false,"readonly":false,"editable":true,"extraction_field":false,"required_when":[{"input":"Sample_Type","op":"like","value":"FTA"}],"hide_when":[{"input":"Sample_Type","op":"notlike","value":"FTA"}],"hide":true,"disabled":false},{"name":"Comment","label":"Notes","icon":"","type":"textarea","dynprop":{"ID":1802,"Name":"Comment","Label_EN":"Comment","Label_FR":"Notes","Type":"textarea","Is_Required":false,"Is_Readonly":false,"Min_Value":0,"Event_Type_ID":1,"Is_Hidden":false,"Extraction_Field":false},"required":false,"readonly":false,"editable":true,"extraction_field":false,"hide":false,"disabled":false}]},{"Event_ID": null}]'
176
+ api-key="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"
177
+ render-form="true"
178
+ display-status="true"
179
+ debug="true"
180
+ context="ecoll-veto"
181
+ language="fr"
182
+ classification-root-url="http://localhost:8888"
183
+ >
184
+ </voice-input-module>
185
+ </div>
186
+
187
+ <!-- NOTE STEP 2 -->
188
+ <div class="demo-section">
189
+ <div class="demo-title">Ecoteka component</div>
190
+ <voice-input-module
191
+ id="demo4"
192
+ form-json='
193
+ {
194
+ "Children":[
195
+ {
196
+ "System_Name": "Diagnosis date",
197
+ "Type": "date",
198
+ "Required": "true",
199
+ "Settings": {
200
+ "Label": "Date de passage",
201
+ "Default_Value": null
202
+ }
203
+ },
204
+ {
205
+ "System_Name": "Diagnosis type",
206
+ "Type": "text",
207
+ "Required": "true",
208
+ "Settings": {
209
+ "Label": "Type de diagnostic",
210
+ "Default_Value": null
211
+ }
212
+ },
213
+ {
214
+ "System_Name": "Tree condition",
215
+ "Type": "select",
216
+ "Required": "true",
217
+ "Settings": {
218
+ "Label": "Etat physiologique",
219
+ "Default_Value": null
220
+ },
221
+ "Children": [{
222
+ "Label": "Bonne"
223
+ },{
224
+ "Label": "Moyenne"
225
+ },{
226
+ "Label": "Faible"
227
+ }]
228
+ },
229
+ {
230
+ "System_Name": "Tree vigor",
231
+ "Type": "select",
232
+ "Required": "false",
233
+ "Settings": {
234
+ "Label": "Vigueur du sujet",
235
+ "Default_Value": null
236
+ },
237
+ "Children": [{
238
+ "Label": "Sain"
239
+ },{
240
+ "Label": "Stressé"
241
+ },{
242
+ "Label": "Résilient"
243
+ },{
244
+ "Label": "En dépérissement irréversible"
245
+ },{
246
+ "Label": "En descente de cime"
247
+ },{
248
+ "Label": "En repli"
249
+ },{
250
+ "Label": "Non lisible"
251
+ }]
252
+ },
253
+ {
254
+ "System_Name": "Root condition",
255
+ "Type": "select",
256
+ "Required": "false",
257
+ "Settings": {
258
+ "Label": "Etat des racines",
259
+ "Default_Value": null
260
+ },
261
+ "Children": [{
262
+ "Label": "Racines saines"
263
+ },{
264
+ "Label": "Racines sectionnées (travaux)"
265
+ },{
266
+ "Label": "Pollution"
267
+ },{
268
+ "Label": "Dépôt de matériaux"
269
+ },{
270
+ "Label": "Tassement du sol"
271
+ },{
272
+ "Label": "Racines de surface dégradées"
273
+ },{
274
+ "Label": "Mauvais état non défini"
275
+ }]
276
+ },
277
+ {
278
+ "System_Name": "Collar condition",
279
+ "Type": "select",
280
+ "Required": "false",
281
+ "Settings": {
282
+ "Label": "Etat du collet",
283
+ "Default_Value": null
284
+ },
285
+ "Children": [{
286
+ "Label": "Arrachement"
287
+ },{
288
+ "Label": "Plaie légère"
289
+ },{
290
+ "Label": "Carpophore"
291
+ },{
292
+ "Label": "Cavité interne"
293
+ },{
294
+ "Label": "Cavité ouverte"
295
+ },{
296
+ "Label": "Chancre"
297
+ },{
298
+ "Label": "Corps étranger"
299
+ }]
300
+ },
301
+ {
302
+ "System_Name": "Trunk condition",
303
+ "Type": "select",
304
+ "Required": "false",
305
+ "Settings": {
306
+ "Label": "Etat du tronc",
307
+ "Default_Value": null
308
+ },
309
+ "Children": [{
310
+ "Label": "Fissure longitudinale"
311
+ },{
312
+ "Label": "Fissure tangentielle"
313
+ },{
314
+ "Label": "Blessure profonde (creux)"
315
+ },{
316
+ "Label": "Plaie de taille"
317
+ },{
318
+ "Label": "Bois mort en quantité anormale"
319
+ },{
320
+ "Label": "Brin à écorce incluse"
321
+ }]
322
+ },
323
+ {
324
+ "System_Name": "Crown condition",
325
+ "Type": "select",
326
+ "Required": "false",
327
+ "Settings": {
328
+ "Label": "Etat du houppier",
329
+ "Default_Value": null
330
+ },
331
+ "Children": [{
332
+ "Label": "Flambage"
333
+ },{
334
+ "Label": "Fil torse"
335
+ },{
336
+ "Label": "Foudroyé"
337
+ },{
338
+ "Label": "Fourche à écorce incluse"
339
+ },{
340
+ "Label": "Fourche ou axe à écorce incluse"
341
+ },{
342
+ "Label": "Instabilité"
343
+ }]
344
+ },
345
+ {
346
+ "System_Name": "Tree is dangerous",
347
+ "Type": "checkbox",
348
+ "Required": "false",
349
+ "Settings": {
350
+ "Label": "Arbre dangereux",
351
+ "Default_Value": null
352
+ }
353
+ },
354
+ {
355
+ "System_Name": "Maintenance expectancy",
356
+ "Type": "select",
357
+ "Required": "false",
358
+ "Settings": {
359
+ "Label": "Esperance de maintient",
360
+ "Default_Value": null
361
+ },
362
+ "Children": [{
363
+ "Label": "Normale"
364
+ },{
365
+ "Label": "Acceptable"
366
+ },{
367
+ "Label": "Faible"
368
+ },{
369
+ "Label": "Très faible"
370
+ },{
371
+ "Label": "Aucune"
372
+ },{
373
+ "Label": "À définir"
374
+ }]
375
+ },
376
+ {
377
+ "System_Name": "Detailed diagnosis is recommended",
378
+ "Type": "checkbox",
379
+ "Required": "false",
380
+ "Settings": {
381
+ "Label": "Diagnostic approfondi recommande",
382
+ "Default_Value": null
383
+ }
384
+ },
385
+ {
386
+ "System_Name": "Next diagnosis date recommendation",
387
+ "Type": "select",
388
+ "Required": "false",
389
+ "Settings": {
390
+ "Label": "Date recommandee pour le prochain diagnostic",
391
+ "Default_Value": null
392
+ },
393
+ "Children": [{
394
+ "Label": "Cette année"
395
+ },{
396
+ "Label": "Dans 2 ans"
397
+ },{
398
+ "Label": "Dans 3 ans"
399
+ },{
400
+ "Label": "Dans 5 ans"
401
+ },{
402
+ "Label": "Dans 10 ans"
403
+ },{
404
+ "Label": "Dans 15 ans"
405
+ },{
406
+ "Label": "Dans 20 ans"
407
+ }]
408
+ },
409
+ {
410
+ "System_Name": "Collar pathogen",
411
+ "Type": "select",
412
+ "Required": "false",
413
+ "Settings": {
414
+ "Label": "Pathogene collet",
415
+ "Default_Value": null
416
+ },
417
+ "Children": [{
418
+ "Label": "Maladie fongique non définie"
419
+ },{
420
+ "Label": "Criblure du laurier"
421
+ },{
422
+ "Label": "Armillaria mellea"
423
+ },{
424
+ "Label": "Armillaria ostoyae"
425
+ },{
426
+ "Label": "Armillaria tabescens"
427
+ }]
428
+ },
429
+ {
430
+ "System_Name": "Trunk pathogen",
431
+ "Type": "select",
432
+ "Required": "false",
433
+ "Settings": {
434
+ "Label": "Pathogene tronc",
435
+ "Default_Value": null
436
+ },
437
+ "Children": [{
438
+ "Label": "Maladie fongique non définie"
439
+ },{
440
+ "Label": "Criblure du laurier"
441
+ },{
442
+ "Label": "Armillaria mellea"
443
+ },{
444
+ "Label": "Armillaria ostoyae"
445
+ },{
446
+ "Label": "Armillaria tabescens"
447
+ }]
448
+ },
449
+ {
450
+ "System_Name": "Crown pathogen",
451
+ "Type": "select",
452
+ "Required": "false",
453
+ "Settings": {
454
+ "Label": "Pathogene houppier",
455
+ "Default_Value": null
456
+ },
457
+ "Children": [{
458
+ "Label": "Maladie fongique non définie"
459
+ },{
460
+ "Label": "Criblure du laurier"
461
+ },{
462
+ "Label": "Armillaria mellea"
463
+ },{
464
+ "Label": "Armillaria ostoyae"
465
+ },{
466
+ "Label": "Armillaria tabescens"
467
+ }]
468
+ },
469
+ {
470
+ "System_Name": "Undefined organ pathogen",
471
+ "Type": "select",
472
+ "Required": "false",
473
+ "Settings": {
474
+ "Label": "Pathogene organe non defini",
475
+ "Default_Value": null
476
+ },
477
+ "Children": [{
478
+ "Label": "Maladie fongique non définie"
479
+ },{
480
+ "Label": "Criblure du laurier"
481
+ },{
482
+ "Label": "Armillaria mellea"
483
+ },{
484
+ "Label": "Armillaria ostoyae"
485
+ },{
486
+ "Label": "Armillaria tabescens"
487
+ }]
488
+ },
489
+ {
490
+ "System_Name": "Note",
491
+ "Type": "text",
492
+ "Required": "false",
493
+ "Settings": {
494
+ "Label": "Remarque",
495
+ "Default_Value": null
496
+ }
497
+ },
498
+ {
499
+ "System_Name": "Recommandation",
500
+ "Type": "select",
501
+ "Required": "false",
502
+ "Settings": {
503
+ "Label": "Recommandation",
504
+ "Default_Value": null
505
+ },
506
+ "Children": [{
507
+ "Label": "Plantation et suivi - Autres"
508
+ },{
509
+ "Label": "Taille d entretien"
510
+ },{
511
+ "Label": "Taille spécifique"
512
+ },{
513
+ "Label": "Taille sanitaire"
514
+ },{
515
+ "Label": "Taille de formation"
516
+ },{
517
+ "Label": "Taille - Autres"
518
+ },{
519
+ "Label": "Traitement - contrôle"
520
+ }]
521
+ }
522
+ ]
523
+ }'
524
+ api-key="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"
525
+ render-form="true"
526
+ display-status="true"
527
+ debug="true"
528
+ context="ecoteka"
529
+ language="fr"
530
+ >
531
+ </voice-input-module>
532
+ </div>
533
+
534
+ <div id="result2" class="result-display" style="display: none;">
535
+ <strong>Form Filled Result:</strong>
536
+ <pre id="result2-content"></pre>
537
+ </div>
538
+
539
+ <div class="demo-section">
540
+ <div class="demo-title">Demo XML Conversion Utilities</div>
541
+ <p>The component also provides XML ⟷ JSON conversion utilities:</p>
542
+ <button onclick="testXmlConversion()">Test XML Conversion</button>
543
+ <div id="xml-result" style="display: none; margin-top: 1rem;">
544
+ <div class="schema-example" id="xml-content"></div>
545
+ </div>
546
+ </div>
547
+
548
+
549
+ <div class="demo-section">
550
+ <div class="demo-title">TRACK Legacy XML demo</div>
551
+ <button onclick="testTrackXmlConversion()">Test TRACK Legacy XML Conversion</button>
552
+ <div id="track-xml-result" style="display: none; margin-top: 1rem;">
553
+ <div class="schema-example" id="track-xml-content"></div>
554
+ </div>
555
+ </div>
556
+
557
+ </div>
558
+
559
+ <script>
560
+
561
+ // Handle form filled events
562
+ document.getElementById('demo2').addEventListener('formFilled', (event) => {
563
+ const result = event.detail;
564
+ const resultDiv = document.getElementById('result2');
565
+ const resultContent = document.getElementById('result2-content');
566
+
567
+ resultContent.textContent = JSON.stringify(result, null, 2);
568
+ resultDiv.style.display = 'block';
569
+ console.log('Demo 2 Form Filled:', result);
570
+
571
+ // Update debug information if available
572
+ if (result.debugInfo) {
573
+ const debugContent = document.getElementById('debug2');
574
+ debugContent.innerHTML = `
575
+ <div class="debug-title">Debug Information:</div>
576
+ <pre class="debug-content">${JSON.stringify(result.debugInfo, null, 2)}</pre>
577
+ `;
578
+ }
579
+ });
580
+
581
+ document.getElementById('demo3').addEventListener('formFilled', (event) => {
582
+ const result = event.detail;
583
+ console.log('Raw Component Demo Form Filled:', result);
584
+ });
585
+
586
+ document.getElementById('demo4').addEventListener('formFilled', (event) => {
587
+ const result = event.detail;
588
+ console.log('Raw Component Demo Form Filled:', result);
589
+ });
590
+
591
+ //-----------------------------------
592
+ // Test XML conversion
593
+ function testXmlConversion() {
594
+ console.log("testXmlConversion");
595
+ const xmlForm = `
596
+ <form title="Sample Form">
597
+ <input name="name" type="text" title="Full Name" required="true" />
598
+ <input name="age" type="number" title="Age" min="18" max="100" />
599
+ <input name="subscribe" type="checkbox" title="Subscribe to Newsletter" />
600
+ <select name="country" title="Country">
601
+ <option value="us">United States</option>
602
+ <option value="ca">Canada</option>
603
+ <option value="uk">United Kingdom</option>
604
+ </select>
605
+ </form>
606
+ `;
607
+
608
+ const component = document.getElementById('demo2');
609
+ try {
610
+ component.convertXmlToJsonLegacy(xmlForm).then((jsonresult) => {
611
+ const backToXml = component.convertJsonToXmlLegacy(jsonresult).then((xmlresult) => {
612
+ const resultDiv = document.getElementById('xml-result');
613
+ const xmlContent = document.getElementById('xml-content');
614
+
615
+ xmlContent.innerHTML = `
616
+ <strong>Original XML:</strong>
617
+ ${xmlForm}
618
+ <br />
619
+
620
+ <strong>Converted to JSON:</strong>
621
+ ${JSON.stringify(jsonresult, null, 2)}
622
+ <br />
623
+ <br />
624
+
625
+ <strong>Back to XML:</strong>
626
+ ${xmlresult}
627
+ <br />
628
+
629
+ <div>To Component Result:</div>
630
+ <voice-input-module
631
+ id="fromxml"
632
+ form-json='${JSON.stringify(jsonresult, null, 2)}'
633
+ api-key="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"
634
+ render-form="true"
635
+ display-status="true"
636
+ debug="true"
637
+ context="track"
638
+ classification-root-url="http://localhost:8888"
639
+ >
640
+ </voice-input-module>
641
+
642
+ <div id='toxmlaftervoice'></div>
643
+ `;
644
+
645
+ resultDiv.style.display = 'block';
646
+
647
+ document.getElementById('fromxml').addEventListener('formFilled', (event) => {
648
+ const result = event.detail;
649
+ console.log('fromxml Demo Form Filled:', result);
650
+
651
+ component.convertJsonToXmlLegacy(result.data).then((finalxmlresult) => {
652
+ const finalxmlContent = document.getElementById('toxmlaftervoice');
653
+ console.log("finalxmlContent", finalxmlContent);
654
+
655
+ finalxmlContent.innerHTML = `
656
+ ${finalxmlresult}
657
+ `
658
+ });
659
+ });
660
+ });
661
+ });
662
+
663
+ } catch (error) {
664
+ alert('Conversion error: ' + error.message);
665
+ }
666
+ }
667
+
668
+ // Handle recording state changes
669
+ document.addEventListener('recordingStateChanged', (event) => {
670
+ console.log('Recording state changed:', event.detail);
671
+ });
672
+
673
+ //-----------------------------------
674
+ // TRACK Legacy XML conversion
675
+
676
+ function testTrackXmlConversion() {
677
+ // const xmlForm = `
678
+ // <Xforms>
679
+ // <Fields>
680
+ // <ID>input_10802764</ID>
681
+ // <TFie_PK_ID>1865032</TFie_PK_ID>
682
+ // <TVal_PK_ID>10802764</TVal_PK_ID>
683
+ // <TFIn_PK_ID>645682</TFIn_PK_ID>
684
+ // <isForm>Form</isForm>
685
+ // <LabelText>Poids</LabelText>
686
+ // <SystemName>Weight</SystemName>
687
+ // <CssStyle>cssHeader</CssStyle>
688
+ // <ControlType>Header</ControlType>
689
+ // <TFie_Fullpath> Poids</TFie_Fullpath>
690
+ // <TVal_FK_Parent_ID>0</TVal_FK_Parent_ID>
691
+ // </Fields>
692
+ // <Fields>
693
+ // <ID>input_10802765</ID>
694
+ // <TFie_PK_ID>1865032</TFie_PK_ID>
695
+ // <TVal_PK_ID>10802765</TVal_PK_ID>
696
+ // <TFIn_PK_ID>645682</TFIn_PK_ID>
697
+ // <isForm>Form Item</isForm>
698
+ // <LabelText>Poids</LabelText>
699
+ // <SystemName>Weight</SystemName>
700
+ // <CssStyle>cssHeader</CssStyle>
701
+ // <ControlType>Header</ControlType>
702
+ // <TFie_Fullpath> Poids Poids</TFie_Fullpath>
703
+ // <TVal_FK_Parent_ID>10802764</TVal_FK_Parent_ID>
704
+ // </Fields>
705
+ // <Fields>
706
+ // <ID>input_10802766</ID>
707
+ // <TFie_PK_ID>1865033</TFie_PK_ID>
708
+ // <TVal_PK_ID>10802766</TVal_PK_ID>
709
+ // <TFIn_PK_ID>645682</TFIn_PK_ID>
710
+ // <Enabled>True</Enabled>
711
+ // <isForm>Field</isForm>
712
+ // <LabelText>Poids</LabelText>
713
+ // <SystemName>Weight</SystemName>
714
+ // <HelpText/>
715
+ // <CssStyle>cssNormal</CssStyle>
716
+ // <Value/>
717
+ // <ControlType>RealPicker</ControlType>
718
+ // <ValidationRequired>Required</ValidationRequired>
719
+ // <ValidationMin>10</ValidationMin>
720
+ // <ValidationMax>3500</ValidationMax>
721
+ // <Mask/>
722
+ // <TypeId>5519</TypeId>
723
+ // <Unit>gramme(s)</Unit>
724
+ // <TFie_Fullpath> Poids Poids</TFie_Fullpath>
725
+ // <TVal_FK_Parent_ID>10802765</TVal_FK_Parent_ID>
726
+ // <DefaultValue/>
727
+ // </Fields>
728
+ // <Fields>
729
+ // <ID>input_10802767</ID>
730
+ // <TFie_PK_ID>1865034</TFie_PK_ID>
731
+ // <TVal_PK_ID>10802767</TVal_PK_ID>
732
+ // <TFIn_PK_ID>645682</TFIn_PK_ID>
733
+ // <Enabled>True</Enabled>
734
+ // <isForm>Field</isForm>
735
+ // <LabelText>Notes</LabelText>
736
+ // <SystemName>Comment</SystemName>
737
+ // <HelpText/>
738
+ // <CssStyle>cssNormal</CssStyle>
739
+ // <Value/>
740
+ // <ControlType>Multiline</ControlType>
741
+ // <ValidationRequired>Not Required</ValidationRequired>
742
+ // <ValidationMin/>
743
+ // <ValidationMax/>
744
+ // <Mask/>
745
+ // <TypeId>4231</TypeId>
746
+ // <Unit/>
747
+ // <TFie_Fullpath> Poids Notes</TFie_Fullpath>
748
+ // <TVal_FK_Parent_ID>10802765</TVal_FK_Parent_ID>
749
+ // <DefaultValue/>
750
+ // </Fields>
751
+ // </Xforms>`;
752
+ const xmlForm = `
753
+ <Xforms>
754
+ <Fields>
755
+ <ID>input_10804074</ID>
756
+ <TFie_PK_ID>1892825</TFie_PK_ID>
757
+ <TVal_PK_ID>10804074</TVal_PK_ID>
758
+ <TFIn_PK_ID>645940</TFIn_PK_ID>
759
+ <isForm>Form</isForm>
760
+ <LabelText>Mort</LabelText>
761
+ <SystemName>Death</SystemName>
762
+ <CssStyle>cssHeader</CssStyle>
763
+ <ControlType>Header</ControlType>
764
+ <TFie_Fullpath> Mort</TFie_Fullpath>
765
+ <TVal_FK_Parent_ID>0</TVal_FK_Parent_ID>
766
+ </Fields>
767
+ <Fields>
768
+ <ID>input_10804075</ID>
769
+ <TFie_PK_ID>1892825</TFie_PK_ID>
770
+ <TVal_PK_ID>10804075</TVal_PK_ID>
771
+ <TFIn_PK_ID>645940</TFIn_PK_ID>
772
+ <isForm>Form Item</isForm>
773
+ <LabelText>Mort</LabelText>
774
+ <SystemName>Death</SystemName>
775
+ <CssStyle>cssHeader</CssStyle>
776
+ <ControlType>Header</ControlType>
777
+ <TFie_Fullpath> Mort Mort</TFie_Fullpath>
778
+ <TVal_FK_Parent_ID>10804074</TVal_FK_Parent_ID>
779
+ </Fields>
780
+ <Fields>
781
+ <ID>input_10804076</ID>
782
+ <TFie_PK_ID>1892826</TFie_PK_ID>
783
+ <TVal_PK_ID>10804076</TVal_PK_ID>
784
+ <TFIn_PK_ID>645940</TFIn_PK_ID>
785
+ <Enabled>True</Enabled>
786
+ <isForm>Field</isForm>
787
+ <LabelText>Statut de sortie</LabelText>
788
+ <SystemName>Exit status</SystemName>
789
+ <HelpText></HelpText>
790
+ <CssStyle>cssNormal</CssStyle>
791
+ <Value>Death status>Dead</Value>
792
+ <ControlType>ThesaurusPicker</ControlType>
793
+ <ValidationRequired>Required</ValidationRequired>
794
+ <ValidationMin></ValidationMin>
795
+ <ValidationMax></ValidationMax>
796
+ <Mask></Mask>
797
+ <TypeId>2013199</TypeId>
798
+ <Unit></Unit>
799
+ <TFie_Fullpath> Mort Statut de sortie</TFie_Fullpath>
800
+ <TVal_FK_Parent_ID>10804075</TVal_FK_Parent_ID>
801
+ <DefaultValue>Death status>Dead</DefaultValue>
802
+ </Fields>
803
+ <Fields>
804
+ <ID>input_10804077</ID>
805
+ <TFie_PK_ID>1892827</TFie_PK_ID>
806
+ <TVal_PK_ID>10804077</TVal_PK_ID>
807
+ <TFIn_PK_ID>645940</TFIn_PK_ID>
808
+ <Enabled>True</Enabled>
809
+ <isForm>Field</isForm>
810
+ <LabelText>Date de sortie</LabelText>
811
+ <SystemName>Exit date</SystemName>
812
+ <HelpText></HelpText>
813
+ <CssStyle>cssNormal</CssStyle>
814
+ <Value></Value>
815
+ <ControlType>DatePicker</ControlType>
816
+ <ValidationRequired>Required</ValidationRequired>
817
+ <ValidationMin></ValidationMin>
818
+ <ValidationMax></ValidationMax>
819
+ <Mask></Mask>
820
+ <TypeId>4383</TypeId>
821
+ <Unit></Unit>
822
+ <TFie_Fullpath> Mort Date de sortie</TFie_Fullpath>
823
+ <TVal_FK_Parent_ID>10804075</TVal_FK_Parent_ID>
824
+ <DefaultValue></DefaultValue>
825
+ </Fields>
826
+ <Fields>
827
+ <ID>input_10804078</ID>
828
+ <TFie_PK_ID>1892828</TFie_PK_ID>
829
+ <TVal_PK_ID>10804078</TVal_PK_ID>
830
+ <TFIn_PK_ID>645940</TFIn_PK_ID>
831
+ <Enabled>False</Enabled>
832
+ <isForm>Field</isForm>
833
+ <LabelText>Position</LabelText>
834
+ <SystemName>Location</SystemName>
835
+ <HelpText></HelpText>
836
+ <CssStyle>cssNormal</CssStyle>
837
+ <Value></Value>
838
+ <ControlType>TermPicker</ControlType>
839
+ <ValidationRequired>Required</ValidationRequired>
840
+ <ValidationMin></ValidationMin>
841
+ <ValidationMax></ValidationMax>
842
+ <Mask></Mask>
843
+ <TypeId>80713</TypeId>
844
+ <Unit></Unit>
845
+ <TFie_Fullpath> Mort Position</TFie_Fullpath>
846
+ <TVal_FK_Parent_ID>10804075</TVal_FK_Parent_ID>
847
+ <DefaultValue></DefaultValue>
848
+ </Fields>
849
+ <Fields>
850
+ <ID>input_10804079</ID>
851
+ <TFie_PK_ID>1892829</TFie_PK_ID>
852
+ <TVal_PK_ID>10804079</TVal_PK_ID>
853
+ <TFIn_PK_ID>645940</TFIn_PK_ID>
854
+ <Enabled>True</Enabled>
855
+ <isForm>Field</isForm>
856
+ <LabelText>Type de mort</LabelText>
857
+ <SystemName>Death type</SystemName>
858
+ <HelpText></HelpText>
859
+ <CssStyle>cssNormal</CssStyle>
860
+ <Value></Value>
861
+ <ControlType>ThesaurusPicker</ControlType>
862
+ <ValidationRequired>Required</ValidationRequired>
863
+ <ValidationMin></ValidationMin>
864
+ <ValidationMax></ValidationMax>
865
+ <Mask></Mask>
866
+ <TypeId>167303</TypeId>
867
+ <Unit></Unit>
868
+ <TFie_Fullpath> Mort Type de mort</TFie_Fullpath>
869
+ <TVal_FK_Parent_ID>10804075</TVal_FK_Parent_ID>
870
+ <DefaultValue></DefaultValue>
871
+ </Fields>
872
+ <Fields>
873
+ <ID>input_10804080</ID>
874
+ <TFie_PK_ID>1892830</TFie_PK_ID>
875
+ <TVal_PK_ID>10804080</TVal_PK_ID>
876
+ <TFIn_PK_ID>645940</TFIn_PK_ID>
877
+ <Enabled>True</Enabled>
878
+ <isForm>Field</isForm>
879
+ <LabelText>Poids</LabelText>
880
+ <SystemName>Weight</SystemName>
881
+ <HelpText></HelpText>
882
+ <CssStyle>cssNormal</CssStyle>
883
+ <Value></Value>
884
+ <ControlType>RealPicker</ControlType>
885
+ <ValidationRequired>Not Required</ValidationRequired>
886
+ <ValidationMin>10</ValidationMin>
887
+ <ValidationMax>3500</ValidationMax>
888
+ <Mask></Mask>
889
+ <TypeId>5519</TypeId>
890
+ <Unit>gramme(s)</Unit>
891
+ <TFie_Fullpath> Mort Poids</TFie_Fullpath>
892
+ <TVal_FK_Parent_ID>10804075</TVal_FK_Parent_ID>
893
+ <DefaultValue></DefaultValue>
894
+ </Fields>
895
+ <Fields>
896
+ <ID>input_10804081</ID>
897
+ <TFie_PK_ID>1892831</TFie_PK_ID>
898
+ <TVal_PK_ID>10804081</TVal_PK_ID>
899
+ <TFIn_PK_ID>645940</TFIn_PK_ID>
900
+ <Enabled>False</Enabled>
901
+ <isForm>Field</isForm>
902
+ <LabelText>Sentinelle</LabelText>
903
+ <SystemName>Sentinel</SystemName>
904
+ <HelpText></HelpText>
905
+ <CssStyle>cssNormal</CssStyle>
906
+ <Value>Yes/No>No</Value>
907
+ <ControlType>ThesaurusPicker</ControlType>
908
+ <ValidationRequired>Required</ValidationRequired>
909
+ <ValidationMin></ValidationMin>
910
+ <ValidationMax></ValidationMax>
911
+ <Mask></Mask>
912
+ <TypeId>167278</TypeId>
913
+ <Unit></Unit>
914
+ <TFie_Fullpath> Mort Sentinelle</TFie_Fullpath>
915
+ <TVal_FK_Parent_ID>10804075</TVal_FK_Parent_ID>
916
+ <DefaultValue>Yes/No>No</DefaultValue>
917
+ </Fields>
918
+ <Fields>
919
+ <ID>input_10804082</ID>
920
+ <TFie_PK_ID>1892832</TFie_PK_ID>
921
+ <TVal_PK_ID>10804082</TVal_PK_ID>
922
+ <TFIn_PK_ID>645940</TFIn_PK_ID>
923
+ <Enabled>True</Enabled>
924
+ <isForm>Field</isForm>
925
+ <LabelText>Notes</LabelText>
926
+ <SystemName>Comment</SystemName>
927
+ <HelpText></HelpText>
928
+ <CssStyle>cssNormal</CssStyle>
929
+ <Value></Value>
930
+ <ControlType>Multiline</ControlType>
931
+ <ValidationRequired>Not Required</ValidationRequired>
932
+ <ValidationMin></ValidationMin>
933
+ <ValidationMax></ValidationMax>
934
+ <Mask></Mask>
935
+ <TypeId>4231</TypeId>
936
+ <Unit></Unit>
937
+ <TFie_Fullpath> Mort Notes</TFie_Fullpath>
938
+ <TVal_FK_Parent_ID>10804075</TVal_FK_Parent_ID>
939
+ <DefaultValue></DefaultValue>
940
+ </Fields>
941
+ </Xforms>
942
+ `;
943
+
944
+ const component = document.getElementById('demo2');
945
+ try {
946
+ component.convertXmlToJson(xmlForm).then((jsonresult) => {
947
+ const jsonresultsaved = JSON.parse(JSON.stringify(jsonresult));
948
+ const jsonresultSTR = JSON.stringify(jsonresult, null, 2).replace("'", "");
949
+ const backToXml = component.convertJsonToXml(jsonresult).then((xmlresult) => {
950
+ const resultDiv = document.getElementById('track-xml-result');
951
+ const xmlContent = document.getElementById('track-xml-content');
952
+
953
+ xmlContent.innerHTML = `
954
+ <strong>Original XML:</strong>
955
+ <br />
956
+ <textarea>
957
+ ${xmlForm}
958
+ </textarea>
959
+ <br />
960
+
961
+ <strong>Converted to JSON:</strong>
962
+ ${jsonresultSTR}
963
+ <br />
964
+ <br />
965
+
966
+ <strong>Back to XML:</strong>
967
+ <br />
968
+ <textarea>
969
+ ${xmlresult}
970
+ </textarea>
971
+ <br />
972
+
973
+ <div>To Component Result:</div>
974
+ <voice-input-module
975
+ id="fromxml"
976
+ form-json='${jsonresultSTR}'
977
+ api-key="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"
978
+ render-form="true"
979
+ display-status="true"
980
+ debug="true"
981
+ context="track"
982
+ language="fr"
983
+ classification-root-url="http://localhost:8888"
984
+ >
985
+ </voice-input-module>
986
+ <br/><br/>
987
+ <textarea id='toxmlaftervoice'></textarea>
988
+ `;
989
+
990
+ resultDiv.style.display = 'block';
991
+
992
+ document.getElementById('fromxml').addEventListener('formFilled', (event) => {
993
+ const result = event.detail;
994
+ console.log('fromxml Demo Form Filled:', result);
995
+
996
+ component.convertJsonToXml(result.data).then((finalxmlresult) => {
997
+ const finalxmlContent = document.getElementById('toxmlaftervoice');
998
+ console.log("finalxmlContent", finalxmlContent);
999
+
1000
+ finalxmlContent.innerHTML = `
1001
+ ${finalxmlresult}
1002
+ `
1003
+ });
1004
+ });
1005
+ });
1006
+ });
1007
+
1008
+ } catch (error) {
1009
+ alert('Conversion error: ' + error.message);
1010
+ }
1011
+ }
1012
+
1013
+ </script>
1014
+ </body>
1015
+ </html>