@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purestack/ts-components",
3
- "version": "1.1.2",
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.2",
50
- "@purestack/ts-render": "^1.1.2"
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.2",
54
- "@purestack/ts-css": "^1.1.2",
55
- "@purestack/ts-page-scripts": "^1.1.2",
56
- "@purestack/ts-style": "^1.1.2",
57
- "@purestack/ts-util": "^1.1.2",
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
- searchEnabled?: boolean
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
- :avatarSrc="signInAvatarSrc"
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: context?.site.pagefind?.enabled === true,
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
- items?: PageOutlineItem[]
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.items ?? context?.outline ?? []
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: ['items', 'title', 'tone', 'variant', 'variantMode'],
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
- authEnabled?: boolean
26
- signUpEnabled?: boolean
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(':scope.signed-in .sign-in__signed-in-view', theme)
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(':scope.signed-in .sign-in__signed-in-action', theme)
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
- searchEnabled?: boolean
29
- signInEnabled?: boolean
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: context.site.pagefind?.enabled === true,
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="signInEnabled"
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
- 'searchEnabled',
104
+ 'search',
94
105
  ],
95
106
  context: (head) => resolveTopBar(resolveTsSsgContext(head), head.props),
96
107
  })