@getcortexlabs/mavis-web 0.1.0-alpha.1 → 0.1.0-alpha.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 (44) hide show
  1. package/README.md +3 -3
  2. package/dist/appearance.d.ts +4 -0
  3. package/dist/appearance.d.ts.map +1 -0
  4. package/dist/appearance.js +23 -0
  5. package/dist/appearance.js.map +1 -0
  6. package/dist/components/MButton.d.ts +25 -7
  7. package/dist/components/MButton.d.ts.map +1 -1
  8. package/dist/components/MButton.js +30 -3
  9. package/dist/components/MButton.js.map +1 -1
  10. package/dist/components/MIcon.d.ts +55 -0
  11. package/dist/components/MIcon.d.ts.map +1 -0
  12. package/dist/components/MIcon.js +31 -0
  13. package/dist/components/MIcon.js.map +1 -0
  14. package/dist/components/MInput.d.ts +31 -13
  15. package/dist/components/MInput.d.ts.map +1 -1
  16. package/dist/components/MInput.js +87 -65
  17. package/dist/components/MInput.js.map +1 -1
  18. package/dist/components/MScreen.d.ts +9 -0
  19. package/dist/components/MScreen.d.ts.map +1 -1
  20. package/dist/components/MScreen.js +17 -0
  21. package/dist/components/MScreen.js.map +1 -1
  22. package/dist/components/MSheet.d.ts +96 -0
  23. package/dist/components/MSheet.d.ts.map +1 -0
  24. package/dist/components/MSheet.js +238 -0
  25. package/dist/components/MSheet.js.map +1 -0
  26. package/dist/index.d.ts +8 -6
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +11 -4
  29. package/dist/index.js.map +1 -1
  30. package/dist/style.d.ts.map +1 -1
  31. package/dist/style.js +24 -9
  32. package/dist/style.js.map +1 -1
  33. package/package.json +2 -2
  34. package/src/appearance.ts +23 -0
  35. package/src/components/MButton.ts +41 -3
  36. package/src/components/MIcon.ts +39 -0
  37. package/src/components/MInput.ts +88 -64
  38. package/src/components/MScreen.ts +14 -0
  39. package/src/components/MSheet.ts +268 -0
  40. package/src/fonts/LICENSE +45 -0
  41. package/src/fonts/lucide.woff2 +0 -0
  42. package/src/index.ts +37 -6
  43. package/src/style.css +87 -0
  44. package/src/style.ts +20 -9
@@ -1 +1 @@
1
- {"version":3,"file":"MScreen.js","sourceRoot":"","sources":["../../src/components/MScreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAC7D,OAAO,EACL,WAAW,EACX,aAAa,EACb,eAAe,EACf,SAAS,GACV,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,CAAC,MAAM,OAAO,GAAG,eAAe,CAAC;IACrC,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,KAAK;IACnB,KAAK,EAAE,WAAW;IAClB,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAA;QACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACrD,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;QAClC,OAAO,GAAG,EAAE,CACV,CAAC,CACC,MAAM,EACN,UAAU,CACR;YACE,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM;gBACf,aAAa,EAAE,QAAQ;gBACvB,SAAS,EAAE,YAAY;gBACvB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,QAAQ;gBACvE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,SAAS;gBACrE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC5C,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU;gBAC9C,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI;gBAC9B,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO;gBACvC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU;aACpC;SACF,EACD,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAC5C,EACD,KAAK,CAAC,OAAO,EAAE,EAAE,CAClB,CAAA;IACL,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"MScreen.js","sourceRoot":"","sources":["../../src/components/MScreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAC7D,OAAO,EACL,WAAW,EACX,aAAa,EACb,eAAe,EACf,SAAS,GACV,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,CAAC,MAAM,OAAO,GAAG,eAAe,CAAC;IACrC,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,KAAK;IACnB,KAAK,EAAE,WAAW;IAClB,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAA;QACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACrD,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;QAClC,2FAA2F;QAC3F,MAAM,eAAe,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC5C,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAM;YACnD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAA;YAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAA;YACrC,IAAI,CAAC,CAAC,MAAM,YAAY,WAAW,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM;gBAAE,OAAM;YAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;gBAAE,OAAM;YAC7E,MAAM,MAAM,GACV,MAAM,YAAY,gBAAgB;gBAClC,MAAM,YAAY,mBAAmB;gBACrC,MAAM,CAAC,iBAAiB,CAAA;YAC1B,IAAI,MAAM;gBAAE,MAAM,CAAC,IAAI,EAAE,CAAA;QAC3B,CAAC,CAAA;QACD,OAAO,GAAG,EAAE,CACV,CAAC,CACC,MAAM,EACN,UAAU,CACR;YACE,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,kBAAkB,EAAE,eAAe;YACnC,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM;gBACf,aAAa,EAAE,QAAQ;gBACvB,SAAS,EAAE,YAAY;gBACvB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,QAAQ;gBACvE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,SAAS;gBACrE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC5C,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU;gBAC9C,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI;gBAC9B,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO;gBACvC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU;aACpC;SACF,EACD,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAC5C,EACD,KAAK,CAAC,OAAO,EAAE,EAAE,CAClB,CAAA;IACL,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,96 @@
1
+ import { type SheetCloseReason } from '@getcortexlabs/mavis-core';
2
+ export declare const MSheet: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
+ id: {
4
+ type: StringConstructor;
5
+ default: undefined;
6
+ };
7
+ accessibilityLabel: {
8
+ type: StringConstructor;
9
+ default: undefined;
10
+ };
11
+ open: BooleanConstructor;
12
+ title: {
13
+ type: StringConstructor;
14
+ default: undefined;
15
+ };
16
+ dismissible: {
17
+ type: BooleanConstructor;
18
+ default: boolean;
19
+ };
20
+ fullscreen: BooleanConstructor;
21
+ closeLabel: {
22
+ type: StringConstructor;
23
+ default: string;
24
+ };
25
+ padding: {
26
+ default: string;
27
+ type: import("vue").PropType<import("@getcortexlabs/mavis-core").Spacing>;
28
+ };
29
+ gap: {
30
+ type: import("vue").PropType<import("@getcortexlabs/mavis-core").Spacing>;
31
+ default: undefined;
32
+ };
33
+ align: {
34
+ type: import("vue").PropType<import("@getcortexlabs/mavis-core/vue").Align>;
35
+ default: import("@getcortexlabs/mavis-core/vue").Align;
36
+ validator: (value: import("@getcortexlabs/mavis-core/vue").Align) => boolean;
37
+ };
38
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
39
+ [key: string]: any;
40
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
41
+ 'update:open': (value: boolean) => boolean;
42
+ close: (reason: SheetCloseReason) => boolean;
43
+ opened: () => boolean;
44
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
45
+ id: {
46
+ type: StringConstructor;
47
+ default: undefined;
48
+ };
49
+ accessibilityLabel: {
50
+ type: StringConstructor;
51
+ default: undefined;
52
+ };
53
+ open: BooleanConstructor;
54
+ title: {
55
+ type: StringConstructor;
56
+ default: undefined;
57
+ };
58
+ dismissible: {
59
+ type: BooleanConstructor;
60
+ default: boolean;
61
+ };
62
+ fullscreen: BooleanConstructor;
63
+ closeLabel: {
64
+ type: StringConstructor;
65
+ default: string;
66
+ };
67
+ padding: {
68
+ default: string;
69
+ type: import("vue").PropType<import("@getcortexlabs/mavis-core").Spacing>;
70
+ };
71
+ gap: {
72
+ type: import("vue").PropType<import("@getcortexlabs/mavis-core").Spacing>;
73
+ default: undefined;
74
+ };
75
+ align: {
76
+ type: import("vue").PropType<import("@getcortexlabs/mavis-core/vue").Align>;
77
+ default: import("@getcortexlabs/mavis-core/vue").Align;
78
+ validator: (value: import("@getcortexlabs/mavis-core/vue").Align) => boolean;
79
+ };
80
+ }>> & Readonly<{
81
+ onClose?: ((reason: SheetCloseReason) => any) | undefined;
82
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
83
+ onOpened?: (() => any) | undefined;
84
+ }>, {
85
+ padding: import("@getcortexlabs/mavis-core").Spacing;
86
+ id: string;
87
+ accessibilityLabel: string;
88
+ title: string;
89
+ gap: import("@getcortexlabs/mavis-core").Spacing;
90
+ align: import("@getcortexlabs/mavis-core/vue").Align;
91
+ fullscreen: boolean;
92
+ open: boolean;
93
+ dismissible: boolean;
94
+ closeLabel: string;
95
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
96
+ //# sourceMappingURL=MSheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MSheet.d.ts","sourceRoot":"","sources":["../../src/components/MSheet.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAgC,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAkB/F,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4EAwOjB,CAAA"}
@@ -0,0 +1,238 @@
1
+ import { defineComponent, h, nextTick, onBeforeUnmount, onMounted, provide, ref, useId, watch, } from 'vue';
2
+ import { sheetProps, sheetEmits, useMavisTheme, layoutDirection, } from '@getcortexlabs/mavis-core/vue';
3
+ import { checkSheetName, resolveSpace } from '@getcortexlabs/mavis-core';
4
+ import { MRow, MColumn, MBox } from './layout.js';
5
+ import { MText } from './MText.js';
6
+ import { MButton } from './MButton.js';
7
+ /** The longest duration in a `transition-duration` list, in milliseconds. */
8
+ function longestDuration(value) {
9
+ return Math.max(0, ...value.split(',').map((part) => {
10
+ const trimmed = part.trim();
11
+ const number = Number.parseFloat(trimmed);
12
+ if (!Number.isFinite(number))
13
+ return 0;
14
+ return trimmed.endsWith('ms') ? number : number * 1000;
15
+ }));
16
+ }
17
+ export const MSheet = defineComponent({
18
+ name: 'MSheet',
19
+ inheritAttrs: false,
20
+ props: sheetProps,
21
+ emits: sheetEmits,
22
+ setup(props, { slots, emit }) {
23
+ const { theme } = useMavisTheme();
24
+ provide(layoutDirection, 'column');
25
+ const titleId = `m-sheet-${useId()}`;
26
+ const dialog = ref();
27
+ const presented = ref(false);
28
+ const shown = ref(false);
29
+ let closing;
30
+ let generation = 0;
31
+ let timer;
32
+ let outside = false;
33
+ let opener;
34
+ const announce = (reason) => {
35
+ closing = reason;
36
+ emit('update:open', false);
37
+ emit('close', reason);
38
+ };
39
+ const request = (reason) => {
40
+ if (props.open && !closing)
41
+ announce(reason);
42
+ };
43
+ const focusable = (element) => [
44
+ ...element.querySelectorAll('button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"])'),
45
+ ].filter((control) => !control.closest('[inert]'));
46
+ // Engines differ on which control a modal dialog focuses first; start at the first control,
47
+ // or the panel itself, unless the content asked for focus with `autofocus`.
48
+ function focusInitial(element) {
49
+ if (typeof document === 'undefined')
50
+ return;
51
+ const active = document.activeElement;
52
+ if (active && active !== element && element.contains(active))
53
+ return;
54
+ const panel = element.querySelector('.m-sheet-panel');
55
+ if (panel)
56
+ panel.tabIndex = -1;
57
+ (focusable(element)[0] ?? panel)?.focus({ preventScroll: true });
58
+ }
59
+ // A modal dialog makes the page inert, yet Tab can still leave for the browser's own controls.
60
+ function trapTab(event) {
61
+ const element = dialog.value;
62
+ if (event.key !== 'Tab' || !element)
63
+ return;
64
+ const controls = focusable(element);
65
+ const first = controls[0];
66
+ const last = controls[controls.length - 1];
67
+ if (!first || !last)
68
+ return;
69
+ const active = document.activeElement;
70
+ if (event.shiftKey && (active === first || active === element)) {
71
+ event.preventDefault();
72
+ last.focus();
73
+ }
74
+ else if (!event.shiftKey && active === last) {
75
+ event.preventDefault();
76
+ first.focus();
77
+ }
78
+ }
79
+ // The dialog restores focus when it closes; some engines leave it on the body instead.
80
+ function restoreFocus() {
81
+ const target = opener;
82
+ opener = undefined;
83
+ const active = typeof document === 'undefined' ? null : document.activeElement;
84
+ if (target?.isConnected && (!active || active === document.body))
85
+ target.focus({ preventScroll: true });
86
+ }
87
+ function present() {
88
+ const current = ++generation;
89
+ clearTimeout(timer);
90
+ presented.value = true;
91
+ if (typeof document !== 'undefined' && document.activeElement instanceof HTMLElement)
92
+ opener = document.activeElement;
93
+ nextTick(() => {
94
+ const element = dialog.value;
95
+ if (generation !== current || !element)
96
+ return;
97
+ if (typeof element.showModal === 'function' && !element.open)
98
+ element.showModal();
99
+ focusInitial(element);
100
+ // Resolve the offscreen position before the open class so the entrance transitions.
101
+ element.getBoundingClientRect?.();
102
+ shown.value = true;
103
+ });
104
+ }
105
+ function leave() {
106
+ const element = dialog.value;
107
+ const current = ++generation;
108
+ shown.value = false;
109
+ let release = () => { };
110
+ const finish = () => {
111
+ if (generation !== current)
112
+ return;
113
+ clearTimeout(timer);
114
+ release();
115
+ if (element?.open)
116
+ element.close();
117
+ presented.value = false;
118
+ closing = undefined;
119
+ restoreFocus();
120
+ };
121
+ const duration = element && typeof getComputedStyle === 'function'
122
+ ? longestDuration(getComputedStyle(element).transitionDuration)
123
+ : 0;
124
+ if (!duration || !element) {
125
+ finish();
126
+ return;
127
+ }
128
+ const ended = (event) => {
129
+ if (event.target === element)
130
+ finish();
131
+ };
132
+ element.addEventListener('transitionend', ended);
133
+ release = () => element.removeEventListener('transitionend', ended);
134
+ timer = setTimeout(finish, duration + 100);
135
+ }
136
+ watch(() => props.open, (open) => {
137
+ if (open) {
138
+ closing = undefined;
139
+ present();
140
+ }
141
+ else if (presented.value) {
142
+ if (!closing) {
143
+ closing = 'program';
144
+ emit('close', 'program');
145
+ }
146
+ leave();
147
+ }
148
+ });
149
+ onMounted(() => {
150
+ if (props.open)
151
+ present();
152
+ });
153
+ onBeforeUnmount(() => {
154
+ generation++;
155
+ clearTimeout(timer);
156
+ });
157
+ return () => {
158
+ checkSheetName(props.title, props.accessibilityLabel);
159
+ const { colors, radius, space } = theme.value;
160
+ const header = props.title || props.dismissible
161
+ ? h(MRow, { gap: 'sm', justify: 'between' }, {
162
+ default: () => [
163
+ props.title
164
+ ? h(MText, {
165
+ as: 'h2',
166
+ variant: 'heading',
167
+ grow: 1,
168
+ id: titleId,
169
+ text: props.title,
170
+ })
171
+ : h(MBox, { grow: 1 }),
172
+ props.dismissible
173
+ ? h(MButton, {
174
+ variant: 'ghost',
175
+ size: 'sm',
176
+ icon: 'x',
177
+ shrink: 0,
178
+ accessibilityLabel: props.closeLabel,
179
+ onClick: () => request('button'),
180
+ })
181
+ : null,
182
+ ],
183
+ })
184
+ : null;
185
+ return h('dialog', {
186
+ ref: dialog,
187
+ id: props.id,
188
+ class: ['m-sheet', { 'm-sheet-open': shown.value, 'm-sheet-full': props.fullscreen }],
189
+ 'aria-labelledby': props.title ? titleId : undefined,
190
+ 'aria-label': props.title ? undefined : props.accessibilityLabel,
191
+ style: {
192
+ '--m-sheet-surface': colors.surface,
193
+ '--m-sheet-radius': `${radius.lg}px`,
194
+ '--m-focus': colors.primary,
195
+ color: colors.text,
196
+ colorScheme: theme.value.appearance,
197
+ },
198
+ onCancel: (event) => {
199
+ // The browser would close at once; the sheet leaves through its own transition.
200
+ event.preventDefault();
201
+ if (props.dismissible)
202
+ request('escape');
203
+ },
204
+ onClose: () => {
205
+ // Closed by the browser itself: keep the bound state in step.
206
+ if (props.open && !closing)
207
+ announce('escape');
208
+ shown.value = false;
209
+ presented.value = false;
210
+ restoreFocus();
211
+ },
212
+ onKeydown: trapTab,
213
+ onPointerdown: (event) => {
214
+ outside = event.target === event.currentTarget;
215
+ },
216
+ onClick: (event) => {
217
+ if (outside && event.target === event.currentTarget && props.dismissible)
218
+ request('backdrop');
219
+ outside = false;
220
+ },
221
+ }, presented.value
222
+ ? [
223
+ h('div', {
224
+ class: 'm-sheet-panel',
225
+ style: {
226
+ padding: `${resolveSpace(theme.value, props.padding ?? 'lg')}px`,
227
+ gap: `${space.md}px`,
228
+ },
229
+ }, [
230
+ header,
231
+ h(MColumn, { class: 'm-sheet-body', shrink: 1, gap: props.gap, align: props.align }, { default: () => slots.default?.() }),
232
+ ]),
233
+ ]
234
+ : undefined);
235
+ };
236
+ },
237
+ });
238
+ //# sourceMappingURL=MSheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MSheet.js","sourceRoot":"","sources":["../../src/components/MSheet.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { App } from 'vue';
2
- import { type MavisTheme } from '@getcortexlabs/mavis-core';
2
+ import { type ThemeContextOptions } from '@getcortexlabs/mavis-core/vue';
3
3
  import { MScreen } from './components/MScreen.js';
4
4
  import { MBox, MRow, MColumn } from './components/layout.js';
5
5
  import { MCard } from './components/MCard.js';
@@ -7,15 +7,17 @@ import { MText } from './components/MText.js';
7
7
  import { MButton } from './components/MButton.js';
8
8
  import { MSlider } from './components/MSlider.js';
9
9
  import { MInput } from './components/MInput.js';
10
+ import { MIcon } from './components/MIcon.js';
10
11
  import { MReveal } from './components/MReveal.js';
11
- export { MScreen, MBox, MRow, MColumn, MCard, MText, MButton, MSlider, MInput, MReveal };
12
+ import { MSheet } from './components/MSheet.js';
13
+ export { MScreen, MBox, MRow, MColumn, MCard, MText, MButton, MSlider, MInput, MIcon, MReveal, MSheet, };
12
14
  export { useMavisTheme } from '@getcortexlabs/mavis-core/vue';
13
- export type { MavisThemeContext } from '@getcortexlabs/mavis-core/vue';
15
+ export type { MavisThemeContext, Appearance, AppearanceMode, AppearanceSource, } from '@getcortexlabs/mavis-core/vue';
14
16
  export type { Align, Justify } from './components/layout.js';
15
17
  export * from '@getcortexlabs/mavis-core';
16
- export declare function createMavis(options?: {
17
- theme?: MavisTheme;
18
- }): {
18
+ export type MavisOptions = Omit<ThemeContextOptions, 'source'>;
19
+ /** Create one plugin per application; `system` appearance follows `prefers-color-scheme`. */
20
+ export declare function createMavis(options?: MavisOptions): {
19
21
  install(app: App): void;
20
22
  };
21
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC9B,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAElE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAEjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACtE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC5D,cAAc,2BAA2B,CAAA;AAEzC,wBAAgB,WAAW,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,UAAU,CAAA;CAAO;iBAE/C,GAAG;EAkBnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC9B,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE/C,OAAO,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,MAAM,GACP,CAAA;AACD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,gBAAgB,GACjB,MAAM,+BAA+B,CAAA;AACtC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC5D,cAAc,2BAA2B,CAAA;AAEzC,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAA;AAE9D,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,OAAO,GAAE,YAAiB;iBAErC,GAAG;EAsBnB"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { mavis } from '@getcortexlabs/mavis-core';
2
- import { createThemeContext, themeKey } from '@getcortexlabs/mavis-core/vue';
1
+ import { createThemeContext, themeKey, } from '@getcortexlabs/mavis-core/vue';
2
+ import { systemAppearance } from './appearance.js';
3
3
  import { MScreen } from './components/MScreen.js';
4
4
  import { MBox, MRow, MColumn } from './components/layout.js';
5
5
  import { MCard } from './components/MCard.js';
@@ -7,14 +7,19 @@ import { MText } from './components/MText.js';
7
7
  import { MButton } from './components/MButton.js';
8
8
  import { MSlider } from './components/MSlider.js';
9
9
  import { MInput } from './components/MInput.js';
10
+ import { MIcon } from './components/MIcon.js';
10
11
  import { MReveal } from './components/MReveal.js';
11
- export { MScreen, MBox, MRow, MColumn, MCard, MText, MButton, MSlider, MInput, MReveal };
12
+ import { MSheet } from './components/MSheet.js';
13
+ export { MScreen, MBox, MRow, MColumn, MCard, MText, MButton, MSlider, MInput, MIcon, MReveal, MSheet, };
12
14
  export { useMavisTheme } from '@getcortexlabs/mavis-core/vue';
13
15
  export * from '@getcortexlabs/mavis-core';
16
+ /** Create one plugin per application; `system` appearance follows `prefers-color-scheme`. */
14
17
  export function createMavis(options = {}) {
15
18
  return {
16
19
  install(app) {
17
- app.provide(themeKey, createThemeContext(options.theme ?? mavis));
20
+ const context = createThemeContext({ ...options, source: systemAppearance() });
21
+ app.provide(themeKey, context);
22
+ app.onUnmount(() => context.dispose());
18
23
  for (const [name, component] of Object.entries({
19
24
  MScreen,
20
25
  MBox,
@@ -25,7 +30,9 @@ export function createMavis(options = {}) {
25
30
  MButton,
26
31
  MSlider,
27
32
  MInput,
33
+ MIcon,
28
34
  MReveal,
35
+ MSheet,
29
36
  })) {
30
37
  app.component(name, component);
31
38
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAmB,MAAM,2BAA2B,CAAA;AAClE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAEjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAG7D,cAAc,2BAA2B,CAAA;AAEzC,MAAM,UAAU,WAAW,CAAC,UAAkC,EAAE;IAC9D,OAAO;QACL,OAAO,CAAC,GAAQ;YACd,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAA;YACjE,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;gBAC7C,OAAO;gBACP,IAAI;gBACJ,IAAI;gBACJ,OAAO;gBACP,KAAK;gBACL,KAAK;gBACL,OAAO;gBACP,OAAO;gBACP,MAAM;gBACN,OAAO;aACR,CAAC,EAAE,CAAC;gBACH,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,QAAQ,GAET,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE/C,OAAO,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,MAAM,GACP,CAAA;AACD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAQ7D,cAAc,2BAA2B,CAAA;AAIzC,6FAA6F;AAC7F,MAAM,UAAU,WAAW,CAAC,UAAwB,EAAE;IACpD,OAAO;QACL,OAAO,CAAC,GAAQ;YACd,MAAM,OAAO,GAAG,kBAAkB,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAA;YAC9E,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC9B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YACtC,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;gBAC7C,OAAO;gBACP,IAAI;gBACJ,IAAI;gBACJ,OAAO;gBACP,KAAK;gBACL,KAAK;gBACL,OAAO;gBACP,OAAO;gBACP,MAAM;gBACN,KAAK;gBACL,OAAO;gBACP,MAAM;aACP,CAAC,EAAE,CAAC;gBACH,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAExC,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,sBAExD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,SAAI,GAAG,aAAa,CAe7F;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;EAUtD"}
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAExC,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,sBAExD;AAGD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,SAAI,GAAG,aAAa,CAyB7F;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;EAUtD"}
package/dist/style.js CHANGED
@@ -2,21 +2,36 @@ import { resolveSpace, resolveRadius, resolveDimension, nonNegative, } from '@ge
2
2
  export function length(value) {
3
3
  return typeof value === 'number' ? `${value}px` : value;
4
4
  }
5
+ // A prop that was not given leaves its style untouched, so the host's CSS keeps applying.
5
6
  export function boxStyle(theme, props, defaultShrink = 0) {
6
- const padding = resolveSpace(theme, props.padding ?? 'none');
7
- const x = props.paddingX === undefined ? padding : resolveSpace(theme, props.paddingX);
8
- const y = props.paddingY === undefined ? padding : resolveSpace(theme, props.paddingY);
9
- return {
7
+ const style = {
10
8
  boxSizing: 'border-box',
11
- padding: `${y}px ${x}px`,
12
- borderRadius: length(resolveRadius(theme, props.radius)),
13
9
  flexGrow: nonNegative(props.grow, 'grow'),
14
10
  flexShrink: nonNegative(props.shrink ?? defaultShrink, 'shrink'),
15
11
  minWidth: 0,
16
- width: length(resolveDimension(props.width)),
17
- height: length(resolveDimension(props.height)),
18
- backgroundColor: props.backgroundColor,
19
12
  };
13
+ const padding = props.padding === undefined ? undefined : resolveSpace(theme, props.padding);
14
+ const x = props.paddingX === undefined ? padding : resolveSpace(theme, props.paddingX);
15
+ const y = props.paddingY === undefined ? padding : resolveSpace(theme, props.paddingY);
16
+ if (x !== undefined) {
17
+ style.paddingLeft = `${x}px`;
18
+ style.paddingRight = `${x}px`;
19
+ }
20
+ if (y !== undefined) {
21
+ style.paddingTop = `${y}px`;
22
+ style.paddingBottom = `${y}px`;
23
+ }
24
+ if (props.radius !== undefined)
25
+ style.borderRadius = length(resolveRadius(theme, props.radius));
26
+ const width = length(resolveDimension(props.width));
27
+ if (width !== undefined)
28
+ style.width = width;
29
+ const height = length(resolveDimension(props.height));
30
+ if (height !== undefined)
31
+ style.height = height;
32
+ if (props.backgroundColor !== undefined)
33
+ style.backgroundColor = props.backgroundColor;
34
+ return style;
20
35
  }
21
36
  /** Native accessibility labels have the same meaning on the DOM renderer. */
22
37
  export function webAttrs(attrs) {
package/dist/style.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,WAAW,GAEZ,MAAM,2BAA2B,CAAA;AAIlC,MAAM,UAAU,MAAM,CAAC,KAAkC;IACvD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAiB,EAAE,KAAe,EAAE,aAAa,GAAG,CAAC;IAC5E,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,CAAA;IAC5D,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IACtF,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IACtF,OAAO;QACL,SAAS,EAAE,YAAY;QACvB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI;QACxB,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACxD,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;QACzC,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,IAAI,aAAa,EAAE,QAAQ,CAAC;QAChE,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9C,eAAe,EAAE,KAAK,CAAC,eAAe;KACvC,CAAA;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,QAAQ,CAAC,KAA8B;IACrD,MAAM,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAA;IACtF,OAAO;QACL,GAAG,IAAI;QACP,GAAG,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC;QACjF,GAAG,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;QACrF,GAAG,CAAC,mBAAmB,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,aAAa,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,IAAI,SAAS,EAAE,CAAC;KACrF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getcortexlabs/mavis-web",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.1.0-alpha.3",
4
4
  "description": "Mavis components for Vue Web.",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -26,7 +26,7 @@
26
26
  "build": "tsc -p tsconfig.build.json"
27
27
  },
28
28
  "dependencies": {
29
- "@getcortexlabs/mavis-core": "0.1.0-alpha.1"
29
+ "@getcortexlabs/mavis-core": "0.1.0-alpha.3"
30
30
  },
31
31
  "peerDependencies": {
32
32
  "vue": "^3.5.42"
@@ -0,0 +1,23 @@
1
+ import type { AppearanceSource } from '@getcortexlabs/mavis-core/vue'
2
+
3
+ function query() {
4
+ if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return undefined
5
+ return window.matchMedia('(prefers-color-scheme: dark)')
6
+ }
7
+
8
+ /** `prefers-color-scheme`, read only when called so server builds never touch `window`. */
9
+ export function systemAppearance(): AppearanceSource {
10
+ return {
11
+ current() {
12
+ const media = query()
13
+ return media ? (media.matches ? 'dark' : 'light') : undefined
14
+ },
15
+ observe(listener) {
16
+ const media = query()
17
+ if (!media) return () => {}
18
+ const handler = (event: MediaQueryListEvent) => listener(event.matches ? 'dark' : 'light')
19
+ media.addEventListener('change', handler)
20
+ return () => media.removeEventListener('change', handler)
21
+ },
22
+ }
23
+ }
@@ -7,7 +7,13 @@ import {
7
7
  useDefaultShrink,
8
8
  viewAttrs,
9
9
  } from '@getcortexlabs/mavis-core/vue'
10
- import { nonNegative } from '@getcortexlabs/mavis-core'
10
+ import {
11
+ nonNegative,
12
+ iconGlyph,
13
+ iconFontFamily,
14
+ iconSizes,
15
+ checkIconOnly,
16
+ } from '@getcortexlabs/mavis-core'
11
17
  import { webAttrs } from '../style.js'
12
18
 
13
19
  export const MButton = defineComponent({
@@ -25,6 +31,32 @@ export const MButton = defineComponent({
25
31
  const text = props.loading
26
32
  ? props.loadingText
27
33
  : (props.text ?? textContent(slots.default?.()))
34
+ const hasIcon = Boolean(props.icon || props.trailingIcon)
35
+ checkIconOnly(text, hasIcon, props.accessibilityLabel)
36
+ const iconSize = iconSizes[props.size]
37
+ const paddingX = hasIcon && !text ? Math.round((size.height - iconSize) / 2) : size.padding
38
+ const span = (name: typeof props.icon) =>
39
+ name
40
+ ? h(
41
+ 'span',
42
+ {
43
+ class: 'm-icon',
44
+ 'aria-hidden': 'true',
45
+ style: {
46
+ fontFamily: iconFontFamily,
47
+ fontSize: `${iconSize}px`,
48
+ width: `${iconSize}px`,
49
+ height: `${iconSize}px`,
50
+ lineHeight: 1,
51
+ display: 'inline-flex',
52
+ alignItems: 'center',
53
+ justifyContent: 'center',
54
+ flexShrink: 0,
55
+ },
56
+ },
57
+ iconGlyph(name),
58
+ )
59
+ : null
28
60
  return h(
29
61
  'button',
30
62
  mergeProps(
@@ -32,8 +64,12 @@ export const MButton = defineComponent({
32
64
  class: 'm-button',
33
65
  style: {
34
66
  boxSizing: 'border-box',
67
+ display: 'inline-flex',
68
+ alignItems: 'center',
69
+ justifyContent: 'center',
70
+ gap: hasIcon ? '8px' : undefined,
35
71
  minHeight: `${size.height}px`,
36
- padding: `12px ${size.padding}px`,
72
+ padding: `12px ${paddingX}px`,
37
73
  fontSize: `${size.fontSize}px`,
38
74
  fontWeight: 600,
39
75
  fontFamily: 'inherit',
@@ -66,7 +102,9 @@ export const MButton = defineComponent({
66
102
  },
67
103
  },
68
104
  ),
69
- text,
105
+ hasIcon
106
+ ? [span(props.icon), text ? h('span', {}, text) : null, span(props.trailingIcon)]
107
+ : text,
70
108
  )
71
109
  }
72
110
  },