@rancher/shell 3.0.9-rc.1 → 3.0.9-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/assets/styles/base/_color.scss +1 -0
  2. package/assets/styles/base/_typography.scss +14 -5
  3. package/assets/styles/themes/_light.scss +1 -1
  4. package/assets/styles/themes/_modern.scss +1 -1
  5. package/assets/translations/en-us.yaml +94 -33
  6. package/assets/translations/zh-hans.yaml +0 -2
  7. package/components/ActionMenuShell.vue +4 -4
  8. package/components/CodeMirror.vue +4 -3
  9. package/components/DetailText.vue +54 -7
  10. package/components/Drawer/Chrome.vue +11 -4
  11. package/components/Drawer/DrawerCard.vue +19 -0
  12. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +3 -11
  13. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +2 -2
  14. package/components/Drawer/ResourceDetailDrawer/index.vue +3 -20
  15. package/components/Drawer/types.ts +1 -0
  16. package/components/DynamicContent/DynamicContentCloseButton.vue +2 -2
  17. package/components/LocaleSelector.vue +1 -1
  18. package/components/Markdown.vue +1 -1
  19. package/components/PopoverCard.vue +3 -3
  20. package/components/Resource/Detail/Card/ExtrasCard.vue +39 -0
  21. package/components/Resource/Detail/Card/StateCard/__tests__/composables.test.ts +142 -0
  22. package/components/Resource/Detail/Card/StateCard/composables.ts +41 -11
  23. package/components/Resource/Detail/Card/StateCard/index.vue +3 -9
  24. package/components/Resource/Detail/Card/StateCard/types.ts +6 -0
  25. package/components/Resource/Detail/Card/{PodsCard → StatusCard}/index.vue +11 -10
  26. package/components/Resource/Detail/Card/__tests__/PodsCard.test.ts +24 -25
  27. package/components/Resource/Detail/Cards.vue +27 -0
  28. package/components/Resource/Detail/Masthead/__tests__/index.test.ts +70 -0
  29. package/components/Resource/Detail/Masthead/index.vue +5 -0
  30. package/components/Resource/Detail/Metadata/KeyValueRow.vue +4 -2
  31. package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +2 -2
  32. package/components/Resource/Detail/ResourceRow.types.ts +14 -0
  33. package/components/Resource/Detail/ResourceRow.vue +23 -35
  34. package/components/Resource/Detail/StatusRow.vue +5 -2
  35. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +38 -7
  36. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +106 -2
  37. package/components/Resource/Detail/TitleBar/composables.ts +2 -1
  38. package/components/Resource/Detail/TitleBar/index.vue +41 -6
  39. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +49 -1
  40. package/components/ResourceDetail/Masthead/__tests__/latest.test.ts +85 -0
  41. package/components/ResourceDetail/Masthead/index.vue +1 -0
  42. package/components/ResourceDetail/Masthead/latest.vue +8 -1
  43. package/components/ResourceDetail/Masthead/legacy.vue +1 -1
  44. package/components/Setting.vue +1 -1
  45. package/components/SortableTable/index.vue +25 -0
  46. package/components/SortableTable/selection.js +25 -12
  47. package/components/SortableTable/sorting.js +1 -1
  48. package/components/Tabbed/Tab.vue +1 -0
  49. package/components/Tabbed/index.vue +29 -6
  50. package/components/Window/ContainerShell.vue +10 -13
  51. package/components/fleet/FleetClusterTargets/TargetsList.vue +47 -29
  52. package/components/fleet/FleetClusterTargets/index.vue +82 -29
  53. package/components/fleet/FleetClusters.vue +26 -12
  54. package/components/fleet/FleetGitRepoPaths.vue +2 -2
  55. package/components/fleet/FleetResources.vue +14 -0
  56. package/components/fleet/FleetValuesFrom.vue +2 -2
  57. package/components/fleet/__tests__/FleetClusterTargets.test.ts +531 -0
  58. package/components/fleet/__tests__/FleetClusters.test.ts +576 -0
  59. package/components/fleet/dashboard/ResourceDetails.vue +96 -123
  60. package/components/form/Conditions.vue +1 -15
  61. package/components/form/HookOption.vue +5 -0
  62. package/components/form/LabeledSelect.vue +1 -1
  63. package/components/form/LifecycleHooks.vue +2 -6
  64. package/components/form/ResourceLabeledSelect.vue +12 -1
  65. package/components/form/SeccompProfile.vue +113 -0
  66. package/components/form/Security.vue +244 -133
  67. package/components/form/__tests__/LabeledSelect.test.ts +1 -1
  68. package/components/form/__tests__/SeccompProfile.test.js +124 -0
  69. package/components/form/__tests__/Security.test.ts +125 -37
  70. package/components/formatter/Autoscaler.vue +2 -2
  71. package/components/formatter/FleetSummaryGraph.vue +4 -1
  72. package/components/nav/Group.vue +5 -0
  73. package/components/nav/Header.vue +3 -3
  74. package/components/nav/HeaderPageActionMenu.vue +1 -1
  75. package/components/nav/NamespaceFilter.vue +6 -6
  76. package/components/nav/NotificationCenter/index.vue +1 -1
  77. package/components/nav/TopLevelMenu.helper.ts +41 -16
  78. package/components/nav/TopLevelMenu.vue +45 -25
  79. package/components/nav/WorkspaceSwitcher.vue +1 -1
  80. package/components/nav/__tests__/TopLevelMenu.helper.test.ts +277 -0
  81. package/components/nav/__tests__/TopLevelMenu.test.ts +160 -4
  82. package/components/templates/default.vue +0 -3
  83. package/components/templates/home.vue +0 -3
  84. package/components/templates/plain.vue +0 -3
  85. package/composables/useClickOutside.ts +1 -1
  86. package/config/product/explorer.js +1 -2
  87. package/config/types.js +41 -8
  88. package/detail/__tests__/workload.test.ts +8 -16
  89. package/detail/catalog.cattle.io.app.vue +5 -0
  90. package/detail/fleet.cattle.io.cluster.vue +6 -0
  91. package/detail/workload/index.vue +7 -109
  92. package/edit/__tests__/projectsecret.test.ts +42 -0
  93. package/edit/auth/__tests__/oidc.test.ts +50 -0
  94. package/edit/auth/oidc.vue +68 -44
  95. package/edit/autoscaling.horizontalpodautoscaler/index.vue +140 -59
  96. package/edit/autoscaling.horizontalpodautoscaler/metrics-row.vue +41 -5
  97. package/edit/projectsecret.vue +29 -0
  98. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +89 -200
  99. package/edit/provisioning.cattle.io.cluster/__tests__/Networking.test.ts +58 -17
  100. package/edit/provisioning.cattle.io.cluster/rke2.vue +11 -0
  101. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +3 -63
  102. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +82 -14
  103. package/edit/workload/__tests__/index.test.ts +3 -4
  104. package/edit/workload/index.vue +47 -28
  105. package/edit/workload/mixins/workload.js +66 -31
  106. package/list/catalog.cattle.io.clusterrepo.vue +1 -1
  107. package/list/projectsecret.vue +2 -2
  108. package/machine-config/__tests__/vmwarevsphere.test.ts +64 -0
  109. package/machine-config/amazonec2.vue +2 -2
  110. package/machine-config/vmwarevsphere.vue +58 -4
  111. package/mixins/__tests__/chart.test.ts +63 -0
  112. package/mixins/chart.js +56 -51
  113. package/models/__tests__/catalog.cattle.io.app.test.ts +33 -0
  114. package/models/__tests__/workload.test.ts +333 -0
  115. package/models/catalog.cattle.io.app.js +8 -0
  116. package/models/pod.js +14 -0
  117. package/models/secret.js +1 -1
  118. package/models/workload.js +93 -27
  119. package/package.json +4 -4
  120. package/pages/c/_cluster/apps/charts/__tests__/install.test.ts +91 -0
  121. package/pages/c/_cluster/apps/charts/install.vue +4 -4
  122. package/pages/c/_cluster/explorer/EventsTable.vue +2 -2
  123. package/pages/c/_cluster/fleet/index.vue +14 -8
  124. package/pages/c/_cluster/manager/hostedprovider/index.vue +1 -19
  125. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -1
  126. package/pages/c/_cluster/uiplugins/index.vue +1 -1
  127. package/plugins/dashboard-store/__tests__/resource-class.test.ts +234 -0
  128. package/plugins/dashboard-store/actions.js +9 -8
  129. package/plugins/dashboard-store/resource-class.js +97 -1
  130. package/plugins/steve/__tests__/revision.test.ts +84 -0
  131. package/plugins/steve/__tests__/steve-pagination-utils.test.ts +30 -0
  132. package/plugins/steve/__tests__/subscribe.spec.ts +134 -0
  133. package/plugins/steve/revision.ts +26 -0
  134. package/plugins/steve/steve-pagination-utils.ts +6 -5
  135. package/plugins/steve/subscribe.js +188 -49
  136. package/plugins/subscribe-events.ts +2 -2
  137. package/rancher-components/Form/Checkbox/Checkbox.vue +13 -0
  138. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -1
  139. package/rancher-components/Pill/RcCounterBadge/RcCounterBadge.vue +1 -1
  140. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +3 -1
  141. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +3 -1
  142. package/rancher-components/Pill/RcTag/RcTag.vue +1 -1
  143. package/rancher-components/Pill/index.ts +4 -0
  144. package/rancher-components/RcButton/RcButton.test.ts +53 -9
  145. package/rancher-components/RcButton/RcButton.vue +217 -25
  146. package/rancher-components/RcButton/types.ts +27 -1
  147. package/rancher-components/RcDropdown/RcDropdownMenu.vue +4 -4
  148. package/rancher-components/RcDropdown/types.ts +3 -3
  149. package/rancher-components/RcIcon/RcIcon.test.ts +42 -0
  150. package/rancher-components/RcIcon/RcIcon.vue +9 -6
  151. package/rancher-components/RcIcon/types.ts +13 -9
  152. package/rancher-components/utils/status.test.ts +10 -15
  153. package/rancher-components/utils/status.ts +5 -6
  154. package/store/aws.js +18 -12
  155. package/store/index.js +4 -8
  156. package/store/type-map.utils.ts +1 -1
  157. package/types/kube/kube-api.ts +29 -3
  158. package/types/rancher/steve.api.ts +40 -0
  159. package/types/shell/index.d.ts +99 -0
  160. package/types/store/pagination.types.ts +1 -0
  161. package/types/store/subscribe-events.types.ts +1 -0
  162. package/utils/__tests__/azure.test.ts +56 -0
  163. package/utils/__tests__/back-off.test.ts +364 -245
  164. package/utils/__tests__/error.test.ts +44 -0
  165. package/utils/__tests__/fleet.test.ts +8 -1
  166. package/utils/__tests__/pagination-wrapper.test.ts +167 -0
  167. package/utils/__tests__/version.test.ts +55 -1
  168. package/utils/azure.js +12 -0
  169. package/utils/back-off.ts +302 -69
  170. package/utils/dynamic-content/__tests__/index.test.ts +1 -1
  171. package/utils/dynamic-content/__tests__/new-release.test.ts +48 -7
  172. package/utils/dynamic-content/__tests__/support-notice.test.ts +1 -4
  173. package/utils/dynamic-content/index.ts +1 -6
  174. package/utils/dynamic-content/new-release.ts +5 -3
  175. package/utils/dynamic-content/types.d.ts +0 -1
  176. package/utils/error.js +9 -0
  177. package/utils/fleet.ts +2 -2
  178. package/utils/inactivity.ts +2 -3
  179. package/utils/pagination-wrapper.ts +99 -15
  180. package/utils/validators/formRules/index.ts +3 -0
  181. package/utils/version.js +38 -0
  182. package/components/auth/AzureWarning.vue +0 -77
  183. /package/components/Resource/Detail/{Card/PodsCard/Bubble.vue → Bubble.vue} +0 -0
  184. /package/components/Resource/Detail/Card/{PodsCard → StatusCard}/composable.ts +0 -0
@@ -21,6 +21,7 @@ $yellow001: #FFE47A;
21
21
  $yellow002: #473900;
22
22
 
23
23
  $red001: #B13333;
24
+ $red002: #F2E0E0;
24
25
 
25
26
  $gray001: #EDEFF3;
26
27
  $gray002: #DCDEE4;
@@ -1,14 +1,18 @@
1
+ @mixin h-css() {
2
+ color: var(--body-text);
3
+ font-style: normal;
4
+ font-weight: 400;
5
+ margin: 0 0 10px 0;
6
+ font-family: var(--title-font-family, unset);
7
+ }
8
+
1
9
  HTML, BODY {
2
10
  font-family: $body-font;
3
11
  font-size: 14px;
4
12
  }
5
13
 
6
14
  H1, H2, H3, H4, H5, H6 {
7
- color: var(--body-text);
8
- font-style: normal;
9
- font-weight: 400;
10
- margin: 0 0 10px 0;
11
- font-family: var(--title-font-family, unset); // Use the var if set, otherwise unset and use the font defined by the parent
15
+ @include h-css;
12
16
  }
13
17
 
14
18
  H1 {
@@ -42,6 +46,11 @@ P {
42
46
  margin: 0;
43
47
  }
44
48
 
49
+ legend.h3-legend {
50
+ @include h-css;
51
+ font-size: 18px // Same as H3
52
+ }
53
+
45
54
  //code
46
55
  code, samp, kbd, .monospace {
47
56
  font-family: $mono-font;
@@ -575,7 +575,7 @@
575
575
  --rc-warning-secondary: #{$yellow002};
576
576
 
577
577
  --rc-error: #{$red001};
578
- --rc-error-secondary: #{$gray003};
578
+ --rc-error-secondary: #{$red002};
579
579
 
580
580
  --rc-unknown: #{$gray001};
581
581
  --rc-unknown-secondary: #{$gray004};
@@ -705,7 +705,7 @@ BODY, .theme-light {
705
705
  --rc-warning-secondary: #{$yellow002};
706
706
 
707
707
  --rc-error: #{$red001};
708
- --rc-error-secondary: #{$gray003};
708
+ --rc-error-secondary: #{$red002};
709
709
 
710
710
  --rc-unknown: #{$gray001};
711
711
  --rc-unknown-secondary: #{$gray004};
@@ -121,6 +121,7 @@ generic:
121
121
  1d: 1d
122
122
  7d: 7d
123
123
  30d: 30d
124
+ tooltip: Tooltip
124
125
  completed: Completed
125
126
  enable: Enable
126
127
  disable: Disable
@@ -786,6 +787,11 @@ authConfig:
786
787
  label: Scopes
787
788
  placeholder: openid
788
789
  protip: The <code>openid</code>, <code>profile</code>, and <code>email</code> scopes are required and cannot be removed.
790
+ pkce:
791
+ label: Enable PKCE (S256)
792
+ tooltip: Enable Proof Key for Code Exchange (PKCE) using the S256 code challenge method. When enabled, this client must use PKCE with S256 for authorization requests.
793
+ pkceMethod:
794
+ label: PKCE Method
789
795
  cert:
790
796
  label: Certificate
791
797
  placeholder: Paste in the certificate, starting with -----BEGIN CERTIFICATE-----
@@ -1210,7 +1216,7 @@ catalog:
1210
1216
  tag: tag
1211
1217
  install:
1212
1218
  action:
1213
- goToUpgrade: Edit/Upgrade
1219
+ goToUpgrade: Edit / Change Version
1214
1220
  appReadmeMissing: This chart doesn't have any additional chart information.
1215
1221
  appReadmeTitle: Chart Information (Helm README)
1216
1222
  button:
@@ -2004,7 +2010,8 @@ cluster:
2004
2010
  description: Choose what hypervisor the virtual machine will be scheduled to
2005
2011
  dataCenter: Data Center
2006
2012
  resourcePool: Resource Pool
2007
- dataStore: Data Store
2013
+ dataStore: Datastore
2014
+ dataStoreCluster: Datastore Cluster
2008
2015
  folder: Folder
2009
2016
  host:
2010
2017
  label: Host
@@ -2530,9 +2537,6 @@ cluster:
2530
2537
  caCerts:
2531
2538
  label: CA Certificates
2532
2539
  toolTip: Certificates required for the client to successfully verify the validity of the certificate returned by the endpoint.
2533
- ipv6:
2534
- warning: It looks like you are using an IPv6 CIDR. Your node driver may require additional configuration to support this.
2535
- enable: Enable IPv6 support
2536
2540
  etcd:
2537
2541
  disableSnapshots:
2538
2542
  label: Automatic Backups
@@ -2569,6 +2573,10 @@ cluster:
2569
2573
  dual: Dual-Stack
2570
2574
  errorNeedsIpv6: Stack preference must be set to dual-stack or ipv6 if using ipv6 networking in nodepools.
2571
2575
  k3s:
2576
+ flannelMasq:
2577
+ title: IPv6 NAT
2578
+ label: Enable Flannel IPv6 Masquerade
2579
+ banner: It looks like you're using IPv6. If your IPv6 addresses are not publically routed, for example in the ULA range, you might want to check this option to enable IPv6 NAT; by default, pods use their IPv6 address for outgoing communication.
2572
2580
  systemService:
2573
2581
  coredns: 'CoreDNS'
2574
2582
  local-storage: 'Local Storage'
@@ -2727,7 +2735,6 @@ cruResource:
2727
2735
  providers:
2728
2736
  hosted:
2729
2737
  title: Hosted Providers
2730
- prime: Prime only
2731
2738
  warning: Disabling providers will make any clusters that use them uneditable
2732
2739
  drivers:
2733
2740
  kontainer:
@@ -2957,6 +2964,10 @@ fleet:
2957
2964
  expandAll: Expand All
2958
2965
  collapseAll: Collapse All
2959
2966
  state: State
2967
+ resourceDetails:
2968
+ clusters: Clusters
2969
+ resources: Resources
2970
+ source: Source
2960
2971
  viewMode:
2961
2972
  table: Show table
2962
2973
  cards: Show cards
@@ -3014,24 +3025,36 @@ fleet:
3014
3025
  notReady: Not Ready
3015
3026
  waitApplied: Wait Applied
3016
3027
  clusterTargets:
3017
- title: Select by name
3018
- label: Clusters
3019
3028
  advancedConfigs: Advanced target configurations are defined, check the YAML file for further details.
3020
- placeholders:
3021
- selectMultiple: Select Multiple Clusters
3029
+ clusters:
3030
+ title: Clusters
3031
+ byName:
3032
+ placeholder: Select Multiple Clusters
3033
+ label: Select by cluster name
3034
+ byLabel:
3035
+ title: Select by labels
3036
+ addSelector: Add cluster selector
3037
+ labelKey: Label
3038
+ clusterGroups:
3039
+ title: Cluster Groups
3040
+ byName:
3041
+ label: Select by cluster group name
3042
+ placeholder: Select Multiple Cluster Groups
3022
3043
  rules:
3023
- title: Select by labels
3024
- addSelector: Add cluster selector
3025
- labelKey: Label
3026
3044
  matching:
3027
- title: Selected clusters
3028
- placeholder: Select clusters by name or labels
3045
+ title: |-
3046
+ {n, plural,
3047
+ =0 {No clusters selected}
3048
+ =1 {1 cluster selected}
3049
+ other {{n, number} clusters selected}
3050
+ }
3051
+ placeholder: Select clusters by name, labels or groups
3029
3052
  empty: No clusters in the workspace
3030
3053
  plusMore: |-
3031
3054
  {n, plural,
3032
3055
  =1 {+ 1 more cluster}
3033
3056
  other {+ {n, number} more clusters}
3034
- }
3057
+ }
3035
3058
  application:
3036
3059
  pageTitle: App Bundles
3037
3060
  menuLabel: App Bundles
@@ -3591,6 +3614,7 @@ hpa:
3591
3614
  last: Last Scale Time
3592
3615
  max: Maximum Replicas
3593
3616
  min: Minimum Replicas
3617
+ targetReferenceType: Target Type
3594
3618
  targetReference: Target Reference
3595
3619
 
3596
3620
  import:
@@ -7332,39 +7356,64 @@ workload:
7332
7356
  removeContainer: Remove Container
7333
7357
  addContainer: Add Container
7334
7358
  security:
7335
- addCapabilities: Add Capabilities
7336
7359
  addGroupIDs: Add Group IDs
7337
7360
  allowPrivilegeEscalation:
7338
- label: Privilege Escalation
7339
- 'false': No
7340
- 'true': "Yes: container can gain more privileges than its parent process"
7341
- dropCapabilities: Drop Capabilities
7361
+ title: Privilege Escalation
7362
+ 'true': "Container can gain more privileges than its parent process"
7363
+ capabilities:
7364
+ title: Capabilities
7365
+ add: Add Capabilities
7366
+ drop: Drop Capabilities
7342
7367
  fsGroup: Filesystem Group
7343
7368
  hostIPC: Use Host IPC Namespace
7344
7369
  hostPID: Use Host PID Namespace
7345
7370
  podFsGroup: Pod Filesystem Group
7346
7371
  privileged:
7347
- label: Privileged
7348
- 'false': No
7349
- 'true': "Yes: container has full access to the host"
7372
+ title: Privileged
7373
+ 'true': "Container has full access to the host"
7374
+ help: Enabling privilege will hide Privilege Escalation and seccompProfile.
7375
+ afterTick:
7376
+ 'true': Privilege Escalation and seccompProfile have been hidden.
7377
+ 'false': Privilege Escalation and seccompProfile appeared.
7350
7378
  readOnlyRootFilesystem:
7351
- label: Read-Only Root Filesystem
7352
- 'false': No
7353
- 'true': "Yes: container has a read-only root filesystem"
7379
+ title: Read-Only Root Filesystem
7380
+ 'true': "Container has a read-only root filesystem"
7354
7381
  runAsGroup: Run as Group ID
7355
7382
  runAsNonRoot:
7356
- label: Run as Non-Root
7357
- 'false': No
7358
- 'true': "Yes: container must run as a non-root user"
7383
+ title: Run as Non-Root
7384
+ 'true': "Container must run as a non-root user"
7359
7385
  runAsNonRootOptions:
7360
- noOption: "No"
7361
- yesOption: "Yes: containers must run as non-root-user"
7362
- runAsUser: Run as User ID
7386
+ 'true': "Containers must run as non-root-user"
7387
+ runAsUser:
7388
+ title: Run as User ID
7389
+ label: User ID
7390
+ seccompProfile:
7391
+ pod: Pod Seccomp Profile
7392
+ container: Seccomp Profile
7393
+ type: Type
7394
+ localhostProfile:
7395
+ label: Localhost Profile Path
7396
+ tooltip: Points to a specific seccomp file that must already exist on the machine running the container.
7397
+ placeholder: e.g. path/to/json
7398
+ afterLocalhostProfile:
7399
+ selected: Localhost Profile input appeared.
7400
+ unselected: Localhost Profile input has been hidden.
7401
+ types:
7402
+ none:
7403
+ label: None
7404
+ runtimeDefault:
7405
+ label: RuntimeDefault - inherit the default seccomp profile
7406
+ localhost:
7407
+ label: Localhost - define a custom seccomp profile
7408
+ unconfined:
7409
+ label: Unconfined - no seccomp profile
7363
7410
  shareProcessNamespace: Share single process namespace
7364
7411
  supplementalGroups: Additional Group IDs
7365
7412
  sysctls: Sysctls
7366
7413
  sysctlsKey: Name
7367
7414
  standard: Standard Container
7415
+ initContainer:
7416
+ label: Init Containers
7368
7417
  terminationState: "Last state: Terminated with {lsExitCode}: {lsDescription}, started: {lsStartedAt}, finished: {lsFinishedAt}"
7369
7418
  titles:
7370
7419
  pods: Pods
@@ -7492,6 +7541,7 @@ workload:
7492
7541
  validation:
7493
7542
  containers: Containers
7494
7543
  containerImage: Container {name} - "Container Image" is required.
7544
+ localhostProfile: Container {name} - "Container Localhost Profile" is required when SeccompProfile Type is Localhost.
7495
7545
  replicas: Replicas
7496
7546
  showTabs: 'Show Advanced Options'
7497
7547
  scheduling:
@@ -8364,6 +8414,11 @@ typeLabel:
8364
8414
  one { Role }
8365
8415
  other { Roles }
8366
8416
  }
8417
+ replicationcontroller: |-
8418
+ {count, plural,
8419
+ one { Replication Controller }
8420
+ other { Replication Controllers }
8421
+ }
8367
8422
  scheduling.k8s.io.priorityclass: |-
8368
8423
  {count, plural,
8369
8424
  one { PriorityClass }
@@ -9099,11 +9154,17 @@ component:
9099
9154
  podsCard:
9100
9155
  title: Pods
9101
9156
  ariaResourceName: pods
9157
+ jobsCard:
9158
+ title: Jobs
9159
+ ariaResourceName: jobs
9102
9160
  insightsCard:
9103
9161
  title: Insights
9104
9162
  rows:
9105
9163
  conditions: Conditions
9106
9164
  events: Events
9165
+ extrasCard:
9166
+ title: Extras
9167
+ message: 'Consider installing additional <a class="secondary text-deemphasized" href="{extensionsUrl}">extensions</a> and / or <a class="secondary-text-link" href="{clusterToolsUrl}">cluster tools</a> to enrich your Rancher experience.'
9107
9168
  scaler:
9108
9169
  ariaLabel:
9109
9170
  increase: Increase {resourceName}
@@ -874,8 +874,6 @@ catalog:
874
874
  windows: Windows
875
875
  search: 筛选
876
876
  install:
877
- action:
878
- goToUpgrade: 编辑/升级
879
877
  appReadmeMissing: 此 Chart 没有其他 Chart 信息。
880
878
  appReadmeTitle: Chart 信息(Helm 自述)
881
879
  chart: Chart
@@ -5,7 +5,7 @@ import { useRoute } from 'vue-router';
5
5
 
6
6
  import { isAlternate } from '@shell/utils/platform';
7
7
  import { RcDropdownMenu } from '@components/RcDropdown';
8
- import { ButtonRoleProps, ButtonSizeProps } from '@components/RcButton/types';
8
+ import { ButtonVariant, ButtonSize } from '@components/RcButton/types';
9
9
  import { DropdownOption } from '@components/RcDropdown/types';
10
10
 
11
11
  defineOptions({ inheritAttrs: false });
@@ -13,8 +13,8 @@ defineOptions({ inheritAttrs: false });
13
13
  const store = useStore();
14
14
 
15
15
  type RcDropdownMenuComponentProps = {
16
- buttonRole?: keyof ButtonRoleProps;
17
- buttonSize?: keyof ButtonSizeProps;
16
+ buttonVariant?: ButtonVariant;
17
+ buttonSize?: ButtonSize;
18
18
  buttonAriaLabel?: string;
19
19
  dropdownAriaLabel?: string;
20
20
  dataTestid?: string;
@@ -97,7 +97,7 @@ const menuOptions = () => {
97
97
 
98
98
  <template>
99
99
  <rc-dropdown-menu
100
- :button-role="buttonRole || 'link'"
100
+ :button-variant="buttonVariant || 'link'"
101
101
  :button-size="buttonSize || 'small'"
102
102
  :button-aria-label="buttonAriaLabel"
103
103
  :dropdown-aria-label="dropdownAriaLabel"
@@ -330,9 +330,6 @@ export default {
330
330
  border-color: var(--primary-border);
331
331
  }
332
332
 
333
- .CodeMirror-wrap pre {
334
- word-break: break-word;
335
- }
336
333
  .CodeMirror-code {
337
334
  .CodeMirror-line {
338
335
  &:not(:last-child)>span:after,
@@ -426,6 +423,10 @@ export default {
426
423
  .CodeMirror-gutters {
427
424
  background: inherit;
428
425
  }
426
+
427
+ .CodeMirror-wrap pre {
428
+ word-break: break-word;
429
+ }
429
430
  }
430
431
 
431
432
  .keymap.overlay {
@@ -167,8 +167,12 @@ export default {
167
167
  <h5
168
168
  v-if="labelKey"
169
169
  v-t="labelKey"
170
+ v-clean-tooltip="{content: itemLabel, popperClass: 'detail-text-tooltip'}"
170
171
  />
171
- <h5 v-else-if="label">
172
+ <h5
173
+ v-else-if="label"
174
+ v-clean-tooltip="{content: label, popperClass: 'detail-text-tooltip'}"
175
+ >
172
176
  {{ label }}
173
177
  </h5>
174
178
 
@@ -190,17 +194,22 @@ export default {
190
194
  aria-live="polite"
191
195
  />
192
196
 
193
- <span
197
+ <div
194
198
  v-else
195
- v-clean-html="bodyHtml"
196
- data-testid="detail-top_html"
197
- :class="{'conceal': concealed, 'monospace': monospace && !isBinary}"
198
- aria-live="polite"
199
- />
199
+ :class="{'conceal-wrapper': concealed}"
200
+ >
201
+ <span
202
+ v-clean-html="bodyHtml"
203
+ data-testid="detail-top_html"
204
+ :class="{'conceal': concealed, 'monospace': monospace && !isBinary}"
205
+ aria-live="polite"
206
+ />
207
+ </div>
200
208
 
201
209
  <template v-if="!isBinary && !jsonStr && isLong && !expanded">
202
210
  <a
203
211
  href="#"
212
+ class="more-characters"
204
213
  @click.prevent="expand"
205
214
  >{{ plusMore }}</a>
206
215
  </template>
@@ -238,6 +247,30 @@ export default {
238
247
  background-color: var(--input-bg);
239
248
  border-radius: var(--border-radius);
240
249
  border: solid var(--border-width) var(--input-border);
250
+ contain: inline-size;
251
+
252
+ h5 {
253
+ margin-bottom: 15px;
254
+ white-space: nowrap;
255
+ overflow: hidden;
256
+ text-overflow: ellipsis;
257
+ width: fit-content;
258
+ // Accounting for the button on the right
259
+ max-width: calc(100% - 150px);
260
+ }
261
+
262
+ // This prevents the scrollbar from overlapping the text without changing the size of the detailtext container.
263
+ $scrollBarShift: 10px;
264
+ .conceal-wrapper {
265
+ overflow-x: auto;
266
+ padding-bottom: $scrollBarShift;
267
+ margin-bottom: -$scrollBarShift;
268
+ }
269
+
270
+ .conceal {
271
+ white-space: nowrap;
272
+ display: block;
273
+ }
241
274
 
242
275
  .action-group {
243
276
  position: absolute;
@@ -267,4 +300,18 @@ export default {
267
300
  white-space: pre-wrap;
268
301
  word-wrap: break-all
269
302
  }
303
+
304
+ .more-characters {
305
+ margin-top: 8px;
306
+ display: inline-block;
307
+ }
308
+ </style>
309
+
310
+ <style lang="scss">
311
+ // The global styles for tooltips are in dashboard/shell/assets/styles/global/_tooltip.scss.
312
+ // I don't want to make this change for all tooltips since there's 149 instances as of writing this
313
+ // so I'm adding a global style here that's scoped to the class we're adding to the tooltips we have in this component.
314
+ .detail-text-tooltip.v-popper__popper.v-popper--theme-tooltip {
315
+ overflow-wrap: anywhere;
316
+ }
270
317
  </style>
@@ -3,6 +3,7 @@ import { useI18n } from '@shell/composables/useI18n';
3
3
  import { useStore } from 'vuex';
4
4
  import { computed } from 'vue';
5
5
  import { Props } from './types';
6
+ import RcButton from '@components/RcButton/RcButton.vue';
6
7
 
7
8
  const props = defineProps<Props>();
8
9
  const emit = defineEmits(['close']);
@@ -34,16 +35,20 @@ const ariaLabel = computed(() => i18n.t('component.drawer.chrome.ariaLabel.close
34
35
  <div class="body pp-4">
35
36
  <slot name="body" />
36
37
  </div>
37
- <div class="footer pp-4">
38
+ <div
39
+ v-if="!removeFooter"
40
+ class="footer pp-4"
41
+ >
38
42
  <slot name="footer">
39
43
  <div class="actions">
40
- <button
41
- class="btn role-secondary"
44
+ <RcButton
45
+ variant="secondary"
46
+ size="large"
42
47
  :aria-label="ariaLabel"
43
48
  @click="emit('close')"
44
49
  >
45
50
  {{ i18n.t('component.drawer.chrome.close') }}
46
- </button>
51
+ </RcButton>
47
52
  <slot name="additional-actions" />
48
53
  </div>
49
54
  </slot>
@@ -71,6 +76,8 @@ const ariaLabel = computed(() => i18n.t('component.drawer.chrome.ariaLabel.close
71
76
  height: var(--header-height);
72
77
 
73
78
  & > .title {
79
+ display: flex;
80
+ align-items: center;
74
81
  flex: 1;
75
82
  font-size: 16px;
76
83
  }
@@ -0,0 +1,19 @@
1
+ <script setup lang="ts">
2
+ </script>
3
+
4
+ <template>
5
+ <div class="drawer-card">
6
+ <slot />
7
+ </div>
8
+ </template>
9
+
10
+ <style lang="scss" scoped>
11
+ .drawer-card {
12
+ background-color: var(--body-bg);
13
+ border-radius: var(--border-radius-md);
14
+ padding: 16px;
15
+ max-width: 100%;
16
+ width: 100%;
17
+ position: relative;
18
+ }
19
+ </style>
@@ -3,6 +3,7 @@ import { useI18n } from '@shell/composables/useI18n';
3
3
  import { _VIEW } from '@shell/config/query-params';
4
4
  import { useStore } from 'vuex';
5
5
  import Tab from '@shell/components/Tabbed/Tab.vue';
6
+ import DrawerCard from '@shell/components/Drawer/DrawerCard.vue';
6
7
  import { ConfigProps } from '@shell/components/Drawer/ResourceDetailDrawer/types';
7
8
 
8
9
  const props = defineProps<ConfigProps>();
@@ -15,7 +16,7 @@ const i18n = useI18n(store);
15
16
  name="config-tab"
16
17
  :label="i18n.t('component.drawer.resourceDetailDrawer.configTab.title')"
17
18
  >
18
- <div class="container">
19
+ <DrawerCard>
19
20
  <component
20
21
  :is="props.component"
21
22
  :value="props.resource"
@@ -28,21 +29,12 @@ const i18n = useI18n(store);
28
29
  :default-tab="props.defaultTab"
29
30
  as="config"
30
31
  />
31
- </div>
32
+ </DrawerCard>
32
33
  </Tab>
33
34
  </template>
34
35
 
35
36
  <style lang="scss" scoped>
36
37
  .config-tab {
37
- .container {
38
- background-color: var(--body-bg);
39
- border-radius: var(--border-radius-md);
40
- padding: 16px;
41
- max-width: 100%;
42
- width: 100%;
43
- position: relative;
44
- }
45
-
46
38
  // Handle the loading indicator
47
39
  :deep() .overlay-content-mode {
48
40
  left: 0;
@@ -38,13 +38,13 @@ describe('component: ResourceDetailDrawer/ConfigTab', () => {
38
38
  expect(component.props('name')).toStrictEqual('config-tab');
39
39
  });
40
40
 
41
- it('should render a dynamic component within the .container and pass the correct props', () => {
41
+ it('should render a dynamic component within DrawerCard and pass the correct props', () => {
42
42
  const wrapper = mount(ConfigTab, {
43
43
  props: { resource, component: markRaw(DynamicComponent) },
44
44
  global
45
45
  });
46
46
 
47
- const component = wrapper.find('.container').getComponent(DynamicComponent);
47
+ const component = wrapper.findComponent(DynamicComponent);
48
48
 
49
49
  expect(component.props('value')).toStrictEqual(resource);
50
50
  expect(component.props('mode')).toStrictEqual(_VIEW);
@@ -59,7 +59,6 @@ useResourceDetailDrawerProvider();
59
59
  </script>
60
60
  <template>
61
61
  <Drawer
62
- class="resource-detail-drawer"
63
62
  :ariaTarget="title"
64
63
  @close="emit('close')"
65
64
  >
@@ -72,10 +71,10 @@ useResourceDetailDrawerProvider();
72
71
  </template>
73
72
  <template #body>
74
73
  <Tabbed
75
- class="tabbed"
76
74
  :useHash="false"
77
75
  :showExtensionTabs="false"
78
76
  :componentTestid="componentTestid"
77
+ :remove-borders="true"
79
78
  @changed="({selectedName}) => {activeTab = selectedName;}"
80
79
  >
81
80
  <ConfigTab
@@ -92,7 +91,8 @@ useResourceDetailDrawerProvider();
92
91
  <template #additional-actions>
93
92
  <RcButton
94
93
  v-if="canEdit"
95
- :primary="true"
94
+ variant="primary"
95
+ size="large"
96
96
  :aria-label="action.ariaLabel"
97
97
  :data-testid="editBttnDataTestId"
98
98
  @click="action.action"
@@ -102,20 +102,3 @@ useResourceDetailDrawerProvider();
102
102
  </template>
103
103
  </Drawer>
104
104
  </template>
105
-
106
- <style lang="scss" scoped>
107
- .resource-detail-drawer {
108
- :deep() .tabbed {
109
- & > .tabs {
110
- border: none;
111
- }
112
-
113
- & > .tab-container {
114
- border: none;
115
- border-top: 1px solid var(--border);
116
- padding: 0;
117
- padding-top: 24px;
118
- }
119
- }
120
- }
121
- </style>
@@ -1,3 +1,4 @@
1
1
  export interface Props {
2
2
  ariaTarget: string;
3
+ removeFooter?: boolean;
3
4
  }
@@ -18,8 +18,8 @@ const markRead = () => {
18
18
  </script>
19
19
  <template>
20
20
  <RcButton
21
- ghost
22
- small
21
+ variant="ghost"
22
+ size="small"
23
23
  :aria-label="t('dynamicContent.action.close')"
24
24
  tabindex="0"
25
25
  @click="markRead()"
@@ -79,7 +79,7 @@ export default {
79
79
  >
80
80
  <rc-dropdown-trigger
81
81
  data-testid="locale-selector"
82
- link
82
+ variant="link"
83
83
  class="baseline locale-selector-btn"
84
84
  :aria-label="t('locale.menu')"
85
85
  >
@@ -93,7 +93,7 @@ export default {
93
93
  color: rgb(101, 109, 118);
94
94
  border-left: 0.25em solid rgb(208, 215, 222);
95
95
  padding: 0 1em;
96
- margin-bottom: 16px;
96
+ margin: 10px 8px 8px 8px;
97
97
  }
98
98
 
99
99
  table {