mtrl 0.3.9 → 0.4.3

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 (167) hide show
  1. package/dist/components/badge/api.d.ts +5 -5
  2. package/dist/components/badge/config.d.ts +18 -8
  3. package/dist/components/bottom-app-bar/bottom-app-bar.d.ts +1 -1
  4. package/dist/components/bottom-app-bar/config.d.ts +1 -1
  5. package/dist/components/button/api.d.ts +19 -3
  6. package/dist/components/button/button.d.ts +41 -1
  7. package/dist/components/button/config.d.ts +18 -7
  8. package/dist/components/button/constants.d.ts +36 -0
  9. package/dist/components/button/features/progress.d.ts +26 -0
  10. package/dist/components/button/types.d.ts +108 -1
  11. package/dist/components/card/config.d.ts +2 -2
  12. package/dist/components/card/features.d.ts +14 -1
  13. package/dist/components/card/index.d.ts +6 -6
  14. package/dist/components/carousel/api.d.ts +15 -11
  15. package/dist/components/carousel/carousel.d.ts +1 -1
  16. package/dist/components/carousel/config.d.ts +2 -2
  17. package/dist/components/carousel/features/drag.d.ts +1 -1
  18. package/dist/components/carousel/features/slides.d.ts +1 -1
  19. package/dist/components/checkbox/config.d.ts +2 -2
  20. package/dist/components/checkbox/types.d.ts +2 -2
  21. package/dist/components/chips/chip/chip.d.ts +1 -1
  22. package/dist/components/chips/chip/config.d.ts +2 -2
  23. package/dist/components/chips/chips.d.ts +1 -1
  24. package/dist/components/chips/config.d.ts +1 -1
  25. package/dist/components/chips/features/chip-items.d.ts +1 -1
  26. package/dist/components/chips/schema.d.ts +1 -2
  27. package/dist/components/datepicker/api.d.ts +1 -1
  28. package/dist/components/datepicker/config.d.ts +4 -4
  29. package/dist/components/datepicker/datepicker.d.ts +1 -1
  30. package/dist/components/datepicker/render.d.ts +5 -5
  31. package/dist/components/dialog/config.d.ts +2 -2
  32. package/dist/components/dialog/features.d.ts +1 -1
  33. package/dist/components/dialog/types.d.ts +1 -1
  34. package/dist/components/divider/divider.d.ts +2 -2
  35. package/dist/components/extended-fab/config.d.ts +2 -2
  36. package/dist/components/fab/config.d.ts +2 -2
  37. package/dist/components/index.d.ts +2 -1
  38. package/dist/components/list/config.d.ts +1 -1
  39. package/dist/components/menu/api.d.ts +14 -14
  40. package/dist/components/menu/config.d.ts +2 -2
  41. package/dist/components/menu/features/controller.d.ts +1 -1
  42. package/dist/components/menu/features/keyboard.d.ts +2 -2
  43. package/dist/components/menu/features/submenu.d.ts +1 -1
  44. package/dist/components/menu/menu.d.ts +1 -1
  45. package/dist/components/navigation/config.d.ts +2 -2
  46. package/dist/components/navigation/features/controller.d.ts +1 -1
  47. package/dist/components/navigation/features/items.d.ts +2 -1
  48. package/dist/components/navigation/navigation.d.ts +1 -1
  49. package/dist/components/navigation/system/core.d.ts +1 -1
  50. package/dist/components/navigation/system/events.d.ts +1 -1
  51. package/dist/components/navigation/system/index.d.ts +2 -2
  52. package/dist/components/progress/api.d.ts +49 -18
  53. package/dist/components/progress/config.d.ts +20 -11
  54. package/dist/components/progress/constants.d.ts +86 -1
  55. package/dist/components/progress/features/canvas.d.ts +61 -0
  56. package/dist/components/progress/features/circular.d.ts +9 -0
  57. package/dist/components/progress/features/index.d.ts +8 -0
  58. package/dist/components/progress/features/linear.d.ts +9 -0
  59. package/dist/components/progress/features/resize-observer.d.ts +5 -0
  60. package/dist/components/progress/features/state.d.ts +46 -0
  61. package/dist/components/progress/index.d.ts +2 -2
  62. package/dist/components/progress/progress.d.ts +2 -2
  63. package/dist/components/progress/types.d.ts +102 -17
  64. package/dist/components/radios/api.d.ts +11 -11
  65. package/dist/components/radios/config.d.ts +2 -2
  66. package/dist/components/radios/radios.d.ts +1 -1
  67. package/dist/components/search/api.d.ts +15 -11
  68. package/dist/components/search/config.d.ts +1 -1
  69. package/dist/components/search/features/search.d.ts +1 -1
  70. package/dist/components/segmented-button/config.d.ts +8 -8
  71. package/dist/components/select/api.d.ts +1 -1
  72. package/dist/components/select/config.d.ts +1 -1
  73. package/dist/components/select/features.d.ts +1 -1
  74. package/dist/components/select/types.d.ts +20 -5
  75. package/dist/components/sheet/config.d.ts +2 -2
  76. package/dist/components/sheet/sheet.d.ts +1 -1
  77. package/dist/components/slider/api.d.ts +3 -2
  78. package/dist/components/slider/config.d.ts +2 -2
  79. package/dist/components/slider/constants.d.ts +50 -21
  80. package/dist/components/slider/features/canvas.d.ts +47 -0
  81. package/dist/components/slider/features/controller.d.ts +1 -1
  82. package/dist/components/slider/features/handlers.d.ts +1 -1
  83. package/dist/components/slider/features/index.d.ts +1 -0
  84. package/dist/components/slider/features/states.d.ts +1 -1
  85. package/dist/components/slider/schema.d.ts +7 -50
  86. package/dist/components/slider/slider.d.ts +5 -4
  87. package/dist/components/slider/types.d.ts +10 -37
  88. package/dist/components/snackbar/api.d.ts +1 -1
  89. package/dist/components/snackbar/config.d.ts +3 -3
  90. package/dist/components/switch/api.d.ts +1 -1
  91. package/dist/components/switch/config.d.ts +2 -2
  92. package/dist/components/switch/features.d.ts +4 -4
  93. package/dist/components/switch/switch.d.ts +1 -1
  94. package/dist/components/switch/types.d.ts +22 -17
  95. package/dist/components/tabs/config.d.ts +2 -3
  96. package/dist/components/tabs/features.d.ts +5 -5
  97. package/dist/components/tabs/index.d.ts +10 -10
  98. package/dist/components/tabs/tab.d.ts +1 -1
  99. package/dist/components/tabs/utils.d.ts +1 -1
  100. package/dist/components/textfield/api.d.ts +13 -3
  101. package/dist/components/textfield/config.d.ts +2 -2
  102. package/dist/components/textfield/constants.d.ts +12 -20
  103. package/dist/components/textfield/features/density.d.ts +28 -0
  104. package/dist/components/textfield/features/index.d.ts +13 -12
  105. package/dist/components/textfield/index.d.ts +3 -3
  106. package/dist/components/textfield/textfield.d.ts +1 -1
  107. package/dist/components/textfield/types.d.ts +42 -35
  108. package/dist/components/timepicker/clockdial.d.ts +2 -2
  109. package/dist/components/timepicker/config.d.ts +4 -4
  110. package/dist/components/timepicker/render.d.ts +1 -1
  111. package/dist/components/timepicker/timepicker.d.ts +1 -1
  112. package/dist/components/timepicker/utils.d.ts +2 -2
  113. package/dist/components/tooltip/api.d.ts +1 -1
  114. package/dist/components/tooltip/config.d.ts +2 -2
  115. package/dist/components/top-app-bar/top-app-bar.d.ts +2 -2
  116. package/dist/constants.d.ts +30 -30
  117. package/dist/core/canvas/animation.d.ts +27 -0
  118. package/dist/core/canvas/drawing.d.ts +57 -0
  119. package/dist/core/canvas/index.d.ts +8 -0
  120. package/dist/core/canvas/resize.d.ts +14 -0
  121. package/dist/core/canvas/utils.d.ts +84 -0
  122. package/dist/core/collection/collection.d.ts +7 -7
  123. package/dist/core/collection/list-manager/index.d.ts +2 -2
  124. package/dist/core/collection/list-manager/renderer.d.ts +3 -3
  125. package/dist/core/collection/list-manager/scroll-tracker.d.ts +1 -1
  126. package/dist/core/compose/component.d.ts +2 -1
  127. package/dist/core/compose/features/checkable.d.ts +2 -2
  128. package/dist/core/compose/features/gestures/longpress.d.ts +2 -2
  129. package/dist/core/compose/features/gestures/pan.d.ts +2 -2
  130. package/dist/core/compose/features/gestures/pinch.d.ts +2 -2
  131. package/dist/core/compose/features/gestures/rotate.d.ts +2 -2
  132. package/dist/core/compose/features/gestures/swipe.d.ts +2 -2
  133. package/dist/core/compose/features/gestures/tap.d.ts +2 -2
  134. package/dist/core/compose/features/gestures.d.ts +2 -2
  135. package/dist/core/compose/features/input.d.ts +1 -1
  136. package/dist/core/compose/features/ripple.d.ts +2 -2
  137. package/dist/core/compose/features/size.d.ts +1 -1
  138. package/dist/core/compose/features/textinput.d.ts +1 -1
  139. package/dist/core/compose/features/throttle.d.ts +1 -1
  140. package/dist/core/compose/features/variant.d.ts +1 -1
  141. package/dist/core/compose/features/withEvents.d.ts +1 -1
  142. package/dist/core/composition/features/label.d.ts +1 -1
  143. package/dist/core/config/component.d.ts +4 -2
  144. package/dist/core/config/global.d.ts +65 -0
  145. package/dist/core/dom/attributes.d.ts +13 -15
  146. package/dist/core/dom/classes.d.ts +10 -0
  147. package/dist/core/dom/create.d.ts +36 -6
  148. package/dist/core/dom/index.d.ts +2 -2
  149. package/dist/core/gestures/pan.d.ts +1 -1
  150. package/dist/core/gestures/pinch.d.ts +1 -1
  151. package/dist/core/gestures/rotate.d.ts +1 -1
  152. package/dist/core/index.d.ts +3 -1
  153. package/dist/core/layout/array.d.ts +7 -2
  154. package/dist/core/layout/object.d.ts +2 -2
  155. package/dist/core/layout/processor.d.ts +2 -2
  156. package/dist/core/layout/utils.d.ts +1 -1
  157. package/dist/core/utils/color.d.ts +14 -0
  158. package/dist/core/utils/index.d.ts +2 -6
  159. package/dist/core/utils/theme.d.ts +38 -0
  160. package/dist/index.cjs +15 -15
  161. package/dist/index.cjs.map +158 -143
  162. package/dist/index.d.ts +7 -7
  163. package/dist/index.js +15 -15
  164. package/dist/index.js.map +158 -143
  165. package/dist/package.json +1 -1
  166. package/dist/styles.css +2 -2
  167. package/package.json +9 -13
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Common canvas context interface used by components
3
+ */
4
+ export interface CanvasContext {
5
+ canvas: HTMLCanvasElement;
6
+ ctx: CanvasRenderingContext2D;
7
+ width: number;
8
+ height: number;
9
+ pixelRatio: number;
10
+ }
11
+ /**
12
+ * Creates and initializes a canvas context with proper pixel ratio handling
13
+ *
14
+ * @param canvas - The canvas element
15
+ * @param width - Canvas width
16
+ * @param height - Canvas height
17
+ * @returns Initialized canvas context
18
+ */
19
+ export declare const createCanvasContext: (canvas: HTMLCanvasElement, width: number, height: number) => CanvasContext;
20
+ /**
21
+ * Updates canvas dimensions while preserving pixel ratio
22
+ *
23
+ * @param context - The canvas context to update
24
+ * @param width - New width
25
+ * @param height - New height
26
+ */
27
+ export declare const updateCanvasDimensions: (context: CanvasContext, width: number, height: number) => void;
28
+ /**
29
+ * Tries to initialize a canvas with retry mechanism
30
+ *
31
+ * @param initFn - Function that performs initialization
32
+ * @param onSuccess - Optional callback on successful initialization
33
+ * @returns Whether initialization was immediately successful
34
+ */
35
+ export declare const initializeCanvasWithRetry: (initFn: () => boolean, onSuccess?: () => void) => boolean;
36
+ /**
37
+ * Creates a theme observer that triggers a callback on theme changes
38
+ *
39
+ * @param color - The theme color to observe (e.g., 'primary', 'secondary')
40
+ * @param callback - Function to call when theme changes
41
+ * @returns Cleanup function or null
42
+ */
43
+ export declare const createCanvasThemeObserver: (color: string, callback: () => void) => (() => void) | null;
44
+ /**
45
+ * Standard animation frame manager for components
46
+ */
47
+ export declare class AnimationFrameManager {
48
+ private animationId;
49
+ /**
50
+ * Starts an animation loop
51
+ * @param callback - Animation callback receiving timestamp
52
+ */
53
+ start(callback: (timestamp: number) => void): void;
54
+ /**
55
+ * Stops the animation loop
56
+ */
57
+ stop(): void;
58
+ /**
59
+ * Whether animation is currently running
60
+ */
61
+ get isRunning(): boolean;
62
+ }
63
+ /**
64
+ * Manages multiple cleanup functions for components
65
+ */
66
+ export declare class CleanupManager {
67
+ private cleanupFunctions;
68
+ /**
69
+ * Adds a cleanup function
70
+ */
71
+ add(cleanup: (() => void) | null | undefined): void;
72
+ /**
73
+ * Runs all cleanup functions and clears the list
74
+ */
75
+ cleanup(): void;
76
+ }
77
+ /**
78
+ * Creates a standard canvas element with common styles
79
+ *
80
+ * @param className - CSS class name for the canvas
81
+ * @param additionalStyles - Additional styles to apply
82
+ * @returns Canvas element
83
+ */
84
+ export declare const createStyledCanvas: (className: string, additionalStyles?: Partial<CSSStyleDeclaration>) => HTMLCanvasElement;
@@ -12,13 +12,13 @@ export declare const COLLECTION_EVENTS: {
12
12
  /**
13
13
  * Collection event type
14
14
  */
15
- export type CollectionEvent = typeof COLLECTION_EVENTS[keyof typeof COLLECTION_EVENTS];
15
+ export type CollectionEvent = (typeof COLLECTION_EVENTS)[keyof typeof COLLECTION_EVENTS];
16
16
  /**
17
17
  * Observer callback type for collection events
18
18
  */
19
- export type CollectionObserver<T> = (payload: {
19
+ export type CollectionObserver<T = unknown> = (payload: {
20
20
  event: CollectionEvent;
21
- data: any;
21
+ data: T | readonly T[] | readonly string[] | boolean | Error | null;
22
22
  }) => void;
23
23
  /**
24
24
  * Query operators for filtering
@@ -41,7 +41,7 @@ export declare const OPERATORS: {
41
41
  */
42
42
  export interface CollectionItem {
43
43
  id: string;
44
- [key: string]: any;
44
+ [key: string]: unknown;
45
45
  }
46
46
  /**
47
47
  * Collection configuration
@@ -50,11 +50,11 @@ export interface CollectionConfig<T extends CollectionItem> {
50
50
  /**
51
51
  * Transform function for items
52
52
  */
53
- transform?: (item: any) => T;
53
+ transform?: (item: unknown) => T;
54
54
  /**
55
55
  * Validation function for items
56
56
  */
57
- validate?: (item: any) => boolean;
57
+ validate?: (item: unknown) => boolean;
58
58
  /**
59
59
  * Initial capacity for collection
60
60
  */
@@ -69,7 +69,7 @@ export interface Collection<T extends CollectionItem> {
69
69
  * @param observer - Observer callback
70
70
  * @returns Unsubscribe function
71
71
  */
72
- subscribe: (observer: CollectionObserver<T>) => () => void;
72
+ subscribe: (observer: CollectionObserver) => () => void;
73
73
  /**
74
74
  * Get collection items based on current query and sort
75
75
  * @returns Collection items
@@ -1,4 +1,4 @@
1
- import { ListManagerConfig, ListManager, LoadStatus } from './types';
1
+ import { ListManagerConfig, ListManager, LoadStatus } from "./types";
2
2
  /**
3
3
  * Creates a list manager for a specific collection
4
4
  * @param {string} collection - Collection name
@@ -58,4 +58,4 @@ export declare const transforms: {
58
58
  meta: any;
59
59
  };
60
60
  };
61
- export * from './types';
61
+ export * from "./types";
@@ -1,6 +1,6 @@
1
- import { ListManagerConfig, ListManagerElements, VisibleRange } from './types';
2
- import { RecyclingPool } from './utils/recycling';
3
- import { ItemMeasurement } from './item-measurement';
1
+ import { ListManagerConfig, ListManagerElements, VisibleRange } from "./types";
2
+ import { RecyclingPool } from "./utils/recycling";
3
+ import { ItemMeasurement } from "./item-measurement";
4
4
  /**
5
5
  * Creates a renderer for list items
6
6
  * @param config List manager configuration
@@ -1,4 +1,4 @@
1
- import { ListManagerElements, ListManagerConfig } from './types';
1
+ import { ListManagerElements, ListManagerConfig } from "./types";
2
2
  /**
3
3
  * Common interface for scroll tracking strategies
4
4
  */
@@ -40,10 +40,11 @@ export interface ElementComponent extends BaseComponent {
40
40
  export interface WithElementOptions {
41
41
  tag?: string;
42
42
  componentName?: string;
43
- attrs?: Record<string, any>;
43
+ attributes?: Record<string, any>;
44
44
  className?: string | string[];
45
45
  forwardEvents?: Record<string, boolean | ((component: any, event: Event) => boolean)>;
46
46
  interactive?: boolean;
47
+ parent?: HTMLElement | string;
47
48
  }
48
49
  /**
49
50
  * Creates a base component with configuration and prefix utilities.
@@ -1,4 +1,4 @@
1
- import { BaseComponent } from '../component';
1
+ import { BaseComponent } from "../component";
2
2
  /**
3
3
  * Configuration for checkable feature
4
4
  */
@@ -12,7 +12,7 @@ export interface CheckableConfig {
12
12
  export interface InputComponent extends BaseComponent {
13
13
  element: HTMLElement;
14
14
  input: HTMLInputElement;
15
- emit?: (event: string, data: any) => InputComponent;
15
+ emit?: (event: string, data: unknown) => InputComponent;
16
16
  on?: (event: string, handler: Function) => InputComponent;
17
17
  }
18
18
  /**
@@ -2,8 +2,8 @@
2
2
  * @module core/compose/features/gestures
3
3
  * @description Adds long press gesture recognition to components
4
4
  */
5
- import { BaseComponent, ElementComponent } from '../../component';
6
- import { LongPressEvent, GestureHandler } from '../../../gestures';
5
+ import { BaseComponent, ElementComponent } from "../../component";
6
+ import { LongPressEvent, GestureHandler } from "../../../gestures";
7
7
  /**
8
8
  * Configuration for long press gesture feature
9
9
  */
@@ -2,8 +2,8 @@
2
2
  * @module core/compose/features/gestures
3
3
  * @description Adds pan gesture recognition to components
4
4
  */
5
- import { BaseComponent, ElementComponent } from '../../component';
6
- import { PanEvent, GestureHandler } from '../../../gestures';
5
+ import { BaseComponent, ElementComponent } from "../../component";
6
+ import { PanEvent, GestureHandler } from "../../../gestures";
7
7
  /**
8
8
  * Configuration for pan gesture feature
9
9
  */
@@ -2,8 +2,8 @@
2
2
  * @module core/compose/features/gestures
3
3
  * @description Adds pinch gesture recognition to components
4
4
  */
5
- import { BaseComponent, ElementComponent } from '../../component';
6
- import { PinchEvent, GestureHandler } from '../../../gestures';
5
+ import { BaseComponent, ElementComponent } from "../../component";
6
+ import { PinchEvent, GestureHandler } from "../../../gestures";
7
7
  /**
8
8
  * Configuration for pinch gesture feature
9
9
  */
@@ -2,8 +2,8 @@
2
2
  * @module core/compose/features/gestures
3
3
  * @description Adds rotate gesture recognition to components
4
4
  */
5
- import { BaseComponent, ElementComponent } from '../../component';
6
- import { RotateEvent, GestureHandler } from '../../../gestures';
5
+ import { BaseComponent, ElementComponent } from "../../component";
6
+ import { RotateEvent, GestureHandler } from "../../../gestures";
7
7
  /**
8
8
  * Configuration for rotate gesture feature
9
9
  */
@@ -2,8 +2,8 @@
2
2
  * @module core/compose/features/gestures
3
3
  * @description Adds swipe gesture recognition to components
4
4
  */
5
- import { BaseComponent, ElementComponent } from '../../component';
6
- import { SwipeEvent, GestureHandler } from '../../../gestures';
5
+ import { BaseComponent, ElementComponent } from "../../component";
6
+ import { SwipeEvent, GestureHandler } from "../../../gestures";
7
7
  /**
8
8
  * Configuration for swipe gesture feature
9
9
  */
@@ -2,8 +2,8 @@
2
2
  * @module core/compose/features/gestures
3
3
  * @description Adds tap gesture recognition to components
4
4
  */
5
- import { BaseComponent, ElementComponent } from '../../component';
6
- import { TapEvent, GestureHandler } from '../../../gestures';
5
+ import { BaseComponent, ElementComponent } from "../../component";
6
+ import { TapEvent, GestureHandler } from "../../../gestures";
7
7
  /**
8
8
  * Configuration for tap gesture feature
9
9
  */
@@ -2,8 +2,8 @@
2
2
  * @module core/compose/features
3
3
  * @description Adds gesture recognition capabilities to components
4
4
  */
5
- import { BaseComponent, ElementComponent } from '../component';
6
- import { GestureManager, GestureConfig, GestureHandler } from '../../gestures';
5
+ import { BaseComponent, ElementComponent } from "../component";
6
+ import { GestureManager, GestureConfig, GestureHandler } from "../../gestures";
7
7
  /**
8
8
  * Configuration for gestures feature
9
9
  */
@@ -1,4 +1,4 @@
1
- import { ElementComponent } from '../component';
1
+ import { ElementComponent } from "../component";
2
2
  /**
3
3
  * Input configuration options
4
4
  */
@@ -1,5 +1,5 @@
1
- import { BaseComponent, ElementComponent } from '../component';
2
- import { LifecycleComponent } from './lifecycle';
1
+ import { BaseComponent, ElementComponent } from "../component";
2
+ import { LifecycleComponent } from "./lifecycle";
3
3
  /**
4
4
  * Ripple configuration interface
5
5
  */
@@ -1,4 +1,4 @@
1
- import { ElementComponent } from '../component';
1
+ import { ElementComponent } from "../component";
2
2
  /**
3
3
  * Configuration for size feature
4
4
  */
@@ -1,4 +1,4 @@
1
- import { ElementComponent } from '../component';
1
+ import { ElementComponent } from "../component";
2
2
  /**
3
3
  * Configuration for text input feature
4
4
  */
@@ -2,7 +2,7 @@
2
2
  * @module core/compose/features
3
3
  * @description Adds throttled event handling capabilities to components
4
4
  */
5
- import { BaseComponent, ElementComponent } from '../component';
5
+ import { BaseComponent, ElementComponent } from "../component";
6
6
  /**
7
7
  * Configuration for throttled event handlers
8
8
  */
@@ -1,4 +1,4 @@
1
- import { ElementComponent } from '../component';
1
+ import { ElementComponent } from "../component";
2
2
  /**
3
3
  * Configuration for variant feature
4
4
  */
@@ -1,4 +1,4 @@
1
- import { BaseComponent, ElementComponent } from '../component';
1
+ import { BaseComponent, ElementComponent } from "../component";
2
2
  /**
3
3
  * Event manager interface
4
4
  */
@@ -9,7 +9,7 @@ export interface LabelConfig {
9
9
  /**
10
10
  * Position of the label ('start', 'end', 'top', or 'bottom')
11
11
  */
12
- labelPosition?: 'start' | 'end' | 'top' | 'bottom';
12
+ labelPosition?: "start" | "end" | "top" | "bottom";
13
13
  /**
14
14
  * CSS class prefix
15
15
  */
@@ -8,10 +8,12 @@ export interface BaseComponentConfig {
8
8
  class?: string | string[];
9
9
  className?: string | string[];
10
10
  rawClass?: string | string[];
11
+ parent?: HTMLElement | string | null;
11
12
  [key: string]: any;
12
13
  }
13
14
  /**
14
15
  * Creates a base configuration for any component
16
+ * Automatically merges global defaults if available
15
17
  *
16
18
  * @param {BaseComponentConfig} defaults - Default configuration for the component
17
19
  * @param {BaseComponentConfig} userConfig - User provided configuration
@@ -69,7 +71,7 @@ export declare const processClassNames: (classNames: string | string[] | null) =
69
71
  */
70
72
  export declare const createElementConfig: (config: BaseComponentConfig, options: {
71
73
  tag: string;
72
- attrs?: Record<string, any>;
74
+ attributes?: Record<string, any>;
73
75
  className?: string | string[] | null;
74
76
  html?: string;
75
77
  text?: string;
@@ -78,7 +80,7 @@ export declare const createElementConfig: (config: BaseComponentConfig, options:
78
80
  }) => {
79
81
  tag: string;
80
82
  componentName: string;
81
- attrs: Record<string, any>;
83
+ attributes: Record<string, any>;
82
84
  className: string[];
83
85
  rawClass: string | string[];
84
86
  html: string;
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Lightweight Global Configuration System for mtrl
3
+ *
4
+ * This system allows setting default configurations for all components
5
+ * without adding complexity or performance overhead.
6
+ */
7
+ import { ButtonConfig } from '../../components/button/types';
8
+ import { TextfieldConfig } from '../../components/textfield/types';
9
+ /**
10
+ * Component configuration map
11
+ * Add new components here as they support global config
12
+ *
13
+ * For components not yet integrated, use Partial<any> as a placeholder
14
+ */
15
+ export interface ComponentConfigMap {
16
+ button?: Partial<ButtonConfig>;
17
+ textfield?: Partial<TextfieldConfig>;
18
+ checkbox?: Partial<any>;
19
+ switch?: Partial<any>;
20
+ slider?: Partial<any>;
21
+ card?: Partial<any>;
22
+ chip?: Partial<any>;
23
+ dialog?: Partial<any>;
24
+ }
25
+ /**
26
+ * Sets global defaults for a specific component
27
+ *
28
+ * @param component - Component name
29
+ * @param config - Default configuration to apply
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * // Set all buttons to be square by default
34
+ * setComponentDefaults('button', {
35
+ * shape: 'square',
36
+ * size: 'm'
37
+ * });
38
+ * ```
39
+ */
40
+ export declare function setComponentDefaults<K extends keyof ComponentConfigMap>(component: K, config: ComponentConfigMap[K]): void;
41
+ /**
42
+ * Gets global defaults for a component
43
+ *
44
+ * @param component - Component name
45
+ * @returns Component defaults or empty object
46
+ */
47
+ export declare function getComponentDefaults<K extends keyof ComponentConfigMap>(component: K): ComponentConfigMap[K];
48
+ /**
49
+ * Sets global defaults for multiple components at once
50
+ *
51
+ * @param configs - Map of component names to their default configs
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * setGlobalDefaults({
56
+ * button: { shape: 'square', size: 'm' },
57
+ * textfield: { variant: 'outlined' }
58
+ * });
59
+ * ```
60
+ */
61
+ export declare function setGlobalDefaults(configs: Partial<ComponentConfigMap>): void;
62
+ /**
63
+ * Clears all global defaults
64
+ */
65
+ export declare function clearGlobalDefaults(): void;
@@ -1,22 +1,20 @@
1
1
  /**
2
2
  * @module core/dom
3
- * @description DOM manipulation utilities
3
+ * @description DOM attribute helpers
4
4
  */
5
5
  /**
6
- * Sets multiple attributes on an element
7
- * @memberof module:core/dom
8
- * @function setAttributes
9
- * @param {HTMLElement} element - Target element
10
- * @param {Record<string, any>} attrs - Attributes to set
11
- * @returns {HTMLElement} Modified element
6
+ * Sets attributes on an HTML element
7
+ *
8
+ * @param {HTMLElement} element - Element to set attributes on
9
+ * @param {Record<string, any>} attributes - Attributes to set
10
+ * @returns {HTMLElement} The element for chaining
12
11
  */
13
- export declare const setAttributes: (element: HTMLElement, attrs?: Record<string, any>) => HTMLElement;
12
+ export declare const setAttributes: (element: HTMLElement, attributes?: Record<string, any>) => HTMLElement;
14
13
  /**
15
- * Removes multiple attributes from an element
16
- * @memberof module:core/dom
17
- * @function removeAttributes
18
- * @param {HTMLElement} element - Target element
19
- * @param {string[]} attrs - Attributes to remove
20
- * @returns {HTMLElement} Modified element
14
+ * Removes attributes from an HTML element
15
+ *
16
+ * @param {HTMLElement} element - Element to remove attributes from
17
+ * @param {string[]} attributes - Attributes to remove
18
+ * @returns {HTMLElement} The element for chaining
21
19
  */
22
- export declare const removeAttributes: (element: HTMLElement, attrs?: string[]) => HTMLElement;
20
+ export declare const removeAttributes: (element: HTMLElement, attributes?: string[]) => HTMLElement;
@@ -2,6 +2,16 @@
2
2
  * @module core/dom
3
3
  * @description DOM manipulation utilities optimized for performance
4
4
  */
5
+ /**
6
+ * Normalizes class names input by handling various formats:
7
+ * - String with space-separated classes
8
+ * - Array of strings
9
+ * - Mixed array of strings and space-separated classes
10
+ *
11
+ * @param classes - Classes to normalize
12
+ * @returns Array of unique, non-empty class names
13
+ */
14
+ export declare const normalizeClasses: (...classes: (string | string[])[]) => string[];
5
15
  /**
6
16
  * Adds multiple classes to an element
7
17
  * Automatically adds prefix to classes that don't already have it
@@ -10,6 +10,10 @@ export type EventHandler = (event: Event) => void;
10
10
  * Event condition type - either a boolean or a function that returns a boolean
11
11
  */
12
12
  export type EventCondition = boolean | ((context: any, event: Event) => boolean);
13
+ /**
14
+ * Element type that can be either HTMLElement or SVGElement
15
+ */
16
+ export type DOMElement = HTMLElement | SVGElement;
13
17
  /**
14
18
  * Options for element creation
15
19
  */
@@ -60,7 +64,7 @@ export interface CreateElementOptions {
60
64
  /**
61
65
  * HTML attributes
62
66
  */
63
- attrs?: Record<string, any>;
67
+ attributes?: Record<string, any>;
64
68
  /**
65
69
  * Events to forward when component has emit method
66
70
  */
@@ -78,6 +82,19 @@ export interface CreateElementOptions {
78
82
  */
79
83
  [key: string]: any;
80
84
  }
85
+ /**
86
+ * Options for SVG element creation, extends regular element options
87
+ */
88
+ export interface CreateSVGElementOptions extends Omit<CreateElementOptions, "container" | "onCreate"> {
89
+ /**
90
+ * Container to append element to
91
+ */
92
+ container?: DOMElement | null;
93
+ /**
94
+ * Callback after element creation
95
+ */
96
+ onCreate?: (element: SVGElement, context?: any) => void;
97
+ }
81
98
  /**
82
99
  * Event handler storage to facilitate cleanup
83
100
  */
@@ -85,23 +102,30 @@ export interface EventHandlerStorage {
85
102
  [eventName: string]: EventHandler;
86
103
  }
87
104
  /**
88
- * Creates a DOM element with the specified options
105
+ * Creates an HTML element with the specified options
89
106
  *
90
107
  * @param {CreateElementOptions} options - Element creation options
91
- * @returns {HTMLElement} Created element
108
+ * @returns {HTMLElement} Created HTML element
92
109
  */
93
110
  export declare const createElement: (options?: CreateElementOptions) => HTMLElement;
111
+ /**
112
+ * Creates an SVG element with the specified options
113
+ *
114
+ * @param {CreateSVGElementOptions} options - SVG element creation options
115
+ * @returns {SVGElement} Created SVG element
116
+ */
117
+ export declare const createSVGElement: (options?: CreateSVGElementOptions) => SVGElement;
94
118
  /**
95
119
  * Removes event handlers from an element
96
120
  * @param element - Element to cleanup
97
121
  */
98
- export declare const removeEventHandlers: (element: HTMLElement) => void;
122
+ export declare const removeEventHandlers: (element: HTMLElement | SVGElement) => void;
99
123
  /**
100
124
  * Higher-order function to add attributes to an element
101
- * @param {Record<string, any>} attrs - Attributes to add
125
+ * @param {Record<string, any>} attributes - Attributes to add
102
126
  * @returns {(element: HTMLElement) => HTMLElement} Element transformer
103
127
  */
104
- export declare const withAttributes: (attrs: Record<string, any>) => (element: HTMLElement) => HTMLElement;
128
+ export declare const withAttributes: (attributes: Record<string, any>) => (element: HTMLElement) => HTMLElement;
105
129
  /**
106
130
  * Higher-order function to add classes to an element
107
131
  * @param {...(string | string[])} classes - Classes to add
@@ -121,4 +145,10 @@ declare global {
121
145
  */
122
146
  __eventHandlers?: EventHandlerStorage;
123
147
  }
148
+ interface SVGElement {
149
+ /**
150
+ * Storage for event handlers to enable cleanup
151
+ */
152
+ __eventHandlers?: EventHandlerStorage;
153
+ }
124
154
  }
@@ -1,6 +1,6 @@
1
- export { createElement, withAttributes, withClasses, withContent } from './create';
1
+ export { createElement, createSVGElement } from './create';
2
2
  export type { CreateElementOptions } from './create';
3
3
  export { setAttributes, removeAttributes } from './attributes';
4
- export { addClass, removeClass, toggleClass, hasClass } from './classes';
4
+ export { addClass, removeClass, toggleClass, hasClass, normalizeClasses } from './classes';
5
5
  export { createEventManager } from './events';
6
6
  export type { EventManager } from './events';
@@ -2,7 +2,7 @@
2
2
  * @module core/gestures
3
3
  * @description Pan gesture detection
4
4
  */
5
- import { PanEvent, GestureDetectionContext } from './types';
5
+ import { PanEvent, GestureDetectionContext } from "./types";
6
6
  /**
7
7
  * Detect pan gesture
8
8
  *
@@ -2,7 +2,7 @@
2
2
  * @module core/gestures
3
3
  * @description Pinch gesture detection
4
4
  */
5
- import { PinchEvent, GestureDetectionContext } from './types';
5
+ import { PinchEvent, GestureDetectionContext } from "./types";
6
6
  /**
7
7
  * Detect pinch gesture
8
8
  *
@@ -2,7 +2,7 @@
2
2
  * @module core/gestures
3
3
  * @description Rotate gesture detection
4
4
  */
5
- import { RotateEvent, GestureDetectionContext } from './types';
5
+ import { RotateEvent, GestureDetectionContext } from "./types";
6
6
  /**
7
7
  * Detect rotate gesture
8
8
  *
@@ -21,8 +21,10 @@ export { createEventManager as createStateEventManager } from './state/events';
21
21
  export type { EventManagerState } from './state/events';
22
22
  export * from './layout';
23
23
  export * from './collection';
24
+ export * from './canvas';
24
25
  export { PREFIX, COMPONENTS, STATES, classNames, getComponentClass, getModifierClass, getElementClass } from './config';
25
- export { normalizeClasses, when, classNames as joinClasses, isObject, byString, hasTouchSupport, normalizeEvent, throttle, debounce, once, getInheritedBackground } from './utils';
26
+ export { setComponentDefaults, getComponentDefaults, setGlobalDefaults, clearGlobalDefaults, type ComponentConfigMap } from './config/global';
27
+ export { when, classNames as joinClasses, isObject, byString, hasTouchSupport, normalizeEvent, throttle, debounce, once, getInheritedBackground } from './utils';
26
28
  export { createGestureManager } from './gestures';
27
29
  export type { GestureManager, GestureConfig, GestureEvent, TapEvent, SwipeEvent, LongPressEvent, PinchEvent, RotateEvent, PanEvent, AnyGestureEvent, GestureHandler } from './gestures';
28
30
  export type { ThemeConfig, ComponentConfig, ThemedComponentConfig, VariantComponentConfig, StateComponentConfig } from './config';