dashboard-shell-shell 1.0.1000000116 → 1.0.1000000117

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 (124) hide show
  1. package/assets/images/action.svg +6 -0
  2. package/assets/images/pl/logo.png +0 -0
  3. package/assets/styles/base/_functions.scss +0 -0
  4. package/assets/styles/base/_mixins.scss +1 -1
  5. package/assets/styles/global/_button.scss +17 -10
  6. package/assets/styles/global/_form.scss +2 -2
  7. package/assets/styles/global/_labeled-input.scss +6 -2
  8. package/assets/styles/global/_select.scss +6 -7
  9. package/assets/styles/global/_table.scss +3 -2
  10. package/assets/styles/global/_tooltip.scss +8 -1
  11. package/assets/styles/themes/_dark.scss +2 -0
  12. package/assets/styles/themes/_light.scss +5 -2
  13. package/assets/styles/vendor/vue-select.scss +2 -1
  14. package/assets/translations/en-us.yaml +1 -3
  15. package/assets/translations/zh-hans.yaml +51 -28
  16. package/components/ActionDropdown.vue +1 -0
  17. package/components/ActionMenuShell.vue +6 -3
  18. package/components/BrandImage.vue +22 -0
  19. package/components/ClusterIconMenu.vue +1 -1
  20. package/components/CodeMirror.vue +1 -0
  21. package/components/CruResource.vue +1 -1
  22. package/components/CruResourceFooter.vue +1 -1
  23. package/components/ExplorerProjectsNamespaces.vue +4 -24
  24. package/components/GlobalRoleBindings.vue +112 -48
  25. package/components/IndentedPanel.vue +4 -10
  26. package/components/PromptRemove.vue +3 -3
  27. package/components/ResourceDetail/Masthead.vue +190 -242
  28. package/components/ResourceDetail/index.vue +20 -5
  29. package/components/ResourceList/Masthead.vue +146 -84
  30. package/components/ResourceList/ResourceLoadingIndicator.vue +5 -2
  31. package/components/ResourceTable.vue +76 -1
  32. package/components/SideNav.vue +66 -29
  33. package/components/SortableTable/THead.vue +6 -0
  34. package/components/SortableTable/index.vue +481 -388
  35. package/components/Tabbed/index.vue +4 -5
  36. package/components/auth/Principal.vue +3 -2
  37. package/components/auth/RoleDetailEdit.vue +58 -5
  38. package/components/auth/SelectPrincipal.vue +1 -0
  39. package/components/form/BannerSettings.vue +18 -16
  40. package/components/form/ChangePassword.vue +4 -4
  41. package/components/form/ColorInput.vue +32 -8
  42. package/components/form/Footer.vue +1 -1
  43. package/components/form/InputWithSelect.vue +2 -0
  44. package/components/form/KeyValue.vue +31 -7
  45. package/components/form/LabeledSelect.vue +178 -178
  46. package/components/form/Members/ClusterPermissionsEditor.vue +1 -2
  47. package/components/form/Members/MembershipEditor.vue +1 -1
  48. package/components/form/NameNsDescription.vue +24 -11
  49. package/components/form/Password.vue +6 -2
  50. package/components/form/ResourceQuota/Namespace.vue +1 -1
  51. package/components/form/ResourceQuota/NamespaceRow.vue +13 -10
  52. package/components/form/ResourceQuota/ProjectRow.vue +0 -1
  53. package/components/form/Select.vue +2 -2
  54. package/components/nav/Favorite.vue +5 -1
  55. package/components/nav/Group.vue +69 -23
  56. package/components/nav/Header.vue +82 -17
  57. package/components/nav/HeaderPageActionMenu.vue +1 -0
  58. package/components/nav/NamespaceFilter.vue +0 -3
  59. package/components/nav/TopLevelMenu.vue +182 -119
  60. package/components/nav/Type.vue +48 -11
  61. package/composables/useClickOutside.ts +1 -1
  62. package/config/product/auth.js +16 -7
  63. package/config/product/explorer.js +1 -1
  64. package/config/product/settings.js +17 -8
  65. package/config/settings.ts +28 -0
  66. package/edit/management.cattle.io.user.vue +17 -4
  67. package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
  68. package/edit/token.vue +1 -1
  69. package/list/harvesterhci.io.management.cluster.vue +17 -0
  70. package/list/management.cattle.io.setting.vue +22 -13
  71. package/list/management.cattle.io.user.vue +25 -14
  72. package/list/provisioning.cattle.io.cluster.vue +6 -7
  73. package/mixins/brand.js +17 -0
  74. package/package.json +1 -1
  75. package/pages/auth/login.vue +84 -29
  76. package/pages/c/_cluster/auth/roles/index.vue +61 -14
  77. package/pages/c/_cluster/settings/banners.vue +174 -101
  78. package/pages/c/_cluster/settings/brand.vue +348 -301
  79. package/pages/c/_cluster/settings/performance.vue +61 -38
  80. package/pages/home.vue +70 -21
  81. package/pages/prefs.vue +25 -23
  82. package/pkg/tsconfig.json +9 -9
  83. package/pkg/vue.config.js +1 -1
  84. package/promptRemove/mixin/roleDeletionCheck.js +2 -2
  85. package/scripts/clean +0 -0
  86. package/scripts/extension/bundle +0 -0
  87. package/scripts/extension/helm/scripts/package +0 -0
  88. package/scripts/extension/helm/scripts/patch +0 -0
  89. package/scripts/extension/helm/scripts/version +0 -0
  90. package/scripts/extension/helmpatch +0 -0
  91. package/scripts/extension/parse-tag-name +0 -0
  92. package/scripts/extension/publish +0 -0
  93. package/scripts/publish-shell.sh +86 -60
  94. package/scripts/serve-pkgs +0 -0
  95. package/scripts/sync-shell-deps +0 -0
  96. package/scripts/typegen.sh +44 -28
  97. package/store/i18n.js +5 -5
  98. package/store/prefs.js +17 -5
  99. package/store/type-map.js +2 -1
  100. package/types/shell/index.d.ts +1 -1
  101. package/utils/error.js +4 -0
  102. package/utils/router.js +3 -3
  103. package/vue.config.js +1 -6
  104. package/components/rancherResourceDetail/Masthead.vue +0 -769
  105. package/components/rancherResourceDetail/__tests__/Masthead.test.ts +0 -65
  106. package/components/rancherResourceDetail/index.vue +0 -591
  107. package/components/rancherResourceList/Masthead.vue +0 -375
  108. package/components/rancherResourceList/ResourceLoadingIndicator.vue +0 -140
  109. package/components/rancherResourceList/index.vue +0 -307
  110. package/components/rancherResourceList/resource-list.config.js +0 -7
  111. package/components/rancherResourceTable.vue +0 -783
  112. package/components/rancherSortableTable/THead.vue +0 -561
  113. package/components/rancherSortableTable/actions.js +0 -153
  114. package/components/rancherSortableTable/advanced-filtering.js +0 -272
  115. package/components/rancherSortableTable/debug.js +0 -117
  116. package/components/rancherSortableTable/filtering.js +0 -290
  117. package/components/rancherSortableTable/grouping.js +0 -48
  118. package/components/rancherSortableTable/index.vue +0 -2712
  119. package/components/rancherSortableTable/paging.js +0 -155
  120. package/components/rancherSortableTable/selection.js +0 -629
  121. package/components/rancherSortableTable/sortable-config.ts +0 -4
  122. package/components/rancherSortableTable/sorting.js +0 -129
  123. package/types/cloud-shell/index.d.ts +0 -11014
  124. /package/components/{rancherResourceList → ResourceList}/Masthead-btn.vue +0 -0
@@ -823,7 +823,6 @@ export default {
823
823
  }
824
824
  }
825
825
  .create-resource-container {
826
-
827
826
  .resource-container {
828
827
  display: flex; // Ensures content grows in child CruResources
829
828
  flex-direction: column;
@@ -887,6 +886,7 @@ form.create-resource-container .cru {
887
886
  }
888
887
  }
889
888
  .cru {
889
+ height: 100%;
890
890
  display: flex;
891
891
  flex-direction: column;
892
892
  flex-grow: 1;
@@ -120,7 +120,7 @@ export default {
120
120
  z-index: z-index('cruFooter');
121
121
 
122
122
  .btn {
123
- margin-right: 10px;
123
+ margin-left: 10px;
124
124
  }
125
125
  }
126
126
 
@@ -1,13 +1,13 @@
1
1
  <script>
2
2
  import { mapGetters, useStore } from 'vuex';
3
- import ResourceTable, { defaultTableSortGenerationFn } from '@shell/components/rancherResourceTable';
3
+ import ResourceTable, { defaultTableSortGenerationFn } from '@shell/components/ResourceTable';
4
4
  import { STATE, AGE, NAME, NS_SNAPSHOT_QUOTA } from '@shell/config/table-headers';
5
5
  import { uniq } from '@shell/utils/array';
6
6
  import { MANAGEMENT, NAMESPACE, VIRTUAL_TYPES, HCI } from '@shell/config/types';
7
7
  import { PROJECT_ID, FLAT_VIEW } from '@shell/config/query-params';
8
8
  import { PanelLocation, ExtensionPoint } from '@shell/core/types';
9
9
  import ExtensionPanel from '@shell/components/ExtensionPanel';
10
- import Masthead from '@shell/components/rancherResourceList/Masthead';
10
+ import Masthead from '@shell/components/ResourceList/Masthead';
11
11
  import { mapPref, GROUP_RESOURCES, ALL_NAMESPACES, DEV } from '@shell/store/prefs';
12
12
  import MoveModal from '@shell/components/MoveModal';
13
13
  import ButtonMultiAction from '@shell/components/ButtonMultiAction.vue';
@@ -505,29 +505,11 @@ export default {
505
505
  <div class="right">
506
506
  <router-link
507
507
  v-if="isNamespaceCreatable && (canSeeProjectlessNamespaces || group.group.key !== notInProjectKey)"
508
- class="create-namespace"
509
- style="margin-bottom: 3px;"
508
+ class="create-namespace btn btn-sm mr-5"
510
509
  :to="createNamespaceLocation(group.group)"
511
- >
510
+ >1
512
511
  {{ t('projectNamespaces.createNamespace') }}
513
512
  </router-link>
514
- <span style="color: var(--link);margin-bottom: 3px;">|</span>
515
- <template v-if="featureDropdownMenu">
516
- <ActionMenu
517
- :showIcon="true"
518
- :resource="getProjectActions(group.group)"
519
- :button-aria-label="t('projectNamespaces.tableActionsLabel', { resource: projectResource(group.group) })"
520
- />
521
- </template>
522
- <template v-else>
523
- <ButtonMultiAction
524
- class="project-action"
525
- :borderless="true"
526
- :aria-label="t('projectNamespaces.tableActionsLabel', { resource: projectResource(group.group) })"
527
- :invisible="!showProjectActionButton(group.group)"
528
- @click="showProjectAction($event, group.group)"
529
- />
530
- </template>
531
513
  </div>
532
514
  </div>
533
515
  </template>
@@ -593,7 +575,6 @@ export default {
593
575
  </template>
594
576
  <style lang="scss" scoped>
595
577
  .invisible {
596
- width: 42px;
597
578
  display: inline-block;
598
579
  }
599
580
 
@@ -620,7 +601,6 @@ export default {
620
601
 
621
602
  .create-namespace {
622
603
  color: var(--link);
623
- padding: 0 18px;
624
604
  }
625
605
 
626
606
  .group-tab {
@@ -108,7 +108,12 @@ export default {
108
108
  } catch (e) { }
109
109
  },
110
110
  data() {
111
+
112
+ const topLevelPermissions = sessionStorage.getItem('TOPLEVELPERMISSIONS') || ''
113
+
111
114
  return {
115
+ topLevelPermissions,
116
+
112
117
  // This not only identifies global roles but the order here is the order we want to display them in the UI
113
118
  globalPermissions: [
114
119
  'admin',
@@ -328,60 +333,119 @@ export default {
328
333
 
329
334
  <div v-else>
330
335
  <form v-if="selectedRoles">
331
- <div
332
- v-for="(sortedRole, roleType) in sortedRoles"
333
- :key="roleType"
334
- class="role-group mb-10"
335
- >
336
- <Card
337
- v-if="Object.keys(sortedRole).length"
338
- :show-highlight-border="false"
339
- :show-actions="false"
336
+ <template v-if="topLevelPermissions && topLevelPermissions !== 'superadmin'">
337
+ <div
338
+ v-for="(sortedRole, roleType) in sortedRoles"
339
+ :key="roleType"
340
+ class="role-group mb-10"
341
+ >
342
+ <Card
343
+ v-if="Object.keys(sortedRole).length"
344
+ :show-highlight-border="false"
345
+ :show-actions="false"
346
+ >
347
+ <template v-slot:title>
348
+ <div class="type-title">
349
+ <h3>{{ t(`rbac.globalRoles.types.${roleType}.label`) }}</h3>
350
+ <div class="type-description">
351
+ {{ t(`rbac.globalRoles.types.${roleType}.description`, { isUser }) }}
352
+ </div>
353
+ </div>
354
+ </template>
355
+ <template v-slot:body>
356
+ <div
357
+ class="checkbox-section"
358
+ :class="'checkbox-section--' + roleType"
359
+ >
360
+ <div
361
+ v-for="(role, i) in sortedRoles[roleType]"
362
+ :key="i"
363
+ class="checkbox mb-10 mr-10"
364
+ >
365
+ <Checkbox
366
+ v-model:value="selectedRoles"
367
+ :value-when-true="role.id"
368
+ :disabled="!!assignOnlyRoles[role.id]"
369
+ :label="role.nameDisplay"
370
+ :description="role.descriptionDisplay"
371
+ :mode="mode"
372
+ :data-testId="'grb-checkbox-' + role.id"
373
+ @update:value="checkboxChanged"
374
+ >
375
+ <template #label>
376
+ <div class="checkbox-label-slot">
377
+ <span class="checkbox-label">{{ role.nameDisplay }}</span>
378
+ <i
379
+ v-if="!!assignOnlyRoles[role.id]"
380
+ v-clean-tooltip="t('rbac.globalRoles.assignOnlyRole')"
381
+ class="checkbox-info icon icon-info icon-lg"
382
+ />
383
+ </div>
384
+ </template>
385
+ </Checkbox>
386
+ </div>
387
+ </div>
388
+ </template>
389
+ </Card>
390
+ </div>
391
+ </template>
392
+
393
+ <template v-else>
394
+ <div
395
+ v-for="(sortedRole, roleType) in { global: sortedRoles['global'] }"
396
+ :key="roleType"
397
+ class="role-group mb-10"
340
398
  >
341
- <template v-slot:title>
342
- <div class="type-title">
343
- <h3>{{ t(`rbac.globalRoles.types.${roleType}.label`) }}</h3>
344
- <div class="type-description">
345
- {{ t(`rbac.globalRoles.types.${roleType}.description`, { isUser }) }}
399
+ <Card
400
+ v-if="Object.keys(sortedRole).length"
401
+ :show-highlight-border="false"
402
+ :show-actions="false"
403
+ >
404
+ <template v-slot:title>
405
+ <div class="type-title">
406
+ <h3>{{ t(`rbac.globalRoles.types.${roleType}.label`) }}</h3>
407
+ <div class="type-description">
408
+ {{ t(`rbac.globalRoles.types.${roleType}.description`, { isUser }) }}
409
+ </div>
346
410
  </div>
347
- </div>
348
- </template>
349
- <template v-slot:body>
350
- <div
351
- class="checkbox-section"
352
- :class="'checkbox-section--' + roleType"
353
- >
411
+ </template>
412
+ <template v-slot:body>
354
413
  <div
355
- v-for="(role, i) in sortedRoles[roleType]"
356
- :key="i"
357
- class="checkbox mb-10 mr-10"
414
+ class="checkbox-section"
415
+ :class="'checkbox-section--' + roleType"
358
416
  >
359
- <Checkbox
360
- v-model:value="selectedRoles"
361
- :value-when-true="role.id"
362
- :disabled="!!assignOnlyRoles[role.id]"
363
- :label="role.nameDisplay"
364
- :description="role.descriptionDisplay"
365
- :mode="mode"
366
- :data-testId="'grb-checkbox-' + role.id"
367
- @update:value="checkboxChanged"
417
+ <div
418
+ v-for="(role, i) in sortedRoles[roleType]"
419
+ :key="i"
420
+ class="checkbox mb-10 mr-10"
368
421
  >
369
- <template #label>
370
- <div class="checkbox-label-slot">
371
- <span class="checkbox-label">{{ role.nameDisplay }}</span>
372
- <i
373
- v-if="!!assignOnlyRoles[role.id]"
374
- v-clean-tooltip="t('rbac.globalRoles.assignOnlyRole')"
375
- class="checkbox-info icon icon-info icon-lg"
376
- />
377
- </div>
378
- </template>
379
- </Checkbox>
422
+ <Checkbox
423
+ v-model:value="selectedRoles"
424
+ :value-when-true="role.id"
425
+ :disabled="!!assignOnlyRoles[role.id]"
426
+ :label="role.nameDisplay"
427
+ :description="role.descriptionDisplay"
428
+ :mode="mode"
429
+ :data-testId="'grb-checkbox-' + role.id"
430
+ @update:value="checkboxChanged"
431
+ >
432
+ <template #label>
433
+ <div class="checkbox-label-slot">
434
+ <span class="checkbox-label">{{ role.nameDisplay }}</span>
435
+ <i
436
+ v-if="!!assignOnlyRoles[role.id]"
437
+ v-clean-tooltip="t('rbac.globalRoles.assignOnlyRole')"
438
+ class="checkbox-info icon icon-info icon-lg"
439
+ />
440
+ </div>
441
+ </template>
442
+ </Checkbox>
443
+ </div>
380
444
  </div>
381
- </div>
382
- </template>
383
- </Card>
384
- </div>
445
+ </template>
446
+ </Card>
447
+ </div>
448
+ </template>
385
449
  </form>
386
450
  </div>
387
451
  </template>
@@ -4,23 +4,17 @@ export default {};
4
4
 
5
5
  <template>
6
6
  <div
7
- class="indented-panel"
7
+ class="indented-panels"
8
8
  >
9
9
  <slot />
10
10
  </div>
11
11
  </template>
12
12
 
13
13
  <style lang="scss">
14
- .indented-panel {
14
+ .indented-panels {
15
15
  height: 100%;
16
- width: 90%;
17
- margin-left: 5%;
16
+ width: 100%;
17
+ padding: 0 20px;
18
18
  }
19
19
 
20
- @media only screen and (max-width: map-get($breakpoints, '--viewport-9')) {
21
- .indented-panel {
22
- margin: 0 20px;
23
- width: initial;
24
- }
25
- }
26
20
  </style>
@@ -386,7 +386,7 @@ export default {
386
386
  class="mt-10"
387
387
  >
388
388
  <span
389
- v-clean-html="t('promptRemove.confirmName', { nameToMatch: escapeHtml(nameToMatch) }, true)"
389
+ v-clean-html="t('promptRemove.confirmName', { nameToMatch: escapeHtml(nameToMatch) })"
390
390
  />
391
391
  </div>
392
392
  </div>
@@ -460,8 +460,8 @@ export default {
460
460
  box-shadow: none;
461
461
  }
462
462
  #confirm {
463
- width: 90%;
464
- margin-left: 3px;
463
+ width: 100%;
464
+ // margin-left: 3px;
465
465
  }
466
466
 
467
467
  .actions {