@momentum-design/components 0.0.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 (235) hide show
  1. package/.eslintrc.js +16 -0
  2. package/CONTRIBUTING.md +5 -0
  3. package/README.md +39 -0
  4. package/SCRIPTS.md +15 -0
  5. package/TESTING.md +38 -0
  6. package/config/api-extractor.json +33 -0
  7. package/config/custom-elements-manifest.config.js +28 -0
  8. package/config/esbuild/configs/browser.js +21 -0
  9. package/config/esbuild/configs/e2e.js +10 -0
  10. package/config/esbuild/esbuild-e2e.config.js +22 -0
  11. package/config/esbuild/esbuild.config.js +9 -0
  12. package/config/playwright/playwright.config.ts +107 -0
  13. package/config/playwright/public/index.css +43 -0
  14. package/config/playwright/public/index.html +26 -0
  15. package/config/playwright/setup/Components.page.ts +163 -0
  16. package/config/playwright/setup/constants.ts +27 -0
  17. package/config/playwright/setup/index.ts +42 -0
  18. package/config/playwright/setup/steps/accessibility.ts +9 -0
  19. package/config/playwright/setup/types.ts +5 -0
  20. package/config/playwright/setup/utils/accessibility.ts +70 -0
  21. package/config/playwright/setup/utils/visual-regression.ts +35 -0
  22. package/config/plop/actions/AddComponent.ts +21 -0
  23. package/config/plop/actions/AddToComponentExports.ts +16 -0
  24. package/config/plop/actions/AddToComponentImports.ts +16 -0
  25. package/config/plop/constants/index.ts +31 -0
  26. package/config/plop/esbuild.config.plop.js +4 -0
  27. package/config/plop/generators/component/index.ts +25 -0
  28. package/config/plop/plopfile.ts +6 -0
  29. package/config/plop/prompts/index.ts +8 -0
  30. package/config/plop/templates/add/component/index.ts.hbs +12 -0
  31. package/config/plop/templates/add/component/{{componentName}}.component.ts.hbs +22 -0
  32. package/config/plop/templates/add/component/{{componentName}}.constants.ts.hbs +5 -0
  33. package/config/plop/templates/add/component/{{componentName}}.e2e-test.ts.hbs +67 -0
  34. package/config/plop/templates/add/component/{{componentName}}.fixtures.ts.hbs +13 -0
  35. package/config/plop/templates/add/component/{{componentName}}.stories.ts.hbs +18 -0
  36. package/config/plop/templates/add/component/{{componentName}}.styles.ts.hbs +8 -0
  37. package/config/plop/tsconfig.plop.json +11 -0
  38. package/config/storybook/MomentumStorybookTheme.js +41 -0
  39. package/config/storybook/main.js +21 -0
  40. package/config/storybook/manager.js +17 -0
  41. package/config/storybook/preview.js +63 -0
  42. package/config/storybook/provider/iconProvider.js +8 -0
  43. package/config/storybook/provider/themeProvider.js +31 -0
  44. package/config/storybook/public/background-graphic.png +0 -0
  45. package/config/storybook/public/fonts/Inter.var.woff2 +0 -0
  46. package/config/storybook/public/momentum-logo.png +0 -0
  47. package/config/storybook/themes/index.js +14 -0
  48. package/config/storybook/themes/themes.css +15 -0
  49. package/data/custom-elements.json +677 -0
  50. package/dist/browser/index.js +366 -0
  51. package/dist/browser/index.js.map +7 -0
  52. package/dist/components/avatar/avatar.component.d.ts +28 -0
  53. package/dist/components/avatar/avatar.component.js +79 -0
  54. package/dist/components/avatar/avatar.constants.d.ts +7 -0
  55. package/dist/components/avatar/avatar.constants.js +14 -0
  56. package/dist/components/avatar/avatar.styles.d.ts +2 -0
  57. package/dist/components/avatar/avatar.styles.js +20 -0
  58. package/dist/components/avatar/avatar.types.d.ts +1 -0
  59. package/dist/components/avatar/avatar.types.js +2 -0
  60. package/dist/components/avatar/index.d.ts +7 -0
  61. package/dist/components/avatar/index.js +7 -0
  62. package/dist/components/badge/badge.component.d.ts +51 -0
  63. package/dist/components/badge/badge.component.js +114 -0
  64. package/dist/components/badge/badge.constants.d.ts +8 -0
  65. package/dist/components/badge/badge.constants.js +15 -0
  66. package/dist/components/badge/badge.styles.d.ts +2 -0
  67. package/dist/components/badge/badge.styles.js +26 -0
  68. package/dist/components/badge/badge.types.d.ts +1 -0
  69. package/dist/components/badge/badge.types.js +2 -0
  70. package/dist/components/badge/index.d.ts +7 -0
  71. package/dist/components/badge/index.js +7 -0
  72. package/dist/components/icon/icon.component.d.ts +63 -0
  73. package/dist/components/icon/icon.component.js +158 -0
  74. package/dist/components/icon/icon.constants.d.ts +6 -0
  75. package/dist/components/icon/icon.constants.js +12 -0
  76. package/dist/components/icon/icon.styles.d.ts +2 -0
  77. package/dist/components/icon/icon.styles.js +15 -0
  78. package/dist/components/icon/icon.utils.d.ts +2 -0
  79. package/dist/components/icon/icon.utils.js +13 -0
  80. package/dist/components/icon/index.d.ts +7 -0
  81. package/dist/components/icon/index.js +7 -0
  82. package/dist/components/iconprovider/iconprovider.component.d.ts +34 -0
  83. package/dist/components/iconprovider/iconprovider.component.js +71 -0
  84. package/dist/components/iconprovider/iconprovider.constants.d.ts +7 -0
  85. package/dist/components/iconprovider/iconprovider.constants.js +14 -0
  86. package/dist/components/iconprovider/iconprovider.context.d.ts +9 -0
  87. package/dist/components/iconprovider/iconprovider.context.js +9 -0
  88. package/dist/components/iconprovider/index.d.ts +7 -0
  89. package/dist/components/iconprovider/index.js +7 -0
  90. package/dist/components/text/fonts.styles.d.ts +1 -0
  91. package/dist/components/text/fonts.styles.js +100 -0
  92. package/dist/components/text/index.d.ts +7 -0
  93. package/dist/components/text/index.js +7 -0
  94. package/dist/components/text/text.component.d.ts +29 -0
  95. package/dist/components/text/text.component.js +41 -0
  96. package/dist/components/text/text.constants.d.ts +9 -0
  97. package/dist/components/text/text.constants.js +28 -0
  98. package/dist/components/text/text.styles.d.ts +2 -0
  99. package/dist/components/text/text.styles.js +17 -0
  100. package/dist/components/text/text.types.d.ts +1 -0
  101. package/dist/components/text/text.types.js +2 -0
  102. package/dist/components/text/text.utils.d.ts +20 -0
  103. package/dist/components/text/text.utils.js +50 -0
  104. package/dist/components/themeprovider/index.d.ts +7 -0
  105. package/dist/components/themeprovider/index.js +7 -0
  106. package/dist/components/themeprovider/themeprovider.component.d.ts +48 -0
  107. package/dist/components/themeprovider/themeprovider.component.js +86 -0
  108. package/dist/components/themeprovider/themeprovider.constants.d.ts +10 -0
  109. package/dist/components/themeprovider/themeprovider.constants.js +31 -0
  110. package/dist/components/themeprovider/themeprovider.context.d.ts +9 -0
  111. package/dist/components/themeprovider/themeprovider.context.js +13 -0
  112. package/dist/components/themeprovider/themeprovider.styles.d.ts +2 -0
  113. package/dist/components/themeprovider/themeprovider.styles.js +13 -0
  114. package/dist/components/themeprovider/themeprovider.types.d.ts +5 -0
  115. package/dist/components/themeprovider/themeprovider.types.js +2 -0
  116. package/dist/components/themeprovider/themeprovider.utils.d.ts +9 -0
  117. package/dist/components/themeprovider/themeprovider.utils.js +10 -0
  118. package/dist/index.d.ts +8 -0
  119. package/dist/index.js +19 -0
  120. package/dist/models/component/component.component.d.ts +38 -0
  121. package/dist/models/component/component.component.js +45 -0
  122. package/dist/models/component/component.types.d.ts +15 -0
  123. package/dist/models/component/component.types.js +2 -0
  124. package/dist/models/component/index.d.ts +3 -0
  125. package/dist/models/component/index.js +5 -0
  126. package/dist/models/index.d.ts +4 -0
  127. package/dist/models/index.js +8 -0
  128. package/dist/models/provider/index.d.ts +2 -0
  129. package/dist/models/provider/index.js +5 -0
  130. package/dist/models/provider/provider.component.d.ts +70 -0
  131. package/dist/models/provider/provider.component.js +56 -0
  132. package/dist/models/provider/provider.styles.d.ts +2 -0
  133. package/dist/models/provider/provider.styles.js +14 -0
  134. package/dist/utils/provider/index.d.ts +13 -0
  135. package/dist/utils/provider/index.js +14 -0
  136. package/dist/utils/styles/index.d.ts +2 -0
  137. package/dist/utils/styles/index.js +14 -0
  138. package/dist/utils/tag-name/constants.d.ts +7 -0
  139. package/dist/utils/tag-name/constants.js +10 -0
  140. package/dist/utils/tag-name/index.d.ts +4 -0
  141. package/dist/utils/tag-name/index.js +10 -0
  142. package/dist/utils/types.d.ts +1 -0
  143. package/dist/utils/types.js +2 -0
  144. package/jest.config.js +3 -0
  145. package/package.json +78 -0
  146. package/scripts/copyFonts.js +31 -0
  147. package/scripts/copyIcons.js +31 -0
  148. package/scripts/copyTokens.js +24 -0
  149. package/src/components/avatar/__screenshots__/mdc-avatar.png +0 -0
  150. package/src/components/avatar/avatar.component.ts +74 -0
  151. package/src/components/avatar/avatar.constants.ts +12 -0
  152. package/src/components/avatar/avatar.e2e-test.ts +70 -0
  153. package/src/components/avatar/avatar.stories.ts +25 -0
  154. package/src/components/avatar/avatar.styles.ts +20 -0
  155. package/src/components/avatar/avatar.types.ts +1 -0
  156. package/src/components/avatar/index.ts +12 -0
  157. package/src/components/badge/__screenshots__/mdc-badge.png +0 -0
  158. package/src/components/badge/badge.component.ts +121 -0
  159. package/src/components/badge/badge.constants.ts +13 -0
  160. package/src/components/badge/badge.e2e-test.ts +68 -0
  161. package/src/components/badge/badge.stories.ts +33 -0
  162. package/src/components/badge/badge.styles.ts +26 -0
  163. package/src/components/badge/badge.types.ts +1 -0
  164. package/src/components/badge/index.ts +12 -0
  165. package/src/components/icon/__screenshots__/mdc-icon-default.png +0 -0
  166. package/src/components/icon/__screenshots__/mdc-icon-scale.png +0 -0
  167. package/src/components/icon/icon.component.ts +155 -0
  168. package/src/components/icon/icon.constants.ts +10 -0
  169. package/src/components/icon/icon.e2e-test.ts +101 -0
  170. package/src/components/icon/icon.stories.ts +34 -0
  171. package/src/components/icon/icon.styles.ts +15 -0
  172. package/src/components/icon/icon.utils.ts +13 -0
  173. package/src/components/icon/index.ts +12 -0
  174. package/src/components/iconprovider/__screenshots__/mdc-iconprovider.png +0 -0
  175. package/src/components/iconprovider/iconprovider.component.ts +76 -0
  176. package/src/components/iconprovider/iconprovider.constants.ts +12 -0
  177. package/src/components/iconprovider/iconprovider.context.ts +16 -0
  178. package/src/components/iconprovider/iconprovider.e2e-test.ts +65 -0
  179. package/src/components/iconprovider/iconprovider.stories.ts +27 -0
  180. package/src/components/iconprovider/iconprovider.stories.utils.ts +27 -0
  181. package/src/components/iconprovider/index.ts +12 -0
  182. package/src/components/text/__screenshots__/mdc-text-body-large.png +0 -0
  183. package/src/components/text/__screenshots__/mdc-text-body-regular.png +0 -0
  184. package/src/components/text/__screenshots__/mdc-text-body-small.png +0 -0
  185. package/src/components/text/__screenshots__/mdc-text-heading-1.png +0 -0
  186. package/src/components/text/__screenshots__/mdc-text-heading-2.png +0 -0
  187. package/src/components/text/__screenshots__/mdc-text-heading-3.png +0 -0
  188. package/src/components/text/__screenshots__/mdc-text-heading-4.png +0 -0
  189. package/src/components/text/__screenshots__/mdc-text-heading-5.png +0 -0
  190. package/src/components/text/__screenshots__/mdc-text-heading-6.png +0 -0
  191. package/src/components/text/__screenshots__/mdc-text-heading-7.png +0 -0
  192. package/src/components/text/__screenshots__/mdc-text-image-title.png +0 -0
  193. package/src/components/text/__screenshots__/mdc-text-label.png +0 -0
  194. package/src/components/text/fonts.styles.ts +99 -0
  195. package/src/components/text/index.ts +12 -0
  196. package/src/components/text/text.component.ts +51 -0
  197. package/src/components/text/text.constants.ts +27 -0
  198. package/src/components/text/text.e2e-test.ts +76 -0
  199. package/src/components/text/text.stories.ts +29 -0
  200. package/src/components/text/text.styles.ts +17 -0
  201. package/src/components/text/text.types.ts +13 -0
  202. package/src/components/text/text.utils.ts +51 -0
  203. package/src/components/themeprovider/__screenshots__/mdc-themeprovider-darkWebex.png +0 -0
  204. package/src/components/themeprovider/__screenshots__/mdc-themeprovider-lightWebex.png +0 -0
  205. package/src/components/themeprovider/index.ts +12 -0
  206. package/src/components/themeprovider/themeprovider.component.ts +91 -0
  207. package/src/components/themeprovider/themeprovider.constants.ts +32 -0
  208. package/src/components/themeprovider/themeprovider.context.ts +18 -0
  209. package/src/components/themeprovider/themeprovider.e2e-test.ts +89 -0
  210. package/src/components/themeprovider/themeprovider.stories.styles.css +22 -0
  211. package/src/components/themeprovider/themeprovider.stories.ts +38 -0
  212. package/src/components/themeprovider/themeprovider.stories.utils.ts +23 -0
  213. package/src/components/themeprovider/themeprovider.styles.ts +13 -0
  214. package/src/components/themeprovider/themeprovider.types.ts +7 -0
  215. package/src/components/themeprovider/themeprovider.utils.ts +16 -0
  216. package/src/index.ts +22 -0
  217. package/src/models/component/component.component.ts +46 -0
  218. package/src/models/component/component.types.ts +16 -0
  219. package/src/models/component/index.ts +7 -0
  220. package/src/models/index.ts +11 -0
  221. package/src/models/provider/index.ts +3 -0
  222. package/src/models/provider/provider.component.ts +87 -0
  223. package/src/models/provider/provider.styles.ts +14 -0
  224. package/src/stories/colors.mdx +32 -0
  225. package/src/stories/icons.mdx +13 -0
  226. package/src/stories/typography.mdx +20 -0
  227. package/src/utils/mixins/DisabledMixin.ts +19 -0
  228. package/src/utils/mixins/TabIndexMixin.ts +19 -0
  229. package/src/utils/provider/index.ts +21 -0
  230. package/src/utils/styles/index.ts +13 -0
  231. package/src/utils/tag-name/constants.ts +10 -0
  232. package/src/utils/tag-name/index.ts +15 -0
  233. package/src/utils/types.ts +1 -0
  234. package/tsconfig.json +45 -0
  235. package/tsconfig.module.json +47 -0
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const decorators_js_1 = require("lit/decorators.js");
5
+ const themeprovider_constants_1 = require("./themeprovider.constants");
6
+ const models_1 = require("../../models");
7
+ const themeprovider_context_1 = tslib_1.__importDefault(require("./themeprovider.context"));
8
+ const themeprovider_styles_1 = tslib_1.__importDefault(require("./themeprovider.styles"));
9
+ /**
10
+ * ThemeProvider component, which sets the theme css variables
11
+ * for the child dom nodes and allows to be consumed from sub components
12
+ * (see providerUtils.consume for how to consume)
13
+ *
14
+ * ThemeProvider also includes the different font faces available
15
+ * for Text components.
16
+ *
17
+ * @tag mdc-themeprovider
18
+ * @tagname mdc-themeprovider
19
+ */
20
+ class ThemeProvider extends models_1.Provider {
21
+ constructor() {
22
+ // initialise the context by running the Provider constructor:
23
+ super({
24
+ context: themeprovider_context_1.default.context,
25
+ initialValue: new themeprovider_context_1.default(themeprovider_constants_1.DEFAULTS.THEME),
26
+ });
27
+ /**
28
+ * Available themes to switch to
29
+ *
30
+ * Has to be a space separated string, like className
31
+ * e.g.: `mds-theme-stable-darkWebex mds-theme-stable-lightWebex`
32
+ */
33
+ this.themes = themeprovider_constants_1.THEMES.join(' ');
34
+ /**
35
+ * Current theme attribute
36
+ *
37
+ * Has to be fully qualified, such that
38
+ * the theme name matches the className of the respective
39
+ * theme stylesheet
40
+ */
41
+ this.theme = themeprovider_constants_1.DEFAULTS.THEME;
42
+ }
43
+ static get Context() {
44
+ return themeprovider_context_1.default.context;
45
+ }
46
+ updated(changedProperties) {
47
+ super.updated(changedProperties);
48
+ if (changedProperties.has('theme')) {
49
+ this.updateActiveThemeClass();
50
+ }
51
+ }
52
+ /**
53
+ * Update all observing components of this
54
+ * provider to update the theme
55
+ */
56
+ updateContext() {
57
+ let shouldUpdateConsumers = false;
58
+ if (this.context.value.theme !== this.theme) {
59
+ this.context.value.theme = this.theme;
60
+ shouldUpdateConsumers = true;
61
+ }
62
+ if (shouldUpdateConsumers) {
63
+ this.context.updateObservers();
64
+ }
65
+ }
66
+ /**
67
+ * Function to update the active theme classname to update the theme tokens
68
+ * as CSS variables on the web component.
69
+ */
70
+ updateActiveThemeClass() {
71
+ // remove all existing theme classes from the classList:
72
+ this.classList.remove(...this.themes.split(' '));
73
+ // add current theme class to classList:
74
+ this.classList.add(this.theme);
75
+ }
76
+ }
77
+ ThemeProvider.styles = themeprovider_styles_1.default;
78
+ tslib_1.__decorate([
79
+ (0, decorators_js_1.property)({ type: String }),
80
+ tslib_1.__metadata("design:type", String)
81
+ ], ThemeProvider.prototype, "themes", void 0);
82
+ tslib_1.__decorate([
83
+ (0, decorators_js_1.property)({ type: String }),
84
+ tslib_1.__metadata("design:type", String)
85
+ ], ThemeProvider.prototype, "theme", void 0);
86
+ exports.default = ThemeProvider;
@@ -0,0 +1,10 @@
1
+ declare const TAG_NAME: "mdc-themeprovider";
2
+ declare const THEME_NAMES: {
3
+ DARK_WEBEX: "darkWebex";
4
+ LIGHT_WEBEX: "lightWebex";
5
+ };
6
+ declare const THEMES: ("mds-theme-stable-darkWebex" | "mds-theme-stable-lightWebex")[];
7
+ declare const DEFAULTS: {
8
+ THEME: "mds-theme-stable-darkWebex";
9
+ };
10
+ export { DEFAULTS, THEME_NAMES, THEMES, TAG_NAME };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TAG_NAME = exports.THEMES = exports.THEME_NAMES = exports.DEFAULTS = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /* eslint-disable implicit-arrow-linebreak */
6
+ const tag_name_1 = tslib_1.__importDefault(require("../../utils/tag-name"));
7
+ const themeprovider_utils_1 = tslib_1.__importDefault(require("./themeprovider.utils"));
8
+ const TAG_NAME = tag_name_1.default.constructTagName('themeprovider');
9
+ exports.TAG_NAME = TAG_NAME;
10
+ // Some themes are disabled until tokens are available for those themes
11
+ const THEME_NAMES = {
12
+ // DARK_BRONZE: 'darkBronze' as const,
13
+ // DARK_INDIGO: 'darkIndigo' as const,
14
+ // DARK_JADE: 'darkJade' as const,
15
+ // DARK_LAVENDER: 'darkLavender' as const,
16
+ // DARK_ROSE: 'darkRose' as const,
17
+ DARK_WEBEX: 'darkWebex',
18
+ // LIGHT_BRONZE: 'lightBronze' as const,
19
+ // LIGHT_INDIGO: 'lightIndigo' as const,
20
+ // LIGHT_JADE: 'lightJade' as const,
21
+ // LIGHT_LAVENDER: 'lightLavender' as const,
22
+ // LIGHT_ROSE: 'lightRose' as const,
23
+ LIGHT_WEBEX: 'lightWebex',
24
+ };
25
+ exports.THEME_NAMES = THEME_NAMES;
26
+ const THEMES = Object.values(THEME_NAMES).map((themeName) => themeprovider_utils_1.default.getFullQualifiedTheme(themeName));
27
+ exports.THEMES = THEMES;
28
+ const DEFAULTS = {
29
+ THEME: themeprovider_utils_1.default.getFullQualifiedTheme(THEME_NAMES.DARK_WEBEX),
30
+ };
31
+ exports.DEFAULTS = DEFAULTS;
@@ -0,0 +1,9 @@
1
+ import type { Theme } from './themeprovider.types';
2
+ declare class ThemeProviderContext {
3
+ theme?: Theme;
4
+ static context: {
5
+ __context__: ThemeProviderContext;
6
+ };
7
+ constructor(defaultTheme?: Theme);
8
+ }
9
+ export default ThemeProviderContext;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const context_1 = require("@lit-labs/context");
4
+ const themeprovider_constants_1 = require("./themeprovider.constants");
5
+ class ThemeProviderContext {
6
+ // constructor to allow setting the defaultTheme
7
+ constructor(defaultTheme) {
8
+ this.theme = defaultTheme;
9
+ }
10
+ }
11
+ // create typed lit context as part of the ThemeProviderContext
12
+ ThemeProviderContext.context = (0, context_1.createContext)(themeprovider_constants_1.TAG_NAME);
13
+ exports.default = ThemeProviderContext;
@@ -0,0 +1,2 @@
1
+ declare const styles: import("lit").CSSResult;
2
+ export default styles;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lit_1 = require("lit");
4
+ const styles = (0, lit_1.css) `
5
+ :host {
6
+ --mdc-themeprovider-font-family: "Momentum";
7
+ --mdc-themeprovider-color-default: var(--mds-color-theme-text-primary-normal);
8
+
9
+ font-family: var(--mdc-themeprovider-font-family);
10
+ color: var(--mdc-themeprovider-color-default);
11
+ }
12
+ `;
13
+ exports.default = styles;
@@ -0,0 +1,5 @@
1
+ import type { ValueOf } from '../../utils/types';
2
+ import { THEME_NAMES } from './themeprovider.constants';
3
+ import type { ThemeClassPrefix, ThemeClassSeparator } from './themeprovider.utils';
4
+ export type ThemeName = ValueOf<typeof THEME_NAMES>;
5
+ export type Theme<T extends ThemeName = ThemeName> = `${ThemeClassPrefix}${ThemeClassSeparator}${T}`;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import type { Theme, ThemeName } from './themeprovider.types';
2
+ declare const THEME_CLASS_PREFIX: "mds-theme-stable";
3
+ export declare const THEME_CLASS_SEPARATOR: "-";
4
+ declare const utils: {
5
+ getFullQualifiedTheme: <T extends ThemeName>(themeName: T) => Theme;
6
+ };
7
+ export default utils;
8
+ export type ThemeClassPrefix = typeof THEME_CLASS_PREFIX;
9
+ export type ThemeClassSeparator = typeof THEME_CLASS_SEPARATOR;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.THEME_CLASS_SEPARATOR = void 0;
4
+ const THEME_CLASS_PREFIX = 'mds-theme-stable';
5
+ exports.THEME_CLASS_SEPARATOR = '-';
6
+ const getFullQualifiedTheme = (themeName) => [THEME_CLASS_PREFIX, themeName].join(exports.THEME_CLASS_SEPARATOR);
7
+ const utils = {
8
+ getFullQualifiedTheme,
9
+ };
10
+ exports.default = utils;
@@ -0,0 +1,8 @@
1
+ import { Component, Provider } from './models';
2
+ import ThemeProvider from './components/themeprovider';
3
+ import Icon from './components/icon';
4
+ import IconProvider from './components/iconprovider';
5
+ import Avatar from './components/avatar';
6
+ import Badge from './components/badge';
7
+ import Text from './components/text';
8
+ export { Component, Provider, ThemeProvider, Icon, IconProvider, Avatar, Badge, Text, };
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Text = exports.Badge = exports.Avatar = exports.IconProvider = exports.Icon = exports.ThemeProvider = exports.Provider = exports.Component = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const models_1 = require("./models");
6
+ Object.defineProperty(exports, "Component", { enumerable: true, get: function () { return models_1.Component; } });
7
+ Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return models_1.Provider; } });
8
+ const themeprovider_1 = tslib_1.__importDefault(require("./components/themeprovider"));
9
+ exports.ThemeProvider = themeprovider_1.default;
10
+ const icon_1 = tslib_1.__importDefault(require("./components/icon"));
11
+ exports.Icon = icon_1.default;
12
+ const iconprovider_1 = tslib_1.__importDefault(require("./components/iconprovider"));
13
+ exports.IconProvider = iconprovider_1.default;
14
+ const avatar_1 = tslib_1.__importDefault(require("./components/avatar"));
15
+ exports.Avatar = avatar_1.default;
16
+ const badge_1 = tslib_1.__importDefault(require("./components/badge"));
17
+ exports.Badge = badge_1.default;
18
+ const text_1 = tslib_1.__importDefault(require("./components/text"));
19
+ exports.Text = text_1.default;
@@ -0,0 +1,38 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * Core Component class to ultimately be inherited by all Web Components within
4
+ * this package.
5
+ *
6
+ * @public
7
+ */
8
+ declare class Component extends LitElement {
9
+ /**
10
+ * Register `this` extended `Component` Class as a custom element within the
11
+ * DOM's custom elements registry.
12
+ *
13
+ * @remarks
14
+ * This method must be called in order for this component to be consumable
15
+ * within the DOM.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import CustomComponent from './custom-component';
20
+ *
21
+ * // Standard registration.
22
+ * CustomComponent.register();
23
+ *
24
+ * // Custom registration.
25
+ * CustomComponent.register({
26
+ * name: 'custom-component',
27
+ * prefix: 'prefix',
28
+ * });
29
+ *
30
+ * export default CustomComponent;
31
+ * ```
32
+ *
33
+ *
34
+ * @returns - Void.
35
+ */
36
+ static register(namespace: string): void;
37
+ }
38
+ export default Component;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lit_1 = require("lit");
4
+ /**
5
+ * Core Component class to ultimately be inherited by all Web Components within
6
+ * this package.
7
+ *
8
+ * @public
9
+ */
10
+ class Component extends lit_1.LitElement {
11
+ /**
12
+ * Register `this` extended `Component` Class as a custom element within the
13
+ * DOM's custom elements registry.
14
+ *
15
+ * @remarks
16
+ * This method must be called in order for this component to be consumable
17
+ * within the DOM.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import CustomComponent from './custom-component';
22
+ *
23
+ * // Standard registration.
24
+ * CustomComponent.register();
25
+ *
26
+ * // Custom registration.
27
+ * CustomComponent.register({
28
+ * name: 'custom-component',
29
+ * prefix: 'prefix',
30
+ * });
31
+ *
32
+ * export default CustomComponent;
33
+ * ```
34
+ *
35
+ *
36
+ * @returns - Void.
37
+ */
38
+ static register(namespace) {
39
+ if (customElements.get(namespace)) {
40
+ return;
41
+ }
42
+ customElements.define(namespace, this);
43
+ }
44
+ }
45
+ exports.default = Component;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `Component` Class' static `registration()` method options.
3
+ *
4
+ * @public
5
+ */
6
+ export interface RegisterOptions {
7
+ /**
8
+ * Name to use when registering this `Component` Class' to within DOM.
9
+ */
10
+ name: string;
11
+ /**
12
+ * Name to use when registering this `Component` Class' to within DOM.
13
+ */
14
+ prefix?: string;
15
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ import Component from './component.component';
2
+ export type { RegisterOptions as ComponentRegisterOptions, } from './component.types';
3
+ export default Component;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const component_component_1 = tslib_1.__importDefault(require("./component.component"));
5
+ exports.default = component_component_1.default;
@@ -0,0 +1,4 @@
1
+ import Component from './component';
2
+ import Provider from './provider';
3
+ export type { ComponentRegisterOptions, } from './component';
4
+ export { Component, Provider, };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Provider = exports.Component = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const component_1 = tslib_1.__importDefault(require("./component"));
6
+ exports.Component = component_1.default;
7
+ const provider_1 = tslib_1.__importDefault(require("./provider"));
8
+ exports.Provider = provider_1.default;
@@ -0,0 +1,2 @@
1
+ import Provider from './provider.component';
2
+ export default Provider;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const provider_component_1 = tslib_1.__importDefault(require("./provider.component"));
5
+ exports.default = provider_component_1.default;
@@ -0,0 +1,70 @@
1
+ import { ContextProvider } from '@lit-labs/context';
2
+ import { CSSResult } from 'lit';
3
+ import Component from '../component';
4
+ type ConstructorOptions<C> = {
5
+ context: {
6
+ __context__: C;
7
+ };
8
+ initialValue?: C;
9
+ };
10
+ /**
11
+ * Provider Component class to ultimately be inherited by all Provider-type Web
12
+ * Components within this package.
13
+ *
14
+ * @public
15
+ */
16
+ declare abstract class Provider<C> extends Component {
17
+ /**
18
+ * Constructor of the Provider.
19
+ *
20
+ * Execute in the constructor of the provider implementation,
21
+ * like so
22
+ *
23
+ * ```
24
+ * constructor() {
25
+ * super(TAG_NAME, {initialValue: new ContextClass(defaultValues)});
26
+ * }
27
+ * ```
28
+ * @param host - host of where the context will be hooked onto, e.g. this
29
+ * @param context - context (returned by createContext)
30
+ * @param initialValue - initialValue of the ContextClass, like `new ContextClass(defaultValues)`
31
+ */
32
+ constructor({ context, initialValue }: ConstructorOptions<C>);
33
+ /**
34
+ * Context associated with this provider.
35
+ *
36
+ * @remarks
37
+ * Providing a Context type as a generic when creating extended Provider Class
38
+ * definitions will help enforce the property validation.
39
+ */
40
+ protected context: ContextProvider<{
41
+ __context__: C;
42
+ }>;
43
+ /**
44
+ * Styles associated with this Provider Component.
45
+ */
46
+ static styles: CSSResult | Array<CSSResult>;
47
+ /**
48
+ * Update the context of this Provider and trigger its consumers to update.
49
+ *
50
+ * @remarks
51
+ * This method is called every time this Provider is re-rendered and should
52
+ * be used to update the local Context based on any deltas between this
53
+ * Provider's attributes and this Provider's context that caused the
54
+ * re-render. If the `render()` method is overwritten, this call must be made
55
+ * manually.
56
+ */
57
+ protected abstract updateContext(): void;
58
+ /**
59
+ * Render this Provider.
60
+ *
61
+ * @remarks
62
+ * This method calls `updateContext()` then validates whether or not to
63
+ * update all consumers based on the results of the `shouldUpdateConsumers`
64
+ * getter.
65
+ *
66
+ * @returns - This Provider as an HTML Element.
67
+ */
68
+ render(): import("lit-html").TemplateResult<1>;
69
+ }
70
+ export default Provider;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const context_1 = require("@lit-labs/context");
5
+ const lit_1 = require("lit");
6
+ const component_1 = tslib_1.__importDefault(require("../component"));
7
+ const provider_styles_1 = tslib_1.__importDefault(require("./provider.styles"));
8
+ /**
9
+ * Provider Component class to ultimately be inherited by all Provider-type Web
10
+ * Components within this package.
11
+ *
12
+ * @public
13
+ */
14
+ class Provider extends component_1.default {
15
+ /**
16
+ * Constructor of the Provider.
17
+ *
18
+ * Execute in the constructor of the provider implementation,
19
+ * like so
20
+ *
21
+ * ```
22
+ * constructor() {
23
+ * super(TAG_NAME, {initialValue: new ContextClass(defaultValues)});
24
+ * }
25
+ * ```
26
+ * @param host - host of where the context will be hooked onto, e.g. this
27
+ * @param context - context (returned by createContext)
28
+ * @param initialValue - initialValue of the ContextClass, like `new ContextClass(defaultValues)`
29
+ */
30
+ constructor({ context, initialValue }) {
31
+ super();
32
+ this.context = new context_1.ContextProvider(this, {
33
+ context,
34
+ initialValue,
35
+ });
36
+ }
37
+ /**
38
+ * Render this Provider.
39
+ *
40
+ * @remarks
41
+ * This method calls `updateContext()` then validates whether or not to
42
+ * update all consumers based on the results of the `shouldUpdateConsumers`
43
+ * getter.
44
+ *
45
+ * @returns - This Provider as an HTML Element.
46
+ */
47
+ render() {
48
+ this.updateContext();
49
+ return (0, lit_1.html) `<slot></slot>`;
50
+ }
51
+ }
52
+ /**
53
+ * Styles associated with this Provider Component.
54
+ */
55
+ Provider.styles = provider_styles_1.default;
56
+ exports.default = Provider;
@@ -0,0 +1,2 @@
1
+ declare const styles: import("lit").CSSResult;
2
+ export default styles;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lit_1 = require("lit");
4
+ const styles = (0, lit_1.css) `
5
+ :host {
6
+ border: 0;
7
+ display: block;
8
+ height: 100%;
9
+ margin: 0;
10
+ padding: 0;
11
+ width: 100%;
12
+ }
13
+ `;
14
+ exports.default = styles;
@@ -0,0 +1,13 @@
1
+ import { ContextConsumer } from '@lit-labs/context';
2
+ import { ReactiveElement } from 'lit';
3
+ type ConsumeOptions<C> = {
4
+ host: ReactiveElement;
5
+ context: C;
6
+ subscribe?: boolean;
7
+ };
8
+ declare const providerUtils: {
9
+ consume: <C extends {
10
+ __context__: unknown;
11
+ }>(options: ConsumeOptions<C>) => ContextConsumer<C, ReactiveElement>;
12
+ };
13
+ export default providerUtils;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const context_1 = require("@lit-labs/context");
4
+ const consume = (options) => {
5
+ const { host, context, subscribe } = options;
6
+ return new context_1.ContextConsumer(host, {
7
+ context,
8
+ subscribe: subscribe !== null && subscribe !== void 0 ? subscribe : true,
9
+ });
10
+ };
11
+ const providerUtils = {
12
+ consume,
13
+ };
14
+ exports.default = providerUtils;
@@ -0,0 +1,2 @@
1
+ declare const hostFitContentStyles: import("lit").CSSResult;
2
+ export { hostFitContentStyles };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hostFitContentStyles = void 0;
4
+ const lit_1 = require("lit");
5
+ const hostFitContentStyles = (0, lit_1.css) `
6
+ :host {
7
+ align-items: center;
8
+ display: flex;
9
+ height: fit-content;
10
+ justify-content: center;
11
+ width: fit-content;
12
+ }
13
+ `;
14
+ exports.hostFitContentStyles = hostFitContentStyles;
@@ -0,0 +1,7 @@
1
+ declare const CONSTANTS: {
2
+ NAMESPACE: {
3
+ PREFIX: "mdc";
4
+ SEPARATOR: "-";
5
+ };
6
+ };
7
+ export default CONSTANTS;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const NAMESPACE = {
4
+ PREFIX: 'mdc',
5
+ SEPARATOR: '-',
6
+ };
7
+ const CONSTANTS = {
8
+ NAMESPACE,
9
+ };
10
+ exports.default = CONSTANTS;
@@ -0,0 +1,4 @@
1
+ declare const _default: {
2
+ constructTagName: <ComponentName extends string>(componentName: ComponentName) => `mdc-${ComponentName}`;
3
+ };
4
+ export default _default;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ /* eslint-disable implicit-arrow-linebreak */
5
+ /* eslint-disable max-len */
6
+ const constants_1 = tslib_1.__importDefault(require("./constants"));
7
+ const constructTagName = (componentName) => [constants_1.default.NAMESPACE.PREFIX, componentName].join(constants_1.default.NAMESPACE.SEPARATOR);
8
+ exports.default = {
9
+ constructTagName,
10
+ };
@@ -0,0 +1 @@
1
+ export type ValueOf<T> = T[keyof T];
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/jest.config.js ADDED
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ preset: 'ts-jest',
3
+ };