@francofantomius/material-components 1.0.2 → 1.1.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 (168) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +41 -9
  3. package/custom-elements.json +19060 -9017
  4. package/dist/chunks/account-menu-Dau0UHTl.js +1290 -0
  5. package/dist/chunks/account-menu-Dau0UHTl.js.map +1 -0
  6. package/dist/chunks/app-drawer-Du1ePzxZ.js +903 -0
  7. package/dist/chunks/app-drawer-Du1ePzxZ.js.map +1 -0
  8. package/dist/chunks/bottom-sheet-q79BBYAj.js +402 -0
  9. package/dist/chunks/bottom-sheet-q79BBYAj.js.map +1 -0
  10. package/dist/chunks/{button-B4TSZ7Sl.js → button-D2vn7kJ8.js} +9 -8
  11. package/dist/chunks/button-D2vn7kJ8.js.map +1 -0
  12. package/dist/chunks/button-group-CNqvJx1n.js +143 -0
  13. package/dist/chunks/button-group-CNqvJx1n.js.map +1 -0
  14. package/dist/chunks/carousel-item-BG6kjjjk.js +371 -0
  15. package/dist/chunks/carousel-item-BG6kjjjk.js.map +1 -0
  16. package/dist/chunks/date-picker-DJeHi4w-.js +777 -0
  17. package/dist/chunks/date-picker-DJeHi4w-.js.map +1 -0
  18. package/dist/chunks/fab-menu.css-3pu930sZ.js +320 -0
  19. package/dist/chunks/fab-menu.css-3pu930sZ.js.map +1 -0
  20. package/dist/chunks/{icon-button-BdSc7eot.js → icon-button-BQz73GLa.js} +2 -2
  21. package/dist/chunks/icon-button-BQz73GLa.js.map +1 -0
  22. package/dist/chunks/loading-indicator-CvWnZr9o.js +193 -0
  23. package/dist/chunks/loading-indicator-CvWnZr9o.js.map +1 -0
  24. package/dist/chunks/menu-item-BBSp5Cqc.js +390 -0
  25. package/dist/chunks/menu-item-BBSp5Cqc.js.map +1 -0
  26. package/dist/chunks/navigation-bar-item-C9DfOEzg.js +397 -0
  27. package/dist/chunks/navigation-bar-item-C9DfOEzg.js.map +1 -0
  28. package/dist/chunks/navigation-rail-item-6pdhNHJK.js +357 -0
  29. package/dist/chunks/navigation-rail-item-6pdhNHJK.js.map +1 -0
  30. package/dist/chunks/{search-bar-TXnqJ-gd.js → search-bar-fUD0qU2P.js} +22 -4
  31. package/dist/chunks/search-bar-fUD0qU2P.js.map +1 -0
  32. package/dist/chunks/segmented-button-B0BvGSQ7.js +265 -0
  33. package/dist/chunks/segmented-button-B0BvGSQ7.js.map +1 -0
  34. package/dist/chunks/side-sheet-S2w081AK.js +360 -0
  35. package/dist/chunks/side-sheet-S2w081AK.js.map +1 -0
  36. package/dist/chunks/slider-D-mnO8yQ.js +450 -0
  37. package/dist/chunks/slider-D-mnO8yQ.js.map +1 -0
  38. package/dist/chunks/split-button-DUfjukQY.js +450 -0
  39. package/dist/chunks/split-button-DUfjukQY.js.map +1 -0
  40. package/dist/chunks/{table-aRTYzDyE.js → table-CqHnneAj.js} +2 -2
  41. package/dist/chunks/{table-aRTYzDyE.js.map → table-CqHnneAj.js.map} +1 -1
  42. package/dist/chunks/time-picker-CZnb2sWz.js +785 -0
  43. package/dist/chunks/time-picker-CZnb2sWz.js.map +1 -0
  44. package/dist/chunks/toolbar-DXVQbQKJ.js +271 -0
  45. package/dist/chunks/toolbar-DXVQbQKJ.js.map +1 -0
  46. package/dist/chunks/tooltip-CE7JMHMu.js +398 -0
  47. package/dist/chunks/tooltip-CE7JMHMu.js.map +1 -0
  48. package/dist/components/account-menu/account-menu.js +8 -0
  49. package/dist/components/app-drawer/app-drawer.js +9 -0
  50. package/dist/components/bottom-sheet/bottom-sheet.css.d.ts +2 -0
  51. package/dist/components/bottom-sheet/bottom-sheet.css.d.ts.map +1 -0
  52. package/dist/components/bottom-sheet/bottom-sheet.d.ts +69 -0
  53. package/dist/components/bottom-sheet/bottom-sheet.d.ts.map +1 -0
  54. package/dist/components/bottom-sheet/bottom-sheet.js +4 -0
  55. package/dist/components/button/button.css.d.ts.map +1 -1
  56. package/dist/components/button/button.js +1 -1
  57. package/dist/components/button-group/button-group.css.d.ts +2 -0
  58. package/dist/components/button-group/button-group.css.d.ts.map +1 -0
  59. package/dist/components/button-group/button-group.d.ts +28 -0
  60. package/dist/components/button-group/button-group.d.ts.map +1 -0
  61. package/dist/components/button-group/button-group.js +4 -0
  62. package/dist/components/carousel/carousel-item.d.ts +33 -0
  63. package/dist/components/carousel/carousel-item.d.ts.map +1 -0
  64. package/dist/components/carousel/carousel-item.js +4 -0
  65. package/dist/components/carousel/carousel.css.d.ts +3 -0
  66. package/dist/components/carousel/carousel.css.d.ts.map +1 -0
  67. package/dist/components/carousel/carousel.d.ts +81 -0
  68. package/dist/components/carousel/carousel.d.ts.map +1 -0
  69. package/dist/components/carousel/carousel.js +284 -0
  70. package/dist/components/carousel/carousel.js.map +1 -0
  71. package/dist/components/date-picker/date-picker.css.d.ts +2 -0
  72. package/dist/components/date-picker/date-picker.css.d.ts.map +1 -0
  73. package/dist/components/date-picker/date-picker.d.ts +59 -0
  74. package/dist/components/date-picker/date-picker.d.ts.map +1 -0
  75. package/dist/components/date-picker/date-picker.js +4 -0
  76. package/dist/components/fab-menu/fab-menu-item.d.ts +35 -0
  77. package/dist/components/fab-menu/fab-menu-item.d.ts.map +1 -0
  78. package/dist/components/fab-menu/fab-menu-item.js +93 -0
  79. package/dist/components/fab-menu/fab-menu-item.js.map +1 -0
  80. package/dist/components/fab-menu/fab-menu.css.d.ts +3 -0
  81. package/dist/components/fab-menu/fab-menu.css.d.ts.map +1 -0
  82. package/dist/components/fab-menu/fab-menu.d.ts +72 -0
  83. package/dist/components/fab-menu/fab-menu.d.ts.map +1 -0
  84. package/dist/components/fab-menu/fab-menu.js +148 -0
  85. package/dist/components/fab-menu/fab-menu.js.map +1 -0
  86. package/dist/components/icon-button/icon-button.js +1 -1
  87. package/dist/components/loading-indicator/loading-indicator.css.d.ts +2 -0
  88. package/dist/components/loading-indicator/loading-indicator.css.d.ts.map +1 -0
  89. package/dist/components/loading-indicator/loading-indicator.d.ts +48 -0
  90. package/dist/components/loading-indicator/loading-indicator.d.ts.map +1 -0
  91. package/dist/components/loading-indicator/loading-indicator.js +4 -0
  92. package/dist/components/menu/menu-item.d.ts +41 -0
  93. package/dist/components/menu/menu-item.d.ts.map +1 -0
  94. package/dist/components/menu/menu-item.js +4 -0
  95. package/dist/components/menu/menu.css.d.ts +3 -0
  96. package/dist/components/menu/menu.css.d.ts.map +1 -0
  97. package/dist/components/menu/menu.d.ts +91 -0
  98. package/dist/components/menu/menu.d.ts.map +1 -0
  99. package/dist/components/menu/menu.js +205 -0
  100. package/dist/components/menu/menu.js.map +1 -0
  101. package/dist/components/navigation-bar/navigation-bar-item.d.ts +49 -0
  102. package/dist/components/navigation-bar/navigation-bar-item.d.ts.map +1 -0
  103. package/dist/components/navigation-bar/navigation-bar-item.js +5 -0
  104. package/dist/components/navigation-bar/navigation-bar.css.d.ts +3 -0
  105. package/dist/components/navigation-bar/navigation-bar.css.d.ts.map +1 -0
  106. package/dist/components/navigation-bar/navigation-bar.d.ts +50 -0
  107. package/dist/components/navigation-bar/navigation-bar.d.ts.map +1 -0
  108. package/dist/components/navigation-bar/navigation-bar.js +150 -0
  109. package/dist/components/navigation-bar/navigation-bar.js.map +1 -0
  110. package/dist/components/navigation-rail/navigation-rail-item.d.ts +36 -0
  111. package/dist/components/navigation-rail/navigation-rail-item.d.ts.map +1 -0
  112. package/dist/components/navigation-rail/navigation-rail-item.js +5 -0
  113. package/dist/components/navigation-rail/navigation-rail.css.d.ts +3 -0
  114. package/dist/components/navigation-rail/navigation-rail.css.d.ts.map +1 -0
  115. package/dist/components/navigation-rail/navigation-rail.d.ts +43 -0
  116. package/dist/components/navigation-rail/navigation-rail.d.ts.map +1 -0
  117. package/dist/components/navigation-rail/navigation-rail.js +121 -0
  118. package/dist/components/navigation-rail/navigation-rail.js.map +1 -0
  119. package/dist/components/search-bar/search-bar.css.d.ts.map +1 -1
  120. package/dist/components/search-bar/search-bar.js +1 -1
  121. package/dist/components/segmented-button/segmented-button.css.d.ts +3 -0
  122. package/dist/components/segmented-button/segmented-button.css.d.ts.map +1 -0
  123. package/dist/components/segmented-button/segmented-button.d.ts +40 -0
  124. package/dist/components/segmented-button/segmented-button.d.ts.map +1 -0
  125. package/dist/components/segmented-button/segmented-button.js +5 -0
  126. package/dist/components/side-sheet/side-sheet.css.d.ts +2 -0
  127. package/dist/components/side-sheet/side-sheet.css.d.ts.map +1 -0
  128. package/dist/components/side-sheet/side-sheet.d.ts +57 -0
  129. package/dist/components/side-sheet/side-sheet.d.ts.map +1 -0
  130. package/dist/components/side-sheet/side-sheet.js +4 -0
  131. package/dist/components/slider/slider.css.d.ts +2 -0
  132. package/dist/components/slider/slider.css.d.ts.map +1 -0
  133. package/dist/components/slider/slider.d.ts +51 -0
  134. package/dist/components/slider/slider.d.ts.map +1 -0
  135. package/dist/components/slider/slider.js +4 -0
  136. package/dist/components/split-button/split-button.css.d.ts +2 -0
  137. package/dist/components/split-button/split-button.css.d.ts.map +1 -0
  138. package/dist/components/split-button/split-button.d.ts +89 -0
  139. package/dist/components/split-button/split-button.d.ts.map +1 -0
  140. package/dist/components/split-button/split-button.js +4 -0
  141. package/dist/components/table/table.js +1 -1
  142. package/dist/components/time-picker/time-picker.css.d.ts +2 -0
  143. package/dist/components/time-picker/time-picker.css.d.ts.map +1 -0
  144. package/dist/components/time-picker/time-picker.d.ts +87 -0
  145. package/dist/components/time-picker/time-picker.d.ts.map +1 -0
  146. package/dist/components/time-picker/time-picker.js +4 -0
  147. package/dist/components/toolbar/toolbar.css.d.ts +2 -0
  148. package/dist/components/toolbar/toolbar.css.d.ts.map +1 -0
  149. package/dist/components/toolbar/toolbar.d.ts +53 -0
  150. package/dist/components/toolbar/toolbar.d.ts.map +1 -0
  151. package/dist/components/toolbar/toolbar.js +4 -0
  152. package/dist/components/tooltip/tooltip.css.d.ts +2 -0
  153. package/dist/components/tooltip/tooltip.css.d.ts.map +1 -0
  154. package/dist/components/tooltip/tooltip.d.ts +89 -0
  155. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  156. package/dist/components/tooltip/tooltip.js +4 -0
  157. package/dist/index.d.ts +21 -0
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.js +148 -2263
  160. package/dist/tokens/index.js +4 -2
  161. package/dist/tokens/index.js.map +1 -1
  162. package/dist/tokens/theme.css.d.ts.map +1 -1
  163. package/llms.txt +919 -0
  164. package/package.json +97 -1
  165. package/dist/chunks/button-B4TSZ7Sl.js.map +0 -1
  166. package/dist/chunks/icon-button-BdSc7eot.js.map +0 -1
  167. package/dist/chunks/search-bar-TXnqJ-gd.js.map +0 -1
  168. package/dist/index.js.map +0 -1
@@ -0,0 +1,4 @@
1
+ import { t as r } from "../../chunks/carousel-item-BG6kjjjk.js";
2
+ export {
3
+ r as MdCarouselItem
4
+ };
@@ -0,0 +1,3 @@
1
+ export declare const carouselStyles: import('lit').CSSResult;
2
+ export declare const carouselItemStyles: import('lit').CSSResult;
3
+ //# sourceMappingURL=carousel.css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carousel.css.d.ts","sourceRoot":"","sources":["../../../src/components/carousel/carousel.css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,yBAwK1B,CAAC;AAEF,eAAO,MAAM,kBAAkB,yBAiH9B,CAAC"}
@@ -0,0 +1,81 @@
1
+ import { PropertyValues } from 'lit';
2
+ import { MdBaseElement } from '../../internal/base-component.js';
3
+ export * from './carousel-item.js';
4
+ export type CarouselLayout = 'multi-browse' | 'hero' | 'full-width' | 'uncontained';
5
+ /**
6
+ * Material Design 3 Carousel Component.
7
+ *
8
+ * Supports multi-browse, hero, full-width, and uncontained layouts,
9
+ * smooth scrolling, next/prev navigation buttons, swipe/drag gestures, and pagination indicators.
10
+ *
11
+ * @slot - Default slot for `md-carousel-item` elements.
12
+ * @slot prev-button - Custom previous navigation button.
13
+ * @slot next-button - Custom next navigation button.
14
+ */
15
+ export declare class MdCarousel extends MdBaseElement {
16
+ static styles: import('lit').CSSResultGroup[];
17
+ layout: CarouselLayout;
18
+ activeIndex: number;
19
+ hideControls: boolean;
20
+ hideIndicators: boolean;
21
+ loop: boolean;
22
+ autoplay: boolean;
23
+ autoplayInterval: number;
24
+ itemSpacing: string;
25
+ itemWidth: string;
26
+ itemHeight: string;
27
+ ariaLabelText: string;
28
+ private assignedItems;
29
+ private get items();
30
+ private scrollerElement?;
31
+ private isAtStart;
32
+ private isAtEnd;
33
+ private itemCount;
34
+ private autoplayTimer;
35
+ private isDragging;
36
+ private dragStartX;
37
+ private dragStartScrollLeft;
38
+ private dragThresholdPassed;
39
+ private isUserInteracting;
40
+ private isProgrammaticScroll;
41
+ private programmaticScrollTimer;
42
+ private scrollDebounceTimer;
43
+ connectedCallback(): void;
44
+ disconnectedCallback(): void;
45
+ updated(changedProperties: PropertyValues<this>): void;
46
+ private handleSlotChange;
47
+ private syncItemsLayout;
48
+ private startAutoplay;
49
+ private stopAutoplay;
50
+ private handleMouseEnter;
51
+ private handleMouseLeave;
52
+ private handleFocusIn;
53
+ private handleFocusOut;
54
+ /**
55
+ * Scrolls to the previous slide in the carousel.
56
+ */
57
+ previous(): void;
58
+ /**
59
+ * Scrolls to the next slide in the carousel.
60
+ */
61
+ next(): void;
62
+ /**
63
+ * Smoothly scrolls to a specific item index.
64
+ */
65
+ scrollToIndex(index: number, smooth?: boolean): void;
66
+ private updateControlsState;
67
+ private handleScroll;
68
+ private determineActiveIndexFromScroll;
69
+ private handlePointerDown;
70
+ private handlePointerMove;
71
+ private handlePointerUp;
72
+ private handlePointerCancel;
73
+ private handleKeyDown;
74
+ render(): import('lit-html').TemplateResult<1>;
75
+ }
76
+ declare global {
77
+ interface HTMLElementTagNameMap {
78
+ 'md-carousel': MdCarousel;
79
+ }
80
+ }
81
+ //# sourceMappingURL=carousel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../../../src/components/carousel/carousel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,cAAc,EAAE,MAAM,KAAK,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,iCAAiC,CAAC;AACzC,OAAO,yCAAyC,CAAC;AACjD,OAAO,iBAAiB,CAAC;AAIzB,cAAc,oBAAoB,CAAC;AAEnC,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,MAAM,GAAG,YAAY,GAAG,aAAa,CAAC;AAEpF;;;;;;;;;GASG;AACH,qBACa,UAAW,SAAQ,aAAa;IAC3C,OAAgB,MAAM,iCAA0C;IAGhE,MAAM,EAAE,cAAc,CAAkB;IAGxC,WAAW,SAAK;IAGhB,YAAY,UAAS;IAGrB,cAAc,UAAS;IAGvB,IAAI,UAAS;IAGb,QAAQ,UAAS;IAGjB,gBAAgB,SAAQ;IAGxB,WAAW,SAAM;IAGjB,SAAS,SAAM;IAGf,UAAU,SAAM;IAGhB,aAAa,SAAc;IAG3B,OAAO,CAAC,aAAa,CAAoB;IAEzC,OAAO,KAAK,KAAK,GAKhB;IAGD,OAAO,CAAC,eAAe,CAAC,CAAc;IAGtC,OAAO,CAAC,SAAS,CAAQ;IAGzB,OAAO,CAAC,OAAO,CAAS;IAGxB,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,uBAAuB,CAA8C;IAC7E,OAAO,CAAC,mBAAmB,CAA8C;IAEhE,iBAAiB;IAkBjB,oBAAoB;IAgBpB,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC;IAmDxD,OAAO,CAAC,gBAAgB,CAItB;IAEF,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,gBAAgB,CAEtB;IAEF,OAAO,CAAC,gBAAgB,CAItB;IAEF,OAAO,CAAC,aAAa,CAEnB;IAEF,OAAO,CAAC,cAAc,CAIpB;IAEF;;OAEG;IACI,QAAQ,IAAI,IAAI;IAWvB;;OAEG;IACI,IAAI,IAAI,IAAI;IAWnB;;OAEG;IACI,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,GAAG,IAAI;IA4CjE,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,YAAY,CAUlB;IAEF,OAAO,CAAC,8BAA8B;IAiCtC,OAAO,CAAC,iBAAiB,CAiBvB;IAEF,OAAO,CAAC,iBAAiB,CAWvB;IAEF,OAAO,CAAC,eAAe,CA8BrB;IAEF,OAAO,CAAC,mBAAmB,CAgBzB;IAEF,OAAO,CAAC,aAAa,CAcnB;IAEO,MAAM;CAiEhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
@@ -0,0 +1,284 @@
1
+ import { n as d, t as r } from "../../chunks/decorate-DXuynaiA.js";
2
+ import "../../chunks/ripple-squbKHhj.js";
3
+ import "../../chunks/focus-ring-CuiJuM-y.js";
4
+ import "../../chunks/icon-DrNqcNEL.js";
5
+ import { n as p, t as E } from "../../chunks/carousel-item-BG6kjjjk.js";
6
+ import { html as n, nothing as m } from "lit";
7
+ import { customElement as g, property as o, query as f, queryAssignedElements as y, state as u } from "lit/decorators.js";
8
+ var s = class extends d {
9
+ constructor(...e) {
10
+ super(...e), this.layout = "multi-browse", this.activeIndex = 0, this.hideControls = !1, this.hideIndicators = !1, this.loop = !1, this.autoplay = !1, this.autoplayInterval = 5e3, this.itemSpacing = "", this.itemWidth = "", this.itemHeight = "", this.ariaLabelText = "Carousel", this.isAtStart = !0, this.isAtEnd = !1, this.itemCount = 0, this.autoplayTimer = null, this.isDragging = !1, this.dragStartX = 0, this.dragStartScrollLeft = 0, this.dragThresholdPassed = !1, this.isUserInteracting = !1, this.isProgrammaticScroll = !1, this.programmaticScrollTimer = null, this.scrollDebounceTimer = null, this.handleSlotChange = () => {
11
+ this.itemCount = this.items?.length || 0, this.syncItemsLayout(), this.updateControlsState();
12
+ }, this.handleMouseEnter = () => {
13
+ this.stopAutoplay();
14
+ }, this.handleMouseLeave = () => {
15
+ this.autoplay && this.startAutoplay();
16
+ }, this.handleFocusIn = () => {
17
+ this.stopAutoplay();
18
+ }, this.handleFocusOut = () => {
19
+ this.autoplay && this.startAutoplay();
20
+ }, this.handleScroll = () => {
21
+ this.isProgrammaticScroll || this.isDragging || (this.scrollDebounceTimer && clearTimeout(this.scrollDebounceTimer), this.scrollDebounceTimer = setTimeout(() => {
22
+ this.determineActiveIndexFromScroll();
23
+ }, 80));
24
+ }, this.handlePointerDown = (t) => {
25
+ if (!(t.button !== 0 && t.pointerType === "mouse") && this.scrollerElement) {
26
+ this.isProgrammaticScroll = !1, this.isDragging = !0, this.dragThresholdPassed = !1, this.dragStartX = t.clientX, this.dragStartScrollLeft = this.scrollerElement.scrollLeft, this.scrollerElement.classList.add("is-dragging"), this.stopAutoplay();
27
+ try {
28
+ t.currentTarget?.setPointerCapture?.(t.pointerId);
29
+ } catch {
30
+ }
31
+ }
32
+ }, this.handlePointerMove = (t) => {
33
+ if (!this.isDragging || !this.scrollerElement) return;
34
+ const i = t.clientX - this.dragStartX;
35
+ Math.abs(i) > 5 && (this.dragThresholdPassed = !0), this.dragThresholdPassed && (this.scrollerElement.scrollLeft = this.dragStartScrollLeft - i);
36
+ }, this.handlePointerUp = (t) => {
37
+ if (this.isDragging) {
38
+ this.isDragging = !1;
39
+ try {
40
+ t.currentTarget?.releasePointerCapture?.(t.pointerId);
41
+ } catch {
42
+ }
43
+ if (this.scrollerElement && this.scrollerElement.classList.remove("is-dragging"), this.dragThresholdPassed && this.scrollerElement) {
44
+ const i = t.clientX - this.dragStartX;
45
+ Math.abs(i) > 40 ? i < 0 ? this.next() : this.previous() : this.scrollToIndex(this.activeIndex, !0);
46
+ }
47
+ this.autoplay && this.startAutoplay();
48
+ }
49
+ }, this.handlePointerCancel = (t) => {
50
+ if (this.isDragging) {
51
+ this.isDragging = !1;
52
+ try {
53
+ t.currentTarget?.releasePointerCapture?.(t.pointerId);
54
+ } catch {
55
+ }
56
+ this.scrollerElement && this.scrollerElement.classList.remove("is-dragging"), this.autoplay && this.startAutoplay();
57
+ }
58
+ }, this.handleKeyDown = (t) => {
59
+ t.key === "ArrowRight" ? (t.preventDefault(), this.next()) : t.key === "ArrowLeft" ? (t.preventDefault(), this.previous()) : t.key === "Home" ? (t.preventDefault(), this.scrollToIndex(0)) : t.key === "End" && (t.preventDefault(), this.scrollToIndex((this.items?.length || 1) - 1));
60
+ };
61
+ }
62
+ static {
63
+ this.styles = [d.styles, p];
64
+ }
65
+ get items() {
66
+ return this.assignedItems && this.assignedItems.length > 0 ? this.assignedItems : Array.from(this.querySelectorAll("md-carousel-item"));
67
+ }
68
+ connectedCallback() {
69
+ super.connectedCallback(), this.setAttribute("role", "region"), this.setAttribute("aria-roledescription", "carousel"), !this.hasAttribute("aria-label") && this.ariaLabelText && this.setAttribute("aria-label", this.ariaLabelText), this.addEventListener("keydown", this.handleKeyDown), this.addEventListener("mouseenter", this.handleMouseEnter), this.addEventListener("mouseleave", this.handleMouseLeave), this.addEventListener("focusin", this.handleFocusIn), this.addEventListener("focusout", this.handleFocusOut), this.autoplay && this.startAutoplay();
70
+ }
71
+ disconnectedCallback() {
72
+ super.disconnectedCallback(), this.stopAutoplay(), this.removeEventListener("keydown", this.handleKeyDown), this.removeEventListener("mouseenter", this.handleMouseEnter), this.removeEventListener("mouseleave", this.handleMouseLeave), this.removeEventListener("focusin", this.handleFocusIn), this.removeEventListener("focusout", this.handleFocusOut), this.scrollDebounceTimer && clearTimeout(this.scrollDebounceTimer), this.programmaticScrollTimer && clearTimeout(this.programmaticScrollTimer);
73
+ }
74
+ updated(e) {
75
+ if (super.updated(e), e.has("itemSpacing"))
76
+ if (this.itemSpacing) {
77
+ const t = isNaN(Number(this.itemSpacing)) ? this.itemSpacing : `${this.itemSpacing}px`;
78
+ this.style.setProperty("--md-carousel-spacing", t);
79
+ } else this.style.removeProperty("--md-carousel-spacing");
80
+ if (e.has("itemWidth"))
81
+ if (this.itemWidth) {
82
+ const t = isNaN(Number(this.itemWidth)) ? this.itemWidth : `${this.itemWidth}px`;
83
+ this.style.setProperty("--md-carousel-item-width", t);
84
+ } else this.style.removeProperty("--md-carousel-item-width");
85
+ if (e.has("itemHeight"))
86
+ if (this.itemHeight) {
87
+ const t = isNaN(Number(this.itemHeight)) ? this.itemHeight : `${this.itemHeight}px`;
88
+ this.style.setProperty("--md-carousel-height", t), this.style.setProperty("--md-carousel-item-height", t);
89
+ } else
90
+ this.style.removeProperty("--md-carousel-height"), this.style.removeProperty("--md-carousel-item-height");
91
+ e.has("layout") && this.syncItemsLayout(), (e.has("autoplay") || e.has("autoplayInterval")) && (this.autoplay ? this.startAutoplay() : this.stopAutoplay()), e.has("activeIndex") && !this.isUserInteracting && !this.isProgrammaticScroll && this.scrollToIndex(this.activeIndex, !0), this.updateControlsState();
92
+ }
93
+ syncItemsLayout() {
94
+ this.items && this.items.forEach((e, t) => {
95
+ e.layout = this.layout, e.setAttribute("aria-label", `Slide ${t + 1} of ${this.items.length}`);
96
+ });
97
+ }
98
+ startAutoplay() {
99
+ this.stopAutoplay(), this.autoplay && this.autoplayInterval > 0 && (this.autoplayTimer = setInterval(() => {
100
+ this.next();
101
+ }, this.autoplayInterval));
102
+ }
103
+ stopAutoplay() {
104
+ this.autoplayTimer && (clearInterval(this.autoplayTimer), this.autoplayTimer = null);
105
+ }
106
+ previous() {
107
+ const e = this.items?.length || 0;
108
+ e !== 0 && (this.activeIndex > 0 ? this.scrollToIndex(this.activeIndex - 1, !0) : this.loop && this.scrollToIndex(e - 1, !0));
109
+ }
110
+ next() {
111
+ const e = this.items?.length || 0;
112
+ e !== 0 && (this.activeIndex < e - 1 ? this.scrollToIndex(this.activeIndex + 1, !0) : this.loop && this.scrollToIndex(0, !0));
113
+ }
114
+ scrollToIndex(e, t = !0) {
115
+ if (!this.items || this.items.length === 0) return;
116
+ const i = Math.max(0, Math.min(e, this.items.length - 1)), a = this.items[i];
117
+ if (this.isProgrammaticScroll = !0, this.programmaticScrollTimer && clearTimeout(this.programmaticScrollTimer), this.programmaticScrollTimer = setTimeout(() => {
118
+ this.isProgrammaticScroll = !1;
119
+ }, t ? 500 : 50), a && this.scrollerElement)
120
+ if (i === 0) this.scrollerElement.scrollTo({
121
+ left: 0,
122
+ behavior: t ? "smooth" : "auto"
123
+ });
124
+ else {
125
+ const l = this.scrollerElement.getBoundingClientRect(), c = a.getBoundingClientRect(), h = this.scrollerElement.scrollLeft + (c.left - l.left);
126
+ this.scrollerElement.scrollTo({
127
+ left: Math.max(0, h),
128
+ behavior: t ? "smooth" : "auto"
129
+ });
130
+ }
131
+ this.activeIndex !== i && (this.activeIndex = i, this.emitEvent("change", {
132
+ activeIndex: this.activeIndex,
133
+ item: this.items[this.activeIndex]
134
+ })), this.updateControlsState();
135
+ }
136
+ updateControlsState() {
137
+ const e = this.items?.length || 0;
138
+ if (e === 0) {
139
+ this.isAtStart = !0, this.isAtEnd = !0;
140
+ return;
141
+ }
142
+ if (this.loop) {
143
+ this.isAtStart = !1, this.isAtEnd = !1;
144
+ return;
145
+ }
146
+ this.isAtStart = this.activeIndex <= 0, this.isAtEnd = this.activeIndex >= e - 1;
147
+ }
148
+ determineActiveIndexFromScroll() {
149
+ if (this.isProgrammaticScroll || this.isDragging || !this.scrollerElement || !this.items || this.items.length === 0) return;
150
+ const e = this.scrollerElement.getBoundingClientRect().left;
151
+ let t = 0, i = 1 / 0;
152
+ this.items.forEach((a, l) => {
153
+ const c = a.getBoundingClientRect(), h = Math.abs(c.left - e);
154
+ h < i && (i = h, t = l);
155
+ }), this.activeIndex !== t && (this.isUserInteracting = !0, this.activeIndex = t, this.emitEvent("change", {
156
+ activeIndex: this.activeIndex,
157
+ item: this.items[this.activeIndex]
158
+ }), this.isUserInteracting = !1, this.updateControlsState());
159
+ }
160
+ render() {
161
+ const e = this.items?.length ?? this.itemCount, t = !this.hideControls && (e > 1 || e === 0), i = !this.hideIndicators && e > 1;
162
+ return n`
163
+ <div class="carousel-root">
164
+ <div class="carousel-viewport-wrapper">
165
+ ${t ? n`
166
+ <slot name="prev-button">
167
+ <button
168
+ class="control-button prev"
169
+ type="button"
170
+ aria-label="Previous slide"
171
+ ?disabled=${!this.loop && this.isAtStart}
172
+ @click=${() => this.previous()}
173
+ >
174
+ <md-icon name="chevron_left"></md-icon>
175
+ </button>
176
+ </slot>
177
+ <slot name="next-button">
178
+ <button
179
+ class="control-button next"
180
+ type="button"
181
+ aria-label="Next slide"
182
+ ?disabled=${!this.loop && this.isAtEnd}
183
+ @click=${() => this.next()}
184
+ >
185
+ <md-icon name="chevron_right"></md-icon>
186
+ </button>
187
+ </slot>
188
+ ` : m}
189
+
190
+ <div
191
+ class="carousel-scroller"
192
+ id="carousel-scroller"
193
+ tabindex="0"
194
+ aria-label=${this.ariaLabelText}
195
+ @scroll=${this.handleScroll}
196
+ @pointerdown=${this.handlePointerDown}
197
+ @pointermove=${this.handlePointerMove}
198
+ @pointerup=${this.handlePointerUp}
199
+ @pointercancel=${this.handlePointerCancel}
200
+ >
201
+ <slot @slotchange=${this.handleSlotChange}></slot>
202
+ </div>
203
+ </div>
204
+
205
+ ${i ? n`
206
+ <div class="indicators" role="tablist" aria-label="Carousel navigation">
207
+ ${Array.from({ length: e }).map((a, l) => n`
208
+ <button
209
+ class="indicator-dot ${l === this.activeIndex ? "active" : ""}"
210
+ type="button"
211
+ role="tab"
212
+ aria-selected=${l === this.activeIndex ? "true" : "false"}
213
+ aria-label="Go to slide ${l + 1}"
214
+ @click=${() => this.scrollToIndex(l)}
215
+ ></button>
216
+ `)}
217
+ </div>
218
+ ` : m}
219
+ </div>
220
+ `;
221
+ }
222
+ };
223
+ r([o({
224
+ type: String,
225
+ reflect: !0
226
+ })], s.prototype, "layout", void 0);
227
+ r([o({
228
+ type: Number,
229
+ reflect: !0,
230
+ attribute: "active-index"
231
+ })], s.prototype, "activeIndex", void 0);
232
+ r([o({
233
+ type: Boolean,
234
+ reflect: !0,
235
+ attribute: "hide-controls"
236
+ })], s.prototype, "hideControls", void 0);
237
+ r([o({
238
+ type: Boolean,
239
+ reflect: !0,
240
+ attribute: "hide-indicators"
241
+ })], s.prototype, "hideIndicators", void 0);
242
+ r([o({
243
+ type: Boolean,
244
+ reflect: !0
245
+ })], s.prototype, "loop", void 0);
246
+ r([o({
247
+ type: Boolean,
248
+ reflect: !0
249
+ })], s.prototype, "autoplay", void 0);
250
+ r([o({
251
+ type: Number,
252
+ attribute: "autoplay-interval"
253
+ })], s.prototype, "autoplayInterval", void 0);
254
+ r([o({
255
+ type: String,
256
+ attribute: "item-spacing"
257
+ })], s.prototype, "itemSpacing", void 0);
258
+ r([o({
259
+ type: String,
260
+ attribute: "item-width"
261
+ })], s.prototype, "itemWidth", void 0);
262
+ r([o({
263
+ type: String,
264
+ attribute: "item-height"
265
+ })], s.prototype, "itemHeight", void 0);
266
+ r([o({
267
+ type: String,
268
+ attribute: "aria-label"
269
+ })], s.prototype, "ariaLabelText", void 0);
270
+ r([y({
271
+ selector: "md-carousel-item",
272
+ flatten: !0
273
+ })], s.prototype, "assignedItems", void 0);
274
+ r([f(".carousel-scroller")], s.prototype, "scrollerElement", void 0);
275
+ r([u()], s.prototype, "isAtStart", void 0);
276
+ r([u()], s.prototype, "isAtEnd", void 0);
277
+ r([u()], s.prototype, "itemCount", void 0);
278
+ s = r([g("md-carousel")], s);
279
+ export {
280
+ s as MdCarousel,
281
+ E as MdCarouselItem
282
+ };
283
+
284
+ //# sourceMappingURL=carousel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carousel.js","names":[],"sources":["../../../src/components/carousel/carousel.ts"],"sourcesContent":["import { html, nothing, PropertyValues } from 'lit';\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js';\nimport { MdBaseElement } from '../../internal/base-component.js';\nimport '../../internal/ripple/ripple.js';\nimport '../../internal/focus-ring/focus-ring.js';\nimport '../icon/icon.js';\nimport { carouselStyles } from './carousel.css.js';\nimport { MdCarouselItem } from './carousel-item.js';\n\nexport * from './carousel-item.js';\n\nexport type CarouselLayout = 'multi-browse' | 'hero' | 'full-width' | 'uncontained';\n\n/**\n * Material Design 3 Carousel Component.\n *\n * Supports multi-browse, hero, full-width, and uncontained layouts,\n * smooth scrolling, next/prev navigation buttons, swipe/drag gestures, and pagination indicators.\n *\n * @slot - Default slot for `md-carousel-item` elements.\n * @slot prev-button - Custom previous navigation button.\n * @slot next-button - Custom next navigation button.\n */\n@customElement('md-carousel')\nexport class MdCarousel extends MdBaseElement {\n static override styles = [MdBaseElement.styles, carouselStyles];\n\n @property({ type: String, reflect: true })\n layout: CarouselLayout = 'multi-browse';\n\n @property({ type: Number, reflect: true, attribute: 'active-index' })\n activeIndex = 0;\n\n @property({ type: Boolean, reflect: true, attribute: 'hide-controls' })\n hideControls = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'hide-indicators' })\n hideIndicators = false;\n\n @property({ type: Boolean, reflect: true })\n loop = false;\n\n @property({ type: Boolean, reflect: true })\n autoplay = false;\n\n @property({ type: Number, attribute: 'autoplay-interval' })\n autoplayInterval = 5000;\n\n @property({ type: String, attribute: 'item-spacing' })\n itemSpacing = '';\n\n @property({ type: String, attribute: 'item-width' })\n itemWidth = '';\n\n @property({ type: String, attribute: 'item-height' })\n itemHeight = '';\n\n @property({ type: String, attribute: 'aria-label' })\n ariaLabelText = 'Carousel';\n\n @queryAssignedElements({ selector: 'md-carousel-item', flatten: true })\n private assignedItems!: MdCarouselItem[];\n\n private get items(): MdCarouselItem[] {\n if (this.assignedItems && this.assignedItems.length > 0) {\n return this.assignedItems;\n }\n return Array.from(this.querySelectorAll('md-carousel-item')) as MdCarouselItem[];\n }\n\n @query('.carousel-scroller')\n private scrollerElement?: HTMLElement;\n\n @state()\n private isAtStart = true;\n\n @state()\n private isAtEnd = false;\n\n @state()\n private itemCount = 0;\n\n private autoplayTimer: ReturnType<typeof setInterval> | null = null;\n private isDragging = false;\n private dragStartX = 0;\n private dragStartScrollLeft = 0;\n private dragThresholdPassed = false;\n private isUserInteracting = false;\n private isProgrammaticScroll = false;\n private programmaticScrollTimer: ReturnType<typeof setTimeout> | null = null;\n private scrollDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n\n override connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'region');\n this.setAttribute('aria-roledescription', 'carousel');\n if (!this.hasAttribute('aria-label') && this.ariaLabelText) {\n this.setAttribute('aria-label', this.ariaLabelText);\n }\n this.addEventListener('keydown', this.handleKeyDown);\n this.addEventListener('mouseenter', this.handleMouseEnter);\n this.addEventListener('mouseleave', this.handleMouseLeave);\n this.addEventListener('focusin', this.handleFocusIn);\n this.addEventListener('focusout', this.handleFocusOut);\n\n if (this.autoplay) {\n this.startAutoplay();\n }\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.stopAutoplay();\n this.removeEventListener('keydown', this.handleKeyDown);\n this.removeEventListener('mouseenter', this.handleMouseEnter);\n this.removeEventListener('mouseleave', this.handleMouseLeave);\n this.removeEventListener('focusin', this.handleFocusIn);\n this.removeEventListener('focusout', this.handleFocusOut);\n if (this.scrollDebounceTimer) {\n clearTimeout(this.scrollDebounceTimer);\n }\n if (this.programmaticScrollTimer) {\n clearTimeout(this.programmaticScrollTimer);\n }\n }\n\n override updated(changedProperties: PropertyValues<this>) {\n super.updated(changedProperties);\n\n if (changedProperties.has('itemSpacing')) {\n if (this.itemSpacing) {\n const spacingVal = isNaN(Number(this.itemSpacing)) ? this.itemSpacing : `${this.itemSpacing}px`;\n this.style.setProperty('--md-carousel-spacing', spacingVal);\n } else {\n this.style.removeProperty('--md-carousel-spacing');\n }\n }\n\n if (changedProperties.has('itemWidth')) {\n if (this.itemWidth) {\n const widthVal = isNaN(Number(this.itemWidth)) ? this.itemWidth : `${this.itemWidth}px`;\n this.style.setProperty('--md-carousel-item-width', widthVal);\n } else {\n this.style.removeProperty('--md-carousel-item-width');\n }\n }\n\n if (changedProperties.has('itemHeight')) {\n if (this.itemHeight) {\n const heightVal = isNaN(Number(this.itemHeight)) ? this.itemHeight : `${this.itemHeight}px`;\n this.style.setProperty('--md-carousel-height', heightVal);\n this.style.setProperty('--md-carousel-item-height', heightVal);\n } else {\n this.style.removeProperty('--md-carousel-height');\n this.style.removeProperty('--md-carousel-item-height');\n }\n }\n\n if (changedProperties.has('layout')) {\n this.syncItemsLayout();\n }\n\n if (changedProperties.has('autoplay') || changedProperties.has('autoplayInterval')) {\n if (this.autoplay) {\n this.startAutoplay();\n } else {\n this.stopAutoplay();\n }\n }\n\n if (changedProperties.has('activeIndex') && !this.isUserInteracting && !this.isProgrammaticScroll) {\n this.scrollToIndex(this.activeIndex, true);\n }\n\n this.updateControlsState();\n }\n\n private handleSlotChange = () => {\n this.itemCount = this.items?.length || 0;\n this.syncItemsLayout();\n this.updateControlsState();\n };\n\n private syncItemsLayout() {\n if (!this.items) return;\n this.items.forEach((item, index) => {\n item.layout = this.layout;\n item.setAttribute('aria-label', `Slide ${index + 1} of ${this.items.length}`);\n });\n }\n\n private startAutoplay() {\n this.stopAutoplay();\n if (this.autoplay && this.autoplayInterval > 0) {\n this.autoplayTimer = setInterval(() => {\n this.next();\n }, this.autoplayInterval);\n }\n }\n\n private stopAutoplay() {\n if (this.autoplayTimer) {\n clearInterval(this.autoplayTimer);\n this.autoplayTimer = null;\n }\n }\n\n private handleMouseEnter = () => {\n this.stopAutoplay();\n };\n\n private handleMouseLeave = () => {\n if (this.autoplay) {\n this.startAutoplay();\n }\n };\n\n private handleFocusIn = () => {\n this.stopAutoplay();\n };\n\n private handleFocusOut = () => {\n if (this.autoplay) {\n this.startAutoplay();\n }\n };\n\n /**\n * Scrolls to the previous slide in the carousel.\n */\n public previous(): void {\n const count = this.items?.length || 0;\n if (count === 0) return;\n\n if (this.activeIndex > 0) {\n this.scrollToIndex(this.activeIndex - 1, true);\n } else if (this.loop) {\n this.scrollToIndex(count - 1, true);\n }\n }\n\n /**\n * Scrolls to the next slide in the carousel.\n */\n public next(): void {\n const count = this.items?.length || 0;\n if (count === 0) return;\n\n if (this.activeIndex < count - 1) {\n this.scrollToIndex(this.activeIndex + 1, true);\n } else if (this.loop) {\n this.scrollToIndex(0, true);\n }\n }\n\n /**\n * Smoothly scrolls to a specific item index.\n */\n public scrollToIndex(index: number, smooth: boolean = true): void {\n if (!this.items || this.items.length === 0) return;\n\n const clampedIndex = Math.max(0, Math.min(index, this.items.length - 1));\n const targetItem = this.items[clampedIndex];\n\n this.isProgrammaticScroll = true;\n if (this.programmaticScrollTimer) {\n clearTimeout(this.programmaticScrollTimer);\n }\n this.programmaticScrollTimer = setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, smooth ? 500 : 50);\n\n if (targetItem && this.scrollerElement) {\n if (clampedIndex === 0) {\n this.scrollerElement.scrollTo({\n left: 0,\n behavior: smooth ? 'smooth' : 'auto',\n });\n } else {\n const scrollerRect = this.scrollerElement.getBoundingClientRect();\n const itemRect = targetItem.getBoundingClientRect();\n const currentScroll = this.scrollerElement.scrollLeft;\n const targetScroll = currentScroll + (itemRect.left - scrollerRect.left);\n\n this.scrollerElement.scrollTo({\n left: Math.max(0, targetScroll),\n behavior: smooth ? 'smooth' : 'auto',\n });\n }\n }\n\n if (this.activeIndex !== clampedIndex) {\n this.activeIndex = clampedIndex;\n this.emitEvent('change', {\n activeIndex: this.activeIndex,\n item: this.items[this.activeIndex],\n });\n }\n\n this.updateControlsState();\n }\n\n private updateControlsState() {\n const count = this.items?.length || 0;\n if (count === 0) {\n this.isAtStart = true;\n this.isAtEnd = true;\n return;\n }\n\n if (this.loop) {\n this.isAtStart = false;\n this.isAtEnd = false;\n return;\n }\n\n this.isAtStart = this.activeIndex <= 0;\n this.isAtEnd = this.activeIndex >= count - 1;\n }\n\n private handleScroll = () => {\n if (this.isProgrammaticScroll || this.isDragging) return;\n\n if (this.scrollDebounceTimer) {\n clearTimeout(this.scrollDebounceTimer);\n }\n\n this.scrollDebounceTimer = setTimeout(() => {\n this.determineActiveIndexFromScroll();\n }, 80);\n };\n\n private determineActiveIndexFromScroll() {\n if (this.isProgrammaticScroll || this.isDragging) return;\n if (!this.scrollerElement || !this.items || this.items.length === 0) return;\n\n const scrollerRect = this.scrollerElement.getBoundingClientRect();\n const scrollerLeft = scrollerRect.left;\n\n let closestIndex = 0;\n let minDistance = Infinity;\n\n this.items.forEach((item, index) => {\n const itemRect = item.getBoundingClientRect();\n const distance = Math.abs(itemRect.left - scrollerLeft);\n if (distance < minDistance) {\n minDistance = distance;\n closestIndex = index;\n }\n });\n\n if (this.activeIndex !== closestIndex) {\n this.isUserInteracting = true;\n this.activeIndex = closestIndex;\n this.emitEvent('change', {\n activeIndex: this.activeIndex,\n item: this.items[this.activeIndex],\n });\n this.isUserInteracting = false;\n this.updateControlsState();\n }\n }\n\n /* --- Pointer / Mouse Drag & Touch Swipe Support --- */\n\n private handlePointerDown = (event: PointerEvent) => {\n if (event.button !== 0 && event.pointerType === 'mouse') return;\n if (!this.scrollerElement) return;\n\n this.isProgrammaticScroll = false;\n this.isDragging = true;\n this.dragThresholdPassed = false;\n this.dragStartX = event.clientX;\n this.dragStartScrollLeft = this.scrollerElement.scrollLeft;\n this.scrollerElement.classList.add('is-dragging');\n this.stopAutoplay();\n\n try {\n (event.currentTarget as HTMLElement)?.setPointerCapture?.(event.pointerId);\n } catch (_) {\n // Ignore if pointer capture is not supported\n }\n };\n\n private handlePointerMove = (event: PointerEvent) => {\n if (!this.isDragging || !this.scrollerElement) return;\n\n const deltaX = event.clientX - this.dragStartX;\n if (Math.abs(deltaX) > 5) {\n this.dragThresholdPassed = true;\n }\n\n if (this.dragThresholdPassed) {\n this.scrollerElement.scrollLeft = this.dragStartScrollLeft - deltaX;\n }\n };\n\n private handlePointerUp = (event: PointerEvent) => {\n if (!this.isDragging) return;\n this.isDragging = false;\n\n try {\n (event.currentTarget as HTMLElement)?.releasePointerCapture?.(event.pointerId);\n } catch (_) {\n // Ignore if pointer release is not supported\n }\n\n if (this.scrollerElement) {\n this.scrollerElement.classList.remove('is-dragging');\n }\n\n if (this.dragThresholdPassed && this.scrollerElement) {\n const deltaX = event.clientX - this.dragStartX;\n if (Math.abs(deltaX) > 40) {\n if (deltaX < 0) {\n this.next();\n } else {\n this.previous();\n }\n } else {\n this.scrollToIndex(this.activeIndex, true);\n }\n }\n\n if (this.autoplay) {\n this.startAutoplay();\n }\n };\n\n private handlePointerCancel = (event: PointerEvent) => {\n if (!this.isDragging) return;\n this.isDragging = false;\n\n try {\n (event.currentTarget as HTMLElement)?.releasePointerCapture?.(event.pointerId);\n } catch (_) {\n // Ignore if pointer release is not supported\n }\n\n if (this.scrollerElement) {\n this.scrollerElement.classList.remove('is-dragging');\n }\n if (this.autoplay) {\n this.startAutoplay();\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n this.next();\n } else if (event.key === 'ArrowLeft') {\n event.preventDefault();\n this.previous();\n } else if (event.key === 'Home') {\n event.preventDefault();\n this.scrollToIndex(0);\n } else if (event.key === 'End') {\n event.preventDefault();\n this.scrollToIndex((this.items?.length || 1) - 1);\n }\n };\n\n override render() {\n const count = this.items?.length ?? this.itemCount;\n const showControls = !this.hideControls && (count > 1 || count === 0);\n const showIndicators = !this.hideIndicators && count > 1;\n\n return html`\n <div class=\"carousel-root\">\n <div class=\"carousel-viewport-wrapper\">\n ${showControls ? html`\n <slot name=\"prev-button\">\n <button\n class=\"control-button prev\"\n type=\"button\"\n aria-label=\"Previous slide\"\n ?disabled=${!this.loop && this.isAtStart}\n @click=${() => this.previous()}\n >\n <md-icon name=\"chevron_left\"></md-icon>\n </button>\n </slot>\n <slot name=\"next-button\">\n <button\n class=\"control-button next\"\n type=\"button\"\n aria-label=\"Next slide\"\n ?disabled=${!this.loop && this.isAtEnd}\n @click=${() => this.next()}\n >\n <md-icon name=\"chevron_right\"></md-icon>\n </button>\n </slot>\n ` : nothing}\n\n <div\n class=\"carousel-scroller\"\n id=\"carousel-scroller\"\n tabindex=\"0\"\n aria-label=${this.ariaLabelText}\n @scroll=${this.handleScroll}\n @pointerdown=${this.handlePointerDown}\n @pointermove=${this.handlePointerMove}\n @pointerup=${this.handlePointerUp}\n @pointercancel=${this.handlePointerCancel}\n >\n <slot @slotchange=${this.handleSlotChange}></slot>\n </div>\n </div>\n\n ${showIndicators ? html`\n <div class=\"indicators\" role=\"tablist\" aria-label=\"Carousel navigation\">\n ${Array.from({ length: count }).map((_, index) => html`\n <button\n class=\"indicator-dot ${index === this.activeIndex ? 'active' : ''}\"\n type=\"button\"\n role=\"tab\"\n aria-selected=${index === this.activeIndex ? 'true' : 'false'}\n aria-label=\"Go to slide ${index + 1}\"\n @click=${() => this.scrollToIndex(index)}\n ></button>\n `)}\n </div>\n ` : nothing}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'md-carousel': MdCarousel;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const datePickerStyles: import('lit').CSSResult;
2
+ //# sourceMappingURL=date-picker.css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.css.d.ts","sourceRoot":"","sources":["../../../src/components/date-picker/date-picker.css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,yBAuV5B,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { MdFormAssociatedElement } from '../../internal/form-associated.js';
2
+ export type DatePickerVariant = 'docked' | 'modal';
3
+ export type DatePickerViewMode = 'calendar' | 'year';
4
+ export declare class MdDatePicker extends MdFormAssociatedElement {
5
+ static styles: import('lit').CSSResultGroup[];
6
+ variant: DatePickerVariant;
7
+ range: boolean;
8
+ value: string;
9
+ startDate: string;
10
+ endDate: string;
11
+ min: string;
12
+ max: string;
13
+ label: string;
14
+ headline: string;
15
+ open: boolean;
16
+ error: boolean;
17
+ errorText: string;
18
+ supportingText: string;
19
+ firstDayOfWeek: number;
20
+ showActions: boolean;
21
+ private viewYear;
22
+ private viewMonth;
23
+ private viewMode;
24
+ private hoverDate;
25
+ private selectingEnd;
26
+ private dialogElement?;
27
+ connectedCallback(): void;
28
+ willUpdate(changedProperties: Map<string, unknown>): void;
29
+ updated(changedProperties: Map<string, unknown>): void;
30
+ private syncInitialState;
31
+ private handleValueChange;
32
+ formResetCallback(): void;
33
+ showModal(): void;
34
+ show(): void;
35
+ close(): void;
36
+ reset(): void;
37
+ private validateInput;
38
+ private handlePrevMonth;
39
+ private handleNextMonth;
40
+ private toggleViewMode;
41
+ private selectYear;
42
+ private isDateDisabled;
43
+ private handleDayClick;
44
+ private handleDayMouseEnter;
45
+ private handleDayMouseLeave;
46
+ private handleCancel;
47
+ private handleConfirm;
48
+ private getFormattedHeadline;
49
+ private renderCalendarGrid;
50
+ private renderYearPicker;
51
+ private renderPickerSurface;
52
+ render(): import('lit-html').TemplateResult<1>;
53
+ }
54
+ declare global {
55
+ interface HTMLElementTagNameMap {
56
+ 'md-date-picker': MdDatePicker;
57
+ }
58
+ }
59
+ //# sourceMappingURL=date-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../../src/components/date-picker/date-picker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,iCAAiC,CAAC;AACzC,OAAO,yCAAyC,CAAC;AACjD,OAAO,iBAAiB,CAAC;AACzB,OAAO,+BAA+B,CAAC;AACvC,OAAO,qBAAqB,CAAC;AAG7B,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,CAAC;AACnD,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,MAAM,CAAC;AAuDrD,qBACa,YAAa,SAAQ,uBAAuB;IACvD,OAAgB,MAAM,iCAAsD;IAG5E,OAAO,EAAE,iBAAiB,CAAY;IAGtC,KAAK,UAAS;IAGd,KAAK,SAAM;IAGX,SAAS,SAAM;IAGf,OAAO,SAAM;IAGb,GAAG,SAAM;IAGT,GAAG,SAAM;IAGT,KAAK,SAAM;IAGX,QAAQ,SAAM;IAGd,IAAI,UAAS;IAGb,KAAK,UAAS;IAGd,SAAS,SAAM;IAGf,cAAc,SAAM;IAGpB,cAAc,SAAK;IAGnB,WAAW,UAAS;IAGpB,OAAO,CAAC,QAAQ,CAAoC;IAGpD,OAAO,CAAC,SAAS,CAAiC;IAGlD,OAAO,CAAC,QAAQ,CAAkC;IAGlD,OAAO,CAAC,SAAS,CAAuB;IAGxC,OAAO,CAAC,YAAY,CAAS;IAG7B,OAAO,CAAC,aAAa,CAAC,CAAoB;IAEjC,iBAAiB;IAMjB,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAwBlD,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAkBxD,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,iBAAiB;IAmBhB,iBAAiB;IAa1B,SAAS;IAIT,IAAI;IAIJ,KAAK;IAIL,KAAK;IAIL,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,eAAe,CAOrB;IAEF,OAAO,CAAC,eAAe,CAOrB;IAEF,OAAO,CAAC,cAAc,CAEpB;IAEF,OAAO,CAAC,UAAU,CAGhB;IAEF,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,cAAc,CA+CpB;IAEF,OAAO,CAAC,mBAAmB,CAIzB;IAEF,OAAO,CAAC,mBAAmB,CAEzB;IAEF,OAAO,CAAC,YAAY,CAIlB;IAEF,OAAO,CAAC,aAAa,CAOnB;IAEF,OAAO,CAAC,oBAAoB;IA6B5B,OAAO,CAAC,kBAAkB;IAgG1B,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,mBAAmB;IA8ElB,MAAM;CAkBhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,YAAY,CAAC;KAChC;CACF"}
@@ -0,0 +1,4 @@
1
+ import { t } from "../../chunks/date-picker-DJeHi4w-.js";
2
+ export {
3
+ t as MdDatePicker
4
+ };
@@ -0,0 +1,35 @@
1
+ import { MdBaseElement } from '../../internal/base-component.js';
2
+ export type FabMenuItemSize = 'small' | 'medium';
3
+ export type FabMenuItemLabelPlacement = 'start' | 'end' | 'top' | 'bottom';
4
+ /**
5
+ * Material Design 3 FAB Menu Item component.
6
+ * Represents a single action item inside an `md-fab-menu` stack.
7
+ *
8
+ * @element md-fab-menu-item
9
+ *
10
+ * @slot - Default slot for item text label.
11
+ * @slot label - Explicit slot for custom label content.
12
+ * @slot icon - Custom icon replacement.
13
+ *
14
+ * @fires action - Dispatched when the item is clicked or activated.
15
+ */
16
+ export declare class MdFabMenuItem extends MdBaseElement {
17
+ static styles: import('lit').CSSResultGroup[];
18
+ icon: string;
19
+ label: string;
20
+ labelPlacement: FabMenuItemLabelPlacement;
21
+ disabled: boolean;
22
+ value: string;
23
+ size: FabMenuItemSize;
24
+ lowered: boolean;
25
+ ariaLabelText: string;
26
+ private handleClick;
27
+ private handleKeyDown;
28
+ render(): import('lit-html').TemplateResult<1>;
29
+ }
30
+ declare global {
31
+ interface HTMLElementTagNameMap {
32
+ 'md-fab-menu-item': MdFabMenuItem;
33
+ }
34
+ }
35
+ //# sourceMappingURL=fab-menu-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fab-menu-item.d.ts","sourceRoot":"","sources":["../../../src/components/fab-menu/fab-menu-item.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,iCAAiC,CAAC;AACzC,OAAO,yCAAyC,CAAC;AACjD,OAAO,iBAAiB,CAAC;AAGzB,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,CAAC;AACjD,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE3E;;;;;;;;;;;GAWG;AACH,qBACa,aAAc,SAAQ,aAAa;IAC9C,OAAgB,MAAM,iCAA6C;IAGnE,IAAI,SAAM;IAGV,KAAK,SAAM;IAGX,cAAc,EAAE,yBAAyB,CAAW;IAGpD,QAAQ,UAAS;IAGjB,KAAK,SAAM;IAGX,IAAI,EAAE,eAAe,CAAW;IAGhC,OAAO,UAAS;IAGhB,aAAa,SAAM;IAEnB,OAAO,CAAC,WAAW,CAYjB;IAEF,OAAO,CAAC,aAAa,CAMnB;IAEO,MAAM;CAsChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,aAAa,CAAC;KACnC;CACF"}
@@ -0,0 +1,93 @@
1
+ import { n as o, t as i } from "../../chunks/decorate-DXuynaiA.js";
2
+ import "../../chunks/ripple-squbKHhj.js";
3
+ import "../../chunks/focus-ring-CuiJuM-y.js";
4
+ import "../../chunks/icon-DrNqcNEL.js";
5
+ import { t as n } from "../../chunks/fab-menu.css-3pu930sZ.js";
6
+ import { html as l, nothing as r } from "lit";
7
+ import { customElement as d, property as a } from "lit/decorators.js";
8
+ var e = class extends o {
9
+ constructor(...s) {
10
+ super(...s), this.icon = "", this.label = "", this.labelPlacement = "start", this.disabled = !1, this.value = "", this.size = "small", this.lowered = !1, this.ariaLabelText = "", this.handleClick = (t) => {
11
+ if (this.disabled) {
12
+ t.preventDefault(), t.stopImmediatePropagation();
13
+ return;
14
+ }
15
+ this.emitEvent("action", {
16
+ item: this,
17
+ value: this.value,
18
+ label: this.label
19
+ });
20
+ }, this.handleKeyDown = (t) => {
21
+ this.disabled || (t.key === "Enter" || t.key === " ") && (t.preventDefault(), this.handleClick(t));
22
+ };
23
+ }
24
+ static {
25
+ this.styles = [o.styles, n];
26
+ }
27
+ render() {
28
+ const s = !!this.label, t = l`
29
+ <slot name="label">
30
+ ${s ? l`<span class="label-pill">${this.label}</span>` : l`<slot class="label-pill"></slot>`}
31
+ </slot>
32
+ `;
33
+ return l`
34
+ <div
35
+ class="item-container"
36
+ role="menuitem"
37
+ tabindex=${this.disabled ? "-1" : "0"}
38
+ aria-disabled=${this.disabled ? "true" : "false"}
39
+ aria-label=${this.ariaLabelText || this.label || r}
40
+ @click=${this.handleClick}
41
+ @keydown=${this.handleKeyDown}
42
+ >
43
+ ${t}
44
+
45
+ <button
46
+ type="button"
47
+ class="mini-fab"
48
+ tabindex="-1"
49
+ ?disabled=${this.disabled}
50
+ aria-hidden="true"
51
+ >
52
+ <md-ripple ?disabled=${this.disabled}></md-ripple>
53
+ <md-focus-ring></md-focus-ring>
54
+ <span class="icon-wrapper">
55
+ <slot name="icon">
56
+ ${this.icon ? l`<md-icon name=${this.icon}></md-icon>` : r}
57
+ </slot>
58
+ </span>
59
+ </button>
60
+ </div>
61
+ `;
62
+ }
63
+ };
64
+ i([a({ type: String })], e.prototype, "icon", void 0);
65
+ i([a({ type: String })], e.prototype, "label", void 0);
66
+ i([a({
67
+ type: String,
68
+ attribute: "label-placement",
69
+ reflect: !0
70
+ })], e.prototype, "labelPlacement", void 0);
71
+ i([a({
72
+ type: Boolean,
73
+ reflect: !0
74
+ })], e.prototype, "disabled", void 0);
75
+ i([a({ type: String })], e.prototype, "value", void 0);
76
+ i([a({
77
+ type: String,
78
+ reflect: !0
79
+ })], e.prototype, "size", void 0);
80
+ i([a({
81
+ type: Boolean,
82
+ reflect: !0
83
+ })], e.prototype, "lowered", void 0);
84
+ i([a({
85
+ type: String,
86
+ attribute: "aria-label"
87
+ })], e.prototype, "ariaLabelText", void 0);
88
+ e = i([d("md-fab-menu-item")], e);
89
+ export {
90
+ e as MdFabMenuItem
91
+ };
92
+
93
+ //# sourceMappingURL=fab-menu-item.js.map