@globalbrain/sefirot 2.39.0 → 2.41.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.
- package/lib/components/SCard.vue +8 -1
- package/lib/components/SCardBlock.vue +1 -1
- package/lib/components/SCardFooter.vue +9 -1
- package/lib/components/SCardFooterActions.vue +3 -1
- package/lib/components/SContent.vue +78 -0
- package/lib/components/SDesc.vue +14 -0
- package/lib/components/SDescDay.vue +52 -0
- package/lib/components/SDescEmpty.vue +19 -0
- package/lib/components/SDescItem.vue +13 -0
- package/lib/components/SDescLabel.vue +31 -0
- package/lib/components/SDescLink.vue +59 -0
- package/lib/components/SDescNumber.vue +50 -0
- package/lib/components/SDescPill.vue +51 -0
- package/lib/components/SDescState.vue +35 -0
- package/lib/components/SDescText.vue +61 -0
- package/lib/components/SDropdown.vue +1 -0
- package/lib/components/SDropdownSectionFilter.vue +1 -0
- package/lib/components/SGrid.vue +29 -0
- package/lib/components/SGridItem.vue +14 -0
- package/lib/components/SHead.vue +5 -0
- package/lib/components/SHeadLead.vue +22 -0
- package/lib/components/SHeadTitle.vue +14 -0
- package/lib/components/SInputHMS.vue +2 -2
- package/lib/components/SInputText.vue +1 -0
- package/lib/components/SInputTextarea.vue +1 -0
- package/lib/components/SInputYMD.vue +1 -0
- package/lib/composables/Markdown.ts +1 -1
- package/lib/mixins/Card.ts +27 -15
- package/lib/mixins/Desc.ts +39 -0
- package/lib/mixins/Grid.ts +15 -0
- package/lib/mixins/Head.ts +18 -0
- package/lib/mixins/Sheet.ts +19 -11
- package/package.json +6 -6
package/lib/components/SCard.vue
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { provideCardState } from '../composables/Card'
|
|
3
3
|
|
|
4
|
-
export type Size = 'small' | 'medium'
|
|
4
|
+
export type Size = 'small' | 'medium' | 'large'
|
|
5
5
|
|
|
6
6
|
defineProps<{
|
|
7
7
|
size?: Size
|
|
@@ -55,6 +55,13 @@ const { isCollapsed } = provideCardState()
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
&.medium {
|
|
58
|
+
@media (min-width: 736px) {
|
|
59
|
+
margin: 48px auto 128px;
|
|
60
|
+
max-width: 640px;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
&.large {
|
|
58
65
|
@media (min-width: 864px) {
|
|
59
66
|
margin: 48px auto 128px;
|
|
60
67
|
max-width: 768px;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
export type Space = 'compact' | 'wide'
|
|
3
|
+
|
|
4
|
+
defineProps<{
|
|
5
|
+
space?: Space
|
|
6
|
+
}>()
|
|
7
|
+
</script>
|
|
8
|
+
|
|
1
9
|
<template>
|
|
2
|
-
<div class="SCardFooter">
|
|
10
|
+
<div class="SCardFooter" :class="[space ?? 'compact']">
|
|
3
11
|
<slot />
|
|
4
12
|
</div>
|
|
5
13
|
</template>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="SContent">
|
|
3
|
+
<slot />
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<style scoped lang="postcss">
|
|
8
|
+
.SContent {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
gap: 12px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.SContent :deep(p) {
|
|
15
|
+
margin: 0;
|
|
16
|
+
line-height: 24px;
|
|
17
|
+
font-size: 14px;
|
|
18
|
+
font-weight: 400;
|
|
19
|
+
color: var(--c-text-1);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.SContent :deep(strong) {
|
|
23
|
+
font-weight: 600;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.SContent :deep(a) {
|
|
27
|
+
color: var(--c-info-text);
|
|
28
|
+
transition: color 0.25s;
|
|
29
|
+
|
|
30
|
+
&:hover {
|
|
31
|
+
color: var(--c-info-text-dark);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.SContent :deep(ul),
|
|
36
|
+
.SContent :deep(ol) {
|
|
37
|
+
margin: 0;
|
|
38
|
+
padding-left: 0;
|
|
39
|
+
list-style: none;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.SContent :deep(ol) {
|
|
43
|
+
counter-reset: s-medium-counter;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.SContent :deep(li) {
|
|
47
|
+
position: relative;
|
|
48
|
+
margin: 0;
|
|
49
|
+
padding-left: 20px;
|
|
50
|
+
line-height: 24px;
|
|
51
|
+
font-size: 14px;
|
|
52
|
+
font-weight: 400;
|
|
53
|
+
color: var(--c-text-1);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.SContent :deep(ul > li::before) {
|
|
57
|
+
position: absolute;
|
|
58
|
+
top: 8px;
|
|
59
|
+
left: 2px;
|
|
60
|
+
width: 8px;
|
|
61
|
+
height: 8px;
|
|
62
|
+
border-radius: 50%;
|
|
63
|
+
background-color: var(--c-text-3);
|
|
64
|
+
content: "";
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.SContent :deep(ol > li) {
|
|
68
|
+
counter-increment: s-medium-counter;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.SContent :deep(ol > li::before) {
|
|
72
|
+
margin-right: 3px;
|
|
73
|
+
margin-left: -20px;
|
|
74
|
+
color: var(--c-text-2);
|
|
75
|
+
font-feature-settings: "tnum";
|
|
76
|
+
content: counter(s-medium-counter)". ";
|
|
77
|
+
}
|
|
78
|
+
</style>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, useSlots } from 'vue'
|
|
3
|
+
import { type Day } from '../support/Day'
|
|
4
|
+
import SDescEmpty from './SDescEmpty.vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<{
|
|
7
|
+
value?: Day | null
|
|
8
|
+
format?: string
|
|
9
|
+
}>()
|
|
10
|
+
|
|
11
|
+
const slots = useSlots()
|
|
12
|
+
|
|
13
|
+
const _value = computed(() => {
|
|
14
|
+
const slotValue = slots.default?.()[0].children
|
|
15
|
+
|
|
16
|
+
if (typeof slotValue === 'string') {
|
|
17
|
+
return slotValue
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (props.value) {
|
|
21
|
+
return props.value.format(props.format ?? 'YYYY-MM-DD HH:mm:ss')
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return null
|
|
25
|
+
})
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<div v-if="_value" class="SDescDay">
|
|
30
|
+
<div class="value">
|
|
31
|
+
{{ _value }}
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
<SDescEmpty v-else />
|
|
35
|
+
</template>
|
|
36
|
+
|
|
37
|
+
<style scoped lang="postcss">
|
|
38
|
+
.SDescDay {
|
|
39
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
40
|
+
padding-bottom: 7px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.value {
|
|
44
|
+
line-height: 24px;
|
|
45
|
+
font-size: 14px;
|
|
46
|
+
font-weight: 400;
|
|
47
|
+
font-feature-settings: "tnum";
|
|
48
|
+
white-space: nowrap;
|
|
49
|
+
overflow: hidden;
|
|
50
|
+
text-overflow: ellipsis;
|
|
51
|
+
}
|
|
52
|
+
</style>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="SDescEmpty">
|
|
3
|
+
<div class="value">—</div>
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<style scoped lang="postcss">
|
|
8
|
+
.SDescEmpty {
|
|
9
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
10
|
+
padding-bottom: 7px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.value {
|
|
14
|
+
line-height: 24px;
|
|
15
|
+
font-size: 14px;
|
|
16
|
+
font-weight: 400;
|
|
17
|
+
color: var(--c-text-3);
|
|
18
|
+
}
|
|
19
|
+
</style>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
defineProps<{
|
|
3
|
+
value?: string | null
|
|
4
|
+
}>()
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<template>
|
|
8
|
+
<div class="SDescLabel">
|
|
9
|
+
<div class="value">
|
|
10
|
+
<slot v-if="$slots.default" />
|
|
11
|
+
<template v-else>{{ value }}</template>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<style scoped lang="postcss">
|
|
17
|
+
.SDescLabel {
|
|
18
|
+
display: flex;
|
|
19
|
+
height: 24px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.value {
|
|
23
|
+
line-height: 24px;
|
|
24
|
+
font-size: 12px;
|
|
25
|
+
font-weight: 500;
|
|
26
|
+
color: var(--c-text-2);
|
|
27
|
+
white-space: nowrap;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
text-overflow: ellipsis;
|
|
30
|
+
}
|
|
31
|
+
</style>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, useSlots } from 'vue'
|
|
3
|
+
import SDescEmpty from './SDescEmpty.vue'
|
|
4
|
+
import SLink from './SLink.vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<{
|
|
7
|
+
value?: string | null
|
|
8
|
+
href?: string
|
|
9
|
+
}>()
|
|
10
|
+
|
|
11
|
+
const slots = useSlots()
|
|
12
|
+
|
|
13
|
+
const link = computed(() => {
|
|
14
|
+
if (props.href) {
|
|
15
|
+
return props.href
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const slotValue = slots.default?.()[0].children
|
|
19
|
+
|
|
20
|
+
if (typeof slotValue === 'string') {
|
|
21
|
+
return slotValue
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return props.value
|
|
25
|
+
})
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<template>
|
|
29
|
+
<div v-if="$slots.default || value" class="SDescLink">
|
|
30
|
+
<SLink class="value" :href="link">
|
|
31
|
+
<slot v-if="$slots.default" />
|
|
32
|
+
<template v-else>{{ value }}</template>
|
|
33
|
+
</SLink>
|
|
34
|
+
</div>
|
|
35
|
+
<SDescEmpty v-else />
|
|
36
|
+
</template>
|
|
37
|
+
|
|
38
|
+
<style scoped lang="postcss">
|
|
39
|
+
.SDescLink {
|
|
40
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
41
|
+
padding-bottom: 7px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.value {
|
|
45
|
+
display: block;
|
|
46
|
+
line-height: 24px;
|
|
47
|
+
font-size: 14px;
|
|
48
|
+
font-weight: 400;
|
|
49
|
+
white-space: nowrap;
|
|
50
|
+
overflow: hidden;
|
|
51
|
+
text-overflow: ellipsis;
|
|
52
|
+
color: var(--c-info-text);
|
|
53
|
+
transition: color 0.25s;
|
|
54
|
+
|
|
55
|
+
&:hover {
|
|
56
|
+
color: var(--c-info-text-dark);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
</style>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, useSlots } from 'vue'
|
|
3
|
+
import { format } from '../support/Num'
|
|
4
|
+
import SDescEmpty from './SDescEmpty.vue'
|
|
5
|
+
|
|
6
|
+
const props = defineProps<{
|
|
7
|
+
value?: number | null
|
|
8
|
+
separator?: boolean
|
|
9
|
+
}>()
|
|
10
|
+
|
|
11
|
+
const slots = useSlots()
|
|
12
|
+
|
|
13
|
+
const _value = computed(() => {
|
|
14
|
+
const slotValue = slots.default?.()[0].children
|
|
15
|
+
|
|
16
|
+
const v = (typeof slotValue === 'string') ? Number(slotValue) : props.value
|
|
17
|
+
|
|
18
|
+
if (v == null) {
|
|
19
|
+
return null
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return props.separator ? format(v) : v
|
|
23
|
+
})
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<template>
|
|
27
|
+
<div v-if="_value" class="SDescNumber">
|
|
28
|
+
<div class="value">
|
|
29
|
+
{{ _value }}
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
<SDescEmpty v-else />
|
|
33
|
+
</template>
|
|
34
|
+
|
|
35
|
+
<style scoped lang="postcss">
|
|
36
|
+
.SDescNumber {
|
|
37
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
38
|
+
padding-bottom: 7px;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.value {
|
|
42
|
+
line-height: 24px;
|
|
43
|
+
font-size: 14px;
|
|
44
|
+
font-weight: 400;
|
|
45
|
+
font-feature-settings: "tnum";
|
|
46
|
+
white-space: nowrap;
|
|
47
|
+
overflow: hidden;
|
|
48
|
+
text-overflow: ellipsis;
|
|
49
|
+
}
|
|
50
|
+
</style>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
import { isArray } from '../support/Utils'
|
|
4
|
+
import SDescEmpty from './SDescEmpty.vue'
|
|
5
|
+
import SPill, { type Mode } from './SPill.vue'
|
|
6
|
+
|
|
7
|
+
export interface Pill {
|
|
8
|
+
mode?: Mode
|
|
9
|
+
label: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const props = defineProps<{
|
|
13
|
+
pill?: Pill | Pill[] | null
|
|
14
|
+
}>()
|
|
15
|
+
|
|
16
|
+
const pills = computed(() => {
|
|
17
|
+
return props.pill
|
|
18
|
+
? isArray(props.pill) ? props.pill : [props.pill]
|
|
19
|
+
: null
|
|
20
|
+
})
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<div v-if="pills && pills.length" class="SDescPill">
|
|
25
|
+
<div class="value">
|
|
26
|
+
<div v-for="pill, index in pills" :key="index" class="pill">
|
|
27
|
+
<SPill tag="div" size="mini" :mode="pill.mode" :label="pill.label" />
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<SDescEmpty v-else />
|
|
32
|
+
</template>
|
|
33
|
+
|
|
34
|
+
<style scoped lang="postcss">
|
|
35
|
+
.SDescPill {
|
|
36
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
37
|
+
padding-bottom: 7px;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.value {
|
|
41
|
+
display: flex;
|
|
42
|
+
gap: 4px 6px;
|
|
43
|
+
flex-wrap: wrap;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.pill {
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
height: 24px;
|
|
50
|
+
}
|
|
51
|
+
</style>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import SDescEmpty from './SDescEmpty.vue'
|
|
3
|
+
import SState, { type Mode } from './SState.vue'
|
|
4
|
+
|
|
5
|
+
export interface State {
|
|
6
|
+
mode?: Mode
|
|
7
|
+
label: string
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
defineProps<{
|
|
11
|
+
state?: State | null
|
|
12
|
+
}>()
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<div v-if="state" class="SDescState">
|
|
17
|
+
<div class="value">
|
|
18
|
+
<SState as="div" size="mini" :mode="state.mode" :label="state.label" />
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
<SDescEmpty v-else />
|
|
22
|
+
</template>
|
|
23
|
+
|
|
24
|
+
<style scoped lang="postcss">
|
|
25
|
+
.SDescState {
|
|
26
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
27
|
+
padding-bottom: 7px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.value {
|
|
31
|
+
display: flex;
|
|
32
|
+
align-items: center;
|
|
33
|
+
height: 24px;
|
|
34
|
+
}
|
|
35
|
+
</style>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
import SDescEmpty from './SDescEmpty.vue'
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
value?: string | null
|
|
7
|
+
lineClamp?: string | number
|
|
8
|
+
preWrap?: boolean
|
|
9
|
+
}>()
|
|
10
|
+
|
|
11
|
+
const classes = computed(() => [
|
|
12
|
+
{ 'line-clamp': props.lineClamp },
|
|
13
|
+
{ 'pre-wrap': props.preWrap }
|
|
14
|
+
])
|
|
15
|
+
|
|
16
|
+
const lineClamp = computed(() => props.lineClamp ?? 'none')
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<div v-if="$slots.default || value" class="SDescText" :class="classes">
|
|
21
|
+
<div class="value">
|
|
22
|
+
<slot v-if="$slots.default" />
|
|
23
|
+
<template v-else>{{ value }}</template>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<SDescEmpty v-else />
|
|
27
|
+
</template>
|
|
28
|
+
|
|
29
|
+
<style scoped lang="postcss">
|
|
30
|
+
.SDescText {
|
|
31
|
+
border-bottom: 1px dashed var(--c-divider-1);
|
|
32
|
+
padding-bottom: 7px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.value {
|
|
36
|
+
line-height: 24px;
|
|
37
|
+
font-size: 14px;
|
|
38
|
+
font-weight: 400;
|
|
39
|
+
|
|
40
|
+
.SDescText.line-clamp & {
|
|
41
|
+
display: -webkit-box;
|
|
42
|
+
-webkit-line-clamp: v-bind(lineClamp);
|
|
43
|
+
-webkit-box-orient: vertical;
|
|
44
|
+
text-overflow: ellipsis;
|
|
45
|
+
overflow: hidden;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.SDescText.pre-wrap & {
|
|
49
|
+
white-space: pre-wrap;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.value :deep(a) {
|
|
54
|
+
color: var(--c-info-text);
|
|
55
|
+
transition: color 0.25s;
|
|
56
|
+
|
|
57
|
+
&:hover {
|
|
58
|
+
color: var(--c-info-text-dark);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
</style>
|
|
@@ -115,6 +115,7 @@ function handleClick(option: DropdownSectionFilterOption, value: string | number
|
|
|
115
115
|
padding: 0 8px;
|
|
116
116
|
width: 100%;
|
|
117
117
|
font-size: 14px;
|
|
118
|
+
font-family: var(--input-value-font-family);
|
|
118
119
|
line-height: 32px;
|
|
119
120
|
background-color: var(--input-bg-color);
|
|
120
121
|
transition: border-color 0.25s;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue'
|
|
3
|
+
|
|
4
|
+
const props = defineProps<{
|
|
5
|
+
cols?: string | number
|
|
6
|
+
gap?: string | number
|
|
7
|
+
}>()
|
|
8
|
+
|
|
9
|
+
const styles = computed(() => {
|
|
10
|
+
return {
|
|
11
|
+
'--grid-template-columns': `repeat(${props.cols ?? 1}, minmax(0, 1fr))`,
|
|
12
|
+
'--gap': `${props.gap ?? 0}px`
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<div class="SGrid" :style="styles">
|
|
19
|
+
<slot />
|
|
20
|
+
</div>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<style scoped lang="postcss">
|
|
24
|
+
.SGrid {
|
|
25
|
+
display: grid;
|
|
26
|
+
grid-template-columns: var(--grid-template-columns);
|
|
27
|
+
gap: var(--gap);
|
|
28
|
+
}
|
|
29
|
+
</style>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="SHeadLead">
|
|
3
|
+
<slot />
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<style scoped lang="postcss">
|
|
8
|
+
.SHeadLead {
|
|
9
|
+
line-height: 24px;
|
|
10
|
+
font-size: 14px;
|
|
11
|
+
color: var(--c-text-2);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.SHeadLead :deep(a) {
|
|
15
|
+
color: var(--c-info-text);
|
|
16
|
+
transition: color 0.25s;
|
|
17
|
+
|
|
18
|
+
&:hover {
|
|
19
|
+
color: var(--c-info-text-dark);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
</style>
|
|
@@ -122,7 +122,7 @@ function getValue(value: string): string | null {
|
|
|
122
122
|
|
|
123
123
|
const input = Number(value)
|
|
124
124
|
|
|
125
|
-
return isNaN(input) ? null : String(input)
|
|
125
|
+
return Number.isNaN(input) ? null : String(input)
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
function emitTouch(type: ValueType): void {
|
|
@@ -308,7 +308,7 @@ function createRequiredTouched(): boolean[] {
|
|
|
308
308
|
}
|
|
309
309
|
|
|
310
310
|
.input {
|
|
311
|
-
font-family: var(--font-family-number);
|
|
311
|
+
font-family: var(--input-value-font-family, var(--font-family-number));
|
|
312
312
|
line-height: 24px;
|
|
313
313
|
background-color: transparent;
|
|
314
314
|
|
|
@@ -393,6 +393,7 @@ function getValue(e: Event | FocusEvent | KeyboardEvent): string | null {
|
|
|
393
393
|
width: 100%;
|
|
394
394
|
background-color: transparent;
|
|
395
395
|
cursor: text;
|
|
396
|
+
font-family: var(--input-value-font-family);
|
|
396
397
|
|
|
397
398
|
&.neutral:not(.hide) { color: var(--input-value-color); }
|
|
398
399
|
&.info:not(.hide) { color: var(--c-info-text); }
|
|
@@ -147,6 +147,7 @@ function emitBlur(e: FocusEvent): void {
|
|
|
147
147
|
border: 1px solid var(--input-border-color);
|
|
148
148
|
border-radius: 6px;
|
|
149
149
|
width: 100%;
|
|
150
|
+
font-family: var(--input-value-font-family);
|
|
150
151
|
font-weight: 400;
|
|
151
152
|
background-color: var(--input-bg-color);
|
|
152
153
|
transition: border-color 0.25s, background-color 0.25s;
|
|
@@ -86,7 +86,7 @@ export function useLink({ container, callbacks }: UseLinkOptions): UseLink {
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
if (isCallback) {
|
|
89
|
-
const idx = parseInt(target.dataset.callbackId || '')
|
|
89
|
+
const idx = Number.parseInt(target.dataset.callbackId || '')
|
|
90
90
|
const callback = (callbacks ?? [])[idx]
|
|
91
91
|
|
|
92
92
|
if (!callback) {
|
package/lib/mixins/Card.ts
CHANGED
|
@@ -12,19 +12,31 @@ import SCardHeaderActions from '../components/SCardHeaderActions.vue'
|
|
|
12
12
|
import SCardHeaderTitle from '../components/SCardHeaderTitle.vue'
|
|
13
13
|
|
|
14
14
|
export function mixin(app: App): void {
|
|
15
|
-
app.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
15
|
+
app.component('SCard', SCard)
|
|
16
|
+
app.component('SCardBlock', SCardBlock)
|
|
17
|
+
app.component('SCardFooter', SCardFooter)
|
|
18
|
+
app.component('SCardFooterAction', SCardFooterAction)
|
|
19
|
+
app.component('SCardFooterActions', SCardFooterActions)
|
|
20
|
+
app.component('SCardHeader', SCardHeader)
|
|
21
|
+
app.component('SCardHeaderAction', SCardHeaderAction)
|
|
22
|
+
app.component('SCardHeaderActionClose', SCardHeaderActionClose)
|
|
23
|
+
app.component('SCardHeaderActionCollapse', SCardHeaderActionCollapse)
|
|
24
|
+
app.component('SCardHeaderActions', SCardHeaderActions)
|
|
25
|
+
app.component('SCardHeaderTitle', SCardHeaderTitle)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
declare module 'vue' {
|
|
29
|
+
export interface GlobalComponents {
|
|
30
|
+
SCard: typeof SCard
|
|
31
|
+
SCardBlock: typeof SCardBlock
|
|
32
|
+
SCardFooter: typeof SCardFooter
|
|
33
|
+
SCardFooterAction: typeof SCardFooterAction
|
|
34
|
+
SCardFooterActions: typeof SCardFooterActions
|
|
35
|
+
SCardHeader: typeof SCardHeader
|
|
36
|
+
SCardHeaderAction: typeof SCardHeaderAction
|
|
37
|
+
SCardHeaderActionClose: typeof SCardHeaderActionClose
|
|
38
|
+
SCardHeaderActionCollapse: typeof SCardHeaderActionCollapse
|
|
39
|
+
SCardHeaderActions: typeof SCardHeaderActions
|
|
40
|
+
SCardHeaderTitle: typeof SCardHeaderTitle
|
|
41
|
+
}
|
|
30
42
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type App } from 'vue'
|
|
2
|
+
import SDesc from '../components/SDesc.vue'
|
|
3
|
+
import SDescDay from '../components/SDescDay.vue'
|
|
4
|
+
import SDescEmpty from '../components/SDescEmpty.vue'
|
|
5
|
+
import SDescItem from '../components/SDescItem.vue'
|
|
6
|
+
import SDescLabel from '../components/SDescLabel.vue'
|
|
7
|
+
import SDescLink from '../components/SDescLink.vue'
|
|
8
|
+
import SDescNumber from '../components/SDescNumber.vue'
|
|
9
|
+
import SDescPill from '../components/SDescPill.vue'
|
|
10
|
+
import SDescState from '../components/SDescState.vue'
|
|
11
|
+
import SDescText from '../components/SDescText.vue'
|
|
12
|
+
|
|
13
|
+
export function mixin(app: App): void {
|
|
14
|
+
app.component('SDesc', SDesc)
|
|
15
|
+
app.component('SDescDay', SDescDay)
|
|
16
|
+
app.component('SDescEmpty', SDescEmpty)
|
|
17
|
+
app.component('SDescItem', SDescItem)
|
|
18
|
+
app.component('SDescLabel', SDescLabel)
|
|
19
|
+
app.component('SDescLink', SDescLink)
|
|
20
|
+
app.component('SDescNumber', SDescNumber)
|
|
21
|
+
app.component('SDescPill', SDescPill)
|
|
22
|
+
app.component('SDescState', SDescState)
|
|
23
|
+
app.component('SDescText', SDescText)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
declare module 'vue' {
|
|
27
|
+
export interface GlobalComponents {
|
|
28
|
+
SDesc: typeof SDesc
|
|
29
|
+
SDescDay: typeof SDescDay
|
|
30
|
+
SDescEmpty: typeof SDescEmpty
|
|
31
|
+
SDescItem: typeof SDescItem
|
|
32
|
+
SDescLabel: typeof SDescLabel
|
|
33
|
+
SDescLink: typeof SDescLink
|
|
34
|
+
SDescNumber: typeof SDescNumber
|
|
35
|
+
SDescPill: typeof SDescPill
|
|
36
|
+
SDescState: typeof SDescState
|
|
37
|
+
SDescText: typeof SDescText
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type App } from 'vue'
|
|
2
|
+
import SGrid from '../components/SGrid.vue'
|
|
3
|
+
import SGridItem from '../components/SGridItem.vue'
|
|
4
|
+
|
|
5
|
+
export function mixin(app: App): void {
|
|
6
|
+
app.component('SGrid', SGrid)
|
|
7
|
+
app.component('SGridItem', SGridItem)
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
declare module 'vue' {
|
|
11
|
+
export interface GlobalComponents {
|
|
12
|
+
SGrid: typeof SGrid
|
|
13
|
+
SGridItem: typeof SGridItem
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type App } from 'vue'
|
|
2
|
+
import SHead from '../components/SHead.vue'
|
|
3
|
+
import SHeadLead from '../components/SHeadLead.vue'
|
|
4
|
+
import SHeadTitle from '../components/SHeadTitle.vue'
|
|
5
|
+
|
|
6
|
+
export function mixin(app: App): void {
|
|
7
|
+
app.component('SHead', SHead)
|
|
8
|
+
app.component('SHeadLead', SHeadLead)
|
|
9
|
+
app.component('SHeadTitle', SHeadTitle)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare module 'vue' {
|
|
13
|
+
export interface GlobalComponents {
|
|
14
|
+
SHead: typeof SHead
|
|
15
|
+
SHeadLead: typeof SHeadLead
|
|
16
|
+
SHeadTitle: typeof SHeadTitle
|
|
17
|
+
}
|
|
18
|
+
}
|
package/lib/mixins/Sheet.ts
CHANGED
|
@@ -8,15 +8,23 @@ import SSheetMedium from '../components/SSheetMedium.vue'
|
|
|
8
8
|
import SSheetTitle from '../components/SSheetTitle.vue'
|
|
9
9
|
|
|
10
10
|
export function mixin(app: App): void {
|
|
11
|
-
app.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
app.component('SSheet', SSheet)
|
|
12
|
+
app.component('SSheetFooter', SSheetFooter)
|
|
13
|
+
app.component('SSheetFooterAction', SSheetFooterAction)
|
|
14
|
+
app.component('SSheetFooterActions', SSheetFooterActions)
|
|
15
|
+
app.component('SSheetForm', SSheetForm)
|
|
16
|
+
app.component('SSheetMedium', SSheetMedium)
|
|
17
|
+
app.component('SSheetTitle', SSheetTitle)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
declare module 'vue' {
|
|
21
|
+
export interface GlobalComponents {
|
|
22
|
+
SSheet: typeof SSheet
|
|
23
|
+
SSheetFooter: typeof SSheetFooter
|
|
24
|
+
SSheetFooterAction: typeof SSheetFooterAction
|
|
25
|
+
SSheetFooterActions: typeof SSheetFooterActions
|
|
26
|
+
SSheetForm: typeof SSheetForm
|
|
27
|
+
SSheetMedium: typeof SSheetMedium
|
|
28
|
+
SSheetTitle: typeof SSheetTitle
|
|
29
|
+
}
|
|
22
30
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@globalbrain/sefirot",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.41.0",
|
|
4
4
|
"packageManager": "pnpm@8.6.2",
|
|
5
5
|
"description": "Vue Components for Global Brain Design System.",
|
|
6
6
|
"author": "Kia Ishii <ka.ishii@globalbrains.com>",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"dayjs": "^1.11.7"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@globalbrain/eslint-config": "^1.5.
|
|
50
|
+
"@globalbrain/eslint-config": "^1.5.1",
|
|
51
51
|
"@histoire/plugin-vue": "^0.16.1",
|
|
52
52
|
"@iconify-icons/ph": "^1.2.4",
|
|
53
53
|
"@iconify/vue": "^4.1.1",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@types/markdown-it": "^12.2.3",
|
|
57
57
|
"@types/node": "^20.1.1",
|
|
58
58
|
"@vitejs/plugin-vue": "^4.2.1",
|
|
59
|
-
"@vitest/coverage-c8": "^0.
|
|
59
|
+
"@vitest/coverage-c8": "^0.33.0",
|
|
60
60
|
"@vue/test-utils": "^2.3.2",
|
|
61
61
|
"@vuelidate/core": "^2.0.2",
|
|
62
62
|
"@vuelidate/validators": "^2.0.2",
|
|
@@ -65,10 +65,10 @@
|
|
|
65
65
|
"chalk": "^4.1.2",
|
|
66
66
|
"conventional-changelog-cli": "^2.2.2",
|
|
67
67
|
"enquirer": "^2.3.6",
|
|
68
|
-
"eslint": "^8.
|
|
68
|
+
"eslint": "^8.44.0",
|
|
69
69
|
"execa": "^5.1.1",
|
|
70
70
|
"fuse.js": "^6.6.2",
|
|
71
|
-
"happy-dom": "^
|
|
71
|
+
"happy-dom": "^10.1.1",
|
|
72
72
|
"histoire": "^0.16.1",
|
|
73
73
|
"lodash-es": "^4.17.21",
|
|
74
74
|
"markdown-it": "^13.0.1",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"v-calendar": "^3.0.3",
|
|
82
82
|
"vite": "^4.3.5",
|
|
83
83
|
"vitepress": "1.0.0-alpha.75",
|
|
84
|
-
"vitest": "^0.
|
|
84
|
+
"vitest": "^0.33.0",
|
|
85
85
|
"vue": "^3.2.47",
|
|
86
86
|
"vue-router": "^4.1.6",
|
|
87
87
|
"vue-tsc": "^1.7.1",
|