@purestack/ts-components 1.1.2 → 1.1.4
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/dist/ts-components.d.mts +17 -7
- package/dist/ts-components.d.mts.map +1 -1
- package/dist/ts-components.mjs +29 -14
- package/dist/ts-components.mjs.map +1 -1
- package/package.json +8 -8
- package/src/standard/navMenu/navMenu.ts +19 -3
- package/src/standard/pageToc/pageToc.ts +5 -3
- package/src/standard/signIn/signIn.ts +11 -4
- package/src/standard/signIn/signInStyle.ts +10 -4
- package/src/standard/topBar/topBar.ts +16 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@purestack/ts-components",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"packageManager": "yarn@4.9.2",
|
|
5
5
|
"module": "./dist/ts-components.mjs",
|
|
6
6
|
"types": "./dist/ts-components.d.mts",
|
|
@@ -46,15 +46,15 @@
|
|
|
46
46
|
"test": "vitest"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@purestack/ts-minidom": "^1.1.
|
|
50
|
-
"@purestack/ts-render": "^1.1.
|
|
49
|
+
"@purestack/ts-minidom": "^1.1.4",
|
|
50
|
+
"@purestack/ts-render": "^1.1.4"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@purestack/ts-common": "^1.1.
|
|
54
|
-
"@purestack/ts-css": "^1.1.
|
|
55
|
-
"@purestack/ts-page-scripts": "^1.1.
|
|
56
|
-
"@purestack/ts-style": "^1.1.
|
|
57
|
-
"@purestack/ts-util": "^1.1.
|
|
53
|
+
"@purestack/ts-common": "^1.1.4",
|
|
54
|
+
"@purestack/ts-css": "^1.1.4",
|
|
55
|
+
"@purestack/ts-page-scripts": "^1.1.4",
|
|
56
|
+
"@purestack/ts-style": "^1.1.4",
|
|
57
|
+
"@purestack/ts-util": "^1.1.4",
|
|
58
58
|
"regor": "^1.7.3"
|
|
59
59
|
},
|
|
60
60
|
"regorComponents": [
|
|
@@ -27,10 +27,14 @@ export interface NavMenu {
|
|
|
27
27
|
tone?: RefOrValue<SemanticTone>
|
|
28
28
|
variant?: RefOrValue<ComponentVariant>
|
|
29
29
|
variantMode?: RefOrValue<ComponentVariantMode>
|
|
30
|
+
signInSignedIn?: RefOrValue<boolean>
|
|
30
31
|
signInAvatarSrc?: RefOrValue<string>
|
|
31
32
|
signInAvatarAlt?: RefOrValue<string>
|
|
32
33
|
classes?: ComputedRef<string>
|
|
33
|
-
|
|
34
|
+
search?: RefOrValue<boolean>
|
|
35
|
+
signInEnabled?: RefOrValue<boolean>
|
|
36
|
+
resolvedSignInEnabled?: ComputedRef<boolean>
|
|
37
|
+
searchEnabled?: ComputedRef<boolean>
|
|
34
38
|
navRoot?: string
|
|
35
39
|
}
|
|
36
40
|
|
|
@@ -102,8 +106,11 @@ const navMenuTemplate = html`<nav
|
|
|
102
106
|
<div class="nav__header-row">
|
|
103
107
|
<div class="nav__header">Navigation</div>
|
|
104
108
|
<SignIn
|
|
109
|
+
r-if="resolvedSignInEnabled"
|
|
105
110
|
class="nav__account"
|
|
106
|
-
:
|
|
111
|
+
:enabled="resolvedSignInEnabled"
|
|
112
|
+
:signedIn="signInSignedIn"
|
|
113
|
+
:avatarSrc="signInAvatarSrc"
|
|
107
114
|
:avatarAlt="signInAvatarAlt"/>
|
|
108
115
|
<button
|
|
109
116
|
class="nav__panel-toggle tone-fill-surface-all tone-text-surface-all tone-border-surface-all"
|
|
@@ -233,9 +240,12 @@ function defineNavMenuComponent() {
|
|
|
233
240
|
props: [
|
|
234
241
|
'items',
|
|
235
242
|
'currentUrl',
|
|
243
|
+
'search',
|
|
244
|
+
'signInEnabled',
|
|
236
245
|
'tone',
|
|
237
246
|
'variant',
|
|
238
247
|
'variantMode',
|
|
248
|
+
'signInSignedIn',
|
|
239
249
|
'signInAvatarSrc',
|
|
240
250
|
'signInAvatarAlt',
|
|
241
251
|
],
|
|
@@ -253,7 +263,13 @@ function defineNavMenuComponent() {
|
|
|
253
263
|
},
|
|
254
264
|
),
|
|
255
265
|
),
|
|
256
|
-
searchEnabled:
|
|
266
|
+
searchEnabled: computed(
|
|
267
|
+
() => unref(props.search) ?? context?.site.pagefind?.enabled === true,
|
|
268
|
+
),
|
|
269
|
+
resolvedSignInEnabled: computed(
|
|
270
|
+
() =>
|
|
271
|
+
unref(props.signInEnabled) ?? context?.site.auth?.enabled === true,
|
|
272
|
+
),
|
|
257
273
|
navRoot: normalizeNavStateKeyPart(context?.navigation?.root ?? ''),
|
|
258
274
|
navItems: computed(() =>
|
|
259
275
|
buildNavState(
|
|
@@ -7,6 +7,8 @@ import {
|
|
|
7
7
|
defineComponent,
|
|
8
8
|
html,
|
|
9
9
|
type RefOrValue,
|
|
10
|
+
type SRef,
|
|
11
|
+
unref,
|
|
10
12
|
} from 'regor'
|
|
11
13
|
import {
|
|
12
14
|
type ComponentVariant,
|
|
@@ -15,7 +17,7 @@ import {
|
|
|
15
17
|
} from '../componentVariant'
|
|
16
18
|
|
|
17
19
|
export interface PageToc {
|
|
18
|
-
|
|
20
|
+
outline?: PageOutlineItem[] | SRef<PageOutlineItem[]>
|
|
19
21
|
title?: string
|
|
20
22
|
tone?: RefOrValue<SemanticTone>
|
|
21
23
|
variant?: RefOrValue<ComponentVariant>
|
|
@@ -119,7 +121,7 @@ function omitSingleDocumentHeading(items: PageOutlineItem[]) {
|
|
|
119
121
|
}
|
|
120
122
|
|
|
121
123
|
function resolveItems(props: PageToc, context: TsSsgContext | undefined) {
|
|
122
|
-
const items = props.
|
|
124
|
+
const items = unref(props.outline) ?? context?.outline ?? []
|
|
123
125
|
return toPageTocItems(omitSingleDocumentHeading(items))
|
|
124
126
|
}
|
|
125
127
|
|
|
@@ -131,7 +133,7 @@ function resolveTitle(props: PageToc) {
|
|
|
131
133
|
|
|
132
134
|
function definePageTocComponent() {
|
|
133
135
|
return defineComponent<PageToc>(pageTocTemplate, {
|
|
134
|
-
props: ['
|
|
136
|
+
props: ['outline', 'title', 'tone', 'variant', 'variantMode'],
|
|
135
137
|
context: (head) => {
|
|
136
138
|
const context = resolveTsSsgContext(head)
|
|
137
139
|
return {
|
|
@@ -22,8 +22,11 @@ export interface SignIn {
|
|
|
22
22
|
tone?: RefOrValue<SemanticTone>
|
|
23
23
|
variant?: RefOrValue<ComponentVariant>
|
|
24
24
|
variantMode?: RefOrValue<ComponentVariantMode>
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
enabled?: RefOrValue<boolean>
|
|
26
|
+
signUp?: RefOrValue<boolean>
|
|
27
|
+
signedIn?: RefOrValue<boolean>
|
|
28
|
+
authEnabled?: ComputedRef<boolean>
|
|
29
|
+
signUpEnabled?: ComputedRef<boolean>
|
|
27
30
|
resolvedIcon?: ComputedRef<string>
|
|
28
31
|
resolvedAccountIcon?: ComputedRef<string>
|
|
29
32
|
resolvedLabel?: ComputedRef<string>
|
|
@@ -37,6 +40,7 @@ const DEFAULT_SIGN_IN_LABEL = 'Account'
|
|
|
37
40
|
const signInTemplate = html`<details
|
|
38
41
|
r-if="authEnabled"
|
|
39
42
|
class="sign-in position-relative"
|
|
43
|
+
:data-signed-in="signedIn"
|
|
40
44
|
data-menu-runtime
|
|
41
45
|
data-menu-align="end"
|
|
42
46
|
>
|
|
@@ -134,6 +138,9 @@ const signInTemplate = html`<details
|
|
|
134
138
|
function defineSignInComponent() {
|
|
135
139
|
return defineComponent<SignIn>(signInTemplate, {
|
|
136
140
|
props: [
|
|
141
|
+
'enabled',
|
|
142
|
+
'signUp',
|
|
143
|
+
'signedIn',
|
|
137
144
|
'avatarSrc',
|
|
138
145
|
'avatarAlt',
|
|
139
146
|
'icon',
|
|
@@ -155,8 +162,8 @@ function resolveSignIn(props: SignIn, head: unknown): SignIn {
|
|
|
155
162
|
const auth = tryResolveTsSsgContext(head)?.site?.auth
|
|
156
163
|
return {
|
|
157
164
|
...props,
|
|
158
|
-
authEnabled: auth?.enabled === true,
|
|
159
|
-
signUpEnabled: auth?.signUp === true,
|
|
165
|
+
authEnabled: computed(() => unref(props.enabled) ?? auth?.enabled === true),
|
|
166
|
+
signUpEnabled: computed(() => unref(props.signUp) ?? auth?.signUp === true),
|
|
160
167
|
resolvedIcon: computed(() => unref(props.icon) || DEFAULT_SIGN_IN_ICON),
|
|
161
168
|
resolvedAccountIcon: computed(
|
|
162
169
|
() => unref(props.accountIcon) || DEFAULT_ACCOUNT_ICON,
|
|
@@ -29,24 +29,30 @@ function registerSignInAuthStateStyles(theme: ThemeMode) {
|
|
|
29
29
|
|
|
30
30
|
styleBuilder
|
|
31
31
|
.select(
|
|
32
|
-
'.sign-in__signed-in-view, :scope.signed-in .sign-in__signed-out-view',
|
|
32
|
+
'.sign-in__signed-in-view, :scope.signed-in .sign-in:not([data-signed-in="false"]) .sign-in__signed-out-view, .sign-in[data-signed-in="true"] .sign-in__signed-out-view',
|
|
33
33
|
theme,
|
|
34
34
|
)
|
|
35
35
|
.display('none')
|
|
36
36
|
|
|
37
37
|
styleBuilder
|
|
38
|
-
.select(
|
|
38
|
+
.select(
|
|
39
|
+
':scope.signed-in .sign-in:not([data-signed-in="false"]) .sign-in__signed-in-view, .sign-in[data-signed-in="true"] .sign-in__signed-in-view',
|
|
40
|
+
theme,
|
|
41
|
+
)
|
|
39
42
|
.display('inline-flex')
|
|
40
43
|
|
|
41
44
|
styleBuilder
|
|
42
45
|
.select(
|
|
43
|
-
'.sign-in__signed-in-action, :scope.signed-in .sign-in__signed-out-action',
|
|
46
|
+
'.sign-in__signed-in-action, :scope.signed-in .sign-in:not([data-signed-in="false"]) .sign-in__signed-out-action, .sign-in[data-signed-in="true"] .sign-in__signed-out-action',
|
|
44
47
|
theme,
|
|
45
48
|
)
|
|
46
49
|
.display('none')
|
|
47
50
|
|
|
48
51
|
styleBuilder
|
|
49
|
-
.select(
|
|
52
|
+
.select(
|
|
53
|
+
':scope.signed-in .sign-in:not([data-signed-in="false"]) .sign-in__signed-in-action, .sign-in[data-signed-in="true"] .sign-in__signed-in-action',
|
|
54
|
+
theme,
|
|
55
|
+
)
|
|
50
56
|
.display('inline-flex')
|
|
51
57
|
}
|
|
52
58
|
|
|
@@ -22,11 +22,14 @@ export interface TopBar {
|
|
|
22
22
|
resolvedLogoComponent?: ComputedRef<string>
|
|
23
23
|
tone?: RefOrValue<SemanticTone>
|
|
24
24
|
variant?: RefOrValue<ComponentVariant>
|
|
25
|
+
signInSignedIn?: RefOrValue<boolean>
|
|
25
26
|
signInAvatarSrc?: RefOrValue<string>
|
|
26
27
|
signInAvatarAlt?: RefOrValue<string>
|
|
27
28
|
classes?: ComputedRef<string>
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
search?: RefOrValue<boolean>
|
|
30
|
+
searchEnabled?: ComputedRef<boolean>
|
|
31
|
+
signInEnabled?: RefOrValue<boolean>
|
|
32
|
+
resolvedSignInEnabled?: ComputedRef<boolean>
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
const DEFAULT_TOP_BAR_VARIANT: ComponentVariant = 'surfaceAlt'
|
|
@@ -40,7 +43,12 @@ function resolveTopBar(context: TsSsgContext, props: TopBar): TopBar {
|
|
|
40
43
|
() =>
|
|
41
44
|
unref(props.logoComponent) ?? context.site.logo.component ?? 'SiteLogo',
|
|
42
45
|
),
|
|
43
|
-
searchEnabled:
|
|
46
|
+
searchEnabled: computed(
|
|
47
|
+
() => unref(props.search) ?? context.site.pagefind?.enabled === true,
|
|
48
|
+
),
|
|
49
|
+
resolvedSignInEnabled: computed(
|
|
50
|
+
() => unref(props.signInEnabled) ?? context.site.auth?.enabled === true,
|
|
51
|
+
),
|
|
44
52
|
classes: computed(() =>
|
|
45
53
|
resolveComponentClasses(props, {
|
|
46
54
|
defaultVariant: DEFAULT_TOP_BAR_VARIANT,
|
|
@@ -66,8 +74,10 @@ const topBarTemplate = html`<input
|
|
|
66
74
|
<Flex class="topbar__controls flex-none" align="center" justify="end">
|
|
67
75
|
<ThemeToggle/>
|
|
68
76
|
<SignIn
|
|
69
|
-
r-if="
|
|
77
|
+
r-if="resolvedSignInEnabled"
|
|
70
78
|
class="topbar__account"
|
|
79
|
+
:enabled="resolvedSignInEnabled"
|
|
80
|
+
:signedIn="signInSignedIn"
|
|
71
81
|
:avatarSrc="signInAvatarSrc"
|
|
72
82
|
:avatarAlt="signInAvatarAlt"/>
|
|
73
83
|
<label
|
|
@@ -87,10 +97,11 @@ function defineTopBarComponent() {
|
|
|
87
97
|
'logoComponent',
|
|
88
98
|
'tone',
|
|
89
99
|
'variant',
|
|
100
|
+
'signInSignedIn',
|
|
90
101
|
'signInAvatarSrc',
|
|
91
102
|
'signInAvatarAlt',
|
|
92
103
|
'signInEnabled',
|
|
93
|
-
'
|
|
104
|
+
'search',
|
|
94
105
|
],
|
|
95
106
|
context: (head) => resolveTopBar(resolveTsSsgContext(head), head.props),
|
|
96
107
|
})
|