@rancher/shell 0.1.4 → 0.2.1
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.
- package/assets/brand/suse/favicon.png +0 -0
- package/assets/images/generic-plugin.svg +1 -7
- package/assets/styles/global/_button.scss +1 -0
- package/assets/translations/en-us.yaml +129 -53
- package/assets/translations/zh-hans.yaml +18 -0
- package/components/CommunityLinks.vue +40 -49
- package/components/ExplorerProjectsNamespaces.vue +20 -3
- package/components/HarvesterServiceAddOnConfig.vue +10 -10
- package/components/LazyImage.vue +21 -8
- package/components/PromptRemove.vue +2 -2
- package/components/ResourceList/Masthead.vue +21 -1
- package/components/ResourceList/ResourceLoadingIndicator.vue +0 -8
- package/components/ResourceList/index.vue +42 -36
- package/components/ResourceTable.vue +19 -0
- package/components/SortableTable/THead.vue +311 -70
- package/components/SortableTable/advanced-filtering.js +272 -0
- package/components/SortableTable/filtering.js +90 -29
- package/components/SortableTable/index.vue +486 -280
- package/components/Tabbed/index.vue +25 -7
- package/components/TypeDescription.vue +10 -1
- package/components/fleet/FleetClusters.vue +6 -0
- package/components/fleet/FleetRepos.vue +7 -1
- package/components/form/Command.vue +5 -0
- package/components/form/EnvVars.vue +5 -0
- package/components/form/NameNsDescription.vue +3 -1
- package/components/form/NodeScheduling.vue +6 -1
- package/components/form/PodAffinity.vue +5 -0
- package/components/form/ServiceNameSelect.vue +5 -0
- package/components/form/ValueFromResource.vue +7 -1
- package/components/form/WorkloadPorts.vue +2 -2
- package/components/nav/TopLevelMenu.vue +2 -1
- package/config/home-links.js +155 -0
- package/config/private-label.js +1 -1
- package/config/product/manager.js +0 -2
- package/config/product/settings.js +1 -0
- package/config/product/uiplugins.js +2 -1
- package/config/settings.js +3 -1
- package/config/uiplugins.js +76 -6
- package/config/version.js +17 -0
- package/core/plugin.ts +12 -0
- package/core/plugins.js +29 -5
- package/core/types.ts +6 -0
- package/creators/app/{.eslintignore → files/.eslintignore} +0 -0
- package/creators/app/{.eslintrc.js → files/.eslintrc.js} +0 -0
- package/creators/app/{.vscode → files/.vscode}/settings.json +0 -0
- package/creators/app/{babel.config.js → files/babel.config.js} +0 -0
- package/creators/app/{nuxt.config.js → files/nuxt.config.js} +0 -0
- package/creators/app/{tsconfig.json → files/tsconfig.json} +2 -1
- package/creators/app/init +16 -17
- package/creators/app/package.json +7 -1
- package/creators/pkg/{babel.config.js → files/babel.config.js} +0 -0
- package/creators/pkg/{index.ts → files/index.ts} +0 -0
- package/creators/pkg/{tsconfig.json → files/tsconfig.json} +13 -12
- package/creators/pkg/{vue.config.js → files/vue.config.js} +0 -0
- package/creators/pkg/init +1 -1
- package/creators/pkg/package.json +1 -1
- package/creators/update/init +54 -0
- package/creators/update/package.json +20 -0
- package/creators/update/upgrade +56 -0
- package/creators/update/yarn-error.log +54 -0
- package/detail/provisioning.cattle.io.cluster.vue +1 -1
- package/detail/workload/index.vue +1 -0
- package/edit/persistentvolume/index.vue +48 -13
- package/edit/persistentvolumeclaim.vue +31 -13
- package/edit/provisioning.cattle.io.cluster/ACE.vue +2 -1
- package/edit/provisioning.cattle.io.cluster/DrainOptions.vue +0 -1
- package/edit/provisioning.cattle.io.cluster/rke2.vue +52 -43
- package/edit/service.vue +1 -1
- package/edit/workload/index.vue +19 -9
- package/edit/workload/mixins/workload.js +109 -114
- package/edit/workload/storage/index.vue +11 -17
- package/edit/workload/storage/persistentVolumeClaim/index.vue +5 -0
- package/edit/workload/storage/secret.vue +6 -1
- package/list/catalog.cattle.io.app.vue +10 -9
- package/list/catalog.cattle.io.clusterrepo.vue +6 -61
- package/list/cis.cattle.io.clusterscan.vue +12 -12
- package/list/fleet.cattle.io.bundle.vue +33 -28
- package/list/fleet.cattle.io.cluster.vue +26 -22
- package/list/fleet.cattle.io.clustergroup.vue +6 -0
- package/list/fleet.cattle.io.clusterregistrationtoken.vue +28 -24
- package/list/fleet.cattle.io.gitrepo.vue +25 -14
- package/list/helm.cattle.io.projecthelmchart.vue +52 -33
- package/list/logging.banzaicloud.io.clusterflow.vue +7 -12
- package/list/logging.banzaicloud.io.flow.vue +7 -14
- package/list/management.cattle.io.cluster.vue +26 -15
- package/list/management.cattle.io.feature.vue +13 -8
- package/list/management.cattle.io.user.vue +38 -19
- package/list/monitoring.coreos.com.alertmanagerconfig.vue +8 -15
- package/list/namespace.vue +14 -1
- package/list/node.vue +13 -16
- package/list/persistentvolume.vue +16 -9
- package/list/persistentvolumeclaim.vue +5 -8
- package/list/provisioning.cattle.io.cluster.vue +34 -8
- package/list/service.vue +24 -12
- package/list/ui.cattle.io.navlink.vue +6 -0
- package/list/workload.vue +2 -2
- package/middleware/authenticated.js +6 -0
- package/mixins/resource-fetch.js +12 -18
- package/mixins/resource-manager.js +126 -0
- package/models/catalog.cattle.io.uiplugin.js +4 -0
- package/models/management.cattle.io.cluster.js +9 -1
- package/models/pod.js +15 -5
- package/models/provisioning.cattle.io.cluster.js +4 -0
- package/models/workload.service.js +10 -0
- package/nuxt.config.js +2 -1
- package/package.json +1 -1
- package/pages/auth/login.vue +10 -0
- package/pages/auth/verify.vue +9 -0
- package/pages/c/_cluster/apps/charts/install.vue +119 -31
- package/pages/c/_cluster/settings/DefaultLinksEditor.vue +108 -0
- package/pages/c/_cluster/settings/links.vue +53 -101
- package/pages/c/_cluster/settings/performance.vue +90 -7
- package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +3 -3
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +72 -21
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +26 -7
- package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +2 -7
- package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +23 -15
- package/pages/c/_cluster/uiplugins/UninstallDialog.vue +12 -5
- package/pages/c/_cluster/uiplugins/index.vue +223 -72
- package/pages/support/index.vue +31 -142
- package/plugins/dashboard-store/actions.js +19 -0
- package/plugins/dashboard-store/getters.js +20 -3
- package/plugins/dashboard-store/mutations.js +13 -7
- package/plugins/plugin.js +18 -15
- package/plugins/steve/getters.js +12 -0
- package/plugins/version.js +21 -0
- package/promptRemove/mixin/roleDeletionCheck.js +15 -1
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -7
- package/rancher-components/components/BadgeState/BadgeState.spec.ts +12 -0
- package/rancher-components/components/BadgeState/BadgeState.vue +107 -0
- package/rancher-components/components/BadgeState/index.ts +1 -0
- package/rancher-components/components/Banner/Banner.test.ts +13 -0
- package/rancher-components/components/Banner/Banner.vue +163 -0
- package/rancher-components/components/Banner/index.ts +1 -0
- package/rancher-components/components/Card/Card.vue +150 -0
- package/rancher-components/components/Card/index.ts +1 -0
- package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +77 -0
- package/rancher-components/components/Form/Checkbox/Checkbox.vue +395 -0
- package/rancher-components/components/Form/Checkbox/index.ts +1 -0
- package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +29 -0
- package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +343 -0
- package/rancher-components/components/Form/LabeledInput/index.ts +1 -0
- package/rancher-components/components/Form/Radio/RadioButton.vue +270 -0
- package/rancher-components/components/Form/Radio/RadioGroup.vue +235 -0
- package/rancher-components/components/Form/Radio/index.ts +2 -0
- package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +168 -0
- package/rancher-components/components/Form/TextArea/index.ts +1 -0
- package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +107 -0
- package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +137 -0
- package/rancher-components/components/Form/ToggleSwitch/index.ts +1 -0
- package/rancher-components/components/Form/index.ts +5 -0
- package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +137 -0
- package/rancher-components/components/LabeledTooltip/index.ts +1 -0
- package/scripts/publish-shell.sh +39 -6
- package/scripts/record-deps.js +37 -0
- package/scripts/test-plugins-build.sh +8 -5
- package/scripts/typegen.sh +84 -0
- package/store/auth.js +3 -0
- package/store/index.js +12 -3
- package/store/type-map.js +2 -0
- package/types/shell/index.d.ts +3046 -0
- package/utils/favicon.js +8 -2
- package/utils/gc/gc-interval.ts +40 -0
- package/utils/gc/gc-root-store.js +76 -0
- package/utils/gc/gc-route-changed.ts +44 -0
- package/utils/gc/gc-types.ts +21 -0
- package/utils/gc/gc.ts +282 -0
- package/config/footer.js +0 -18
- package/creators/pkg/nuxt.config.js +0 -6
- package/yarn-error.log +0 -195
|
@@ -17,6 +17,8 @@ import sorting from './sorting';
|
|
|
17
17
|
import paging from './paging';
|
|
18
18
|
import grouping from './grouping';
|
|
19
19
|
import actions from './actions';
|
|
20
|
+
import AdvancedFiltering from './advanced-filtering';
|
|
21
|
+
import LabeledSelect from '@shell/components/form/LabeledSelect';
|
|
20
22
|
// Uncomment for table performance debugging
|
|
21
23
|
// import tableDebug from './debug';
|
|
22
24
|
|
|
@@ -53,7 +55,7 @@ export const COLUMN_BREAKPOINTS = {
|
|
|
53
55
|
export default {
|
|
54
56
|
name: 'SortableTable',
|
|
55
57
|
components: {
|
|
56
|
-
THead, Checkbox, AsyncButton, ActionDropdown
|
|
58
|
+
THead, Checkbox, AsyncButton, ActionDropdown, LabeledSelect
|
|
57
59
|
},
|
|
58
60
|
mixins: [
|
|
59
61
|
filtering,
|
|
@@ -62,6 +64,7 @@ export default {
|
|
|
62
64
|
grouping,
|
|
63
65
|
selection,
|
|
64
66
|
actions,
|
|
67
|
+
AdvancedFiltering,
|
|
65
68
|
// For table performance debugging - uncomment and uncomment the corresponding import
|
|
66
69
|
// tableDebug,
|
|
67
70
|
],
|
|
@@ -294,17 +297,17 @@ export default {
|
|
|
294
297
|
componentTestid: {
|
|
295
298
|
type: String,
|
|
296
299
|
default: 'sortable-table'
|
|
297
|
-
}
|
|
300
|
+
},
|
|
298
301
|
},
|
|
299
302
|
|
|
300
303
|
data() {
|
|
301
304
|
return {
|
|
302
|
-
currentPhase:
|
|
303
|
-
expanded:
|
|
304
|
-
searchQuery:
|
|
305
|
-
eventualSearchQuery:
|
|
306
|
-
actionOfInterest:
|
|
307
|
-
loadingDelay:
|
|
305
|
+
currentPhase: ASYNC_BUTTON_STATES.WAITING,
|
|
306
|
+
expanded: {},
|
|
307
|
+
searchQuery: '',
|
|
308
|
+
eventualSearchQuery: '',
|
|
309
|
+
actionOfInterest: null,
|
|
310
|
+
loadingDelay: false,
|
|
308
311
|
};
|
|
309
312
|
},
|
|
310
313
|
|
|
@@ -368,16 +371,19 @@ export default {
|
|
|
368
371
|
immediate: true
|
|
369
372
|
},
|
|
370
373
|
|
|
371
|
-
isManualRefreshLoading
|
|
372
|
-
|
|
374
|
+
isManualRefreshLoading: {
|
|
375
|
+
handler(neu, old) {
|
|
376
|
+
this.currentPhase = neu ? ASYNC_BUTTON_STATES.WAITING : ASYNC_BUTTON_STATES.ACTION;
|
|
373
377
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
378
|
+
// setTimeout is needed so that this is pushed further back on the JS computing queue
|
|
379
|
+
// because nextTick isn't enough to capture the DOM update for the manual refresh only scenario
|
|
380
|
+
if (old && !neu) {
|
|
381
|
+
this.manualRefreshTimer = setTimeout(() => {
|
|
382
|
+
this.watcherUpdateLiveAndDelayed(neu, old);
|
|
383
|
+
}, 1000);
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
immediate: true
|
|
381
387
|
}
|
|
382
388
|
},
|
|
383
389
|
|
|
@@ -463,6 +469,13 @@ export default {
|
|
|
463
469
|
}
|
|
464
470
|
}
|
|
465
471
|
|
|
472
|
+
// handle cols visibility and filtering if there is advanced filtering
|
|
473
|
+
if (this.hasAdvancedFiltering) {
|
|
474
|
+
const cols = this.handleColsVisibilyAndFiltering(out);
|
|
475
|
+
|
|
476
|
+
return cols;
|
|
477
|
+
}
|
|
478
|
+
|
|
466
479
|
return out;
|
|
467
480
|
},
|
|
468
481
|
|
|
@@ -542,7 +555,7 @@ export default {
|
|
|
542
555
|
group.rows.push(rowData);
|
|
543
556
|
|
|
544
557
|
this.columns.forEach((c) => {
|
|
545
|
-
const value = c.delayLoading ? undefined : this.valueFor(row, c);
|
|
558
|
+
const value = c.delayLoading ? undefined : this.valueFor(row, c, c.isLabel);
|
|
546
559
|
let component;
|
|
547
560
|
let formatted = value;
|
|
548
561
|
let needRef = false;
|
|
@@ -697,11 +710,15 @@ export default {
|
|
|
697
710
|
return ucFirst(col.name);
|
|
698
711
|
},
|
|
699
712
|
|
|
700
|
-
valueFor(row, col) {
|
|
713
|
+
valueFor(row, col, isLabel) {
|
|
701
714
|
if (typeof col.value === 'function') {
|
|
702
715
|
return col.value(row);
|
|
703
716
|
}
|
|
704
717
|
|
|
718
|
+
if (isLabel) {
|
|
719
|
+
return row.metadata.labels[col.label];
|
|
720
|
+
}
|
|
721
|
+
|
|
705
722
|
// Use to debug table columns using expensive value getters
|
|
706
723
|
// console.warn(`Performance: Table valueFor: ${ col.name } ${ col.value }`); // eslint-disable-line no-console
|
|
707
724
|
|
|
@@ -831,7 +848,11 @@ export default {
|
|
|
831
848
|
<div ref="container">
|
|
832
849
|
<div :class="{'titled': $slots.title && $slots.title.length}" class="sortable-table-header">
|
|
833
850
|
<slot name="title" />
|
|
834
|
-
<div
|
|
851
|
+
<div
|
|
852
|
+
v-if="showHeaderRow"
|
|
853
|
+
class="fixed-header-actions"
|
|
854
|
+
:class="{button: !!$slots['header-button'], 'advanced-filtering': hasAdvancedFiltering}"
|
|
855
|
+
>
|
|
835
856
|
<div :class="bulkActionsClass" class="bulk">
|
|
836
857
|
<slot name="header-left">
|
|
837
858
|
<template v-if="tableActions">
|
|
@@ -887,21 +908,77 @@ export default {
|
|
|
887
908
|
</template>
|
|
888
909
|
</slot>
|
|
889
910
|
</div>
|
|
890
|
-
<div v-if="
|
|
911
|
+
<div v-if="!hasAdvancedFiltering && ($slots['header-middle'] && $slots['header-middle'].length)" class="middle">
|
|
891
912
|
<slot name="header-middle" />
|
|
913
|
+
</div>
|
|
914
|
+
|
|
915
|
+
<div v-if="search || hasAdvancedFiltering || isTooManyItemsToAutoUpdate || ($slots['header-right'] && $slots['header-right'].length)" class="search row">
|
|
916
|
+
<ul v-if="hasAdvancedFiltering" class="advanced-filters-applied">
|
|
917
|
+
<li
|
|
918
|
+
v-for="(filter, i) in advancedFilteringValues"
|
|
919
|
+
:key="i"
|
|
920
|
+
>
|
|
921
|
+
<span class="label">{{ `"${filter.value}" ${ t('sortableTable.in') } ${filter.label}` }}</span>
|
|
922
|
+
<span class="cross" @click="clearAdvancedFilter(i)">✕</span>
|
|
923
|
+
<div class="bg"></div>
|
|
924
|
+
</li>
|
|
925
|
+
</ul>
|
|
926
|
+
<slot name="header-right" />
|
|
892
927
|
<AsyncButton
|
|
893
928
|
v-if="isTooManyItemsToAutoUpdate"
|
|
894
929
|
v-tooltip="t('performance.manualRefresh.buttonTooltip')"
|
|
930
|
+
class="manual-refresh"
|
|
895
931
|
mode="refresh"
|
|
896
932
|
:current-phase="currentPhase"
|
|
897
933
|
@click="debouncedRefreshTableData"
|
|
898
934
|
/>
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
935
|
+
<div v-if="hasAdvancedFiltering" ref="advanced-filter-group" class="advanced-filter-group">
|
|
936
|
+
<button class="btn role-primary" @click="advancedFilteringVisibility = !advancedFilteringVisibility;">
|
|
937
|
+
{{ t('sortableTable.addFilter') }}
|
|
938
|
+
</button>
|
|
939
|
+
<div v-show="advancedFilteringVisibility" class="advanced-filter-container">
|
|
940
|
+
<input
|
|
941
|
+
ref="advancedSearchQuery"
|
|
942
|
+
v-model="advFilterSearchTerm"
|
|
943
|
+
type="search"
|
|
944
|
+
class="advanced-search-box"
|
|
945
|
+
:placeholder="t('sortableTable.filterFor')"
|
|
946
|
+
>
|
|
947
|
+
<div class="middle-block">
|
|
948
|
+
<span>{{ t('sortableTable.in') }}</span>
|
|
949
|
+
<LabeledSelect
|
|
950
|
+
v-model="advFilterSelectedProp"
|
|
951
|
+
class="filter-select"
|
|
952
|
+
:clearable="true"
|
|
953
|
+
:options="advFilterSelectOptions"
|
|
954
|
+
:disabled="false"
|
|
955
|
+
:searchable="false"
|
|
956
|
+
mode="edit"
|
|
957
|
+
:multiple="false"
|
|
958
|
+
:taggable="false"
|
|
959
|
+
:placeholder="t('sortableTable.selectCol')"
|
|
960
|
+
@selecting="(col) => advFilterSelectedLabel = col.label"
|
|
961
|
+
/>
|
|
962
|
+
</div>
|
|
963
|
+
<div class="bottom-block">
|
|
964
|
+
<button
|
|
965
|
+
class="btn role-secondary"
|
|
966
|
+
:disabled="!advancedFilteringValues.length"
|
|
967
|
+
@click="clearAllAdvancedFilters"
|
|
968
|
+
>
|
|
969
|
+
{{ t('sortableTable.resetFilters') }}
|
|
970
|
+
</button>
|
|
971
|
+
<button
|
|
972
|
+
class="btn role-primary"
|
|
973
|
+
@click="addAdvancedFilter"
|
|
974
|
+
>
|
|
975
|
+
{{ t('sortableTable.add') }}
|
|
976
|
+
</button>
|
|
977
|
+
</div>
|
|
978
|
+
</div>
|
|
979
|
+
</div>
|
|
903
980
|
<input
|
|
904
|
-
v-if="search"
|
|
981
|
+
v-else-if="search"
|
|
905
982
|
ref="searchQuery"
|
|
906
983
|
v-model="eventualSearchQuery"
|
|
907
984
|
type="search"
|
|
@@ -917,7 +994,12 @@ export default {
|
|
|
917
994
|
v-if="showHeaders"
|
|
918
995
|
:label-for="labelFor"
|
|
919
996
|
:columns="columns"
|
|
997
|
+
:group="group"
|
|
998
|
+
:group-options="advGroupOptions"
|
|
999
|
+
:has-advanced-filtering="hasAdvancedFiltering"
|
|
1000
|
+
:adv-filter-hide-labels-as-cols="advFilterHideLabelsAsCols"
|
|
920
1001
|
:table-actions="tableActions"
|
|
1002
|
+
:table-cols-options="columnOptions"
|
|
921
1003
|
:row-actions="rowActions"
|
|
922
1004
|
:sub-expand-column="subExpandColumn"
|
|
923
1005
|
:row-actions-width="rowActionsWidth"
|
|
@@ -930,6 +1012,9 @@ export default {
|
|
|
930
1012
|
:no-results="noResults"
|
|
931
1013
|
@on-toggle-all="onToggleAll"
|
|
932
1014
|
@on-sort-change="changeSort"
|
|
1015
|
+
@col-visibility-change="changeColVisibility"
|
|
1016
|
+
@group-value-change="(val) => $emit('group-value-change', val)"
|
|
1017
|
+
@update-cols-options="updateColsOptions"
|
|
933
1018
|
/>
|
|
934
1019
|
|
|
935
1020
|
<!-- Don't display anything if we're loading and the delay has yet to pass -->
|
|
@@ -965,24 +1050,24 @@ export default {
|
|
|
965
1050
|
</tr>
|
|
966
1051
|
</slot>
|
|
967
1052
|
</tbody>
|
|
968
|
-
<tbody v-for="
|
|
969
|
-
<slot v-if="groupBy" name="group-row" :group="
|
|
1053
|
+
<tbody v-for="groupedRows in displayRows" v-else :key="groupedRows.key" :class="{ group: groupBy }">
|
|
1054
|
+
<slot v-if="groupBy" name="group-row" :group="groupedRows" :fullColspan="fullColspan">
|
|
970
1055
|
<tr class="group-row">
|
|
971
1056
|
<td :colspan="fullColspan">
|
|
972
|
-
<slot name="group-by" :group="
|
|
1057
|
+
<slot name="group-by" :group="groupedRows.grp">
|
|
973
1058
|
<div v-trim-whitespace class="group-tab">
|
|
974
|
-
{{
|
|
1059
|
+
{{ groupedRows.ref }}
|
|
975
1060
|
</div>
|
|
976
1061
|
</slot>
|
|
977
1062
|
</td>
|
|
978
1063
|
</tr>
|
|
979
1064
|
</slot>
|
|
980
|
-
<template v-for="(row, i) in
|
|
1065
|
+
<template v-for="(row, i) in groupedRows.rows">
|
|
981
1066
|
<slot name="main-row" :row="row.row">
|
|
982
1067
|
<slot :name="'main-row:' + (row.row.mainRowKey || i)" :full-colspan="fullColspan">
|
|
983
1068
|
<!-- The data-cant-run-bulk-action-of-interest attribute is being used instead of :class because
|
|
984
|
-
|
|
985
|
-
|
|
1069
|
+
because our selection.js invokes toggleClass and :class clobbers what was added by toggleClass if
|
|
1070
|
+
the value of :class changes. -->
|
|
986
1071
|
<tr
|
|
987
1072
|
:key="row.key"
|
|
988
1073
|
class="main-row"
|
|
@@ -1020,6 +1105,7 @@ export default {
|
|
|
1020
1105
|
:rowKey="row.key"
|
|
1021
1106
|
>
|
|
1022
1107
|
<td
|
|
1108
|
+
v-show="!hasAdvancedFiltering || (hasAdvancedFiltering && col.col.isColVisible)"
|
|
1023
1109
|
:key="col.col.name"
|
|
1024
1110
|
:data-title="col.col.label"
|
|
1025
1111
|
:data-testid="`sortable-cell-${ i }-${ j }`"
|
|
@@ -1162,7 +1248,118 @@ export default {
|
|
|
1162
1248
|
</div>
|
|
1163
1249
|
</template>
|
|
1164
1250
|
|
|
1165
|
-
<style lang="scss" scoped>
|
|
1251
|
+
<style lang="scss" scoped>
|
|
1252
|
+
|
|
1253
|
+
.manual-refresh {
|
|
1254
|
+
height: 40px;
|
|
1255
|
+
}
|
|
1256
|
+
.advanced-filter-group {
|
|
1257
|
+
position: relative;
|
|
1258
|
+
margin-left: 10px;
|
|
1259
|
+
.advanced-filter-container {
|
|
1260
|
+
position: absolute;
|
|
1261
|
+
top: 38px;
|
|
1262
|
+
right: 0;
|
|
1263
|
+
width: 300px;
|
|
1264
|
+
border: 1px solid var(--primary);
|
|
1265
|
+
background-color: var(--body-bg);
|
|
1266
|
+
padding: 20px;
|
|
1267
|
+
z-index: 2;
|
|
1268
|
+
|
|
1269
|
+
.middle-block {
|
|
1270
|
+
display: flex;
|
|
1271
|
+
align-items: center;
|
|
1272
|
+
margin-top: 20px;
|
|
1273
|
+
|
|
1274
|
+
span {
|
|
1275
|
+
margin-right: 20px;
|
|
1276
|
+
}
|
|
1277
|
+
|
|
1278
|
+
button {
|
|
1279
|
+
margin-left: 20px;
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
.bottom-block {
|
|
1284
|
+
display: flex;
|
|
1285
|
+
align-items: center;
|
|
1286
|
+
margin-top: 40px;
|
|
1287
|
+
justify-content: space-between;
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
.advanced-filters-applied {
|
|
1293
|
+
display: inline-flex;
|
|
1294
|
+
margin: 0;
|
|
1295
|
+
padding: 0;
|
|
1296
|
+
list-style: none;
|
|
1297
|
+
max-width: 100%;
|
|
1298
|
+
flex-wrap: wrap;
|
|
1299
|
+
justify-content: flex-end;
|
|
1300
|
+
|
|
1301
|
+
li {
|
|
1302
|
+
margin: 0 20px 10px 0;
|
|
1303
|
+
padding: 2px 5px;
|
|
1304
|
+
border: 1px solid;
|
|
1305
|
+
display: flex;
|
|
1306
|
+
align-items: center;
|
|
1307
|
+
position: relative;
|
|
1308
|
+
|
|
1309
|
+
&:nth-child(4n+1) {
|
|
1310
|
+
border-color: var(--success);
|
|
1311
|
+
|
|
1312
|
+
.bg {
|
|
1313
|
+
background-color: var(--success);
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
&:nth-child(4n+2) {
|
|
1318
|
+
border-color: var(--warning);
|
|
1319
|
+
|
|
1320
|
+
.bg {
|
|
1321
|
+
background-color: var(--warning);
|
|
1322
|
+
}
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1325
|
+
&:nth-child(4n+3) {
|
|
1326
|
+
border-color: var(--info);
|
|
1327
|
+
|
|
1328
|
+
.bg {
|
|
1329
|
+
background-color: var(--info);
|
|
1330
|
+
}
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
&:nth-child(4n+4) {
|
|
1334
|
+
border-color: var(--error);
|
|
1335
|
+
|
|
1336
|
+
.bg {
|
|
1337
|
+
background-color: var(--error);
|
|
1338
|
+
}
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1341
|
+
.bg {
|
|
1342
|
+
position: absolute;
|
|
1343
|
+
top: 0;
|
|
1344
|
+
left: 0;
|
|
1345
|
+
width: 100%;
|
|
1346
|
+
height: 100%;
|
|
1347
|
+
opacity: 0.2;
|
|
1348
|
+
z-index: -1;
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1351
|
+
.label {
|
|
1352
|
+
margin-right: 10px;
|
|
1353
|
+
font-size: 11px;
|
|
1354
|
+
}
|
|
1355
|
+
.cross {
|
|
1356
|
+
font-size: 12px;
|
|
1357
|
+
font-weight: bold;
|
|
1358
|
+
cursor: pointer;
|
|
1359
|
+
}
|
|
1360
|
+
}
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1166
1363
|
// Remove colors from multi-action buttons in the table
|
|
1167
1364
|
td {
|
|
1168
1365
|
.actions.role-multi-action {
|
|
@@ -1212,332 +1409,341 @@ export default {
|
|
|
1212
1409
|
|
|
1213
1410
|
.search-box {
|
|
1214
1411
|
height: 40px;
|
|
1412
|
+
margin-left: 10px;
|
|
1413
|
+
min-width: 180px;
|
|
1215
1414
|
}
|
|
1216
|
-
</style>
|
|
1217
|
-
|
|
1218
|
-
<style lang="scss">
|
|
1219
|
-
//
|
|
1220
|
-
// Important: Almost all selectors in here need to be ">"-ed together so they
|
|
1221
|
-
// apply only to the current table, not one nested inside another table.
|
|
1222
|
-
//
|
|
1223
|
-
|
|
1224
|
-
$group-row-height: 40px;
|
|
1225
|
-
$group-separation: 40px;
|
|
1226
|
-
$divider-height: 1px;
|
|
1227
|
-
|
|
1228
|
-
$separator: 20;
|
|
1229
|
-
$remove: 100;
|
|
1230
|
-
$spacing: 10px;
|
|
1231
|
-
|
|
1232
|
-
.sortable-table {
|
|
1233
|
-
border-collapse: collapse;
|
|
1234
|
-
min-width: 400px;
|
|
1235
|
-
border-radius: 5px 5px 0 0;
|
|
1236
|
-
outline: 1px solid var(--border);
|
|
1237
|
-
overflow: hidden;
|
|
1238
|
-
background: var(--sortable-table-bg);
|
|
1239
|
-
border-radius: 4px;
|
|
1240
|
-
|
|
1241
|
-
&.overflow-x {
|
|
1242
|
-
overflow-x: visible;
|
|
1243
|
-
}
|
|
1244
|
-
&.overflow-y {
|
|
1245
|
-
overflow-y: visible;
|
|
1246
|
-
}
|
|
1415
|
+
</style>
|
|
1247
1416
|
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1417
|
+
<style lang="scss">
|
|
1418
|
+
//
|
|
1419
|
+
// Important: Almost all selectors in here need to be ">"-ed together so they
|
|
1420
|
+
// apply only to the current table, not one nested inside another table.
|
|
1421
|
+
//
|
|
1251
1422
|
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1423
|
+
$group-row-height: 40px;
|
|
1424
|
+
$group-separation: 40px;
|
|
1425
|
+
$divider-height: 1px;
|
|
1255
1426
|
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1427
|
+
$separator: 20;
|
|
1428
|
+
$remove: 100;
|
|
1429
|
+
$spacing: 10px;
|
|
1259
1430
|
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
}
|
|
1431
|
+
.filter-select .vs__selected-options .vs__selected {
|
|
1432
|
+
text-align: left;
|
|
1263
1433
|
}
|
|
1264
1434
|
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1435
|
+
.sortable-table {
|
|
1436
|
+
border-collapse: collapse;
|
|
1437
|
+
min-width: 400px;
|
|
1438
|
+
border-radius: 5px 5px 0 0;
|
|
1439
|
+
outline: 1px solid var(--border);
|
|
1440
|
+
overflow: hidden;
|
|
1441
|
+
background: var(--sortable-table-bg);
|
|
1442
|
+
border-radius: 4px;
|
|
1443
|
+
|
|
1444
|
+
&.overflow-x {
|
|
1445
|
+
overflow-x: visible;
|
|
1446
|
+
}
|
|
1447
|
+
&.overflow-y {
|
|
1448
|
+
overflow-y: visible;
|
|
1449
|
+
}
|
|
1273
1450
|
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
}
|
|
1451
|
+
td {
|
|
1452
|
+
padding: 8px 5px;
|
|
1453
|
+
border: 0;
|
|
1278
1454
|
|
|
1279
|
-
&:
|
|
1280
|
-
|
|
1455
|
+
&:first-child {
|
|
1456
|
+
padding-left: 10px;
|
|
1281
1457
|
}
|
|
1282
1458
|
|
|
1283
|
-
&:
|
|
1284
|
-
|
|
1459
|
+
&:last-child {
|
|
1460
|
+
padding-right: 10px;
|
|
1285
1461
|
}
|
|
1286
1462
|
|
|
1287
|
-
&.
|
|
1288
|
-
|
|
1289
|
-
padding-top: 0;
|
|
1290
|
-
overflow-wrap: anywhere;
|
|
1463
|
+
&.row-check {
|
|
1464
|
+
padding-top: 12px;
|
|
1291
1465
|
}
|
|
1292
1466
|
}
|
|
1293
1467
|
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1468
|
+
tbody {
|
|
1469
|
+
tr {
|
|
1470
|
+
border-bottom: 1px solid var(--sortable-table-top-divider);
|
|
1471
|
+
background-color: var(--sortable-table-row-bg);
|
|
1297
1472
|
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1473
|
+
&.main-row.has-sub-row {
|
|
1474
|
+
border-bottom: 0;
|
|
1475
|
+
}
|
|
1301
1476
|
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1477
|
+
// if a main-row is hovered also hover it's sibling sub row. note - the reverse is handled in selection.js
|
|
1478
|
+
&.main-row:not(.row-selected):hover + .sub-row {
|
|
1479
|
+
background-color: var(--sortable-table-hover-bg);
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
&:last-of-type {
|
|
1483
|
+
border-bottom: 0;
|
|
1484
|
+
}
|
|
1485
|
+
|
|
1486
|
+
&:hover, &.sub-row-hovered {
|
|
1487
|
+
background-color: var(--sortable-table-hover-bg);
|
|
1488
|
+
}
|
|
1489
|
+
|
|
1490
|
+
&.state-description > td {
|
|
1491
|
+
font-size: 13px;
|
|
1492
|
+
padding-top: 0;
|
|
1493
|
+
overflow-wrap: anywhere;
|
|
1494
|
+
}
|
|
1306
1495
|
}
|
|
1307
|
-
}
|
|
1308
1496
|
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
background-color: var(--body-bg);
|
|
1497
|
+
tr.active-row {
|
|
1498
|
+
color: var(--sortable-table-header-bg);
|
|
1312
1499
|
}
|
|
1313
|
-
}
|
|
1314
1500
|
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
content: "";
|
|
1318
|
-
display: block;
|
|
1319
|
-
height: 20px;
|
|
1320
|
-
background-color: transparent;
|
|
1501
|
+
tr.row-selected {
|
|
1502
|
+
background: var(--sortable-table-selected-bg);
|
|
1321
1503
|
}
|
|
1322
|
-
}
|
|
1323
1504
|
|
|
1324
|
-
|
|
1325
|
-
|
|
1505
|
+
.no-rows {
|
|
1506
|
+
td {
|
|
1507
|
+
padding: 30px 0;
|
|
1508
|
+
text-align: center;
|
|
1509
|
+
}
|
|
1510
|
+
}
|
|
1326
1511
|
|
|
1327
|
-
|
|
1328
|
-
|
|
1512
|
+
.no-rows, .no-results {
|
|
1513
|
+
&:hover {
|
|
1514
|
+
background-color: var(--body-bg);
|
|
1515
|
+
}
|
|
1329
1516
|
}
|
|
1330
1517
|
|
|
1331
|
-
|
|
1332
|
-
|
|
1518
|
+
&.group {
|
|
1519
|
+
&:before {
|
|
1520
|
+
content: "";
|
|
1521
|
+
display: block;
|
|
1522
|
+
height: 20px;
|
|
1523
|
+
background-color: transparent;
|
|
1524
|
+
}
|
|
1333
1525
|
}
|
|
1334
1526
|
|
|
1335
|
-
|
|
1336
|
-
|
|
1527
|
+
tr.group-row {
|
|
1528
|
+
background-color: initial;
|
|
1337
1529
|
|
|
1338
|
-
&:first-
|
|
1339
|
-
border-
|
|
1530
|
+
&:first-child {
|
|
1531
|
+
border-bottom: 2px solid var(--sortable-table-row-bg);
|
|
1340
1532
|
}
|
|
1341
|
-
}
|
|
1342
1533
|
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
height: $group-row-height;
|
|
1346
|
-
line-height: $group-row-height;
|
|
1347
|
-
padding: 0 10px;
|
|
1348
|
-
border-radius: 4px 4px 0px 0px;
|
|
1349
|
-
background-color: var(--sortable-table-row-bg);
|
|
1350
|
-
position: relative;
|
|
1351
|
-
top: 1px;
|
|
1352
|
-
display: inline-block;
|
|
1353
|
-
z-index: z-index('tableGroup');
|
|
1354
|
-
min-width: $group-row-height * 1.8;
|
|
1355
|
-
|
|
1356
|
-
> SPAN {
|
|
1357
|
-
color: var(--sortable-table-group-label);
|
|
1534
|
+
&:not(:first-child) {
|
|
1535
|
+
margin-top: 20px;
|
|
1358
1536
|
}
|
|
1359
|
-
}
|
|
1360
1537
|
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1538
|
+
td {
|
|
1539
|
+
padding: 0;
|
|
1540
|
+
|
|
1541
|
+
&:first-of-type {
|
|
1542
|
+
border-left: 1px solid var(--sortable-table-accent-bg);
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
.group-tab {
|
|
1547
|
+
@include clearfix;
|
|
1548
|
+
height: $group-row-height;
|
|
1549
|
+
line-height: $group-row-height;
|
|
1550
|
+
padding: 0 10px;
|
|
1551
|
+
border-radius: 4px 4px 0px 0px;
|
|
1552
|
+
background-color: var(--sortable-table-row-bg);
|
|
1553
|
+
position: relative;
|
|
1554
|
+
top: 1px;
|
|
1555
|
+
display: inline-block;
|
|
1556
|
+
z-index: z-index('tableGroup');
|
|
1557
|
+
min-width: $group-row-height * 1.8;
|
|
1558
|
+
|
|
1559
|
+
> SPAN {
|
|
1560
|
+
color: var(--sortable-table-group-label);
|
|
1561
|
+
}
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
.group-tab:after {
|
|
1565
|
+
height: $group-row-height;
|
|
1566
|
+
width: 70px;
|
|
1567
|
+
border-radius: 5px 5px 0px 0px;
|
|
1568
|
+
background-color: var(--sortable-table-row-bg);
|
|
1569
|
+
content: "";
|
|
1570
|
+
position: absolute;
|
|
1571
|
+
right: -15px;
|
|
1572
|
+
top: 0px;
|
|
1573
|
+
transform: skewX(40deg);
|
|
1574
|
+
z-index: -1;
|
|
1575
|
+
}
|
|
1372
1576
|
}
|
|
1373
1577
|
}
|
|
1374
1578
|
}
|
|
1375
|
-
}
|
|
1376
1579
|
|
|
1377
|
-
.for-inputs{
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1580
|
+
.for-inputs{
|
|
1581
|
+
& TABLE.sortable-table {
|
|
1582
|
+
width: 100%;
|
|
1583
|
+
border-collapse: collapse;
|
|
1584
|
+
margin-bottom: $spacing;
|
|
1382
1585
|
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1586
|
+
>TBODY>TR>TD, >THEAD>TR>TH {
|
|
1587
|
+
padding-right: $spacing;
|
|
1588
|
+
padding-bottom: $spacing;
|
|
1386
1589
|
|
|
1387
|
-
|
|
1388
|
-
|
|
1590
|
+
&:last-of-type {
|
|
1591
|
+
padding-right: 0;
|
|
1592
|
+
}
|
|
1389
1593
|
}
|
|
1390
|
-
}
|
|
1391
1594
|
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1595
|
+
>TBODY>TR:first-of-type>TD {
|
|
1596
|
+
padding-top: $spacing;
|
|
1597
|
+
}
|
|
1395
1598
|
|
|
1396
|
-
|
|
1397
|
-
|
|
1599
|
+
>TBODY>TR:last-of-type>TD {
|
|
1600
|
+
padding-bottom: 0;
|
|
1601
|
+
}
|
|
1398
1602
|
}
|
|
1399
|
-
}
|
|
1400
1603
|
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1604
|
+
&.edit, &.create, &.clone {
|
|
1605
|
+
TABLE.sortable-table>THEAD>TR>TH {
|
|
1606
|
+
border-color: transparent;
|
|
1607
|
+
}
|
|
1404
1608
|
}
|
|
1405
1609
|
}
|
|
1406
|
-
}
|
|
1407
1610
|
|
|
1408
|
-
.sortable-table-header {
|
|
1409
|
-
|
|
1410
|
-
|
|
1611
|
+
.sortable-table-header {
|
|
1612
|
+
position: relative;
|
|
1613
|
+
z-index: z-index('fixedTableHeader');
|
|
1411
1614
|
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
}
|
|
1416
|
-
}
|
|
1417
|
-
.fixed-header-actions.button{
|
|
1418
|
-
grid-template-columns: [bulk] auto [middle] min-content [search] minmax(min-content, 350px);
|
|
1419
|
-
}
|
|
1420
|
-
|
|
1421
|
-
.fixed-header-actions {
|
|
1422
|
-
padding: 0 0 20px 0;
|
|
1423
|
-
width: 100%;
|
|
1424
|
-
z-index: z-index('fixedTableHeader');
|
|
1425
|
-
background: transparent;
|
|
1426
|
-
display: grid;
|
|
1427
|
-
grid-template-columns: [bulk] auto [middle] min-content [search] minmax(min-content, 200px);
|
|
1428
|
-
grid-column-gap: 10px;
|
|
1429
|
-
|
|
1430
|
-
.bulk {
|
|
1431
|
-
grid-area: bulk;
|
|
1432
|
-
margin-top: 1px;
|
|
1433
|
-
|
|
1434
|
-
$gap: 10px;
|
|
1435
|
-
|
|
1436
|
-
& > BUTTON {
|
|
1437
|
-
display: none; // Handled dynamically
|
|
1615
|
+
&.titled {
|
|
1616
|
+
display: flex;
|
|
1617
|
+
align-items: center;
|
|
1438
1618
|
}
|
|
1619
|
+
}
|
|
1620
|
+
.fixed-header-actions.button{
|
|
1621
|
+
grid-template-columns: [bulk] auto [middle] min-content [search] minmax(min-content, 350px);
|
|
1622
|
+
}
|
|
1439
1623
|
|
|
1440
|
-
|
|
1441
|
-
|
|
1624
|
+
.fixed-header-actions {
|
|
1625
|
+
padding: 0 0 20px 0;
|
|
1626
|
+
width: 100%;
|
|
1627
|
+
z-index: z-index('fixedTableHeader');
|
|
1628
|
+
background: transparent;
|
|
1629
|
+
display: grid;
|
|
1630
|
+
grid-template-columns: [bulk] auto [middle] min-content [search] minmax(min-content, 200px);
|
|
1631
|
+
grid-column-gap: 10px;
|
|
1632
|
+
|
|
1633
|
+
&.advanced-filtering {
|
|
1634
|
+
grid-template-columns: [bulk] auto [middle] minmax(min-content, auto) [search] minmax(min-content, auto);
|
|
1442
1635
|
}
|
|
1443
1636
|
|
|
1444
|
-
.
|
|
1445
|
-
|
|
1446
|
-
margin-left: $gap;
|
|
1447
|
-
vertical-align: middle;
|
|
1448
|
-
margin-top: 2px;
|
|
1449
|
-
}
|
|
1637
|
+
.bulk {
|
|
1638
|
+
grid-area: bulk;
|
|
1450
1639
|
|
|
1451
|
-
|
|
1452
|
-
$disabled-color: var(--disabled-text);
|
|
1453
|
-
$disabled-cursor: not-allowed;
|
|
1454
|
-
li.disabled {
|
|
1455
|
-
color: $disabled-color;
|
|
1456
|
-
cursor: $disabled-cursor;
|
|
1640
|
+
$gap: 10px;
|
|
1457
1641
|
|
|
1458
|
-
|
|
1642
|
+
& > BUTTON {
|
|
1643
|
+
display: none; // Handled dynamically
|
|
1644
|
+
}
|
|
1645
|
+
|
|
1646
|
+
& > BUTTON:not(:last-of-type) {
|
|
1647
|
+
margin-right: $gap;
|
|
1648
|
+
}
|
|
1649
|
+
|
|
1650
|
+
.action-availability {
|
|
1651
|
+
display: none; // Handled dynamically
|
|
1652
|
+
margin-left: $gap;
|
|
1653
|
+
vertical-align: middle;
|
|
1654
|
+
margin-top: 2px;
|
|
1655
|
+
}
|
|
1656
|
+
|
|
1657
|
+
.dropdown-button {
|
|
1658
|
+
$disabled-color: var(--disabled-text);
|
|
1659
|
+
$disabled-cursor: not-allowed;
|
|
1660
|
+
li.disabled {
|
|
1459
1661
|
color: $disabled-color;
|
|
1460
|
-
background-color: unset;
|
|
1461
1662
|
cursor: $disabled-cursor;
|
|
1663
|
+
|
|
1664
|
+
&:hover {
|
|
1665
|
+
color: $disabled-color;
|
|
1666
|
+
background-color: unset;
|
|
1667
|
+
cursor: $disabled-cursor;
|
|
1668
|
+
}
|
|
1462
1669
|
}
|
|
1463
1670
|
}
|
|
1464
|
-
}
|
|
1465
1671
|
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1672
|
+
.bulk-action {
|
|
1673
|
+
.icon {
|
|
1674
|
+
vertical-align: -10%;
|
|
1675
|
+
}
|
|
1469
1676
|
}
|
|
1470
1677
|
}
|
|
1471
|
-
}
|
|
1472
1678
|
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1679
|
+
.middle {
|
|
1680
|
+
grid-area: middle;
|
|
1681
|
+
white-space: nowrap;
|
|
1476
1682
|
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
}
|
|
1483
|
-
|
|
1484
|
-
@keyframes spin {
|
|
1485
|
-
from {
|
|
1486
|
-
transform:rotate(0deg);
|
|
1683
|
+
.icon.icon-backup.animate {
|
|
1684
|
+
animation-name: spin;
|
|
1685
|
+
animation-duration: 1000ms;
|
|
1686
|
+
animation-iteration-count: infinite;
|
|
1687
|
+
animation-timing-function: linear;
|
|
1487
1688
|
}
|
|
1488
|
-
|
|
1489
|
-
|
|
1689
|
+
|
|
1690
|
+
@keyframes spin {
|
|
1691
|
+
from {
|
|
1692
|
+
transform:rotate(0deg);
|
|
1693
|
+
}
|
|
1694
|
+
to {
|
|
1695
|
+
transform:rotate(360deg);
|
|
1696
|
+
}
|
|
1490
1697
|
}
|
|
1491
1698
|
}
|
|
1492
|
-
}
|
|
1493
1699
|
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1700
|
+
.search {
|
|
1701
|
+
grid-area: search;
|
|
1702
|
+
text-align: right;
|
|
1703
|
+
justify-content: flex-end;
|
|
1704
|
+
}
|
|
1499
1705
|
|
|
1500
|
-
|
|
1501
|
-
|
|
1706
|
+
.bulk-actions-dropdown {
|
|
1707
|
+
display: none; // Handled dynamically
|
|
1502
1708
|
|
|
1503
|
-
|
|
1504
|
-
|
|
1709
|
+
.dropdown-button {
|
|
1710
|
+
background-color: var(--primary);
|
|
1505
1711
|
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1712
|
+
&:hover {
|
|
1713
|
+
background-color: var(--primary-hover-bg);
|
|
1714
|
+
color: var(--primary-hover-text);
|
|
1715
|
+
}
|
|
1510
1716
|
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1717
|
+
> *, .icon-chevron-down {
|
|
1718
|
+
color: var(--primary-text);
|
|
1719
|
+
}
|
|
1514
1720
|
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1721
|
+
.button-divider {
|
|
1722
|
+
border-color: var(--primary-text);
|
|
1723
|
+
}
|
|
1518
1724
|
|
|
1519
|
-
|
|
1520
|
-
|
|
1725
|
+
&.disabled {
|
|
1726
|
+
border-color: var(--disabled-bg);
|
|
1521
1727
|
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1728
|
+
.icon-chevron-down {
|
|
1729
|
+
color: var(--disabled-text) !important;
|
|
1730
|
+
}
|
|
1525
1731
|
|
|
1526
|
-
|
|
1527
|
-
|
|
1732
|
+
.button-divider {
|
|
1733
|
+
border-color: var(--disabled-text);
|
|
1734
|
+
}
|
|
1528
1735
|
}
|
|
1529
1736
|
}
|
|
1530
1737
|
}
|
|
1531
1738
|
}
|
|
1532
|
-
}
|
|
1533
1739
|
|
|
1534
|
-
.paging {
|
|
1535
|
-
|
|
1536
|
-
|
|
1740
|
+
.paging {
|
|
1741
|
+
margin-top: 10px;
|
|
1742
|
+
text-align: center;
|
|
1537
1743
|
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1744
|
+
SPAN {
|
|
1745
|
+
display: inline-block;
|
|
1746
|
+
min-width: 200px;
|
|
1747
|
+
}
|
|
1541
1748
|
}
|
|
1542
|
-
|
|
1543
|
-
</style>
|
|
1749
|
+
</style>
|