shared-ritm 1.3.36 → 1.3.38

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 (86) hide show
  1. package/dist/index.css +1 -1
  2. package/dist/shared-ritm.es.js +9088 -8988
  3. package/dist/shared-ritm.umd.js +342 -342
  4. package/dist/types/api/services/PhotoService.d.ts +38 -51
  5. package/dist/types/api/services/RepairsService.d.ts +1 -1
  6. package/dist/types/api/services/VideoService.d.ts +2 -1
  7. package/dist/types/api/settings/ApiService.d.ts +1 -1
  8. package/dist/types/api/types/Api_Tasks.d.ts +1 -0
  9. package/dist/types/api/types/Api_Video.d.ts +5 -4
  10. package/dist/types/common/app-button/Button.stories.d.ts +13 -0
  11. package/dist/types/common/app-checkbox/Checkbox.stories.d.ts +8 -0
  12. package/dist/types/common/app-date-picker/DatePicker.stories.d.ts +7 -0
  13. package/dist/types/common/app-datepicker/Datepicker.stories.d.ts +10 -0
  14. package/dist/types/common/app-dialogs/Confirm.stories.d.ts +8 -0
  15. package/dist/types/common/app-dropdown/Dropdown.stories.d.ts +8 -0
  16. package/dist/types/common/app-file/File.stories.d.ts +8 -0
  17. package/dist/types/common/app-icon/Icon.stories.d.ts +7 -0
  18. package/dist/types/common/app-input/Input.stories.d.ts +9 -0
  19. package/dist/types/common/app-input-new/InputNew.stories.d.ts +12 -0
  20. package/dist/types/common/app-input-search/InputSearch.stories.d.ts +8 -0
  21. package/dist/types/common/app-loader/Loader.stories.d.ts +8 -0
  22. package/dist/types/common/app-select/Select.stories.d.ts +7 -0
  23. package/dist/types/common/app-table/components/ModalSelect.stories.d.ts +10 -0
  24. package/dist/types/common/app-toggle/Toggle.stories.d.ts +8 -0
  25. package/dist/types/configs/storybook.d.ts +1 -0
  26. package/dist/types/stories/Button.stories.d.ts +13 -0
  27. package/dist/types/stories/Checkbox.stories.d.ts +7 -0
  28. package/dist/types/stories/Confirm.stories.d.ts +8 -0
  29. package/dist/types/stories/DatePicker.stories.d.ts +8 -0
  30. package/dist/types/stories/Dropdown.stories.d.ts +8 -0
  31. package/dist/types/stories/File.stories.d.ts +8 -0
  32. package/dist/types/stories/Icon.stories.d.ts +7 -0
  33. package/dist/types/stories/Input.stories.d.ts +11 -0
  34. package/dist/types/stories/InputNew.stories.d.ts +12 -0
  35. package/dist/types/stories/InputSearch.stories.d.ts +10 -0
  36. package/dist/types/stories/Loader.stories.d.ts +8 -0
  37. package/dist/types/stories/Select.stories.d.ts +7 -0
  38. package/dist/types/stories/Toggle.stories.d.ts +8 -0
  39. package/package.json +64 -64
  40. package/src/App.vue +2461 -2461
  41. package/src/api/services/BrigadesService.ts +32 -32
  42. package/src/api/services/ControlsService.ts +96 -96
  43. package/src/api/services/EquipmentService.ts +29 -29
  44. package/src/api/services/InstrumentsService.ts +68 -68
  45. package/src/api/services/MetricsService.ts +123 -123
  46. package/src/api/services/ModulesService.ts +27 -27
  47. package/src/api/services/ProjectsService.ts +83 -83
  48. package/src/api/services/RepairsService.ts +111 -111
  49. package/src/api/services/ScheduleService.ts +69 -69
  50. package/src/api/services/SearchService.ts +22 -22
  51. package/src/api/services/UserService.ts +123 -123
  52. package/src/api/services/VideoService.ts +118 -113
  53. package/src/api/settings/ApiService.ts +124 -124
  54. package/src/api/types/Api_Auth.ts +105 -105
  55. package/src/api/types/Api_Brigades.ts +36 -36
  56. package/src/api/types/Api_Controls.ts +111 -111
  57. package/src/api/types/Api_Equipment.ts +3 -3
  58. package/src/api/types/Api_Instruments.ts +156 -156
  59. package/src/api/types/Api_Metrics.ts +5 -5
  60. package/src/api/types/Api_Modules.ts +21 -21
  61. package/src/api/types/Api_Projects.ts +62 -62
  62. package/src/api/types/Api_Repairs.ts +186 -186
  63. package/src/api/types/Api_Schedule.ts +64 -64
  64. package/src/api/types/Api_Search.ts +80 -80
  65. package/src/api/types/Api_Tasks.ts +1 -0
  66. package/src/api/types/Api_User.ts +146 -146
  67. package/src/api/types/Api_Video.ts +244 -241
  68. package/src/common/app-datepicker/AppDatepicker.vue +218 -218
  69. package/src/common/app-dropdown/AppDropdown.vue +37 -37
  70. package/src/common/app-input-new/AppInputNew.vue +179 -179
  71. package/src/common/app-layout/AppLayout.vue +84 -84
  72. package/src/common/app-modal/index.vue +96 -96
  73. package/src/common/app-sheet-new/AppSheetNew.vue +244 -244
  74. package/src/common/app-sidebar/AppSidebar.vue +174 -174
  75. package/src/common/app-sidebar/components/SidebarMenuItem.vue +149 -149
  76. package/src/common/app-table/AppTable.vue +313 -313
  77. package/src/common/app-table/AppTableLayout.vue +137 -137
  78. package/src/common/app-table/components/ModalSelect.vue +302 -298
  79. package/src/common/app-table/controllers/useBaseTable.ts +45 -45
  80. package/src/common/app-table/controllers/useTableModel.ts +102 -102
  81. package/src/icons/dialogs/SafetyIcon.vue +12 -12
  82. package/src/index.ts +131 -131
  83. package/src/styles/variables.sass +12 -12
  84. package/src/utils/files.ts +19 -19
  85. package/dist/types/api/services/ComentsServise.d.ts +0 -10
  86. package/dist/types/api/types/Api_Users.d.ts +0 -43
@@ -1,96 +1,96 @@
1
- <template>
2
- <q-dialog v-model="model">
3
- <q-card class="modal" :style="{ width, 'max-width': width || 'unset', maxHeight: maxHeight || '600px' }">
4
- <q-card-section class="section">
5
- <div v-if="title" class="title">{{ title }}</div>
6
-
7
- <slot />
8
-
9
- <div v-if="loading" class="loader-overlay">
10
- <q-spinner-audio class="loader-spinner" size="md" :thickness="3" color="primary" />
11
- </div>
12
- </q-card-section>
13
-
14
- <q-card-actions align="center" class="btn__wrapper">
15
- <slot name="actions" />
16
- </q-card-actions>
17
- </q-card>
18
- </q-dialog>
19
- </template>
20
-
21
- <script setup lang="ts">
22
- import { defineProps, defineEmits, defineModel } from 'vue'
23
-
24
- type Props = {
25
- modelValue?: boolean
26
- title?: string
27
- width?: string
28
- loading?: boolean
29
- maxHeight?: string
30
- }
31
-
32
- defineProps<Props>()
33
-
34
- const emit = defineEmits(['update:modelValue'])
35
-
36
- const model = defineModel<boolean>()
37
- </script>
38
-
39
- <style scoped lang="scss">
40
- .modal {
41
- display: grid;
42
- border-radius: 0.5rem;
43
- grid-template-rows: 1fr auto;
44
- font-family: NunitoSansFont, sans-serif;
45
- color: #1d425d;
46
- overflow: hidden;
47
-
48
- .section {
49
- position: relative;
50
- display: grid;
51
- grid-template-rows: auto 1fr;
52
- justify-items: center;
53
- gap: 0.5rem;
54
- background-color: white;
55
- overflow: auto;
56
-
57
- .loader-overlay {
58
- width: 100%;
59
- height: 100%;
60
- position: absolute;
61
- inset: 0;
62
- z-index: 10;
63
- background: rgba(255, 255, 255, 0.8);
64
- display: flex;
65
- align-items: center;
66
- justify-content: center;
67
- }
68
- .loader-spinner {
69
- z-index: 11;
70
- }
71
- }
72
-
73
- .title {
74
- font-size: 32px;
75
- font-weight: 700;
76
- }
77
-
78
- .btn__wrapper {
79
- width: 100%;
80
- background-color: var(--light-blue);
81
- padding: 1rem;
82
- }
83
- }
84
- </style>
85
-
86
- <style lang="scss">
87
- .modal {
88
- .btn__wrapper {
89
- button {
90
- padding: 13px 37px;
91
- border-radius: 4px;
92
- color: var(--action-text-color);
93
- }
94
- }
95
- }
96
- </style>
1
+ <template>
2
+ <q-dialog v-model="model">
3
+ <q-card class="modal" :style="{ width, 'max-width': width || 'unset', maxHeight: maxHeight || '600px' }">
4
+ <q-card-section class="section">
5
+ <div v-if="title" class="title">{{ title }}</div>
6
+
7
+ <slot />
8
+
9
+ <div v-if="loading" class="loader-overlay">
10
+ <q-spinner-audio class="loader-spinner" size="md" :thickness="3" color="primary" />
11
+ </div>
12
+ </q-card-section>
13
+
14
+ <q-card-actions align="center" class="btn__wrapper">
15
+ <slot name="actions" />
16
+ </q-card-actions>
17
+ </q-card>
18
+ </q-dialog>
19
+ </template>
20
+
21
+ <script setup lang="ts">
22
+ import { defineProps, defineEmits, defineModel } from 'vue'
23
+
24
+ type Props = {
25
+ modelValue?: boolean
26
+ title?: string
27
+ width?: string
28
+ loading?: boolean
29
+ maxHeight?: string
30
+ }
31
+
32
+ defineProps<Props>()
33
+
34
+ const emit = defineEmits(['update:modelValue'])
35
+
36
+ const model = defineModel<boolean>()
37
+ </script>
38
+
39
+ <style scoped lang="scss">
40
+ .modal {
41
+ display: grid;
42
+ border-radius: 0.5rem;
43
+ grid-template-rows: 1fr auto;
44
+ font-family: NunitoSansFont, sans-serif;
45
+ color: #1d425d;
46
+ overflow: hidden;
47
+
48
+ .section {
49
+ position: relative;
50
+ display: grid;
51
+ grid-template-rows: auto 1fr;
52
+ justify-items: center;
53
+ gap: 0.5rem;
54
+ background-color: white;
55
+ overflow: auto;
56
+
57
+ .loader-overlay {
58
+ width: 100%;
59
+ height: 100%;
60
+ position: absolute;
61
+ inset: 0;
62
+ z-index: 10;
63
+ background: rgba(255, 255, 255, 0.8);
64
+ display: flex;
65
+ align-items: center;
66
+ justify-content: center;
67
+ }
68
+ .loader-spinner {
69
+ z-index: 11;
70
+ }
71
+ }
72
+
73
+ .title {
74
+ font-size: 32px;
75
+ font-weight: 700;
76
+ }
77
+
78
+ .btn__wrapper {
79
+ width: 100%;
80
+ background-color: var(--light-blue);
81
+ padding: 1rem;
82
+ }
83
+ }
84
+ </style>
85
+
86
+ <style lang="scss">
87
+ .modal {
88
+ .btn__wrapper {
89
+ button {
90
+ padding: 13px 37px;
91
+ border-radius: 4px;
92
+ color: var(--action-text-color);
93
+ }
94
+ }
95
+ }
96
+ </style>
@@ -1,244 +1,244 @@
1
- <template>
2
- <q-dialog
3
- :model-value="modelValue"
4
- :position="'right'"
5
- :class="$style['sheet-dialog']"
6
- :persistent="persistent"
7
- no-shake
8
- no-esc-dismiss
9
- full-height
10
- @update:model-value="emit('update:modelValue', $event)"
11
- >
12
- <div v-if="loading" class="custom-wrapper" :style="{ width }">
13
- <div class="loader">
14
- <q-spinner-audio v-if="loading" class="loader-spinner" size="md" :thickness="3" color="primary" />
15
- </div>
16
- </div>
17
- <div v-else class="wrapper" :style="{ width }">
18
- <div v-if="tabs?.length" class="sidebar" :class="{ noTitle: !tabsTitle }" :style="{ width: sidebarWidth }">
19
- <h5 v-if="tabsTitle">{{ tabsTitle }}</h5>
20
- <q-tabs
21
- v-model="currTabId"
22
- vertical
23
- align="justify"
24
- inline-label
25
- class="tabs"
26
- dense
27
- active-class="active-tab"
28
- no-caps
29
- >
30
- <q-tab
31
- v-for="tab in tabs"
32
- :key="tab.id"
33
- :class="$style['tab']"
34
- :name="tab.title"
35
- icon="radio_button_unchecked"
36
- :label="tab.title"
37
- />
38
- </q-tabs>
39
- </div>
40
-
41
- <div class="content">
42
- <div v-if="title" class="content-header">
43
- <h2 class="ellipsis" :title="title">{{ title }}</h2>
44
- <q-btn v-close-popup="!persistent" dense flat icon="close" @click="emit('close')" />
45
- </div>
46
-
47
- <slot />
48
-
49
- <div v-if="'actions' in slots" class="app-sheet-actions">
50
- <slot name="actions" />
51
- </div>
52
- </div>
53
- </div>
54
- </q-dialog>
55
- </template>
56
-
57
- <script setup lang="ts">
58
- import { computed, defineEmits, defineProps, useSlots, withDefaults } from 'vue'
59
- import { QDialog } from 'quasar'
60
-
61
- interface DialogProps {
62
- modelValue: boolean
63
- loading?: boolean
64
- title?: string
65
- tabsTitle?: string
66
- width?: string
67
- type?: 'details' | 'custom'
68
- tabs?: { id: string | number; title?: string }[]
69
- tabId?: string
70
- sidebarWidth?: string
71
- persistent?: boolean
72
- }
73
-
74
- const props = withDefaults(defineProps<DialogProps>(), {
75
- modelValue: false,
76
- title: '',
77
- tabsTitle: '',
78
- width: '1200px',
79
- type: 'details',
80
- loading: false,
81
- tabs: () => [],
82
- tabId: '',
83
- sidebarWidth: '',
84
- persistent: false,
85
- })
86
-
87
- const emit = defineEmits(['update:modelValue', 'update:tabId', 'close', 'before-hide'])
88
-
89
- const slots = useSlots()
90
-
91
- const currTabId = computed({
92
- get() {
93
- return props.tabs?.find(t => t.id === props.tabId)?.title
94
- },
95
- set(value) {
96
- const id = props.tabs?.find(t => t.title === value)?.id
97
- emit('update:tabId', id)
98
- },
99
- })
100
- </script>
101
-
102
- <style lang="scss" scoped>
103
- .custom-wrapper {
104
- max-width: unset;
105
- background-color: white;
106
- }
107
-
108
- .loader {
109
- &-spinner {
110
- position: absolute;
111
- top: 50%;
112
- left: 50%;
113
- z-index: 4;
114
- }
115
- }
116
-
117
- .wrapper {
118
- display: flex;
119
- overflow: hidden;
120
- font-family: 'NunitoSansFont', sans-serif;
121
- color: #3f414d;
122
- max-width: unset;
123
- }
124
-
125
- .sidebar {
126
- max-width: 25vw;
127
- flex: none;
128
- padding: 2rem 0 2rem 2rem;
129
- background-color: #f4f9fd;
130
-
131
- &.noTitle {
132
- padding: 0 0 2rem 2rem;
133
- }
134
-
135
- h5 {
136
- font-size: 24px;
137
- font-weight: 700;
138
- padding-right: 2rem;
139
- }
140
-
141
- .tabs {
142
- color: #b9c0c7;
143
- transition-duration: 0.1s;
144
- margin: 16px 0;
145
- }
146
-
147
- .active-tab {
148
- color: #3f8cff;
149
- }
150
- }
151
-
152
- .content {
153
- background-color: #fff;
154
- height: 100vh;
155
- width: 100%;
156
- display: grid;
157
- grid-template-rows: auto 1fr auto;
158
-
159
- &-header {
160
- display: flex;
161
- justify-content: space-between;
162
- align-items: center;
163
- padding: 4px 1rem;
164
- border-bottom: 1px solid var(--g-grey-100);
165
- overflow: hidden;
166
-
167
- h2 {
168
- font-size: 32px;
169
- font-weight: 700;
170
- }
171
- }
172
- }
173
-
174
- .app-sheet-actions {
175
- display: flex;
176
- gap: 1rem;
177
- padding: 1rem;
178
- border-top: 1px solid var(--g-grey-100);
179
- }
180
- </style>
181
-
182
- <style lang="scss" module>
183
- .sheet-dialog {
184
- :global(.q-dialog__inner) {
185
- max-width: 95vw;
186
- }
187
-
188
- :global(.q-dialog__inner--minimized) {
189
- padding: 0;
190
- }
191
- }
192
-
193
- .tab {
194
- padding: 0 !important;
195
-
196
- :global(.q-focus-helper) {
197
- display: none !important;
198
- }
199
- :global(.q-ripple) {
200
- display: none !important;
201
- }
202
- :global(.q-tab__content) {
203
- width: 100%;
204
- justify-content: left;
205
- margin: 10px 0;
206
- padding-right: 2rem;
207
-
208
- :global(.q-tab__label) {
209
- font-size: 18px;
210
- font-family: NunitoSansFont, sans-serif;
211
- }
212
- :global(.q-tab__icon) {
213
- font-size: 33px;
214
- width: 33px;
215
- height: 33px;
216
- }
217
-
218
- &::after {
219
- content: '';
220
- position: absolute;
221
- bottom: -23px;
222
- left: 15px;
223
- height: 26px;
224
- border: 1px solid #b9c0c7;
225
- }
226
- }
227
- }
228
-
229
- .tab:last-child {
230
- :global(.q-tab__content) {
231
- &::after {
232
- display: none;
233
- }
234
- }
235
- }
236
- </style>
237
-
238
- <style lang="scss">
239
- .app-sheet-actions {
240
- button {
241
- border-radius: 8px;
242
- }
243
- }
244
- </style>
1
+ <template>
2
+ <q-dialog
3
+ :model-value="modelValue"
4
+ :position="'right'"
5
+ :class="$style['sheet-dialog']"
6
+ :persistent="persistent"
7
+ no-shake
8
+ no-esc-dismiss
9
+ full-height
10
+ @update:model-value="emit('update:modelValue', $event)"
11
+ >
12
+ <div v-if="loading" class="custom-wrapper" :style="{ width }">
13
+ <div class="loader">
14
+ <q-spinner-audio v-if="loading" class="loader-spinner" size="md" :thickness="3" color="primary" />
15
+ </div>
16
+ </div>
17
+ <div v-else class="wrapper" :style="{ width }">
18
+ <div v-if="tabs?.length" class="sidebar" :class="{ noTitle: !tabsTitle }" :style="{ width: sidebarWidth }">
19
+ <h5 v-if="tabsTitle">{{ tabsTitle }}</h5>
20
+ <q-tabs
21
+ v-model="currTabId"
22
+ vertical
23
+ align="justify"
24
+ inline-label
25
+ class="tabs"
26
+ dense
27
+ active-class="active-tab"
28
+ no-caps
29
+ >
30
+ <q-tab
31
+ v-for="tab in tabs"
32
+ :key="tab.id"
33
+ :class="$style['tab']"
34
+ :name="tab.title"
35
+ icon="radio_button_unchecked"
36
+ :label="tab.title"
37
+ />
38
+ </q-tabs>
39
+ </div>
40
+
41
+ <div class="content">
42
+ <div v-if="title" class="content-header">
43
+ <h2 class="ellipsis" :title="title">{{ title }}</h2>
44
+ <q-btn v-close-popup="!persistent" dense flat icon="close" @click="emit('close')" />
45
+ </div>
46
+
47
+ <slot />
48
+
49
+ <div v-if="'actions' in slots" class="app-sheet-actions">
50
+ <slot name="actions" />
51
+ </div>
52
+ </div>
53
+ </div>
54
+ </q-dialog>
55
+ </template>
56
+
57
+ <script setup lang="ts">
58
+ import { computed, defineEmits, defineProps, useSlots, withDefaults } from 'vue'
59
+ import { QDialog } from 'quasar'
60
+
61
+ interface DialogProps {
62
+ modelValue: boolean
63
+ loading?: boolean
64
+ title?: string
65
+ tabsTitle?: string
66
+ width?: string
67
+ type?: 'details' | 'custom'
68
+ tabs?: { id: string | number; title?: string }[]
69
+ tabId?: string
70
+ sidebarWidth?: string
71
+ persistent?: boolean
72
+ }
73
+
74
+ const props = withDefaults(defineProps<DialogProps>(), {
75
+ modelValue: false,
76
+ title: '',
77
+ tabsTitle: '',
78
+ width: '1200px',
79
+ type: 'details',
80
+ loading: false,
81
+ tabs: () => [],
82
+ tabId: '',
83
+ sidebarWidth: '',
84
+ persistent: false,
85
+ })
86
+
87
+ const emit = defineEmits(['update:modelValue', 'update:tabId', 'close', 'before-hide'])
88
+
89
+ const slots = useSlots()
90
+
91
+ const currTabId = computed({
92
+ get() {
93
+ return props.tabs?.find(t => t.id === props.tabId)?.title
94
+ },
95
+ set(value) {
96
+ const id = props.tabs?.find(t => t.title === value)?.id
97
+ emit('update:tabId', id)
98
+ },
99
+ })
100
+ </script>
101
+
102
+ <style lang="scss" scoped>
103
+ .custom-wrapper {
104
+ max-width: unset;
105
+ background-color: white;
106
+ }
107
+
108
+ .loader {
109
+ &-spinner {
110
+ position: absolute;
111
+ top: 50%;
112
+ left: 50%;
113
+ z-index: 4;
114
+ }
115
+ }
116
+
117
+ .wrapper {
118
+ display: flex;
119
+ overflow: hidden;
120
+ font-family: 'NunitoSansFont', sans-serif;
121
+ color: #3f414d;
122
+ max-width: unset;
123
+ }
124
+
125
+ .sidebar {
126
+ max-width: 25vw;
127
+ flex: none;
128
+ padding: 2rem 0 2rem 2rem;
129
+ background-color: #f4f9fd;
130
+
131
+ &.noTitle {
132
+ padding: 0 0 2rem 2rem;
133
+ }
134
+
135
+ h5 {
136
+ font-size: 24px;
137
+ font-weight: 700;
138
+ padding-right: 2rem;
139
+ }
140
+
141
+ .tabs {
142
+ color: #b9c0c7;
143
+ transition-duration: 0.1s;
144
+ margin: 16px 0;
145
+ }
146
+
147
+ .active-tab {
148
+ color: #3f8cff;
149
+ }
150
+ }
151
+
152
+ .content {
153
+ background-color: #fff;
154
+ height: 100vh;
155
+ width: 100%;
156
+ display: grid;
157
+ grid-template-rows: auto 1fr auto;
158
+
159
+ &-header {
160
+ display: flex;
161
+ justify-content: space-between;
162
+ align-items: center;
163
+ padding: 4px 1rem;
164
+ border-bottom: 1px solid var(--g-grey-100);
165
+ overflow: hidden;
166
+
167
+ h2 {
168
+ font-size: 32px;
169
+ font-weight: 700;
170
+ }
171
+ }
172
+ }
173
+
174
+ .app-sheet-actions {
175
+ display: flex;
176
+ gap: 1rem;
177
+ padding: 1rem;
178
+ border-top: 1px solid var(--g-grey-100);
179
+ }
180
+ </style>
181
+
182
+ <style lang="scss" module>
183
+ .sheet-dialog {
184
+ :global(.q-dialog__inner) {
185
+ max-width: 95vw;
186
+ }
187
+
188
+ :global(.q-dialog__inner--minimized) {
189
+ padding: 0;
190
+ }
191
+ }
192
+
193
+ .tab {
194
+ padding: 0 !important;
195
+
196
+ :global(.q-focus-helper) {
197
+ display: none !important;
198
+ }
199
+ :global(.q-ripple) {
200
+ display: none !important;
201
+ }
202
+ :global(.q-tab__content) {
203
+ width: 100%;
204
+ justify-content: left;
205
+ margin: 10px 0;
206
+ padding-right: 2rem;
207
+
208
+ :global(.q-tab__label) {
209
+ font-size: 18px;
210
+ font-family: NunitoSansFont, sans-serif;
211
+ }
212
+ :global(.q-tab__icon) {
213
+ font-size: 33px;
214
+ width: 33px;
215
+ height: 33px;
216
+ }
217
+
218
+ &::after {
219
+ content: '';
220
+ position: absolute;
221
+ bottom: -23px;
222
+ left: 15px;
223
+ height: 26px;
224
+ border: 1px solid #b9c0c7;
225
+ }
226
+ }
227
+ }
228
+
229
+ .tab:last-child {
230
+ :global(.q-tab__content) {
231
+ &::after {
232
+ display: none;
233
+ }
234
+ }
235
+ }
236
+ </style>
237
+
238
+ <style lang="scss">
239
+ .app-sheet-actions {
240
+ button {
241
+ border-radius: 8px;
242
+ }
243
+ }
244
+ </style>