@rancher/shell 0.3.14 → 0.3.15

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 (397) hide show
  1. package/assets/images/providers/nutanix.svg +1 -0
  2. package/assets/translations/en-us.yaml +83 -2
  3. package/chart/gatekeeper.vue +2 -2
  4. package/chart/monitoring/alerting/index.vue +3 -3
  5. package/chart/monitoring/index.vue +2 -2
  6. package/chart/monitoring/prometheus/index.vue +1 -1
  7. package/chart/rancher-backup/index.vue +2 -2
  8. package/cloud-credential/harvester.vue +2 -2
  9. package/components/AssignTo.vue +1 -1
  10. package/components/AwsComplianceBanner.vue +1 -1
  11. package/components/BackLink.vue +7 -0
  12. package/components/BrandImage.vue +3 -3
  13. package/components/ClusterProviderIcon.vue +1 -1
  14. package/components/CommunityLinks.vue +2 -2
  15. package/components/ConsumptionGauge.vue +17 -2
  16. package/components/CruResource.vue +2 -1
  17. package/components/DashboardMetrics.vue +8 -0
  18. package/components/DetailTop.vue +1 -1
  19. package/components/ExplorerMembers.vue +8 -8
  20. package/components/ExplorerProjectsNamespaces.vue +9 -9
  21. package/components/FixedBanner.vue +1 -1
  22. package/components/GlobalRoleBindings.vue +11 -11
  23. package/components/GrafanaDashboard.vue +7 -1
  24. package/components/GrowlManager.vue +1 -1
  25. package/components/HarvesterServiceAddOnConfig.vue +4 -3
  26. package/components/IconOrSvg.vue +10 -3
  27. package/components/LandingPagePreference.vue +2 -2
  28. package/components/MoveModal.vue +1 -1
  29. package/components/PodSecurityAdmission.vue +3 -3
  30. package/components/ProgressBarMulti.vue +2 -2
  31. package/components/PromptRemove.vue +52 -28
  32. package/components/PromptRestore.vue +3 -3
  33. package/components/Questions/index.vue +5 -5
  34. package/components/RelatedWorkloadsTable.vue +1 -1
  35. package/components/ResourceList/Masthead.vue +1 -1
  36. package/components/ResourceTable.vue +3 -3
  37. package/components/ResourceYaml.vue +1 -1
  38. package/components/RoleBindings.vue +2 -2
  39. package/components/SingleClusterInfo.vue +1 -1
  40. package/components/SortableTable/actions.js +3 -3
  41. package/components/SortableTable/advanced-filtering.js +7 -7
  42. package/components/SortableTable/filtering.js +1 -1
  43. package/components/SortableTable/index.vue +9 -9
  44. package/components/SortableTable/selection.js +5 -5
  45. package/components/SortableTable/sorting.js +5 -5
  46. package/components/Tabbed/index.vue +7 -7
  47. package/components/TableSparkLine.vue +1 -1
  48. package/components/Wizard.vue +11 -23
  49. package/components/__tests__/Collapse.spec.ts +1 -1
  50. package/components/__tests__/CruResource.test.ts +74 -0
  51. package/components/__tests__/SimpleBox.spec.ts +1 -1
  52. package/components/auth/RoleDetailEdit.vue +7 -3
  53. package/components/auth/SelectPrincipal.vue +3 -3
  54. package/components/fleet/FleetResources.vue +1 -1
  55. package/components/fleet/FleetStatus.vue +4 -4
  56. package/components/fleet/FleetSummary.vue +1 -1
  57. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +1 -1
  58. package/components/fleet/ForceDirectedTreeChart/index.vue +1 -1
  59. package/components/form/ArrayList.vue +11 -3
  60. package/components/form/ArrayListSelect.vue +2 -2
  61. package/components/form/FileSelector.vue +6 -0
  62. package/components/form/GitPicker.vue +528 -0
  63. package/components/form/KeyValue.vue +82 -41
  64. package/components/form/LabeledSelect.vue +2 -2
  65. package/components/form/MatchExpressions.vue +2 -2
  66. package/components/form/Members/ClusterMembershipEditor.vue +1 -2
  67. package/components/form/Members/ClusterPermissionsEditor.vue +6 -5
  68. package/components/form/Members/MembershipEditor.vue +4 -4
  69. package/components/form/Members/ProjectMembershipEditor.vue +1 -2
  70. package/components/form/NameNsDescription.vue +13 -6
  71. package/components/form/Networking.vue +2 -2
  72. package/components/form/NodeScheduling.vue +1 -1
  73. package/components/form/PodAffinity.vue +1 -1
  74. package/components/form/ProjectMemberEditor.vue +4 -4
  75. package/components/form/ResourceQuota/Namespace.vue +2 -2
  76. package/components/form/ResourceQuota/NamespaceRow.vue +2 -2
  77. package/components/form/ResourceQuota/Project.vue +1 -1
  78. package/components/form/ResourceQuota/shared.js +2 -2
  79. package/components/form/ResourceSelector.vue +1 -1
  80. package/components/form/ResourceTabs/index.vue +1 -1
  81. package/components/form/RuleSelector.vue +1 -1
  82. package/components/form/SecretSelector.vue +4 -4
  83. package/components/form/Select.vue +2 -2
  84. package/components/form/SelectOrCreateAuthSecret.vue +3 -3
  85. package/components/form/ServiceNameSelect.vue +1 -1
  86. package/components/form/ServicePorts.vue +1 -1
  87. package/components/form/ShellInput.vue +1 -1
  88. package/components/form/SimpleSecretSelector.vue +4 -4
  89. package/components/form/Taints.vue +1 -1
  90. package/components/form/ValueFromResource.vue +3 -3
  91. package/components/form/WorkloadPorts.vue +8 -7
  92. package/components/form/__tests__/Error.test.ts +1 -1
  93. package/components/form/__tests__/KeyValue.test.ts +21 -0
  94. package/components/formatter/ClusterLink.vue +1 -1
  95. package/components/formatter/ClusterProvider.vue +13 -2
  96. package/components/formatter/Endpoints.vue +1 -1
  97. package/components/formatter/FleetSummaryGraph.vue +2 -2
  98. package/components/formatter/IngressTarget.vue +2 -2
  99. package/components/formatter/PodImages.vue +1 -1
  100. package/components/formatter/PrincipalGroupBindings.vue +1 -1
  101. package/components/formatter/ReceiverIcons.vue +3 -3
  102. package/components/formatter/ServiceType.vue +1 -1
  103. package/components/formatter/WorkloadDetailEndpoints.vue +1 -1
  104. package/components/formatter/WorkloadHealthScale.vue +1 -1
  105. package/components/formatter/__tests__/LiveDate.test.ts +1 -1
  106. package/components/graph/Bar.vue +1 -1
  107. package/components/graph/LinePlot.vue +3 -3
  108. package/components/nav/Group.vue +2 -2
  109. package/components/nav/Header.vue +5 -5
  110. package/components/nav/NamespaceFilter.vue +14 -14
  111. package/components/nav/TopLevelMenu.vue +76 -11
  112. package/components/nav/WindowManager/ContainerLogs.vue +2 -2
  113. package/components/nav/WindowManager/ContainerShell.vue +1 -1
  114. package/components/nav/WorkspaceSwitcher.vue +1 -1
  115. package/config/home-links.js +4 -4
  116. package/config/labels-annotations.js +8 -9
  117. package/config/pod-security-admission.ts +1 -1
  118. package/config/product/auth.js +4 -4
  119. package/config/product/explorer.js +14 -0
  120. package/config/router.js +5 -0
  121. package/config/store.js +2 -0
  122. package/config/table-headers.js +13 -13
  123. package/config/uiplugins.js +8 -1
  124. package/core/plugin-routes.ts +3 -2
  125. package/core/plugin.ts +3 -3
  126. package/core/plugins.js +7 -7
  127. package/creators/pkg/files/index.ts +1 -1
  128. package/detail/cis.cattle.io.clusterscan.vue +3 -3
  129. package/detail/fleet.cattle.io.bundle.vue +1 -1
  130. package/detail/helm.cattle.io.projecthelmchart.vue +16 -29
  131. package/detail/management.cattle.io.user.vue +12 -12
  132. package/detail/namespace.vue +4 -4
  133. package/detail/networking.k8s.io.ingress.vue +3 -3
  134. package/detail/node.vue +2 -2
  135. package/detail/provisioning.cattle.io.cluster.vue +9 -10
  136. package/detail/service.vue +1 -1
  137. package/detail/workload/index.vue +3 -3
  138. package/dialog/AddProjectMemberDialog.vue +2 -2
  139. package/dialog/DrainNode.vue +1 -1
  140. package/dialog/GenericPrompt.vue +9 -5
  141. package/dialog/RotateEncryptionKeyDialog.vue +2 -2
  142. package/dialog/ScaleMachineDownDialog.vue +2 -2
  143. package/edit/auth/azuread.vue +3 -3
  144. package/edit/autoscaling.horizontalpodautoscaler/index.vue +5 -5
  145. package/edit/cis.cattle.io.clusterscan.vue +5 -5
  146. package/edit/cloudcredential.vue +4 -4
  147. package/edit/constraints.gatekeeper.sh.constraint/NamespaceList.vue +1 -1
  148. package/edit/constraints.gatekeeper.sh.constraint/index.vue +4 -4
  149. package/edit/fleet.cattle.io.gitrepo.vue +6 -6
  150. package/edit/helm.cattle.io.projecthelmchart.vue +3 -3
  151. package/edit/logging-flow/index.vue +4 -4
  152. package/edit/logging.banzaicloud.io.output/index.vue +3 -3
  153. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +1 -1
  154. package/edit/logging.banzaicloud.io.output/providers/forward.vue +1 -1
  155. package/edit/logging.banzaicloud.io.output/providers/logz.vue +1 -1
  156. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +1 -1
  157. package/edit/logging.banzaicloud.io.output/providers/redis.vue +1 -1
  158. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +1 -1
  159. package/edit/management.cattle.io.clusterroletemplatebinding.vue +1 -1
  160. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +1 -1
  161. package/edit/management.cattle.io.project.vue +3 -3
  162. package/edit/management.cattle.io.projectroletemplatebinding.vue +2 -2
  163. package/edit/management.cattle.io.setting.vue +1 -1
  164. package/edit/management.cattle.io.user.vue +2 -2
  165. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +2 -2
  166. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  167. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +1 -1
  168. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +3 -3
  169. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +5 -5
  170. package/edit/monitoring.coreos.com.prometheusrule/duration.js +1 -1
  171. package/edit/monitoring.coreos.com.receiver/auth.vue +2 -2
  172. package/edit/monitoring.coreos.com.receiver/tls.vue +3 -4
  173. package/edit/monitoring.coreos.com.receiver/types/__tests__/email.test.ts +53 -0
  174. package/edit/monitoring.coreos.com.receiver/types/email.vue +2 -0
  175. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +3 -3
  176. package/edit/monitoring.coreos.com.receiver/types/webhook.add.vue +1 -1
  177. package/edit/monitoring.coreos.com.route.vue +2 -2
  178. package/edit/namespace.vue +21 -13
  179. package/edit/networking.k8s.io.ingress/Certificate.vue +2 -2
  180. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  181. package/edit/networking.k8s.io.ingress/RulePath.vue +2 -2
  182. package/edit/networking.k8s.io.ingress/Rules.vue +2 -2
  183. package/edit/networking.k8s.io.ingress/index.vue +4 -4
  184. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +3 -3
  185. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  186. package/edit/persistentvolume/index.vue +4 -4
  187. package/edit/persistentvolumeclaim.vue +3 -3
  188. package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +1 -1
  189. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +2 -2
  190. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  191. package/edit/provisioning.cattle.io.cluster/index.vue +7 -7
  192. package/edit/provisioning.cattle.io.cluster/rke2.vue +28 -29
  193. package/edit/resources.cattle.io.backup.vue +2 -2
  194. package/edit/resources.cattle.io.restore.vue +3 -3
  195. package/edit/secret/generic.vue +1 -1
  196. package/edit/secret/index.vue +3 -3
  197. package/edit/service.vue +3 -21
  198. package/edit/serviceaccount.vue +2 -2
  199. package/edit/storage.k8s.io.storageclass/index.vue +4 -4
  200. package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +1 -1
  201. package/edit/token.vue +5 -5
  202. package/edit/workload/index.vue +1 -1
  203. package/edit/workload/mixins/workload.js +8 -8
  204. package/edit/workload/storage/ContainerMountPaths.vue +9 -9
  205. package/edit/workload/storage/Mount.vue +2 -2
  206. package/edit/workload/storage/csi/index.vue +1 -1
  207. package/edit/workload/storage/ephemeralVolume/index.vue +1 -1
  208. package/edit/workload/storage/index.vue +6 -6
  209. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +2 -2
  210. package/initialize/client.js +8 -8
  211. package/initialize/index.js +1 -4
  212. package/layouts/default.vue +38 -11
  213. package/list/catalog.cattle.io.clusterrepo.vue +9 -1
  214. package/list/cis.cattle.io.clusterscan.vue +1 -1
  215. package/list/fleet.cattle.io.cluster.vue +2 -2
  216. package/list/group.principal.vue +1 -1
  217. package/list/helm.cattle.io.projecthelmchart.vue +2 -2
  218. package/list/management.cattle.io.cluster.vue +1 -1
  219. package/list/management.cattle.io.feature.vue +1 -1
  220. package/list/management.cattle.io.user.vue +2 -2
  221. package/list/node.vue +5 -5
  222. package/list/provisioning.cattle.io.cluster.vue +4 -5
  223. package/machine-config/amazonec2.vue +2 -2
  224. package/machine-config/digitalocean.vue +4 -4
  225. package/machine-config/linode.vue +4 -4
  226. package/machine-config/vmwarevsphere.vue +12 -12
  227. package/middleware/authenticated.js +7 -6
  228. package/mixins/brand.js +1 -1
  229. package/mixins/chart.js +6 -6
  230. package/mixins/fetch.client.js +2 -2
  231. package/mixins/form-validation.js +7 -7
  232. package/mixins/resource-fetch-namespaced.js +1 -1
  233. package/mixins/resource-fetch.js +2 -2
  234. package/models/apps.statefulset.js +2 -2
  235. package/models/batch.cronjob.js +1 -1
  236. package/models/catalog.cattle.io.app.js +4 -4
  237. package/models/cis.cattle.io.clusterscan.js +1 -1
  238. package/models/cis.cattle.io.clusterscanbenchmark.js +1 -1
  239. package/models/cis.cattle.io.clusterscanreport.js +1 -1
  240. package/models/cloudcredential.js +1 -1
  241. package/models/cluster/node.js +5 -5
  242. package/models/cluster.x-k8s.io.machinedeployment.js +2 -2
  243. package/models/fleet.cattle.io.gitrepo.js +3 -3
  244. package/models/group.principal.js +4 -4
  245. package/models/helm.cattle.io.projecthelmchart.js +2 -2
  246. package/models/logging.banzaicloud.io.clusterflow.js +2 -2
  247. package/models/logging.banzaicloud.io.flow.js +5 -5
  248. package/models/logging.banzaicloud.io.output.js +2 -2
  249. package/models/management.cattle.io.cluster.js +10 -14
  250. package/models/management.cattle.io.globalrole.js +4 -4
  251. package/models/management.cattle.io.node.js +2 -2
  252. package/models/management.cattle.io.nodepool.js +3 -3
  253. package/models/management.cattle.io.nodetemplate.js +4 -4
  254. package/models/management.cattle.io.project.js +2 -2
  255. package/models/management.cattle.io.roletemplate.js +1 -1
  256. package/models/management.cattle.io.setting.js +1 -1
  257. package/models/management.cattle.io.user.js +5 -5
  258. package/models/monitoring.coreos.com.receiver.js +9 -9
  259. package/models/namespace.js +1 -1
  260. package/models/networking.k8s.io.ingress.js +5 -5
  261. package/models/persistentvolume.js +3 -3
  262. package/models/pod.js +3 -3
  263. package/models/provisioning.cattle.io.cluster.js +39 -27
  264. package/models/rbac.authorization.k8s.io.clusterrole.js +2 -2
  265. package/models/rbac.authorization.k8s.io.role.js +3 -3
  266. package/models/secret.js +1 -1
  267. package/models/service.js +2 -2
  268. package/models/storage.k8s.io.storageclass.js +2 -2
  269. package/models/token.js +1 -1
  270. package/models/workload.js +6 -6
  271. package/models/workload.service.js +5 -21
  272. package/package.json +2 -1
  273. package/pages/about.vue +9 -9
  274. package/pages/account/index.vue +2 -2
  275. package/pages/auth/login.vue +15 -12
  276. package/pages/auth/verify.vue +6 -0
  277. package/pages/c/_cluster/apps/charts/index.vue +4 -4
  278. package/pages/c/_cluster/apps/charts/install.vue +28 -20
  279. package/pages/c/_cluster/auth/roles/index.vue +9 -9
  280. package/pages/c/_cluster/explorer/index.vue +41 -16
  281. package/pages/c/_cluster/explorer/tools/index.vue +8 -8
  282. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +1 -1
  283. package/pages/c/_cluster/fleet/index.vue +11 -11
  284. package/pages/c/_cluster/monitoring/index.vue +1 -1
  285. package/pages/c/_cluster/settings/links.vue +3 -3
  286. package/pages/c/_cluster/settings/performance.vue +1 -1
  287. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +6 -6
  288. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +3 -3
  289. package/pages/c/_cluster/uiplugins/InstallDialog.vue +3 -3
  290. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -1
  291. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +3 -3
  292. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +6 -6
  293. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +4 -4
  294. package/pages/c/_cluster/uiplugins/index.vue +22 -19
  295. package/pages/diagnostic.vue +6 -6
  296. package/pages/home.vue +3 -3
  297. package/pages/prefs.vue +2 -2
  298. package/pages/rio/mesh.vue +3 -3
  299. package/pages/support/index.vue +10 -1
  300. package/pkg/auto-import.js +1 -1
  301. package/pkg/tsconfig.json +1 -0
  302. package/pkg/vue.config.js +1 -1
  303. package/plugins/axios.js +1 -1
  304. package/plugins/clean-html-directive.js +1 -1
  305. package/plugins/dashboard-store/__tests__/mutations.spec.js +4 -4
  306. package/plugins/dashboard-store/actions.js +4 -4
  307. package/plugins/dashboard-store/getters.js +1 -1
  308. package/plugins/dashboard-store/index.js +1 -1
  309. package/plugins/dashboard-store/mutations.js +2 -2
  310. package/plugins/dashboard-store/resource-class.js +8 -8
  311. package/plugins/i18n.js +1 -1
  312. package/plugins/plugin.js +5 -1
  313. package/plugins/steve/actions.js +3 -3
  314. package/plugins/steve/getters.js +3 -3
  315. package/plugins/steve/hybrid-class.js +1 -1
  316. package/plugins/steve/mutations.js +1 -1
  317. package/plugins/steve/performanceTesting.js +1 -1
  318. package/plugins/steve/resourceWatcher.js +1 -1
  319. package/plugins/steve/subscribe.js +6 -6
  320. package/plugins/steve/worker/web-worker.basic.js +1 -1
  321. package/promptRemove/management.cattle.io.project.vue +3 -3
  322. package/promptRemove/mixin/roleDeletionCheck.js +4 -4
  323. package/promptRemove/pod.vue +1 -1
  324. package/rancher-components/StringList/StringList.vue +34 -50
  325. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +2 -2
  326. package/rancher-components/components/Form/Checkbox/Checkbox.vue +1 -1
  327. package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -1
  328. package/rancher-components/components/Form/Radio/RadioButton.vue +2 -2
  329. package/rancher-components/components/Form/Radio/RadioGroup.vue +2 -2
  330. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
  331. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +1 -1
  332. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -7
  333. package/rancher-components/components/StringList/StringList.test.ts +10 -9
  334. package/rancher-components/components/StringList/StringList.vue +5 -5
  335. package/scripts/extension/helm/charts/ui-plugin-server/Chart.yaml +1 -1
  336. package/store/action-menu.js +4 -4
  337. package/store/auth.js +40 -7
  338. package/store/aws.js +1 -1
  339. package/store/catalog.js +12 -11
  340. package/store/digitalocean.js +4 -4
  341. package/store/features.js +1 -0
  342. package/store/github.js +70 -213
  343. package/store/gitlab.js +159 -0
  344. package/store/growl.js +1 -1
  345. package/store/i18n.js +7 -7
  346. package/store/index.js +63 -22
  347. package/store/linode.js +1 -1
  348. package/store/plugins.js +5 -5
  349. package/store/pnap.js +1 -1
  350. package/store/prefs.js +6 -6
  351. package/store/resource-fetch.js +3 -3
  352. package/store/type-map.js +61 -42
  353. package/store/uiplugins.ts +2 -1
  354. package/store/wm.js +5 -4
  355. package/tsconfig.default.json +10 -0
  356. package/tsconfig.json +2 -9
  357. package/types/shell/index.d.ts +21 -13
  358. package/utils/__tests__/version.test.ts +28 -0
  359. package/utils/alertmanagerconfig.js +4 -4
  360. package/utils/array.ts +4 -4
  361. package/utils/async.ts +1 -1
  362. package/utils/auth.js +3 -3
  363. package/utils/axios.js +5 -5
  364. package/utils/cluster.js +4 -3
  365. package/utils/color.js +10 -0
  366. package/utils/create-yaml.js +4 -4
  367. package/utils/crypto/browserHashUtils.js +1 -1
  368. package/utils/crypto/browserMd5.js +1 -1
  369. package/utils/crypto/browserSha1.js +1 -1
  370. package/utils/crypto/browserSha256.js +1 -1
  371. package/utils/crypto/index.js +3 -3
  372. package/utils/favicon.js +2 -3
  373. package/utils/gatekeeper/util.js +3 -3
  374. package/utils/gc/gc.ts +2 -2
  375. package/utils/git.ts +92 -0
  376. package/utils/grafana.js +4 -4
  377. package/utils/monitoring.js +2 -2
  378. package/utils/nuxt.js +2 -2
  379. package/utils/object.js +5 -5
  380. package/utils/pod-security-admission.ts +1 -1
  381. package/utils/projectAndNamespaceFiltering.utils.ts +1 -1
  382. package/utils/select.js +2 -2
  383. package/utils/selector.js +2 -2
  384. package/utils/settings.ts +17 -2
  385. package/utils/socket.js +30 -6
  386. package/utils/sort.js +1 -1
  387. package/utils/string.js +1 -1
  388. package/utils/url.ts +1 -1
  389. package/utils/validators/formRules/index.ts +3 -3
  390. package/utils/validators/role-template.js +4 -4
  391. package/utils/version.js +14 -1
  392. package/vue.config.js +19 -13
  393. package/components/.DS_Store +0 -0
  394. package/components/__tests__/.DS_Store +0 -0
  395. package/components/form/GithubPicker.vue +0 -390
  396. package/creators/pkg/package-lock.json +0 -37
  397. package/yarn-error.log +0 -196
@@ -99,7 +99,7 @@ export default {
99
99
  const actionEnabledForSomeSelected = this.selectedRows.some((node) => {
100
100
  const availableActions = node.availableActions || [];
101
101
 
102
- return availableActions.some(action => action.action === bulkAction.action && action.enabled);
102
+ return availableActions.some((action) => action.action === bulkAction.action && action.enabled);
103
103
  });
104
104
 
105
105
  bulkAction.enabled = this.selectedRows.length > 0 && actionEnabledForSomeSelected;
@@ -218,7 +218,7 @@ export default {
218
218
  return;
219
219
  }
220
220
 
221
- const node = this.pagedRows.find( x => get(x, this.keyField) === nodeId );
221
+ const node = this.pagedRows.find( (x) => get(x, this.keyField) === nodeId );
222
222
 
223
223
  return node;
224
224
  },
@@ -401,7 +401,7 @@ export default {
401
401
  }
402
402
 
403
403
  // check if there is already duplicate content selected (selectedRows) on the list to toggle...
404
- toToggle = toToggle.filter(item => !this.selectedRows.includes(item));
404
+ toToggle = toToggle.filter((item) => !this.selectedRows.includes(item));
405
405
 
406
406
  return toToggle;
407
407
  },
@@ -440,7 +440,7 @@ export default {
440
440
 
441
441
  update(toAdd, toRemove) {
442
442
  toRemove.forEach((row) => {
443
- const index = this.selectedRows.findIndex(r => r === row);
443
+ const index = this.selectedRows.findIndex((r) => r === row);
444
444
 
445
445
  if (index !== -1) {
446
446
  this.selectedRows.splice(index, 1);
@@ -516,7 +516,7 @@ export default {
516
516
 
517
517
  // Go through the table selection and filter out those actions that can't run the chosen action
518
518
  const executableSelection = this.selectedRows.filter((row) => {
519
- const matchingResourceAction = row.availableActions.find(a => a.action === action.action);
519
+ const matchingResourceAction = row.availableActions.find((a) => a.action === action.action);
520
520
 
521
521
  return matchingResourceAction?.enabled;
522
522
  });
@@ -7,7 +7,7 @@ export default {
7
7
  let fromGroup = ( this.groupBy ? this.groupSort || this.groupBy : null) || [];
8
8
  let fromColumn = [];
9
9
 
10
- const column = (this.columns || this.headers).find(x => x && x.name && x.name.toLowerCase() === this.sortBy.toLowerCase());
10
+ const column = (this.columns || this.headers).find((x) => x && x.name && x.name.toLowerCase() === this.sortBy.toLowerCase());
11
11
 
12
12
  if ( this.sortBy && column && column.sort ) {
13
13
  fromColumn = column.sort;
@@ -58,8 +58,8 @@ export default {
58
58
 
59
59
  // Try to find a reasonable default sort
60
60
  if ( !this._defaultSortBy ) {
61
- const markedColumn = this.headers.find(x => !!x.defaultSort);
62
- const nameColumn = this.headers.find( x => x.name === 'name');
61
+ const markedColumn = this.headers.find((x) => !!x.defaultSort);
62
+ const nameColumn = this.headers.find( (x) => x.name === 'name');
63
63
 
64
64
  if ( markedColumn ) {
65
65
  this._defaultSortBy = markedColumn.name;
@@ -68,7 +68,7 @@ export default {
68
68
  this._defaultSortBy = nameColumn.name;
69
69
  } else {
70
70
  // The first column that isn't state
71
- const first = this.headers.filter( x => x.name !== 'state' )[0];
71
+ const first = this.headers.filter( (x) => x.name !== 'state' )[0];
72
72
 
73
73
  if ( first ) {
74
74
  this._defaultSortBy = first.name;
@@ -80,7 +80,7 @@ export default {
80
80
  }
81
81
 
82
82
  // If the sort column doesn't exist or isn't specified, use default
83
- if ( !sortBy || !this.headers.find(x => x.name === sortBy ) ) {
83
+ if ( !sortBy || !this.headers.find((x) => x.name === sortBy ) ) {
84
84
  sortBy = this._defaultSortBy;
85
85
  }
86
86
 
@@ -94,17 +94,17 @@ export default {
94
94
  defaultTab,
95
95
  useHash
96
96
  } = this;
97
- const activeTab = tabs.find(t => t.active);
97
+ const activeTab = tabs.find((t) => t.active);
98
98
 
99
99
  const hash = useHash ? this.$route.hash : undefined;
100
100
  const windowHash = useHash ? hash.slice(1) : undefined;
101
- const windowHashTabMatch = tabs.find(t => t.name === windowHash && !t.active);
101
+ const windowHashTabMatch = tabs.find((t) => t.name === windowHash && !t.active);
102
102
  const firstTab = head(tabs) || null;
103
103
 
104
104
  if (isEmpty(activeTab)) {
105
105
  if (useHash && !isEmpty(windowHashTabMatch)) {
106
106
  this.select(windowHashTabMatch.name);
107
- } else if (!isEmpty(defaultTab) && !isEmpty(tabs.find(t => t.name === defaultTab))) {
107
+ } else if (!isEmpty(defaultTab) && !isEmpty(tabs.find((t) => t.name === defaultTab))) {
108
108
  this.select(defaultTab);
109
109
  } else if (firstTab?.name) {
110
110
  this.select(firstTab.name);
@@ -144,7 +144,7 @@ export default {
144
144
  },
145
145
 
146
146
  find(name) {
147
- return this.sortedTabs.find(x => x.name === name );
147
+ return this.sortedTabs.find((x) => x.name === name );
148
148
  },
149
149
 
150
150
  select(name/* , event */) {
@@ -184,7 +184,7 @@ export default {
184
184
 
185
185
  selectNext(direction) {
186
186
  const { sortedTabs } = this;
187
- const currentIdx = sortedTabs.findIndex(x => x.active);
187
+ const currentIdx = sortedTabs.findIndex((x) => x.active);
188
188
  const nextIdx = getCyclicalIdx(currentIdx, direction, sortedTabs.length);
189
189
  const nextName = sortedTabs[nextIdx].name;
190
190
 
@@ -208,13 +208,13 @@ export default {
208
208
  },
209
209
 
210
210
  tabAddClicked() {
211
- const activeTabIndex = findIndex(this.tabs, tab => tab.active);
211
+ const activeTabIndex = findIndex(this.tabs, (tab) => tab.active);
212
212
 
213
213
  this.$emit('addTab', activeTabIndex);
214
214
  },
215
215
 
216
216
  tabRemoveClicked() {
217
- const activeTabIndex = findIndex(this.tabs, tab => tab.active);
217
+ const activeTabIndex = findIndex(this.tabs, (tab) => tab.active);
218
218
 
219
219
  this.$emit('removeTab', activeTabIndex);
220
220
  },
@@ -61,7 +61,7 @@ export default {
61
61
 
62
62
  const path = d3.line()
63
63
  .x((d, i) => vm.scaleX(i))
64
- .y(d => vm.scaleY(d));
64
+ .y((d) => vm.scaleY(d));
65
65
 
66
66
  return path(this.dataSet);
67
67
  }
@@ -117,11 +117,11 @@ export default {
117
117
 
118
118
  computed: {
119
119
  errorStrings() {
120
- return ( this.errors || [] ).map(x => stringify(x));
120
+ return ( this.errors || [] ).map((x) => stringify(x));
121
121
  },
122
122
 
123
123
  activeStepIndex() {
124
- return this.visibleSteps.findIndex(s => s.name === this.activeStep.name);
124
+ return this.visibleSteps.findIndex((s) => s.name === this.activeStep.name);
125
125
  },
126
126
 
127
127
  showPrevious() {
@@ -153,7 +153,7 @@ export default {
153
153
  },
154
154
 
155
155
  readySteps() {
156
- return this.visibleSteps.filter(step => step.ready);
156
+ return this.visibleSteps.filter((step) => step.ready);
157
157
  },
158
158
 
159
159
  showSteps() {
@@ -161,11 +161,11 @@ export default {
161
161
  },
162
162
 
163
163
  stepsLoaded() {
164
- return !this.steps.some(step => step.loading === true);
164
+ return !this.steps.some((step) => step.loading === true);
165
165
  },
166
166
 
167
167
  visibleSteps() {
168
- return this.steps.filter(step => !step.hidden);
168
+ return this.steps.filter((step) => !step.hidden);
169
169
  },
170
170
 
171
171
  nextButtonStyle() {
@@ -234,7 +234,7 @@ export default {
234
234
  return false;
235
235
  }
236
236
 
237
- const idx = this.visibleSteps.findIndex(s => s.name === step.name);
237
+ const idx = this.visibleSteps.findIndex((s) => s.name === step.name);
238
238
 
239
239
  if (idx === 0 && !this.editFirstStep) {
240
240
  return false;
@@ -478,6 +478,7 @@ $spacer: 10px;
478
478
  display: flex;
479
479
  align-content: space-between;
480
480
  align-items: center;
481
+ margin-bottom: 2*$spacer;
481
482
 
482
483
  border-bottom: var(--header-border-size) solid var(--header-border);
483
484
 
@@ -525,20 +526,12 @@ $spacer: 10px;
525
526
  align-items: center;
526
527
  width: 40px;
527
528
  overflow: visible;
528
- padding-top: 15px;
529
+ padding-top: 7px;
529
530
 
530
- .cru__content & {
531
- padding-top: 0;
532
-
533
- }
534
531
  & > span {
535
- padding-bottom: 5px;
532
+ padding-bottom: 3px;
536
533
  margin-bottom: 5px;
537
534
  white-space: nowrap;
538
-
539
- .cru__content & {
540
- padding-bottom: 3px;
541
- }
542
535
  }
543
536
  }
544
537
 
@@ -565,7 +558,7 @@ $spacer: 10px;
565
558
  flex-basis: 100%;
566
559
  border-top: 1px solid var(--border);
567
560
  position: relative;
568
- top: 28px;
561
+ top: 17px;
569
562
 
570
563
  .cru__content & {
571
564
  top: 13px;
@@ -595,6 +588,7 @@ $spacer: 10px;
595
588
  display: flex;
596
589
  align-items: center;
597
590
  justify-content: space-evenly;
591
+ position: relative;
598
592
 
599
593
  & > .subtitle {
600
594
  margin-right: 20px;
@@ -677,10 +671,4 @@ $spacer: 10px;
677
671
  }
678
672
  }
679
673
 
680
- .wizard {
681
- .header {
682
- margin-bottom: 2*$spacer;
683
- }
684
- }
685
-
686
674
  </style>
@@ -1,5 +1,5 @@
1
- import { mount } from '@vue/test-utils';
2
1
  import Collapse from '@shell/components/Collapse.vue';
2
+ import { mount } from '@vue/test-utils';
3
3
 
4
4
  describe('component: Collapse.vue', () => {
5
5
  describe('closed', () => {
@@ -2,6 +2,7 @@ import { mount } from '@vue/test-utils';
2
2
  import CruResource from '@shell/components/CruResource.vue';
3
3
  import { _EDIT, _YAML } from '@shell/config/query-params';
4
4
  import { cleanHtmlDirective } from '@shell/plugins/clean-html-directive';
5
+ import TextAreaAutoGrow from '@components/Form/TextArea/TextAreaAutoGrow.vue';
5
6
 
6
7
  describe('component: CruResource', () => {
7
8
  it('should hide Cancel button', () => {
@@ -66,4 +67,77 @@ describe('component: CruResource', () => {
66
67
  expect(node.text()).toContain(errors[0]);
67
68
  expect(node.text()).toContain(errors[1]);
68
69
  });
70
+
71
+ it('should prevent default events on keypress Enter', async() => {
72
+ const event = { preventDefault: jest.fn() };
73
+ const wrapper = mount(CruResource, {
74
+ propsData: {
75
+ canYaml: true,
76
+ mode: _EDIT,
77
+ resource: {},
78
+ preventEnterSubmit: true
79
+ },
80
+ slots: { default: TextAreaAutoGrow },
81
+ stubs: { TextAreaAutoGrow },
82
+ mocks: {
83
+ $store: {
84
+ getters: {
85
+ currentStore: () => 'current_store',
86
+ 'current_store/schemaFor': jest.fn(),
87
+ 'current_store/all': jest.fn(),
88
+ 'i18n/t': jest.fn(),
89
+ 'i18n/exists': jest.fn(),
90
+ }
91
+ },
92
+ $route: { query: { AS: _YAML } },
93
+ $router: { applyQuery: jest.fn() },
94
+ }
95
+ });
96
+
97
+ const textAreaField = wrapper.find('[data-testid="text-area-auto-grow"]');
98
+
99
+ await textAreaField.trigger('focus');
100
+ await textAreaField.trigger('keydown.enter', event);
101
+
102
+ expect(event.preventDefault).toHaveBeenCalledWith();
103
+ });
104
+
105
+ it('should not prevent default events on keypress Enter', async() => {
106
+ const event = { preventDefault: jest.fn() };
107
+ const wrapper = mount(CruResource, {
108
+ directives: { cleanHtmlDirective },
109
+ propsData: {
110
+ canYaml: false,
111
+ mode: _EDIT,
112
+ resource: {},
113
+ preventEnterSubmit: false
114
+ },
115
+ components: {
116
+ ResourceYaml: { template: '<div></div> ' },
117
+ ResourceCancelModal: { template: '<div></div> ' },
118
+ },
119
+ slots: { default: TextAreaAutoGrow },
120
+ stubs: { TextAreaAutoGrow },
121
+ mocks: {
122
+ $store: {
123
+ getters: {
124
+ currentStore: () => 'current_store',
125
+ 'current_store/schemaFor': jest.fn(),
126
+ 'current_store/all': jest.fn(),
127
+ 'i18n/t': jest.fn(),
128
+ 'i18n/exists': jest.fn(),
129
+ }
130
+ },
131
+ $route: { query: { AS: _YAML } },
132
+ $router: { applyQuery: jest.fn() },
133
+ }
134
+ });
135
+
136
+ const textAreaField = wrapper.find('[data-testid="text-area-auto-grow"]');
137
+
138
+ await textAreaField.trigger('focus');
139
+ await textAreaField.trigger('keydown.enter', event);
140
+
141
+ expect(event.preventDefault).not.toHaveBeenCalled();
142
+ });
69
143
  });
@@ -1,5 +1,5 @@
1
- import { mount } from '@vue/test-utils';
2
1
  import SimpleBox from '@shell/components/SimpleBox.vue';
2
+ import { mount } from '@vue/test-utils';
3
3
 
4
4
  describe('component: SimpleBox.vue', () => {
5
5
  const wrapper = mount(SimpleBox, { propsData: { title: 'Simple box title' } });
@@ -319,7 +319,7 @@ export default {
319
319
  return this.createRules(this.value);
320
320
  },
321
321
  ruleHeaders() {
322
- const verbHeaders = VERBS.map(verb => ({
322
+ const verbHeaders = VERBS.map((verb) => ({
323
323
  name: verb,
324
324
  key: ucFirst(verb),
325
325
  value: this.verbKey(verb),
@@ -485,7 +485,7 @@ export default {
485
485
  const key = this.verbKey(verb);
486
486
 
487
487
  tableRule[key] = rule.verbs[0] === '*' || rule.verbs.includes(verb);
488
- tableRule.hasCustomVerbs = rule.verbs.some(verb => !VERBS.includes(verb));
488
+ tableRule.hasCustomVerbs = rule.verbs.some((verb) => !VERBS.includes(verb));
489
489
  });
490
490
 
491
491
  return tableRule;
@@ -497,7 +497,7 @@ export default {
497
497
  }
498
498
 
499
499
  parent.roleTemplateNames
500
- .map(rtn => this.$store.getters[`management/byId`](MANAGEMENT.ROLE_TEMPLATE, rtn))
500
+ .map((rtn) => this.$store.getters[`management/byId`](MANAGEMENT.ROLE_TEMPLATE, rtn))
501
501
  .forEach((rt) => {
502
502
  // Add Self
503
503
  res.push({
@@ -659,6 +659,7 @@ export default {
659
659
  :options="verbOptions"
660
660
  :multiple="true"
661
661
  :mode="mode"
662
+ :data-testid="`grant-resources-verbs${props.i}`"
662
663
  @input="updateSelectValue(props.row.value, 'verbs', $event)"
663
664
  />
664
665
  </div>
@@ -670,6 +671,7 @@ export default {
670
671
  :searchable="true"
671
672
  :taggable="true"
672
673
  :mode="mode"
674
+ :data-testid="`grant-resources-resources${props.i}`"
673
675
  @input="setRule('resources', props.row.value, $event)"
674
676
  @createdListItem="setRule('resources', props.row.value, $event)"
675
677
  />
@@ -679,6 +681,7 @@ export default {
679
681
  :value="getRule('apiGroups', props.row.value)"
680
682
  :disabled="isBuiltin"
681
683
  :mode="mode"
684
+ :data-testid="`grant-resources-api-groups${props.i}`"
682
685
  @input="setRule('apiGroups', props.row.value, $event.target.value)"
683
686
  >
684
687
  </div>
@@ -690,6 +693,7 @@ export default {
690
693
  :value="getRule('nonResourceURLs', props.row.value)"
691
694
  :disabled="isBuiltin"
692
695
  :mode="mode"
696
+ :data-testid="`grant-resources-non-resource-urls${props.i}`"
693
697
  @input="setRule('nonResourceURLs', props.row.value, $event.target.value)"
694
698
  >
695
699
  </div>
@@ -76,7 +76,7 @@ export default {
76
76
  return true;
77
77
  })
78
78
  .sort((a, b) => a.name.localeCompare(b.name))
79
- .map(x => x.id);
79
+ .map((x) => x.id);
80
80
 
81
81
  return out;
82
82
  },
@@ -100,7 +100,7 @@ export default {
100
100
  return;
101
101
  }
102
102
  if (this.principals) {
103
- const selected = this.principals.find(p => p.id === this.newValue);
103
+ const selected = this.principals.find((p) => p.id === this.newValue);
104
104
 
105
105
  this.tooltipContent = selected?.name;
106
106
  } else {
@@ -159,7 +159,7 @@ export default {
159
159
 
160
160
  if ( this.searchStr === str ) {
161
161
  // If not, they've already typed something else
162
- this.options = res.map(x => x.id);
162
+ this.options = res.map((x) => x.id);
163
163
  }
164
164
  } catch (e) {
165
165
  this.options = [];
@@ -32,7 +32,7 @@ export default {
32
32
 
33
33
  for ( const c of clusters ) {
34
34
  let state = r.state;
35
- const perEntry = r.perClusterState?.find(x => x.clusterId === c.id );
35
+ const perEntry = r.perClusterState?.find((x) => x.clusterId === c.id );
36
36
  const tooMany = r.perClusterState?.length >= 10 || false;
37
37
 
38
38
  if ( perEntry ) {
@@ -50,8 +50,8 @@ export default {
50
50
  computed: {
51
51
  meta() {
52
52
  return {
53
- total: this.values.map(x => x.value).reduce((a, b) => a + b),
54
- readyCount: this.values.filter(x => x.label === 'Success' || x.label === 'Ready').map(x => x.value).reduce((a, b) => a + b)
53
+ total: this.values.map((x) => x.value).reduce((a, b) => a + b),
54
+ readyCount: this.values.filter((x) => x.label === 'Success' || x.label === 'Ready').map((x) => x.value).reduce((a, b) => a + b)
55
55
  };
56
56
  },
57
57
 
@@ -83,7 +83,7 @@ export default {
83
83
  if ( !this.max ) {
84
84
  max = 100;
85
85
  if ( out.length ) {
86
- max = out.map(x => x.value).reduce((a, b) => a + b);
86
+ max = out.map((x) => x.value).reduce((a, b) => a + b);
87
87
  }
88
88
  }
89
89
 
@@ -112,7 +112,7 @@ export default {
112
112
  return obj;
113
113
  });
114
114
 
115
- return [...out].filter(obj => obj.percent);
115
+ return [...out].filter((obj) => obj.percent);
116
116
  },
117
117
  },
118
118
 
@@ -80,7 +80,7 @@ export default {
80
80
  },
81
81
 
82
82
  bundleCounts() {
83
- const resources = this.bundles.filter(item => item.metadata.name.startsWith(`${ this.repoName }-`));
83
+ const resources = this.bundles.filter((item) => item.metadata.name.startsWith(`${ this.repoName }-`));
84
84
 
85
85
  if (!resources.length) {
86
86
  return [];
@@ -1,6 +1,6 @@
1
1
  // This is to mitigate an issue where the SVG icons being imported from the project weren't being rendered on Firefox
2
2
  // To know more about this technique, check this doc: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/defs
3
- export const getChartIcon = type => `<defs>
3
+ export const getChartIcon = (type) => `<defs>
4
4
  <!-- GIT REPO ICON -->
5
5
  <svg id="git" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96" style="enable-background:new 0 0 96 96" xml:space="preserve"><path class="st0" d="M92.138 43.888 52.018 3.77a5.918 5.918 0 0 0-8.369 0l-8.33 8.332L45.887 22.67a7.025 7.025 0 0 1 7.23 1.684 7.031 7.031 0 0 1 1.67 7.275l10.185 10.185a7.03 7.03 0 0 1 7.275 1.67 7.04 7.04 0 0 1 0 9.958 7.042 7.042 0 0 1-11.492-7.658l-9.5-9.499v24.997a7.09 7.09 0 0 1 1.861 1.331 7.042 7.042 0 1 1-7.65-1.537V35.849a7.04 7.04 0 0 1-3.822-9.234l-10.418-10.42-27.51 27.508a5.921 5.921 0 0 0 0 8.371l40.121 40.118a5.919 5.919 0 0 0 8.37 0l39.93-39.932a5.92 5.92 0 0 0 0-8.37z"/></svg>
6
6
  <!-- GENERIC BUNDLE ICON -->
@@ -57,7 +57,7 @@ export default {
57
57
  let hasStatusChange = false;
58
58
 
59
59
  flattenedData.forEach((item) => {
60
- const index = this.allNodesData.findIndex(nodeData => item.matchingId === nodeData.data.matchingId);
60
+ const index = this.allNodesData.findIndex((nodeData) => item.matchingId === nodeData.data.matchingId);
61
61
 
62
62
  // apply status change to each node
63
63
  if (index > -1 && this.allNodesData[index].data.state !== item.state) {
@@ -82,7 +82,7 @@ export default {
82
82
  default: () => [],
83
83
  type: Array,
84
84
  // we only want functions in the rules array
85
- validator: rules => rules.every(rule => ['function'].includes(typeof rule))
85
+ validator: (rules) => rules.every((rule) => ['function'].includes(typeof rule))
86
86
  }
87
87
  },
88
88
  data() {
@@ -124,7 +124,7 @@ export default {
124
124
  watch: {
125
125
  value() {
126
126
  this.lastUpdateWasFromValue = true;
127
- this.rows = (this.value || []).map(v => ({ value: v }));
127
+ this.rows = (this.value || []).map((v) => ({ value: v }));
128
128
  },
129
129
  rows: {
130
130
  deep: true,
@@ -186,9 +186,17 @@ export default {
186
186
  }
187
187
  event.preventDefault();
188
188
  const text = event.clipboardData.getData('text/plain');
189
- const split = text.split('\n').map(value => ({ value }));
189
+ const split = text.split('\n').map((value) => ({ value }));
190
+
191
+ if (split.length === 1) {
192
+ // It's not multi-line, so don't treat it as such
193
+ return;
194
+ }
195
+
196
+ event.preventDefault();
190
197
 
191
198
  this.rows.splice(index, 1, ...split);
199
+
192
200
  this.update();
193
201
  }
194
202
  },
@@ -29,7 +29,7 @@ export default {
29
29
  computed: {
30
30
  filteredOptions() {
31
31
  return this.options
32
- .filter(option => !this.value.includes(option.value));
32
+ .filter((option) => !this.value.includes(option.value));
33
33
  },
34
34
 
35
35
  addAllowed() {
@@ -43,7 +43,7 @@ export default {
43
43
  this.$emit(value);
44
44
  },
45
45
  calculateOptions(value) {
46
- const valueOption = this.options.find(o => o.value === value);
46
+ const valueOption = this.options.find((o) => o.value === value);
47
47
 
48
48
  if (valueOption) {
49
49
  return [valueOption, ...this.filteredOptions];
@@ -58,6 +58,11 @@ export default {
58
58
  rawData: {
59
59
  type: Boolean,
60
60
  default: false
61
+ },
62
+
63
+ accept: {
64
+ type: String,
65
+ default: '*'
61
66
  }
62
67
  },
63
68
 
@@ -151,6 +156,7 @@ export default {
151
156
  class="hide"
152
157
  :multiple="multiple"
153
158
  :webkitdirectory="directory"
159
+ :accept="accept"
154
160
  @change="fileChange"
155
161
  >
156
162
  </button>