@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,28 @@
1
+ import { Component } from '../../models';
2
+ import { AvatarType } from './avatar.types';
3
+ /**
4
+ * @slot - This is a default/unnamed slot
5
+ *
6
+ * @summary This is MyElement
7
+ *
8
+ * @tag mdc-avatar
9
+ * @tagname mdc-avatar
10
+ */
11
+ declare class Avatar extends Component {
12
+ type?: AvatarType;
13
+ alt?: string;
14
+ src?: string;
15
+ /**
16
+ * Scale of the avatar
17
+ */
18
+ scale?: number;
19
+ /**
20
+ * Updates the size by setting the width and height
21
+ */
22
+ private updateSize;
23
+ updated(changedProperties: Map<string, any>): void;
24
+ photoTemplate(): import("lit-html").TemplateResult<1>;
25
+ render(): import("lit-html").TemplateResult<1>;
26
+ static styles: import("lit").CSSResult;
27
+ }
28
+ export default Avatar;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const lit_1 = require("lit");
5
+ const decorators_js_1 = require("lit/decorators.js");
6
+ const if_defined_js_1 = require("lit/directives/if-defined.js");
7
+ const avatar_styles_1 = tslib_1.__importDefault(require("./avatar.styles"));
8
+ const models_1 = require("../../models");
9
+ const avatar_constants_1 = require("./avatar.constants");
10
+ /**
11
+ * @slot - This is a default/unnamed slot
12
+ *
13
+ * @summary This is MyElement
14
+ *
15
+ * @tag mdc-avatar
16
+ * @tagname mdc-avatar
17
+ */
18
+ class Avatar extends models_1.Component {
19
+ constructor() {
20
+ super(...arguments);
21
+ this.type = avatar_constants_1.DEFAULTS.TYPE;
22
+ /**
23
+ * Scale of the avatar
24
+ */
25
+ this.scale = avatar_constants_1.DEFAULTS.SCALE;
26
+ }
27
+ /**
28
+ * Updates the size by setting the width and height
29
+ */
30
+ updateSize() {
31
+ if (this.scale) {
32
+ const value = `${this.scale}${avatar_constants_1.LENGTH_UNIT}`;
33
+ this.style.width = value;
34
+ this.style.height = value;
35
+ }
36
+ }
37
+ updated(changedProperties) {
38
+ super.updated(changedProperties);
39
+ if (changedProperties.has('scale')) {
40
+ this.updateSize();
41
+ }
42
+ }
43
+ photoTemplate() {
44
+ return (0, lit_1.html) `
45
+ <img
46
+ src="${(0, if_defined_js_1.ifDefined)(this.src)}"
47
+ alt="${(0, if_defined_js_1.ifDefined)(this.alt)}"
48
+ />
49
+ `;
50
+ }
51
+ render() {
52
+ let content;
53
+ if (this.type === 'photo') {
54
+ content = this.photoTemplate();
55
+ }
56
+ else {
57
+ content = (0, lit_1.html) ``;
58
+ }
59
+ return (0, lit_1.html) `${content}`;
60
+ }
61
+ }
62
+ Avatar.styles = avatar_styles_1.default;
63
+ tslib_1.__decorate([
64
+ (0, decorators_js_1.property)({ type: String, reflect: true }),
65
+ tslib_1.__metadata("design:type", String)
66
+ ], Avatar.prototype, "type", void 0);
67
+ tslib_1.__decorate([
68
+ (0, decorators_js_1.property)({ type: String }),
69
+ tslib_1.__metadata("design:type", String)
70
+ ], Avatar.prototype, "alt", void 0);
71
+ tslib_1.__decorate([
72
+ (0, decorators_js_1.property)({ type: String }),
73
+ tslib_1.__metadata("design:type", String)
74
+ ], Avatar.prototype, "src", void 0);
75
+ tslib_1.__decorate([
76
+ (0, decorators_js_1.property)({ type: Number }),
77
+ tslib_1.__metadata("design:type", Number)
78
+ ], Avatar.prototype, "scale", void 0);
79
+ exports.default = Avatar;
@@ -0,0 +1,7 @@
1
+ declare const TAG_NAME: "mdc-avatar";
2
+ declare const LENGTH_UNIT = "rem";
3
+ declare const DEFAULTS: {
4
+ TYPE: "photo";
5
+ SCALE: number;
6
+ };
7
+ export { TAG_NAME, DEFAULTS, LENGTH_UNIT };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LENGTH_UNIT = exports.DEFAULTS = exports.TAG_NAME = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tag_name_1 = tslib_1.__importDefault(require("../../utils/tag-name"));
6
+ const TAG_NAME = tag_name_1.default.constructTagName('avatar');
7
+ exports.TAG_NAME = TAG_NAME;
8
+ const LENGTH_UNIT = 'rem';
9
+ exports.LENGTH_UNIT = LENGTH_UNIT;
10
+ const DEFAULTS = {
11
+ TYPE: 'photo',
12
+ SCALE: 1.5,
13
+ };
14
+ exports.DEFAULTS = DEFAULTS;
@@ -0,0 +1,2 @@
1
+ declare const styles: import("lit").CSSResult;
2
+ export default styles;
@@ -0,0 +1,20 @@
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
+ display: flex;
7
+ justify-content: center;
8
+ align-items: center;
9
+ border-radius: 100vh;
10
+ position: relative;
11
+ width: fit-content;
12
+ }
13
+ img {
14
+ border-radius: 100vh;
15
+ height: inherit;
16
+ width: inherit;
17
+ object-fit: cover;
18
+ }
19
+ `;
20
+ exports.default = styles;
@@ -0,0 +1 @@
1
+ export type AvatarType = 'photo' | 'text' | 'icon' | 'multiuser';
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ import Avatar from './avatar.component';
2
+ declare global {
3
+ interface HTMLElementTagNameMap {
4
+ ['mdc-avatar']: Avatar;
5
+ }
6
+ }
7
+ export default Avatar;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const avatar_component_1 = tslib_1.__importDefault(require("./avatar.component"));
5
+ const avatar_constants_1 = require("./avatar.constants");
6
+ avatar_component_1.default.register(avatar_constants_1.TAG_NAME);
7
+ exports.default = avatar_component_1.default;
@@ -0,0 +1,51 @@
1
+ import { Component } from '../../models';
2
+ import type { BadgeType } from './badge.types';
3
+ /**
4
+ * @slot - This is a default/unnamed slot
5
+ *
6
+ * @summary This is MyElement
7
+ *
8
+ * @tag mdc-badge
9
+ * @tagname mdc-badge
10
+ */
11
+ declare class Badge extends Component {
12
+ /**
13
+ * Type of the badge
14
+ * Can be `regular`, `icon`, `text` or `warning`
15
+ *
16
+ * Default: `regular`
17
+ */
18
+ type?: BadgeType;
19
+ /**
20
+ * Scale of the badge (works in combination with length unit)
21
+ *
22
+ * Default: `1`
23
+ */
24
+ scale?: number;
25
+ /**
26
+ * Length unit attribute for scale
27
+ *
28
+ * Default: `rem`
29
+ */
30
+ lengthUnit?: string;
31
+ /**
32
+ * If `type` is set to `icon`, attribute `iconName` can
33
+ * be used to choose which icon should be shown
34
+ *
35
+ * If no `iconName` is provided, no icon will be rendered.
36
+ */
37
+ iconName?: string;
38
+ /**
39
+ * If `type` is set to `text`, attribute `text` can
40
+ * be used to pass in any text to be displayed in the badge.
41
+ */
42
+ text?: string;
43
+ private updateSize;
44
+ updated(changedProperties: Map<string, any>): void;
45
+ iconTemplate(): import("lit-html").TemplateResult<1>;
46
+ textTemplate(): import("lit-html").TemplateResult<1>;
47
+ warningTemplate(): import("lit-html").TemplateResult<1>;
48
+ render(): import("lit-html").TemplateResult<1>;
49
+ static styles: import("lit").CSSResult[];
50
+ }
51
+ export default Badge;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const lit_1 = require("lit");
5
+ const decorators_js_1 = require("lit/decorators.js");
6
+ const style_map_js_1 = require("lit/directives/style-map.js");
7
+ const models_1 = require("../../models");
8
+ const badge_constants_1 = require("./badge.constants");
9
+ const badge_styles_1 = tslib_1.__importDefault(require("./badge.styles"));
10
+ /**
11
+ * @slot - This is a default/unnamed slot
12
+ *
13
+ * @summary This is MyElement
14
+ *
15
+ * @tag mdc-badge
16
+ * @tagname mdc-badge
17
+ */
18
+ class Badge extends models_1.Component {
19
+ constructor() {
20
+ super(...arguments);
21
+ /**
22
+ * Type of the badge
23
+ * Can be `regular`, `icon`, `text` or `warning`
24
+ *
25
+ * Default: `regular`
26
+ */
27
+ this.type = badge_constants_1.DEFAULTS.TYPE;
28
+ /**
29
+ * Scale of the badge (works in combination with length unit)
30
+ *
31
+ * Default: `1`
32
+ */
33
+ this.scale = badge_constants_1.DEFAULTS.SCALE;
34
+ /**
35
+ * Length unit attribute for scale
36
+ *
37
+ * Default: `rem`
38
+ */
39
+ this.lengthUnit = badge_constants_1.DEFAULTS.LENGTH_UNIT;
40
+ }
41
+ updateSize() {
42
+ // if (this.scale && this.lengthUnit) {
43
+ // const value = `${this.scale}${this.lengthUnit}`;
44
+ // this.style.height = value;
45
+ // if (this.type !== 'text') {
46
+ // this.style.width = value;
47
+ // }
48
+ // }
49
+ }
50
+ updated(changedProperties) {
51
+ super.updated(changedProperties);
52
+ if (changedProperties.has('scale') || changedProperties.has('lengthUnit')) {
53
+ this.updateSize();
54
+ }
55
+ }
56
+ iconTemplate() {
57
+ return (0, lit_1.html) `<div class="mdc-badge-icon-container">
58
+ <mdc-icon name="${this.iconName}" scale="100" length-unit="%"></mdc-icon>
59
+ </div>`;
60
+ }
61
+ textTemplate() {
62
+ return (0, lit_1.html) `${this.text}`;
63
+ }
64
+ warningTemplate() {
65
+ return (0, lit_1.html) ` <mdc-icon name="${badge_constants_1.WARNING_ICON_NAME}" class="mdc-badge-warning"></mdc-icon> `;
66
+ }
67
+ render() {
68
+ let content;
69
+ const size = `${this.scale}${this.lengthUnit}`;
70
+ let sizeStyles = { width: size, height: size };
71
+ switch (this.type) {
72
+ case 'regular':
73
+ content = (0, lit_1.html) ``;
74
+ break;
75
+ case 'icon':
76
+ content = this.iconTemplate();
77
+ break;
78
+ case 'text':
79
+ content = this.textTemplate();
80
+ // make width flexible when text -> only set the height:
81
+ sizeStyles = { height: sizeStyles.height };
82
+ break;
83
+ case 'warning':
84
+ content = this.warningTemplate();
85
+ break;
86
+ default:
87
+ content = (0, lit_1.html) ``;
88
+ break;
89
+ }
90
+ return (0, lit_1.html) `<div class="mdc-badge-container" style=${(0, style_map_js_1.styleMap)(sizeStyles)}>${content}</div>`;
91
+ }
92
+ }
93
+ Badge.styles = badge_styles_1.default;
94
+ tslib_1.__decorate([
95
+ (0, decorators_js_1.property)({ type: String, reflect: true }),
96
+ tslib_1.__metadata("design:type", String)
97
+ ], Badge.prototype, "type", void 0);
98
+ tslib_1.__decorate([
99
+ (0, decorators_js_1.property)({ type: Number }),
100
+ tslib_1.__metadata("design:type", Number)
101
+ ], Badge.prototype, "scale", void 0);
102
+ tslib_1.__decorate([
103
+ (0, decorators_js_1.property)({ type: String, attribute: 'length-unit' }),
104
+ tslib_1.__metadata("design:type", String)
105
+ ], Badge.prototype, "lengthUnit", void 0);
106
+ tslib_1.__decorate([
107
+ (0, decorators_js_1.property)({ type: String, attribute: 'icon-name' }),
108
+ tslib_1.__metadata("design:type", String)
109
+ ], Badge.prototype, "iconName", void 0);
110
+ tslib_1.__decorate([
111
+ (0, decorators_js_1.property)({ type: String }),
112
+ tslib_1.__metadata("design:type", String)
113
+ ], Badge.prototype, "text", void 0);
114
+ exports.default = Badge;
@@ -0,0 +1,8 @@
1
+ declare const TAG_NAME: "mdc-badge";
2
+ declare const WARNING_ICON_NAME = "warning-badge-filled";
3
+ declare const DEFAULTS: {
4
+ TYPE: "regular";
5
+ SCALE: number;
6
+ LENGTH_UNIT: string;
7
+ };
8
+ export { TAG_NAME, DEFAULTS, WARNING_ICON_NAME };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WARNING_ICON_NAME = exports.DEFAULTS = exports.TAG_NAME = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tag_name_1 = tslib_1.__importDefault(require("../../utils/tag-name"));
6
+ const TAG_NAME = tag_name_1.default.constructTagName('badge');
7
+ exports.TAG_NAME = TAG_NAME;
8
+ const WARNING_ICON_NAME = 'warning-badge-filled';
9
+ exports.WARNING_ICON_NAME = WARNING_ICON_NAME;
10
+ const DEFAULTS = {
11
+ TYPE: 'regular',
12
+ SCALE: 1,
13
+ LENGTH_UNIT: 'rem',
14
+ };
15
+ exports.DEFAULTS = DEFAULTS;
@@ -0,0 +1,2 @@
1
+ declare const styles: import("lit").CSSResult[];
2
+ export default styles;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lit_1 = require("lit");
4
+ const styles_1 = require("../../utils/styles");
5
+ const styles = [
6
+ styles_1.hostFitContentStyles,
7
+ (0, lit_1.css) `
8
+ :host {
9
+ --mdc-badge-icon-background-color: var(--mds-color-theme-background-accent-normal);
10
+ }
11
+
12
+ .mdc-badge-container {
13
+ display: flex;
14
+ justify-content: center;
15
+ align-items: center;
16
+ border-radius: 9999px;
17
+ background-color: var(--mdc-badge-icon-background-color);
18
+ }
19
+
20
+ .mdc-badge-icon-container {
21
+ height: 80%;
22
+ width: 80%;
23
+ }
24
+ `,
25
+ ];
26
+ exports.default = styles;
@@ -0,0 +1 @@
1
+ export type BadgeType = 'regular' | 'text' | 'icon' | 'warning';
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ import Badge from './badge.component';
2
+ declare global {
3
+ interface HTMLElementTagNameMap {
4
+ ['mdc-badge']: Badge;
5
+ }
6
+ }
7
+ export default Badge;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const badge_component_1 = tslib_1.__importDefault(require("./badge.component"));
5
+ const badge_constants_1 = require("./badge.constants");
6
+ badge_component_1.default.register(badge_constants_1.TAG_NAME);
7
+ exports.default = badge_component_1.default;
@@ -0,0 +1,63 @@
1
+ import { Component } from '../../models';
2
+ /**
3
+ * Icon component, which has to be mounted inside of a `IconProvider`
4
+ * component.
5
+ *
6
+ * The `IconProvider` component defines where icons should be consumed from (`url`).
7
+ * This `Icon` component accepts the `name` attribute, which will be
8
+ * the file name of the icon to be loaded from the given `url`.
9
+ *
10
+ * Once fetched, the icon will be mounted. If fetching wasn't successful,
11
+ * nothing will be shown.
12
+ *
13
+ * The `scale` attribute allows scaling the icon based on the provided
14
+ * `length-unit` attribute (which will either come from the IconProvider or
15
+ * could be overridden per icon). For example:
16
+ * if `scale = 1` and `length-unit = 'em'`, the size of the icon will be
17
+ * `width: 1em; height: 1em`.
18
+ *
19
+ * For accessibility the `role` and `aria-label` of the icon can be set.
20
+ *
21
+ * @tag mdc-icon
22
+ * @tagname mdc-icon
23
+ */
24
+ declare class Icon extends Component {
25
+ private iconData?;
26
+ private lengthUnitFromContext?;
27
+ /**
28
+ * Name of the icon (= filename)
29
+ */
30
+ name?: string;
31
+ /**
32
+ * Scale of the icon (works in combination with length unit)
33
+ */
34
+ scale?: number;
35
+ /**
36
+ * Length unit attribute for overridding length-unit from `IconProvider`
37
+ */
38
+ lengthUnit?: string;
39
+ /**
40
+ * Role attribute to be set for accessibility
41
+ */
42
+ role: string | null;
43
+ /**
44
+ * Aria-label attribute to be set for accessibility
45
+ */
46
+ ariaLabel: string | null;
47
+ private iconProviderContext;
48
+ /**
49
+ * Get Icon Data function which will fetch the icon (currently only svg)
50
+ * and sets state and attributes once fetched successfully
51
+ */
52
+ private getIconData;
53
+ /**
54
+ * Updates the size by setting the width and height
55
+ */
56
+ private updateSize;
57
+ private setRoleOnIcon;
58
+ private setAriaLabelOnIcon;
59
+ updated(changedProperties: Map<string, any>): void;
60
+ render(): import("lit-html").TemplateResult<1>;
61
+ static styles: import("lit").CSSResult[];
62
+ }
63
+ export default Icon;
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const lit_1 = require("lit");
5
+ const decorators_js_1 = require("lit/decorators.js");
6
+ const icon_styles_1 = tslib_1.__importDefault(require("./icon.styles"));
7
+ const models_1 = require("../../models");
8
+ const provider_1 = tslib_1.__importDefault(require("../../utils/provider"));
9
+ const iconprovider_component_1 = tslib_1.__importDefault(require("../iconprovider/iconprovider.component"));
10
+ const icon_utils_1 = require("./icon.utils");
11
+ const icon_constants_1 = require("./icon.constants");
12
+ /**
13
+ * Icon component, which has to be mounted inside of a `IconProvider`
14
+ * component.
15
+ *
16
+ * The `IconProvider` component defines where icons should be consumed from (`url`).
17
+ * This `Icon` component accepts the `name` attribute, which will be
18
+ * the file name of the icon to be loaded from the given `url`.
19
+ *
20
+ * Once fetched, the icon will be mounted. If fetching wasn't successful,
21
+ * nothing will be shown.
22
+ *
23
+ * The `scale` attribute allows scaling the icon based on the provided
24
+ * `length-unit` attribute (which will either come from the IconProvider or
25
+ * could be overridden per icon). For example:
26
+ * if `scale = 1` and `length-unit = 'em'`, the size of the icon will be
27
+ * `width: 1em; height: 1em`.
28
+ *
29
+ * For accessibility the `role` and `aria-label` of the icon can be set.
30
+ *
31
+ * @tag mdc-icon
32
+ * @tagname mdc-icon
33
+ */
34
+ class Icon extends models_1.Component {
35
+ constructor() {
36
+ super(...arguments);
37
+ /**
38
+ * Name of the icon (= filename)
39
+ */
40
+ this.name = icon_constants_1.DEFAULTS.NAME;
41
+ /**
42
+ * Scale of the icon (works in combination with length unit)
43
+ */
44
+ this.scale = icon_constants_1.DEFAULTS.SCALE;
45
+ /**
46
+ * Role attribute to be set for accessibility
47
+ */
48
+ this.role = null;
49
+ /**
50
+ * Aria-label attribute to be set for accessibility
51
+ */
52
+ this.ariaLabel = null;
53
+ this.iconProviderContext = provider_1.default.consume({ host: this, context: iconprovider_component_1.default.Context });
54
+ }
55
+ /**
56
+ * Get Icon Data function which will fetch the icon (currently only svg)
57
+ * and sets state and attributes once fetched successfully
58
+ */
59
+ async getIconData() {
60
+ if (this.iconProviderContext.value) {
61
+ const { fileExtension, url } = this.iconProviderContext.value;
62
+ if (url && fileExtension && this.name) {
63
+ const iconHtml = await (0, icon_utils_1.dynamicSVGImport)(url, this.name, fileExtension);
64
+ // update iconData state once fetched:
65
+ this.iconData = iconHtml;
66
+ // when icon got fetched, set role and aria-label:
67
+ this.setRoleOnIcon();
68
+ this.setAriaLabelOnIcon();
69
+ }
70
+ }
71
+ }
72
+ /**
73
+ * Updates the size by setting the width and height
74
+ */
75
+ updateSize() {
76
+ if (this.scale && (this.lengthUnit || this.lengthUnitFromContext)) {
77
+ const value = `${this.scale}${this.lengthUnit || this.lengthUnitFromContext}`;
78
+ this.style.width = value;
79
+ this.style.height = value;
80
+ }
81
+ }
82
+ setRoleOnIcon() {
83
+ var _a, _b;
84
+ if (this.role) {
85
+ // pass through role attribute to svg if set on mdc-icon
86
+ (_a = this.iconData) === null || _a === void 0 ? void 0 : _a.setAttribute('role', this.role);
87
+ }
88
+ else {
89
+ (_b = this.iconData) === null || _b === void 0 ? void 0 : _b.removeAttribute('role');
90
+ }
91
+ }
92
+ setAriaLabelOnIcon() {
93
+ var _a, _b;
94
+ if (this.ariaLabel) {
95
+ // pass through aria-label attribute to svg if set on mdc-icon
96
+ (_a = this.iconData) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-label', this.ariaLabel);
97
+ }
98
+ else {
99
+ (_b = this.iconData) === null || _b === void 0 ? void 0 : _b.removeAttribute('aria-label');
100
+ }
101
+ }
102
+ updated(changedProperties) {
103
+ var _a, _b;
104
+ super.updated(changedProperties);
105
+ if (changedProperties.has('name')) {
106
+ // fetch icon data if name changes:
107
+ this.getIconData().catch((err) => {
108
+ console.error(err);
109
+ });
110
+ }
111
+ if (changedProperties.has('role')) {
112
+ this.setRoleOnIcon();
113
+ }
114
+ if (changedProperties.has('ariaLabel')) {
115
+ this.setAriaLabelOnIcon();
116
+ }
117
+ if (changedProperties.has('scale') || changedProperties.has('lengthUnit')) {
118
+ this.updateSize();
119
+ }
120
+ if (this.lengthUnitFromContext !== ((_a = this.iconProviderContext.value) === null || _a === void 0 ? void 0 : _a.lengthUnit)) {
121
+ this.lengthUnitFromContext = (_b = this.iconProviderContext.value) === null || _b === void 0 ? void 0 : _b.lengthUnit;
122
+ this.updateSize();
123
+ }
124
+ }
125
+ render() {
126
+ return (0, lit_1.html) ` ${this.iconData} `;
127
+ }
128
+ }
129
+ Icon.styles = icon_styles_1.default;
130
+ tslib_1.__decorate([
131
+ (0, decorators_js_1.state)(),
132
+ tslib_1.__metadata("design:type", HTMLElement)
133
+ ], Icon.prototype, "iconData", void 0);
134
+ tslib_1.__decorate([
135
+ (0, decorators_js_1.state)(),
136
+ tslib_1.__metadata("design:type", String)
137
+ ], Icon.prototype, "lengthUnitFromContext", void 0);
138
+ tslib_1.__decorate([
139
+ (0, decorators_js_1.property)({ type: String, reflect: true }),
140
+ tslib_1.__metadata("design:type", String)
141
+ ], Icon.prototype, "name", void 0);
142
+ tslib_1.__decorate([
143
+ (0, decorators_js_1.property)({ type: Number }),
144
+ tslib_1.__metadata("design:type", Number)
145
+ ], Icon.prototype, "scale", void 0);
146
+ tslib_1.__decorate([
147
+ (0, decorators_js_1.property)({ type: String, attribute: 'length-unit' }),
148
+ tslib_1.__metadata("design:type", String)
149
+ ], Icon.prototype, "lengthUnit", void 0);
150
+ tslib_1.__decorate([
151
+ (0, decorators_js_1.property)({ type: String }),
152
+ tslib_1.__metadata("design:type", Object)
153
+ ], Icon.prototype, "role", void 0);
154
+ tslib_1.__decorate([
155
+ (0, decorators_js_1.property)({ type: String, attribute: 'aria-label' }),
156
+ tslib_1.__metadata("design:type", Object)
157
+ ], Icon.prototype, "ariaLabel", void 0);
158
+ exports.default = Icon;
@@ -0,0 +1,6 @@
1
+ declare const TAG_NAME: "mdc-icon";
2
+ declare const DEFAULTS: {
3
+ NAME: undefined;
4
+ SCALE: number;
5
+ };
6
+ export { TAG_NAME, DEFAULTS };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULTS = exports.TAG_NAME = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tag_name_1 = tslib_1.__importDefault(require("../../utils/tag-name"));
6
+ const TAG_NAME = tag_name_1.default.constructTagName('icon');
7
+ exports.TAG_NAME = TAG_NAME;
8
+ const DEFAULTS = {
9
+ NAME: undefined,
10
+ SCALE: 1,
11
+ };
12
+ exports.DEFAULTS = DEFAULTS;
@@ -0,0 +1,2 @@
1
+ declare const styles: import("lit").CSSResult[];
2
+ export default styles;