@haiilo/catalyst 0.1.1 → 0.2.0

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 (76) hide show
  1. package/dist/catalyst/catalyst.css +1 -1410
  2. package/dist/catalyst/catalyst.esm.js +1 -126
  3. package/dist/catalyst/index.esm.js +0 -1
  4. package/dist/catalyst/p-4c438c2d.entry.js +11 -0
  5. package/dist/catalyst/p-73ee291d.js +1 -0
  6. package/dist/catalyst/p-94273abf.js +1 -0
  7. package/dist/cjs/app-globals-a3b3cf88.js +135 -0
  8. package/dist/cjs/cat-alert_7.cjs.entry.js +3115 -0
  9. package/dist/cjs/cat-icon-registry-eeff9b7d.js +1359 -0
  10. package/dist/cjs/catalyst.cjs.js +21 -0
  11. package/dist/cjs/index.cjs.js +2 -0
  12. package/dist/cjs/loader.cjs.js +23 -0
  13. package/dist/collection/collection-manifest.json +19 -0
  14. package/dist/collection/components/cat-alert/cat-alert.css +57 -0
  15. package/dist/collection/components/cat-alert/cat-alert.js +49 -0
  16. package/dist/collection/components/cat-badge/cat-badge.css +154 -0
  17. package/dist/collection/components/cat-badge/cat-badge.js +141 -0
  18. package/dist/collection/components/cat-button/cat-button.css +319 -0
  19. package/dist/collection/components/cat-button/cat-button.js +590 -0
  20. package/dist/collection/components/cat-icon/cat-icon-registry.js +41 -0
  21. package/dist/collection/components/cat-icon/cat-icon.css +50 -0
  22. package/dist/collection/components/cat-icon/cat-icon.js +89 -0
  23. package/dist/collection/components/cat-menu/cat-menu.css +33 -0
  24. package/dist/collection/components/cat-menu/cat-menu.js +185 -0
  25. package/dist/collection/components/cat-skeleton/cat-skeleton.css +177 -0
  26. package/dist/collection/components/cat-skeleton/cat-skeleton.js +130 -0
  27. package/dist/collection/components/cat-spinner/cat-spinner.css +63 -0
  28. package/dist/collection/components/cat-spinner/cat-spinner.js +64 -0
  29. package/dist/collection/index.cdn.js +21 -0
  30. package/dist/collection/index.js +1 -0
  31. package/dist/collection/init.js +8 -0
  32. package/dist/collection/utils/breakpoints.js +11 -0
  33. package/dist/collection/utils/media-matcher.js +54 -0
  34. package/dist/collection/utils/platform.js +49 -0
  35. package/dist/collection/utils/utils.js +3 -0
  36. package/dist/components/cat-alert.d.ts +11 -0
  37. package/dist/components/cat-alert.js +43 -0
  38. package/dist/components/cat-badge.d.ts +11 -0
  39. package/dist/components/cat-badge.js +67 -0
  40. package/dist/{catalyst/cat-button.entry.js → components/cat-button.js} +68 -44
  41. package/dist/{catalyst/cat-icon-registry-59da2e37.js → components/cat-icon-registry.js} +0 -0
  42. package/dist/components/cat-icon.js +6 -0
  43. package/dist/components/cat-icon2.js +47 -0
  44. package/dist/{catalyst/cat-menu.entry.js → components/cat-menu.js} +71 -650
  45. package/dist/components/cat-skeleton.d.ts +11 -0
  46. package/dist/components/cat-skeleton.js +77 -0
  47. package/dist/components/cat-spinner.js +6 -0
  48. package/dist/{catalyst/cat-spinner.entry.js → components/cat-spinner2.js} +25 -6
  49. package/dist/components/index.js +134 -0
  50. package/dist/esm/app-globals-fc0806a7.js +133 -0
  51. package/dist/esm/cat-alert_7.entry.js +3105 -0
  52. package/dist/esm/cat-icon-registry-d877de13.js +1331 -0
  53. package/dist/esm/catalyst.js +19 -0
  54. package/dist/esm/index.js +1 -0
  55. package/dist/esm/loader.js +19 -0
  56. package/dist/esm/polyfills/core-js.js +11 -0
  57. package/dist/esm/polyfills/css-shim.js +1 -0
  58. package/dist/esm/polyfills/dom.js +79 -0
  59. package/dist/esm/polyfills/es5-html-element.js +1 -0
  60. package/dist/esm/polyfills/index.js +34 -0
  61. package/dist/esm/polyfills/system.js +6 -0
  62. package/dist/index.cjs.js +1 -0
  63. package/dist/index.js +1 -0
  64. package/dist/types/components/cat-alert/cat-alert.d.ts +12 -0
  65. package/dist/types/components/cat-badge/cat-badge.d.ts +28 -0
  66. package/dist/types/components/cat-button/cat-button.d.ts +5 -0
  67. package/dist/types/components/cat-menu/cat-menu.d.ts +13 -4
  68. package/dist/types/components/cat-skeleton/cat-skeleton.d.ts +28 -0
  69. package/dist/types/components.d.ts +129 -0
  70. package/package.json +1 -1
  71. package/dist/catalyst/app-globals-f83c9e4a.js +0 -722
  72. package/dist/catalyst/cat-icon.entry.js +0 -27
  73. package/dist/catalyst/css-shim-20dbffa5.js +0 -4
  74. package/dist/catalyst/dom-c5ed0ba5.js +0 -73
  75. package/dist/catalyst/index-45406d3b.js +0 -3031
  76. package/dist/catalyst/shadow-css-8c625855.js +0 -388
@@ -0,0 +1,89 @@
1
+ import { Component, h, Prop } from '@stencil/core';
2
+ import { CatIconRegistry } from './cat-icon-registry';
3
+ /**
4
+ * Icons are used to provide additional meaning or in places where text label
5
+ * doesn't fit.
6
+ *
7
+ * @part icon - The native span element wrapping the SVG icon.
8
+ */
9
+ export class CatIcon {
10
+ constructor() {
11
+ this.iconRegistry = CatIconRegistry.getInstance();
12
+ /**
13
+ * The name of the icon.
14
+ */
15
+ this.icon = '';
16
+ /**
17
+ * The size of the icon.
18
+ */
19
+ this.size = 'm';
20
+ }
21
+ render() {
22
+ return (h("span", { innerHTML: this.iconRegistry.getIcon(this.icon), "aria-label": this.a11yLabel, "aria-hidden": this.a11yLabel ? null : 'true', part: "icon", class: {
23
+ [`cat-icon-${this.size}`]: this.size !== 'inline'
24
+ } }));
25
+ }
26
+ static get is() { return "cat-icon"; }
27
+ static get encapsulation() { return "shadow"; }
28
+ static get originalStyleUrls() { return {
29
+ "$": ["cat-icon.scss"]
30
+ }; }
31
+ static get styleUrls() { return {
32
+ "$": ["cat-icon.css"]
33
+ }; }
34
+ static get properties() { return {
35
+ "icon": {
36
+ "type": "string",
37
+ "mutable": false,
38
+ "complexType": {
39
+ "original": "string",
40
+ "resolved": "string",
41
+ "references": {}
42
+ },
43
+ "required": false,
44
+ "optional": false,
45
+ "docs": {
46
+ "tags": [],
47
+ "text": "The name of the icon."
48
+ },
49
+ "attribute": "icon",
50
+ "reflect": false,
51
+ "defaultValue": "''"
52
+ },
53
+ "size": {
54
+ "type": "string",
55
+ "mutable": false,
56
+ "complexType": {
57
+ "original": "'xs' | 's' | 'm' | 'l' | 'xl' | 'inline'",
58
+ "resolved": "\"inline\" | \"l\" | \"m\" | \"s\" | \"xl\" | \"xs\"",
59
+ "references": {}
60
+ },
61
+ "required": false,
62
+ "optional": false,
63
+ "docs": {
64
+ "tags": [],
65
+ "text": "The size of the icon."
66
+ },
67
+ "attribute": "size",
68
+ "reflect": false,
69
+ "defaultValue": "'m'"
70
+ },
71
+ "a11yLabel": {
72
+ "type": "string",
73
+ "mutable": false,
74
+ "complexType": {
75
+ "original": "string",
76
+ "resolved": "string | undefined",
77
+ "references": {}
78
+ },
79
+ "required": false,
80
+ "optional": true,
81
+ "docs": {
82
+ "tags": [],
83
+ "text": "Adds accessible label for the icon that is only shown for screen\nreaders. The `aria-hidden` attribute will be set if no label is present."
84
+ },
85
+ "attribute": "a11y-label",
86
+ "reflect": false
87
+ }
88
+ }; }
89
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Auto-generated file. Do not edit directly.
3
+ */
4
+ /* stylelint-disable value-keyword-case */
5
+ /* stylelint-enable value-keyword-case */
6
+ /**
7
+ * Auto-generated file. Do not edit directly.
8
+ */
9
+ /* stylelint-disable value-keyword-case */
10
+ /* stylelint-enable value-keyword-case */
11
+ :host {
12
+ display: inline-block;
13
+ }
14
+
15
+ :host([hidden]) {
16
+ display: none;
17
+ }
18
+
19
+ .content {
20
+ padding-top: 0.5rem;
21
+ padding-bottom: 0.5rem;
22
+ position: absolute;
23
+ background: white;
24
+ display: none;
25
+ overflow: auto;
26
+ -webkit-overflow-scrolling: touch;
27
+ min-width: 8rem;
28
+ max-width: 16rem;
29
+ min-height: 2rem;
30
+ max-height: calc(100vh - 48px);
31
+ box-shadow: 0 1px 4px 0 rgba(16, 29, 48, 0.2);
32
+ border-radius: 0.25rem;
33
+ }
@@ -0,0 +1,185 @@
1
+ import { autoUpdate, computePosition, flip, offset } from '@floating-ui/dom';
2
+ import { Component, Event, h, Host, Listen, Prop } from '@stencil/core';
3
+ import * as focusTrap from 'focus-trap';
4
+ import { tabbable } from 'tabbable';
5
+ let nextUniqueId = 0;
6
+ export class CatMenu {
7
+ constructor() {
8
+ this.id = nextUniqueId++;
9
+ /**
10
+ * The placement of the menu.
11
+ */
12
+ this.placement = 'bottom-start';
13
+ }
14
+ clickHandler(event) {
15
+ var _a;
16
+ // hide menu on button click
17
+ if (this.content && event.composedPath().includes(this.content)) {
18
+ (_a = this.trap) === null || _a === void 0 ? void 0 : _a.deactivate();
19
+ this.hide();
20
+ }
21
+ }
22
+ componentDidLoad() {
23
+ var _a, _b, _c, _d, _e;
24
+ this.trigger = this.firstTabbable(this.triggerSlot);
25
+ (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-haspopup', 'true');
26
+ (_b = this.trigger) === null || _b === void 0 ? void 0 : _b.setAttribute('aria-expanded', 'false');
27
+ (_c = this.trigger) === null || _c === void 0 ? void 0 : _c.setAttribute('aria-controls', this.contentId);
28
+ (_d = this.content) === null || _d === void 0 ? void 0 : _d.setAttribute('id', this.contentId);
29
+ if (this.trigger && this.content) {
30
+ (_e = this.trigger) === null || _e === void 0 ? void 0 : _e.addEventListener('click', () => this.show());
31
+ autoUpdate(this.trigger, this.content, () => this.update());
32
+ }
33
+ this.keyListener = event => {
34
+ if (this.content && ['ArrowDown', 'ArrowUp'].includes(event.key)) {
35
+ const targetElements = tabbable(this.content, { includeContainer: false, getShadowRoot: true });
36
+ const activeElement = this.firstTabbable(document.activeElement);
37
+ const activeIdx = activeElement ? targetElements.indexOf(activeElement) : -1;
38
+ const activeOff = event.key === 'ArrowDown' ? 1 : -1;
39
+ const targetIdx = activeIdx < 0 ? 0 : (activeIdx + activeOff + targetElements.length) % targetElements.length;
40
+ targetElements[targetIdx].focus();
41
+ event.preventDefault();
42
+ }
43
+ };
44
+ document.addEventListener('keydown', this.keyListener);
45
+ }
46
+ disconnectedCallback() {
47
+ if (this.keyListener) {
48
+ document.removeEventListener('keydown', this.keyListener);
49
+ }
50
+ }
51
+ render() {
52
+ return (h(Host, null,
53
+ h("slot", { name: "trigger", ref: el => (this.triggerSlot = el) }),
54
+ h("div", { class: "content", ref: el => (this.content = el) },
55
+ h("slot", { name: "content" }))));
56
+ }
57
+ get contentId() {
58
+ return `cat-menu-${this.id}`;
59
+ }
60
+ show() {
61
+ var _a;
62
+ if (this.content) {
63
+ this.content.style.display = 'block';
64
+ (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'true');
65
+ this.catOpen.emit();
66
+ this.trap = this.trap
67
+ ? this.trap.updateContainerElements(this.content)
68
+ : focusTrap.createFocusTrap(this.content, {
69
+ tabbableOptions: {
70
+ getShadowRoot: true
71
+ },
72
+ allowOutsideClick: true,
73
+ clickOutsideDeactivates: event => !this.content || !event.composedPath().includes(this.content),
74
+ onPostDeactivate: () => this.hide()
75
+ });
76
+ this.trap.activate();
77
+ }
78
+ }
79
+ hide() {
80
+ var _a;
81
+ if (this.content) {
82
+ this.content.style.display = '';
83
+ (_a = this.trigger) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', 'false');
84
+ this.catClose.emit();
85
+ }
86
+ }
87
+ update() {
88
+ if (this.trigger && this.content) {
89
+ computePosition(this.trigger, this.content, {
90
+ placement: this.placement,
91
+ middleware: [offset(CatMenu.OFFSET), flip()]
92
+ }).then(({ x, y }) => {
93
+ if (this.content) {
94
+ Object.assign(this.content.style, {
95
+ left: `${x}px`,
96
+ top: `${y}px`
97
+ });
98
+ }
99
+ });
100
+ }
101
+ }
102
+ firstTabbable(container) {
103
+ return (container ? tabbable(container, { includeContainer: true, getShadowRoot: true }) : []).shift();
104
+ }
105
+ static get is() { return "cat-menu"; }
106
+ static get encapsulation() { return "shadow"; }
107
+ static get originalStyleUrls() { return {
108
+ "$": ["cat-menu.scss"]
109
+ }; }
110
+ static get styleUrls() { return {
111
+ "$": ["cat-menu.css"]
112
+ }; }
113
+ static get properties() { return {
114
+ "placement": {
115
+ "type": "string",
116
+ "mutable": false,
117
+ "complexType": {
118
+ "original": "Placement",
119
+ "resolved": "\"bottom\" | \"bottom-end\" | \"bottom-start\" | \"left\" | \"left-end\" | \"left-start\" | \"right\" | \"right-end\" | \"right-start\" | \"top\" | \"top-end\" | \"top-start\"",
120
+ "references": {
121
+ "Placement": {
122
+ "location": "import",
123
+ "path": "@floating-ui/dom"
124
+ }
125
+ }
126
+ },
127
+ "required": false,
128
+ "optional": false,
129
+ "docs": {
130
+ "tags": [],
131
+ "text": "The placement of the menu."
132
+ },
133
+ "attribute": "placement",
134
+ "reflect": false,
135
+ "defaultValue": "'bottom-start'"
136
+ }
137
+ }; }
138
+ static get events() { return [{
139
+ "method": "catOpen",
140
+ "name": "catOpen",
141
+ "bubbles": true,
142
+ "cancelable": true,
143
+ "composed": true,
144
+ "docs": {
145
+ "tags": [],
146
+ "text": "Emitted when the menu is opened."
147
+ },
148
+ "complexType": {
149
+ "original": "FocusEvent",
150
+ "resolved": "FocusEvent",
151
+ "references": {
152
+ "FocusEvent": {
153
+ "location": "global"
154
+ }
155
+ }
156
+ }
157
+ }, {
158
+ "method": "catClose",
159
+ "name": "catClose",
160
+ "bubbles": true,
161
+ "cancelable": true,
162
+ "composed": true,
163
+ "docs": {
164
+ "tags": [],
165
+ "text": "Emitted when the menu is closed."
166
+ },
167
+ "complexType": {
168
+ "original": "FocusEvent",
169
+ "resolved": "FocusEvent",
170
+ "references": {
171
+ "FocusEvent": {
172
+ "location": "global"
173
+ }
174
+ }
175
+ }
176
+ }]; }
177
+ static get listeners() { return [{
178
+ "name": "catClick",
179
+ "method": "clickHandler",
180
+ "target": undefined,
181
+ "capture": false,
182
+ "passive": false
183
+ }]; }
184
+ }
185
+ CatMenu.OFFSET = 4;
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Auto-generated file. Do not edit directly.
3
+ */
4
+ /* stylelint-disable value-keyword-case */
5
+ /* stylelint-enable value-keyword-case */
6
+ :host {
7
+ /**
8
+ * @prop --background: The background color of the skeleton.
9
+ * @prop --highlight: The highlight color of the skeleton.
10
+ * @prop --speed: The animation speed.
11
+ */
12
+ display: flex;
13
+ flex-direction: column;
14
+ position: relative;
15
+ --background: #ebecf0;
16
+ --highlight: #d7dbe0;
17
+ --speed: 2s;
18
+ }
19
+
20
+ :host([variant=square]),
21
+ :host([variant=circle]) {
22
+ display: inline-flex;
23
+ }
24
+
25
+ :host([hidden]) {
26
+ display: none;
27
+ }
28
+
29
+ :host([variant=head]) {
30
+ margin-bottom: 0.5rem;
31
+ }
32
+
33
+ :host([variant=body]) {
34
+ margin-bottom: 1rem;
35
+ }
36
+
37
+ .cat-skeleton {
38
+ display: block;
39
+ border-radius: 0.25rem;
40
+ background: var(--background);
41
+ }
42
+
43
+ .cat-skeleton-circle {
44
+ border-radius: 10rem;
45
+ }
46
+
47
+ .cat-skeleton-xs.cat-skeleton-rectangle {
48
+ width: var(--width, 100%);
49
+ height: var(--height, 1.5rem);
50
+ }
51
+ .cat-skeleton-xs.cat-skeleton-square, .cat-skeleton-xs.cat-skeleton-circle {
52
+ width: var(--width, 1.5rem);
53
+ height: var(--height, 1.5rem);
54
+ }
55
+ .cat-skeleton-xs.cat-skeleton-head, .cat-skeleton-xs.cat-skeleton-body {
56
+ width: var(--width, var(--line-width, 100%));
57
+ }
58
+ .cat-skeleton-xs.cat-skeleton-head {
59
+ height: calc(0.9375rem - 4px);
60
+ margin: calc((1.25rem - 0.9375rem + 4px) * 0.5) 0;
61
+ }
62
+ .cat-skeleton-xs.cat-skeleton-body {
63
+ height: calc(0.75rem - 4px);
64
+ margin: calc((1rem - 0.75rem + 4px) * 0.5) 0;
65
+ }
66
+
67
+ .cat-skeleton-s.cat-skeleton-rectangle {
68
+ width: var(--width, 100%);
69
+ height: var(--height, 2rem);
70
+ }
71
+ .cat-skeleton-s.cat-skeleton-square, .cat-skeleton-s.cat-skeleton-circle {
72
+ width: var(--width, 2rem);
73
+ height: var(--height, 2rem);
74
+ }
75
+ .cat-skeleton-s.cat-skeleton-head, .cat-skeleton-s.cat-skeleton-body {
76
+ width: var(--width, var(--line-width, 100%));
77
+ }
78
+ .cat-skeleton-s.cat-skeleton-head {
79
+ height: calc(1.125rem - 4px);
80
+ margin: calc((1.5rem - 1.125rem + 4px) * 0.5) 0;
81
+ }
82
+ .cat-skeleton-s.cat-skeleton-body {
83
+ height: calc(0.875rem - 4px);
84
+ margin: calc((1rem - 0.875rem + 4px) * 0.5) 0;
85
+ }
86
+
87
+ .cat-skeleton-m.cat-skeleton-rectangle {
88
+ width: var(--width, 100%);
89
+ height: var(--height, 2.5rem);
90
+ }
91
+ .cat-skeleton-m.cat-skeleton-square, .cat-skeleton-m.cat-skeleton-circle {
92
+ width: var(--width, 2.5rem);
93
+ height: var(--height, 2.5rem);
94
+ }
95
+ .cat-skeleton-m.cat-skeleton-head, .cat-skeleton-m.cat-skeleton-body {
96
+ width: var(--width, var(--line-width, 100%));
97
+ }
98
+ .cat-skeleton-m.cat-skeleton-head {
99
+ height: calc(1.25rem - 4px);
100
+ margin: calc((1.5rem - 1.25rem + 4px) * 0.5) 0;
101
+ }
102
+ .cat-skeleton-m.cat-skeleton-body {
103
+ height: calc(0.9375rem - 4px);
104
+ margin: calc((1.25rem - 0.9375rem + 4px) * 0.5) 0;
105
+ }
106
+
107
+ .cat-skeleton-l.cat-skeleton-rectangle {
108
+ width: var(--width, 100%);
109
+ height: var(--height, 3rem);
110
+ }
111
+ .cat-skeleton-l.cat-skeleton-square, .cat-skeleton-l.cat-skeleton-circle {
112
+ width: var(--width, 3rem);
113
+ height: var(--height, 3rem);
114
+ }
115
+ .cat-skeleton-l.cat-skeleton-head, .cat-skeleton-l.cat-skeleton-body {
116
+ width: var(--width, var(--line-width, 100%));
117
+ }
118
+ .cat-skeleton-l.cat-skeleton-head {
119
+ height: calc(1.5rem - 4px);
120
+ margin: calc((1.75rem - 1.5rem + 4px) * 0.5) 0;
121
+ }
122
+ .cat-skeleton-l.cat-skeleton-body {
123
+ height: calc(1.125rem - 4px);
124
+ margin: calc((1.5rem - 1.125rem + 4px) * 0.5) 0;
125
+ }
126
+
127
+ .cat-skeleton-xl.cat-skeleton-rectangle {
128
+ width: var(--width, 100%);
129
+ height: var(--height, 3.5rem);
130
+ }
131
+ .cat-skeleton-xl.cat-skeleton-square, .cat-skeleton-xl.cat-skeleton-circle {
132
+ width: var(--width, 3.5rem);
133
+ height: var(--height, 3.5rem);
134
+ }
135
+ .cat-skeleton-xl.cat-skeleton-head, .cat-skeleton-xl.cat-skeleton-body {
136
+ width: var(--width, var(--line-width, 100%));
137
+ }
138
+ .cat-skeleton-xl.cat-skeleton-head {
139
+ height: calc(1.75rem - 4px);
140
+ margin: calc((2rem - 1.75rem + 4px) * 0.5) 0;
141
+ }
142
+ .cat-skeleton-xl.cat-skeleton-body {
143
+ height: calc(1.25rem - 4px);
144
+ margin: calc((1.5rem - 1.25rem + 4px) * 0.5) 0;
145
+ }
146
+
147
+ .cat-skeleton-sheen {
148
+ background: linear-gradient(90deg, var(--background) 33%, var(--highlight) 50%, var(--background) 66%) var(--background);
149
+ background-size: 300% 100%;
150
+ animation: sheen var(--speed) ease-in-out infinite;
151
+ }
152
+
153
+ .cat-skeleton-pulse {
154
+ position: relative;
155
+ overflow: hidden;
156
+ }
157
+ .cat-skeleton-pulse::before {
158
+ content: "";
159
+ display: block;
160
+ position: absolute;
161
+ width: 100%;
162
+ height: 100%;
163
+ background-color: var(--highlight);
164
+ animation: var(--speed) ease-in-out 0.5s infinite normal none running pulse;
165
+ opacity: 0;
166
+ }
167
+
168
+ @keyframes sheen {
169
+ 0% {
170
+ background-position: right;
171
+ }
172
+ }
173
+ @keyframes pulse {
174
+ 50% {
175
+ opacity: 1;
176
+ }
177
+ }
@@ -0,0 +1,130 @@
1
+ import { Component, Host, h, Prop } from '@stencil/core';
2
+ /**
3
+ * Skeletons are used to show where content will eventually be drawn.
4
+ */
5
+ export class CatSkeleton {
6
+ constructor() {
7
+ /**
8
+ * The animation style of the skeleton.
9
+ */
10
+ this.effect = 'sheen';
11
+ /**
12
+ * The rendering style of the skeleton.
13
+ */
14
+ this.variant = 'rectangle';
15
+ /**
16
+ * The size of the skeleton. If the variant is set to "head", the size values
17
+ * "xs" to "xl" translate to the head levels `h1` to `h5`.
18
+ */
19
+ this.size = 'm';
20
+ }
21
+ render() {
22
+ return (h(Host, null, Array.from(Array(this.count)).map(() => (h("div", { style: this.style, class: {
23
+ 'cat-skeleton': true,
24
+ [`cat-skeleton-${this.effect}`]: Boolean(this.effect),
25
+ [`cat-skeleton-${this.variant}`]: Boolean(this.variant),
26
+ [`cat-skeleton-${this.size}`]: Boolean(this.size)
27
+ } })))));
28
+ }
29
+ get count() {
30
+ switch (this.variant) {
31
+ case 'head':
32
+ return Math.max(1, this.lines || 1);
33
+ case 'body':
34
+ return Math.max(1, this.lines || 3);
35
+ default:
36
+ return 1;
37
+ }
38
+ }
39
+ get style() {
40
+ return this.variant === 'head' || this.variant === 'body'
41
+ ? {
42
+ '--line-width': `${this.random(50, 100)}%`
43
+ }
44
+ : undefined;
45
+ }
46
+ random(min, max) {
47
+ return Math.floor(Math.random() * (max - min + 1) + min);
48
+ }
49
+ static get is() { return "cat-skeleton"; }
50
+ static get encapsulation() { return "shadow"; }
51
+ static get originalStyleUrls() { return {
52
+ "$": ["cat-skeleton.scss"]
53
+ }; }
54
+ static get styleUrls() { return {
55
+ "$": ["cat-skeleton.css"]
56
+ }; }
57
+ static get properties() { return {
58
+ "effect": {
59
+ "type": "string",
60
+ "mutable": false,
61
+ "complexType": {
62
+ "original": "'plain' | 'sheen' | 'pulse'",
63
+ "resolved": "\"plain\" | \"pulse\" | \"sheen\"",
64
+ "references": {}
65
+ },
66
+ "required": false,
67
+ "optional": false,
68
+ "docs": {
69
+ "tags": [],
70
+ "text": "The animation style of the skeleton."
71
+ },
72
+ "attribute": "effect",
73
+ "reflect": false,
74
+ "defaultValue": "'sheen'"
75
+ },
76
+ "variant": {
77
+ "type": "string",
78
+ "mutable": false,
79
+ "complexType": {
80
+ "original": "'rectangle' | 'square' | 'circle' | 'head' | 'body'",
81
+ "resolved": "\"body\" | \"circle\" | \"head\" | \"rectangle\" | \"square\"",
82
+ "references": {}
83
+ },
84
+ "required": false,
85
+ "optional": false,
86
+ "docs": {
87
+ "tags": [],
88
+ "text": "The rendering style of the skeleton."
89
+ },
90
+ "attribute": "variant",
91
+ "reflect": false,
92
+ "defaultValue": "'rectangle'"
93
+ },
94
+ "size": {
95
+ "type": "string",
96
+ "mutable": false,
97
+ "complexType": {
98
+ "original": "'xs' | 's' | 'm' | 'l' | 'xl'",
99
+ "resolved": "\"l\" | \"m\" | \"s\" | \"xl\" | \"xs\"",
100
+ "references": {}
101
+ },
102
+ "required": false,
103
+ "optional": false,
104
+ "docs": {
105
+ "tags": [],
106
+ "text": "The size of the skeleton. If the variant is set to \"head\", the size values\n\"xs\" to \"xl\" translate to the head levels `h1` to `h5`."
107
+ },
108
+ "attribute": "size",
109
+ "reflect": false,
110
+ "defaultValue": "'m'"
111
+ },
112
+ "lines": {
113
+ "type": "number",
114
+ "mutable": false,
115
+ "complexType": {
116
+ "original": "number",
117
+ "resolved": "number | undefined",
118
+ "references": {}
119
+ },
120
+ "required": false,
121
+ "optional": true,
122
+ "docs": {
123
+ "tags": [],
124
+ "text": "The number of text lines to be rendered for \"head\" and \"body\" variants.\nDefaults to 1 for \"head\" and 3 for \"body\". Will be ignored for other\nvariants."
125
+ },
126
+ "attribute": "lines",
127
+ "reflect": false
128
+ }
129
+ }; }
130
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Auto-generated file. Do not edit directly.
3
+ */
4
+ /* stylelint-disable value-keyword-case */
5
+ /* stylelint-enable value-keyword-case */
6
+ :host {
7
+ display: inline-flex;
8
+ vertical-align: middle;
9
+ /* stylelint-disable property-no-vendor-prefix */
10
+ -webkit-user-select: none;
11
+ -ms-user-select: none;
12
+ user-select: none;
13
+ /* stylelint-enable property-no-vendor-prefix */
14
+ }
15
+ :host[hidden] {
16
+ display: none;
17
+ }
18
+
19
+ span {
20
+ display: inline-flex;
21
+ }
22
+
23
+ svg {
24
+ fill: none;
25
+ stroke: currentColor;
26
+ stroke-dasharray: 135px;
27
+ stroke-dashoffset: 95px;
28
+ stroke-linecap: round;
29
+ stroke-width: 5px;
30
+ transform-origin: center center;
31
+ animation: cat-spinner 0.75s cubic-bezier(0.4, 0.15, 0.6, 0.85) infinite;
32
+ width: 1em;
33
+ height: 1em;
34
+ }
35
+
36
+ .cat-spinner-xs svg {
37
+ font-size: 0.75rem;
38
+ }
39
+
40
+ .cat-spinner-s svg {
41
+ font-size: 1rem;
42
+ }
43
+
44
+ .cat-spinner-m svg {
45
+ font-size: 1.25rem;
46
+ }
47
+
48
+ .cat-spinner-l svg {
49
+ font-size: 1.5rem;
50
+ }
51
+
52
+ .cat-spinner-xl svg {
53
+ font-size: 1.75rem;
54
+ }
55
+
56
+ @keyframes cat-spinner {
57
+ from {
58
+ transform: rotate(0deg);
59
+ }
60
+ to {
61
+ transform: rotate(360deg);
62
+ }
63
+ }