hubg-app-shell 0.1.0 → 0.1.2
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/components/AppShell.d.ts +21 -0
- package/dist/components/AppShell.d.ts.map +1 -0
- package/dist/components/Header.d.ts +13 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/ModuleHost.d.ts +13 -0
- package/dist/components/ModuleHost.d.ts.map +1 -0
- package/dist/components/ShellErrorBoundary.d.ts +26 -0
- package/dist/components/ShellErrorBoundary.d.ts.map +1 -0
- package/dist/components/SideNavigation.d.ts +15 -0
- package/dist/components/SideNavigation.d.ts.map +1 -0
- package/dist/components/ui/accordion.d.ts +10 -0
- package/dist/components/ui/accordion.d.ts.map +1 -0
- package/dist/components/ui/avatar.d.ts +7 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/button.d.ts +12 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/collapsible.d.ts +6 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +29 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/index.d.ts +10 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +6 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/separator.d.ts +5 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/tooltip.d.ts +8 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/context/ShellContext.d.ts +20 -0
- package/dist/context/ShellContext.d.ts.map +1 -0
- package/dist/events/EventBus.d.ts +16 -0
- package/dist/events/EventBus.d.ts.map +1 -0
- package/dist/index.cjs.js +515 -505
- package/dist/index.cjs.js.map +3 -3
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.es.js +582 -574
- package/dist/index.es.js.map +3 -3
- package/dist/platform/createPlatformAPI.d.ts +21 -0
- package/dist/platform/createPlatformAPI.d.ts.map +1 -0
- package/dist/registry/ModuleRegistry.d.ts +20 -0
- package/dist/registry/ModuleRegistry.d.ts.map +1 -0
- package/dist/types/context.d.ts +26 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/module.d.ts +22 -0
- package/dist/types/module.d.ts.map +1 -0
- package/dist/types/navigation.d.ts +53 -0
- package/dist/types/navigation.d.ts.map +1 -0
- package/dist/types/platform.d.ts +39 -0
- package/dist/types/platform.d.ts.map +1 -0
- package/dist/utils/cn.d.ts +7 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ModuleContext } from "../types/context.js";
|
|
2
|
+
import type { PlatformAPI } from "../types/platform.js";
|
|
3
|
+
import type { EventBus } from "../events/EventBus.js";
|
|
4
|
+
export interface PlatformAPIOptions {
|
|
5
|
+
moduleId: string;
|
|
6
|
+
getContext: () => ModuleContext;
|
|
7
|
+
navigate: (path: string) => void;
|
|
8
|
+
eventBus: EventBus;
|
|
9
|
+
/**
|
|
10
|
+
* Optional fetch override (e.g. an axios-backed shim). Defaults to the
|
|
11
|
+
* global `fetch` with credentials included.
|
|
12
|
+
*/
|
|
13
|
+
fetchFn?: (url: string, init: RequestInit) => Promise<Response>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates a scoped PlatformAPI instance for a single module.
|
|
17
|
+
* The module receives this object at mount time and uses it as its sole
|
|
18
|
+
* integration surface with the shell.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createPlatformAPI(options: PlatformAPIOptions): PlatformAPI;
|
|
21
|
+
//# sourceMappingURL=createPlatformAPI.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPlatformAPI.d.ts","sourceRoot":"","sources":["../../src/platform/createPlatformAPI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAA4B,WAAW,EAAiB,MAAM,sBAAsB,CAAC;AACjG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,aAAa,CAAC;IAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CACjE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAuC1E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ApplicationModule, ModuleLoader } from "../types/module.js";
|
|
2
|
+
export interface ModuleDefinition {
|
|
3
|
+
id: string;
|
|
4
|
+
load: ModuleLoader;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Central registry that maps a module ID to its loader function.
|
|
8
|
+
* The registry is framework-agnostic — it does not know whether the module
|
|
9
|
+
* is implemented in React, Vue, Angular, or as a Web Component.
|
|
10
|
+
*/
|
|
11
|
+
export declare class ModuleRegistry {
|
|
12
|
+
private readonly registry;
|
|
13
|
+
register(definition: ModuleDefinition): this;
|
|
14
|
+
registerMany(definitions: ModuleDefinition[]): this;
|
|
15
|
+
resolve(moduleId: string): ModuleDefinition | undefined;
|
|
16
|
+
load(moduleId: string): Promise<ApplicationModule>;
|
|
17
|
+
isRegistered(moduleId: string): boolean;
|
|
18
|
+
get registeredIds(): string[];
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ModuleRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModuleRegistry.d.ts","sourceRoot":"","sources":["../../src/registry/ModuleRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE1E,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;IAEhE,QAAQ,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI;IAQ5C,YAAY,CAAC,WAAW,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAKnD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIjD,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQxD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIvC,IAAI,aAAa,IAAI,MAAM,EAAE,CAE5B;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface UserContext {
|
|
2
|
+
id: number | null;
|
|
3
|
+
name: string;
|
|
4
|
+
email: string;
|
|
5
|
+
role: string;
|
|
6
|
+
avatar: string;
|
|
7
|
+
}
|
|
8
|
+
export interface TenantContext {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
communityUrl: string;
|
|
12
|
+
controlUrl: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ThemeContext {
|
|
15
|
+
mode: "light" | "dark" | "legacy";
|
|
16
|
+
/** CSS custom property overrides applied at the shell root */
|
|
17
|
+
overrides?: Record<string, string>;
|
|
18
|
+
}
|
|
19
|
+
export interface ModuleContext {
|
|
20
|
+
user: UserContext;
|
|
21
|
+
tenant: TenantContext;
|
|
22
|
+
permissions: string[];
|
|
23
|
+
locale: string;
|
|
24
|
+
theme: ThemeContext;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/types/context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClC,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;CACrB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { UserContext, TenantContext, ThemeContext, ModuleContext } from "./context.js";
|
|
2
|
+
export type { ModuleLifecycleState, ModuleInstance, ApplicationModule, ModuleLoader, } from "./module.js";
|
|
3
|
+
export type { PlatformEvent, EventHandler, APIRequest, PlatformAPI, } from "./platform.js";
|
|
4
|
+
export type { NavItem, NavigationGroup, NavigationConfig } from "./navigation.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5F,YAAY,EACV,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,aAAa,EACb,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ModuleContext } from "./context.js";
|
|
2
|
+
import type { PlatformAPI } from "./platform.js";
|
|
3
|
+
export type ModuleLifecycleState = "loading" | "loaded" | "mounted" | "active" | "unmounted" | "failed";
|
|
4
|
+
export interface ModuleInstance {
|
|
5
|
+
/** Called by the shell when navigating away from this module. */
|
|
6
|
+
unmount(): void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The contract every module must implement, regardless of its internal
|
|
10
|
+
* framework (React, Vue, Angular, Web Component, etc.).
|
|
11
|
+
*/
|
|
12
|
+
export interface ApplicationModule {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
/**
|
|
15
|
+
* Mount the module into `container`. The module owns everything inside
|
|
16
|
+
* that element for as long as it is active.
|
|
17
|
+
*/
|
|
18
|
+
mount(container: HTMLElement, context: ModuleContext, platform: PlatformAPI): ModuleInstance;
|
|
19
|
+
}
|
|
20
|
+
/** Factory shape expected in the module registry. */
|
|
21
|
+
export type ModuleLoader = () => Promise<ApplicationModule>;
|
|
22
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/types/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,MAAM,oBAAoB,GAC5B,SAAS,GACT,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,KAAK,CACH,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,WAAW,GACpB,cAAc,CAAC;CACnB;AAED,qDAAqD;AACrD,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
/** One entry in the "Create" collapsible inside the sidebar. */
|
|
3
|
+
export interface CreateOption {
|
|
4
|
+
label: string;
|
|
5
|
+
/** Lucide-compatible icon component. */
|
|
6
|
+
icon?: React.ComponentType<{
|
|
7
|
+
className?: string;
|
|
8
|
+
}>;
|
|
9
|
+
route: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A named group of children rendered inside an expandable nav item.
|
|
13
|
+
* Used when children need section labels (e.g. "MODERATION", "CONTENT TYPES").
|
|
14
|
+
*/
|
|
15
|
+
export interface NavChildGroup {
|
|
16
|
+
id: string;
|
|
17
|
+
/** Uppercase section label shown above the group's items. */
|
|
18
|
+
label: string;
|
|
19
|
+
items: NavItem[];
|
|
20
|
+
}
|
|
21
|
+
export interface NavItem {
|
|
22
|
+
/** Unique identifier, also used to look up the module in the registry. */
|
|
23
|
+
id: string;
|
|
24
|
+
label: string;
|
|
25
|
+
/** Top-level route owned by this nav item (e.g. "/customers"). */
|
|
26
|
+
route: string;
|
|
27
|
+
/** Module ID resolved via the ModuleRegistry. */
|
|
28
|
+
moduleId: string;
|
|
29
|
+
/** Lucide-compatible icon component — receives a `className` prop. */
|
|
30
|
+
icon?: React.ComponentType<{
|
|
31
|
+
className?: string;
|
|
32
|
+
}>;
|
|
33
|
+
/** Hides the item from the nav without unregistering the module. */
|
|
34
|
+
enabled: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* All listed permissions must be present in the module context for this
|
|
37
|
+
* item to be visible. Frontend-only gate — backend APIs are authoritative.
|
|
38
|
+
*/
|
|
39
|
+
permissions?: string[];
|
|
40
|
+
/** Flat second-level items (no group labels). */
|
|
41
|
+
children?: NavItem[];
|
|
42
|
+
/** Grouped second-level items with section labels (takes precedence over children). */
|
|
43
|
+
childGroups?: NavChildGroup[];
|
|
44
|
+
}
|
|
45
|
+
export interface NavigationGroup {
|
|
46
|
+
id: string;
|
|
47
|
+
label?: string;
|
|
48
|
+
items: NavItem[];
|
|
49
|
+
}
|
|
50
|
+
export interface NavigationConfig {
|
|
51
|
+
groups: NavigationGroup[];
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/types/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,0EAA0E;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,oEAAoE;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,uFAAuF;IACvF,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ModuleContext, ThemeContext } from "./context.js";
|
|
2
|
+
export interface PlatformEvent {
|
|
3
|
+
type: string;
|
|
4
|
+
payload?: unknown;
|
|
5
|
+
}
|
|
6
|
+
export type EventHandler = (event: PlatformEvent) => void;
|
|
7
|
+
export interface APIRequest {
|
|
8
|
+
method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
|
|
9
|
+
url: string;
|
|
10
|
+
data?: unknown;
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The primary integration surface between the shell and a module.
|
|
15
|
+
* Modules interact with shell capabilities exclusively through this API —
|
|
16
|
+
* they must not access shell internals, React Context, or routing directly.
|
|
17
|
+
*/
|
|
18
|
+
export interface PlatformAPI {
|
|
19
|
+
/** Returns a snapshot of the current module context. */
|
|
20
|
+
getContext(): ModuleContext;
|
|
21
|
+
/** Returns the active theme. */
|
|
22
|
+
getTheme(): ThemeContext;
|
|
23
|
+
/**
|
|
24
|
+
* Request application-level navigation. The shell resolves the route and
|
|
25
|
+
* loads the appropriate module; the calling module need not know what
|
|
26
|
+
* handles the route.
|
|
27
|
+
*/
|
|
28
|
+
navigate(path: string): void;
|
|
29
|
+
/** Publish a typed event to the shell event bus. */
|
|
30
|
+
publish(event: PlatformEvent): void;
|
|
31
|
+
/**
|
|
32
|
+
* Subscribe to events from the shell or other modules.
|
|
33
|
+
* Returns an unsubscribe function.
|
|
34
|
+
*/
|
|
35
|
+
subscribe(eventType: string, handler: EventHandler): () => void;
|
|
36
|
+
/** Proxy an API call through the shell (auth headers are injected by the shell). */
|
|
37
|
+
apiRequest(request: APIRequest): Promise<Response>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/types/platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAE1D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,UAAU,IAAI,aAAa,CAAC;IAE5B,gCAAgC;IAChC,QAAQ,IAAI,YAAY,CAAC;IAEzB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B,oDAAoD;IACpD,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAEpC;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI,CAAC;IAEhE,oFAAoF;IACpF,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACpD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ClassValue } from "clsx";
|
|
2
|
+
/**
|
|
3
|
+
* Merges Tailwind classes safely — later classes override earlier ones,
|
|
4
|
+
* and conflicting utilities (e.g. p-2 + p-4) are correctly resolved.
|
|
5
|
+
*/
|
|
6
|
+
export declare function cn(...inputs: ClassValue[]): string;
|
|
7
|
+
//# sourceMappingURL=cn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../src/utils/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C;;;GAGG;AACH,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAElD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hubg-app-shell",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Application Shell — layout, module registry, platform API, and framework-agnostic module contract for the Gainsight Community Hub.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": ["dist/styles.css"],
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"vitest": "^4.1.0"
|
|
51
51
|
},
|
|
52
52
|
"files": ["dist"],
|
|
53
|
+
"types": "./dist/index.d.ts",
|
|
53
54
|
"publishConfig": {
|
|
54
55
|
"access": "public",
|
|
55
56
|
"registry": "https://registry.npmjs.org/"
|