mtrl 0.2.6 → 0.2.7

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 (147) hide show
  1. package/index.ts +18 -0
  2. package/package.json +1 -1
  3. package/src/components/badge/_styles.scss +117 -109
  4. package/src/components/badge/api.ts +57 -59
  5. package/src/components/badge/badge.ts +16 -2
  6. package/src/components/badge/config.ts +65 -11
  7. package/src/components/badge/constants.ts +22 -12
  8. package/src/components/badge/features.ts +44 -40
  9. package/src/components/badge/types.ts +42 -30
  10. package/src/components/bottom-app-bar/_styles.scss +103 -0
  11. package/src/components/bottom-app-bar/bottom-app-bar.ts +196 -0
  12. package/src/components/bottom-app-bar/config.ts +73 -0
  13. package/src/components/bottom-app-bar/index.ts +11 -0
  14. package/src/components/bottom-app-bar/types.ts +108 -0
  15. package/src/components/button/_styles.scss +0 -10
  16. package/src/components/button/api.ts +5 -0
  17. package/src/components/button/config.ts +5 -0
  18. package/src/components/button/types.ts +6 -0
  19. package/src/components/card/card.ts +13 -25
  20. package/src/components/card/config.ts +67 -22
  21. package/src/components/card/features.ts +3 -0
  22. package/src/components/card/types.ts +28 -0
  23. package/src/components/checkbox/_styles.scss +0 -2
  24. package/src/components/datepicker/_styles.scss +358 -0
  25. package/src/components/datepicker/api.ts +272 -0
  26. package/src/components/datepicker/config.ts +144 -0
  27. package/src/components/datepicker/constants.ts +98 -0
  28. package/src/components/datepicker/datepicker.ts +346 -0
  29. package/src/components/datepicker/index.ts +9 -0
  30. package/src/components/datepicker/render.ts +452 -0
  31. package/src/components/datepicker/types.ts +268 -0
  32. package/src/components/datepicker/utils.ts +290 -0
  33. package/src/components/dialog/_styles.scss +174 -128
  34. package/src/components/dialog/api.ts +48 -13
  35. package/src/components/dialog/config.ts +9 -5
  36. package/src/components/dialog/dialog.ts +6 -3
  37. package/src/components/dialog/features.ts +290 -130
  38. package/src/components/dialog/types.ts +7 -4
  39. package/src/components/divider/_styles.scss +57 -0
  40. package/src/components/divider/config.ts +81 -0
  41. package/src/components/divider/divider.ts +37 -0
  42. package/src/components/divider/features.ts +207 -0
  43. package/src/components/divider/index.ts +5 -0
  44. package/src/components/divider/types.ts +55 -0
  45. package/src/components/extended-fab/_styles.scss +267 -0
  46. package/src/components/extended-fab/api.ts +141 -0
  47. package/src/components/extended-fab/config.ts +108 -0
  48. package/src/components/extended-fab/constants.ts +36 -0
  49. package/src/components/extended-fab/extended-fab.ts +125 -0
  50. package/src/components/extended-fab/index.ts +4 -0
  51. package/src/components/extended-fab/types.ts +287 -0
  52. package/src/components/fab/_styles.scss +225 -0
  53. package/src/components/fab/api.ts +97 -0
  54. package/src/components/fab/config.ts +94 -0
  55. package/src/components/fab/constants.ts +41 -0
  56. package/src/components/fab/fab.ts +67 -0
  57. package/src/components/fab/index.ts +4 -0
  58. package/src/components/fab/types.ts +234 -0
  59. package/src/components/navigation/_styles.scss +1 -0
  60. package/src/components/navigation/api.ts +78 -50
  61. package/src/components/navigation/features/items.ts +280 -0
  62. package/src/components/navigation/nav-item.ts +72 -23
  63. package/src/components/navigation/navigation.ts +54 -2
  64. package/src/components/navigation/types.ts +210 -188
  65. package/src/components/search/_styles.scss +306 -0
  66. package/src/components/search/api.ts +203 -0
  67. package/src/components/search/config.ts +87 -0
  68. package/src/components/search/constants.ts +21 -0
  69. package/src/components/search/features/index.ts +4 -0
  70. package/src/components/search/features/search.ts +718 -0
  71. package/src/components/search/features/states.ts +165 -0
  72. package/src/components/search/features/structure.ts +198 -0
  73. package/src/components/search/index.ts +10 -0
  74. package/src/components/search/search.ts +52 -0
  75. package/src/components/search/types.ts +163 -0
  76. package/src/components/segmented-button/_styles.scss +117 -0
  77. package/src/components/segmented-button/config.ts +67 -0
  78. package/src/components/segmented-button/constants.ts +42 -0
  79. package/src/components/segmented-button/index.ts +4 -0
  80. package/src/components/segmented-button/segment.ts +155 -0
  81. package/src/components/segmented-button/segmented-button.ts +250 -0
  82. package/src/components/segmented-button/types.ts +219 -0
  83. package/src/components/slider/_styles.scss +83 -24
  84. package/src/components/slider/accessibility.md +5 -5
  85. package/src/components/slider/api.ts +41 -120
  86. package/src/components/slider/config.ts +51 -47
  87. package/src/components/slider/features/handlers.ts +495 -0
  88. package/src/components/slider/features/index.ts +1 -2
  89. package/src/components/slider/features/slider.ts +66 -84
  90. package/src/components/slider/features/states.ts +195 -0
  91. package/src/components/slider/features/structure.ts +136 -206
  92. package/src/components/slider/features/ui.ts +145 -206
  93. package/src/components/slider/index.ts +2 -11
  94. package/src/components/slider/slider.ts +9 -12
  95. package/src/components/slider/types.ts +39 -24
  96. package/src/components/switch/_styles.scss +0 -2
  97. package/src/components/tabs/_styles.scss +94 -32
  98. package/src/components/tabs/features.ts +4 -2
  99. package/src/components/tabs/indicator.ts +73 -13
  100. package/src/components/tabs/types.ts +10 -2
  101. package/src/components/timepicker/README.md +277 -0
  102. package/src/components/timepicker/_styles.scss +451 -0
  103. package/src/components/timepicker/api.ts +632 -0
  104. package/src/components/timepicker/clockdial.ts +482 -0
  105. package/src/components/timepicker/config.ts +130 -0
  106. package/src/components/timepicker/constants.ts +138 -0
  107. package/src/components/timepicker/index.ts +8 -0
  108. package/src/components/timepicker/render.ts +613 -0
  109. package/src/components/timepicker/timepicker.ts +117 -0
  110. package/src/components/timepicker/types.ts +336 -0
  111. package/src/components/timepicker/utils.ts +241 -0
  112. package/src/components/top-app-bar/_styles.scss +225 -0
  113. package/src/components/top-app-bar/config.ts +83 -0
  114. package/src/components/top-app-bar/index.ts +11 -0
  115. package/src/components/top-app-bar/top-app-bar.ts +316 -0
  116. package/src/components/top-app-bar/types.ts +140 -0
  117. package/src/core/build/_ripple.scss +6 -6
  118. package/src/core/build/ripple.ts +72 -95
  119. package/src/core/compose/features/icon.ts +3 -1
  120. package/src/core/compose/features/ripple.ts +4 -1
  121. package/src/core/compose/features/textlabel.ts +26 -2
  122. package/src/core/dom/create.ts +5 -0
  123. package/src/index.ts +9 -0
  124. package/src/styles/abstract/_theme.scss +9 -1
  125. package/src/styles/themes/_autumn.scss +21 -0
  126. package/src/styles/themes/_base-theme.scss +61 -0
  127. package/src/styles/themes/_baseline.scss +58 -0
  128. package/src/styles/themes/_bluekhaki.scss +125 -0
  129. package/src/styles/themes/_brownbeige.scss +125 -0
  130. package/src/styles/themes/_browngreen.scss +125 -0
  131. package/src/styles/themes/_forest.scss +6 -0
  132. package/src/styles/themes/_greenbeige.scss +125 -0
  133. package/src/styles/themes/_material.scss +125 -0
  134. package/src/styles/themes/_ocean.scss +6 -0
  135. package/src/styles/themes/_sageivory.scss +125 -0
  136. package/src/styles/themes/_spring.scss +6 -0
  137. package/src/styles/themes/_summer.scss +5 -0
  138. package/src/styles/themes/_sunset.scss +5 -0
  139. package/src/styles/themes/_tealcaramel.scss +125 -0
  140. package/src/styles/themes/_winter.scss +6 -0
  141. package/src/components/navigation/features/items.js +0 -192
  142. package/src/components/slider/features/appearance.ts +0 -94
  143. package/src/components/slider/features/disabled.ts +0 -68
  144. package/src/components/slider/features/events.ts +0 -164
  145. package/src/components/slider/features/interactions.ts +0 -396
  146. package/src/components/slider/features/keyboard.ts +0 -233
  147. package/src/core/collection/adapters/mongodb.js +0 -232
@@ -1,94 +0,0 @@
1
- // src/components/slider/features/appearance.ts
2
- import { SLIDER_COLORS, SLIDER_SIZES } from '../constants';
3
- import { SliderConfig } from '../types';
4
-
5
- /**
6
- * Add appearance management features to slider component
7
- * @param config Slider configuration
8
- * @returns Component enhancer with appearance features
9
- */
10
- export const withAppearance = (config: SliderConfig) => component => {
11
- return {
12
- ...component,
13
- appearance: {
14
- /**
15
- * Sets slider color
16
- * @param color Color variant
17
- */
18
- setColor(color: keyof typeof SLIDER_COLORS | SLIDER_COLORS) {
19
- // Remove existing color classes
20
- Object.values(SLIDER_COLORS).forEach(colorName => {
21
- component.element.classList.remove(`${component.getClass('slider')}--${colorName}`);
22
- });
23
-
24
- // Add new color class if not primary (default)
25
- if (color !== SLIDER_COLORS.PRIMARY) {
26
- component.element.classList.add(`${component.getClass('slider')}--${color}`);
27
- }
28
- },
29
-
30
- /**
31
- * Gets slider color
32
- * @returns Current color name
33
- */
34
- getColor() {
35
- // Find which color class is active
36
- const colorClass = Object.values(SLIDER_COLORS).find(colorName =>
37
- component.element.classList.contains(`${component.getClass('slider')}--${colorName}`)
38
- );
39
-
40
- return colorClass || SLIDER_COLORS.PRIMARY;
41
- },
42
-
43
- /**
44
- * Sets slider size
45
- * @param size Size variant
46
- */
47
- setSize(size: keyof typeof SLIDER_SIZES | SLIDER_SIZES) {
48
- // Remove existing size classes
49
- Object.values(SLIDER_SIZES).forEach(sizeName => {
50
- component.element.classList.remove(`${component.getClass('slider')}--${sizeName}`);
51
- });
52
-
53
- // Add new size class if not medium (default)
54
- if (size !== SLIDER_SIZES.MEDIUM) {
55
- component.element.classList.add(`${component.getClass('slider')}--${size}`);
56
- }
57
- },
58
-
59
- /**
60
- * Gets slider size
61
- * @returns Current size name
62
- */
63
- getSize() {
64
- // Find which size class is active
65
- const sizeClass = Object.values(SLIDER_SIZES).find(sizeName =>
66
- component.element.classList.contains(`${component.getClass('slider')}--${sizeName}`)
67
- );
68
-
69
- return sizeClass || SLIDER_SIZES.MEDIUM;
70
- },
71
-
72
- /**
73
- * Shows or hides tick marks
74
- * @param show Whether to show ticks
75
- */
76
- showTicks(show: boolean) {
77
- config.ticks = show;
78
-
79
- // Regenerate ticks if slider is initialized
80
- if (component.slider) {
81
- component.slider.regenerateTicks();
82
- }
83
- },
84
-
85
- /**
86
- * Shows or hides current value bubble while dragging
87
- * @param show Whether to show value bubble
88
- */
89
- showCurrentValue(show: boolean) {
90
- config.showValue = show;
91
- }
92
- }
93
- };
94
- };
@@ -1,68 +0,0 @@
1
- // src/components/slider/features/disabled.ts
2
- import { SliderConfig } from '../types';
3
-
4
- /**
5
- * Add disabled state functionality to component
6
- * @param config Slider configuration
7
- * @returns Component enhancer with disabled functionality
8
- */
9
- export const withDisabled = (config: SliderConfig) => component => {
10
- // Initial disabled state
11
- const isDisabled = config.disabled === true;
12
-
13
- // Apply initial disabled state if needed
14
- if (isDisabled && component.structure) {
15
- setTimeout(() => {
16
- disableComponent();
17
- }, 0);
18
- }
19
-
20
- function disableComponent() {
21
- component.element.classList.add(`${component.getClass('slider')}--disabled`);
22
- component.element.setAttribute('aria-disabled', 'true');
23
-
24
- // Ensure thumbs cannot receive focus when disabled
25
- if (component.structure.thumb) {
26
- component.structure.thumb.tabIndex = -1;
27
- component.structure.thumb.setAttribute('aria-disabled', 'true');
28
- }
29
-
30
- if (config.range && component.structure.secondThumb) {
31
- component.structure.secondThumb.tabIndex = -1;
32
- component.structure.secondThumb.setAttribute('aria-disabled', 'true');
33
- }
34
- }
35
-
36
- function enableComponent() {
37
- component.element.classList.remove(`${component.getClass('slider')}--disabled`);
38
- component.element.setAttribute('aria-disabled', 'false');
39
-
40
- // Re-enable focus on thumbs
41
- if (component.structure.thumb) {
42
- component.structure.thumb.tabIndex = 0;
43
- component.structure.thumb.setAttribute('aria-disabled', 'false');
44
- }
45
-
46
- if (config.range && component.structure.secondThumb) {
47
- component.structure.secondThumb.tabIndex = 0;
48
- component.structure.secondThumb.setAttribute('aria-disabled', 'false');
49
- }
50
- }
51
-
52
- return {
53
- ...component,
54
- disabled: {
55
- enable() {
56
- enableComponent();
57
- },
58
-
59
- disable() {
60
- disableComponent();
61
- },
62
-
63
- isDisabled() {
64
- return component.element.classList.contains(`${component.getClass('slider')}--disabled`);
65
- }
66
- }
67
- };
68
- };
@@ -1,164 +0,0 @@
1
- // src/components/slider/features/events.ts
2
- import { SliderEvent } from '../types';
3
-
4
- /**
5
- * Create event helper functions for the slider component
6
- *
7
- * @param state Slider state object
8
- * @returns Event helper methods
9
- */
10
- export const createEventHelpers = (state) => {
11
- /**
12
- * Triggers a slider event
13
- * @param eventName Name of the event to trigger
14
- * @param originalEvent Original DOM event if applicable
15
- * @returns Event data object
16
- */
17
- const triggerEvent = (eventName, originalEvent = null) => {
18
- // Create event data object
19
- const eventData: SliderEvent = {
20
- slider: state.component,
21
- value: state.value,
22
- secondValue: state.secondValue,
23
- originalEvent,
24
- preventDefault: () => { eventData.defaultPrevented = true; },
25
- defaultPrevented: false
26
- };
27
-
28
- // Add a component events facade if it doesn't exist
29
- if (!state.component.events) {
30
- state.component.events = {
31
- trigger: () => {},
32
- on: () => {},
33
- off: () => {}
34
- };
35
- }
36
-
37
- // Now we can safely trigger the event
38
- state.component.events.trigger(eventName, eventData);
39
-
40
- return eventData;
41
- };
42
-
43
- /**
44
- * Set up event listeners for slider elements
45
- * @param interactionHandlers Mouse/touch interaction handlers
46
- * @param keyboardHandlers Keyboard interaction handlers
47
- */
48
- const setupEventListeners = (interactionHandlers, keyboardHandlers) => {
49
- // Ensure needed component parts exist
50
- if (!state.component || !state.component.structure) {
51
- console.warn('Cannot set up event listeners: component structure is missing');
52
- return;
53
- }
54
-
55
- const {
56
- track = null,
57
- thumb = null,
58
- secondThumb = null
59
- } = state.component.structure;
60
-
61
- if (!track || !thumb) {
62
- console.warn('Cannot set up event listeners: track or thumb is missing');
63
- return;
64
- }
65
-
66
- const {
67
- handleThumbMouseDown,
68
- handleTrackMouseDown
69
- } = interactionHandlers;
70
-
71
- const {
72
- handleKeyDown,
73
- handleFocus,
74
- handleBlur
75
- } = keyboardHandlers;
76
-
77
- // Track events
78
- track.addEventListener('mousedown', handleTrackMouseDown);
79
- track.addEventListener('touchstart', handleTrackMouseDown, { passive: false });
80
-
81
- // Thumb events
82
- thumb.addEventListener('mousedown', (e) => handleThumbMouseDown(e, false));
83
- thumb.addEventListener('touchstart', (e) => handleThumbMouseDown(e, false), { passive: false });
84
- thumb.addEventListener('keydown', (e) => handleKeyDown(e, false));
85
- thumb.addEventListener('focus', (e) => handleFocus(e, false));
86
- thumb.addEventListener('blur', (e) => handleBlur(e, false));
87
-
88
- // Second thumb events for range slider
89
- if (state.component.config && state.component.config.range && secondThumb) {
90
- secondThumb.addEventListener('mousedown', (e) => handleThumbMouseDown(e, true));
91
- secondThumb.addEventListener('touchstart', (e) => handleThumbMouseDown(e, true), { passive: false });
92
- secondThumb.addEventListener('keydown', (e) => handleKeyDown(e, true));
93
- secondThumb.addEventListener('focus', (e) => handleFocus(e, true));
94
- secondThumb.addEventListener('blur', (e) => handleBlur(e, true));
95
- }
96
- };
97
-
98
- /**
99
- * Clean up event listeners
100
- * @param interactionHandlers Mouse/touch interaction handlers
101
- * @param keyboardHandlers Keyboard interaction handlers
102
- */
103
- const cleanupEventListeners = (interactionHandlers, keyboardHandlers) => {
104
- // Ensure needed component parts exist
105
- if (!state.component || !state.component.structure) {
106
- return;
107
- }
108
-
109
- const {
110
- track = null,
111
- thumb = null,
112
- secondThumb = null
113
- } = state.component.structure;
114
-
115
- if (!track || !thumb) {
116
- return;
117
- }
118
-
119
- const {
120
- handleThumbMouseDown,
121
- handleTrackMouseDown,
122
- handleMouseMove,
123
- handleMouseUp
124
- } = interactionHandlers;
125
-
126
- const {
127
- handleKeyDown,
128
- handleFocus,
129
- handleBlur
130
- } = keyboardHandlers;
131
-
132
- // Track events
133
- track.removeEventListener('mousedown', handleTrackMouseDown);
134
- track.removeEventListener('touchstart', handleTrackMouseDown);
135
-
136
- // Thumb events
137
- thumb.removeEventListener('mousedown', (e) => handleThumbMouseDown(e, false));
138
- thumb.removeEventListener('touchstart', (e) => handleThumbMouseDown(e, false));
139
- thumb.removeEventListener('keydown', (e) => handleKeyDown(e, false));
140
- thumb.removeEventListener('focus', (e) => handleFocus(e, false));
141
- thumb.removeEventListener('blur', (e) => handleBlur(e, false));
142
-
143
- // Second thumb events
144
- if (state.component.config && state.component.config.range && secondThumb) {
145
- secondThumb.removeEventListener('mousedown', (e) => handleThumbMouseDown(e, true));
146
- secondThumb.removeEventListener('touchstart', (e) => handleThumbMouseDown(e, true));
147
- secondThumb.removeEventListener('keydown', (e) => handleKeyDown(e, true));
148
- secondThumb.removeEventListener('focus', (e) => handleFocus(e, true));
149
- secondThumb.removeEventListener('blur', (e) => handleBlur(e, true));
150
- }
151
-
152
- // Global events
153
- document.removeEventListener('mousemove', handleMouseMove);
154
- document.removeEventListener('mouseup', handleMouseUp);
155
- document.removeEventListener('touchmove', handleMouseMove);
156
- document.removeEventListener('touchend', handleMouseUp);
157
- };
158
-
159
- return {
160
- triggerEvent,
161
- setupEventListeners,
162
- cleanupEventListeners
163
- };
164
- };