@ngockhoale/ukit 1.1.6

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 (344) hide show
  1. package/CHANGELOG.md +179 -0
  2. package/LICENSE +21 -0
  3. package/README.md +189 -0
  4. package/bin/ukit +30 -0
  5. package/manifests/platform.full.yaml +1194 -0
  6. package/package.json +71 -0
  7. package/scripts/bug/triage.mjs +37 -0
  8. package/scripts/index/build-index.mjs +35 -0
  9. package/scripts/index/query-index.mjs +92 -0
  10. package/scripts/index/refresh-index.mjs +85 -0
  11. package/scripts/release/verify-release.mjs +56 -0
  12. package/src/bug/triageBug.js +123 -0
  13. package/src/cli/adapters.js +148 -0
  14. package/src/cli/commands/diff.js +51 -0
  15. package/src/cli/commands/doctor.js +125 -0
  16. package/src/cli/commands/indexArgs.js +73 -0
  17. package/src/cli/commands/indexTools.js +509 -0
  18. package/src/cli/commands/install.js +293 -0
  19. package/src/cli/commands/memory.js +126 -0
  20. package/src/cli/commands/status.js +8 -0
  21. package/src/cli/commands/uninstall.js +51 -0
  22. package/src/cli/index.js +109 -0
  23. package/src/context/detectProjectContext.js +49 -0
  24. package/src/context/detectProviders.js +12 -0
  25. package/src/core/applyPlan.js +89 -0
  26. package/src/core/buildPlan.js +228 -0
  27. package/src/core/compact/index.js +294 -0
  28. package/src/core/compact/threshold.js +936 -0
  29. package/src/core/diffPlan.js +73 -0
  30. package/src/core/ensureGitignore.js +117 -0
  31. package/src/core/fileOps.js +188 -0
  32. package/src/core/memory/hygiene.js +160 -0
  33. package/src/core/memory/index.js +2 -0
  34. package/src/core/memory/retrieval.js +476 -0
  35. package/src/core/memory/store.js +202 -0
  36. package/src/core/metadata.js +132 -0
  37. package/src/core/migrateLegacy.js +139 -0
  38. package/src/core/output/index.js +1309 -0
  39. package/src/core/paths.js +13 -0
  40. package/src/core/report.js +17 -0
  41. package/src/core/router/advisor.js +42 -0
  42. package/src/core/router/index.js +2 -0
  43. package/src/core/router/router.js +164 -0
  44. package/src/core/runInstallPipeline.js +365 -0
  45. package/src/core/runtimeConfig.js +190 -0
  46. package/src/core/runtimePaths.js +24 -0
  47. package/src/core/status.js +186 -0
  48. package/src/core/token/index.js +328 -0
  49. package/src/core/uninstall.js +246 -0
  50. package/src/core/validation/confidence.js +89 -0
  51. package/src/core/validation/index.js +2 -0
  52. package/src/core/validation/validator.js +165 -0
  53. package/src/index/buildIndex.js +1392 -0
  54. package/src/index/gitHooks.js +109 -0
  55. package/src/index/importResolution.js +377 -0
  56. package/src/index/languageTools.js +127 -0
  57. package/src/index/paths.js +27 -0
  58. package/src/index/queryIndex.js +637 -0
  59. package/src/index/relatedTests.js +237 -0
  60. package/src/index/resolveContext.js +345 -0
  61. package/src/index/routeCatalog.js +258 -0
  62. package/src/index/taskRouting.js +677 -0
  63. package/src/index/verificationPlan.js +437 -0
  64. package/src/manifest/loadManifest.js +22 -0
  65. package/src/manifest/selectItems.js +78 -0
  66. package/src/manifest/validateManifest.js +115 -0
  67. package/src/render/buildVariables.js +39 -0
  68. package/src/render/renderTemplate.js +44 -0
  69. package/src/stack/detectStack.js +213 -0
  70. package/templates/.claude/agents/bug-debugger.md +57 -0
  71. package/templates/.claude/agents/feature-implementer.md +55 -0
  72. package/templates/.claude/config/providers.md +25 -0
  73. package/templates/.claude/hooks/auto-allow-bash.sh +155 -0
  74. package/templates/.claude/hooks/auto-prune-bash.sh +75 -0
  75. package/templates/.claude/hooks/block-dangerous.sh +54 -0
  76. package/templates/.claude/hooks/compress-output.sh +17 -0
  77. package/templates/.claude/hooks/protect-files.sh +37 -0
  78. package/templates/.claude/hooks/reinject-context.sh +28 -0
  79. package/templates/.claude/hooks/session-start.md +13 -0
  80. package/templates/.claude/hooks/skill-router.sh +1681 -0
  81. package/templates/.claude/hooks/verification-guard.sh +271 -0
  82. package/templates/.claude/settings.json +144 -0
  83. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  84. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  85. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  86. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  87. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  88. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  89. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  90. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  91. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  92. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  93. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  94. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  95. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  96. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  97. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  98. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  99. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  100. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  101. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  102. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  103. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  104. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  105. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  106. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  107. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  108. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  109. package/templates/.claude/skills/_shared/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  110. package/templates/.claude/skills/_shared/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  111. package/templates/.claude/skills/_shared/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  112. package/templates/.claude/skills/_shared/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  113. package/templates/.claude/skills/_shared/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  114. package/templates/.claude/skills/_shared/ooxml/schemas/mce/mc.xsd +75 -0
  115. package/templates/.claude/skills/_shared/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  116. package/templates/.claude/skills/_shared/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  117. package/templates/.claude/skills/_shared/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  118. package/templates/.claude/skills/_shared/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  119. package/templates/.claude/skills/_shared/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  120. package/templates/.claude/skills/_shared/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  121. package/templates/.claude/skills/_shared/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  122. package/templates/.claude/skills/_shared/ooxml/scripts/pack.py +159 -0
  123. package/templates/.claude/skills/_shared/ooxml/scripts/unpack.py +29 -0
  124. package/templates/.claude/skills/_shared/ooxml/scripts/validate.py +69 -0
  125. package/templates/.claude/skills/_shared/ooxml/scripts/validation/__init__.py +15 -0
  126. package/templates/.claude/skills/_shared/ooxml/scripts/validation/base.py +951 -0
  127. package/templates/.claude/skills/_shared/ooxml/scripts/validation/docx.py +274 -0
  128. package/templates/.claude/skills/_shared/ooxml/scripts/validation/pptx.py +315 -0
  129. package/templates/.claude/skills/_shared/ooxml/scripts/validation/redlining.py +279 -0
  130. package/templates/.claude/skills/backend-api/SKILL.md +26 -0
  131. package/templates/.claude/skills/canvas-design/LICENSE.txt +202 -0
  132. package/templates/.claude/skills/canvas-design/SKILL.md +130 -0
  133. package/templates/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  134. package/templates/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  135. package/templates/.claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  136. package/templates/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  137. package/templates/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  138. package/templates/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  139. package/templates/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  140. package/templates/.claude/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  141. package/templates/.claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  142. package/templates/.claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  143. package/templates/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  144. package/templates/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  145. package/templates/.claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  146. package/templates/.claude/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  147. package/templates/.claude/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  148. package/templates/.claude/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  149. package/templates/.claude/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  150. package/templates/.claude/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  151. package/templates/.claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  152. package/templates/.claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  153. package/templates/.claude/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  154. package/templates/.claude/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  155. package/templates/.claude/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  156. package/templates/.claude/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  157. package/templates/.claude/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  158. package/templates/.claude/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  159. package/templates/.claude/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  160. package/templates/.claude/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  161. package/templates/.claude/skills/code-review/SKILL.md +97 -0
  162. package/templates/.claude/skills/debugging-toolkit/SKILL.md +156 -0
  163. package/templates/.claude/skills/delivery/SKILL.md +92 -0
  164. package/templates/.claude/skills/discover-security/SKILL.md +86 -0
  165. package/templates/.claude/skills/docker-packaging/SKILL.md +60 -0
  166. package/templates/.claude/skills/docs-manager/SKILL.md +465 -0
  167. package/templates/.claude/skills/docs-manager/init-project-docs.sh +70 -0
  168. package/templates/.claude/skills/docs-manager/templates/README.md.template +50 -0
  169. package/templates/.claude/skills/docs-manager/templates/agent-roles.md.template +24 -0
  170. package/templates/.claude/skills/docs-manager/templates/coding-conventions.md.template +28 -0
  171. package/templates/.claude/skills/docs-manager/templates/memory.md.template +30 -0
  172. package/templates/.claude/skills/docs-manager/templates/onboarding.md.template +20 -0
  173. package/templates/.claude/skills/docs-manager/templates/project.md.template +26 -0
  174. package/templates/.claude/skills/docs-quality/SKILL.md +148 -0
  175. package/templates/.claude/skills/docx/LICENSE.txt +30 -0
  176. package/templates/.claude/skills/docx/SKILL.md +197 -0
  177. package/templates/.claude/skills/docx/docx-js.md +350 -0
  178. package/templates/.claude/skills/docx/ooxml.md +610 -0
  179. package/templates/.claude/skills/docx/scripts/__init__.py +1 -0
  180. package/templates/.claude/skills/docx/scripts/document.py +1276 -0
  181. package/templates/.claude/skills/docx/scripts/templates/comments.xml +3 -0
  182. package/templates/.claude/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  183. package/templates/.claude/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  184. package/templates/.claude/skills/docx/scripts/templates/commentsIds.xml +3 -0
  185. package/templates/.claude/skills/docx/scripts/templates/people.xml +3 -0
  186. package/templates/.claude/skills/docx/scripts/utilities.py +374 -0
  187. package/templates/.claude/skills/duraone/SKILL.md +204 -0
  188. package/templates/.claude/skills/duraone/references/backend.md +636 -0
  189. package/templates/.claude/skills/duraone/references/frontend.md +1506 -0
  190. package/templates/.claude/skills/duraone/references/sql.md +631 -0
  191. package/templates/.claude/skills/duraone/references/workflow.md +520 -0
  192. package/templates/.claude/skills/executing-plans/SKILL.md +76 -0
  193. package/templates/.claude/skills/file-organizer/SKILL.md +433 -0
  194. package/templates/.claude/skills/frontend/SKILL.md +26 -0
  195. package/templates/.claude/skills/frontend-design/LICENSE.txt +177 -0
  196. package/templates/.claude/skills/frontend-design/SKILL.md +42 -0
  197. package/templates/.claude/skills/frontend-vue/SKILL.md +127 -0
  198. package/templates/.claude/skills/frontend-vue/components/Control/Box.vue +137 -0
  199. package/templates/.claude/skills/frontend-vue/components/Control/Button.vue +93 -0
  200. package/templates/.claude/skills/frontend-vue/components/Control/ButtonBar.vue +29 -0
  201. package/templates/.claude/skills/frontend-vue/components/Control/ButtonFloat.vue +62 -0
  202. package/templates/.claude/skills/frontend-vue/components/Control/CheckButton.vue +75 -0
  203. package/templates/.claude/skills/frontend-vue/components/Control/Checkbox.vue +58 -0
  204. package/templates/.claude/skills/frontend-vue/components/Control/Datetime.vue +148 -0
  205. package/templates/.claude/skills/frontend-vue/components/Control/Dropdownlist.vue +156 -0
  206. package/templates/.claude/skills/frontend-vue/components/Control/Input.vue +106 -0
  207. package/templates/.claude/skills/frontend-vue/components/Control/Label.vue +38 -0
  208. package/templates/.claude/skills/frontend-vue/components/Control/Master/BoxColumn.vue +24 -0
  209. package/templates/.claude/skills/frontend-vue/components/Control/Popup/Confirm.vue +33 -0
  210. package/templates/.claude/skills/frontend-vue/components/Control/Popup/Info.vue +32 -0
  211. package/templates/.claude/skills/frontend-vue/components/Control/Popup/ModalInfo.vue +39 -0
  212. package/templates/.claude/skills/frontend-vue/components/Control/Popup/Reject.vue +64 -0
  213. package/templates/.claude/skills/frontend-vue/components/Control/Tag.vue +82 -0
  214. package/templates/.claude/skills/frontend-vue/components/Control/Upload.vue +61 -0
  215. package/templates/.claude/skills/frontend-vue/components/ControlMobile/Dropdownlist.vue +103 -0
  216. package/templates/.claude/skills/frontend-vue/components/ControlMobile/PagingBar.vue +108 -0
  217. package/templates/.claude/skills/frontend-vue/components/ControlMobile/UploadImage.vue +137 -0
  218. package/templates/.claude/skills/frontend-vue/components/Grid/AG.vue +806 -0
  219. package/templates/.claude/skills/frontend-vue/components/Grid/AntTable.vue +253 -0
  220. package/templates/.claude/skills/frontend-vue/components/Grid/CustomDropdownEditor.vue +43 -0
  221. package/templates/.claude/skills/frontend-vue/components/Grid/CustomDropdownEditorEnable.vue +55 -0
  222. package/templates/.claude/skills/frontend-vue/components/Grid/HtmlTable.vue +40 -0
  223. package/templates/.claude/skills/frontend-vue/components/PDFViewer.vue +25 -0
  224. package/templates/.claude/skills/frontend-vue/components/Panel/FormView.vue +309 -0
  225. package/templates/.claude/skills/frontend-vue/components/Partial/Footer.vue +23 -0
  226. package/templates/.claude/skills/frontend-vue/components/Partial/Header.vue +265 -0
  227. package/templates/.claude/skills/frontend-vue/components/Partial/Sidebar.vue +122 -0
  228. package/templates/.claude/skills/frontend-vue/components/Template.vue +16 -0
  229. package/templates/.claude/skills/frontend-vue/components/View/Form.vue +89 -0
  230. package/templates/.claude/skills/frontend-vue/composables/indexDBStore.js +140 -0
  231. package/templates/.claude/skills/frontend-vue/composables/masterApi.js +362 -0
  232. package/templates/.claude/skills/frontend-vue/composables/state.js +578 -0
  233. package/templates/.claude/skills/frontend-vue/composables/useRequest.js +221 -0
  234. package/templates/.claude/skills/frontend-vue/composables/useSession.js +179 -0
  235. package/templates/.claude/skills/frontend-vue/composables/useTranslation.js +54 -0
  236. package/templates/.claude/skills/frontend-vue/composables/useWebSocket.js +257 -0
  237. package/templates/.claude/skills/frontend-vue/composables/userObj.js +111 -0
  238. package/templates/.claude/skills/frontend-vue/composables/utils.js +322 -0
  239. package/templates/.claude/skills/frontend-vue/reference/composables-example.vue +320 -0
  240. package/templates/.claude/skills/frontend-vue/reference/form-example.vue +183 -0
  241. package/templates/.claude/skills/frontend-vue/reference/grid-example.vue +147 -0
  242. package/templates/.claude/skills/frontend-vue/reference/masterdata-example/[id].vue +106 -0
  243. package/templates/.claude/skills/frontend-vue/reference/masterdata-example/index.vue +58 -0
  244. package/templates/.claude/skills/frontend-vue/reference/popup-example.vue +159 -0
  245. package/templates/.claude/skills/pdf/LICENSE.txt +30 -0
  246. package/templates/.claude/skills/pdf/SKILL.md +294 -0
  247. package/templates/.claude/skills/pdf/forms.md +205 -0
  248. package/templates/.claude/skills/pdf/reference.md +612 -0
  249. package/templates/.claude/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  250. package/templates/.claude/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  251. package/templates/.claude/skills/pdf/scripts/check_fillable_fields.py +12 -0
  252. package/templates/.claude/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  253. package/templates/.claude/skills/pdf/scripts/create_validation_image.py +41 -0
  254. package/templates/.claude/skills/pdf/scripts/extract_form_field_info.py +152 -0
  255. package/templates/.claude/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  256. package/templates/.claude/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  257. package/templates/.claude/skills/pdf-processing/SKILL.md +107 -0
  258. package/templates/.claude/skills/pdf-processing-pro/FORMS.md +610 -0
  259. package/templates/.claude/skills/pdf-processing-pro/OCR.md +137 -0
  260. package/templates/.claude/skills/pdf-processing-pro/SKILL.md +296 -0
  261. package/templates/.claude/skills/pdf-processing-pro/TABLES.md +626 -0
  262. package/templates/.claude/skills/pdf-processing-pro/scripts/analyze_form.py +307 -0
  263. package/templates/.claude/skills/postgres/SKILL.md +69 -0
  264. package/templates/.claude/skills/postgres/reference/fn_get_examples.sql +208 -0
  265. package/templates/.claude/skills/postgres/reference/fn_rpt_examples.sql +239 -0
  266. package/templates/.claude/skills/postgres/reference/utility_functions.sql +94 -0
  267. package/templates/.claude/skills/pptx/LICENSE.txt +30 -0
  268. package/templates/.claude/skills/pptx/SKILL.md +484 -0
  269. package/templates/.claude/skills/pptx/html2pptx.md +625 -0
  270. package/templates/.claude/skills/pptx/ooxml.md +427 -0
  271. package/templates/.claude/skills/pptx/scripts/html2pptx.js +979 -0
  272. package/templates/.claude/skills/pptx/scripts/inventory.py +1020 -0
  273. package/templates/.claude/skills/pptx/scripts/rearrange.py +231 -0
  274. package/templates/.claude/skills/pptx/scripts/replace.py +385 -0
  275. package/templates/.claude/skills/pptx/scripts/thumbnail.py +450 -0
  276. package/templates/.claude/skills/repo-maintenance/SKILL.md +97 -0
  277. package/templates/.claude/skills/research/EXAMPLES.md +434 -0
  278. package/templates/.claude/skills/research/REFERENCE.md +399 -0
  279. package/templates/.claude/skills/research/SKILL.md +136 -0
  280. package/templates/.claude/skills/root-cause-tracing/SKILL.md +174 -0
  281. package/templates/.claude/skills/root-cause-tracing/find-polluter.sh +63 -0
  282. package/templates/.claude/skills/sharing-skills/SKILL.md +194 -0
  283. package/templates/.claude/skills/sql-optimization-patterns/SKILL.md +493 -0
  284. package/templates/.claude/skills/subagent-driven-development/SKILL.md +189 -0
  285. package/templates/.claude/skills/systematic-debugging/CREATION-LOG.md +119 -0
  286. package/templates/.claude/skills/systematic-debugging/SKILL.md +295 -0
  287. package/templates/.claude/skills/systematic-debugging/test-academic.md +14 -0
  288. package/templates/.claude/skills/systematic-debugging/test-pressure-1.md +58 -0
  289. package/templates/.claude/skills/systematic-debugging/test-pressure-2.md +68 -0
  290. package/templates/.claude/skills/systematic-debugging/test-pressure-3.md +69 -0
  291. package/templates/.claude/skills/test-driven-development/SKILL.md +364 -0
  292. package/templates/.claude/skills/testing-anti-patterns/SKILL.md +302 -0
  293. package/templates/.claude/skills/testing-quality/SKILL.md +97 -0
  294. package/templates/.claude/skills/verification-before-completion/SKILL.md +139 -0
  295. package/templates/.claude/skills/webapp-testing/LICENSE.txt +202 -0
  296. package/templates/.claude/skills/webapp-testing/SKILL.md +96 -0
  297. package/templates/.claude/skills/webapp-testing/examples/console_logging.py +35 -0
  298. package/templates/.claude/skills/webapp-testing/examples/element_discovery.py +40 -0
  299. package/templates/.claude/skills/webapp-testing/examples/static_html_automation.py +33 -0
  300. package/templates/.claude/skills/webapp-testing/scripts/with_server.py +106 -0
  301. package/templates/.claude/ukit/index/build-index.mjs +28 -0
  302. package/templates/.claude/ukit/index/cache-utils.mjs +140 -0
  303. package/templates/.claude/ukit/index/lib/index-core.mjs +2800 -0
  304. package/templates/.claude/ukit/index/query-index.mjs +150 -0
  305. package/templates/.claude/ukit/index/refresh-index.mjs +57 -0
  306. package/templates/.claude/ukit/index/reset-auto-permissions.mjs +76 -0
  307. package/templates/.claude/ukit/index/resolve-context.mjs +279 -0
  308. package/templates/.claude/ukit/index/route-catalog.mjs +258 -0
  309. package/templates/.claude/ukit/index/route-task.mjs +1994 -0
  310. package/templates/.claude/ukit/index/triage.mjs +133 -0
  311. package/templates/.claude/ukit/index/verify-context.mjs +689 -0
  312. package/templates/.claude/ukit/runtime/compact-threshold.mjs +1013 -0
  313. package/templates/.claude/ukit/runtime/output-compression.mjs +1340 -0
  314. package/templates/.claude/ukit/runtime/reinject-context.mjs +874 -0
  315. package/templates/.claude/ukit/runtime/token-utils.mjs +500 -0
  316. package/templates/.codex/README.md +83 -0
  317. package/templates/.codex/settings.json +187 -0
  318. package/templates/.gitignore +75 -0
  319. package/templates/AGENTS.md +116 -0
  320. package/templates/CLAUDE.md +93 -0
  321. package/templates/adapter-presets/antigravity/README.md +22 -0
  322. package/templates/adapter-presets/antigravity/rules.md +49 -0
  323. package/templates/adapter-presets/claude/settings.local.json +42 -0
  324. package/templates/adapter-presets/codex/settings.local.json +6 -0
  325. package/templates/adapter-presets/opencode/opencode.template.json +1 -0
  326. package/templates/docs/BUGFIX.md +20 -0
  327. package/templates/docs/BUG_INDEX.md +12 -0
  328. package/templates/docs/BUG_METRICS.md +7 -0
  329. package/templates/docs/BUG_TEMPLATE.md +13 -0
  330. package/templates/docs/CODE_MAP.md +35 -0
  331. package/templates/docs/INSTALL.md +113 -0
  332. package/templates/docs/MEMORY.md +49 -0
  333. package/templates/docs/PROJECT.md +50 -0
  334. package/templates/docs/UKIT_USAGE_GUIDE.md +147 -0
  335. package/templates/docs/WORKLOG.md +10 -0
  336. package/templates/ukit/README.md +14 -0
  337. package/templates/ukit/storage/cache/compact-history.json +3 -0
  338. package/templates/ukit/storage/cache/compact-pressure.json +1 -0
  339. package/templates/ukit/storage/cache/output-history.json +3 -0
  340. package/templates/ukit/storage/cache/prompt-cache.json +3 -0
  341. package/templates/ukit/storage/config.json +37 -0
  342. package/templates/ukit/storage/memory/projects/.gitkeep +2 -0
  343. package/templates/ukit/storage/memory/sessions/.gitkeep +0 -0
  344. package/templates/ukit/storage/memory/user.json +5 -0
@@ -0,0 +1,309 @@
1
+ <template>
2
+ <ControlBox col="12" type="info">
3
+ <div class="row">
4
+ <template v-for="item in columns">
5
+ <template v-if="item['show_form']">
6
+ <template v-if="item['type'] === 'auto_generate'">
7
+ <ControlMasterBoxColumn :item="item">
8
+ <ControlInput :disabled="true" :name="item['title']" :id="item['key']" :required="item['required']" v-model="currentObj[item['key']]" />
9
+ </ControlMasterBoxColumn>
10
+ </template>
11
+ <template v-if="item['type'] === 'input'">
12
+ <ControlMasterBoxColumn :item="item">
13
+ <ControlInput :disabled="item['primary'] && state.is_update" :name="item['title']" :id="item['key']" :required="item['required']" v-model="currentObj[item['key']]" />
14
+ </ControlMasterBoxColumn>
15
+ </template>
16
+ <template v-if="item['type'] === 'number'">
17
+ <ControlMasterBoxColumn :item="item">
18
+ <ControlInput :disabled="item['primary'] && state.is_update" type="number" :name="item['title']" :id="item['key']" :required="item['required']" v-model="currentObj[item['key']]" />
19
+ </ControlMasterBoxColumn>
20
+ </template>
21
+ <template v-if="item['type'] === 'password'">
22
+ <ControlMasterBoxColumn :item="item">
23
+ <ControlInput :disabled="item['primary'] && state.is_update" type="password" :name="item['title']" :id="item['key']" :required="item['required']" v-model="currentObj[item['key']]" />
24
+ </ControlMasterBoxColumn>
25
+ </template>
26
+ <template v-if="item['type'] === 'boolean_dropdown'">
27
+ <ControlMasterBoxColumn :item="item">
28
+ <ControlDropdownlist :disabled="item['primary'] && state.is_update" :name="item['title']" :id="item['key']" :list="dropdown_data[item['key']]" :required="item['required']" v-model="currentObj[item['key']]" />
29
+ </ControlMasterBoxColumn>
30
+ </template>
31
+ <template v-if="item['type'] === 'dropdown'">
32
+ <ControlMasterBoxColumn :item="item">
33
+ <ControlDropdownlist :disabled="item['primary'] && state.is_update" :name="item['title']" :id="item['key']" :list="dropdown_data[item['key']]" :required="item['required']" v-model="currentObj[item['key']]" />
34
+ </ControlMasterBoxColumn>
35
+ </template>
36
+ <template v-if="item['type'] === 'dropdown_multiple'">
37
+ <ControlMasterBoxColumn :item="item">
38
+ <ControlDropdownlist :disabled="item['primary'] && state.is_update" :name="item['title']" :id="item['key']" :multiple="true" :list="dropdown_data[item['key']]" :required="item['required']" v-model="currentObj[item['key']]" />
39
+ </ControlMasterBoxColumn>
40
+ </template>
41
+ <template v-if="item['type'] === 'date'">
42
+ <ControlMasterBoxColumn :item="item">
43
+ <ControlDatetime :disabled="item['primary'] && state.is_update" :name="item['title']" :id="item['key']" :required="item['required']" v-model="currentObj[item['key']]" />
44
+ </ControlMasterBoxColumn>
45
+ </template>
46
+ <template v-if="item['type'] === 'datetime'">
47
+ <ControlMasterBoxColumn :item="item">
48
+ <ControlDatetime :disabled="item['primary'] && state.is_update" :show_time="true" :name="item['title']" :id="item['key']" :required="item['required']" v-model="currentObj[item['key']]" />
49
+ </ControlMasterBoxColumn>
50
+ </template>
51
+ <template v-if="item['type'] === 'textarea'">
52
+ <ControlMasterBoxColumn :item="item">
53
+ <ControlInput :disabled="item['primary'] && state.is_update" type="textarea" :name="item['title']" :id="item['key']" :required="item['required']" v-model="currentObj[item['key']]" />
54
+ </ControlMasterBoxColumn>
55
+ </template>
56
+ </template>
57
+ <!--
58
+ <div v-if="item['type'] === 'checkbox'">
59
+ <ControlCheckbox :name="item['name']" :id="item['id']" :classes="item['classes']" :required="item['required']" v-model="item['value']" />
60
+ </div>
61
+ <div v-if="item['type'] === 'button'">
62
+ <ButtonControl :button_list="item['button_list']" />
63
+ </div> -->
64
+ </template>
65
+ </div>
66
+ </ControlBox>
67
+ <div class="row mb-5">
68
+ <div class="d-flex justify-content-between text-center" v-if="allow_edit">
69
+ <ControlButton type="secondary" name="Close" @onClick="clickClose()" />
70
+ <ControlButton type="danger" name="Delete" @onClick="clickDelete()" />
71
+ <ControlButton type="success" name="Save" @onClick="clickSave()" />
72
+ </div>
73
+ <div class="text-center" v-if="!allow_edit">
74
+ <ControlButton type="secondary" name="Close" @onClick="clickClose()" />
75
+ </div>
76
+ </div>
77
+ </template>
78
+ <script>
79
+ export default {
80
+ props: {
81
+ workingObj: {
82
+ type: Object,
83
+ default: {},
84
+ },
85
+ rows: {
86
+ type: Array,
87
+ default: [],
88
+ },
89
+ table: {
90
+ type: String,
91
+ default: "",
92
+ },
93
+ columns: {
94
+ type: Array,
95
+ default: [],
96
+ },
97
+ table_schema: {
98
+ type: String,
99
+ default: "",
100
+ },
101
+ allow_edit: {
102
+ type: Boolean,
103
+ default: true,
104
+ },
105
+ },
106
+ data() {
107
+ return {
108
+ dropdown_data: {},
109
+ button_list: [
110
+ { name: "Close", type: "secondary" },
111
+ { name: "Delete", type: "danger" },
112
+ { name: "Save", type: "success" },
113
+ ],
114
+ currentObj: {},
115
+ key_list: [],
116
+ };
117
+ },
118
+ emits: ["reloadData"],
119
+ methods: {
120
+ async reloadData() {
121
+ this.$emit("reloadData");
122
+ },
123
+ check_validation() {
124
+ for (let i = 0; i < this.columns.length; i++) {
125
+ if (this.columns[i]["required"] && check_is_null_or_blank(this.workingObj[this.columns[i]["key"]])) {
126
+ show_message("error", "Please fill all required field: " + this.columns[i]["title"]);
127
+ return false;
128
+ }
129
+ if (this.columns[i]["primary"]) {
130
+ const check = [...this.rows].filter((e) => {
131
+ if (!state.is_update) {
132
+ return e[this.columns[i]["key"]] === this.workingObj[this.columns[i]["key"]];
133
+ }
134
+ });
135
+ if (check.length > 0) {
136
+ show_message("error", "Please Dupplicate value at: " + this.workingObj[this.columns[i]["key"]] + " on field: " + this.columns[i]["title"]);
137
+ return false;
138
+ }
139
+ }
140
+ }
141
+ return true;
142
+ },
143
+ async clickSave() {
144
+ if (!this.check_validation()) return;
145
+ let data = this.workingObj;
146
+ data["schema"] = this.table_schema;
147
+ data["table"] = this.table;
148
+ let resp = await request("/save", data);
149
+ if(resp['success']) {
150
+ let data = {
151
+ schema: this.table_schema,
152
+ sp_name: "sp_set_new_code",
153
+ params: "()",
154
+ };
155
+ await request("/call", data);
156
+ }
157
+ this.reloadData();
158
+ },
159
+ async clickDelete() {
160
+ let data = {};
161
+ data["id_" + this.table] = this.workingObj["id_" + this.table];
162
+ data["schema"] = this.table_schema;
163
+ data["table"] = this.table;
164
+ await request("/hard_delete", data);
165
+ this.reloadData();
166
+ },
167
+ async clickClose() {
168
+ this.reloadData();
169
+ },
170
+ async getDropdownValue() {
171
+ this.key_list = [];
172
+ this.dropdown_data = {};
173
+ for (let i = 0; i < this.columns.length; i++) {
174
+ if (this.columns[i]["type"].includes("dropdown")) {
175
+ let data = {
176
+ schema: this.columns[i]["dropdown_info"]["schema"],
177
+ table: this.columns[i]["dropdown_info"]["table"],
178
+ columns: [...new Set([...this.columns[i]["dropdown_info"]["field"].label, ...this.columns[i]["dropdown_info"]["field"].value])],
179
+ };
180
+ if (!check_is_null_or_blank(this.columns[i]["dropdown_info"]["conditions"])) {
181
+ if (!check_is_null_or_blank(this.columns[i]["dropdown_info"]["conditions"]["related_field"])) {
182
+ const fieldname = this.columns[i]["dropdown_info"]["conditions"]["related_field"];
183
+ const check_field = [...this.columns].filter((e) => {
184
+ return e["key"] === this.columns[i]["dropdown_info"]["conditions"]["related_field"];
185
+ });
186
+ if (check_field.length > 0) {
187
+ const cond = {};
188
+ cond[fieldname] = this.workingObj[fieldname];
189
+ data["conditions"] = JSON.stringify(cond);
190
+ let to_add_keylist = {};
191
+ to_add_keylist["update"] = this.columns[i]["key"];
192
+ to_add_keylist["watch"] = fieldname;
193
+ this.key_list.push(to_add_keylist);
194
+ }
195
+ } else {
196
+ const fieldname = Object.keys(this.columns[i]["dropdown_info"]["conditions"])[0];
197
+ const val = this.columns[i]["dropdown_info"]["conditions"][fieldname];
198
+ const cond = {};
199
+ cond[fieldname] = val;
200
+ data["conditions"] = JSON.stringify(cond);
201
+ }
202
+ }
203
+ let resp = await request("/select", data, "get");
204
+ const extractedData = resp.map((obj) => {
205
+ let new_label = "";
206
+ let new_value = "";
207
+ for (let j = 0; j < this.columns[i]["dropdown_info"]["field"].label.length; j++) {
208
+ new_label += obj[this.columns[i]["dropdown_info"]["field"].label[j]] + " - ";
209
+ }
210
+ for (let j = 0; j < this.columns[i]["dropdown_info"]["field"].value.length; j++) {
211
+ new_value += obj[this.columns[i]["dropdown_info"]["field"].value[j]] + " - ";
212
+ }
213
+ new_label = new_label.replace(/ - $/, "");
214
+ new_value = new_value.replace(/ - $/, "");
215
+ return {
216
+ label: new_label,
217
+ value: new_value,
218
+ };
219
+ });
220
+ this.dropdown_data[this.columns[i]["key"]] = extractedData;
221
+ }
222
+ }
223
+ },
224
+ async getDropdownValueOfKey(keyname) {
225
+ let filter_list = [...this.columns].filter((e) => {
226
+ return e["key"] === keyname;
227
+ });
228
+ if (filter_list.length === 0) return;
229
+ let data = {
230
+ schema: filter_list[0]["dropdown_info"]["schema"],
231
+ table: filter_list[0]["dropdown_info"]["table"],
232
+ columns: [...new Set([...filter_list[0]["dropdown_info"]["field"].label, ...filter_list[0]["dropdown_info"]["field"].value])],
233
+ };
234
+ if (!check_is_null_or_blank(filter_list[0]["dropdown_info"]["conditions"])) {
235
+ const fieldname = filter_list[0]["dropdown_info"]["conditions"]["related_field"];
236
+ const check_field = [...this.columns].filter((e) => {
237
+ return e["key"] === filter_list[0]["dropdown_info"]["conditions"]["related_field"];
238
+ });
239
+ if (check_field.length > 0) {
240
+ const cond = {};
241
+ cond[fieldname] = this.workingObj[fieldname];
242
+ data["conditions"] = JSON.stringify(cond);
243
+ }
244
+ }
245
+ let resp = await request("/select", data, "get");
246
+ const extractedData = resp.map((obj) => {
247
+ let new_label = "";
248
+ let new_value = "";
249
+ for (let j = 0; j < filter_list[0]["dropdown_info"]["field"].label.length; j++) {
250
+ new_label += obj[filter_list[0]["dropdown_info"]["field"].label[j]] + " - ";
251
+ }
252
+ for (let j = 0; j < filter_list[0]["dropdown_info"]["field"].value.length; j++) {
253
+ new_value += obj[filter_list[0]["dropdown_info"]["field"].value[j]] + " - ";
254
+ }
255
+ new_label = new_label.replace(/ - $/, "");
256
+ new_value = new_value.replace(/ - $/, "");
257
+ return {
258
+ label: new_label,
259
+ value: new_value,
260
+ };
261
+ });
262
+ this.dropdown_data[filter_list[0]["key"]] = extractedData;
263
+ },
264
+ async check_update_value(newVal, oldVal) {
265
+ if (this.key_list.length === 0) return;
266
+ for (let i = 0; i < this.key_list.length; i++) {
267
+ if (newVal[this.key_list[i]["watch"]] !== oldVal[this.key_list[i]["watch"]]) {
268
+ this.currentObj[this.key_list[i]["update"]] = "";
269
+ await this.getDropdownValueOfKey(this.key_list[i]["update"]);
270
+ }
271
+ }
272
+ },
273
+ },
274
+ async mounted() {
275
+ this.keyList = [];
276
+ this.currentObj = this.workingObj;
277
+ await this.getDropdownValue();
278
+ },
279
+ computed: {
280
+ clonedItems: function () {
281
+ return JSON.parse(JSON.stringify(this.currentObj));
282
+ },
283
+ },
284
+ watch: {
285
+ workingObj() {
286
+ this.currentObj = this.workingObj;
287
+ },
288
+ async "currentObj.matinh"() {
289
+ if (!state.is_update) {
290
+ let data = {
291
+ schema: get_schema(),
292
+ table: "fn_generate_makhachhang",
293
+ variable: "('" + this.currentObj.matinh + "')"
294
+ };
295
+ let resp = await request("/select", data, "get");
296
+ if(resp.length > 0) {
297
+ this.currentObj.makhachhang = resp[0]["makhachhang"];
298
+ }
299
+ }
300
+ },
301
+ clonedItems: {
302
+ handler(newVal, oldVal) {
303
+ this.check_update_value(newVal, oldVal);
304
+ },
305
+ deep: true,
306
+ },
307
+ },
308
+ };
309
+ </script>
@@ -0,0 +1,23 @@
1
+ <template>
2
+ <footer class="main-footer">
3
+ <div class="float-right d-none d-sm-inline">Developed for SCG</div>
4
+ <img :src="'/static/img/logo_unic.png'" alt="Logo" height="16px" class="d-sm-inline" style="opacity: 1; margin-right: 10px" /><strong>&copy; 2024.</strong>
5
+ <span class="footer-center">
6
+ <img @click="open_link('ios')" src="/static/img/apple_icon.jpg" alt="apple icon" style="max-height: 28px; margin-right: 20px" />
7
+ <img @click="open_link('android')" src="/static/img/android_icon.jpg" alt="android icon" style="max-height: 28px" />
8
+ </span>
9
+ </footer>
10
+ </template>
11
+ <script>
12
+ export default {
13
+ methods: {
14
+ open_link(type) {
15
+ if (type == "ios") {
16
+ window.open(baseurl() + "duraone_m/ios/store.html", "_blank");
17
+ } else {
18
+ window.open(baseurl() + "duraone_m/android/store.html", "_blank");
19
+ }
20
+ },
21
+ },
22
+ };
23
+ </script>
@@ -0,0 +1,265 @@
1
+ <template>
2
+ <!-- Navbar -->
3
+ <nav class="main-header navbar navbar-expand navbar-white navbar-light">
4
+ <!-- Left navbar links -->
5
+ <ul class="navbar-nav">
6
+ <li class="nav-item">
7
+ <a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a>
8
+ </li>
9
+ <!-- <li class="nav-item d-none d-sm-inline-block">
10
+ <a @click="$router.push('/')" class="nav-link">Home</a>
11
+ </li> -->
12
+ </ul>
13
+
14
+ <ul class="navbar-nav ml-auto header-font">
15
+ {{
16
+ t(state.page_header).toUpperCase()
17
+ }}
18
+ <span v-if="get_schema() === 'qas'" style="color: red">&nbsp; &nbsp; (TESTING VERSION)</span>
19
+ </ul>
20
+
21
+ <!-- Right navbar links -->
22
+ <ul class="navbar-nav ml-auto">
23
+ <li class="nav-item">
24
+ <a class="nav-link" data-widget="fullscreen" href="#" role="button">
25
+ <i class="fas fa-expand-arrows-alt"></i>
26
+ </a>
27
+ </li>
28
+ <li class="nav-item" style="padding-top: 8px">
29
+ <span
30
+ ><span :class="state.language === 'th' ? 'selected-lang' : 'not-selected-lang'" @click="set_lang('th')"
31
+ >TH
32
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="15" height="15" viewBox="0 0 256 256" xml:space="preserve">
33
+ <defs></defs>
34
+ <g
35
+ style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1"
36
+ transform="translate(1.4065934065934016 1.4065934065934016) scale(2.81 2.81)"
37
+ >
38
+ <path
39
+ d="M 0 45 c 0 19.592 12.524 36.25 30 42.429 c 4.685 1.657 9.723 2.567 14.975 2.57 h 0.051 c 5.252 -0.003 10.289 -0.914 14.974 -2.57 c 17.466 -6.175 29.985 -22.818 30 -42.396 v -0.068 C 89.985 25.389 77.466 8.745 60 2.571 C 55.307 0.911 50.261 0 45 0 c -5.261 0 -10.308 0.912 -15 2.571 C 12.524 8.75 0 25.408 0 45 z"
40
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(243, 244, 245); fill-rule: nonzero; opacity: 1"
41
+ transform=" matrix(1 0 0 1 0 0) "
42
+ stroke-linecap="round"
43
+ />
44
+ <path
45
+ d="M 0 45 c 0 5.439 0.969 10.651 2.737 15.477 h 84.525 c 1.765 -4.816 2.734 -10.016 2.738 -15.443 v -0.068 c -0.004 -5.071 -0.853 -9.943 -2.404 -14.489 H 2.404 C 0.85 35.034 0 39.917 0 45 z"
46
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0, 27, 154); fill-rule: nonzero; opacity: 1"
47
+ transform=" matrix(1 0 0 1 0 0) "
48
+ stroke-linecap="round"
49
+ />
50
+ <path
51
+ d="M 78.528 75 H 11.472 C 16.459 80.566 22.808 84.887 30 87.429 C 34.693 89.088 39.739 90 45 90 c 5.261 0 10.307 -0.911 15 -2.571 C 67.192 84.887 73.541 80.566 78.528 75 z"
52
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(231, 0, 0); fill-rule: nonzero; opacity: 1"
53
+ transform=" matrix(1 0 0 1 0 0) "
54
+ stroke-linecap="round"
55
+ />
56
+ <path
57
+ d="M 30 2.571 c -7.394 2.614 -13.896 7.11 -18.944 12.906 h 67.889 C 73.897 9.681 67.395 5.185 60 2.571 c -4.584 -1.621 -9.506 -2.521 -14.635 -2.563 h -0.729 C 39.507 0.049 34.584 0.95 30 2.571 z"
58
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(231, 0, 0); fill-rule: nonzero; opacity: 1"
59
+ transform=" matrix(1 0 0 1 0 0) "
60
+ stroke-linecap="round"
61
+ />
62
+ </g>
63
+ </svg>
64
+ </span>
65
+ |
66
+ <span :class="state.language === 'en' ? 'selected-lang' : 'not-selected-lang'" @click="set_lang('en')">
67
+ EN
68
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="15" height="15" viewBox="0 0 256 256" xml:space="preserve">
69
+ <defs></defs>
70
+ <g
71
+ style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1"
72
+ transform="translate(1.4065934065934016 1.4065934065934016) scale(2.81 2.81)"
73
+ >
74
+ <path
75
+ d="M 88.35 57.052 c 0.034 -0.123 0.076 -0.243 0.109 -0.367 l -0.004 -0.002 C 89.457 52.957 90 49.043 90 45 c 0 -4.033 -0.54 -7.938 -1.538 -11.657 l 0.004 -0.002 c -0.039 -0.146 -0.088 -0.289 -0.128 -0.434 c -0.137 -0.492 -0.28 -0.982 -0.434 -1.468 c -0.081 -0.257 -0.167 -0.512 -0.253 -0.768 c -0.073 -0.217 -0.139 -0.437 -0.215 -0.653 h -0.015 c -1.645 -4.653 -4.021 -8.96 -7.01 -12.768 L 59.997 27.458 V 2.57 c -4.368 -1.544 -9.046 -2.427 -13.915 -2.542 h -2.164 c -4.868 0.115 -9.545 0.998 -13.913 2.541 v 24.889 L 9.589 17.249 c -2.989 3.809 -5.366 8.116 -7.01 12.769 H 2.564 c -0.076 0.216 -0.143 0.436 -0.216 0.653 c -0.086 0.255 -0.172 0.509 -0.253 0.765 c -0.154 0.486 -0.297 0.977 -0.434 1.47 c -0.04 0.145 -0.089 0.287 -0.128 0.432 l 0.004 0.002 C 0.54 37.061 0 40.966 0 45 c 0 4.043 0.543 7.957 1.545 11.684 l -0.004 0.002 c 0.033 0.123 0.074 0.242 0.108 0.365 c 0.146 0.524 0.298 1.046 0.462 1.562 c 0.075 0.236 0.154 0.47 0.233 0.705 c 0.077 0.231 0.148 0.464 0.229 0.693 H 2.59 c 1.647 4.651 4.025 8.955 7.016 12.761 l 20.4 -10.2 v 24.86 C 34.697 89.089 39.741 90 45 90 c 5.26 0 10.305 -0.911 14.997 -2.57 V 62.572 l 20.398 10.199 c 2.991 -3.806 5.368 -8.11 7.015 -12.76 h 0.015 c 0.081 -0.229 0.152 -0.463 0.23 -0.694 c 0.079 -0.234 0.158 -0.468 0.233 -0.704 C 88.052 58.096 88.205 57.575 88.35 57.052 z"
76
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(243, 244, 245); fill-rule: nonzero; opacity: 1"
77
+ transform=" matrix(1 0 0 1 0 0) "
78
+ stroke-linecap="round"
79
+ />
80
+ <path
81
+ d="M 53.999 0.902 c -2.565 -0.521 -5.213 -0.81 -7.917 -0.874 h -2.164 c -2.703 0.064 -5.35 0.354 -7.914 0.874 v 35.116 H 0.899 C 0.311 38.92 0 41.924 0 45 c 0 3.087 0.312 6.1 0.904 9.012 h 35.1 v 35.087 C 38.911 89.689 41.919 90 45 90 c 3.082 0 6.091 -0.311 8.999 -0.902 V 54.012 h 35.097 C 89.688 51.1 90 48.087 90 45 c 0 -3.076 -0.311 -6.08 -0.899 -8.983 H 53.999 V 0.902 z"
82
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(204, 0, 0); fill-rule: nonzero; opacity: 1"
83
+ transform=" matrix(1 0 0 1 0 0) "
84
+ stroke-linecap="round"
85
+ />
86
+ <path
87
+ d="M 85.242 65.135 c 0.829 -1.653 1.56 -3.363 2.184 -5.125 H 74.993 L 85.242 65.135 z"
88
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(204, 0, 0); fill-rule: nonzero; opacity: 1"
89
+ transform=" matrix(1 0 0 1 0 0) "
90
+ stroke-linecap="round"
91
+ />
92
+ <path
93
+ d="M 82.216 19.701 L 61.581 30.019 h 13.412 l 10.261 -5.131 C 84.353 23.088 83.341 21.354 82.216 19.701 z"
94
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(204, 0, 0); fill-rule: nonzero; opacity: 1"
95
+ transform=" matrix(1 0 0 1 0 0) "
96
+ stroke-linecap="round"
97
+ />
98
+ <path
99
+ d="M 4.747 24.887 c -0.829 1.655 -1.559 3.368 -2.182 5.132 H 15.01 L 4.747 24.887 z"
100
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(204, 0, 0); fill-rule: nonzero; opacity: 1"
101
+ transform=" matrix(1 0 0 1 0 0) "
102
+ stroke-linecap="round"
103
+ />
104
+ <path
105
+ d="M 7.8 70.321 L 28.422 60.01 H 15.01 L 4.758 65.136 C 5.661 66.936 6.674 68.67 7.8 70.321 z"
106
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(204, 0, 0); fill-rule: nonzero; opacity: 1"
107
+ transform=" matrix(1 0 0 1 0 0) "
108
+ stroke-linecap="round"
109
+ />
110
+ <path
111
+ d="M 9.605 72.771"
112
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0, 0, 102); fill-rule: nonzero; opacity: 1"
113
+ transform=" matrix(1 0 0 1 0 0) "
114
+ stroke-linecap="round"
115
+ />
116
+ <path
117
+ d="M 80.412 17.251"
118
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0, 0, 102); fill-rule: nonzero; opacity: 1"
119
+ transform=" matrix(1 0 0 1 0 0) "
120
+ stroke-linecap="round"
121
+ />
122
+ <path
123
+ d="M 80.395 72.77"
124
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0, 0, 102); fill-rule: nonzero; opacity: 1"
125
+ transform=" matrix(1 0 0 1 0 0) "
126
+ stroke-linecap="round"
127
+ />
128
+ <path
129
+ d="M 9.589 17.25"
130
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0, 0, 102); fill-rule: nonzero; opacity: 1"
131
+ transform=" matrix(1 0 0 1 0 0) "
132
+ stroke-linecap="round"
133
+ />
134
+ <path
135
+ d="M 9.589 17.249 l 20.416 10.208 v -3.99 V 2.584 C 21.874 5.458 14.813 10.593 9.589 17.249 z"
136
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0, 0, 102); fill-rule: nonzero; opacity: 1"
137
+ transform=" matrix(1 0 0 1 0 0) "
138
+ stroke-linecap="round"
139
+ />
140
+ <path
141
+ d="M 59.997 2.585 v 22.302 v 2.57 L 80.411 17.25 C 75.188 10.594 68.128 5.459 59.997 2.585 z"
142
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0, 0, 102); fill-rule: nonzero; opacity: 1"
143
+ transform=" matrix(1 0 0 1 0 0) "
144
+ stroke-linecap="round"
145
+ />
146
+ <path
147
+ d="M 30.006 72.77 V 62.572 l -20.4 10.2 c 5.222 6.646 12.276 11.774 20.4 14.646 V 72.77 z"
148
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0, 0, 102); fill-rule: nonzero; opacity: 1"
149
+ transform=" matrix(1 0 0 1 0 0) "
150
+ stroke-linecap="round"
151
+ />
152
+ <path
153
+ d="M 59.997 62.572 v 9.296 v 15.548 c 8.123 -2.872 15.176 -8 20.398 -14.646 L 59.997 62.572 z"
154
+ style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0, 0, 102); fill-rule: nonzero; opacity: 1"
155
+ transform=" matrix(1 0 0 1 0 0) "
156
+ stroke-linecap="round"
157
+ />
158
+ </g>
159
+ </svg> </span
160
+ ></span>
161
+ </li>
162
+ <li class="nav-item dropdown">
163
+ <a class="nav-link full-name-show" data-toggle="dropdown" @click="show_menu_profile"> {{ state.fullname }} </a>
164
+ <div class="dropdown-menu dropdown-menu-lg dropdown-menu-right profile-dropdown">
165
+ <button @click="$router.push('/userinfo/profile')" class="btn btn-default btn-sm btn-block"><i class="fas fa-id-card"></i> {{ t("Profile") }}</button>
166
+ <div class="dropdown-divider"></div>
167
+ <button @click="log_out()" class="btn btn-default btn-sm btn-block"><i class="fas fa-sign-out-alt"></i> {{ t("Log out") }}</button>
168
+ </div>
169
+ </li>
170
+ </ul>
171
+ </nav>
172
+ <!-- /.navbar -->
173
+ </template>
174
+
175
+ <script>
176
+ export default defineComponent({
177
+ data() {
178
+ return {
179
+ menu_header_lst: [],
180
+ isNavbarOpen: false,
181
+ page_header: "",
182
+ };
183
+ },
184
+ methods: {
185
+ log_out() {
186
+ clearSession();
187
+ this.$router.push("/login");
188
+ },
189
+ async set_lang(lang) {
190
+ if (state.language === lang) {
191
+ return;
192
+ }
193
+ setSession("language", lang);
194
+ state.language = lang;
195
+
196
+ translate(lang, this.$route.path);
197
+ let data = {
198
+ schema: get_schema(),
199
+ table: "user",
200
+ username: state.username,
201
+ language: lang,
202
+ key_array: ["username"],
203
+ };
204
+ await request("/update", data);
205
+ window.location.reload();
206
+ },
207
+ show_menu_profile() {
208
+ $(".profile-dropdown").addClass("show");
209
+ },
210
+ },
211
+ mounted() {
212
+ $(document).ready(function () {
213
+ $(document).on("click", function (event) {
214
+ var clickover = $(event.target);
215
+ var _opened = $(".profile-dropdown").hasClass("show");
216
+ if (_opened === true && !clickover.hasClass("full-name-show")) {
217
+ $(".profile-dropdown").removeClass("show");
218
+ }
219
+ });
220
+ });
221
+ },
222
+ created() {
223
+ state.username = getSession("username");
224
+ if (check_is_null_or_blank(state.username)) {
225
+ this.$router.push("/login");
226
+ }
227
+ state.fullname = getSession("fullname");
228
+ state.language = getSession("language");
229
+ state.usergroup = getSession("usergroup");
230
+ },
231
+ mounted() {
232
+ menu().forEach((item) => {
233
+ item.sub_menu.forEach((sub) => {
234
+ if (this.$route.fullPath === sub.link) {
235
+ state.page_header = sub.name;
236
+ }
237
+ });
238
+ });
239
+ },
240
+ watch: {
241
+ $route(to, from) {
242
+ menu().forEach((item) => {
243
+ item.sub_menu.forEach((sub) => {
244
+ if (to.fullPath === sub.link) {
245
+ state.page_header = sub.name;
246
+ }
247
+ });
248
+ });
249
+ },
250
+ },
251
+ });
252
+ </script>
253
+ <style>
254
+ .header-font {
255
+ font-size: 1.5em;
256
+ font-weight: bold;
257
+ }
258
+ .selected-lang {
259
+ font-weight: bold;
260
+ color: rgb(27, 117, 243);
261
+ }
262
+ .not-selected-lang {
263
+ cursor: pointer;
264
+ }
265
+ </style>