@ibgib/web-gib 0.0.51 → 0.0.55

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 (150) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/AUTO-GENERATED-version.d.mts +1 -1
  3. package/dist/AUTO-GENERATED-version.mjs +1 -1
  4. package/dist/api/commands/chat/hello-world.mjs.map +1 -1
  5. package/dist/api/commands/command-constants.d.mts +4 -4
  6. package/dist/api/commands/command-constants.d.mts.map +1 -1
  7. package/dist/api/commands/command-service-v1.d.mts.map +1 -1
  8. package/dist/api/commands/command-service-v1.mjs.map +1 -1
  9. package/dist/api/commands/ibgib/get-ibgibs.d.mts.map +1 -1
  10. package/dist/api/commands/ibgib/get-ibgibs.mjs.map +1 -1
  11. package/dist/api/ibgib-api-bridge.d.mts +81 -0
  12. package/dist/api/ibgib-api-bridge.d.mts.map +1 -0
  13. package/dist/api/ibgib-api-bridge.mjs +259 -0
  14. package/dist/api/ibgib-api-bridge.mjs.map +1 -0
  15. package/dist/app-bootstrap/init-orchestration.d.mts +1 -1
  16. package/dist/app-bootstrap/init-orchestration.d.mts.map +1 -1
  17. package/dist/app-bootstrap/init-orchestration.mjs +17 -3
  18. package/dist/app-bootstrap/init-orchestration.mjs.map +1 -1
  19. package/dist/assets/fullscreen-dialog.html +18 -0
  20. package/dist/assumptions.respec.mjs.map +1 -1
  21. package/dist/common/settings/settings-constants.d.mts.map +1 -1
  22. package/dist/helpers.d.mts.map +1 -1
  23. package/dist/helpers.mjs.map +1 -1
  24. package/dist/helpers.web.d.mts.map +1 -1
  25. package/dist/helpers.web.mjs.map +1 -1
  26. package/dist/helpers.web.respec.mjs.map +1 -1
  27. package/dist/identity/keystone-sync-service.d.mts +37 -0
  28. package/dist/identity/keystone-sync-service.d.mts.map +1 -0
  29. package/dist/identity/keystone-sync-service.mjs +211 -0
  30. package/dist/identity/keystone-sync-service.mjs.map +1 -0
  31. package/dist/identity/sso/sso-custodian-service.d.mts.map +1 -1
  32. package/dist/identity/sso/sso-custodian-service.mjs.map +1 -1
  33. package/dist/identity/sso/sso-custodian-service.respec.mjs.map +1 -1
  34. package/dist/index.d.mts +17 -1
  35. package/dist/index.d.mts.map +1 -1
  36. package/dist/index.mjs +21 -26
  37. package/dist/index.mjs.map +1 -1
  38. package/dist/storage/storage-helpers.web.mjs.map +1 -1
  39. package/dist/ui/component/common-component-styles.css +270 -0
  40. package/dist/ui/component/ibgib-component-service.d.mts.map +1 -1
  41. package/dist/ui/component/ibgib-dynamic-component-bases.d.mts.map +1 -1
  42. package/dist/ui/component/ibgib-dynamic-component-bases.mjs.map +1 -1
  43. package/dist/ui/component/identity/add-device/add-device.css +133 -0
  44. package/dist/ui/component/identity/add-device/add-device.d.mts +49 -0
  45. package/dist/ui/component/identity/add-device/add-device.d.mts.map +1 -0
  46. package/dist/ui/component/identity/add-device/add-device.html +52 -0
  47. package/dist/ui/component/identity/add-device/add-device.mjs +321 -0
  48. package/dist/ui/component/identity/add-device/add-device.mjs.map +1 -0
  49. package/dist/ui/component/identity/identity-header/identity-header.css +317 -0
  50. package/dist/ui/component/identity/identity-header/identity-header.d.mts +85 -0
  51. package/dist/ui/component/identity/identity-header/identity-header.d.mts.map +1 -0
  52. package/dist/ui/component/identity/identity-header/identity-header.html +72 -0
  53. package/dist/ui/component/identity/identity-header/identity-header.mjs +546 -0
  54. package/dist/ui/component/identity/identity-header/identity-header.mjs.map +1 -0
  55. package/dist/ui/component/identity/identity-manager/identity-manager.css +178 -0
  56. package/dist/ui/component/identity/identity-manager/identity-manager.d.mts +76 -0
  57. package/dist/ui/component/identity/identity-manager/identity-manager.d.mts.map +1 -0
  58. package/dist/ui/component/identity/identity-manager/identity-manager.html +19 -0
  59. package/dist/ui/component/identity/identity-manager/identity-manager.mjs +591 -0
  60. package/dist/ui/component/identity/identity-manager/identity-manager.mjs.map +1 -0
  61. package/dist/ui/component/identity/index.d.mts +17 -0
  62. package/dist/ui/component/identity/index.d.mts.map +1 -0
  63. package/dist/ui/component/identity/index.mjs +34 -0
  64. package/dist/ui/component/identity/index.mjs.map +1 -0
  65. package/dist/ui/component/identity/keystone-creator/keystone-creator.css +97 -0
  66. package/dist/ui/component/identity/keystone-creator/keystone-creator.d.mts +58 -0
  67. package/dist/ui/component/identity/keystone-creator/keystone-creator.d.mts.map +1 -0
  68. package/dist/ui/component/identity/keystone-creator/keystone-creator.html +51 -0
  69. package/dist/ui/component/identity/keystone-creator/keystone-creator.mjs +410 -0
  70. package/dist/ui/component/identity/keystone-creator/keystone-creator.mjs.map +1 -0
  71. package/dist/ui/component/identity/keystone-details/keystone-details.css +621 -0
  72. package/dist/ui/component/identity/keystone-details/keystone-details.d.mts +98 -0
  73. package/dist/ui/component/identity/keystone-details/keystone-details.d.mts.map +1 -0
  74. package/dist/ui/component/identity/keystone-details/keystone-details.html +154 -0
  75. package/dist/ui/component/identity/keystone-details/keystone-details.mjs +1377 -0
  76. package/dist/ui/component/identity/keystone-details/keystone-details.mjs.map +1 -0
  77. package/dist/ui/component/identity/keystone-scrubber/keystone-scrubber.css +46 -0
  78. package/dist/ui/component/identity/keystone-scrubber/keystone-scrubber.d.mts +64 -0
  79. package/dist/ui/component/identity/keystone-scrubber/keystone-scrubber.d.mts.map +1 -0
  80. package/dist/ui/component/identity/keystone-scrubber/keystone-scrubber.html +15 -0
  81. package/dist/ui/component/identity/keystone-scrubber/keystone-scrubber.mjs +300 -0
  82. package/dist/ui/component/identity/keystone-scrubber/keystone-scrubber.mjs.map +1 -0
  83. package/dist/ui/component/identity/remove-device/remove-device.css +118 -0
  84. package/dist/ui/component/identity/remove-device/remove-device.d.mts +50 -0
  85. package/dist/ui/component/identity/remove-device/remove-device.d.mts.map +1 -0
  86. package/dist/ui/component/identity/remove-device/remove-device.html +31 -0
  87. package/dist/ui/component/identity/remove-device/remove-device.mjs +188 -0
  88. package/dist/ui/component/identity/remove-device/remove-device.mjs.map +1 -0
  89. package/dist/ui/ui-constants.d.mts +1 -0
  90. package/dist/ui/ui-constants.d.mts.map +1 -1
  91. package/dist/ui/ui-constants.mjs +1 -0
  92. package/dist/ui/ui-constants.mjs.map +1 -1
  93. package/dist/ui/ui-types.d.mts +7 -0
  94. package/dist/ui/ui-types.d.mts.map +1 -1
  95. package/dist/witness/agent/agent-constants.d.mts.map +1 -1
  96. package/dist/witness/agent/agent-helpers.mjs.map +1 -1
  97. package/dist/witness/agent/agent-one-file.d.mts.map +1 -1
  98. package/dist/witness/agent/agent-one-file.mjs.map +1 -1
  99. package/dist/witness/agent/agents-service-v1.d.mts.map +1 -1
  100. package/dist/witness/agent/agents-service-v1.mjs.map +1 -1
  101. package/dist/witness/agent/gemini/agent-witness-gemini-v1.d.mts.map +1 -1
  102. package/dist/witness/agent/gemini/gemini-agent-factory.d.mts.map +1 -1
  103. package/dist/witness/live-proxy-ibgib/live-proxy-ibgib-one-file.d.mts.map +1 -1
  104. package/dist/witness/live-proxy-ibgib/live-proxy-ibgib-one-file.mjs.map +1 -1
  105. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace-helper.mjs.map +1 -1
  106. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace.d.mts +4 -0
  107. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace.d.mts.map +1 -1
  108. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace.mjs +40 -1
  109. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace.mjs.map +1 -1
  110. package/dist/witness/space/web-filesystem-space/web-filesystem-space-types.d.mts.map +1 -1
  111. package/dist/witness/space/web-filesystem-space/web-filesystem-space-v1.d.mts.map +1 -1
  112. package/package.json +2 -2
  113. package/src/AUTO-GENERATED-version.mts +1 -1
  114. package/src/api/ibgib-api-bridge.mts +292 -0
  115. package/src/app-bootstrap/init-orchestration.mts +17 -6
  116. package/src/custom.d.ts +11 -0
  117. package/src/identity/keystone-sync-service.mts +257 -0
  118. package/src/index.mts +24 -25
  119. package/src/ui/component/README.md +82 -5
  120. package/src/ui/component/common-component-styles.css +270 -0
  121. package/src/ui/component/identity/add-device/add-device.css +133 -0
  122. package/src/ui/component/identity/add-device/add-device.html +52 -0
  123. package/src/ui/component/identity/add-device/add-device.mts +397 -0
  124. package/src/ui/component/identity/identity-header/IMPLEMENTATION.md +45 -0
  125. package/src/ui/component/identity/identity-header/identity-header.css +317 -0
  126. package/src/ui/component/identity/identity-header/identity-header.html +72 -0
  127. package/src/ui/component/identity/identity-header/identity-header.mts +651 -0
  128. package/src/ui/component/identity/identity-manager/IMPLEMENTATION.md +100 -0
  129. package/src/ui/component/identity/identity-manager/identity-manager.css +178 -0
  130. package/src/ui/component/identity/identity-manager/identity-manager.html +19 -0
  131. package/src/ui/component/identity/identity-manager/identity-manager.mts +675 -0
  132. package/src/ui/component/identity/index.mts +36 -0
  133. package/src/ui/component/identity/keystone-creator/keystone-creator.css +97 -0
  134. package/src/ui/component/identity/keystone-creator/keystone-creator.html +51 -0
  135. package/src/ui/component/identity/keystone-creator/keystone-creator.mts +497 -0
  136. package/src/ui/component/identity/keystone-details/keystone-details.css +621 -0
  137. package/src/ui/component/identity/keystone-details/keystone-details.html +154 -0
  138. package/src/ui/component/identity/keystone-details/keystone-details.mts +1506 -0
  139. package/src/ui/component/identity/keystone-scrubber/SCRUBBER_IMPLEMENTATION.md +33 -0
  140. package/src/ui/component/identity/keystone-scrubber/keystone-scrubber.css +46 -0
  141. package/src/ui/component/identity/keystone-scrubber/keystone-scrubber.html +15 -0
  142. package/src/ui/component/identity/keystone-scrubber/keystone-scrubber.mts +355 -0
  143. package/src/ui/component/identity/remove-device/remove-device.css +118 -0
  144. package/src/ui/component/identity/remove-device/remove-device.html +31 -0
  145. package/src/ui/component/identity/remove-device/remove-device.mts +247 -0
  146. package/src/ui/ui-constants.mts +1 -0
  147. package/src/ui/ui-types.mts +8 -0
  148. package/src/witness/space/metaspace/metaspace-webspace/metaspace-webspace.mts +42 -1
  149. package/tools/auto-generated-agent-skills/skills/ibgib-dependency-graph/SKILL.md +209 -0
  150. package/tools/auto-generated-agent-skills/skills/ibgib-implementation-plan/SKILL.md +102 -0
@@ -0,0 +1,85 @@
1
+ import { IbGibAddr } from "@ibgib/ts-gib/dist/types.mjs";
2
+ import { IbGib_V1 } from "@ibgib/ts-gib/dist/V1/types.mjs";
3
+ import { IbGibDynamicComponentMetaBase, IbGibDynamicComponentInstanceBase } from "../../ibgib-dynamic-component-bases.mjs";
4
+ import { ElementsBase, IbGibDynamicComponentInstance, IbGibDynamicComponentInstanceInitOpts } from "../../component-types.mjs";
5
+ export declare const IDENTITY_HEADER_COMPONENT_NAME = "ibgib-identity-header";
6
+ /**
7
+ * Metadata for the Identity Header component.
8
+ */
9
+ export declare class IdentityHeaderComponentMeta extends IbGibDynamicComponentMetaBase {
10
+ protected lc: string;
11
+ routeRegExp?: RegExp;
12
+ componentName: string;
13
+ constructor();
14
+ createInstance({ path, ibGibAddr }: {
15
+ path: string;
16
+ ibGibAddr: IbGibAddr;
17
+ }): Promise<IbGibDynamicComponentInstance>;
18
+ }
19
+ /**
20
+ * References to DOM elements within the component's shadow root.
21
+ */
22
+ interface IdentityHeaderElements extends ElementsBase {
23
+ containerEl: HTMLDivElement;
24
+ btnIdentityPillEl: HTMLButtonElement;
25
+ pillAuthContentEl: HTMLDivElement;
26
+ pillUnauthContentEl: HTMLDivElement;
27
+ identityAvatarEl: HTMLDivElement;
28
+ identityUsernameEl: HTMLSpanElement;
29
+ updateBadgeEl: HTMLSpanElement;
30
+ dropdownMenuEl: HTMLDivElement;
31
+ sectionUpdateEl: HTMLDivElement;
32
+ btnMenuUpdateIdentityEl: HTMLButtonElement;
33
+ updateNTextEl: HTMLSpanElement;
34
+ sectionIdentitiesEl: HTMLDivElement;
35
+ identitiesListEl: HTMLDivElement;
36
+ sectionActionsEl: HTMLDivElement;
37
+ btnMenuCreateAccountEl: HTMLButtonElement;
38
+ btnMenuSignInEl: HTMLButtonElement;
39
+ btnMenuGoogleSsoEl: HTMLButtonElement;
40
+ btnMenuGithubSsoEl: HTMLButtonElement;
41
+ sectionSettingsEl: HTMLDivElement;
42
+ btnMenuManageEl: HTMLButtonElement;
43
+ syncProgressModalEl: HTMLDivElement;
44
+ syncModalSpinnerEl: HTMLDivElement;
45
+ syncModalTitleEl: HTMLHeadingElement;
46
+ syncModalMsgEl: HTMLParagraphElement;
47
+ syncModalStatusEl: HTMLDivElement;
48
+ syncModalNTextEl: HTMLSpanElement;
49
+ btnSyncModalCloseEl: HTMLButtonElement;
50
+ }
51
+ /**
52
+ * Concrete implementation of the Identity Header component.
53
+ */
54
+ export declare class IdentityHeaderComponentInstance extends IbGibDynamicComponentInstanceBase<IbGib_V1, IdentityHeaderElements> implements IbGibDynamicComponentInstance<IbGib_V1, IdentityHeaderElements> {
55
+ protected lc: string;
56
+ private activeAddr;
57
+ private _onRequestIdentityChange;
58
+ private _onIdentityUpdateAvailable;
59
+ private _onIdentityChanged;
60
+ private _onDocumentClick;
61
+ private pendingUpdateDetail;
62
+ private keystoneCache;
63
+ private isDropdownLocked;
64
+ private dropdownHideTimer;
65
+ constructor();
66
+ private getKeystoneDetails;
67
+ initialize(opts: IbGibDynamicComponentInstanceInitOpts): Promise<void>;
68
+ created(): Promise<void>;
69
+ private loadKeystonesIndex;
70
+ disconnected(): Promise<void>;
71
+ private closeDropdown;
72
+ private initHandlers;
73
+ private navigateToManager;
74
+ /**
75
+ * Resolves the active identity from settings and verifies it exists in the keystones index.
76
+ */
77
+ private resolveActiveIdentity;
78
+ protected renderUI(): Promise<void>;
79
+ private handleIdentityUpdateAvailable;
80
+ private handleIdentityChanged;
81
+ private handleRequestIdentityChange;
82
+ handleContextUpdated(): Promise<void>;
83
+ }
84
+ export {};
85
+ //# sourceMappingURL=identity-header.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-header.d.mts","sourceRoot":"","sources":["../../../../../src/ui/component/identity/identity-header/identity-header.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ <div id="container" class="header-widget-container">
2
+ <!-- Single top control button -->
3
+ <button id="btn-identity-pill" class="identity-pill-btn" title="Identity Menu">
4
+ <!-- Authenticated State Content -->
5
+ <div id="pill-auth-content" class="pill-content hidden">
6
+ <div id="identity-avatar" class="avatar-circle">-</div>
7
+ <span id="identity-username" class="username-text"></span>
8
+ <span id="update-badge" class="update-badge hidden" title="Identity update available">🟡</span>
9
+ <span class="caret">▾</span>
10
+ </div>
11
+ <!-- Unauthenticated State Content -->
12
+ <div id="pill-unauth-content" class="pill-content hidden">
13
+ <span class="unauth-text">Not Signed In</span>
14
+ <span class="caret">▾</span>
15
+ </div>
16
+ </button>
17
+
18
+ <!-- Unified Dropdown Menu Popup -->
19
+ <div id="dropdown-menu" class="dropdown-menu hidden">
20
+ <!-- Section 1 (Update) -->
21
+ <div id="section-update" class="dropdown-section hidden">
22
+ <button id="btn-menu-update-identity" class="dropdown-item update-item">
23
+ <span class="icon">🔄</span> Update Identity (<span id="update-n-text">n: 0 ➔ 0</span>)
24
+ </button>
25
+ <hr class="dropdown-divider" />
26
+ </div>
27
+
28
+ <!-- Section 2 (Local Identities) -->
29
+ <div id="section-identities" class="dropdown-section">
30
+ <div class="dropdown-header-label">SWITCH IDENTITY</div>
31
+ <div id="identities-list" class="identities-list"></div>
32
+ <hr class="dropdown-divider" />
33
+ </div>
34
+
35
+ <!-- Section 3 (Creation & Sign Ins) -->
36
+ <div id="section-actions" class="dropdown-section">
37
+ <button id="btn-menu-create-account" class="dropdown-item">
38
+ <span class="icon">✨</span> Create Account
39
+ </button>
40
+ <button id="btn-menu-sign-in" class="dropdown-item">
41
+ <span class="icon">🔑</span> Sign In
42
+ </button>
43
+ <button id="btn-menu-google-sso" class="dropdown-item disabled" title="Sign in with Google">
44
+ <span class="icon">🌐</span> Sign in with Google
45
+ </button>
46
+ <button id="btn-menu-github-sso" class="dropdown-item disabled" title="Sign in with GitHub">
47
+ <span class="icon">💻</span> Sign in with GitHub
48
+ </button>
49
+ <hr class="dropdown-divider" />
50
+ </div>
51
+
52
+ <!-- Section 4 (Settings) -->
53
+ <div id="section-settings" class="dropdown-section">
54
+ <button id="btn-menu-manage" class="dropdown-item">
55
+ <span class="icon">⚙️</span> Identity Manager
56
+ </button>
57
+ </div>
58
+ </div>
59
+
60
+ <!-- Modal Sync Progress Overlay -->
61
+ <div id="sync-progress-modal" class="modal-overlay hidden">
62
+ <div class="modal-card">
63
+ <div id="sync-modal-spinner" class="modal-spinner">🔄</div>
64
+ <h3 id="sync-modal-title" class="modal-title">Updating Identity Keystone...</h3>
65
+ <p id="sync-modal-msg" class="modal-msg">Fetching delta graph from server and fast-forwarding local space...</p>
66
+ <div id="sync-modal-status" class="modal-status">
67
+ <span id="sync-modal-n-text">n: 0 ➔ 0</span>
68
+ </div>
69
+ <button id="btn-sync-modal-close" class="modal-close-btn hidden">Done</button>
70
+ </div>
71
+ </div>
72
+ </div>