@redvars/peacock 3.2.8 → 3.2.10

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 (86) hide show
  1. package/dist/{PeacockComponent-DMrFEGDh.js → PeacockComponent-CxJc63xj.js} +6 -13
  2. package/dist/PeacockComponent-CxJc63xj.js.map +1 -0
  3. package/dist/assets/styles.css +1 -1
  4. package/dist/assets/styles.css.map +1 -1
  5. package/dist/assets/tokens.css +2 -0
  6. package/dist/assets/tokens.css.map +1 -0
  7. package/dist/{button-BtpAXuLN.js → button-DaL4va7Q.js} +12 -294
  8. package/dist/button-DaL4va7Q.js.map +1 -0
  9. package/dist/button-group.js +3 -2
  10. package/dist/button-group.js.map +1 -1
  11. package/dist/button.js +6 -4
  12. package/dist/button.js.map +1 -1
  13. package/dist/{class-map-CbncA34D.js → class-map-BvQRv7eW.js} +3 -2
  14. package/dist/class-map-BvQRv7eW.js.map +1 -0
  15. package/dist/clock.js +85 -0
  16. package/dist/clock.js.map +1 -0
  17. package/dist/code-editor.js +43877 -0
  18. package/dist/code-editor.js.map +1 -0
  19. package/dist/code-highlighter.js +5 -4
  20. package/dist/code-highlighter.js.map +1 -1
  21. package/dist/custom-elements-jsdocs.json +561 -0
  22. package/dist/custom-elements.json +777 -194
  23. package/dist/directive-Cuw6h7YA.js +9 -0
  24. package/dist/directive-Cuw6h7YA.js.map +1 -0
  25. package/dist/dispatch-event-utils-vbdiOSeC.js +290 -0
  26. package/dist/dispatch-event-utils-vbdiOSeC.js.map +1 -0
  27. package/dist/{breadcrumb-item-DkhwoMAH.js → image-v3BujlY5.js} +261 -92
  28. package/dist/image-v3BujlY5.js.map +1 -0
  29. package/dist/index.js +12 -87
  30. package/dist/index.js.map +1 -1
  31. package/dist/number-counter.js +3 -2
  32. package/dist/number-counter.js.map +1 -1
  33. package/dist/observe-theme-change-NneLARW8.js +51 -0
  34. package/dist/observe-theme-change-NneLARW8.js.map +1 -0
  35. package/dist/peacock-loader.js +22 -11
  36. package/dist/peacock-loader.js.map +1 -1
  37. package/dist/src/code-editor/code-editor.d.ts +45 -0
  38. package/dist/src/code-editor/index.d.ts +2 -0
  39. package/dist/src/image/image.d.ts +45 -0
  40. package/dist/src/image/index.d.ts +1 -0
  41. package/dist/src/index.d.ts +2 -0
  42. package/dist/src/utils/dispatch-event-utils.d.ts +72 -0
  43. package/dist/src/utils/observe-theme-change.d.ts +3 -0
  44. package/dist/src/utils.d.ts +1 -72
  45. package/dist/{state-CEVpI7Vv.js → state-B09bP3XH.js} +2 -2
  46. package/dist/{state-CEVpI7Vv.js.map → state-B09bP3XH.js.map} +1 -1
  47. package/dist/{style-map-mOmZwsJT.js → style-map-B8xgVEc9.js} +3 -2
  48. package/dist/style-map-B8xgVEc9.js.map +1 -0
  49. package/dist/tsconfig.tsbuildinfo +1 -1
  50. package/dist/{unsafe-html-Ca00SXpn.js → unsafe-html-B-dV3Jps.js} +3 -2
  51. package/dist/unsafe-html-B-dV3Jps.js.map +1 -0
  52. package/package.json +5 -3
  53. package/readme.md +2 -2
  54. package/scss/styles.scss +57 -1
  55. package/scss/tokens.css +1 -0
  56. package/scss/tokens.scss +1 -0
  57. package/src/accordion/accordion-item/accordion-item.scss +1 -1
  58. package/src/button/BaseButton.ts +1 -1
  59. package/src/button/button/button.scss +1 -1
  60. package/src/clock/clock.ts +4 -1
  61. package/src/code-editor/code-editor.scss +52 -0
  62. package/src/code-editor/code-editor.ts +215 -0
  63. package/src/code-editor/demo/index.html +37 -0
  64. package/src/code-editor/index.ts +3 -0
  65. package/src/container/container.scss +1 -1
  66. package/src/date-picker/date-picker.ts +1 -1
  67. package/src/image/image.scss +56 -0
  68. package/src/image/image.ts +135 -0
  69. package/src/image/index.ts +1 -0
  70. package/src/index.ts +2 -0
  71. package/src/input/input.ts +1 -2
  72. package/src/menu/menu-item/menu-item.scss +5 -4
  73. package/src/menu/menu-list/menu-list.scss +1 -0
  74. package/src/number-field/number-field.ts +1 -1
  75. package/src/peacock-loader.ts +7 -0
  76. package/src/textarea/textarea.ts +1 -1
  77. package/src/time-picker/time-picker.ts +1 -1
  78. package/src/utils/dispatch-event-utils.ts +131 -0
  79. package/src/utils/observe-theme-change.ts +30 -0
  80. package/src/utils.ts +5 -131
  81. package/dist/PeacockComponent-DMrFEGDh.js.map +0 -1
  82. package/dist/breadcrumb-item-DkhwoMAH.js.map +0 -1
  83. package/dist/button-BtpAXuLN.js.map +0 -1
  84. package/dist/class-map-CbncA34D.js.map +0 -1
  85. package/dist/style-map-mOmZwsJT.js.map +0 -1
  86. package/dist/unsafe-html-Ca00SXpn.js.map +0 -1
@@ -1,290 +1,8 @@
1
- import { i, e as e$2, d as i$1, t, _ as __decorate, n, a as i$2, A, c as __classPrivateFieldGet, b, P as PeacockComponent } from './PeacockComponent-DMrFEGDh.js';
2
- import { r } from './state-CEVpI7Vv.js';
3
- import { e as e$3 } from './class-map-CbncA34D.js';
4
-
5
- /**
6
- * @license
7
- * Copyright 2017 Google LLC
8
- * SPDX-License-Identifier: BSD-3-Clause
9
- */
10
- const e$1=(e,t,c)=>(c.configurable=true,c.enumerable=true,Reflect.decorate&&"object"!=typeof t&&Object.defineProperty(e,t,c),c);
11
-
12
- /**
13
- * @license
14
- * Copyright 2017 Google LLC
15
- * SPDX-License-Identifier: BSD-3-Clause
16
- */function e(e,r){return (n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;return e$1(n,s,{get(){return o(this)}})}}
17
-
18
- async function createCacheFetch(name) {
19
- let cache = null;
20
- // This map tracks requests currently being processed
21
- const inFlightRequests = new Map();
22
- try {
23
- cache = await window.caches.open(name);
24
- }
25
- catch (e) {
26
- console.warn('window.caches access not allowed');
27
- }
28
- return async (url) => {
29
- // 1. Check if we are already fetching this URL
30
- if (inFlightRequests.has(url)) {
31
- // Return the existing promise instead of starting a new one
32
- return inFlightRequests.get(url);
33
- }
34
- // 2. Create the main logic as a promise
35
- const fetchPromise = (async () => {
36
- const request = new Request(url);
37
- // Check Cache first
38
- if (cache) {
39
- const cachedResponse = await cache.match(request);
40
- if (cachedResponse) {
41
- return cachedResponse.text();
42
- }
43
- }
44
- // Prepare network request
45
- const urlObj = new URL(request.url);
46
- const isSameOrigin = urlObj.origin === window.location.origin;
47
- const response = await fetch(request.url, {
48
- method: 'GET',
49
- mode: isSameOrigin ? 'no-cors' : 'cors',
50
- credentials: isSameOrigin ? 'same-origin' : 'omit',
51
- });
52
- // --- Handle 404 ---
53
- if (response.status === 404) {
54
- console.error(`[Fetch Error] Resource not found (404): ${url}`);
55
- return ''; // Return empty string as requested
56
- }
57
- const result = await response.text();
58
- // Update Cache if applicable
59
- if (cache && response.status === 200) {
60
- // We clone the response logic by creating a new Response with the text body
61
- await cache.put(request, new Response(result, {
62
- status: response.status,
63
- statusText: response.statusText,
64
- headers: response.headers,
65
- }));
66
- }
67
- return result;
68
- })();
69
- // 3. Store the promise in the map
70
- inFlightRequests.set(url, fetchPromise);
71
- try {
72
- // 4. Wait for the result
73
- return await fetchPromise;
74
- }
75
- finally {
76
- // 5. Clean up: Remove the promise from the map when done
77
- // This ensures subsequent calls (after this one finishes) can start fresh
78
- inFlightRequests.delete(url);
79
- }
80
- };
81
- }
82
- // Basic sanitization: remove <script>, <foreignObject>, event handler attributes (on*), and iframes
83
- function sanitizeSvg(rawSvg) {
84
- try {
85
- const parser = new DOMParser();
86
- const doc = parser.parseFromString(rawSvg, 'image/svg+xml');
87
- // remove script tags
88
- const scripts = Array.from(doc.querySelectorAll('script'));
89
- scripts.forEach(n => n.remove());
90
- // remove foreignObject and iframe-like elements
91
- const foreigns = Array.from(doc.querySelectorAll('foreignObject, iframe'));
92
- foreigns.forEach(n => n.remove());
93
- // remove event handler attributes like onload, onclick, etc.
94
- const all = Array.from(doc.querySelectorAll('*'));
95
- all.forEach(el => {
96
- const attrs = Array.from(el.attributes).filter(a => /^on/i.test(a.name));
97
- attrs.forEach(a => el.removeAttribute(a.name));
98
- });
99
- const el = doc.documentElement;
100
- if (!el)
101
- return '';
102
- // serialize back to string
103
- const serializer = new XMLSerializer();
104
- return serializer.serializeToString(el);
105
- }
106
- catch (e) {
107
- // parsing failed; fall back to empty content to avoid injecting unsafe content
108
- return '';
109
- }
110
- }
111
- function __hasMeaningfulContent(slotElement) {
112
- const nodes = slotElement.assignedNodes({ flatten: true });
113
- for (const node of nodes) {
114
- // If it's an element node, it has content
115
- if (node.nodeType === Node.ELEMENT_NODE) {
116
- return true;
117
- }
118
- // If it's a text node and contains non-whitespace characters, it has content
119
- if (node.nodeType === Node.TEXT_NODE &&
120
- node.textContent.trim().length > 0) {
121
- return true;
122
- }
123
- }
124
- // No meaningful content found
125
- return false;
126
- }
127
- function observerSlotChangesWithCallback(slot, callback) {
128
- const observer = new MutationObserver(() => {
129
- callback(__hasMeaningfulContent(slot));
130
- });
131
- // Observe the elements currently assigned to the slot
132
- const assignedNodes = slot?.assignedNodes({ flatten: true }) || [];
133
- assignedNodes.forEach(node => {
134
- observer.observe(node, {
135
- attributes: true,
136
- childList: true,
137
- characterData: true,
138
- subtree: true,
139
- });
140
- });
141
- callback(__hasMeaningfulContent(slot));
142
- }
143
- function throttle(func, delay, options = { leading: true, trailing: true }) {
144
- let timerId;
145
- let lastExec = 0;
146
- return function (...args) {
147
- // @ts-ignore
148
- const context = this;
149
- const now = Date.now();
150
- const shouldCallNow = options.leading && now - lastExec >= delay;
151
- if (shouldCallNow) {
152
- func.apply(context, args);
153
- lastExec = now;
154
- }
155
- else if (options.trailing && !timerId) {
156
- timerId = setTimeout(() => {
157
- func.apply(context, args);
158
- lastExec = Date.now();
159
- timerId = null;
160
- }, delay);
161
- }
162
- };
163
- }
164
- /**
165
- * Dispatches a click event to the given element that triggers a native action,
166
- * but is not composed and therefore is not seen outside the element.
167
- *
168
- * This is useful for responding to an external click event on the host element
169
- * that should trigger an internal action like a button click.
170
- *
171
- * Note, a helper is provided because setting this up correctly is a bit tricky.
172
- * In particular, calling `click` on an element creates a composed event, which
173
- * is not desirable, and a manually dispatched event must specifically be a
174
- * `MouseEvent` to trigger a native action.
175
- *
176
- * @example
177
- * hostClickListener = (event: MouseEvent) {
178
- * if (isActivationClick(event)) {
179
- * this.dispatchActivationClick(this.buttonElement);
180
- * }
181
- * }
182
- *
183
- */
184
- function dispatchActivationClick(element) {
185
- const event = new MouseEvent('click', { bubbles: true });
186
- element.dispatchEvent(event);
187
- return event;
188
- }
189
- // Ignore events for one microtask only.
190
- let isSquelchingEvents = false;
191
- async function __squelchEventsForMicrotask() {
192
- isSquelchingEvents = true;
193
- // Need to pause for just one microtask.
194
- // tslint:disable-next-line
195
- await null;
196
- isSquelchingEvents = false;
197
- }
198
- // TODO(https://bugzilla.mozilla.org/show_bug.cgi?id=1804576)
199
- // Remove when Firefox bug is addressed.
200
- function __squelchEvent(event) {
201
- const squelched = isSquelchingEvents;
202
- if (squelched) {
203
- event.preventDefault();
204
- event.stopImmediatePropagation();
205
- }
206
- __squelchEventsForMicrotask();
207
- return squelched;
208
- }
209
- /**
210
- * Returns true if the click event should trigger an activation behavior. The
211
- * behavior is defined by the element and is whatever it should do when
212
- * clicked.
213
- *
214
- * Typically when an element needs to handle a click, the click is generated
215
- * from within the element and an event listener within the element implements
216
- * the needed behavior; however, it's possible to fire a click directly
217
- * at the element that the element should handle. This method helps
218
- * distinguish these "external" clicks.
219
- *
220
- * An "external" click can be triggered in a number of ways: via a click
221
- * on an associated label for a form associated element, calling
222
- * `element.click()`, or calling
223
- * `element.dispatchEvent(new MouseEvent('click', ...))`.
224
- *
225
- * Also works around Firefox issue
226
- * https://bugzilla.mozilla.org/show_bug.cgi?id=1804576 by squelching
227
- * events for a microtask after called.
228
- *
229
- * @example
230
- * hostClickListener = (event: MouseEvent) {
231
- * if (isActivationClick(event)) {
232
- * this.dispatchActivationClick(this.buttonElement);
233
- * }
234
- * }
235
- *
236
- */
237
- function isActivationClick(event) {
238
- // Event must start at the event target.
239
- if (event.currentTarget !== event.target) {
240
- return false;
241
- }
242
- // Event must not be retargeted from shadowRoot.
243
- if (event.composedPath()[0] !== event.target) {
244
- return false;
245
- }
246
- // Target must not be disabled; this should only occur for a synthetically
247
- // dispatched click.
248
- if (event.target.disabled) {
249
- return false;
250
- }
251
- // This is an activation if the event should not be squelched.
252
- return !__squelchEvent(event);
253
- }
254
- /**
255
- * Re-dispatches an event from the provided element.
256
- *
257
- * This function is useful for forwarding non-composed events, such as `change`
258
- * events.
259
- *
260
- * @example
261
- * class MyInput extends LitElement {
262
- * render() {
263
- * return html`<input @change=${this.redispatchEvent}>`;
264
- * }
265
- *
266
- * protected redispatchEvent(event: Event) {
267
- * redispatchEvent(this, event);
268
- * }
269
- * }
270
- *
271
- * @param element The element to dispatch the event from.
272
- * @param event The event to re-dispatch.
273
- * @return Whether or not the event was dispatched (if cancelable).
274
- */
275
- function redispatchEvent(element, event) {
276
- // For bubbling events in SSR light DOM (or composed), stop their propagation
277
- // and dispatch the copy.
278
- if (event.bubbles && (!element.shadowRoot || event.composed)) {
279
- event.stopPropagation();
280
- }
281
- const copy = Reflect.construct(event.constructor, [event.type, event]);
282
- const dispatched = element.dispatchEvent(copy);
283
- if (!dispatched) {
284
- event.preventDefault();
285
- }
286
- return dispatched;
287
- }
1
+ import { i, _ as __decorate, n, a as i$2, A, c as __classPrivateFieldGet, b, P as PeacockComponent } from './PeacockComponent-CxJc63xj.js';
2
+ import { r } from './state-B09bP3XH.js';
3
+ import { e as e$2 } from './class-map-BvQRv7eW.js';
4
+ import { e as e$1, i as isActivationClick, d as dispatchActivationClick, t as throttle, o as observerSlotChangesWithCallback } from './dispatch-event-utils-vbdiOSeC.js';
5
+ import { e, i as i$1, t } from './directive-Cuw6h7YA.js';
288
6
 
289
7
  var css_248z$2 = i`* {
290
8
  box-sizing: border-box;
@@ -351,7 +69,7 @@ slot::slotted(*) {
351
69
  justify-content: center;
352
70
  gap: var(--_button-icon-label-spacing);
353
71
  width: 100%;
354
- z-index: 1;
72
+ z-index: 0;
355
73
  color: var(--_label-text-color);
356
74
  opacity: var(--_label-text-opacity, 1);
357
75
  --icon-size: var(--button-icon-size, var(--_button-icon-size));
@@ -827,7 +545,7 @@ class SpreadDirective extends i$1 {
827
545
  }
828
546
  }
829
547
  }
830
- const spread = e$2(SpreadDirective);
548
+ const spread = e(SpreadDirective);
831
549
 
832
550
  var _BaseButton_id;
833
551
  class BaseButton extends i$2 {
@@ -1027,7 +745,7 @@ __decorate([
1027
745
  r()
1028
746
  ], BaseButton.prototype, "isPressed", void 0);
1029
747
  __decorate([
1030
- e('.button')
748
+ e$1('.button')
1031
749
  ], BaseButton.prototype, "buttonElement", void 0);
1032
750
 
1033
751
  var _Button_tabindex;
@@ -1108,7 +826,7 @@ let Button = class Button extends BaseButton {
1108
826
  };
1109
827
  if (!isLink) {
1110
828
  return b `<button
1111
- class=${e$3(cssClasses)}
829
+ class=${e$2(cssClasses)}
1112
830
  id="button"
1113
831
  tabindex=${__classPrivateFieldGet(this, _Button_tabindex, "f")}
1114
832
  type=${this.htmlType}
@@ -1125,7 +843,7 @@ let Button = class Button extends BaseButton {
1125
843
  ${this.__renderTooltip()}`;
1126
844
  }
1127
845
  return b `<a
1128
- class=${e$3(cssClasses)}
846
+ class=${e$2(cssClasses)}
1129
847
  id="button"
1130
848
  tabindex=${__classPrivateFieldGet(this, _Button_tabindex, "f")}
1131
849
  href=${this.href}
@@ -1176,5 +894,5 @@ Button = __decorate([
1176
894
  PeacockComponent
1177
895
  ], Button);
1178
896
 
1179
- export { Button as B, e$1 as a, sanitizeSvg as b, createCacheFetch as c, css_248z$2 as d, e, css_248z$1 as f, BaseButton as g, observerSlotChangesWithCallback as o, redispatchEvent as r, spread as s, throttle as t };
1180
- //# sourceMappingURL=button-BtpAXuLN.js.map
897
+ export { Button as B, css_248z$1 as a, BaseButton as b, css_248z$2 as c, spread as s };
898
+ //# sourceMappingURL=button-DaL4va7Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-DaL4va7Q.js","sources":["../../src/spread.ts","../../src/button/BaseButton.ts","../../src/button/button/button.ts"],"sourcesContent":["import {\n directive,\n Directive,\n ElementPart,\n PartInfo,\n PartType,\n} from 'lit/directive.js';\n\nclass SpreadDirective extends Directive {\n constructor(partInfo: PartInfo) {\n super(partInfo);\n if (partInfo.type !== PartType.ELEMENT) {\n throw new Error('spread() can only be used on elements');\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n render(_props: { [key: string]: any } | undefined) {\n return '';\n }\n\n update(part: ElementPart, [props]: [{ [key: string]: any } | undefined]) {\n if (!props) return;\n // eslint-disable-next-line guard-for-in,no-restricted-syntax\n for (const key in props) {\n const value = props[key];\n if (value === undefined || value === null) {\n part.element.removeAttribute(key);\n } else {\n part.element.setAttribute(key, value);\n }\n }\n }\n}\n\nexport const spread = directive(SpreadDirective);\n","import { html, LitElement, nothing } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { dispatchActivationClick, isActivationClick } from '../utils/dispatch-event-utils.js';\n\nexport class BaseButton extends LitElement {\n #id = crypto.randomUUID();\n\n @property({ type: String }) htmlType: 'button' | 'submit' | 'reset' =\n 'button';\n\n /**\n * Type is preset of color and variant. Type will be only applied.\n *\n */\n @property({ type: String }) type?: 'primary' | 'secondary' | 'tertiary';\n\n /**\n * The visual style of the button.\n *\n * Possible variant values:\n * `\"filled\"` is a filled button.\n * `\"outlined\"` is an outlined button.\n * `\"text\"` is a transparent button.\n * `\"tonal\"` is a light color button.\n * `\"elevated\"` is elevated button\n */\n @property() variant:\n | 'elevated'\n | 'filled'\n | 'tonal'\n | 'outlined'\n | 'text'\n | 'neo' = 'filled';\n\n /**\n * Defines the primary color of the button. This can be set to predefined color names to apply specific color themes.\n */\n @property({ reflect: true }) color:\n | 'primary'\n | 'success'\n | 'danger'\n | 'warning'\n | 'light'\n | 'dark' = 'primary';\n\n /**\n * Button size.\n * Possible values are `\"sm\"`, `\"md\"`, `\"lg\"`. Defaults to `\"md\"`.\n */\n @property() size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n\n /**\n * If true, the user cannot interact with the button. Defaults to `false`.\n */\n @property({ type: Boolean, reflect: true })\n disabled: boolean = false;\n\n @property() skeleton: boolean = false;\n\n /**\n * If true, the user cannot interact with the button and the button is visually styled as disabled. But the button is still focusable. Defaults to `false`.\n */\n @property({ reflect: true, attribute: 'soft-disabled' })\n softDisabled: boolean = false;\n\n /**\n * If button is disabled, the reason why it is disabled.\n */\n @property({ attribute: 'disabled-reason' })\n disabledReason: string = '';\n\n /**\n * Hyperlink to navigate to on click.\n */\n @property({ reflect: true }) href?: string;\n\n @property({ reflect: true })\n configAria?: { [key: string]: any };\n\n /**\n * Sets or retrieves the window or frame at which to target content.\n */\n @property() target: string = '_self';\n\n @property() selected: boolean = false;\n\n /**\n * Sets the delay for throttle in milliseconds. Defaults to 200 milliseconds.\n */\n @property() throttleDelay = 200;\n\n @property() tooltip?: string;\n\n /**\n * States\n */\n @state()\n isPressed = false;\n\n @query('.button') readonly buttonElement!: HTMLElement | null;\n\n override focus() {\n this.buttonElement?.focus();\n }\n\n override blur() {\n this.buttonElement?.blur();\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.addEventListener('click', this.__dispatchClickWithThrottle);\n window.addEventListener('mouseup', this.__handlePress);\n }\n\n override disconnectedCallback() {\n window.removeEventListener('mouseup', this.__handlePress);\n this.removeEventListener('click', this.__dispatchClickWithThrottle);\n super.disconnectedCallback();\n }\n\n __handlePress = (event: KeyboardEvent | MouseEvent) => {\n if (this.disabled || this.skeleton || this.softDisabled) return;\n if (\n event instanceof KeyboardEvent &&\n event.type === 'keydown' &&\n (event.key === 'Enter' || event.key === ' ')\n ) {\n this.isPressed = true;\n } else if (event.type === 'mousedown') {\n this.isPressed = true;\n } else {\n this.isPressed = false;\n }\n };\n\n __isLink() {\n return !!this.href;\n }\n\n __dispatchClickWithThrottle: (event: MouseEvent | KeyboardEvent) => void =\n event => {\n this.__dispatchClick(event);\n };\n\n __dispatchClick = (event: MouseEvent | KeyboardEvent) => {\n // If the button is soft-disabled or a disabled link, we need to explicitly\n // prevent the click from propagating to other event listeners as well as\n // prevent the default action.\n if (this.softDisabled || (this.disabled && this.href) || this.skeleton) {\n event.stopImmediatePropagation();\n event.preventDefault();\n return;\n }\n\n if (!isActivationClick(event) || !this.buttonElement) {\n return;\n }\n\n this.focus();\n dispatchActivationClick(this.buttonElement);\n };\n\n __convertTypeToVariantAndColor() {\n if (this.type === 'primary') {\n this.color = 'primary';\n this.variant = 'filled';\n } else if (this.type === 'secondary') {\n this.color = 'dark';\n this.variant = 'outlined';\n } else if (this.type === 'tertiary') {\n this.color = 'primary';\n this.variant = 'text';\n } else if (this.type === 'danger') {\n this.color = 'danger';\n this.variant = 'filled';\n }\n }\n\n __getDisabledReasonID() {\n return this.disabled && this.disabledReason\n ? `disabled-reason-${this.#id}`\n : nothing;\n }\n\n __renderDisabledReason() {\n const disabledReasonID = this.__getDisabledReasonID();\n if (disabledReasonID)\n return html`<div\n id=\"disabled-reason-${this.#id}\"\n role=\"tooltip\"\n aria-label=${this.disabledReason}\n class=\"screen-reader-only\"\n >\n {this.disabledReason}\n </div>`;\n return nothing;\n }\n\n __renderTooltip() {\n if (this.tooltip) {\n return html`<base-tooltip for=\"button\">${this.tooltip}</base-tooltip>`;\n }\n return nothing;\n }\n}\n","import { html } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport PeacockComponent from 'src/PeacockComponent.js';\nimport styles from './button.scss';\nimport colorStyles from './button-colors.scss';\nimport sizeStyles from './button-sizes.scss';\nimport { observerSlotChangesWithCallback, throttle } from '../../utils.js';\nimport { spread } from '../../spread.js';\nimport { BaseButton } from '../BaseButton.js';\n\n/**\n * @label Button\n * @tag base-button\n * @rawTag button\n *\n * @summary Buttons help people initiate actions, from sending an email, to sharing a document, to liking a post.\n * @overview\n * <p>Buttons are clickable elements that are used to trigger actions. They communicate calls to action to the user and allow users to interact with pages in a variety of ways. Button labels express what action will occur when the user interacts with it.</p>\n *\n * @cssprop --button-container-shape: Defines the border radius of the button container shape.\n *\n * @cssprop --button-container-shape-start-start: Defines the start position of the button container shape.\n * @cssprop --button-container-shape-start-end: Defines the end position of the button container shape.\n * @cssprop --button-container-shape-end-start: Defines the start position of the button container shape.\n * @cssprop --button-container-shape-end-end: Defines the end position of the button container shape.\n *\n *\n * @cssprop --filled-button-container-color: Color of the filled button container.\n * @cssprop --filled-button-label-text-color: Text color of the filled button label.\n *\n * @cssprop --outlined-button-container-color: Color of the outlined button container.\n * @cssprop --outlined-button-label-text-color: Text color of the outlined button label.\n *\n * @cssprop --text-button-label-text-color: Text color of the text button label.\n *\n * @cssprop --tonal-button-container-color: Color of the tonal button container.\n * @cssprop --tonal-button-label-text-color: Text color of the tonal button label.\n *\n * @cssprop --elevated-button-container-color: Color of the elevated button container.\n * @cssprop --elevated-button-label-text-color: Text color of the elevated button label.\n *\n * @cssprop --neo-button-container-color: Color of the neo button container.\n * @cssprop --neo-button-label-text-color: Text color of the neo button label.\n *\n * @fires {MouseEvent} click - Dispatched when the button is clicked.\n *\n * @example\n * ```html\n * <base-button>Button</base-button>\n * ```\n * @tags display\n */\n@PeacockComponent\nexport class Button extends BaseButton {\n static override styles = [styles, colorStyles, sizeStyles];\n\n #tabindex?: number = 0;\n\n /**\n * Icon alignment.\n * Possible values are `\"start\"`, `\"end\"`. Defaults to `\"end\"`.\n */\n @property({ attribute: 'icon-align' })\n iconAlign: 'start' | 'end' = 'end';\n\n @state()\n private slotHasContent = false;\n\n override firstUpdated() {\n this.__dispatchClickWithThrottle = throttle(\n this.__dispatchClick,\n this.throttleDelay,\n );\n observerSlotChangesWithCallback(\n this.renderRoot.querySelector('slot'),\n hasContent => {\n this.slotHasContent = hasContent;\n this.requestUpdate();\n },\n );\n\n this.__convertTypeToVariantAndColor();\n }\n\n override render() {\n const isLink = this.__isLink();\n\n const cssClasses = {\n button: true,\n 'button-element': true,\n [`size-${this.size}`]: true,\n [`variant-${this.variant}`]: true,\n [`color-${this.color}`]: true,\n disabled: this.disabled || this.softDisabled,\n pressed: this.isPressed,\n 'has-content': this.slotHasContent,\n 'show-skeleton': this.skeleton,\n [`icon-align-${this.iconAlign}`]: true,\n };\n\n if (!isLink) {\n return html`<button\n class=${classMap(cssClasses)}\n id=\"button\"\n tabindex=${this.#tabindex}\n type=${this.htmlType}\n @mousedown=${this.__handlePress}\n @keydown=${this.__handlePress}\n @keyup=${this.__handlePress}\n ?aria-describedby=${this.__getDisabledReasonID()}\n aria-disabled=${`${this.disabled || this.softDisabled}`}\n ?disabled=${this.disabled}\n ${spread(this.configAria)}\n >\n ${this.renderButtonContent()}\n </button>\n ${this.__renderTooltip()}`;\n }\n return html`<a\n class=${classMap(cssClasses)}\n id=\"button\"\n tabindex=${this.#tabindex}\n href=${this.href}\n target=${this.target}\n @mousedown=${this.__handlePress}\n @keydown=${this.__handlePress}\n @keyup=${this.__handlePress}\n role=\"button\"\n ?aria-describedby=${this.__getDisabledReasonID()}\n aria-disabled=${`${this.disabled}`}\n ${spread(this.configAria)}\n >\n ${this.renderButtonContent()}\n </a>\n ${this.__renderTooltip()}`;\n }\n\n renderButtonContent() {\n return html`\n <focus-ring class=\"focus-ring\" .control=${this} element=\"buttonElement\"></focus-ring>\n <base-elevation class=\"elevation\"></base-elevation>\n <div class=\"neo-background\"></div>\n <div class=\"background\"></div>\n <div class=\"outline\"></div>\n <base-ripple class=\"ripple\"></base-ripple>\n <base-skeleton class=\"skeleton\"></base-skeleton>\n\n <div class=\"button-content\">\n <div class=\"slot-container\">\n <slot></slot>\n </div>\n\n <slot name=\"icon\"></slot>\n </div>\n\n ${this.__renderDisabledReason()}\n `;\n }\n}\n"],"names":["Directive","PartType","directive","LitElement","nothing","html","property","state","query","classMap","styles","colorStyles","sizeStyles"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import { i, _ as __decorate, n, P as PeacockComponent, a as i$1, b } from './PeacockComponent-DMrFEGDh.js';
2
- import { e } from './class-map-CbncA34D.js';
1
+ import { i, _ as __decorate, n, P as PeacockComponent, a as i$1, b } from './PeacockComponent-CxJc63xj.js';
2
+ import { e } from './class-map-BvQRv7eW.js';
3
+ import './directive-Cuw6h7YA.js';
3
4
 
4
5
  var css_248z = i`* {
5
6
  box-sizing: border-box;
@@ -1 +1 @@
1
- {"version":3,"file":"button-group.js","sources":["../../src/button/button-group/button-group.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport PeacockComponent from 'src/PeacockComponent.js';\nimport styles from './button-group.scss';\n\n/**\n * @label Button Group\n * @tag button-group\n * @rawTag button-group\n *\n * @summary Group a series of buttons together on a single line with the button group, and super-power.\n\n * @example\n * ```html\n * <button-group>\n * <icon-button name=\"home\"></icon-button>\n * <icon-button name=\"alarm\"></icon-button>\n * </button-group>\n * ```\n *\n * @tags controls\n */\n@PeacockComponent\nexport class ButtonGroup extends LitElement {\n // Lit prefers CSS-in-JS for better performance and scoping.\n // If you prefer keeping the SCSS file, you'll need a build tool (like Vite or Webpack)\n // that can import .scss files as lit-css.\n static styles = [styles];\n\n /**\n * Button size.\n * Possible values are `\"sm\"`, `\"md\"`, `\"lg\"`. Defaults to `\"md\"`.\n */\n @property() size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n\n render() {\n const cssClasses = {\n 'button-group': true,\n [`size-${this.size}`]: true,\n };\n return html`\n <div class=${classMap(cssClasses)}>\n <slot></slot>\n </div>\n `;\n }\n}\n"],"names":["LitElement","html","classMap","styles","property"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA;;;;;;;;;;;;;;;;AAgBG;AAEI,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQA,GAAU,CAAA;AAApC,IAAA,WAAA,GAAA;;AAML;;;AAGG;QACS,IAAA,CAAA,IAAI,GAAqC,IAAI;IAa3D;IAXE,MAAM,GAAA;AACJ,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAA,CAAE,GAAG,IAAI;SAC5B;AACD,QAAA,OAAOC,CAAI,CAAA;mBACIC,CAAQ,CAAC,UAAU,CAAC,CAAA;;;KAGlC;IACH;;AArBA;AACA;AACA;AACO,WAAA,CAAA,MAAM,GAAG,CAACC,QAAM,CAAC;AAMZ,UAAA,CAAA;AAAX,IAAAC,CAAQ;AAAiD,CAAA,EAAA,WAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AAV/C,WAAW,GAAA,UAAA,CAAA;IADvB;AACY,CAAA,EAAA,WAAW,CAuBvB;;;;"}
1
+ {"version":3,"file":"button-group.js","sources":["../../src/button/button-group/button-group.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport PeacockComponent from 'src/PeacockComponent.js';\nimport styles from './button-group.scss';\n\n/**\n * @label Button Group\n * @tag button-group\n * @rawTag button-group\n *\n * @summary Group a series of buttons together on a single line with the button group, and super-power.\n\n * @example\n * ```html\n * <button-group>\n * <icon-button name=\"home\"></icon-button>\n * <icon-button name=\"alarm\"></icon-button>\n * </button-group>\n * ```\n *\n * @tags controls\n */\n@PeacockComponent\nexport class ButtonGroup extends LitElement {\n // Lit prefers CSS-in-JS for better performance and scoping.\n // If you prefer keeping the SCSS file, you'll need a build tool (like Vite or Webpack)\n // that can import .scss files as lit-css.\n static styles = [styles];\n\n /**\n * Button size.\n * Possible values are `\"sm\"`, `\"md\"`, `\"lg\"`. Defaults to `\"md\"`.\n */\n @property() size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n\n render() {\n const cssClasses = {\n 'button-group': true,\n [`size-${this.size}`]: true,\n };\n return html`\n <div class=${classMap(cssClasses)}>\n <slot></slot>\n </div>\n `;\n }\n}\n"],"names":["LitElement","html","classMap","styles","property"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA;;;;;;;;;;;;;;;;AAgBG;AAEI,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQA,GAAU,CAAA;AAApC,IAAA,WAAA,GAAA;;AAML;;;AAGG;QACS,IAAA,CAAA,IAAI,GAAqC,IAAI;IAa3D;IAXE,MAAM,GAAA;AACJ,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAA,CAAE,GAAG,IAAI;SAC5B;AACD,QAAA,OAAOC,CAAI,CAAA;mBACIC,CAAQ,CAAC,UAAU,CAAC,CAAA;;;KAGlC;IACH;;AArBA;AACA;AACA;AACO,WAAA,CAAA,MAAM,GAAG,CAACC,QAAM,CAAC;AAMZ,UAAA,CAAA;AAAX,IAAAC,CAAQ;AAAiD,CAAA,EAAA,WAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AAV/C,WAAW,GAAA,UAAA,CAAA;IADvB;AACY,CAAA,EAAA,WAAW,CAuBvB;;;;"}
package/dist/button.js CHANGED
@@ -1,5 +1,7 @@
1
- import './PeacockComponent-DMrFEGDh.js';
2
- import './state-CEVpI7Vv.js';
3
- import './class-map-CbncA34D.js';
4
- export { B as Button } from './button-BtpAXuLN.js';
1
+ import './PeacockComponent-CxJc63xj.js';
2
+ import './state-B09bP3XH.js';
3
+ import './class-map-BvQRv7eW.js';
4
+ export { B as Button } from './button-DaL4va7Q.js';
5
+ import './dispatch-event-utils-vbdiOSeC.js';
6
+ import './directive-Cuw6h7YA.js';
5
7
  //# sourceMappingURL=button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
1
+ {"version":3,"file":"button.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -1,4 +1,5 @@
1
- import { e as e$1, d as i, t, E } from './PeacockComponent-DMrFEGDh.js';
1
+ import { E } from './PeacockComponent-CxJc63xj.js';
2
+ import { e as e$1, i, t } from './directive-Cuw6h7YA.js';
2
3
 
3
4
  /**
4
5
  * @license
@@ -7,4 +8,4 @@ import { e as e$1, d as i, t, E } from './PeacockComponent-DMrFEGDh.js';
7
8
  */const e=e$1(class extends i{constructor(t$1){if(super(t$1),t$1.type!==t.ATTRIBUTE||"class"!==t$1.name||t$1.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(t){return " "+Object.keys(t).filter(s=>t[s]).join(" ")+" "}update(s,[i]){if(void 0===this.st){this.st=new Set,void 0!==s.strings&&(this.nt=new Set(s.strings.join(" ").split(/\s/).filter(t=>""!==t)));for(const t in i)i[t]&&!this.nt?.has(t)&&this.st.add(t);return this.render(i)}const r=s.element.classList;for(const t of this.st)t in i||(r.remove(t),this.st.delete(t));for(const t in i){const s=!!i[t];s===this.st.has(t)||this.nt?.has(t)||(s?(r.add(t),this.st.add(t)):(r.remove(t),this.st.delete(t)));}return E}});
8
9
 
9
10
  export { e };
10
- //# sourceMappingURL=class-map-CbncA34D.js.map
11
+ //# sourceMappingURL=class-map-BvQRv7eW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"class-map-BvQRv7eW.js","sources":["../node_modules/lit-html/directives/class-map.js"],"sourcesContent":["import{noChange as t}from\"../lit-html.js\";import{directive as s,Directive as i,PartType as r}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=s(class extends i{constructor(t){if(super(t),t.type!==r.ATTRIBUTE||\"class\"!==t.name||t.strings?.length>2)throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\")}render(t){return\" \"+Object.keys(t).filter(s=>t[s]).join(\" \")+\" \"}update(s,[i]){if(void 0===this.st){this.st=new Set,void 0!==s.strings&&(this.nt=new Set(s.strings.join(\" \").split(/\\s/).filter(t=>\"\"!==t)));for(const t in i)i[t]&&!this.nt?.has(t)&&this.st.add(t);return this.render(i)}const r=s.element.classList;for(const t of this.st)t in i||(r.remove(t),this.st.delete(t));for(const t in i){const s=!!i[t];s===this.st.has(t)||this.nt?.has(t)||(s?(r.add(t),this.st.add(t)):(r.remove(t),this.st.delete(t)))}return t}});export{e as classMap};\n//# sourceMappingURL=class-map.js.map\n"],"names":["s","t","r"],"mappings":";;;AACA;AACA;AACA;AACA;AACA,GAAQ,MAAC,CAAC,CAACA,GAAC,CAAC,cAAc,CAAC,CAAC,WAAW,CAACC,GAAC,CAAC,CAAC,GAAG,KAAK,CAACA,GAAC,CAAC,CAACA,GAAC,CAAC,IAAI,GAAGC,CAAC,CAAC,SAAS,EAAE,OAAO,GAAGD,GAAC,CAAC,IAAI,EAAEA,GAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,oGAAoG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,OAAOA,CAAC,CAAC,CAAC;;;;","x_google_ignoreList":[0]}
package/dist/clock.js ADDED
@@ -0,0 +1,85 @@
1
+ import { i, _ as __decorate, n, P as PeacockComponent, a as i$1, b } from './PeacockComponent-CxJc63xj.js';
2
+
3
+ class ClockController {
4
+ constructor(host, timeout = 1000) {
5
+ this.value = new Date();
6
+ this.host = host;
7
+ this.host.addController(this);
8
+ this.timeout = timeout;
9
+ }
10
+ hostConnected() {
11
+ // Start a timer when the host is connected
12
+ this._timerID = setInterval(() => {
13
+ this.value = new Date();
14
+ // Update the host with new value
15
+ this.host.requestUpdate();
16
+ }, this.timeout);
17
+ }
18
+ hostDisconnected() {
19
+ // Clear the timer when the host is disconnected
20
+ clearInterval(this._timerID);
21
+ this._timerID = undefined;
22
+ }
23
+ }
24
+
25
+ var css_248z = i`* {
26
+ box-sizing: border-box;
27
+ }
28
+
29
+ .screen-reader-only {
30
+ display: none !important;
31
+ }
32
+
33
+ :host {
34
+ display: inline-block;
35
+ }
36
+
37
+ .current-time {
38
+ font-family: var(--typography-body-medium-font-family) !important;
39
+ font-size: var(--typography-body-medium-font-size) !important;
40
+ font-weight: var(--typography-body-medium-font-weight) !important;
41
+ line-height: var(--typography-body-medium-line-height) !important;
42
+ letter-spacing: var(--typography-body-medium-letter-spacing) !important;
43
+ }`;
44
+
45
+ /**
46
+ * @label Clock
47
+ * @tag base-clock
48
+ * @rawTag clock
49
+ *
50
+ * @summary Displays the current time in a given timezone.
51
+ * @overview
52
+ * - Clocks are used to display the current time in a specified timezone.
53
+ * - They can be displayed in various formats, including 12-hour and 24-hour time.
54
+ *
55
+ * @example
56
+ * ```html
57
+ * <base-clock></base-clock>
58
+ * ```
59
+ * @tags display
60
+ */
61
+ let Clock = class Clock extends i$1 {
62
+ constructor() {
63
+ super(...arguments);
64
+ this.clockController = new ClockController(this, 100);
65
+ }
66
+ __formatDate(date) {
67
+ return date.toLocaleTimeString('en-US', {
68
+ timeZone: this.timezone,
69
+ });
70
+ }
71
+ render() {
72
+ const currentDate = this.__formatDate(this.clockController.value);
73
+ return b `<div class="current-time">${currentDate}</div>`;
74
+ }
75
+ };
76
+ Clock.styles = [css_248z];
77
+ __decorate([
78
+ n()
79
+ ], Clock.prototype, "timezone", void 0);
80
+ Clock = __decorate([
81
+ PeacockComponent
82
+ ], Clock);
83
+
84
+ export { Clock };
85
+ //# sourceMappingURL=clock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.js","sources":["../../src/clock/ClockController.ts","../../src/clock/clock.ts"],"sourcesContent":["import { ReactiveController, ReactiveControllerHost } from 'lit';\n\nexport class ClockController implements ReactiveController {\n host: ReactiveControllerHost;\n\n value = new Date();\n\n timeout: number;\n\n private _timerID?: any;\n\n constructor(host: ReactiveControllerHost, timeout = 1000) {\n this.host = host;\n this.host.addController(this);\n this.timeout = timeout;\n }\n\n hostConnected() {\n // Start a timer when the host is connected\n this._timerID = setInterval(() => {\n this.value = new Date();\n // Update the host with new value\n this.host.requestUpdate();\n }, this.timeout);\n }\n\n hostDisconnected() {\n // Clear the timer when the host is disconnected\n clearInterval(this._timerID);\n this._timerID = undefined;\n }\n}\n","import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport PeacockComponent from 'src/PeacockComponent.js';\nimport { ClockController } from './ClockController.js';\n\nimport styles from './clock.scss';\n\n/**\n * @label Clock\n * @tag base-clock\n * @rawTag clock\n *\n * @summary Displays the current time in a given timezone.\n * @overview\n * - Clocks are used to display the current time in a specified timezone.\n * - They can be displayed in various formats, including 12-hour and 24-hour time.\n *\n * @example\n * ```html\n * <base-clock></base-clock>\n * ```\n * @tags display\n */\n@PeacockComponent\nexport class Clock extends LitElement {\n static styles = [styles];\n\n clockController = new ClockController(this, 100);\n\n @property() timezone?: string;\n\n __formatDate(date: Date) {\n return date.toLocaleTimeString('en-US', {\n timeZone: this.timezone,\n });\n }\n\n render() {\n const currentDate = this.__formatDate(this.clockController.value);\n return html`<div class=\"current-time\">${currentDate}</div>`;\n }\n}\n"],"names":["LitElement","html","styles","property"],"mappings":";;MAEa,eAAe,CAAA;AAS1B,IAAA,WAAA,CAAY,IAA4B,EAAE,OAAO,GAAG,IAAI,EAAA;AANxD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,IAAI,EAAE;AAOhB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB;IAEA,aAAa,GAAA;;AAEX,QAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE;;AAEvB,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC3B,QAAA,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC;IAClB;IAEA,gBAAgB,GAAA;;AAEd,QAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;IAC3B;AACD;;;;;;;;;;;;;;;;;;;;;;ACxBD;;;;;;;;;;;;;;;AAeG;AAEI,IAAM,KAAK,GAAX,MAAM,KAAM,SAAQA,GAAU,CAAA;AAA9B,IAAA,WAAA,GAAA;;QAGL,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC;IAclD;AAVE,IAAA,YAAY,CAAC,IAAU,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;YACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACxB,SAAA,CAAC;IACJ;IAEA,MAAM,GAAA;AACJ,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;AACjE,QAAA,OAAOC,CAAI,CAAA,CAAA,0BAAA,EAA6B,WAAW,QAAQ;IAC7D;;AAfO,KAAA,CAAA,MAAM,GAAG,CAACC,QAAM,CAAC;AAIZ,UAAA,CAAA;AAAX,IAAAC,CAAQ;AAAqB,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AALnB,KAAK,GAAA,UAAA,CAAA;IADjB;AACY,CAAA,EAAA,KAAK,CAiBjB;;;;"}