@globalbrain/sefirot 3.11.1 → 3.13.0

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.
@@ -36,10 +36,10 @@ defineEmits<{
36
36
  <style lang="postcss" scoped>
37
37
  .SInputDropdownItemAvatar {
38
38
  display: flex;
39
- border: 1px solid var(--c-divider);
39
+ border: 1px solid var(--c-border-mute-1);
40
40
  border-radius: 14px;
41
41
  padding: 0 12px 0 0;
42
- background-color: var(--c-bg-mute);
42
+ background-color: var(--c-bg-mute-1);
43
43
  }
44
44
 
45
45
  .SInputDropdownItemAvatar.removable {
@@ -48,7 +48,6 @@ defineEmits<{
48
48
 
49
49
  .SInputDropdownItemUserAvatar.disabled {
50
50
  padding: 0 10px 0 0;
51
- background-color: var(--c-gray-light-4);
52
51
  }
53
52
 
54
53
  .user {
@@ -88,12 +87,7 @@ defineEmits<{
88
87
 
89
88
  .remove:hover & {
90
89
  color: var(--c-text-1);
91
- background-color: var(--c-gray-light-3)
92
- }
93
-
94
- .dark .remove:hover & {
95
- color: var(--c-text-1);
96
- background-color: var(--c-gray-dark-3)
90
+ background-color: var(--c-bg-mute-2)
97
91
  }
98
92
  }
99
93
 
@@ -29,10 +29,10 @@ defineEmits<{
29
29
  <style lang="postcss" scoped>
30
30
  .SInputDropdownItemText {
31
31
  display: flex;
32
- border: 1px solid var(--c-divider);
32
+ border: 1px solid var(--c-border-mute-1);
33
33
  border-radius: 14px;
34
34
  padding: 0 12px;
35
- background-color: var(--c-bg-mute);
35
+ background-color: var(--c-bg-mute-1);
36
36
  }
37
37
 
38
38
  .SInputDropdownItemText.removable {
@@ -41,15 +41,6 @@ defineEmits<{
41
41
 
42
42
  .SInputDropdownItemText.disabled {
43
43
  padding: 0 10px;
44
- background-color: var(--c-gray-light-4);
45
-
46
- .text {
47
- color: var(--c-text-2);
48
- }
49
- }
50
-
51
- .dark .SInputDropdownItemText.disabled {
52
- background-color: var(--c-gray-dark-2);
53
44
  }
54
45
 
55
46
  .text {
@@ -80,12 +71,7 @@ defineEmits<{
80
71
 
81
72
  .remove:hover & {
82
73
  color: var(--c-text-1);
83
- background-color: var(--c-gray-light-3)
84
- }
85
-
86
- .dark .remove:hover & {
87
- color: var(--c-text-1);
88
- background-color: var(--c-gray-dark-3)
74
+ background-color: var(--c-bg-mute-2);
89
75
  }
90
76
  }
91
77
 
@@ -82,6 +82,40 @@ function emitChange(): void {
82
82
  </template>
83
83
 
84
84
  <style scoped lang="postcss">
85
+ .container {
86
+ display: flex;
87
+ }
88
+
89
+ .input {
90
+ position: relative;
91
+ display: flex;
92
+ justify-content: space-between;
93
+ align-items: center;
94
+ width: 100%;
95
+ cursor: pointer;
96
+ }
97
+
98
+ .text {
99
+ flex-grow: 1;
100
+ margin: 0;
101
+ padding-right: 16px;
102
+ }
103
+
104
+ .box {
105
+ position: relative;
106
+ flex-shrink: 0;
107
+ border: 1px solid var(--input-border-color);
108
+ background-color: var(--input-switch-bg-color);
109
+ transition: border-color 0.25s, background-color 0.25s, box-shadow 0.25s;
110
+ }
111
+
112
+ .toggle {
113
+ position: absolute;
114
+ border-radius: 50%;
115
+ background-color: var(--input-switch-toggle-color);
116
+ transition: background-color 0.25s, transform 0.25s;
117
+ }
118
+
85
119
  .SInputSwitch.mini {
86
120
  .input {
87
121
  height: 32px;
@@ -168,45 +202,45 @@ function emitChange(): void {
168
202
 
169
203
  .SInputSwitch.info {
170
204
  .box:hover {
171
- border-color: var(--c-info-light);
205
+ border-color: var(--c-border-info-1);
172
206
  }
173
207
 
174
208
  .input.on .box {
175
- border-color: var(--c-info-light);
176
- background-color: var(--c-info);
209
+ border-color: var(--c-border-info-1);
210
+ background-color: var(--c-bg-info-1);
177
211
  }
178
212
  }
179
213
 
180
214
  .SInputSwitch.success {
181
215
  .box:hover {
182
- border-color: var(--c-success-light);
216
+ border-color: var(--c-border-success-1);
183
217
  }
184
218
 
185
219
  .input.on .box {
186
- border-color: var(--c-success-light);
187
- background-color: var(--c-success);
220
+ border-color: var(--c-border-success-1);
221
+ background-color: var(--c-bg-success-1);
188
222
  }
189
223
  }
190
224
 
191
225
  .SInputSwitch.warning {
192
226
  .box:hover {
193
- border-color: var(--c-warning-light);
227
+ border-color: var(--c-border-warning-1);
194
228
  }
195
229
 
196
230
  .input.on .box {
197
- border-color: var(--c-warning-light);
198
- background-color: var(--c-warning);
231
+ border-color: var(--c-border-warning-1);
232
+ background-color: var(--c-bg-warning-1);
199
233
  }
200
234
  }
201
235
 
202
236
  .SInputSwitch.danger {
203
237
  .box:hover {
204
- border-color: var(--c-danger-light);
238
+ border-color: var(--c-border-danger-1);
205
239
  }
206
240
 
207
241
  .input.on .box {
208
- border-color: var(--c-danger-light);
209
- background-color: var(--c-danger);
242
+ border-color: var(--c-border-danger-1);
243
+ background-color: var(--c-bg-danger-1);
210
244
  }
211
245
  }
212
246
 
@@ -220,7 +254,7 @@ function emitChange(): void {
220
254
  }
221
255
 
222
256
  .box:hover {
223
- border-color: var(--c-divider-1);
257
+ border-color: var(--input-border-color);
224
258
  }
225
259
 
226
260
  .toggle {
@@ -233,73 +267,39 @@ function emitChange(): void {
233
267
 
234
268
  &.info {
235
269
  .input.on .box {
236
- border-color: var(--c-info);
237
- background-color: var(--c-info-dark);
270
+ border-color: var(--c-border-info-1);
271
+ background-color: var(--c-blue-8);
238
272
  }
239
273
  }
240
274
 
241
275
  &.success {
242
276
  .input.on .box {
243
- border-color: var(--c-success);
244
- background-color: var(--c-success-dark);
277
+ border-color: var(--c-border-success-1);
278
+ background-color: var(--c-green-8);
245
279
  }
246
280
  }
247
281
 
248
282
  &.warning {
249
283
  .input.on .box {
250
- border-color: var(--c-warning);
251
- background-color: var(--c-warning-dark);
284
+ border-color: var(--c-border-warning-1);
285
+ background-color: var(--c-yellow-8);
252
286
  }
253
287
  }
254
288
 
255
289
  &.danger {
256
290
  .input.on .box {
257
- border-color: var(--c-danger);
258
- background-color: var(--c-danger-dark);
291
+ border-color: var(--c-border-danger-1);
292
+ background-color: var(--c-red-8);
259
293
  }
260
294
  }
261
295
  }
262
296
 
263
- .container {
264
- display: flex;
265
- }
266
-
267
- .input {
268
- position: relative;
269
- display: flex;
270
- justify-content: space-between;
271
- align-items: center;
272
- width: 100%;
273
- cursor: pointer;
274
- }
275
-
276
297
  .input.on .box {
277
- border-color: var(--c-info-lighter);
278
- background-color: var(--c-info);
298
+ border-color: var(--c-border-info-1);
299
+ background-color: var(--c-bg-info-1);
279
300
  }
280
301
 
281
302
  .input.on .toggle {
282
303
  background-color: var(--c-white);
283
304
  }
284
-
285
- .text {
286
- flex-grow: 1;
287
- margin: 0;
288
- padding-right: 16px;
289
- }
290
-
291
- .box {
292
- position: relative;
293
- flex-shrink: 0;
294
- border: 1px solid var(--c-divider-1);
295
- background-color: var(--input-switch-bg-color);
296
- transition: border-color 0.25s, background-color 0.25s, box-shadow 0.25s;
297
- }
298
-
299
- .toggle {
300
- position: absolute;
301
- border-radius: 50%;
302
- background-color: var(--input-switch-toggle-color);
303
- transition: background-color 0.25s, transform 0.25s;
304
- }
305
305
  </style>
@@ -395,10 +395,10 @@ function getValue(e: Event | FocusEvent | KeyboardEvent): string | null {
395
395
  font-family: var(--input-value-font-family);
396
396
 
397
397
  &.neutral:not(.hide) { color: var(--input-value-color); }
398
- &.info:not(.hide) { color: var(--c-info-text); }
399
- &.success:not(.hide) { color: var(--c-success-text); }
400
- &.warning:not(.hide) { color: var(--c-warning-text); }
401
- &.danger:not(.hide) { color: var(--c-danger-text); }
398
+ &.info:not(.hide) { color: var(--c-text-info-1); }
399
+ &.success:not(.hide) { color: var(--c-text-success-1); }
400
+ &.warning:not(.hide) { color: var(--c-text-warning-1); }
401
+ &.danger:not(.hide) { color: var(--c-text-danger-1); }
402
402
 
403
403
  &.hide,
404
404
  &.hide::placeholder {
@@ -0,0 +1,47 @@
1
+ <script setup lang="ts">
2
+ import { computed } from 'vue'
3
+ import SLocalNavMenu, { type MenuItem } from './SLocalNavMenu.vue'
4
+ import SLocalNavTitle, { type Title } from './SLocalNavTitle.vue'
5
+
6
+ export type { Title, MenuItem }
7
+
8
+ const props = defineProps<{
9
+ title: Title[]
10
+ menu?: MenuItem[][]
11
+ }>()
12
+
13
+ const normalizedMenu = computed(() => {
14
+ return props.menu?.reduce<MenuItem[][]>((carry, group) => {
15
+ group.length && carry.push(group)
16
+ return carry
17
+ }, []) ?? null
18
+ })
19
+ </script>
20
+
21
+ <template>
22
+ <div class="SLocalNav" :class="{ 'has-menu': normalizedMenu }">
23
+ <SLocalNavTitle :title="title" />
24
+ <SLocalNavMenu v-if="normalizedMenu" :menu="normalizedMenu" />
25
+ </div>
26
+ </template>
27
+
28
+ <style scoped lang="postcss">
29
+ .SLocalNav {
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: 8px;
33
+ padding: 16px 24px;
34
+
35
+ @media (min-width: 768px) {
36
+ padding: 16px 32px;
37
+ }
38
+ }
39
+
40
+ .SLocalNav.has-menu {
41
+ padding-bottom: 0;
42
+
43
+ @media (min-width: 768px) {
44
+ padding-bottom: 0;
45
+ }
46
+ }
47
+ </style>
@@ -0,0 +1,92 @@
1
+ <script setup lang="ts">
2
+ import { type IconifyIcon } from '@iconify/vue/dist/offline'
3
+ import SIcon from './SIcon.vue'
4
+ import SLink from './SLink.vue'
5
+
6
+ export interface MenuItem {
7
+ icon?: IconifyIcon
8
+ text: string
9
+ link: string
10
+ active?: boolean
11
+ }
12
+
13
+ defineProps<{
14
+ menu: MenuItem[][]
15
+ }>()
16
+ </script>
17
+
18
+ <template>
19
+ <div class="SLocalNavMenu">
20
+ <div v-for="nav, index in menu" :key="index" class="group">
21
+ <div v-for="item in nav" :key="item.text" class="item">
22
+ <SLink class="link" :class="{ active: item.active }" :href="item.link">
23
+ <SIcon v-if="item.icon" class="icon-svg" :icon="item.icon" />
24
+ <span class="text">{{ item.text }}</span>
25
+ </SLink>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </template>
30
+
31
+ <style scoped lang="postcss">
32
+ .SLocalNavMenu {
33
+ display: flex;
34
+ margin: 0 -24px;
35
+ padding: 0 24px;
36
+ overflow: hidden;
37
+ overflow-x: auto;
38
+
39
+ @media (min-width: 768px) {
40
+ margin: 0 -32px;
41
+ padding: 0 32px;
42
+ }
43
+ }
44
+
45
+ .group {
46
+ position: relative;
47
+ display: flex;
48
+ gap: 16px;
49
+
50
+ & + & {
51
+ padding-left: 32px;
52
+ }
53
+
54
+ & + &::before {
55
+ position: absolute;
56
+ top: 4px;
57
+ left: 16px;
58
+ display: block;
59
+ width: 1px;
60
+ height: 16px;
61
+ background-color: var(--c-divider);
62
+ content: "";
63
+ }
64
+ }
65
+
66
+ .link {
67
+ display: flex;
68
+ align-items: center;
69
+ gap: 6px;
70
+ border-bottom: 1px solid transparent;
71
+ padding-bottom: 7px;
72
+ line-height: 24px;
73
+ font-size: 14px;
74
+ color: var(--c-text-2);
75
+ transition: border-color 0.25s, color 0.25s;
76
+
77
+ &:hover {
78
+ color: var(--c-text-1);
79
+ }
80
+
81
+ &.active,
82
+ &.router-link-active {
83
+ color: var(--c-text-1);
84
+ border-bottom-color: var(--c-border-info-1);
85
+ }
86
+ }
87
+
88
+ .icon-svg {
89
+ width: 16px;
90
+ height: 16px;
91
+ }
92
+ </style>
@@ -0,0 +1,60 @@
1
+ <script setup lang="ts">
2
+ import SLink from './SLink.vue'
3
+
4
+ export interface Title {
5
+ text: string
6
+ link?: string
7
+ }
8
+
9
+ defineProps<{
10
+ title: Title[]
11
+ }>()
12
+ </script>
13
+
14
+ <template>
15
+ <div class="SLocalNavTitle">
16
+ <div v-for="item in title" :key="item.text" class="title">
17
+ <SLink class="text" :href="item.link">
18
+ {{ item.text }}
19
+ </SLink>
20
+ </div>
21
+ </div>
22
+ </template>
23
+
24
+ <style scoped lang="postcss">
25
+ .SLocalNavTitle {
26
+ display: flex;
27
+ overflow: hidden;
28
+ }
29
+
30
+ .title {
31
+ white-space: nowrap;
32
+ overflow: hidden;
33
+ text-overflow: ellipsis;
34
+
35
+ & + &::before {
36
+ display: inline-block;
37
+ margin: 0 8px;
38
+ line-height: 32px;
39
+ font-size: 20px;
40
+ color: var(--c-text-3);
41
+ content: "/";
42
+ }
43
+ }
44
+
45
+ .text {
46
+ line-height: 32px;
47
+ font-size: 20px;
48
+ font-weight: 500;
49
+ }
50
+
51
+ .text.link {
52
+ color: var(--c-text-info-1);
53
+ cursor: pointer;
54
+ transition: color 0.25s;
55
+
56
+ &:hover {
57
+ color: var(--c-text-info-2);
58
+ }
59
+ }
60
+ </style>
@@ -33,11 +33,11 @@ defineEmits<{
33
33
  position: relative;
34
34
  border: 1px solid var(--c-divider);
35
35
  border-radius: 16px;
36
- background-color: var(--c-bg);
36
+ background-color: var(--c-bg-elv-1);
37
37
  transition: opacity 0.25s, transform 0.25s;
38
38
 
39
39
  .dark & {
40
- background-color: var(--c-bg-mute);
40
+ background-color: var(--c-bg-mute-1);
41
41
  }
42
42
 
43
43
  .SModal & {
@@ -27,11 +27,11 @@
27
27
 
28
28
  .SSheetMedium :deep(a) {
29
29
  font-weight: 500;
30
- color: var(--c-info);
30
+ color: var(--c-text-info-1);
31
31
  transition: color .25s;
32
32
 
33
33
  &:hover {
34
- color: var(--c-info-dark);
34
+ color: var(--c-text-info-2);
35
35
  }
36
36
  }
37
37
 
@@ -8,6 +8,7 @@ import {
8
8
  reactive,
9
9
  ref,
10
10
  shallowRef,
11
+ toValue,
11
12
  unref,
12
13
  watch
13
14
  } from 'vue'
@@ -37,7 +38,8 @@ const row = shallowRef<HTMLElement | null>(null)
37
38
 
38
39
  const ordersToShow = computed(() => {
39
40
  const orders = unref(props.options.orders).filter((key) => {
40
- return unref(props.options.columns)[key]?.show !== false
41
+ const show = unref(props.options.columns)[key]?.show
42
+ return toValue(show) !== false
41
43
  })
42
44
  if (!props.selected) {
43
45
  return orders
@@ -99,6 +99,8 @@ const computedCell = computed<TableCell | undefined>(() =>
99
99
  :record="record"
100
100
  :avatars="computedCell.avatars"
101
101
  :color="computedCell.color"
102
+ :avatar-count="computedCell.avatarCount"
103
+ :name-count="computedCell.nameCount"
102
104
  />
103
105
  <STableCellActions
104
106
  v-else-if="computedCell.type === 'actions'"
@@ -130,11 +132,11 @@ const computedCell = computed<TableCell | undefined>(() =>
130
132
  overflow: hidden;
131
133
 
132
134
  .row:hover & {
133
- background-color: var(--c-bg-elv-2);
135
+ background-color: var(--c-bg-elv-4);
134
136
  }
135
137
 
136
138
  .summary & {
137
- background-color: var(--c-bg-elv-2);
139
+ background-color: var(--c-bg-elv-4);
138
140
  }
139
141
 
140
142
  .STableItem:first-child & {
@@ -64,8 +64,8 @@ function resolve(
64
64
  display: inline-block;
65
65
  margin-left: 12px;
66
66
  line-height: 24px;
67
- font-size: 12px;
68
- font-weight: 500;
67
+ font-size: 14px;
68
+ font-weight: 400;
69
69
  white-space: nowrap;
70
70
  overflow: hidden;
71
71
  text-overflow: ellipsis;
@@ -78,11 +78,11 @@ function resolve(
78
78
  .STableCellAvatar.soft.link & { color: var(--c-text-2); }
79
79
  .STableCellAvatar.mute.link & { color: var(--c-text-3); }
80
80
 
81
- .STableCellAvatar.link & { color: var(--c-info); }
82
- .STableCellAvatar.link:hover & { color: var(--c-info-dark); }
81
+ .STableCellAvatar.link & { color: var(--c-text-info-1); }
82
+ .STableCellAvatar.link:hover & { color: var(--c-text-info-2); }
83
83
 
84
- .STableCellAvatar.neutral.link:hover & { color: var(--c-info); }
85
- .STableCellAvatar.soft.link:hover & { color: var(--c-info); }
86
- .STableCellAvatar.mute.link:hover & { color: var(--c-info); }
84
+ .STableCellAvatar.neutral.link:hover & { color: var(--c-text-info-1); }
85
+ .STableCellAvatar.soft.link:hover & { color: var(--c-text-info-1); }
86
+ .STableCellAvatar.mute.link:hover & { color: var(--c-text-info-1); }
87
87
  }
88
88
  </style>
@@ -3,12 +3,17 @@ import { computed } from 'vue'
3
3
  import { type TableCellAvatarsOption } from '../composables/Table'
4
4
  import SAvatar from './SAvatar.vue'
5
5
 
6
- const props = defineProps<{
6
+ const props = withDefaults(defineProps<{
7
7
  value?: any
8
8
  record?: any
9
9
  avatars: TableCellAvatarsOption[] | ((value: any, record: any) => TableCellAvatarsOption[])
10
10
  color?: 'neutral' | 'soft' | 'mute'
11
- }>()
11
+ avatarCount?: number
12
+ nameCount?: number
13
+ }>(), {
14
+ avatarCount: 2,
15
+ nameCount: 2
16
+ })
12
17
 
13
18
  const _avatars = computed(() => {
14
19
  return typeof props.avatars === 'function'
@@ -16,39 +21,57 @@ const _avatars = computed(() => {
16
21
  : props.avatars
17
22
  })
18
23
 
24
+ const avatarDiff = computed(() => {
25
+ return _avatars.value.length - props.avatarCount
26
+ })
27
+
19
28
  const displayAvatars = computed(() => {
20
- return _avatars.value.slice(0, 3)
29
+ return _avatars.value.slice(0, props.avatarCount)
30
+ })
31
+
32
+ const nameDiff = computed(() => {
33
+ return _avatars.value.length - props.nameCount
21
34
  })
22
35
 
23
- const names = computed(() => {
24
- if (_avatars.value.length === 0) {
36
+ const displayNames = computed(() => {
37
+ // If the count is 0, treat it as "disabling" the name display.
38
+ if (props.nameCount === 0) {
25
39
  return null
26
40
  }
27
41
 
28
- if (_avatars.value.length === 1) {
29
- return _avatars.value[0].name
30
- }
42
+ const slicedAvatars = _avatars.value.slice(0, props.nameCount)
43
+
44
+ const names = slicedAvatars.map((avatar) => avatar.name).join(', ')
31
45
 
32
- if (_avatars.value.length === 2) {
33
- return `${_avatars.value[0].name}, ${_avatars.value[1].name}`
46
+ if (nameDiff.value > 0) {
47
+ return `${names}, ...`
34
48
  }
35
49
 
36
- return `${_avatars.value[0].name}, ${_avatars.value[1].name} +${_avatars.value.length - 2}`
50
+ return names
37
51
  })
38
52
  </script>
39
53
 
40
54
  <template>
41
55
  <div class="STableCellAvatars" :class="[color]">
42
56
  <div class="container">
43
- <div class="avatars">
44
- <div v-for="(avatar, index) in displayAvatars" :key="index" class="avatar">
57
+ <div v-if="displayAvatars.length" class="avatars">
58
+ <div
59
+ v-for="(avatar, index) in displayAvatars"
60
+ :key="index"
61
+ class="avatar"
62
+ >
45
63
  <div class="avatar-box">
46
64
  <SAvatar size="mini" :avatar="avatar.image" :name="avatar.name" />
47
65
  </div>
48
66
  </div>
67
+ <div v-if="avatarDiff > 0" class="avatar">
68
+ <div class="avatar-box placeholder" :class="{ small: avatarDiff >= 10 }">
69
+ +{{ avatarDiff }}
70
+ </div>
71
+ </div>
49
72
  </div>
50
- <div class="names">
51
- {{ names }}
73
+ <div v-if="displayNames" class="names">
74
+ {{ displayNames }}
52
75
  </div>
53
76
  </div>
54
77
  </div>
@@ -72,28 +95,44 @@ const names = computed(() => {
72
95
  .avatar {
73
96
  position: relative;
74
97
  width: 20px;
98
+ }
75
99
 
76
- &:nth-child(1) { z-index: 30; }
77
- &:nth-child(2) { z-index: 20; }
78
- &:nth-child(3) { z-index: 10; }
100
+ .avatar.placeholder {
101
+ display: flex;
102
+ justify-content: center;
103
+ align-items: center;
79
104
  }
80
105
 
81
106
  .avatar-box {
82
- border: 2px solid var(--c-bg-elv-up);
107
+ display: flex;
108
+ justify-content: center;
109
+ align-items: center;
110
+ border: 2px solid var(--c-bg-elv-3);
83
111
  border-radius: 50%;
84
112
  width: 28px;
113
+ height: 28px;
85
114
 
86
115
  .row:hover & {
87
- border: 2px solid var(--c-bg-elv);
116
+ border: 2px solid var(--c-bg-elv-4);
117
+ }
118
+
119
+ &.placeholder {
120
+ font-size: 10px;
121
+ font-weight: 500;
122
+ color: var(--c-text-2);
123
+ background-color: var(--c-bg-mute-1);
124
+ }
125
+
126
+ &.placeholder.small {
127
+ font-size: 9px;
88
128
  }
89
129
  }
90
130
 
91
131
  .names {
92
132
  line-height: 28px;
93
133
  font-size: 12px;
94
- font-weight: 500;
95
-
96
- .STableCellAvatars.soft & { color: var(--c-text-2); }
97
- .STableCellAvatars.mute & { color: var(--c-text-3); }
98
134
  }
135
+
136
+ .STableCellAvatars.soft .names { color: var(--c-text-2); }
137
+ .STableCellAvatars.mute .names { color: var(--c-text-3); }
99
138
  </style>
@@ -76,28 +76,28 @@ const classes = computed(() => [
76
76
  &.neutral { color: var(--c-text-1); }
77
77
  &.soft { color: var(--c-text-2); }
78
78
  &.mute { color: var(--c-text-3); }
79
- &.info { color: var(--c-info-text); }
80
- &.success { color: var(--c-success-text); }
81
- &.warning { color: var(--c-warning-text); }
82
- &.danger { color: var(--c-danger-text); }
79
+ &.info { color: var(--c-text-info-1); }
80
+ &.success { color: var(--c-text-success-1); }
81
+ &.warning { color: var(--c-text-warning-1); }
82
+ &.danger { color: var(--c-text-danger-1); }
83
83
 
84
- .STableCellNumber.link & { color: var(--c-info-text); }
85
- .STableCellNumber.link:hover & { color: var(--c-info-text-dark); }
84
+ .STableCellNumber.link & { color: var(--c-text-info-1); }
85
+ .STableCellNumber.link:hover & { color: var(--c-text-info-2); }
86
86
 
87
87
  .STableCellNumber.link &.neutral { color: var(--c-text-1); }
88
- .STableCellNumber.link:hover &.neutral { color: var(--c-info-text); }
88
+ .STableCellNumber.link:hover &.neutral { color: var(--c-text-info-1); }
89
89
  .STableCellNumber.link &.soft { color: var(--c-text-2); }
90
- .STableCellNumber.link:hover &.soft { color: var(--c-info-text); }
90
+ .STableCellNumber.link:hover &.soft { color: var(--c-text-info-1); }
91
91
  .STableCellNumber.link &.mute { color: var(--c-text-3); }
92
92
  .STableCellNumber.link:hover &.mute { color: var(--c-text-3); }
93
- .STableCellNumber.link &.info { color: var(--c-info-text); }
94
- .STableCellNumber.link:hover &.info { color: var(--c-info-text-dark); }
95
- .STableCellNumber.link &.success { color: var(--c-success-text); }
96
- .STableCellNumber.link:hover &.success { color: var(--c-success-text-dark); }
97
- .STableCellNumber.link &.warning { color: var(--c-warning-text); }
98
- .STableCellNumber.link:hover &.warning { color: var(--c-warning-text-darker); }
99
- .STableCellNumber.link &.danger { color: var(--c-danger-text); }
100
- .STableCellNumber.link:hover &.danger { color: var(--c-danger-text-dark); }
93
+ .STableCellNumber.link &.info { color: var(--c-text-info-1); }
94
+ .STableCellNumber.link:hover &.info { color: var(--c-text-info-2); }
95
+ .STableCellNumber.link &.success { color: var(--c-text-success-1); }
96
+ .STableCellNumber.link:hover &.success { color: var(--c-text-success-2); }
97
+ .STableCellNumber.link &.warning { color: var(--c-text-warning-1); }
98
+ .STableCellNumber.link:hover &.warning { color: var(--c-text-warning-2); }
99
+ .STableCellNumber.link &.danger { color: var(--c-text-danger-1); }
100
+ .STableCellNumber.link:hover &.danger { color: var(--c-text-danger-2); }
101
101
 
102
102
  .STableCell.summary & {
103
103
  font-weight: var(--table-cell-summary-font-weight);
@@ -118,23 +118,23 @@ const classes = computed(() => [
118
118
  &.soft { color: var(--c-text-2); }
119
119
  &.mute { color: var(--c-text-3); }
120
120
 
121
- .STableCellNumber.link & { color: var(--c-info-text); }
122
- .STableCellNumber.link:hover & { color: var(--c-info-text-dark); }
121
+ .STableCellNumber.link & { color: var(--c-text-info-1); }
122
+ .STableCellNumber.link:hover & { color: var(--c-text-info-2); }
123
123
 
124
124
  .STableCellNumber.link &.neutral { color: var(--c-text-1); }
125
- .STableCellNumber.link:hover &.neutral { color: var(--c-info-text); }
125
+ .STableCellNumber.link:hover &.neutral { color: var(--c-text-info-1); }
126
126
  .STableCellNumber.link &.soft { color: var(--c-text-2); }
127
- .STableCellNumber.link:hover &.soft { color: var(--c-info-text); }
127
+ .STableCellNumber.link:hover &.soft { color: var(--c-text-info-1); }
128
128
  .STableCellNumber.link &.mute { color: var(--c-text-3); }
129
- .STableCellNumber.link:hover &.mute { color: var(--c-info-text); }
130
- .STableCellNumber.link &.info { color: var(--c-info-text); }
131
- .STableCellNumber.link:hover &.info { color: var(--c-info-text-dark); }
132
- .STableCellNumber.link &.success { color: var(--c-success-text); }
133
- .STableCellNumber.link:hover &.success { color: var(--c-success-text-dark); }
134
- .STableCellNumber.link &.warning { color: var(--c-warning-text); }
135
- .STableCellNumber.link:hover &.warning { color: var(--c-warning-text-dark); }
136
- .STableCellNumber.link &.danger { color: var(--c-danger-text); }
137
- .STableCellNumber.link:hover &.danger { color: var(--c-danger-text-dark); }
129
+ .STableCellNumber.link:hover &.mute { color: var(--c-text-3); }
130
+ .STableCellNumber.link &.info { color: var(--c-text-info-1); }
131
+ .STableCellNumber.link:hover &.info { color: var(--c-text-info-2); }
132
+ .STableCellNumber.link &.success { color: var(--c-text-success-1); }
133
+ .STableCellNumber.link:hover &.success { color: var(--c-text-success-2); }
134
+ .STableCellNumber.link &.warning { color: var(--c-text-warning-1); }
135
+ .STableCellNumber.link:hover &.warning { color: var(--c-text-warning-2); }
136
+ .STableCellNumber.link &.danger { color: var(--c-text-danger-1); }
137
+ .STableCellNumber.link:hover &.danger { color: var(--c-text-danger-2); }
138
138
  }
139
139
 
140
140
  .svg {
@@ -100,28 +100,28 @@ const _iconColor = computed(() => {
100
100
  &.neutral { color: var(--c-text-1); }
101
101
  &.soft { color: var(--c-text-2); }
102
102
  &.mute { color: var(--c-text-3); }
103
- &.info { color: var(--c-info-text); }
104
- &.success { color: var(--c-success-text); }
105
- &.warning { color: var(--c-warning-text); }
106
- &.danger { color: var(--c-danger-text); }
103
+ &.info { color: var(--c-text-info-1); }
104
+ &.success { color: var(--c-text-success-1); }
105
+ &.warning { color: var(--c-text-warning-1); }
106
+ &.danger { color: var(--c-text-danger-1); }
107
107
 
108
- .STableCellText.link & { color: var(--c-info-text); }
109
- .STableCellText.link:hover & { color: var(--c-info-text-dark); }
108
+ .STableCellText.link & { color: var(--c-text-info-1); }
109
+ .STableCellText.link:hover & { color: var(--c-text-info-2); }
110
110
 
111
111
  .STableCellText.link &.neutral { color: var(--c-text-1); }
112
- .STableCellText.link:hover &.neutral { color: var(--c-info-text); }
112
+ .STableCellText.link:hover &.neutral { color: var(--c-text-info-1); }
113
113
  .STableCellText.link &.soft { color: var(--c-text-2); }
114
- .STableCellText.link:hover &.soft { color: var(--c-info-text); }
114
+ .STableCellText.link:hover &.soft { color: var(--c-text-info-1); }
115
115
  .STableCellText.link &.mute { color: var(--c-text-3); }
116
116
  .STableCellText.link:hover &.mute { color: var(--c-text-3); }
117
- .STableCellText.link &.info { color: var(--c-info-text); }
118
- .STableCellText.link:hover &.info { color: var(--c-info-text-dark); }
119
- .STableCellText.link &.success { color: var(--c-success-text); }
120
- .STableCellText.link:hover &.success { color: var(--c-success-text-dark); }
121
- .STableCellText.link &.warning { color: var(--c-warning-text); }
122
- .STableCellText.link:hover &.warning { color: var(--c-warning-text-darker); }
123
- .STableCellText.link &.danger { color: var(--c-danger-text); }
124
- .STableCellText.link:hover &.danger { color: var(--c-danger-text-dark); }
117
+ .STableCellText.link &.info { color: var(--c-text-info-1); }
118
+ .STableCellText.link:hover &.info { color: var(--c-text-info-2); }
119
+ .STableCellText.link &.success { color: var(--c-text-success-1); }
120
+ .STableCellText.link:hover &.success { color: var(--c-text-success-2); }
121
+ .STableCellText.link &.warning { color: var(--c-text-warning-1); }
122
+ .STableCellText.link:hover &.warning { color: var(--c-text-warning-2); }
123
+ .STableCellText.link &.danger { color: var(--c-text-danger-1); }
124
+ .STableCellText.link:hover &.danger { color: var(--c-text-danger-2); }
125
125
 
126
126
  .STableCell.summary & {
127
127
  font-weight: var(--table-cell-summary-font-weight);
@@ -142,23 +142,23 @@ const _iconColor = computed(() => {
142
142
  &.soft { color: var(--c-text-2); }
143
143
  &.mute { color: var(--c-text-3); }
144
144
 
145
- .STableCellText.link & { color: var(--c-info-text); }
146
- .STableCellText.link:hover & { color: var(--c-info-text-dark); }
145
+ .STableCellText.link & { color: var(--c-text-info-1); }
146
+ .STableCellText.link:hover & { color: var(--c-text-info-2); }
147
147
 
148
148
  .STableCellText.link &.neutral { color: var(--c-text-1); }
149
- .STableCellText.link:hover &.neutral { color: var(--c-info-text); }
149
+ .STableCellText.link:hover &.neutral { color: var(--c-text-info-1); }
150
150
  .STableCellText.link &.soft { color: var(--c-text-2); }
151
- .STableCellText.link:hover &.soft { color: var(--c-info-text); }
151
+ .STableCellText.link:hover &.soft { color: var(--c-text-info-1); }
152
152
  .STableCellText.link &.mute { color: var(--c-text-3); }
153
- .STableCellText.link:hover &.mute { color: var(--c-info-text); }
154
- .STableCellText.link &.info { color: var(--c-info-text); }
155
- .STableCellText.link:hover &.info { color: var(--c-info-dark); }
156
- .STableCellText.link &.success { color: var(--c-success-text); }
157
- .STableCellText.link:hover &.success { color: var(--c-success-text-dark); }
158
- .STableCellText.link &.warning { color: var(--c-warning-text); }
159
- .STableCellText.link:hover &.warning { color: var(--c-warning-text-dark); }
160
- .STableCellText.link &.danger { color: var(--c-danger-text); }
161
- .STableCellText.link:hover &.danger { color: var(--c-danger-text-dark); }
153
+ .STableCellText.link:hover &.mute { color: var(--c-text-3); }
154
+ .STableCellText.link &.info { color: var(--c-text-info-1); }
155
+ .STableCellText.link:hover &.info { color: var(--c-text-info-2); }
156
+ .STableCellText.link &.success { color: var(--c-text-success-1); }
157
+ .STableCellText.link:hover &.success { color: var(--c-text-success-2); }
158
+ .STableCellText.link &.warning { color: var(--c-text-warning-1); }
159
+ .STableCellText.link:hover &.warning { color: var(--c-text-warning-2); }
160
+ .STableCellText.link &.danger { color: var(--c-text-danger-1); }
161
+ .STableCellText.link:hover &.danger { color: var(--c-text-danger-2); }
162
162
  }
163
163
 
164
164
  .svg {
@@ -185,7 +185,7 @@ function stopDialogPositionListener() {
185
185
  transition: color 0.25s;
186
186
 
187
187
  .STableColumn.active & {
188
- color: var(--c-info);
188
+ color: var(--c-text-info-1);
189
189
  }
190
190
  }
191
191
 
@@ -208,15 +208,11 @@ function stopDialogPositionListener() {
208
208
 
209
209
  &:hover {
210
210
  color: var(--c-text-1);
211
- background-color: var(--c-bg-mute);
211
+ background-color: var(--c-bg-mute-1);
212
212
  }
213
213
 
214
214
  &.active {
215
- color: var(--c-info);
216
- }
217
-
218
- .dark &:hover {
219
- background-color: var(--c-bg);
215
+ color: var(--c-text-info-1);
220
216
  }
221
217
  }
222
218
 
@@ -260,7 +256,7 @@ function stopDialogPositionListener() {
260
256
  }
261
257
 
262
258
  &:hover::before {
263
- background-color: var(--c-info);
259
+ background-color: var(--c-border-info-1);
264
260
  }
265
261
 
266
262
  .STableItem:last-child .STableColumn & {
@@ -47,7 +47,7 @@ const { container, isOpen, toggle } = useFlyout()
47
47
  transition: background-color 0.25s;
48
48
 
49
49
  &:hover {
50
- background-color: var(--c-mute);
50
+ background-color: var(--c-bg-mute-1);
51
51
  }
52
52
  }
53
53
 
@@ -90,7 +90,7 @@ const { container, isOpen, toggle } = useFlyout()
90
90
  border-radius: 6px;
91
91
  width: 6px;
92
92
  height: 6px;
93
- background-color: var(--c-info-text);
93
+ background-color: var(--c-fg-info-1);
94
94
  }
95
95
 
96
96
  .dialog {
@@ -191,10 +191,10 @@ function onBlur() {
191
191
  }
192
192
 
193
193
  .tip :deep(a) {
194
- color: var(--c-info-text);
194
+ color: var(--c-text-info-1);
195
195
 
196
196
  &:hover {
197
- color: var(--c-info-text-dark);
197
+ color: var(--c-text-info-2);
198
198
  }
199
199
  }
200
200
  </style>
@@ -1,4 +1,4 @@
1
- import { type Component, type MaybeRef } from 'vue'
1
+ import { type Component, type MaybeRef, type MaybeRefOrGetter } from 'vue'
2
2
  import { type Mode } from '../components/SButton.vue'
3
3
  import { type Day } from '../support/Day'
4
4
  import { type DropdownSection } from './Dropdown'
@@ -48,7 +48,7 @@ export interface TableColumn<V, R, SV, SR> {
48
48
  resizable?: boolean
49
49
  cell?: TableCell<V, R> | TableColumnCellFn<V, R>
50
50
  summaryCell?: TableCell<SV, SR> | TableColumnCellFn<SV, SR>
51
- show?: boolean
51
+ show?: MaybeRefOrGetter<boolean>
52
52
  }
53
53
 
54
54
  export type TableColumnCellFn<V, R> = (value: V, record: R) => TableCell<V, R>
@@ -158,6 +158,8 @@ export interface TableCellAvatars<V = any, R = any> extends TableCellBase {
158
158
  type: 'avatars'
159
159
  avatars: TableCellAvatarsOption[] | ((value: V, record: R) => TableCellAvatarsOption[])
160
160
  color?: 'neutral' | 'soft' | 'mute'
161
+ avatarCount?: number
162
+ nameCount?: number
161
163
  }
162
164
 
163
165
  export interface TableCellAvatarsOption {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@globalbrain/sefirot",
3
- "version": "3.11.1",
3
+ "version": "3.13.0",
4
4
  "packageManager": "pnpm@8.12.1",
5
5
  "description": "Vue Components for Global Brain Design System.",
6
6
  "author": "Kia Ishii <ka.ishii@globalbrains.com>",
@@ -1,12 +0,0 @@
1
- <template>
2
- <svg
3
- viewBox="0 0 16 16"
4
- xmlns="http://www.w3.org/2000/svg"
5
- fill-rule="evenodd"
6
- clip-rule="evenodd"
7
- stroke-linejoin="round"
8
- stroke-miterlimit="1.414"
9
- >
10
- <path d="M8.16 6.857V9.6h4.537c-.183 1.177-1.37 3.45-4.537 3.45-2.73 0-4.96-2.26-4.96-5.05s2.23-5.05 4.96-5.05c1.554 0 2.594.66 3.19 1.233l2.17-2.092C12.126.79 10.32 0 8.16 0c-4.423 0-8 3.577-8 8s3.577 8 8 8c4.617 0 7.68-3.246 7.68-7.817 0-.526-.057-.926-.126-1.326H8.16z" />
11
- </svg>
12
- </template>