@triptease/tt-navbar 0.0.45 → 0.0.47

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 (41) hide show
  1. package/dist/src/Config.d.ts +6 -0
  2. package/dist/src/Config.js +7 -0
  3. package/dist/src/Config.js.map +1 -0
  4. package/dist/src/TtNavbar.d.ts +3 -3
  5. package/dist/src/TtNavbar.js +26 -18
  6. package/dist/src/TtNavbar.js.map +1 -1
  7. package/dist/src/getInitialNavbarState.d.ts +2 -0
  8. package/dist/src/getInitialNavbarState.js +21 -0
  9. package/dist/src/getInitialNavbarState.js.map +1 -0
  10. package/dist/src/index.d.ts +2 -0
  11. package/dist/src/index.js +2 -0
  12. package/dist/src/index.js.map +1 -1
  13. package/dist/test/tt-navbar.test.js +32 -53
  14. package/dist/test/tt-navbar.test.js.map +1 -1
  15. package/dist/web/Config.js +14 -0
  16. package/dist/web/Config.js.map +7 -0
  17. package/dist/web/Routes.js +1 -1
  18. package/dist/web/TtNavbar.js +35 -66
  19. package/dist/web/TtNavbar.js.map +4 -4
  20. package/dist/web/getInitialNavbarState.js +31 -0
  21. package/dist/web/getInitialNavbarState.js.map +7 -0
  22. package/dist/web/global.d.js +1 -1
  23. package/dist/web/index.js +55 -67
  24. package/dist/web/index.js.map +4 -4
  25. package/dist/web/styles.js +1 -1
  26. package/dist/web/triptease-logo.js +1 -1
  27. package/dist/web/tt-navbar.js +35 -66
  28. package/dist/web/tt-navbar.js.map +4 -4
  29. package/dist/web/urlMappings.js +1 -1
  30. package/package.json +1 -1
  31. package/src/Config.ts +7 -0
  32. package/src/TtNavbar.ts +31 -18
  33. package/src/getInitialNavbarState.ts +30 -0
  34. package/src/index.ts +2 -0
  35. package/test/tt-navbar.test.ts +47 -58
  36. package/dist/src/NavbarController.d.ts +0 -12
  37. package/dist/src/NavbarController.js +0 -49
  38. package/dist/src/NavbarController.js.map +0 -1
  39. package/dist/web/NavbarController.js +0 -57
  40. package/dist/web/NavbarController.js.map +0 -7
  41. package/src/NavbarController.ts +0 -66
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @triptease/tt-navbar v0.0.45
2
+ * @triptease/tt-navbar v0.0.47
3
3
  */
4
4
 
5
5
  // src/urlMappings.ts
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Webcomponent tt-navbar following open-wc recommendations",
4
4
  "license": "MIT",
5
5
  "author": "tt-navbar",
6
- "version": "0.0.45",
6
+ "version": "0.0.47",
7
7
  "type": "module",
8
8
  "main": "dist/src/index.js",
9
9
  "module": "dist/src/index.js",
package/src/Config.ts ADDED
@@ -0,0 +1,7 @@
1
+ const Config = {
2
+ NavbarStateCookieName: 'tt-navbar-state',
3
+ NavbarStateCookieOpenValue: 'open',
4
+ NavbarStateCookieClosedValue: 'closed',
5
+ };
6
+
7
+ export { Config };
package/src/TtNavbar.ts CHANGED
@@ -19,7 +19,7 @@ import { styles } from './styles.js';
19
19
  import { tripteaseLogo } from './triptease-logo.js';
20
20
  import { urlMappings } from './urlMappings.js';
21
21
  import { Routes } from './Routes.js';
22
- import { NavbarController } from './NavbarController.js';
22
+ import { Config } from './Config.js';
23
23
 
24
24
  const jsonArrayConverter = (value: string | null) => {
25
25
  if (!value) return [];
@@ -51,6 +51,12 @@ export class TtNavbar extends LitElement {
51
51
  @property({ type: Array, converter: jsonArrayConverter })
52
52
  clients: { clientKey: string; displayName: string }[] = [];
53
53
 
54
+ @property({ type: String, attribute: 'initial-state' })
55
+ initialState: 'open' | 'closed' | undefined = undefined;
56
+
57
+ @state()
58
+ isOpen: boolean = true;
59
+
54
60
  @property({ type: Object })
55
61
  onClientChange: ((clientKeySelected: string) => void) | undefined;
56
62
 
@@ -60,11 +66,6 @@ export class TtNavbar extends LitElement {
60
66
  @queryAll('a')
61
67
  protected allNavLinks!: Array<HTMLAnchorElement>;
62
68
 
63
- @state()
64
- private sidebarOpen = true;
65
-
66
- private navbarController = new NavbarController(this);
67
-
68
69
  protected firstUpdated() {
69
70
  this.setActiveState();
70
71
  }
@@ -77,6 +78,10 @@ export class TtNavbar extends LitElement {
77
78
  window.addEventListener('tetris:navigate', this.setActiveState);
78
79
 
79
80
  super.connectedCallback();
81
+
82
+ if (this.initialState) {
83
+ this.isOpen = this.initialState === 'open';
84
+ }
80
85
  }
81
86
 
82
87
  public disconnectedCallback() {
@@ -173,16 +178,24 @@ export class TtNavbar extends LitElement {
173
178
 
174
179
  private toggleSidebar = () => {
175
180
  this.closeAllDetails();
176
- this.navbarController.toggle();
181
+ this.isOpen = !this.isOpen;
182
+
183
+ const {
184
+ NavbarStateCookieName,
185
+ NavbarStateCookieOpenValue,
186
+ NavbarStateCookieClosedValue,
187
+ } = Config;
188
+
189
+ document.cookie = `${NavbarStateCookieName}=${this.isOpen ? NavbarStateCookieOpenValue : NavbarStateCookieClosedValue}; path=/; max-age=31536000`;
177
190
  };
178
191
 
179
- private handleToggle = (e: ToggleEvent) => {
192
+ private handleDetailsToggle = (e: ToggleEvent) => {
180
193
  const { newState } = e;
181
194
  const target = e.currentTarget as HTMLDetailsElement;
182
195
 
183
196
  if (newState === 'open') {
184
- if (!this.navbarController.isOpen) {
185
- this.navbarController.toggle();
197
+ if (!this.isOpen) {
198
+ this.toggleSidebar();
186
199
  }
187
200
 
188
201
  this.closeAllDetails(target);
@@ -216,8 +229,8 @@ export class TtNavbar extends LitElement {
216
229
 
217
230
  render() {
218
231
  return html`
219
- <nav id=${this.id} class="${this.navbarController.isOpen ? '' : 'sidebar-closed'}">
220
- <div class="sidebar-header ${this.navbarController.isOpen ? '' : 'sidebar-closed'}">
232
+ <nav id=${this.id} class="${this.isOpen ? '' : 'sidebar-closed'}">
233
+ <div class="sidebar-header ${this.isOpen ? '' : 'sidebar-closed'}">
221
234
  <div class="logo">
222
235
  ${unsafeSVG(tripteaseLogo)}
223
236
  </div>
@@ -230,7 +243,7 @@ export class TtNavbar extends LitElement {
230
243
  </button>
231
244
  </div>
232
245
 
233
- <div class="nav-items ${this.navbarController.isOpen ? '' : 'sidebar-closed'}">
246
+ <div class="nav-items ${this.isOpen ? '' : 'sidebar-closed'}">
234
247
  <a
235
248
  class="nav-item"
236
249
  href=${this.buildUrl('/')}
@@ -249,7 +262,7 @@ export class TtNavbar extends LitElement {
249
262
  data-intercom-target="channels"
250
263
  >${unsafeSVG(channels)}<span>Channels</span></a
251
264
  >
252
- <details id="market-insights" @toggle=${this.handleToggle} data-intercom-target="market-insights">
265
+ <details id="market-insights" @toggle=${this.handleDetailsToggle} data-intercom-target="market-insights">
253
266
  <summary>
254
267
  ${unsafeSVG(graph)}
255
268
  <span>Market Insights</span>
@@ -272,7 +285,7 @@ export class TtNavbar extends LitElement {
272
285
  >
273
286
  </div>
274
287
  </details>
275
- <details id="settings" @toggle=${this.handleToggle} data-intercom-target="settings">
288
+ <details id="settings" @toggle=${this.handleDetailsToggle} data-intercom-target="settings">
276
289
  <summary>
277
290
  ${unsafeSVG(gear)}
278
291
  <span>Settings</span>
@@ -310,7 +323,7 @@ export class TtNavbar extends LitElement {
310
323
  </div>
311
324
  </details>
312
325
  <hr />
313
- <details id="account" @toggle=${this.handleToggle} data-intercom-target="account">
326
+ <details id="account" @toggle=${this.handleDetailsToggle} data-intercom-target="account">
314
327
  <summary>
315
328
  ${unsafeSVG(user)}
316
329
  <span>Account</span>
@@ -333,7 +346,7 @@ export class TtNavbar extends LitElement {
333
346
  >
334
347
  </div>
335
348
  </details>
336
- <details id="billing-routes" @toggle=${this.handleToggle} data-intercom-target="billing">
349
+ <details id="billing-routes" @toggle=${this.handleDetailsToggle} data-intercom-target="billing">
337
350
  <summary>
338
351
  ${unsafeSVG(wallet)}
339
352
  <span>Billing</span>
@@ -357,7 +370,7 @@ export class TtNavbar extends LitElement {
357
370
  </div>
358
371
  </details>
359
372
  </div>
360
- <div class="tertiary-nav ${this.navbarController.isOpen ? '' : 'sidebar-closed'}">
373
+ <div class="tertiary-nav ${this.isOpen ? '' : 'sidebar-closed'}">
361
374
  <div id="external-links" class="nav-items">
362
375
  <a
363
376
  class="nav-item external-link"
@@ -0,0 +1,30 @@
1
+ import { Config } from './Config.js';
2
+
3
+ const getInitialNavbarState = (cookieString?: string) => {
4
+ const cookies = cookieString || document.cookie;
5
+
6
+ if (!cookies) {
7
+ return undefined;
8
+ }
9
+
10
+ const stateCookie = cookies
11
+ .split(';')
12
+ .find(c => c.trim().startsWith(`${Config.NavbarStateCookieName}`));
13
+
14
+ if (!stateCookie) {
15
+ return undefined;
16
+ }
17
+
18
+ const value = stateCookie.split('=')[1];
19
+
20
+ if (
21
+ value !== Config.NavbarStateCookieOpenValue &&
22
+ value !== Config.NavbarStateCookieClosedValue
23
+ ) {
24
+ return undefined;
25
+ }
26
+
27
+ return value;
28
+ };
29
+
30
+ export { getInitialNavbarState };
package/src/index.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  export { TtNavbar } from './TtNavbar.js';
2
2
  export { Routes } from './Routes.js';
3
+ export { Config } from './Config.js';
4
+ export { getInitialNavbarState } from './getInitialNavbarState.js';
@@ -1,4 +1,3 @@
1
- import { Clerk } from '@clerk/clerk-js';
2
1
  import '../src/tt-navbar.js';
3
2
  import {
4
3
  elementUpdated,
@@ -7,8 +6,7 @@ import {
7
6
  nextFrame,
8
7
  waitUntil,
9
8
  } from '@open-wc/testing';
10
- import { Resources } from '@clerk/types';
11
- import { TtNavbar } from '../src/index.js';
9
+ import { Config, getInitialNavbarState, TtNavbar } from '../src/index.js';
12
10
  import { Routes } from '../src/Routes.js';
13
11
 
14
12
  // eslint-disable-next-line no-undef
@@ -400,77 +398,80 @@ describe('TtNavbar', () => {
400
398
  expect(anchor!.textContent).to.include('Booking reconciliation');
401
399
  });
402
400
 
403
- it('should default to open when Clerk is not available', async () => {
401
+ it("should default to 'open' when the 'initial-state' attribute is not provided", async () => {
404
402
  const navbar = await fixture<TtNavbar>(
405
403
  `<tt-navbar client-key=${CLIENT_KEY}></tt-navbar>`,
406
404
  );
407
405
 
408
406
  const logo = navbar.shadowRoot!.querySelector('.logo');
409
407
 
410
- expect(window.Clerk).to.be.undefined;
411
408
  expect(logo).to.exist;
412
409
  expect(logo!.checkVisibility()).to.be.true;
413
410
  });
414
411
 
415
- it('should default to state stored in Clerk when set', async () => {
416
- const mockUser = {
417
- unsafeMetadata: { preferences: { ui: { navigationOpen: false } } },
418
- };
412
+ it("should default to 'open' when the 'initial-state' attribute is 'open", async () => {
413
+ const navbar = await fixture<TtNavbar>(
414
+ `<tt-navbar client-key=${CLIENT_KEY} initial-state=${Config.NavbarStateCookieOpenValue}></tt-navbar>`,
415
+ );
419
416
 
420
- const mockAddListener = (func: (resources: Resources) => void) => {
421
- func({ user: mockUser } as unknown as Resources);
422
- };
417
+ const logo = navbar.shadowRoot!.querySelector('.logo');
423
418
 
424
- window.Clerk = {
425
- addListener: mockAddListener,
426
- user: mockUser,
427
- } as Clerk;
419
+ expect(logo).to.exist;
420
+ expect(logo!.checkVisibility()).to.be.true;
421
+ });
428
422
 
423
+ it("should default to 'closed' when the 'initial-state' attribute is 'closed", async () => {
429
424
  const navbar = await fixture<TtNavbar>(
430
- `<tt-navbar client-key=${CLIENT_KEY}></tt-navbar>`,
425
+ `<tt-navbar client-key=${CLIENT_KEY} initial-state=${Config.NavbarStateCookieClosedValue}></tt-navbar>`,
431
426
  );
432
427
 
433
428
  const logo = navbar.shadowRoot!.querySelector('.logo');
434
429
 
435
430
  expect(logo).to.exist;
436
431
  expect(logo!.checkVisibility()).to.be.false;
437
-
438
- window.Clerk = undefined; // Cleanup
439
432
  });
440
433
 
441
- it('should update Clerk state when toggling if Clerk is available', async () => {
442
- let timesCalled = 0;
443
- let calledWith: unknown;
434
+ it('should create cookie containing navbar state onToggle if it is missing', async () => {
435
+ document.cookie = `${Config.NavbarStateCookieName}=; max-age=0; path=/;`;
436
+ const startingCookieValue = getInitialNavbarState();
444
437
 
445
- const mockUpdate = (args: unknown) => {
446
- timesCalled += 1;
447
- calledWith = args;
448
- };
438
+ expect(startingCookieValue).to.be.undefined;
449
439
 
450
- const mockUser = {
451
- update: mockUpdate,
452
- unsafeMetadata: {
453
- foo: 'foo',
454
- preferences: {
455
- bar: 'bar',
456
- ui: { duck: 'duck', navigationOpen: false },
457
- },
458
- },
459
- };
440
+ const navbar = await fixture<TtNavbar>(
441
+ `<tt-navbar client-key=${CLIENT_KEY}></tt-navbar>`,
442
+ );
443
+ const navbarToggleBtn = navbar.shadowRoot!.querySelector(
444
+ '#navbar-toggle-btn',
445
+ ) as HTMLButtonElement;
460
446
 
461
- const mockAddListener = (func: (resources: Resources) => void) => {
462
- func({ user: mockUser } as unknown as Resources);
463
- };
447
+ navbarToggleBtn.click();
448
+ await elementUpdated(navbar);
464
449
 
465
- window.Clerk = {
466
- addListener: mockAddListener,
467
- user: mockUser,
468
- } as unknown as Clerk;
450
+ const newState = getInitialNavbarState();
451
+
452
+ await expect(newState).to.equal(Config.NavbarStateCookieClosedValue);
453
+ });
469
454
 
455
+ it('should update the cookie value when navbar is expanded', async () => {
470
456
  const navbar = await fixture<TtNavbar>(
471
- `<tt-navbar client-key=${CLIENT_KEY}></tt-navbar>`,
457
+ `<tt-navbar client-key=${CLIENT_KEY} initial-state=${Config.NavbarStateCookieClosedValue}></tt-navbar>`,
472
458
  );
459
+ const navbarToggleBtn = navbar.shadowRoot!.querySelector(
460
+ '#navbar-toggle-btn',
461
+ ) as HTMLButtonElement;
473
462
 
463
+ navbarToggleBtn.click();
464
+ await elementUpdated(navbar);
465
+
466
+ const newState = getInitialNavbarState();
467
+
468
+ await expect(newState).to.equal(Config.NavbarStateCookieOpenValue);
469
+ });
470
+
471
+ it('should update the cookie value when navbar is collapsed', async () => {
472
+ const navbar = await fixture<TtNavbar>(
473
+ `<tt-navbar client-key=${CLIENT_KEY} initial-state=${Config.NavbarStateCookieOpenValue}></tt-navbar>`,
474
+ );
474
475
  const navbarToggleBtn = navbar.shadowRoot!.querySelector(
475
476
  '#navbar-toggle-btn',
476
477
  ) as HTMLButtonElement;
@@ -478,20 +479,8 @@ describe('TtNavbar', () => {
478
479
  navbarToggleBtn.click();
479
480
  await elementUpdated(navbar);
480
481
 
481
- await expect(timesCalled).to.equal(1);
482
- expect(calledWith).to.deep.equal({
483
- unsafeMetadata: {
484
- foo: 'foo',
485
- preferences: {
486
- bar: 'bar',
487
- ui: {
488
- duck: 'duck',
489
- navigationOpen: true,
490
- },
491
- },
492
- },
493
- });
482
+ const newState = getInitialNavbarState();
494
483
 
495
- window.Clerk = undefined; // Cleanup
484
+ await expect(newState).to.equal(Config.NavbarStateCookieClosedValue);
496
485
  });
497
486
  });
@@ -1,12 +0,0 @@
1
- import { ReactiveController, ReactiveControllerHost } from 'lit';
2
- export declare class NavbarController implements ReactiveController {
3
- host: ReactiveControllerHost;
4
- private _isOpen;
5
- private _hasInitialized;
6
- private _removeClerkListener?;
7
- constructor(host: ReactiveControllerHost);
8
- get isOpen(): boolean;
9
- hostUpdate(): void;
10
- hostDisconnected(): void;
11
- toggle(): Promise<void>;
12
- }
@@ -1,49 +0,0 @@
1
- export class NavbarController {
2
- constructor(host) {
3
- this._isOpen = true;
4
- this._hasInitialized = false;
5
- (this.host = host).addController(this);
6
- }
7
- get isOpen() {
8
- return this._isOpen;
9
- }
10
- hostUpdate() {
11
- if (!this._hasInitialized && window.Clerk) {
12
- this._removeClerkListener = window.Clerk.addListener(resources => {
13
- const { user } = resources;
14
- if (user && !this._hasInitialized) {
15
- const navigationOpen = user.unsafeMetadata?.preferences?.ui?.navigationOpen;
16
- if (navigationOpen !== undefined) {
17
- this._isOpen = navigationOpen;
18
- this.host.requestUpdate();
19
- }
20
- this._hasInitialized = true;
21
- }
22
- });
23
- }
24
- }
25
- hostDisconnected() {
26
- if (this._removeClerkListener) {
27
- this._removeClerkListener();
28
- }
29
- }
30
- async toggle() {
31
- this._isOpen = !this._isOpen;
32
- if (window.Clerk) {
33
- window.Clerk.user?.update({
34
- unsafeMetadata: {
35
- ...window.Clerk.user?.unsafeMetadata,
36
- preferences: {
37
- ...window.Clerk.user?.unsafeMetadata?.preferences,
38
- ui: {
39
- ...window.Clerk.user?.unsafeMetadata?.preferences?.ui,
40
- navigationOpen: this.isOpen,
41
- },
42
- },
43
- },
44
- });
45
- }
46
- this.host.requestUpdate();
47
- }
48
- }
49
- //# sourceMappingURL=NavbarController.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NavbarController.js","sourceRoot":"","sources":["../../src/NavbarController.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,gBAAgB;IAS3B,YAAY,IAA4B;QANhC,YAAO,GAAG,IAAI,CAAC;QAEf,oBAAe,GAAG,KAAK,CAAC;QAK9B,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;gBAC/D,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;gBAC3B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;oBAClC,MAAM,cAAc,GAClB,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,EAAE,EAAE,cAAc,CAAC;oBAEvD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;wBACjC,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC;wBAC9B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC5B,CAAC;oBAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC9B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAE7B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;gBACxB,cAAc,EAAE;oBACd,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc;oBACpC,WAAW,EAAE;wBACX,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW;wBACjD,EAAE,EAAE;4BACF,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE;4BACrD,cAAc,EAAE,IAAI,CAAC,MAAM;yBAC5B;qBACF;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5B,CAAC;CACF","sourcesContent":["import { ReactiveController, ReactiveControllerHost } from 'lit';\nimport { UnsubscribeCallback } from '@clerk/types';\n\nexport class NavbarController implements ReactiveController {\n host: ReactiveControllerHost;\n\n private _isOpen = true;\n\n private _hasInitialized = false;\n\n private _removeClerkListener?: UnsubscribeCallback;\n\n constructor(host: ReactiveControllerHost) {\n (this.host = host).addController(this);\n }\n\n get isOpen() {\n return this._isOpen;\n }\n\n hostUpdate() {\n if (!this._hasInitialized && window.Clerk) {\n this._removeClerkListener = window.Clerk.addListener(resources => {\n const { user } = resources;\n if (user && !this._hasInitialized) {\n const navigationOpen =\n user.unsafeMetadata?.preferences?.ui?.navigationOpen;\n\n if (navigationOpen !== undefined) {\n this._isOpen = navigationOpen;\n this.host.requestUpdate();\n }\n\n this._hasInitialized = true;\n }\n });\n }\n }\n\n hostDisconnected() {\n if (this._removeClerkListener) {\n this._removeClerkListener();\n }\n }\n\n async toggle() {\n this._isOpen = !this._isOpen;\n\n if (window.Clerk) {\n window.Clerk.user?.update({\n unsafeMetadata: {\n ...window.Clerk.user?.unsafeMetadata,\n preferences: {\n ...window.Clerk.user?.unsafeMetadata?.preferences,\n ui: {\n ...window.Clerk.user?.unsafeMetadata?.preferences?.ui,\n navigationOpen: this.isOpen,\n },\n },\n },\n });\n }\n\n this.host.requestUpdate();\n }\n}\n"]}
@@ -1,57 +0,0 @@
1
- /**
2
- * @triptease/tt-navbar v0.0.45
3
- */
4
-
5
- // src/NavbarController.ts
6
- var NavbarController = class {
7
- constructor(host) {
8
- this._isOpen = true;
9
- this._hasInitialized = false;
10
- (this.host = host).addController(this);
11
- }
12
- get isOpen() {
13
- return this._isOpen;
14
- }
15
- hostUpdate() {
16
- if (!this._hasInitialized && window.Clerk) {
17
- this._removeClerkListener = window.Clerk.addListener((resources) => {
18
- const { user } = resources;
19
- if (user && !this._hasInitialized) {
20
- const navigationOpen = user.unsafeMetadata?.preferences?.ui?.navigationOpen;
21
- if (navigationOpen !== void 0) {
22
- this._isOpen = navigationOpen;
23
- this.host.requestUpdate();
24
- }
25
- this._hasInitialized = true;
26
- }
27
- });
28
- }
29
- }
30
- hostDisconnected() {
31
- if (this._removeClerkListener) {
32
- this._removeClerkListener();
33
- }
34
- }
35
- async toggle() {
36
- this._isOpen = !this._isOpen;
37
- if (window.Clerk) {
38
- window.Clerk.user?.update({
39
- unsafeMetadata: {
40
- ...window.Clerk.user?.unsafeMetadata,
41
- preferences: {
42
- ...window.Clerk.user?.unsafeMetadata?.preferences,
43
- ui: {
44
- ...window.Clerk.user?.unsafeMetadata?.preferences?.ui,
45
- navigationOpen: this.isOpen
46
- }
47
- }
48
- }
49
- });
50
- }
51
- this.host.requestUpdate();
52
- }
53
- };
54
- export {
55
- NavbarController
56
- };
57
- //# sourceMappingURL=NavbarController.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/NavbarController.ts"],
4
- "sourcesContent": ["import { ReactiveController, ReactiveControllerHost } from 'lit';\nimport { UnsubscribeCallback } from '@clerk/types';\n\nexport class NavbarController implements ReactiveController {\n host: ReactiveControllerHost;\n\n private _isOpen = true;\n\n private _hasInitialized = false;\n\n private _removeClerkListener?: UnsubscribeCallback;\n\n constructor(host: ReactiveControllerHost) {\n (this.host = host).addController(this);\n }\n\n get isOpen() {\n return this._isOpen;\n }\n\n hostUpdate() {\n if (!this._hasInitialized && window.Clerk) {\n this._removeClerkListener = window.Clerk.addListener(resources => {\n const { user } = resources;\n if (user && !this._hasInitialized) {\n const navigationOpen =\n user.unsafeMetadata?.preferences?.ui?.navigationOpen;\n\n if (navigationOpen !== undefined) {\n this._isOpen = navigationOpen;\n this.host.requestUpdate();\n }\n\n this._hasInitialized = true;\n }\n });\n }\n }\n\n hostDisconnected() {\n if (this._removeClerkListener) {\n this._removeClerkListener();\n }\n }\n\n async toggle() {\n this._isOpen = !this._isOpen;\n\n if (window.Clerk) {\n window.Clerk.user?.update({\n unsafeMetadata: {\n ...window.Clerk.user?.unsafeMetadata,\n preferences: {\n ...window.Clerk.user?.unsafeMetadata?.preferences,\n ui: {\n ...window.Clerk.user?.unsafeMetadata?.preferences?.ui,\n navigationOpen: this.isOpen,\n },\n },\n },\n });\n }\n\n this.host.requestUpdate();\n }\n}\n"],
5
- "mappings": ";;;;;AAGO,IAAM,mBAAN,MAAqD;AAAA,EAS1D,YAAY,MAA8B;AAN1C,SAAQ,UAAU;AAElB,SAAQ,kBAAkB;AAKxB,KAAC,KAAK,OAAO,MAAM,cAAc,IAAI;AAAA,EACvC;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa;AACX,QAAI,CAAC,KAAK,mBAAmB,OAAO,OAAO;AACzC,WAAK,uBAAuB,OAAO,MAAM,YAAY,eAAa;AAChE,cAAM,EAAE,KAAK,IAAI;AACjB,YAAI,QAAQ,CAAC,KAAK,iBAAiB;AACjC,gBAAM,iBACJ,KAAK,gBAAgB,aAAa,IAAI;AAExC,cAAI,mBAAmB,QAAW;AAChC,iBAAK,UAAU;AACf,iBAAK,KAAK,cAAc;AAAA,UAC1B;AAEA,eAAK,kBAAkB;AAAA,QACzB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,mBAAmB;AACjB,QAAI,KAAK,sBAAsB;AAC7B,WAAK,qBAAqB;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,MAAM,SAAS;AACb,SAAK,UAAU,CAAC,KAAK;AAErB,QAAI,OAAO,OAAO;AAChB,aAAO,MAAM,MAAM,OAAO;AAAA,QACxB,gBAAgB;AAAA,UACd,GAAG,OAAO,MAAM,MAAM;AAAA,UACtB,aAAa;AAAA,YACX,GAAG,OAAO,MAAM,MAAM,gBAAgB;AAAA,YACtC,IAAI;AAAA,cACF,GAAG,OAAO,MAAM,MAAM,gBAAgB,aAAa;AAAA,cACnD,gBAAgB,KAAK;AAAA,YACvB;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,SAAK,KAAK,cAAc;AAAA,EAC1B;AACF;",
6
- "names": []
7
- }
@@ -1,66 +0,0 @@
1
- import { ReactiveController, ReactiveControllerHost } from 'lit';
2
- import { UnsubscribeCallback } from '@clerk/types';
3
-
4
- export class NavbarController implements ReactiveController {
5
- host: ReactiveControllerHost;
6
-
7
- private _isOpen = true;
8
-
9
- private _hasInitialized = false;
10
-
11
- private _removeClerkListener?: UnsubscribeCallback;
12
-
13
- constructor(host: ReactiveControllerHost) {
14
- (this.host = host).addController(this);
15
- }
16
-
17
- get isOpen() {
18
- return this._isOpen;
19
- }
20
-
21
- hostUpdate() {
22
- if (!this._hasInitialized && window.Clerk) {
23
- this._removeClerkListener = window.Clerk.addListener(resources => {
24
- const { user } = resources;
25
- if (user && !this._hasInitialized) {
26
- const navigationOpen =
27
- user.unsafeMetadata?.preferences?.ui?.navigationOpen;
28
-
29
- if (navigationOpen !== undefined) {
30
- this._isOpen = navigationOpen;
31
- this.host.requestUpdate();
32
- }
33
-
34
- this._hasInitialized = true;
35
- }
36
- });
37
- }
38
- }
39
-
40
- hostDisconnected() {
41
- if (this._removeClerkListener) {
42
- this._removeClerkListener();
43
- }
44
- }
45
-
46
- async toggle() {
47
- this._isOpen = !this._isOpen;
48
-
49
- if (window.Clerk) {
50
- window.Clerk.user?.update({
51
- unsafeMetadata: {
52
- ...window.Clerk.user?.unsafeMetadata,
53
- preferences: {
54
- ...window.Clerk.user?.unsafeMetadata?.preferences,
55
- ui: {
56
- ...window.Clerk.user?.unsafeMetadata?.preferences?.ui,
57
- navigationOpen: this.isOpen,
58
- },
59
- },
60
- },
61
- });
62
- }
63
-
64
- this.host.requestUpdate();
65
- }
66
- }