@hamak/ui-shell 0.5.1

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 (143) hide show
  1. package/README.md +414 -0
  2. package/dist/api/api/IFeatureManager.d.ts +56 -0
  3. package/dist/api/api/IFeatureManager.d.ts.map +1 -0
  4. package/dist/api/api/IFeatureManager.js +5 -0
  5. package/dist/api/api/ILayoutManager.d.ts +40 -0
  6. package/dist/api/api/ILayoutManager.d.ts.map +1 -0
  7. package/dist/api/api/ILayoutManager.js +5 -0
  8. package/dist/api/api/IRouter.d.ts +40 -0
  9. package/dist/api/api/IRouter.d.ts.map +1 -0
  10. package/dist/api/api/IRouter.js +5 -0
  11. package/dist/api/api/IShell.d.ts +55 -0
  12. package/dist/api/api/IShell.d.ts.map +1 -0
  13. package/dist/api/api/IShell.js +5 -0
  14. package/dist/api/api/IThemeManager.d.ts +36 -0
  15. package/dist/api/api/IThemeManager.d.ts.map +1 -0
  16. package/dist/api/api/IThemeManager.js +5 -0
  17. package/dist/api/api/index.d.ts +10 -0
  18. package/dist/api/api/index.d.ts.map +1 -0
  19. package/dist/api/api/index.js +9 -0
  20. package/dist/api/index.d.ts +11 -0
  21. package/dist/api/index.d.ts.map +1 -0
  22. package/dist/api/index.js +13 -0
  23. package/dist/api/tokens/index.d.ts +6 -0
  24. package/dist/api/tokens/index.d.ts.map +1 -0
  25. package/dist/api/tokens/index.js +5 -0
  26. package/dist/api/tokens/service-tokens.d.ts +57 -0
  27. package/dist/api/tokens/service-tokens.d.ts.map +1 -0
  28. package/dist/api/tokens/service-tokens.js +56 -0
  29. package/dist/api/types/event-types.d.ts +14 -0
  30. package/dist/api/types/event-types.d.ts.map +1 -0
  31. package/dist/api/types/event-types.js +5 -0
  32. package/dist/api/types/feature-types.d.ts +26 -0
  33. package/dist/api/types/feature-types.d.ts.map +1 -0
  34. package/dist/api/types/feature-types.js +26 -0
  35. package/dist/api/types/index.d.ts +11 -0
  36. package/dist/api/types/index.d.ts.map +1 -0
  37. package/dist/api/types/index.js +10 -0
  38. package/dist/api/types/layout-types.d.ts +29 -0
  39. package/dist/api/types/layout-types.d.ts.map +1 -0
  40. package/dist/api/types/layout-types.js +5 -0
  41. package/dist/api/types/route-types.d.ts +22 -0
  42. package/dist/api/types/route-types.d.ts.map +1 -0
  43. package/dist/api/types/route-types.js +5 -0
  44. package/dist/api/types/shell-context.d.ts +34 -0
  45. package/dist/api/types/shell-context.d.ts.map +1 -0
  46. package/dist/api/types/shell-context.js +5 -0
  47. package/dist/api/types/theme-types.d.ts +13 -0
  48. package/dist/api/types/theme-types.d.ts.map +1 -0
  49. package/dist/api/types/theme-types.js +5 -0
  50. package/dist/impl/core/DefaultFeatureManager.d.ts +24 -0
  51. package/dist/impl/core/DefaultFeatureManager.d.ts.map +1 -0
  52. package/dist/impl/core/DefaultFeatureManager.js +90 -0
  53. package/dist/impl/core/DefaultLayoutManager.d.ts +19 -0
  54. package/dist/impl/core/DefaultLayoutManager.d.ts.map +1 -0
  55. package/dist/impl/core/DefaultLayoutManager.js +71 -0
  56. package/dist/impl/core/DefaultRouter.d.ts +30 -0
  57. package/dist/impl/core/DefaultRouter.d.ts.map +1 -0
  58. package/dist/impl/core/DefaultRouter.js +136 -0
  59. package/dist/impl/core/DefaultShell.d.ts +30 -0
  60. package/dist/impl/core/DefaultShell.d.ts.map +1 -0
  61. package/dist/impl/core/DefaultShell.js +187 -0
  62. package/dist/impl/core/DefaultThemeManager.d.ts +27 -0
  63. package/dist/impl/core/DefaultThemeManager.d.ts.map +1 -0
  64. package/dist/impl/core/DefaultThemeManager.js +101 -0
  65. package/dist/impl/core/index.d.ts +10 -0
  66. package/dist/impl/core/index.d.ts.map +1 -0
  67. package/dist/impl/core/index.js +9 -0
  68. package/dist/impl/index.d.ts +21 -0
  69. package/dist/impl/index.d.ts.map +1 -0
  70. package/dist/impl/index.js +41 -0
  71. package/dist/impl/plugin/ShellPluginFactory.d.ts +11 -0
  72. package/dist/impl/plugin/ShellPluginFactory.d.ts.map +1 -0
  73. package/dist/impl/plugin/ShellPluginFactory.js +73 -0
  74. package/dist/impl/plugin/index.d.ts +6 -0
  75. package/dist/impl/plugin/index.d.ts.map +1 -0
  76. package/dist/impl/plugin/index.js +5 -0
  77. package/dist/impl/providers/CSSVariablesThemeProvider.d.ts +16 -0
  78. package/dist/impl/providers/CSSVariablesThemeProvider.d.ts.map +1 -0
  79. package/dist/impl/providers/CSSVariablesThemeProvider.js +64 -0
  80. package/dist/impl/providers/HashRouterStrategy.d.ts +20 -0
  81. package/dist/impl/providers/HashRouterStrategy.d.ts.map +1 -0
  82. package/dist/impl/providers/HashRouterStrategy.js +67 -0
  83. package/dist/impl/providers/HistoryRouterStrategy.d.ts +21 -0
  84. package/dist/impl/providers/HistoryRouterStrategy.d.ts.map +1 -0
  85. package/dist/impl/providers/HistoryRouterStrategy.js +79 -0
  86. package/dist/impl/providers/LocalStorageProvider.d.ts +13 -0
  87. package/dist/impl/providers/LocalStorageProvider.d.ts.map +1 -0
  88. package/dist/impl/providers/LocalStorageProvider.js +50 -0
  89. package/dist/impl/providers/MemoryStorageProvider.d.ts +14 -0
  90. package/dist/impl/providers/MemoryStorageProvider.d.ts.map +1 -0
  91. package/dist/impl/providers/MemoryStorageProvider.js +29 -0
  92. package/dist/impl/providers/index.d.ts +10 -0
  93. package/dist/impl/providers/index.d.ts.map +1 -0
  94. package/dist/impl/providers/index.js +9 -0
  95. package/dist/impl/utils/index.d.ts +6 -0
  96. package/dist/impl/utils/index.d.ts.map +1 -0
  97. package/dist/impl/utils/index.js +5 -0
  98. package/dist/impl/utils/viewport-utils.d.ts +16 -0
  99. package/dist/impl/utils/viewport-utils.d.ts.map +1 -0
  100. package/dist/impl/utils/viewport-utils.js +52 -0
  101. package/dist/index.d.ts +11 -0
  102. package/dist/index.d.ts.map +1 -0
  103. package/dist/index.js +11 -0
  104. package/dist/spi/guards/NavigationGuard.d.ts +18 -0
  105. package/dist/spi/guards/NavigationGuard.d.ts.map +1 -0
  106. package/dist/spi/guards/NavigationGuard.js +5 -0
  107. package/dist/spi/guards/index.d.ts +6 -0
  108. package/dist/spi/guards/index.d.ts.map +1 -0
  109. package/dist/spi/guards/index.js +5 -0
  110. package/dist/spi/hooks/ShellHooks.d.ts +40 -0
  111. package/dist/spi/hooks/ShellHooks.d.ts.map +1 -0
  112. package/dist/spi/hooks/ShellHooks.js +5 -0
  113. package/dist/spi/hooks/index.d.ts +6 -0
  114. package/dist/spi/hooks/index.d.ts.map +1 -0
  115. package/dist/spi/hooks/index.js +5 -0
  116. package/dist/spi/index.d.ts +18 -0
  117. package/dist/spi/index.d.ts.map +1 -0
  118. package/dist/spi/index.js +22 -0
  119. package/dist/spi/providers/IRouterStrategy.d.ts +35 -0
  120. package/dist/spi/providers/IRouterStrategy.d.ts.map +1 -0
  121. package/dist/spi/providers/IRouterStrategy.js +5 -0
  122. package/dist/spi/providers/IStorageProvider.d.ts +27 -0
  123. package/dist/spi/providers/IStorageProvider.d.ts.map +1 -0
  124. package/dist/spi/providers/IStorageProvider.js +5 -0
  125. package/dist/spi/providers/ITemplateProvider.d.ts +36 -0
  126. package/dist/spi/providers/ITemplateProvider.d.ts.map +1 -0
  127. package/dist/spi/providers/ITemplateProvider.js +5 -0
  128. package/dist/spi/providers/IThemeProvider.d.ts +24 -0
  129. package/dist/spi/providers/IThemeProvider.d.ts.map +1 -0
  130. package/dist/spi/providers/IThemeProvider.js +5 -0
  131. package/dist/spi/providers/index.d.ts +9 -0
  132. package/dist/spi/providers/index.d.ts.map +1 -0
  133. package/dist/spi/providers/index.js +8 -0
  134. package/dist/spi/slots/LayoutSlotProvider.d.ts +31 -0
  135. package/dist/spi/slots/LayoutSlotProvider.d.ts.map +1 -0
  136. package/dist/spi/slots/LayoutSlotProvider.js +5 -0
  137. package/dist/spi/slots/TemplateSlot.d.ts +34 -0
  138. package/dist/spi/slots/TemplateSlot.d.ts.map +1 -0
  139. package/dist/spi/slots/TemplateSlot.js +5 -0
  140. package/dist/spi/slots/index.d.ts +7 -0
  141. package/dist/spi/slots/index.d.ts.map +1 -0
  142. package/dist/spi/slots/index.js +6 -0
  143. package/package.json +67 -0
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Viewport Utilities
3
+ */
4
+ export const BREAKPOINTS = {
5
+ xs: { name: 'xs', minWidth: 0, maxWidth: 639 },
6
+ sm: { name: 'sm', minWidth: 640, maxWidth: 767 },
7
+ md: { name: 'md', minWidth: 768, maxWidth: 1023 },
8
+ lg: { name: 'lg', minWidth: 1024, maxWidth: 1279 },
9
+ xl: { name: 'xl', minWidth: 1280, maxWidth: 1535 },
10
+ '2xl': { name: '2xl', minWidth: 1536 },
11
+ };
12
+ export class ViewportUtils {
13
+ static getCurrentBreakpoint() {
14
+ if (typeof window === 'undefined')
15
+ return 'md';
16
+ const width = window.innerWidth;
17
+ for (const [name, breakpoint] of Object.entries(BREAKPOINTS)) {
18
+ if (width >= breakpoint.minWidth && (!breakpoint.maxWidth || width <= breakpoint.maxWidth)) {
19
+ return name;
20
+ }
21
+ }
22
+ return 'md';
23
+ }
24
+ static matchesBreakpoint(breakpoint) {
25
+ if (typeof window === 'undefined')
26
+ return false;
27
+ const width = window.innerWidth;
28
+ const bp = BREAKPOINTS[breakpoint];
29
+ return width >= bp.minWidth && (!bp.maxWidth || width <= bp.maxWidth);
30
+ }
31
+ static isMinBreakpoint(breakpoint) {
32
+ if (typeof window === 'undefined')
33
+ return false;
34
+ const width = window.innerWidth;
35
+ const bp = BREAKPOINTS[breakpoint];
36
+ return width >= bp.minWidth;
37
+ }
38
+ static getDimensions() {
39
+ if (typeof window === 'undefined') {
40
+ return { width: 0, height: 0 };
41
+ }
42
+ return {
43
+ width: window.innerWidth,
44
+ height: window.innerHeight,
45
+ };
46
+ }
47
+ static isTouchDevice() {
48
+ if (typeof window === 'undefined')
49
+ return false;
50
+ return 'ontouchstart' in window || navigator.maxTouchPoints > 0;
51
+ }
52
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @hamak/ui-shell
3
+ * UI Shell Framework - Application shell with theming, routing, and layout management
4
+ *
5
+ * Import paths:
6
+ * - @hamak/ui-shell - Full implementation (includes API and SPI)
7
+ * - @hamak/ui-shell/api - API types and interfaces only
8
+ * - @hamak/ui-shell/spi - Service Provider Interfaces for extensions
9
+ */
10
+ export * from './impl';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,QAAQ,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @hamak/ui-shell
3
+ * UI Shell Framework - Application shell with theming, routing, and layout management
4
+ *
5
+ * Import paths:
6
+ * - @hamak/ui-shell - Full implementation (includes API and SPI)
7
+ * - @hamak/ui-shell/api - API types and interfaces only
8
+ * - @hamak/ui-shell/spi - Service Provider Interfaces for extensions
9
+ */
10
+ // Export everything from implementation
11
+ export * from './impl';
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Navigation Guard
3
+ * Interface for route navigation guards
4
+ */
5
+ import type { RouteConfig } from '../../api';
6
+ export type NavigationGuard = (to: RouteConfig, from: RouteConfig | null) => boolean | Promise<boolean>;
7
+ export interface NavigationGuardContext {
8
+ /** Route being navigated to */
9
+ to: RouteConfig;
10
+ /** Route being navigated from */
11
+ from: RouteConfig | null;
12
+ /** Abort navigation */
13
+ abort: () => void;
14
+ /** Redirect to another route */
15
+ redirect: (path: string) => void;
16
+ }
17
+ export type AdvancedNavigationGuard = (context: NavigationGuardContext) => void | Promise<void>;
18
+ //# sourceMappingURL=NavigationGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavigationGuard.d.ts","sourceRoot":"","sources":["../../../src/spi/guards/NavigationGuard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,MAAM,eAAe,GAAG,CAC5B,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,WAAW,GAAG,IAAI,KACrB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,EAAE,EAAE,WAAW,CAAC;IAChB,iCAAiC;IACjC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,uBAAuB;IACvB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,gCAAgC;IAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,MAAM,uBAAuB,GAAG,CACpC,OAAO,EAAE,sBAAsB,KAC5B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Navigation Guard
3
+ * Interface for route navigation guards
4
+ */
5
+ export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Guards
3
+ * Export all guard interfaces
4
+ */
5
+ export * from './NavigationGuard';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spi/guards/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Guards
3
+ * Export all guard interfaces
4
+ */
5
+ export * from './NavigationGuard';
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Shell Hooks
3
+ * Lifecycle hooks for shell customization
4
+ */
5
+ import type { ShellConfig, ShellContext } from '../../api';
6
+ export interface ShellLifecycleHooks {
7
+ /**
8
+ * Called before shell initialization
9
+ */
10
+ beforeInit?(config: ShellConfig): void | Promise<void>;
11
+ /**
12
+ * Called after shell initialization
13
+ */
14
+ afterInit?(context: ShellContext): void | Promise<void>;
15
+ /**
16
+ * Called before theme change
17
+ */
18
+ beforeThemeChange?(oldTheme: string, newTheme: string): boolean | Promise<boolean>;
19
+ /**
20
+ * Called after theme change
21
+ */
22
+ afterThemeChange?(theme: string): void | Promise<void>;
23
+ /**
24
+ * Called before feature toggle
25
+ */
26
+ beforeFeatureToggle?(key: string, oldValue: any, newValue: any): boolean | Promise<boolean>;
27
+ /**
28
+ * Called after feature toggle
29
+ */
30
+ afterFeatureToggle?(key: string, value: any): void | Promise<void>;
31
+ /**
32
+ * Called before shell destroy
33
+ */
34
+ beforeDestroy?(): void | Promise<void>;
35
+ /**
36
+ * Called after shell destroy
37
+ */
38
+ afterDestroy?(): void | Promise<void>;
39
+ }
40
+ //# sourceMappingURL=ShellHooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShellHooks.d.ts","sourceRoot":"","sources":["../../../src/spi/hooks/ShellHooks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE3D,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,UAAU,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;OAEG;IACH,SAAS,CAAC,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD;;OAEG;IACH,iBAAiB,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnF;;OAEG;IACH,gBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;OAEG;IACH,mBAAmB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5F;;OAEG;IACH,kBAAkB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE;;OAEG;IACH,aAAa,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC;;OAEG;IACH,YAAY,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shell Hooks
3
+ * Lifecycle hooks for shell customization
4
+ */
5
+ export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Hooks
3
+ * Export all hook interfaces
4
+ */
5
+ export * from './ShellHooks';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spi/hooks/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Hooks
3
+ * Export all hook interfaces
4
+ */
5
+ export * from './ShellHooks';
@@ -0,0 +1,18 @@
1
+ /**
2
+ * UI Shell SPI (Service Provider Interface)
3
+ * Extension points and provider interfaces for UI Shell customization
4
+ *
5
+ * Implement these interfaces to customize shell behavior:
6
+ * - Storage providers (localStorage, cookies, etc.)
7
+ * - Theme providers (CSS vars, styled-components, etc.)
8
+ * - Router strategies (history, hash, memory)
9
+ * - Layout templates
10
+ * - Navigation guards
11
+ * - Lifecycle hooks
12
+ */
13
+ export * from '../api';
14
+ export * from './providers';
15
+ export * from './guards';
16
+ export * from './hooks';
17
+ export * from './slots';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spi/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,cAAc,QAAQ,CAAC;AAGvB,cAAc,aAAa,CAAC;AAG5B,cAAc,UAAU,CAAC;AAGzB,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * UI Shell SPI (Service Provider Interface)
3
+ * Extension points and provider interfaces for UI Shell customization
4
+ *
5
+ * Implement these interfaces to customize shell behavior:
6
+ * - Storage providers (localStorage, cookies, etc.)
7
+ * - Theme providers (CSS vars, styled-components, etc.)
8
+ * - Router strategies (history, hash, memory)
9
+ * - Layout templates
10
+ * - Navigation guards
11
+ * - Lifecycle hooks
12
+ */
13
+ // Re-export API types that SPI depends on
14
+ export * from '../api';
15
+ // Export all providers
16
+ export * from './providers';
17
+ // Export all guards
18
+ export * from './guards';
19
+ // Export all hooks
20
+ export * from './hooks';
21
+ // Export all slots
22
+ export * from './slots';
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Router Strategy Interface
3
+ * Abstraction for routing strategies (history, hash, memory)
4
+ */
5
+ export interface IRouterStrategy {
6
+ /**
7
+ * Push a new entry to the history stack
8
+ */
9
+ push(path: string): void;
10
+ /**
11
+ * Replace the current entry in the history stack
12
+ */
13
+ replace(path: string): void;
14
+ /**
15
+ * Go back in history
16
+ */
17
+ back(): void;
18
+ /**
19
+ * Go forward in history
20
+ */
21
+ forward(): void;
22
+ /**
23
+ * Get the current path
24
+ */
25
+ getCurrentPath(): string;
26
+ /**
27
+ * Listen for navigation changes
28
+ */
29
+ listen(callback: (path: string) => void): () => void;
30
+ /**
31
+ * Clean up resources
32
+ */
33
+ destroy(): void;
34
+ }
35
+ //# sourceMappingURL=IRouterStrategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IRouterStrategy.d.ts","sourceRoot":"","sources":["../../../src/spi/providers/IRouterStrategy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;IAEhB;;OAEG;IACH,cAAc,IAAI,MAAM,CAAC;IAEzB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAErD;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Router Strategy Interface
3
+ * Abstraction for routing strategies (history, hash, memory)
4
+ */
5
+ export {};
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Storage Provider Interface
3
+ * Abstraction for storage mechanisms (localStorage, sessionStorage, cookies, etc.)
4
+ */
5
+ export interface IStorageProvider {
6
+ /**
7
+ * Get an item from storage
8
+ */
9
+ getItem(key: string): string | null;
10
+ /**
11
+ * Set an item in storage
12
+ */
13
+ setItem(key: string, value: string): void;
14
+ /**
15
+ * Remove an item from storage
16
+ */
17
+ removeItem(key: string): void;
18
+ /**
19
+ * Clear all items from storage
20
+ */
21
+ clear?(): void;
22
+ /**
23
+ * Check if storage is available
24
+ */
25
+ isAvailable(): boolean;
26
+ }
27
+ //# sourceMappingURL=IStorageProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IStorageProvider.d.ts","sourceRoot":"","sources":["../../../src/spi/providers/IStorageProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAEpC;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1C;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B;;OAEG;IACH,KAAK,CAAC,IAAI,IAAI,CAAC;IAEf;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC;CACxB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Storage Provider Interface
3
+ * Abstraction for storage mechanisms (localStorage, sessionStorage, cookies, etc.)
4
+ */
5
+ export {};
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Template Provider Interface
3
+ * Extension point for custom layout templates
4
+ */
5
+ import type { LayoutSlot } from '../../api';
6
+ export interface TemplateOptions {
7
+ /** Template name/identifier */
8
+ name: string;
9
+ /** Template metadata */
10
+ meta?: Record<string, any>;
11
+ /** Responsive breakpoints configuration */
12
+ responsive?: {
13
+ mobile?: Record<string, any>;
14
+ tablet?: Record<string, any>;
15
+ desktop?: Record<string, any>;
16
+ };
17
+ }
18
+ export interface ITemplateProvider {
19
+ /**
20
+ * Get template name
21
+ */
22
+ getName(): string;
23
+ /**
24
+ * Get available slot areas for this template
25
+ */
26
+ getSlotAreas(): string[];
27
+ /**
28
+ * Render a slot area
29
+ */
30
+ renderSlot(area: string, slots: LayoutSlot[]): any;
31
+ /**
32
+ * Get template configuration
33
+ */
34
+ getConfig(): TemplateOptions;
35
+ }
36
+ //# sourceMappingURL=ITemplateProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITemplateProvider.d.ts","sourceRoot":"","sources":["../../../src/spi/providers/ITemplateProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,2CAA2C;IAC3C,UAAU,CAAC,EAAE;QACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,IAAI,MAAM,CAAC;IAElB;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE,CAAC;IAEzB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;IAEnD;;OAEG;IACH,SAAS,IAAI,eAAe,CAAC;CAC9B"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Template Provider Interface
3
+ * Extension point for custom layout templates
4
+ */
5
+ export {};
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Theme Provider Interface
3
+ * Abstraction for theme application strategies (CSS variables, styled-components, etc.)
4
+ */
5
+ import type { ThemeMode, ThemeConfig } from '../../api';
6
+ export interface IThemeProvider {
7
+ /**
8
+ * Apply theme to the UI
9
+ */
10
+ applyTheme(mode: ThemeMode, config: ThemeConfig): void;
11
+ /**
12
+ * Get system theme preference
13
+ */
14
+ getSystemPreference(): 'light' | 'dark';
15
+ /**
16
+ * Listen for system theme changes
17
+ */
18
+ onSystemThemeChange(callback: (theme: 'light' | 'dark') => void): () => void;
19
+ /**
20
+ * Clean up resources
21
+ */
22
+ destroy(): void;
23
+ }
24
+ //# sourceMappingURL=IThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IThemeProvider.d.ts","sourceRoot":"","sources":["../../../src/spi/providers/IThemeProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAEvD;;OAEG;IACH,mBAAmB,IAAI,OAAO,GAAG,MAAM,CAAC;IAExC;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAE7E;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Theme Provider Interface
3
+ * Abstraction for theme application strategies (CSS variables, styled-components, etc.)
4
+ */
5
+ export {};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Providers
3
+ * Export all provider interfaces
4
+ */
5
+ export * from './IStorageProvider';
6
+ export * from './IThemeProvider';
7
+ export * from './IRouterStrategy';
8
+ export * from './ITemplateProvider';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spi/providers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Providers
3
+ * Export all provider interfaces
4
+ */
5
+ export * from './IStorageProvider';
6
+ export * from './IThemeProvider';
7
+ export * from './IRouterStrategy';
8
+ export * from './ITemplateProvider';
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Layout Slot Provider
3
+ * Interface for dynamic layout slot registration
4
+ */
5
+ export interface AreaOptions {
6
+ /** Area name */
7
+ name: string;
8
+ /** Display order */
9
+ order?: number;
10
+ /** Area metadata */
11
+ meta?: Record<string, any>;
12
+ }
13
+ export interface ILayoutSlotProvider {
14
+ /**
15
+ * Register a new layout area dynamically
16
+ */
17
+ registerArea(name: string, options?: AreaOptions): () => void;
18
+ /**
19
+ * Unregister a layout area
20
+ */
21
+ unregisterArea(name: string): void;
22
+ /**
23
+ * Get all registered areas
24
+ */
25
+ getRegisteredAreas(): string[];
26
+ /**
27
+ * Check if an area is registered
28
+ */
29
+ isAreaRegistered(name: string): boolean;
30
+ }
31
+ //# sourceMappingURL=LayoutSlotProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayoutSlotProvider.d.ts","sourceRoot":"","sources":["../../../src/spi/slots/LayoutSlotProvider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,IAAI,CAAC;IAE9D;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnC;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE,CAAC;IAE/B;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACzC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Layout Slot Provider
3
+ * Interface for dynamic layout slot registration
4
+ */
5
+ export {};
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Template Slot
3
+ * Extension point for template customization
4
+ */
5
+ import type { LayoutSlot } from '../../api';
6
+ export interface TemplateSlotRenderer {
7
+ /**
8
+ * Render function for slot content
9
+ */
10
+ render(slot: LayoutSlot): any;
11
+ /**
12
+ * Check if this renderer can handle the slot
13
+ */
14
+ canRender(slot: LayoutSlot): boolean;
15
+ /**
16
+ * Renderer priority (higher = rendered first)
17
+ */
18
+ priority?: number;
19
+ }
20
+ export interface TemplateSlotExtension {
21
+ /**
22
+ * Register a custom slot renderer
23
+ */
24
+ registerRenderer(renderer: TemplateSlotRenderer): () => void;
25
+ /**
26
+ * Get all registered renderers
27
+ */
28
+ getRenderers(): TemplateSlotRenderer[];
29
+ /**
30
+ * Find appropriate renderer for a slot
31
+ */
32
+ findRenderer(slot: LayoutSlot): TemplateSlotRenderer | null;
33
+ }
34
+ //# sourceMappingURL=TemplateSlot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateSlot.d.ts","sourceRoot":"","sources":["../../../src/spi/slots/TemplateSlot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,GAAG,CAAC;IAE9B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IAErC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAC;IAE7D;;OAEG;IACH,YAAY,IAAI,oBAAoB,EAAE,CAAC;IAEvC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,oBAAoB,GAAG,IAAI,CAAC;CAC7D"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Template Slot
3
+ * Extension point for template customization
4
+ */
5
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Slots
3
+ * Export all slot interfaces
4
+ */
5
+ export * from './LayoutSlotProvider';
6
+ export * from './TemplateSlot';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/spi/slots/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Slots
3
+ * Export all slot interfaces
4
+ */
5
+ export * from './LayoutSlotProvider';
6
+ export * from './TemplateSlot';
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@hamak/ui-shell",
3
+ "version": "0.5.1",
4
+ "description": "UI Shell Framework with theming, routing, and layout management",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./api": {
15
+ "types": "./dist/api/index.d.ts",
16
+ "import": "./dist/api/index.js",
17
+ "default": "./dist/api/index.js"
18
+ },
19
+ "./spi": {
20
+ "types": "./dist/spi/index.d.ts",
21
+ "import": "./dist/spi/index.js",
22
+ "default": "./dist/spi/index.js"
23
+ }
24
+ },
25
+ "typesVersions": {
26
+ "*": {
27
+ "api": [
28
+ "./dist/api/index.d.ts"
29
+ ],
30
+ "spi": [
31
+ "./dist/spi/index.d.ts"
32
+ ]
33
+ }
34
+ },
35
+ "files": [
36
+ "dist"
37
+ ],
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/amah/app-framework.git",
41
+ "directory": "packages/ui-shell"
42
+ },
43
+ "publishConfig": {
44
+ "access": "public"
45
+ },
46
+ "scripts": {
47
+ "build": "tsc -p tsconfig.lib.json",
48
+ "clean": "rm -rf dist"
49
+ },
50
+ "keywords": [
51
+ "ui-shell",
52
+ "theming",
53
+ "routing",
54
+ "layout",
55
+ "microkernel",
56
+ "plugin"
57
+ ],
58
+ "author": "",
59
+ "license": "MIT",
60
+ "dependencies": {
61
+ "@hamak/microkernel-api": "*",
62
+ "@hamak/microkernel-spi": "*"
63
+ },
64
+ "devDependencies": {
65
+ "typescript": "^5.9.3"
66
+ }
67
+ }