@fewangsit/wangsvue-gsts 1.0.0-alpha.9 → 2.0.0-alpha.10

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 (232) hide show
  1. package/animation/index.d.ts +44 -0
  2. package/{components/approverinfo/ApproverInfo.vue.d.ts → approverinfo/index.d.ts} +4 -0
  3. package/assets/scanner.worker-Bk2e5hSA.js.map +1 -0
  4. package/{components/badge/Badge.vue.d.ts → badge/index.d.ts} +10 -2
  5. package/{components/badgegroup/BadgeGroup.vue.d.ts → badgegroup/index.d.ts} +19 -9
  6. package/{components/badgegrouptree/BadgeGroupTree.vue.d.ts → badgegrouptree/index.d.ts} +2 -3
  7. package/{components/basecomponent → basecomponent}/index.d.ts +0 -1
  8. package/{components/basetree/BaseTree.vue.d.ts → basetree/index.d.ts} +37 -4
  9. package/breadcrumb/index.d.ts +42 -0
  10. package/breadcrumb/store/index.d.ts +8 -0
  11. package/{components/button/Button.vue.d.ts → button/index.d.ts} +18 -7
  12. package/{components/buttonbulkaction/ButtonBulkAction.vue.d.ts → buttonbulkaction/index.d.ts} +11 -4
  13. package/buttoncopy/index.d.ts +26 -0
  14. package/{components/buttondownload/ButtonDownload.vue.d.ts → buttondownload/index.d.ts} +37 -3
  15. package/buttonfilter/index.d.ts +23 -0
  16. package/{components/buttonradio/ButtonRadio.vue.d.ts → buttonradio/index.d.ts} +3 -2
  17. package/buttonscan/index.d.ts +215 -0
  18. package/{components/buttonsearch/ButtonSearch.vue.d.ts → buttonsearch/index.d.ts} +6 -5
  19. package/buttonsearchbyscan/index.d.ts +51 -0
  20. package/{components/buttonselecttree/ButtonSelectTree.vue.d.ts → buttonselecttree/index.d.ts} +33 -14
  21. package/buttonsync/index.d.ts +22 -0
  22. package/buttontoggle/index.d.ts +27 -0
  23. package/{components/calendar/Calendar.vue.d.ts → calendar/index.d.ts} +44 -7
  24. package/{components/card/Card.vue.d.ts → card/index.d.ts} +3 -3
  25. package/carousel/index.d.ts +28 -0
  26. package/{components/changelog/Changelog.vue.d.ts → changelog/index.d.ts} +8 -4
  27. package/{components/changelogpage/ChangelogPage.vue.d.ts → changelogpage/index.d.ts} +9 -4
  28. package/{components/checkbox/Checkbox.vue.d.ts → checkbox/index.d.ts} +3 -2
  29. package/components.d.ts +66 -0
  30. package/config/defaultProps.d.ts +1 -1
  31. package/config/index.d.ts +1 -1
  32. package/config/locale.d.ts +1 -1
  33. package/{components/customcolumn/CustomColumn.vue.d.ts → customcolumn/index.d.ts} +18 -2
  34. package/datatable/index.d.ts +913 -0
  35. package/dial-codes-DGcGIlbX.js +5 -0
  36. package/dial-codes-DGcGIlbX.js.map +1 -0
  37. package/{components/dialog/Dialog.vue.d.ts → dialog/index.d.ts} +6 -6
  38. package/{components/dialogconfirm/DialogConfirm.vue.d.ts → dialogconfirm/index.d.ts} +9 -4
  39. package/{components/dialogform/DialogForm.vue.d.ts → dialogform/index.d.ts} +16 -36
  40. package/{components/dialogselecttree/DialogSelectTree.vue.d.ts → dialogselecttree/index.d.ts} +55 -14
  41. package/directives/focus.d.ts +1 -1
  42. package/directives/index.d.ts +1 -0
  43. package/directives/tooltip.d.ts +1 -0
  44. package/{components/dropdown/Dropdown.vue.d.ts → dropdown/index.d.ts} +44 -7
  45. package/{components/editor/Editor.vue.d.ts → editor/index.d.ts} +9 -1
  46. package/event-bus/index.d.ts +59 -48
  47. package/event-bus/mitt.d.ts +29 -14
  48. package/{components/fieldwrapper/FieldWrapper.vue.d.ts → fieldwrapper/index.d.ts} +32 -2
  49. package/{components/fileupload/FileUpload.vue.d.ts → fileupload/index.d.ts} +25 -8
  50. package/filtercontainer/index.d.ts +233 -0
  51. package/{components/form/Form.vue.d.ts → form/index.d.ts} +16 -3
  52. package/{components/icon/Icon.vue.d.ts → icon/index.d.ts} +76 -56
  53. package/{components/image/Image.vue.d.ts → image/index.d.ts} +35 -9
  54. package/{components/imagecompressor/ImageCompressor.vue.d.ts → imagecompressor/index.d.ts} +43 -3
  55. package/{components/inlinemessage/InlineMessage.vue.d.ts → inlinemessage/index.d.ts} +4 -1
  56. package/{components/inputbadge/InputBadge.vue.d.ts → inputbadge/index.d.ts} +37 -4
  57. package/inputcurrency/helpers/index.d.ts +8 -0
  58. package/{components/inputcurrency/InputCurrency.vue.d.ts → inputcurrency/index.d.ts} +5 -35
  59. package/inputemail/index.d.ts +30 -0
  60. package/{components/inputnumber/InputNumber.vue.d.ts → inputnumber/index.d.ts} +12 -10
  61. package/inputotp/index.d.ts +3 -0
  62. package/inputpassword/index.d.ts +73 -0
  63. package/{components/inputphonenumber/InputPhoneNumber.vue.d.ts → inputphonenumber/index.d.ts} +14 -9
  64. package/{components/inputrangenumber/InputRangeNumber.vue.d.ts → inputrangenumber/index.d.ts} +26 -11
  65. package/{components/inputtext/InputText.vue.d.ts → inputtext/index.d.ts} +9 -7
  66. package/inputurl/index.d.ts +38 -0
  67. package/invisiblefield/index.d.ts +39 -0
  68. package/languageswitcher/index.d.ts +15 -0
  69. package/{components/litedropdown/LiteDropdown.vue.d.ts → litedropdown/index.d.ts} +6 -4
  70. package/{components/loading/Loading.vue.d.ts → loading/index.d.ts} +3 -3
  71. package/{components/loading/store/loading.store.d.ts → loading/store/index.d.ts} +3 -3
  72. package/loading-page-CoC9UhfC.js +1 -0
  73. package/loading-page-CoC9UhfC.js.map +1 -0
  74. package/loading-page-CoXtqoc9.js +1 -0
  75. package/loading-page-CoXtqoc9.js.map +1 -0
  76. package/loading-page-dark-e0SrRAHc.js +5 -0
  77. package/loading-page-dark-e0SrRAHc.js.map +1 -0
  78. package/loading-page-f8D03l3G.js +1 -0
  79. package/loading-page-f8D03l3G.js.map +1 -0
  80. package/loading-plane-CoXtqoc9.js +1 -0
  81. package/loading-plane-CoXtqoc9.js.map +1 -0
  82. package/loading-table-ByUoWqUo.js +1 -0
  83. package/loading-table-ByUoWqUo.js.map +1 -0
  84. package/loading-table-BygEMzFM.js +1 -0
  85. package/loading-table-BygEMzFM.js.map +1 -0
  86. package/loading-table-D9bw9OcI.js +5 -0
  87. package/loading-table-D9bw9OcI.js.map +1 -0
  88. package/loading-table-dark-BGh0tAPM.js +5 -0
  89. package/loading-table-dark-BGh0tAPM.js.map +1 -0
  90. package/mcp/components.json +4767 -0
  91. package/mcp/components.summary.txt +24 -0
  92. package/mcp/main.js +16996 -0
  93. package/mcp/package.json +28 -0
  94. package/mcp/skills/api-service-generator/SKILL.md +93 -0
  95. package/mcp/skills/committing-changes/SKILL.md +38 -0
  96. package/mcp/skills/figma-datatable-generator/SKILL.md +93 -0
  97. package/mcp/skills/figma-to-code/SKILL.md +117 -0
  98. package/mcp/skills/import-validator/SKILL.md +54 -0
  99. package/mcp/skills/wangsvue-code-review/SKILL.md +70 -0
  100. package/mcp/skills/wangsvue-workflow/SKILL.md +91 -0
  101. package/{components/menu/Menu.vue.d.ts → menu/index.d.ts} +5 -4
  102. package/menuitem/index.d.ts +34 -0
  103. package/{components/multiselect/MultiSelect.vue.d.ts → multiselect/index.d.ts} +36 -6
  104. package/no-data-CTKux8RI.js +1 -0
  105. package/no-data-CTKux8RI.js.map +1 -0
  106. package/no-data-DLHO1L_u.js +1 -0
  107. package/no-data-DLHO1L_u.js.map +1 -0
  108. package/no-data-dark-nK4e4RAM.js +5 -0
  109. package/no-data-dark-nK4e4RAM.js.map +1 -0
  110. package/no-data-g0dJCy2p.js +1 -0
  111. package/no-data-g0dJCy2p.js.map +1 -0
  112. package/{components/overlaypanel/OverlayPanel.vue.d.ts → overlaypanel/index.d.ts} +4 -23
  113. package/package.json +27 -9
  114. package/paginator/index.d.ts +291 -0
  115. package/{components/passthrough → passthrough}/index.d.ts +0 -1
  116. package/plugins/WangsVue.d.ts +275 -98
  117. package/plugins/basei18n.d.ts +103 -0
  118. package/plugins/formValidation.d.ts +16 -6
  119. package/scan-qr-C6V4afHJ.js +5 -0
  120. package/scan-qr-C6V4afHJ.js.map +1 -0
  121. package/stats.html +4949 -0
  122. package/style.css +1 -1
  123. package/tabmenu/index.d.ts +104 -0
  124. package/tagtype/index.d.ts +33 -0
  125. package/{components/textarea/Textarea.vue.d.ts → textarea/index.d.ts} +16 -9
  126. package/{components/timeline/Timeline.vue.d.ts → timeline/index.d.ts} +42 -7
  127. package/{components/toast/Toast.vue.d.ts → toast/index.d.ts} +72 -71
  128. package/toast/service/index.d.ts +1 -0
  129. package/{components/toggleswitch/ToggleSwitch.vue.d.ts → toggleswitch/index.d.ts} +3 -2
  130. package/{components/tree → tree}/helpers/filterNodeKeys.helper.d.ts +8 -2
  131. package/tree/helpers/flattenTreeNodeChildren.helper.d.ts +8 -0
  132. package/{components/tree/Tree.vue.d.ts → tree/index.d.ts} +20 -12
  133. package/{components/ts-helpers.d.ts → ts-helpers.d.ts} +8 -1
  134. package/{components/username/UserName.vue.d.ts → username/index.d.ts} +14 -10
  135. package/utils/baseToast.util.d.ts +57 -0
  136. package/utils/cookie.util.d.ts +18 -0
  137. package/utils/date.util.d.ts +86 -23
  138. package/utils/exportToExcel.util.d.ts +19 -16
  139. package/utils/getStatusSeverity.util.d.ts +10 -3
  140. package/utils/index.d.ts +20 -17
  141. package/utils/object.util.d.ts +27 -2
  142. package/utils/role.util.d.ts +5 -1
  143. package/utils/textFormatter.util.d.ts +15 -3
  144. package/utils/toast.util.d.ts +2 -2
  145. package/utils/xlsx.util.d.ts +24 -0
  146. package/validatormessage/index.d.ts +23 -0
  147. package/wangsvue-gsts.d.ts +31 -0
  148. package/wangsvue-gsts.es.js +55418 -125996
  149. package/wangsvue-gsts.es.js.map +1 -0
  150. package/wangsvue-gsts.system.js +20 -422
  151. package/wangsvue-gsts.system.js.map +1 -0
  152. package/assets/json/currencies.json.d.ts +0 -1068
  153. package/assets/json/languages.json.d.ts +0 -180
  154. package/build-entry.d.ts +0 -14
  155. package/components/animation/Animation.vue.d.ts +0 -24
  156. package/components/basetree/TreeNode.vue.d.ts +0 -35
  157. package/components/breadcrumb/Breadcrumb.vue.d.ts +0 -26
  158. package/components/buttonImportExcel/ButtonImportExcel.vue.d.ts +0 -26
  159. package/components/buttonfilter/ButtonFilter.vue.d.ts +0 -12
  160. package/components/buttonsplit/ButtonSplit.d.ts +0 -350
  161. package/components/buttonsplit/ButtonSplit.vue.d.ts +0 -34
  162. package/components/buttontoggle/ButtonToggle.vue.d.ts +0 -18
  163. package/components/calendar/BaseCalendar.vue.d.ts +0 -83
  164. package/components/changelogpage/ChangelogFilter.vue.d.ts +0 -16
  165. package/components/codesnippet/CodeSnippet.vue.d.ts +0 -14
  166. package/components/datatable/DataTable.vue.d.ts +0 -704
  167. package/components/datatable/MultiRow.vue.d.ts +0 -16
  168. package/components/datatable/helpers/adjustMenuPosition.helper.d.ts +0 -1
  169. package/components/datatable/helpers/filter.helper.d.ts +0 -28
  170. package/components/datatable/helpers/index.d.ts +0 -3
  171. package/components/datatable/helpers/readConfig.helper.d.ts +0 -2
  172. package/components/datatable/store/dataTable.store.d.ts +0 -22
  173. package/components/editor/CodeSnippetAdapter.vue.d.ts +0 -92
  174. package/components/editor/EditorButton.vue.d.ts +0 -15
  175. package/components/editor/MentionList.vue.d.ts +0 -35
  176. package/components/editor/MentionSection.vue.d.ts +0 -92
  177. package/components/editor/codeSnippetExtension.d.ts +0 -3
  178. package/components/editor/mentionSectionExtension.d.ts +0 -3
  179. package/components/editor/suggestion.d.ts +0 -2
  180. package/components/filtercontainer/FilterContainer.vue.d.ts +0 -141
  181. package/components/filtercontainer/helpers/applyFilter.helper.d.ts +0 -3
  182. package/components/filtercontainer/helpers/formatDateTimeRange.helper.d.ts +0 -7
  183. package/components/filtercontainer/helpers/getOption.helper.d.ts +0 -3
  184. package/components/gallerypreview/GalleryPreview.vue.d.ts +0 -31
  185. package/components/helpers/convertToArrayClass.helper.d.ts +0 -2
  186. package/components/helpers/index.d.ts +0 -2
  187. package/components/helpers/label.d.ts +0 -15
  188. package/components/imagecompressor/BackgroundImageCropper.vue.d.ts +0 -36
  189. package/components/imagecompressor/ImageInputInfo.vue.d.ts +0 -30
  190. package/components/index.d.ts +0 -66
  191. package/components/inputcurrency/helpers/currency.helper.d.ts +0 -4
  192. package/components/inputemail/InputEmail.vue.d.ts +0 -25
  193. package/components/inputgroup/InputGroup.vue.d.ts +0 -141
  194. package/components/inputpassword/InputPassword.vue.d.ts +0 -32
  195. package/components/inputphonenumber/helpers/getUserLocation.helper.d.ts +0 -8
  196. package/components/inputurl/InputURL.vue.d.ts +0 -39
  197. package/components/invisiblefield/InvisibleField.vue.d.ts +0 -36
  198. package/components/languagedropdown/LanguageDropdown.vue.d.ts +0 -58
  199. package/components/languagedropdown/LanguageDropdownOption.vue.d.ts +0 -18
  200. package/components/menu/helpers/filterMenu.helper.d.ts +0 -12
  201. package/components/menu/helpers/index.d.ts +0 -1
  202. package/components/menuitem/MenuItem.vue.d.ts +0 -19
  203. package/components/menuitem/index.d.ts +0 -104
  204. package/components/progressbar/ProgressBar.vue.d.ts +0 -72
  205. package/components/quickfilter/QuickFilter.vue.d.ts +0 -25
  206. package/components/tabmenu/TabMenu.vue.d.ts +0 -288
  207. package/components/tagtype/TagType.vue.d.ts +0 -22
  208. package/components/timeline/TimelineContentByType.vue.d.ts +0 -16
  209. package/components/tooltipspan/TooltipSpan.vue.d.ts +0 -20
  210. package/components/tree/helpers/flattenTreeNodeChildren.helper.d.ts +0 -6
  211. package/components/tree/helpers/index.d.ts +0 -3
  212. package/components/treesearchinput/TreeSearchInput.vue.d.ts +0 -16
  213. package/components/usergroup/UserGroup.vue.d.ts +0 -57
  214. package/components/validatormessage/ValidatorMessage.vue.d.ts +0 -12
  215. package/loading-page-BrQattYE.js +0 -1
  216. package/loading-page-CgfbWppy.js +0 -1
  217. package/loading-page-DbLuqCHa.js +0 -1
  218. package/loading-plane-CgfbWppy.js +0 -1
  219. package/loading-table-Bb2MtjdD.js +0 -4
  220. package/loading-table-Br25QIny.js +0 -1
  221. package/loading-table-BzrSQlA0.js +0 -1
  222. package/loading-table-chOgXi94.js +0 -1
  223. package/main.d.ts +0 -2
  224. package/no-data-Cgze_Rvp.js +0 -1
  225. package/no-data-Dep79CBh.js +0 -1
  226. package/no-data-y1X5WtcQ.js +0 -1
  227. package/plugins/translation.d.ts +0 -37
  228. package/types/options.type.d.ts +0 -16
  229. package/utils/filterOptions.util.d.ts +0 -3
  230. package/utils/genPlaceholder.util.d.ts +0 -8
  231. package/utils/getAttachmentIcon.util.d.ts +0 -8
  232. package/utils/mergePropsWithDefaults.util.d.ts +0 -20
@@ -0,0 +1,44 @@
1
+ import type { Config } from '@lottiefiles/dotlottie-web';
2
+
3
+ import { ClassComponent } from '../ts-helpers.d';
4
+
5
+ export interface AnimationDefaultConfig {
6
+ libPath: 'supplyasset' | 'workspace' | 'admin';
7
+ }
8
+
9
+ export interface AnimationProps {
10
+ animation:
11
+ | 'no-data'
12
+ | 'loading-plane'
13
+ | 'loading-page'
14
+ | 'loading-table'
15
+ | 'scan-qr';
16
+ /**
17
+ * @default true
18
+ */
19
+ autoplay?: boolean;
20
+ /**
21
+ * @default true
22
+ */
23
+ loop?: boolean;
24
+ /**
25
+ * Custom configurations for the animation
26
+ * Reference: https://developers.lottiefiles.com/docs/dotlottie-player/dotlottie-web/api/config/
27
+ */
28
+ customConfig?: Partial<Config>;
29
+ }
30
+
31
+ /**
32
+ * **WangsVue - Animation**
33
+ *
34
+ * _Animation is a lottie animation wrapper._
35
+ *
36
+ * @group Component
37
+ */
38
+ declare class Animation extends ClassComponent<
39
+ AnimationProps,
40
+ unknown,
41
+ unknown
42
+ > {}
43
+
44
+ export default Animation;
@@ -20,6 +20,10 @@ export interface ApproverInfoProps {
20
20
  * @default true
21
21
  */
22
22
  showShortInfo?: boolean;
23
+ /**
24
+ * To customize the level 0 label, for example 'Senior'
25
+ */
26
+ customLevelZeroLabel?: string;
23
27
  /**
24
28
  * To set label text when showShortInfo is false
25
29
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.worker-Bk2e5hSA.js","sources":["../../../library/components/buttonscan/workers/scanner.worker.ts"],"sourcesContent":["interface ConnectionOption {\n onopen: (ws: WebSocket, connectionState: ConnectionState) => void;\n onmessage: (event: MessageEvent) => void;\n onerror: (error: Event) => void;\n timeout?: number;\n}\n\ninterface WorkerMessage {\n command: string;\n sessionId: string;\n scanCommand?: string;\n userId?: string;\n companyCode?: string;\n serialNumber?: string;\n jenisDevice?: string;\n}\n\ntype ConnectionState = 'established' | 'reused';\n\nlet socket: WebSocket | null = null;\nlet timeoutId: NodeJS.Timeout | null = null; // Stores timeout ID for idle socket connection\nlet currentUserId: string | undefined;\nlet currentCompanyCode: string | undefined;\nlet sessionId: string = ''; // The unique session ID for the current connection\n\nself.onmessage = (event): void => {\n const message: WorkerMessage = event.data;\n currentCompanyCode = message.companyCode;\n\n switch (message.command) {\n case 'sync':\n sync(message);\n break;\n case 'connect':\n connect(message);\n break;\n case 'scan':\n scan(message);\n break;\n case 'stopscan':\n stopScan(message);\n break;\n default:\n break;\n }\n};\n\n/**\n * Opens a WebSocket connection if not already open.\n * If the connection is open, the `onopen` callback is immediately called.\n * @returns {WebSocket} The WebSocket instance.\n */\nconst openConnection = (opt: ConnectionOption): void => {\n let connectionState: ConnectionState = 'established';\n if (socket && socket.readyState === WebSocket.OPEN) {\n // If the socket is already open, immediately call the onopen callback\n connectionState = 'reused';\n opt.onopen(socket, connectionState);\n resetTimeOut(opt.timeout);\n } else {\n // If the socket is not open or undefined, create a new connection\n socket = new WebSocket(`${import.meta.env.VITE_APP_READER_API}`);\n }\n\n // Handle successful connection\n socket.onopen = (): void => {\n sessionId =\n Math.random().toString(36).substring(2, 15) +\n Math.random().toString(36).substring(2, 15); // Generate a random session ID\n\n connectionState = 'established';\n\n if (socket) opt.onopen(socket, connectionState); // Execute the onopen callback once the connection is established\n resetTimeOut(opt.timeout);\n };\n\n socket.onmessage = (event): void => {\n opt.onmessage(event);\n resetTimeOut(opt.timeout);\n };\n\n socket.onerror = (error): void => {\n console.error('🚀 ~ Scanner Worker: openConnection ~ error:', error);\n opt.onerror(error);\n socket?.close();\n socket = null;\n if (timeoutId) clearTimeout(timeoutId);\n };\n};\n\nconst handleSocketTimeout = (): void => {\n stopScan({ userId: currentUserId });\n currentUserId = undefined;\n if (socket) socket.close();\n socket = null;\n if (timeoutId) clearTimeout(timeoutId);\n console.info('Socket connection has been closed!');\n};\n\nconst resetTimeOut = (timeout = 0): void => {\n if (timeout) {\n // Adding this conditional to disable timout, may be sometimes it need to be enable, simpli remove the condition\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(handleSocketTimeout, timeout); // Timed out after 3 Minutes\n }\n};\n\nconst sync = ({ userId }: WorkerMessage): void => {\n currentUserId = userId;\n\n openConnection({\n onopen: (ws: WebSocket): void => {\n ws.send(\n JSON.stringify({\n data: {\n command: 'connect',\n userId,\n sessionId,\n companyCode: currentCompanyCode,\n source: 'app',\n },\n event: 'reader',\n }),\n );\n },\n\n onmessage: (event): void => {\n postMessage({ status: 'synced', ...JSON.parse(event.data) });\n },\n\n onerror: (error): void => {\n postMessage({ status: 'sync_error', error });\n },\n });\n};\n\nconst connect = ({ userId }: WorkerMessage): void => {\n currentUserId = userId;\n\n openConnection({\n onopen: (ws: WebSocket, state): void => {\n if (state === 'established') {\n ws.send(\n JSON.stringify({\n data: {\n command: 'connect',\n userId,\n source: 'app',\n sessionId,\n companyCode: currentCompanyCode,\n },\n event: 'reader',\n }),\n );\n } else {\n postMessage({\n status: 'connection_reused',\n });\n }\n },\n\n onmessage: (event): void => {\n postMessage({\n status: 'connection_established',\n ...JSON.parse(event.data),\n });\n },\n\n onerror: (error): void => {\n postMessage({ status: 'error_connecting', error });\n },\n });\n};\n\nconst scan = ({\n scanCommand,\n userId,\n serialNumber,\n jenisDevice,\n}: WorkerMessage): void => {\n currentUserId = userId;\n\n openConnection({\n onopen: (ws: WebSocket): void => {\n ws.send(\n JSON.stringify({\n data: {\n command: scanCommand,\n userId,\n sessionId,\n companyCode: currentCompanyCode,\n source: 'app',\n serialNumber,\n jenisDevice,\n },\n event: 'reader',\n }),\n );\n\n postMessage({ status: 'scan_started' });\n },\n\n onmessage: (event): void => {\n postMessage({ status: 'scanned', ...JSON.parse(event.data) });\n },\n\n onerror: (error): void => {\n postMessage({ status: 'scan_error', error });\n },\n });\n};\n\n/**\n * Single Scan:\n * - Stop Scan will be invoked on socket timeout\n *\n * Bulk Scan:\n * - Stop Scan will also be invoked on stopScan by user interaction\n */\nconst stopScan = ({ userId }: Partial<WorkerMessage>): void => {\n if (socket && socket.readyState === WebSocket.OPEN) {\n socket.send(\n JSON.stringify({\n data: {\n command: 'stopscan',\n userId,\n source: 'app',\n sessionId,\n companyCode: currentCompanyCode,\n },\n event: 'reader',\n }),\n );\n\n postMessage({ status: 'scan_stopped' });\n console.info('Scan Process Stopped!');\n }\n};\n"],"names":["socket","timeoutId","currentUserId","currentCompanyCode","sessionId","event","message","sync","connect","scan","stopScan","openConnection","opt","connectionState","resetTimeOut","error","handleSocketTimeout","timeout","userId","ws","state","scanCommand","serialNumber","jenisDevice"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ClassComponent } from '../ts-helpers';
1
+ import { ClassComponent } from '../ts-helpers.d';
2
2
 
3
3
  export interface BadgeComponentConfigs {
4
4
  /**
@@ -25,7 +25,15 @@ export interface BadgeProps extends BadgeComponentConfigs {
25
25
  /**
26
26
  * Sets the severity level for styling purposes. This prop might be omitted if getSeverity is provided.
27
27
  */
28
- severity?: 'success' | 'info' | 'danger' | 'warning' | 'dark' | 'primary';
28
+ severity?:
29
+ | 'success'
30
+ | 'info'
31
+ | 'danger'
32
+ | 'warning'
33
+ | 'dark'
34
+ | 'primary'
35
+ | 'fixed-primary'
36
+ | 'supply-primary';
29
37
  /**
30
38
  * Specifies the format for text truncation rules based on the usage context.
31
39
  */
@@ -1,10 +1,18 @@
1
1
  import { Slot } from 'vue';
2
- import { BadgeProps } from 'lib/components/badge/Badge.vue.d';
2
+
3
+ import { BadgeProps } from '../badge';
3
4
  import { ClassComponent, HintedString } from '../ts-helpers.d';
4
5
 
5
6
  export type ObjectBadge = {
6
7
  text: string;
7
- severity: 'success' | 'danger' | 'warning' | 'dark' | 'primary';
8
+ severity:
9
+ | 'success'
10
+ | 'danger'
11
+ | 'warning'
12
+ | 'dark'
13
+ | 'primary'
14
+ | 'fixed-primary'
15
+ | 'supply-primary';
8
16
  };
9
17
 
10
18
  export interface BadgeGroupProps
@@ -19,7 +27,14 @@ export interface BadgeGroupProps
19
27
  * @default undefined
20
28
  */
21
29
  textMoreSeverity?: HintedString<
22
- 'secondary' | 'info' | 'success' | 'warning' | 'danger' | 'contrast'
30
+ | 'secondary'
31
+ | 'info'
32
+ | 'success'
33
+ | 'warning'
34
+ | 'danger'
35
+ | 'contrast'
36
+ | 'fixed-primary'
37
+ | 'supply-primary'
23
38
  >;
24
39
  /**
25
40
  * The text shown on the more button
@@ -35,11 +50,6 @@ export interface BadgeGroupProps
35
50
  * The dialog header shown on more button clicked
36
51
  */
37
52
  headerLabel?: string;
38
- /**
39
- * Specify if the badge should be emptyable
40
- * @default false
41
- */
42
- emptyable?: boolean;
43
53
  }
44
54
 
45
55
  export interface BadgeGroupSlots {
@@ -49,7 +59,7 @@ export interface BadgeGroupSlots {
49
59
  dialogcontent: Slot<{ labels: string[] }>;
50
60
  }
51
61
 
52
- export default class Badge extends ClassComponent<
62
+ export default class BadgeGroup extends ClassComponent<
53
63
  BadgeGroupProps,
54
64
  BadgeGroupSlots,
55
65
  unknown
@@ -1,6 +1,5 @@
1
- import { BadgeGroupProps } from '../.././components/badgegroup/BadgeGroup.vue.d';
2
- import { ClassComponent, GlobalComponentConstructor } from '../.././components/ts-helpers';
3
-
1
+ import { BadgeGroupProps } from '../badgegroup';
2
+ import { ClassComponent, GlobalComponentConstructor } from '../ts-helpers.d';
4
3
 
5
4
  export interface BadgeGroupTreeItem {
6
5
  _id: string;
@@ -1,4 +1,3 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
1
  export interface ComponentHooks {
3
2
  onBeforeCreate?(): void;
4
3
  onCreated?(): void;
@@ -8,15 +8,16 @@
8
8
  *
9
9
  */
10
10
  import { VNode } from 'vue';
11
+
11
12
  import { ComponentHooks } from '../basecomponent';
13
+ import { MenuItem } from '../menuitem';
12
14
  import { PassThroughOptions } from '../passthrough';
13
15
  import {
14
16
  ClassComponent,
15
17
  GlobalComponentConstructor,
16
18
  HintedString,
17
19
  PassThrough,
18
- } from '../ts-helpers';
19
- import { MenuItem } from '../menuitem';
20
+ } from '../ts-helpers.d';
20
21
 
21
22
  export declare type TreePassThroughOptionType<T = any> =
22
23
  | TreePassThroughAttributes
@@ -35,6 +36,10 @@ export interface TreeNode {
35
36
  * Mandatory unique key of the node.
36
37
  */
37
38
  key: string | number;
39
+ /**
40
+ * The API response might give id instead of key, in which case it needs to be assigned to the key
41
+ */
42
+ _id?: string | number;
38
43
  /**
39
44
  * Label of the node.
40
45
  */
@@ -299,9 +304,9 @@ export interface TreeContext {
299
304
  * Defines valid properties in Tree component.
300
305
  */
301
306
  export interface BaseTreeProps {
302
- disableKeys?: number[];
307
+ disableKeys?: (string | number)[];
303
308
  disableNodeAll?: boolean;
304
- exactDisableKeys?: number[];
309
+ exactDisableKeys?: (string | number)[];
305
310
  level?: number;
306
311
  /**
307
312
  * List of labels that has no menu option
@@ -350,6 +355,10 @@ export interface BaseTreeProps {
350
355
  * @defaultValue false
351
356
  */
352
357
  loading?: boolean | undefined;
358
+ /**
359
+ * Defines the group tree to showing disposable groups.
360
+ */
361
+ showDisposableGroups?: boolean;
353
362
  /**
354
363
  * Icon to display when tree is loading.
355
364
  * @deprecated since v3.27.0. Use 'loadingicon' slot.
@@ -420,6 +429,30 @@ export interface BaseTreeProps {
420
429
  * @default false
421
430
  */
422
431
  useOption?: boolean;
432
+
433
+ /**
434
+ * A function to determine when the node should be disabled,
435
+ * When true, it will disabled selection on current node and all level childrend
436
+ *
437
+ * @return true to disabled
438
+ */
439
+ disableNodeWhen?: (node: TreeNode) => boolean;
440
+
441
+ /**
442
+ * A function to determine when the node should be disabled
443
+ * It will only disable current node
444
+ *
445
+ * @return true to disabled
446
+ */
447
+ exactDisableNodeWhen?: (node: TreeNode) => boolean;
448
+
449
+ /**
450
+ * A function to determine when the node should selected
451
+ * It will only disable current node when propagateSelection false
452
+ *
453
+ * @return true to disabled
454
+ */
455
+ nodeSelectedWhen?: (node: TreeNode) => boolean;
423
456
  }
424
457
 
425
458
  /**
@@ -0,0 +1,42 @@
1
+ import { ClassComponent } from '../ts-helpers.d';
2
+
3
+ export type BreadcrumbMenu = {
4
+ /**
5
+ * This is the text that will be displayed for the menu item.
6
+ */
7
+ name: string;
8
+ /**
9
+ * This is the URL that the menu item will link to.
10
+ * If not provided, the menu item will be displayed as a label instead of a link.
11
+ */
12
+ route?: string;
13
+ /**
14
+ * This is the title attribute for the link.
15
+ * It is only used if the menu item has a route.
16
+ */
17
+ title?: string;
18
+ };
19
+
20
+ export interface BreadcrumbProps {
21
+ /**
22
+ * The list of breadcrumb menu to display.
23
+ * If not provided, the breadcrumb will use the breadcrumb store.
24
+ */
25
+ menus?: BreadcrumbMenu[];
26
+ }
27
+
28
+ /**
29
+ * **WangsVue - Breadcrumb**
30
+ *
31
+ * _Breadcrumb is a component for displaying a breadcrumb trail to help users navigate a website or application.
32
+ * It takes an array of menu items as a prop and displays each item as a link or label, with a separator between them._
33
+ *
34
+ * @group components
35
+ */
36
+ declare class Breadcrumb extends ClassComponent<
37
+ BreadcrumbProps,
38
+ unknown,
39
+ unknown
40
+ > {}
41
+
42
+ export default Breadcrumb;
@@ -0,0 +1,8 @@
1
+ import { ShallowRef } from 'vue';
2
+ import type { BreadcrumbMenu } from '..';
3
+ export interface BreadcrumbStore {
4
+ breadcrumbs: ShallowRef<BreadcrumbMenu[]>;
5
+ setBreadcrumbs: (breadrumb: BreadcrumbMenu[]) => void;
6
+ }
7
+ declare const useBreadcrumbStore: () => BreadcrumbStore;
8
+ export default useBreadcrumbStore;
@@ -1,8 +1,12 @@
1
- import { ButtonHTMLAttributes, VNode } from 'vue';
2
- import { WangsIcons } from '../icon/Icon.vue.d';
3
1
  import { TooltipOptions } from 'primevue/tooltip';
4
- import { GlobalComponentConstructor } from '../ts-helpers.d';
5
- import { ClassComponent, HintedString } from '../ts-helpers';
2
+ import { ButtonHTMLAttributes, VNode } from 'vue';
3
+
4
+ import { WangsIcons } from '../icon';
5
+ import {
6
+ ClassComponent,
7
+ GlobalComponentConstructor,
8
+ HintedString,
9
+ } from '../ts-helpers.d';
6
10
 
7
11
  /**
8
12
  * Defines valid properties in Button component.
@@ -55,7 +59,14 @@ export interface ButtonProps extends /* @vue-ignore */ ButtonHTMLAttributes {
55
59
  */
56
60
  badgeSeverity?:
57
61
  | HintedString<
58
- 'secondary' | 'info' | 'success' | 'warning' | 'danger' | 'contrast'
62
+ | 'secondary'
63
+ | 'info'
64
+ | 'success'
65
+ | 'warning'
66
+ | 'danger'
67
+ | 'contrast'
68
+ | 'fixed-primary'
69
+ | 'supply-primary'
59
70
  >
60
71
  | null
61
72
  | undefined;
@@ -166,14 +177,14 @@ export interface ButtonSlots {
166
177
  *
167
178
  * [Live Demo](https://fewangsit.github.io/wangsvue/table)
168
179
  * --- ---
169
- * ![WangsVue](https://www.wangs.id/wp-content/uploads/2023/12/cropped-Logo_Wangsid-removebg-preview-192x192.png)
180
+ * ![WangsVue](https://www.wangsit.id/wp-content/uploads/2023/12/cropped-Logo_Wangsid-removebg-preview-192x192.png)
170
181
  *
171
182
  * @group Component
172
183
  */
173
184
  declare class Button extends ClassComponent<
174
185
  ButtonProps,
175
186
  ButtonSlots,
176
- Record<string, unknown>
187
+ unknown
177
188
  > {}
178
189
 
179
190
  declare module '@vue/runtime-core' {
@@ -1,5 +1,5 @@
1
- import { DefineComponent } from 'vue';
2
1
  import { MenuItem } from '../menuitem';
2
+ import { ClassComponent } from '../ts-helpers.d';
3
3
 
4
4
  export interface ButtonBulkActionLocaleConfig {
5
5
  /**
@@ -52,6 +52,13 @@ export interface ButtonBulkActionProps {
52
52
  * @options dropdown overlay-panel
53
53
  */
54
54
  selectMenuType?: 'dropdown' | 'overlay-panel';
55
+ /**
56
+ * Specify the name/label for selected data.
57
+ *
58
+ * @example 'Asset(s)' will be displayed as '3 Asset(s) Selected'
59
+ * @default 'Data' for all packages
60
+ */
61
+ naming?: string;
55
62
  }
56
63
 
57
64
  export interface ButtonBulkActionSlots {
@@ -84,14 +91,14 @@ export type ButtonBulkActionEmits = {
84
91
  * _ButtonBulkAction is a component for handling bulk action for multiple data at once._
85
92
  *
86
93
  * --- ---
87
- * ![WangsVue](https://www.wangs.id/wp-content/uploads/2023/12/cropped-Logo_Wangsid-removebg-preview-192x192.png)
94
+ * ![WangsVue](https://www.wangsit.id/wp-content/uploads/2023/12/cropped-Logo_Wangsid-removebg-preview-192x192.png)
88
95
  *
89
96
  * @group buttons
90
97
  */
91
- declare const ButtonBulkAction: DefineComponent<
98
+ declare class ButtonBulkAction extends ClassComponent<
92
99
  ButtonBulkActionProps,
93
100
  ButtonBulkActionSlots,
94
101
  ButtonBulkActionEmits
95
- >;
102
+ > {}
96
103
 
97
104
  export default ButtonBulkAction;
@@ -0,0 +1,26 @@
1
+ import { ClassComponent } from '../ts-helpers.d';
2
+
3
+ export interface ButtonCopyProps {
4
+ /**
5
+ * Text to be copied.
6
+ */
7
+ text: string;
8
+ }
9
+
10
+ /**
11
+ * **WangsVue - ButtonCopy**
12
+ *
13
+ * _ButtonCopy is a component for copying text to the clipboard._
14
+ *
15
+ * --- ---
16
+ * ![WangsVue](https://www.wangsit.id/wp-content/uploads/2023/12/cropped-Logo_Wangsid-removebg-preview-192x192.png)
17
+ *
18
+ * @group buttons
19
+ */
20
+ declare class ButtonCopy extends ClassComponent<
21
+ ButtonCopyProps,
22
+ unknown,
23
+ unknown
24
+ > {}
25
+
26
+ export default ButtonCopy;
@@ -1,6 +1,27 @@
1
+ import { DataTableProps } from '../datatable';
1
2
  import { ClassComponent, GlobalComponentConstructor } from '../ts-helpers.d';
2
3
 
4
+ export interface ButtonDownloadLocaleConfig {
5
+ /**
6
+ * Message to display on loading ovevrlay while downloading
7
+ */
8
+ downloadingMessage: string;
9
+
10
+ /**
11
+ * Text when booleanValue is true
12
+ */
13
+ trueText: string;
14
+
15
+ /**
16
+ * Text when booleanValue is false
17
+ */
18
+ falseText: string;
19
+ }
20
+
3
21
  export interface ButtonDownloadProps {
22
+ /**
23
+ * The file name of excel without the extension.
24
+ */
4
25
  fileName: string;
5
26
  /**
6
27
  * Text of the button.
@@ -21,6 +42,19 @@ export interface ButtonDownloadProps {
21
42
  * Texts below table in downloaded excel
22
43
  */
23
44
  additionalTextBelowTable?: (string | string[])[];
45
+ /**
46
+ * If this props exist, download data from provided configs instead syncing with data tables
47
+ */
48
+ dataConfigs?: Pick<
49
+ DataTableProps<any>,
50
+ 'columns' | 'fetchFunction' | 'data' | 'tableTitle'
51
+ >[];
52
+ /**
53
+ * Specify the error message download excel when tableConfigs is in use
54
+ *
55
+ * @example 'Error, failed to download {fileName}' - fileName will be replaced
56
+ */
57
+ excelToastErrorMessage?: string;
24
58
  }
25
59
 
26
60
  /**
@@ -30,14 +64,14 @@ export interface ButtonDownloadProps {
30
64
  *
31
65
  * [Live Demo](https://fewangsit.github.io/wangsvue/button)
32
66
  * --- ---
33
- * ![WangsVue](https://www.wangs.id/wp-content/uploads/2023/12/cropped-Logo_Wangsid-removebg-preview-192x192.png)
67
+ * ![WangsVue](https://www.wangsit.id/wp-content/uploads/2023/12/cropped-Logo_Wangsid-removebg-preview-192x192.png)
34
68
  *
35
69
  * @group Component
36
70
  */
37
71
  declare class ButtonDownload extends ClassComponent<
38
72
  ButtonDownloadProps,
39
- Record<string, unknown>,
40
- Record<string, unknown>
73
+ unknown,
74
+ unknown
41
75
  > {}
42
76
 
43
77
  declare module '@vue/runtime-core' {
@@ -0,0 +1,23 @@
1
+ import { ClassComponent } from '../ts-helpers.d';
2
+
3
+ export interface ButtonFilterProps {
4
+ /**
5
+ * Integrate with datatable and FilterContainer component with table name
6
+ */
7
+ tableName?: string;
8
+ }
9
+
10
+ /**
11
+ * **WangsVue - ButtonFilter**
12
+ *
13
+ * _A toggle button that opens or hides the FilterContainer. It pairs with FilterContainer via the `tableName` prop._
14
+ *
15
+ * @group components
16
+ */
17
+ declare class ButtonFilter extends ClassComponent<
18
+ ButtonFilterProps,
19
+ unknown,
20
+ unknown
21
+ > {}
22
+
23
+ export default ButtonFilter;
@@ -1,6 +1,7 @@
1
1
  import { StyleValue } from 'vue';
2
+
2
3
  import { ComponentHooks } from '../basecomponent';
3
- import { ClassComponent, GlobalComponentConstructor } from '../ts-helpers';
4
+ import { ClassComponent, GlobalComponentConstructor } from '../ts-helpers.d';
4
5
 
5
6
  export declare type ButtonRadioPassThroughOptionType =
6
7
  | ButtonRadioPassThroughAttributes
@@ -237,7 +238,7 @@ export type ButtonRadioEmits = {
237
238
  *
238
239
  * [Live Demo](https://fewangsit.github.io/wangsvue/buttonradio)
239
240
  * --- ---
240
- * ![WangsVue](https://www.wangs.id/wp-content/uploads/2023/12/cropped-Logo_Wangsid-removebg-preview-192x192.png)
241
+ * ![WangsVue](https://www.wangsit.id/wp-content/uploads/2023/12/cropped-Logo_Wangsid-removebg-preview-192x192.png)
241
242
  *
242
243
  * @group Component
243
244
  *