@francofantomius/material-components 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/CHANGELOG.md +39 -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/segmented-button-B0BvGSQ7.js +265 -0
  31. package/dist/chunks/segmented-button-B0BvGSQ7.js.map +1 -0
  32. package/dist/chunks/side-sheet-S2w081AK.js +360 -0
  33. package/dist/chunks/side-sheet-S2w081AK.js.map +1 -0
  34. package/dist/chunks/slider-D-mnO8yQ.js +450 -0
  35. package/dist/chunks/slider-D-mnO8yQ.js.map +1 -0
  36. package/dist/chunks/split-button-DUfjukQY.js +450 -0
  37. package/dist/chunks/split-button-DUfjukQY.js.map +1 -0
  38. package/dist/chunks/{table-aRTYzDyE.js → table-CqHnneAj.js} +2 -2
  39. package/dist/chunks/{table-aRTYzDyE.js.map → table-CqHnneAj.js.map} +1 -1
  40. package/dist/chunks/time-picker-CZnb2sWz.js +785 -0
  41. package/dist/chunks/time-picker-CZnb2sWz.js.map +1 -0
  42. package/dist/chunks/toolbar-DXVQbQKJ.js +271 -0
  43. package/dist/chunks/toolbar-DXVQbQKJ.js.map +1 -0
  44. package/dist/chunks/tooltip-CE7JMHMu.js +398 -0
  45. package/dist/chunks/tooltip-CE7JMHMu.js.map +1 -0
  46. package/dist/components/account-menu/account-menu.js +8 -0
  47. package/dist/components/app-drawer/app-drawer.js +9 -0
  48. package/dist/components/bottom-sheet/bottom-sheet.css.d.ts +2 -0
  49. package/dist/components/bottom-sheet/bottom-sheet.css.d.ts.map +1 -0
  50. package/dist/components/bottom-sheet/bottom-sheet.d.ts +69 -0
  51. package/dist/components/bottom-sheet/bottom-sheet.d.ts.map +1 -0
  52. package/dist/components/bottom-sheet/bottom-sheet.js +4 -0
  53. package/dist/components/button/button.css.d.ts.map +1 -1
  54. package/dist/components/button/button.js +1 -1
  55. package/dist/components/button-group/button-group.css.d.ts +2 -0
  56. package/dist/components/button-group/button-group.css.d.ts.map +1 -0
  57. package/dist/components/button-group/button-group.d.ts +28 -0
  58. package/dist/components/button-group/button-group.d.ts.map +1 -0
  59. package/dist/components/button-group/button-group.js +4 -0
  60. package/dist/components/carousel/carousel-item.d.ts +33 -0
  61. package/dist/components/carousel/carousel-item.d.ts.map +1 -0
  62. package/dist/components/carousel/carousel-item.js +4 -0
  63. package/dist/components/carousel/carousel.css.d.ts +3 -0
  64. package/dist/components/carousel/carousel.css.d.ts.map +1 -0
  65. package/dist/components/carousel/carousel.d.ts +81 -0
  66. package/dist/components/carousel/carousel.d.ts.map +1 -0
  67. package/dist/components/carousel/carousel.js +284 -0
  68. package/dist/components/carousel/carousel.js.map +1 -0
  69. package/dist/components/date-picker/date-picker.css.d.ts +2 -0
  70. package/dist/components/date-picker/date-picker.css.d.ts.map +1 -0
  71. package/dist/components/date-picker/date-picker.d.ts +59 -0
  72. package/dist/components/date-picker/date-picker.d.ts.map +1 -0
  73. package/dist/components/date-picker/date-picker.js +4 -0
  74. package/dist/components/fab-menu/fab-menu-item.d.ts +35 -0
  75. package/dist/components/fab-menu/fab-menu-item.d.ts.map +1 -0
  76. package/dist/components/fab-menu/fab-menu-item.js +93 -0
  77. package/dist/components/fab-menu/fab-menu-item.js.map +1 -0
  78. package/dist/components/fab-menu/fab-menu.css.d.ts +3 -0
  79. package/dist/components/fab-menu/fab-menu.css.d.ts.map +1 -0
  80. package/dist/components/fab-menu/fab-menu.d.ts +72 -0
  81. package/dist/components/fab-menu/fab-menu.d.ts.map +1 -0
  82. package/dist/components/fab-menu/fab-menu.js +148 -0
  83. package/dist/components/fab-menu/fab-menu.js.map +1 -0
  84. package/dist/components/icon-button/icon-button.js +1 -1
  85. package/dist/components/loading-indicator/loading-indicator.css.d.ts +2 -0
  86. package/dist/components/loading-indicator/loading-indicator.css.d.ts.map +1 -0
  87. package/dist/components/loading-indicator/loading-indicator.d.ts +48 -0
  88. package/dist/components/loading-indicator/loading-indicator.d.ts.map +1 -0
  89. package/dist/components/loading-indicator/loading-indicator.js +4 -0
  90. package/dist/components/menu/menu-item.d.ts +41 -0
  91. package/dist/components/menu/menu-item.d.ts.map +1 -0
  92. package/dist/components/menu/menu-item.js +4 -0
  93. package/dist/components/menu/menu.css.d.ts +3 -0
  94. package/dist/components/menu/menu.css.d.ts.map +1 -0
  95. package/dist/components/menu/menu.d.ts +91 -0
  96. package/dist/components/menu/menu.d.ts.map +1 -0
  97. package/dist/components/menu/menu.js +205 -0
  98. package/dist/components/menu/menu.js.map +1 -0
  99. package/dist/components/navigation-bar/navigation-bar-item.d.ts +49 -0
  100. package/dist/components/navigation-bar/navigation-bar-item.d.ts.map +1 -0
  101. package/dist/components/navigation-bar/navigation-bar-item.js +5 -0
  102. package/dist/components/navigation-bar/navigation-bar.css.d.ts +3 -0
  103. package/dist/components/navigation-bar/navigation-bar.css.d.ts.map +1 -0
  104. package/dist/components/navigation-bar/navigation-bar.d.ts +50 -0
  105. package/dist/components/navigation-bar/navigation-bar.d.ts.map +1 -0
  106. package/dist/components/navigation-bar/navigation-bar.js +150 -0
  107. package/dist/components/navigation-bar/navigation-bar.js.map +1 -0
  108. package/dist/components/navigation-rail/navigation-rail-item.d.ts +36 -0
  109. package/dist/components/navigation-rail/navigation-rail-item.d.ts.map +1 -0
  110. package/dist/components/navigation-rail/navigation-rail-item.js +5 -0
  111. package/dist/components/navigation-rail/navigation-rail.css.d.ts +3 -0
  112. package/dist/components/navigation-rail/navigation-rail.css.d.ts.map +1 -0
  113. package/dist/components/navigation-rail/navigation-rail.d.ts +43 -0
  114. package/dist/components/navigation-rail/navigation-rail.d.ts.map +1 -0
  115. package/dist/components/navigation-rail/navigation-rail.js +121 -0
  116. package/dist/components/navigation-rail/navigation-rail.js.map +1 -0
  117. package/dist/components/segmented-button/segmented-button.css.d.ts +3 -0
  118. package/dist/components/segmented-button/segmented-button.css.d.ts.map +1 -0
  119. package/dist/components/segmented-button/segmented-button.d.ts +40 -0
  120. package/dist/components/segmented-button/segmented-button.d.ts.map +1 -0
  121. package/dist/components/segmented-button/segmented-button.js +5 -0
  122. package/dist/components/side-sheet/side-sheet.css.d.ts +2 -0
  123. package/dist/components/side-sheet/side-sheet.css.d.ts.map +1 -0
  124. package/dist/components/side-sheet/side-sheet.d.ts +57 -0
  125. package/dist/components/side-sheet/side-sheet.d.ts.map +1 -0
  126. package/dist/components/side-sheet/side-sheet.js +4 -0
  127. package/dist/components/slider/slider.css.d.ts +2 -0
  128. package/dist/components/slider/slider.css.d.ts.map +1 -0
  129. package/dist/components/slider/slider.d.ts +51 -0
  130. package/dist/components/slider/slider.d.ts.map +1 -0
  131. package/dist/components/slider/slider.js +4 -0
  132. package/dist/components/split-button/split-button.css.d.ts +2 -0
  133. package/dist/components/split-button/split-button.css.d.ts.map +1 -0
  134. package/dist/components/split-button/split-button.d.ts +89 -0
  135. package/dist/components/split-button/split-button.d.ts.map +1 -0
  136. package/dist/components/split-button/split-button.js +4 -0
  137. package/dist/components/table/table.js +1 -1
  138. package/dist/components/time-picker/time-picker.css.d.ts +2 -0
  139. package/dist/components/time-picker/time-picker.css.d.ts.map +1 -0
  140. package/dist/components/time-picker/time-picker.d.ts +87 -0
  141. package/dist/components/time-picker/time-picker.d.ts.map +1 -0
  142. package/dist/components/time-picker/time-picker.js +4 -0
  143. package/dist/components/toolbar/toolbar.css.d.ts +2 -0
  144. package/dist/components/toolbar/toolbar.css.d.ts.map +1 -0
  145. package/dist/components/toolbar/toolbar.d.ts +53 -0
  146. package/dist/components/toolbar/toolbar.d.ts.map +1 -0
  147. package/dist/components/toolbar/toolbar.js +4 -0
  148. package/dist/components/tooltip/tooltip.css.d.ts +2 -0
  149. package/dist/components/tooltip/tooltip.css.d.ts.map +1 -0
  150. package/dist/components/tooltip/tooltip.d.ts +89 -0
  151. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  152. package/dist/components/tooltip/tooltip.js +4 -0
  153. package/dist/index.d.ts +21 -0
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +148 -2263
  156. package/dist/tokens/index.js +4 -2
  157. package/dist/tokens/index.js.map +1 -1
  158. package/dist/tokens/theme.css.d.ts.map +1 -1
  159. package/llms.txt +2326 -0
  160. package/package.json +99 -2
  161. package/dist/chunks/button-B4TSZ7Sl.js.map +0 -1
  162. package/dist/chunks/icon-button-BdSc7eot.js.map +0 -1
  163. package/dist/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker-DJeHi4w-.js","names":[],"sources":["../../src/components/date-picker/date-picker.css.ts","../../src/components/date-picker/date-picker.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const datePickerStyles = css`\n :host {\n display: inline-block;\n font-family: var(--md-sys-typescale-font-family, Roboto, sans-serif);\n color: var(--md-sys-color-on-surface, #1D1B20);\n box-sizing: border-box;\n }\n\n :host([variant=\"modal\"]) {\n display: contents;\n }\n\n *, *::before, *::after {\n box-sizing: border-box;\n }\n\n /* --- Picker Surface Container --- */\n .picker-surface {\n display: flex;\n flex-direction: column;\n width: 328px;\n background-color: var(--md-sys-color-surface-container-high, #ECE6F0);\n border-radius: var(--md-sys-shape-corner-extra-large, 28px);\n overflow: hidden;\n position: relative;\n box-shadow: var(--md-sys-elevation-level1, 0px 1px 3px 1px rgba(0, 0, 0, 0.15));\n user-select: none;\n transition: box-shadow 200ms cubic-bezier(0.2, 0, 0, 1);\n }\n\n :host([variant=\"docked\"]) .picker-surface {\n border: 1px solid var(--md-sys-color-outline-variant, #CAC4D0);\n box-shadow: var(--md-sys-elevation-level1, 0px 1px 3px 1px rgba(0, 0, 0, 0.15));\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: 0.38;\n }\n\n /* --- Header --- */\n .header {\n padding: 20px 24px 16px 24px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n position: relative;\n }\n\n .header-top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .subhead {\n font-size: var(--md-sys-typescale-label-medium-size, 12px);\n line-height: 16px;\n font-weight: 500;\n color: var(--md-sys-color-on-surface-variant, #49454F);\n letter-spacing: 0.5px;\n text-transform: uppercase;\n }\n\n .headline {\n font-size: var(--md-sys-typescale-headline-large-size, 28px);\n line-height: 36px;\n font-weight: 400;\n color: var(--md-sys-color-on-surface, #1D1B20);\n min-height: 36px;\n display: flex;\n align-items: center;\n word-break: break-word;\n }\n\n .headline.placeholder {\n color: var(--md-sys-color-on-surface-variant, #49454F);\n font-size: 24px;\n }\n\n .header-divider {\n height: 1px;\n background-color: var(--md-sys-color-outline-variant, #CAC4D0);\n margin: 0 16px;\n }\n\n /* --- Navigation Controls --- */\n .navigation {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px 4px 16px;\n }\n\n .month-year-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: transparent;\n border: none;\n padding: 8px 12px;\n border-radius: var(--md-sys-shape-corner-full, 9999px);\n font-family: inherit;\n font-size: var(--md-sys-typescale-label-large-size, 14px);\n font-weight: 500;\n color: var(--md-sys-color-on-surface-variant, #49454F);\n cursor: pointer;\n transition: background-color 150ms ease, color 150ms ease;\n }\n\n .month-year-btn:hover {\n background-color: rgba(73, 69, 79, 0.08);\n color: var(--md-sys-color-on-surface, #1D1B20);\n }\n\n .month-year-btn .dropdown-icon {\n transition: transform 200ms cubic-bezier(0.2, 0, 0, 1);\n }\n\n .month-year-btn.open .dropdown-icon {\n transform: rotate(180deg);\n }\n\n .nav-arrows {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n /* --- Calendar View --- */\n .calendar-content {\n padding: 0 12px 12px 12px;\n }\n\n .weekdays {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n text-align: center;\n padding: 8px 0;\n }\n\n .weekday {\n font-size: var(--md-sys-typescale-body-small-size, 12px);\n font-weight: 500;\n color: var(--md-sys-color-on-surface, #1D1B20);\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .days-grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n row-gap: 4px;\n }\n\n .day-cell {\n position: relative;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n /* Range Highlight Band */\n .range-band {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background-color: var(--md-sys-color-primary-container, #EADDFF);\n z-index: 0;\n }\n\n .day-cell.range-start .range-band {\n left: 50%;\n }\n\n .day-cell.range-end .range-band {\n right: 50%;\n }\n\n .day-cell.range-start.range-end .range-band {\n display: none;\n }\n\n /* Day Button */\n .day-btn {\n position: relative;\n z-index: 1;\n width: 36px;\n height: 36px;\n border-radius: var(--md-sys-shape-corner-full, 50%);\n border: 1px solid transparent;\n background: transparent;\n color: var(--md-sys-color-on-surface, #1D1B20);\n font-family: inherit;\n font-size: var(--md-sys-typescale-body-medium-size, 14px);\n font-weight: 400;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n padding: 0;\n outline: none;\n transition: background-color 150ms ease, color 150ms ease, border-color 150ms ease;\n }\n\n .day-btn:hover:not(.disabled):not(.selected):not(.range-start):not(.range-end) {\n background-color: rgba(103, 80, 164, 0.08);\n }\n\n /* Today state */\n .day-btn.today {\n border-color: var(--md-sys-color-primary, #6750A4);\n color: var(--md-sys-color-primary, #6750A4);\n font-weight: 500;\n }\n\n /* In range middle state */\n .day-cell.in-range .day-btn {\n color: var(--md-sys-color-on-primary-container, #21005D);\n background-color: transparent;\n }\n\n /* Selected / Range Start / Range End */\n .day-btn.selected,\n .day-btn.range-start,\n .day-btn.range-end {\n background-color: var(--md-sys-color-primary, #6750A4);\n color: var(--md-sys-color-on-primary, #FFFFFF);\n font-weight: 500;\n }\n\n .day-btn.disabled {\n color: var(--md-sys-color-on-surface, #1D1B20);\n opacity: 0.38;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n /* --- Year Picker View --- */\n .year-picker-view {\n height: 280px;\n overflow-y: auto;\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n padding: 12px 16px;\n align-content: start;\n }\n\n .year-btn {\n background: transparent;\n border: 1px solid transparent;\n border-radius: var(--md-sys-shape-corner-full, 9999px);\n padding: 10px 0;\n font-family: inherit;\n font-size: var(--md-sys-typescale-label-large-size, 14px);\n color: var(--md-sys-color-on-surface, #1D1B20);\n cursor: pointer;\n text-align: center;\n transition: background-color 150ms ease, color 150ms ease;\n }\n\n .year-btn:hover:not(.selected) {\n background-color: rgba(103, 80, 164, 0.08);\n }\n\n .year-btn.selected {\n background-color: var(--md-sys-color-primary, #6750A4);\n color: var(--md-sys-color-on-primary, #FFFFFF);\n font-weight: 500;\n }\n\n .year-btn.current {\n border-color: var(--md-sys-color-primary, #6750A4);\n color: var(--md-sys-color-primary, #6750A4);\n }\n\n /* --- Actions Footer --- */\n .actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 8px 16px 16px 16px;\n }\n\n /* --- Supporting / Error Text --- */\n .supporting-text {\n padding: 4px 16px 0;\n font-size: var(--md-sys-typescale-body-small-size, 12px);\n line-height: 16px;\n color: var(--md-sys-color-on-surface-variant, #49454F);\n }\n\n :host([error]) .supporting-text {\n color: var(--md-sys-color-error, #B3261E);\n }\n\n /* --- Modal Scrim & Dialog Container --- */\n dialog {\n padding: 0;\n border: none;\n border-radius: var(--md-sys-shape-corner-extra-large, 28px);\n background: transparent;\n color: inherit;\n box-shadow: var(--md-sys-elevation-level3, 0px 1px 3px 0px rgba(0, 0, 0, 0.30));\n position: fixed;\n inset: 0;\n margin: auto;\n z-index: 1000;\n overflow: visible;\n }\n\n dialog::backdrop {\n background-color: rgba(0, 0, 0, 0.32);\n backdrop-filter: blur(2px);\n animation: md-fade-in 150ms ease-out forwards;\n }\n\n dialog[open] {\n animation: md-dialog-in 150ms cubic-bezier(0.2, 0, 0, 1) forwards;\n }\n\n @keyframes md-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes md-dialog-in {\n from {\n opacity: 0;\n transform: scale(0.92);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n }\n`;\n","import { html, nothing } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { MdFormAssociatedElement } from '../../internal/form-associated.js';\nimport '../../internal/ripple/ripple.js';\nimport '../../internal/focus-ring/focus-ring.js';\nimport '../icon/icon.js';\nimport '../icon-button/icon-button.js';\nimport '../button/button.js';\nimport { datePickerStyles } from './date-picker.css.js';\n\nexport type DatePickerVariant = 'docked' | 'modal';\nexport type DatePickerViewMode = 'calendar' | 'year';\n\nconst MONTH_NAMES = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\nconst WEEKDAY_NAMES_SUNDAY_FIRST = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\nconst WEEKDAY_NAMES_MONDAY_FIRST = ['M', 'T', 'W', 'T', 'F', 'S', 'S'];\n\nfunction padZero(num: number): string {\n return num < 10 ? `0${num}` : `${num}`;\n}\n\nfunction formatDateString(year: number, month: number, day: number): string {\n return `${year}-${padZero(month + 1)}-${padZero(day)}`;\n}\n\nfunction parseDateString(dateStr: string): { year: number; month: number; day: number } | null {\n if (!dateStr || typeof dateStr !== 'string') return null;\n const parts = dateStr.split('-');\n if (parts.length !== 3) return null;\n const year = parseInt(parts[0]!, 10);\n const month = parseInt(parts[1]!, 10) - 1;\n const day = parseInt(parts[2]!, 10);\n if (isNaN(year) || isNaN(month) || isNaN(day)) return null;\n return { year, month, day };\n}\n\nfunction getTodayString(): string {\n const now = new Date();\n return formatDateString(now.getFullYear(), now.getMonth(), now.getDate());\n}\n\nfunction formatDisplayDate(dateStr: string): string {\n const parsed = parseDateString(dateStr);\n if (!parsed) return '';\n const d = new Date(parsed.year, parsed.month, parsed.day);\n return d.toLocaleDateString('en-US', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n });\n}\n\nfunction formatShortMonthDay(dateStr: string): string {\n const parsed = parseDateString(dateStr);\n if (!parsed) return '';\n const d = new Date(parsed.year, parsed.month, parsed.day);\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n });\n}\n\n@customElement('md-date-picker')\nexport class MdDatePicker extends MdFormAssociatedElement {\n static override styles = [MdFormAssociatedElement.styles, datePickerStyles];\n\n @property({ type: String, reflect: true })\n variant: DatePickerVariant = 'docked';\n\n @property({ type: Boolean, reflect: true })\n range = false;\n\n @property({ type: String, reflect: true })\n value = '';\n\n @property({ type: String, attribute: 'start-date' })\n startDate = '';\n\n @property({ type: String, attribute: 'end-date' })\n endDate = '';\n\n @property({ type: String })\n min = '';\n\n @property({ type: String })\n max = '';\n\n @property({ type: String })\n label = '';\n\n @property({ type: String })\n headline = '';\n\n @property({ type: Boolean, reflect: true })\n open = false;\n\n @property({ type: Boolean, reflect: true })\n error = false;\n\n @property({ type: String, attribute: 'error-text' })\n errorText = '';\n\n @property({ type: String, attribute: 'supporting-text' })\n supportingText = '';\n\n @property({ type: Number, attribute: 'first-day-of-week' })\n firstDayOfWeek = 0;\n\n @property({ type: Boolean, attribute: 'show-actions' })\n showActions = false;\n\n @state()\n private viewYear: number = new Date().getFullYear();\n\n @state()\n private viewMonth: number = new Date().getMonth();\n\n @state()\n private viewMode: DatePickerViewMode = 'calendar';\n\n @state()\n private hoverDate: string | null = null;\n\n @state()\n private selectingEnd = false;\n\n @query('dialog')\n private dialogElement?: HTMLDialogElement;\n\n override connectedCallback() {\n super.connectedCallback();\n this.syncInitialState();\n this.setFormValue(this.value);\n }\n\n override willUpdate(changedProperties: Map<string, unknown>) {\n super.willUpdate(changedProperties);\n\n if (changedProperties.has('value')) {\n this.handleValueChange();\n this.setFormValue(this.value);\n this.validateInput();\n }\n\n if (changedProperties.has('startDate') || changedProperties.has('endDate')) {\n if (this.range) {\n const newVal = this.startDate && this.endDate ? `${this.startDate}/${this.endDate}` : (this.startDate || '');\n if (this.value !== newVal) {\n this.value = newVal;\n this.setFormValue(this.value);\n }\n }\n }\n\n if (changedProperties.has('min') || changedProperties.has('max') || changedProperties.has('required')) {\n this.validateInput();\n }\n }\n\n override updated(changedProperties: Map<string, unknown>) {\n super.updated(changedProperties);\n\n if (changedProperties.has('open') && this.variant === 'modal') {\n if (this.open) {\n if (this.dialogElement && !this.dialogElement.open) {\n this.dialogElement.showModal();\n }\n this.emitEvent('open');\n } else {\n if (this.dialogElement && this.dialogElement.open) {\n this.dialogElement.close();\n }\n this.emitEvent('close');\n }\n }\n }\n\n private syncInitialState() {\n const targetDate = this.startDate || (this.range ? (this.value.split('/')[0] ?? '') : this.value);\n const parsed = parseDateString(targetDate);\n if (parsed) {\n this.viewYear = parsed.year;\n this.viewMonth = parsed.month;\n } else {\n const now = new Date();\n this.viewYear = now.getFullYear();\n this.viewMonth = now.getMonth();\n }\n\n if (this.range && this.value && this.value.includes('/')) {\n const [s, e] = this.value.split('/');\n this.startDate = s || '';\n this.endDate = e || '';\n }\n }\n\n private handleValueChange() {\n if (this.range) {\n if (this.value.includes('/')) {\n const [s, e] = this.value.split('/');\n this.startDate = s || '';\n this.endDate = e || '';\n } else {\n this.startDate = this.value;\n this.endDate = '';\n }\n } else {\n const parsed = parseDateString(this.value);\n if (parsed) {\n this.viewYear = parsed.year;\n this.viewMonth = parsed.month;\n }\n }\n }\n\n override formResetCallback() {\n this.value = '';\n this.startDate = '';\n this.endDate = '';\n this.error = false;\n this.selectingEnd = false;\n this.setFormValue(null);\n const now = new Date();\n this.viewYear = now.getFullYear();\n this.viewMonth = now.getMonth();\n this.viewMode = 'calendar';\n }\n\n showModal() {\n this.open = true;\n }\n\n show() {\n this.open = true;\n }\n\n close() {\n this.open = false;\n }\n\n reset() {\n this.formResetCallback();\n }\n\n private validateInput() {\n if (this.required && !this.value) {\n this.setValidity({ valueMissing: true }, this.errorText || 'A date is required');\n this.error = true;\n return;\n }\n\n if (this.min && this.value) {\n const checkVal = this.range ? this.startDate : this.value;\n if (checkVal && checkVal < this.min) {\n this.setValidity({ rangeUnderflow: true }, this.errorText || `Date must be after ${this.min}`);\n this.error = true;\n return;\n }\n }\n\n if (this.max && this.value) {\n const checkVal = this.range ? (this.endDate || this.startDate) : this.value;\n if (checkVal && checkVal > this.max) {\n this.setValidity({ rangeOverflow: true }, this.errorText || `Date must be before ${this.max}`);\n this.error = true;\n return;\n }\n }\n\n this.setValidity({});\n if (!this.errorText) {\n this.error = false;\n }\n }\n\n private handlePrevMonth = () => {\n if (this.viewMonth === 0) {\n this.viewMonth = 11;\n this.viewYear -= 1;\n } else {\n this.viewMonth -= 1;\n }\n };\n\n private handleNextMonth = () => {\n if (this.viewMonth === 11) {\n this.viewMonth = 0;\n this.viewYear += 1;\n } else {\n this.viewMonth += 1;\n }\n };\n\n private toggleViewMode = () => {\n this.viewMode = this.viewMode === 'calendar' ? 'year' : 'calendar';\n };\n\n private selectYear = (year: number) => {\n this.viewYear = year;\n this.viewMode = 'calendar';\n };\n\n private isDateDisabled(dateStr: string): boolean {\n if (this.disabled) return true;\n if (this.min && dateStr < this.min) return true;\n if (this.max && dateStr > this.max) return true;\n return false;\n }\n\n private handleDayClick = (dateStr: string) => {\n if (this.isDateDisabled(dateStr)) return;\n\n if (!this.range) {\n this.value = dateStr;\n this.setFormValue(this.value);\n this.emitEvent('input', { value: this.value });\n this.emitEvent('change', { value: this.value });\n this.emitEvent('select', { date: dateStr, type: 'single' });\n return;\n }\n\n // Range selection mode\n if (!this.selectingEnd || !this.startDate) {\n // Start fresh range selection\n this.startDate = dateStr;\n this.endDate = '';\n this.value = dateStr;\n this.selectingEnd = true;\n this.setFormValue(this.value);\n this.emitEvent('select', { date: dateStr, type: 'start' });\n this.emitEvent('input', { value: this.value });\n } else {\n // Selecting end date\n if (dateStr < this.startDate) {\n // Clicked a date before start date, restart range\n this.startDate = dateStr;\n this.endDate = '';\n this.value = dateStr;\n this.selectingEnd = true;\n this.setFormValue(this.value);\n this.emitEvent('select', { date: dateStr, type: 'start' });\n this.emitEvent('input', { value: this.value });\n } else {\n this.endDate = dateStr;\n this.value = `${this.startDate}/${this.endDate}`;\n this.selectingEnd = false;\n this.setFormValue(this.value);\n this.emitEvent('select', { date: dateStr, type: 'end' });\n this.emitEvent('input', { value: this.value });\n this.emitEvent('change', {\n value: this.value,\n startDate: this.startDate,\n endDate: this.endDate,\n });\n }\n }\n };\n\n private handleDayMouseEnter = (dateStr: string) => {\n if (this.range && this.selectingEnd && this.startDate) {\n this.hoverDate = dateStr;\n }\n };\n\n private handleDayMouseLeave = () => {\n this.hoverDate = null;\n };\n\n private handleCancel = (event?: Event) => {\n if (event) event.preventDefault();\n this.emitEvent('cancel');\n this.close();\n };\n\n private handleConfirm = () => {\n this.emitEvent('change', {\n value: this.value,\n startDate: this.startDate,\n endDate: this.endDate,\n });\n this.close();\n };\n\n private getFormattedHeadline(): string {\n if (this.headline) return this.headline;\n\n if (!this.range) {\n if (!this.value) return 'Select date';\n return formatDisplayDate(this.value);\n }\n\n // Range mode\n if (!this.startDate && !this.endDate) {\n return 'Select range';\n }\n\n if (this.startDate && !this.endDate) {\n return `${formatShortMonthDay(this.startDate)} – End date`;\n }\n\n if (this.startDate && this.endDate) {\n const s = parseDateString(this.startDate);\n const e = parseDateString(this.endDate);\n if (s && e && s.year === e.year) {\n return `${formatShortMonthDay(this.startDate)} – ${formatShortMonthDay(this.endDate)}, ${s.year}`;\n }\n return `${formatShortMonthDay(this.startDate)} – ${formatShortMonthDay(this.endDate)}`;\n }\n\n return 'Select range';\n }\n\n private renderCalendarGrid() {\n const year = this.viewYear;\n const month = this.viewMonth;\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n let firstDayIndex = new Date(year, month, 1).getDay();\n\n if (this.firstDayOfWeek === 1) {\n firstDayIndex = (firstDayIndex + 6) % 7;\n }\n\n const weekdays = this.firstDayOfWeek === 1\n ? WEEKDAY_NAMES_MONDAY_FIRST\n : WEEKDAY_NAMES_SUNDAY_FIRST;\n\n const todayStr = getTodayString();\n\n const days = [];\n // Blank padding days\n for (let i = 0; i < firstDayIndex; i++) {\n days.push(html`<div class=\"day-cell empty\"></div>`);\n }\n\n // Days of current month\n for (let d = 1; d <= daysInMonth; d++) {\n const dateStr = formatDateString(year, month, d);\n const isToday = dateStr === todayStr;\n const isDisabled = this.isDateDisabled(dateStr);\n\n let isSelected = false;\n let isRangeStart = false;\n let isRangeEnd = false;\n let isInRange = false;\n\n if (!this.range) {\n isSelected = this.value === dateStr;\n } else {\n const effectiveEnd = this.endDate || (this.selectingEnd ? this.hoverDate : null);\n isRangeStart = this.startDate === dateStr;\n isRangeEnd = effectiveEnd === dateStr;\n isSelected = isRangeStart || isRangeEnd;\n\n if (this.startDate && effectiveEnd && effectiveEnd > this.startDate) {\n isInRange = dateStr >= this.startDate && dateStr <= effectiveEnd;\n }\n }\n\n const cellClasses = [\n 'day-cell',\n isRangeStart ? 'range-start' : '',\n isRangeEnd ? 'range-end' : '',\n isInRange ? 'in-range' : '',\n ].filter(Boolean).join(' ');\n\n const btnClasses = [\n 'day-btn',\n isSelected ? 'selected' : '',\n isToday ? 'today' : '',\n isRangeStart ? 'range-start' : '',\n isRangeEnd ? 'range-end' : '',\n isDisabled ? 'disabled' : '',\n ].filter(Boolean).join(' ');\n\n days.push(html`\n <div class=${cellClasses}>\n ${isInRange ? html`<div class=\"range-band\"></div>` : nothing}\n <button\n type=\"button\"\n class=${btnClasses}\n ?disabled=${isDisabled}\n aria-label=${dateStr}\n aria-selected=${isSelected ? 'true' : 'false'}\n @click=${() => this.handleDayClick(dateStr)}\n @mouseenter=${() => this.handleDayMouseEnter(dateStr)}\n @mouseleave=${this.handleDayMouseLeave}\n >\n <md-ripple ?disabled=${isDisabled}></md-ripple>\n ${d}\n </button>\n </div>\n `);\n }\n\n return html`\n <div class=\"calendar-content\">\n <div class=\"weekdays\" role=\"row\">\n ${weekdays.map(\n (w) => html`<div class=\"weekday\" role=\"columnheader\">${w}</div>`\n )}\n </div>\n <div class=\"days-grid\" role=\"grid\">\n ${days}\n </div>\n </div>\n `;\n }\n\n private renderYearPicker() {\n const currentYear = new Date().getFullYear();\n const startYear = currentYear - 50;\n const endYear = currentYear + 50;\n const years = [];\n\n for (let y = startYear; y <= endYear; y++) {\n const isSelected = y === this.viewYear;\n const isCurrent = y === currentYear;\n years.push(html`\n <button\n type=\"button\"\n class=\"year-btn ${isSelected ? 'selected' : ''} ${isCurrent ? 'current' : ''}\"\n @click=${() => this.selectYear(y)}\n >\n <md-ripple></md-ripple>\n ${y}\n </button>\n `);\n }\n\n return html`\n <div class=\"year-picker-view\">\n ${years}\n </div>\n `;\n }\n\n private renderPickerSurface() {\n const isYearMode = this.viewMode === 'year';\n const subheadText = this.label || (this.range ? 'Select range' : 'Select date');\n const headlineText = this.getFormattedHeadline();\n const hasValue = Boolean(this.range ? this.startDate : this.value);\n const shouldShowActions = this.showActions || this.variant === 'modal';\n\n return html`\n <div class=\"picker-surface\">\n <div class=\"header\">\n <div class=\"header-top\">\n <span class=\"subhead\">${subheadText}</span>\n <md-icon-button\n icon=${isYearMode ? 'calendar_month' : 'edit_calendar'}\n aria-label=${isYearMode ? 'Switch to calendar view' : 'Switch to year view'}\n @click=${this.toggleViewMode}\n ></md-icon-button>\n </div>\n <div class=\"headline ${!hasValue ? 'placeholder' : ''}\">\n ${headlineText}\n </div>\n </div>\n\n <div class=\"header-divider\"></div>\n\n <div class=\"navigation\">\n <button\n type=\"button\"\n class=\"month-year-btn ${isYearMode ? 'open' : ''}\"\n @click=${this.toggleViewMode}\n aria-label=\"Toggle year selection\"\n >\n <span>${MONTH_NAMES[this.viewMonth]} ${this.viewYear}</span>\n <md-icon class=\"dropdown-icon\" name=\"arrow_drop_down\"></md-icon>\n </button>\n\n ${!isYearMode\n ? html`\n <div class=\"nav-arrows\">\n <md-icon-button\n icon=\"chevron_left\"\n aria-label=\"Previous month\"\n @click=${this.handlePrevMonth}\n ></md-icon-button>\n <md-icon-button\n icon=\"chevron_right\"\n aria-label=\"Next month\"\n @click=${this.handleNextMonth}\n ></md-icon-button>\n </div>\n `\n : nothing}\n </div>\n\n ${isYearMode ? this.renderYearPicker() : this.renderCalendarGrid()}\n\n ${shouldShowActions\n ? html`\n <div class=\"actions\">\n <slot name=\"actions\">\n <md-button variant=\"text\" @click=${this.handleCancel}>Cancel</md-button>\n <md-button variant=\"text\" @click=${this.handleConfirm}>OK</md-button>\n </slot>\n </div>\n `\n : nothing}\n </div>\n\n ${this.supportingText || this.errorText\n ? html`\n <div class=\"supporting-text\">\n ${this.error ? (this.errorText || this.supportingText) : this.supportingText}\n </div>\n `\n : nothing}\n `;\n }\n\n override render() {\n if (this.variant === 'modal') {\n return html`\n <dialog\n @cancel=${this.handleCancel}\n @click=${(e: MouseEvent) => {\n if (e.target === this.dialogElement) {\n this.handleCancel();\n }\n }}\n >\n ${this.renderPickerSurface()}\n </dialog>\n `;\n }\n\n return this.renderPickerSurface();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'md-date-picker': MdDatePicker;\n }\n}\n"],"mappings":";;;;;;;;;AAEA,IAAa,IAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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"}
@@ -0,0 +1,320 @@
1
+ import { css as e } from "lit";
2
+ var t = e`
3
+ :host {
4
+ display: inline-flex;
5
+ position: relative;
6
+ outline: none;
7
+ vertical-align: middle;
8
+ -webkit-tap-highlight-color: transparent;
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ :host([disabled]) {
13
+ pointer-events: none;
14
+ opacity: 0.38;
15
+ }
16
+
17
+ /* --- Scrim Overlay for Modal Mode --- */
18
+ .scrim {
19
+ position: fixed;
20
+ top: 0;
21
+ left: 0;
22
+ right: 0;
23
+ bottom: 0;
24
+ width: 100vw;
25
+ height: 100vh;
26
+ background-color: var(--md-sys-color-scrim, rgba(0, 0, 0, 0.32));
27
+ opacity: 0;
28
+ visibility: hidden;
29
+ pointer-events: none;
30
+ z-index: 99;
31
+ transition: opacity 250ms cubic-bezier(0.2, 0, 0, 1),
32
+ visibility 250ms cubic-bezier(0.2, 0, 0, 1);
33
+ }
34
+
35
+ :host([modal][open]) .scrim {
36
+ opacity: 1;
37
+ visibility: visible;
38
+ pointer-events: auto;
39
+ }
40
+
41
+ /* --- Main Container & Stacking --- */
42
+ .container {
43
+ position: relative;
44
+ display: inline-flex;
45
+ align-items: center;
46
+ justify-content: center;
47
+ z-index: 100;
48
+ }
49
+
50
+ /* --- Trigger FAB Button --- */
51
+ .trigger-btn {
52
+ position: relative;
53
+ display: inline-flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ box-sizing: border-box;
57
+ border: none;
58
+ cursor: pointer;
59
+ user-select: none;
60
+ outline: none;
61
+ background-color: var(--md-sys-color-primary-container, #EADDFF);
62
+ color: var(--md-sys-color-on-primary-container, #21005D);
63
+ box-shadow: var(--md-sys-elevation-level3, 0px 1px 3px 0px rgba(0, 0, 0, 0.30));
64
+ transition: box-shadow 200ms cubic-bezier(0.2, 0, 0, 1),
65
+ background-color 200ms cubic-bezier(0.2, 0, 0, 1),
66
+ transform 250ms cubic-bezier(0.2, 0, 0, 1);
67
+ overflow: hidden;
68
+ z-index: 2;
69
+ }
70
+
71
+ .trigger-btn:hover {
72
+ box-shadow: var(--md-sys-elevation-level4, 0px 2px 3px 0px rgba(0, 0, 0, 0.30));
73
+ }
74
+
75
+ :host([lowered]) .trigger-btn {
76
+ box-shadow: var(--md-sys-elevation-level1, 0px 1px 3px 1px rgba(0, 0, 0, 0.15));
77
+ }
78
+
79
+ :host([lowered]) .trigger-btn:hover {
80
+ box-shadow: var(--md-sys-elevation-level2, 0px 2px 6px 2px rgba(0, 0, 0, 0.15));
81
+ }
82
+
83
+ /* --- Trigger Sizes --- */
84
+ :host(:not([size])) .trigger-btn,
85
+ :host([size="medium"]) .trigger-btn {
86
+ width: 56px;
87
+ height: 56px;
88
+ border-radius: var(--md-sys-shape-corner-large, 16px);
89
+ }
90
+
91
+ :host([size="small"]) .trigger-btn {
92
+ width: 40px;
93
+ height: 40px;
94
+ border-radius: var(--md-sys-shape-corner-medium, 12px);
95
+ }
96
+
97
+ :host([size="large"]) .trigger-btn {
98
+ width: 96px;
99
+ height: 96px;
100
+ border-radius: var(--md-sys-shape-corner-extra-large, 28px);
101
+ }
102
+
103
+ :host([size="large"]) md-icon {
104
+ --md-icon-size: 36px;
105
+ }
106
+
107
+ /* --- Extended Trigger FAB --- */
108
+ :host([extended]) .trigger-btn {
109
+ width: auto;
110
+ min-width: 80px;
111
+ height: 56px;
112
+ padding: 0 20px;
113
+ border-radius: var(--md-sys-shape-corner-large, 16px);
114
+ gap: 12px;
115
+ }
116
+
117
+ .trigger-content {
118
+ display: inline-flex;
119
+ align-items: center;
120
+ justify-content: center;
121
+ gap: 12px;
122
+ position: relative;
123
+ z-index: 1;
124
+ }
125
+
126
+ .trigger-icon {
127
+ display: inline-flex;
128
+ align-items: center;
129
+ justify-content: center;
130
+ transition: transform 250ms cubic-bezier(0.2, 0, 0, 1);
131
+ }
132
+
133
+ :host([open]:not([open-icon])) .trigger-icon.rotate {
134
+ transform: rotate(45deg);
135
+ }
136
+
137
+ .trigger-label {
138
+ font-family: var(--md-sys-typescale-font-family, inherit);
139
+ font-size: var(--md-sys-typescale-label-large-size, 14px);
140
+ font-weight: 500;
141
+ line-height: 20px;
142
+ letter-spacing: 0.1px;
143
+ white-space: nowrap;
144
+ }
145
+
146
+ /* --- Sub-FAB Items Stack Container --- */
147
+ .items {
148
+ position: absolute;
149
+ display: flex;
150
+ gap: 14px;
151
+ pointer-events: none;
152
+ opacity: 0;
153
+ visibility: hidden;
154
+ transition: opacity 250ms cubic-bezier(0.2, 0, 0, 1),
155
+ visibility 250ms cubic-bezier(0.2, 0, 0, 1),
156
+ transform 250ms cubic-bezier(0.2, 0, 0, 1);
157
+ z-index: 1;
158
+ }
159
+
160
+ :host([open]) .items {
161
+ opacity: 1;
162
+ visibility: visible;
163
+ pointer-events: auto;
164
+ transform: none !important;
165
+ }
166
+
167
+ /* Directions */
168
+ :host(:not([direction])) .items,
169
+ :host([direction="up"]) .items {
170
+ flex-direction: column-reverse;
171
+ bottom: calc(100% + 14px);
172
+ right: 0;
173
+ align-items: flex-end;
174
+ transform: translateY(16px) scale(0.9);
175
+ }
176
+
177
+ :host([direction="down"]) .items {
178
+ flex-direction: column;
179
+ top: calc(100% + 14px);
180
+ right: 0;
181
+ align-items: flex-end;
182
+ transform: translateY(-16px) scale(0.9);
183
+ }
184
+
185
+ :host([direction="left"]) .items {
186
+ flex-direction: row-reverse;
187
+ right: calc(100% + 14px);
188
+ top: 50%;
189
+ transform: translateY(-50%) translateX(16px) scale(0.9);
190
+ align-items: center;
191
+ }
192
+
193
+ :host([direction="left"][open]) .items {
194
+ transform: translateY(-50%) !important;
195
+ }
196
+
197
+ :host([direction="right"]) .items {
198
+ flex-direction: row;
199
+ left: calc(100% + 14px);
200
+ top: 50%;
201
+ transform: translateY(-50%) translateX(-16px) scale(0.9);
202
+ align-items: center;
203
+ }
204
+
205
+ :host([direction="right"][open]) .items {
206
+ transform: translateY(-50%) !important;
207
+ }
208
+ `, r = e`
209
+ :host {
210
+ display: inline-flex;
211
+ align-items: center;
212
+ outline: none;
213
+ vertical-align: middle;
214
+ -webkit-tap-highlight-color: transparent;
215
+ box-sizing: border-box;
216
+ user-select: none;
217
+ }
218
+
219
+ :host([disabled]) {
220
+ pointer-events: none;
221
+ opacity: 0.38;
222
+ }
223
+
224
+ .item-container {
225
+ display: inline-flex;
226
+ align-items: center;
227
+ gap: 12px;
228
+ cursor: pointer;
229
+ }
230
+
231
+ :host([label-placement="end"]) .item-container {
232
+ flex-direction: row-reverse;
233
+ }
234
+
235
+ :host([label-placement="top"]) .item-container {
236
+ flex-direction: column-reverse;
237
+ gap: 6px;
238
+ }
239
+
240
+ :host([label-placement="bottom"]) .item-container {
241
+ flex-direction: column;
242
+ gap: 6px;
243
+ }
244
+
245
+ /* --- Item Label Pill --- */
246
+ .label-pill {
247
+ display: inline-flex;
248
+ align-items: center;
249
+ padding: 6px 12px;
250
+ background-color: var(--md-sys-color-surface-container-low, #F7F2FA);
251
+ color: var(--md-sys-color-on-surface, #1D1B20);
252
+ border-radius: var(--md-sys-shape-corner-small, 8px);
253
+ box-shadow: var(--md-sys-elevation-level1, 0px 1px 3px 1px rgba(0, 0, 0, 0.15));
254
+ font-family: var(--md-sys-typescale-font-family, inherit);
255
+ font-size: var(--md-sys-typescale-label-large-size, 14px);
256
+ font-weight: 500;
257
+ line-height: 20px;
258
+ letter-spacing: 0.1px;
259
+ white-space: nowrap;
260
+ transition: background-color 150ms ease, box-shadow 150ms ease;
261
+ }
262
+
263
+ .item-container:hover .label-pill {
264
+ background-color: var(--md-sys-color-surface-container-high, #ECE6F0);
265
+ box-shadow: var(--md-sys-elevation-level2, 0px 2px 6px 2px rgba(0, 0, 0, 0.15));
266
+ }
267
+
268
+ /* --- Sub-FAB Mini Button --- */
269
+ .mini-fab {
270
+ position: relative;
271
+ display: inline-flex;
272
+ align-items: center;
273
+ justify-content: center;
274
+ box-sizing: border-box;
275
+ border: none;
276
+ cursor: pointer;
277
+ outline: none;
278
+ background-color: var(--md-sys-color-secondary-container, #E8DEF8);
279
+ color: var(--md-sys-color-on-secondary-container, #1D192B);
280
+ box-shadow: var(--md-sys-elevation-level2, 0px 1px 3px 1px rgba(0, 0, 0, 0.15));
281
+ transition: box-shadow 200ms cubic-bezier(0.2, 0, 0, 1),
282
+ background-color 200ms cubic-bezier(0.2, 0, 0, 1);
283
+ overflow: hidden;
284
+ }
285
+
286
+ .item-container:hover .mini-fab {
287
+ box-shadow: var(--md-sys-elevation-level3, 0px 1px 3px 0px rgba(0, 0, 0, 0.30));
288
+ }
289
+
290
+ :host(:not([size])) .mini-fab,
291
+ :host([size="small"]) .mini-fab {
292
+ width: 40px;
293
+ height: 40px;
294
+ border-radius: var(--md-sys-shape-corner-medium, 12px);
295
+ }
296
+
297
+ :host([size="medium"]) .mini-fab {
298
+ width: 56px;
299
+ height: 56px;
300
+ border-radius: var(--md-sys-shape-corner-large, 16px);
301
+ }
302
+
303
+ :host([lowered]) .mini-fab {
304
+ box-shadow: var(--md-sys-elevation-level1, 0px 1px 3px 1px rgba(0, 0, 0, 0.15));
305
+ }
306
+
307
+ .icon-wrapper {
308
+ display: inline-flex;
309
+ align-items: center;
310
+ justify-content: center;
311
+ position: relative;
312
+ z-index: 1;
313
+ }
314
+ `;
315
+ export {
316
+ t as n,
317
+ r as t
318
+ };
319
+
320
+ //# sourceMappingURL=fab-menu.css-3pu930sZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fab-menu.css-3pu930sZ.js","names":[],"sources":["../../src/components/fab-menu/fab-menu.css.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const fabMenuStyles = css`\n :host {\n display: inline-flex;\n position: relative;\n outline: none;\n vertical-align: middle;\n -webkit-tap-highlight-color: transparent;\n box-sizing: border-box;\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: 0.38;\n }\n\n /* --- Scrim Overlay for Modal Mode --- */\n .scrim {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100vw;\n height: 100vh;\n background-color: var(--md-sys-color-scrim, rgba(0, 0, 0, 0.32));\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n z-index: 99;\n transition: opacity 250ms cubic-bezier(0.2, 0, 0, 1),\n visibility 250ms cubic-bezier(0.2, 0, 0, 1);\n }\n\n :host([modal][open]) .scrim {\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n }\n\n /* --- Main Container & Stacking --- */\n .container {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n }\n\n /* --- Trigger FAB Button --- */\n .trigger-btn {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border: none;\n cursor: pointer;\n user-select: none;\n outline: none;\n background-color: var(--md-sys-color-primary-container, #EADDFF);\n color: var(--md-sys-color-on-primary-container, #21005D);\n box-shadow: var(--md-sys-elevation-level3, 0px 1px 3px 0px rgba(0, 0, 0, 0.30));\n transition: box-shadow 200ms cubic-bezier(0.2, 0, 0, 1),\n background-color 200ms cubic-bezier(0.2, 0, 0, 1),\n transform 250ms cubic-bezier(0.2, 0, 0, 1);\n overflow: hidden;\n z-index: 2;\n }\n\n .trigger-btn:hover {\n box-shadow: var(--md-sys-elevation-level4, 0px 2px 3px 0px rgba(0, 0, 0, 0.30));\n }\n\n :host([lowered]) .trigger-btn {\n box-shadow: var(--md-sys-elevation-level1, 0px 1px 3px 1px rgba(0, 0, 0, 0.15));\n }\n\n :host([lowered]) .trigger-btn:hover {\n box-shadow: var(--md-sys-elevation-level2, 0px 2px 6px 2px rgba(0, 0, 0, 0.15));\n }\n\n /* --- Trigger Sizes --- */\n :host(:not([size])) .trigger-btn,\n :host([size=\"medium\"]) .trigger-btn {\n width: 56px;\n height: 56px;\n border-radius: var(--md-sys-shape-corner-large, 16px);\n }\n\n :host([size=\"small\"]) .trigger-btn {\n width: 40px;\n height: 40px;\n border-radius: var(--md-sys-shape-corner-medium, 12px);\n }\n\n :host([size=\"large\"]) .trigger-btn {\n width: 96px;\n height: 96px;\n border-radius: var(--md-sys-shape-corner-extra-large, 28px);\n }\n\n :host([size=\"large\"]) md-icon {\n --md-icon-size: 36px;\n }\n\n /* --- Extended Trigger FAB --- */\n :host([extended]) .trigger-btn {\n width: auto;\n min-width: 80px;\n height: 56px;\n padding: 0 20px;\n border-radius: var(--md-sys-shape-corner-large, 16px);\n gap: 12px;\n }\n\n .trigger-content {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n position: relative;\n z-index: 1;\n }\n\n .trigger-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: transform 250ms cubic-bezier(0.2, 0, 0, 1);\n }\n\n :host([open]:not([open-icon])) .trigger-icon.rotate {\n transform: rotate(45deg);\n }\n\n .trigger-label {\n font-family: var(--md-sys-typescale-font-family, inherit);\n font-size: var(--md-sys-typescale-label-large-size, 14px);\n font-weight: 500;\n line-height: 20px;\n letter-spacing: 0.1px;\n white-space: nowrap;\n }\n\n /* --- Sub-FAB Items Stack Container --- */\n .items {\n position: absolute;\n display: flex;\n gap: 14px;\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 250ms cubic-bezier(0.2, 0, 0, 1),\n visibility 250ms cubic-bezier(0.2, 0, 0, 1),\n transform 250ms cubic-bezier(0.2, 0, 0, 1);\n z-index: 1;\n }\n\n :host([open]) .items {\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n transform: none !important;\n }\n\n /* Directions */\n :host(:not([direction])) .items,\n :host([direction=\"up\"]) .items {\n flex-direction: column-reverse;\n bottom: calc(100% + 14px);\n right: 0;\n align-items: flex-end;\n transform: translateY(16px) scale(0.9);\n }\n\n :host([direction=\"down\"]) .items {\n flex-direction: column;\n top: calc(100% + 14px);\n right: 0;\n align-items: flex-end;\n transform: translateY(-16px) scale(0.9);\n }\n\n :host([direction=\"left\"]) .items {\n flex-direction: row-reverse;\n right: calc(100% + 14px);\n top: 50%;\n transform: translateY(-50%) translateX(16px) scale(0.9);\n align-items: center;\n }\n\n :host([direction=\"left\"][open]) .items {\n transform: translateY(-50%) !important;\n }\n\n :host([direction=\"right\"]) .items {\n flex-direction: row;\n left: calc(100% + 14px);\n top: 50%;\n transform: translateY(-50%) translateX(-16px) scale(0.9);\n align-items: center;\n }\n\n :host([direction=\"right\"][open]) .items {\n transform: translateY(-50%) !important;\n }\n`;\n\nexport const fabMenuItemStyles = css`\n :host {\n display: inline-flex;\n align-items: center;\n outline: none;\n vertical-align: middle;\n -webkit-tap-highlight-color: transparent;\n box-sizing: border-box;\n user-select: none;\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: 0.38;\n }\n\n .item-container {\n display: inline-flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n }\n\n :host([label-placement=\"end\"]) .item-container {\n flex-direction: row-reverse;\n }\n\n :host([label-placement=\"top\"]) .item-container {\n flex-direction: column-reverse;\n gap: 6px;\n }\n\n :host([label-placement=\"bottom\"]) .item-container {\n flex-direction: column;\n gap: 6px;\n }\n\n /* --- Item Label Pill --- */\n .label-pill {\n display: inline-flex;\n align-items: center;\n padding: 6px 12px;\n background-color: var(--md-sys-color-surface-container-low, #F7F2FA);\n color: var(--md-sys-color-on-surface, #1D1B20);\n border-radius: var(--md-sys-shape-corner-small, 8px);\n box-shadow: var(--md-sys-elevation-level1, 0px 1px 3px 1px rgba(0, 0, 0, 0.15));\n font-family: var(--md-sys-typescale-font-family, inherit);\n font-size: var(--md-sys-typescale-label-large-size, 14px);\n font-weight: 500;\n line-height: 20px;\n letter-spacing: 0.1px;\n white-space: nowrap;\n transition: background-color 150ms ease, box-shadow 150ms ease;\n }\n\n .item-container:hover .label-pill {\n background-color: var(--md-sys-color-surface-container-high, #ECE6F0);\n box-shadow: var(--md-sys-elevation-level2, 0px 2px 6px 2px rgba(0, 0, 0, 0.15));\n }\n\n /* --- Sub-FAB Mini Button --- */\n .mini-fab {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n border: none;\n cursor: pointer;\n outline: none;\n background-color: var(--md-sys-color-secondary-container, #E8DEF8);\n color: var(--md-sys-color-on-secondary-container, #1D192B);\n box-shadow: var(--md-sys-elevation-level2, 0px 1px 3px 1px rgba(0, 0, 0, 0.15));\n transition: box-shadow 200ms cubic-bezier(0.2, 0, 0, 1),\n background-color 200ms cubic-bezier(0.2, 0, 0, 1);\n overflow: hidden;\n }\n\n .item-container:hover .mini-fab {\n box-shadow: var(--md-sys-elevation-level3, 0px 1px 3px 0px rgba(0, 0, 0, 0.30));\n }\n\n :host(:not([size])) .mini-fab,\n :host([size=\"small\"]) .mini-fab {\n width: 40px;\n height: 40px;\n border-radius: var(--md-sys-shape-corner-medium, 12px);\n }\n\n :host([size=\"medium\"]) .mini-fab {\n width: 56px;\n height: 56px;\n border-radius: var(--md-sys-shape-corner-large, 16px);\n }\n\n :host([lowered]) .mini-fab {\n box-shadow: var(--md-sys-elevation-level1, 0px 1px 3px 1px rgba(0, 0, 0, 0.15));\n }\n\n .icon-wrapper {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n z-index: 1;\n }\n`;\n"],"mappings":";AAEA,IAAa,IAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgNhB,IAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA"}
@@ -26,7 +26,7 @@ var c = l`
26
26
  height: 40px;
27
27
  padding: 0;
28
28
  border: none;
29
- border-radius: var(--md-sys-shape-corner-full, 50%);
29
+ border-radius: var(--md-icon-button-border-radius, var(--md-button-border-radius, var(--md-sys-shape-corner-full, 50%)));
30
30
  overflow: hidden;
31
31
  background-color: transparent;
32
32
  color: var(--md-sys-color-on-surface-variant, #49454F);
@@ -185,4 +185,4 @@ export {
185
185
  t
186
186
  };
187
187
 
188
- //# sourceMappingURL=icon-button-BdSc7eot.js.map
188
+ //# sourceMappingURL=icon-button-BQz73GLa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-button-BQz73GLa.js","names":[],"sources":["../../src/components/icon-button/icon-button.css.ts","../../src/components/icon-button/icon-button.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const iconButtonStyles = css`\n :host {\n display: inline-flex;\n outline: none;\n vertical-align: middle;\n -webkit-tap-highlight-color: transparent;\n }\n\n :host([disabled]) {\n pointer-events: none;\n }\n\n button, a {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 40px;\n height: 40px;\n padding: 0;\n border: none;\n border-radius: var(--md-icon-button-border-radius, var(--md-button-border-radius, var(--md-sys-shape-corner-full, 50%)));\n overflow: hidden;\n background-color: transparent;\n color: var(--md-sys-color-on-surface-variant, #49454F);\n cursor: pointer;\n user-select: none;\n outline: none;\n text-decoration: none;\n transition: background-color 150ms cubic-bezier(0.2, 0, 0, 1),\n color 150ms cubic-bezier(0.2, 0, 0, 1);\n }\n\n /* --- Filled --- */\n :host([variant=\"filled\"]) button,\n :host([variant=\"filled\"]) a {\n background-color: var(--md-sys-color-primary, #6750A4);\n color: var(--md-sys-color-on-primary, #FFFFFF);\n }\n\n :host([variant=\"filled\"][selected]) button,\n :host([variant=\"filled\"][selected]) a {\n background-color: var(--md-sys-color-primary, #6750A4);\n color: var(--md-sys-color-on-primary, #FFFFFF);\n }\n\n /* --- Tonal --- */\n :host([variant=\"tonal\"]) button,\n :host([variant=\"tonal\"]) a {\n background-color: var(--md-sys-color-secondary-container, #E8DEF8);\n color: var(--md-sys-color-on-secondary-container, #1D192B);\n }\n\n /* --- Outlined --- */\n :host([variant=\"outlined\"]) button,\n :host([variant=\"outlined\"]) a {\n border: 1px solid var(--md-sys-color-outline, #79747E);\n color: var(--md-sys-color-on-surface-variant, #49454F);\n }\n\n :host([variant=\"outlined\"][selected]) button,\n :host([variant=\"outlined\"][selected]) a {\n background-color: var(--md-sys-color-inverse-surface, #313033);\n color: var(--md-sys-color-inverse-on-surface, #F4EFF4);\n border: none;\n }\n\n /* --- Toggle / Selected for Standard --- */\n :host(:not([variant])[selected]) button,\n :host(:not([variant])[selected]) a,\n :host([variant=\"standard\"][selected]) button,\n :host([variant=\"standard\"][selected]) a {\n color: var(--md-sys-color-primary, #6750A4);\n }\n\n /* --- Disabled --- */\n :host([disabled]) button,\n :host([disabled]) a {\n cursor: not-allowed;\n color: rgba(29, 27, 32, 0.38);\n }\n\n :host([disabled][variant=\"filled\"]) button,\n :host([disabled][variant=\"filled\"]) a,\n :host([disabled][variant=\"tonal\"]) button,\n :host([disabled][variant=\"tonal\"]) a {\n background-color: rgba(29, 27, 32, 0.12);\n }\n\n :host([disabled][variant=\"outlined\"]) button,\n :host([disabled][variant=\"outlined\"]) a {\n border-color: rgba(29, 27, 32, 0.12);\n }\n\n .content {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n z-index: 1;\n }\n`;\n\n","import { html, nothing } from 'lit';\nimport { customElement, property } 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 { iconButtonStyles } from './icon-button.css.js';\n\nexport type IconButtonVariant = 'standard' | 'filled' | 'tonal' | 'outlined';\n\n@customElement('md-icon-button')\nexport class MdIconButton extends MdBaseElement {\n static override styles = [MdBaseElement.styles, iconButtonStyles];\n\n @property({ type: String, reflect: true })\n variant: IconButtonVariant = 'standard';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ type: Boolean, reflect: true })\n toggle = false;\n\n @property({ type: Boolean, reflect: true })\n selected = false;\n\n @property({ type: String })\n icon = '';\n\n @property({ type: String, attribute: 'selected-icon' })\n selectedIcon = '';\n\n @property({ type: String, attribute: 'aria-label' })\n ariaLabelText = '';\n\n @property({ type: String })\n href = '';\n\n @property({ type: String })\n target = '';\n\n private handleClick = (event: MouseEvent): void => {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n\n if (this.toggle) {\n this.selected = !this.selected;\n this.emitEvent('change', { selected: this.selected });\n }\n };\n\n override render() {\n const iconName = (this.selected && this.selectedIcon) ? this.selectedIcon : this.icon;\n\n const content = html`\n <md-ripple ?disabled=${this.disabled}></md-ripple>\n <md-focus-ring></md-focus-ring>\n <span class=\"content\">\n <slot>\n ${iconName ? html`<md-icon name=${iconName} ?filled=${this.selected}></md-icon>` : nothing}\n </slot>\n </span>\n `;\n\n if (this.href) {\n return html`\n <a\n href=${this.disabled ? nothing : this.href}\n target=${this.target || nothing}\n aria-label=${this.ariaLabelText || nothing}\n aria-pressed=${this.toggle ? (this.selected ? 'true' : 'false') : nothing}\n aria-disabled=${this.disabled ? 'true' : nothing}\n tabindex=${this.disabled ? '-1' : '0'}\n @click=${this.handleClick}\n >\n ${content}\n </a>\n `;\n }\n\n return html`\n <button\n aria-label=${this.ariaLabelText || nothing}\n aria-pressed=${this.toggle ? (this.selected ? 'true' : 'false') : nothing}\n ?disabled=${this.disabled}\n @click=${this.handleClick}\n >\n ${content}\n </button>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'md-icon-button': MdIconButton;\n }\n}\n\n"],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ import { n as r, t as a } from "./decorate-DXuynaiA.js";
2
+ import { css as s, html as o } from "lit";
3
+ import { customElement as n, property as i } from "lit/decorators.js";
4
+ var d = s`
5
+ :host {
6
+ display: inline-flex;
7
+ align-items: center;
8
+ justify-content: center;
9
+ vertical-align: middle;
10
+ box-sizing: border-box;
11
+ --md-loading-indicator-color: var(--md-sys-color-primary, #6750A4);
12
+ --md-loading-indicator-container-color: var(--md-sys-color-surface-container-high, #ECE6F0);
13
+ --md-loading-indicator-container-shape: var(--md-sys-shape-corner-medium, 16px);
14
+ }
15
+
16
+ :host([size="small"]) {
17
+ --_size: var(--md-loading-indicator-size, 36px);
18
+ --_shape-size: var(--md-loading-indicator-shape-size, 18px);
19
+ }
20
+
21
+ :host(:not([size])),
22
+ :host([size="medium"]) {
23
+ --_size: var(--md-loading-indicator-size, 48px);
24
+ --_shape-size: var(--md-loading-indicator-shape-size, 24px);
25
+ }
26
+
27
+ :host([size="large"]) {
28
+ --_size: var(--md-loading-indicator-size, 64px);
29
+ --_shape-size: var(--md-loading-indicator-shape-size, 32px);
30
+ }
31
+
32
+ :host(:not([contained])) {
33
+ width: var(--_shape-size);
34
+ height: var(--_shape-size);
35
+ }
36
+
37
+ :host([contained]) {
38
+ width: var(--_size);
39
+ height: var(--_size);
40
+ background-color: var(--md-loading-indicator-container-color);
41
+ border-radius: var(--md-loading-indicator-container-shape);
42
+ }
43
+
44
+ :host([hidden]),
45
+ :host([active="false"]) {
46
+ display: none;
47
+ }
48
+
49
+ .container {
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+ width: 100%;
54
+ height: 100%;
55
+ position: relative;
56
+ }
57
+
58
+ .shape {
59
+ width: var(--_shape-size);
60
+ height: var(--_shape-size);
61
+ background-color: var(--md-loading-indicator-color);
62
+ transform-origin: center center;
63
+ will-change: transform, border-radius;
64
+ }
65
+
66
+ /* Morphing shape animation */
67
+ :host([shape="morph"]:not([paused])) .shape,
68
+ :host(:not([shape]):not([paused])) .shape {
69
+ animation: md-loading-morph 2s cubic-bezier(0.4, 0, 0.2, 1) infinite;
70
+ }
71
+
72
+ :host([shape="square"]:not([paused])) .shape {
73
+ border-radius: 4px;
74
+ animation: md-loading-spin 1.6s cubic-bezier(0.4, 0, 0.2, 1) infinite;
75
+ }
76
+
77
+ :host([shape="circle"]:not([paused])) .shape {
78
+ border-radius: 50%;
79
+ animation: md-loading-pulse 1.4s ease-in-out infinite alternate;
80
+ }
81
+
82
+ :host([shape="clover"]:not([paused])) .shape,
83
+ :host([shape="star"]:not([paused])) .shape {
84
+ border-radius: 50% 15% 50% 15%;
85
+ animation: md-loading-spin 2s linear infinite;
86
+ }
87
+
88
+ :host([paused]) .shape {
89
+ animation-play-state: paused;
90
+ }
91
+
92
+ @keyframes md-loading-morph {
93
+ 0% {
94
+ border-radius: 50%;
95
+ transform: rotate(0deg) scale(1);
96
+ }
97
+ 20% {
98
+ border-radius: 12%;
99
+ transform: rotate(90deg) scale(0.85);
100
+ }
101
+ 40% {
102
+ border-radius: 50% 15% 50% 15%;
103
+ transform: rotate(180deg) scale(1.05);
104
+ }
105
+ 60% {
106
+ border-radius: 15% 50% 15% 50%;
107
+ transform: rotate(270deg) scale(0.85);
108
+ }
109
+ 80% {
110
+ border-radius: 40% 60% 60% 40% / 40% 40% 60% 60%;
111
+ transform: rotate(315deg) scale(0.95);
112
+ }
113
+ 100% {
114
+ border-radius: 50%;
115
+ transform: rotate(360deg) scale(1);
116
+ }
117
+ }
118
+
119
+ @keyframes md-loading-spin {
120
+ 0% {
121
+ transform: rotate(0deg) scale(0.9);
122
+ }
123
+ 50% {
124
+ transform: rotate(180deg) scale(1.05);
125
+ }
126
+ 100% {
127
+ transform: rotate(360deg) scale(0.9);
128
+ }
129
+ }
130
+
131
+ @keyframes md-loading-pulse {
132
+ 0% {
133
+ transform: scale(0.75);
134
+ opacity: 0.7;
135
+ }
136
+ 100% {
137
+ transform: scale(1.05);
138
+ opacity: 1;
139
+ }
140
+ }
141
+
142
+ @media (prefers-reduced-motion: reduce) {
143
+ .shape {
144
+ animation: none !important;
145
+ }
146
+ }
147
+ `, e = class extends r {
148
+ constructor(...t) {
149
+ super(...t), this.size = "medium", this.contained = !1, this.shape = "morph", this.paused = !1, this.label = "Loading";
150
+ }
151
+ static {
152
+ this.styles = [r.styles, d];
153
+ }
154
+ connectedCallback() {
155
+ super.connectedCallback(), this.hasAttribute("role") || this.setAttribute("role", "status"), this.hasAttribute("aria-live") || this.setAttribute("aria-live", "polite"), this.updateAriaLabel();
156
+ }
157
+ updated(t) {
158
+ super.updated(t), t.has("label") && this.updateAriaLabel();
159
+ }
160
+ updateAriaLabel() {
161
+ this.label && !this.getAttribute("aria-label") && this.setAttribute("aria-label", this.label);
162
+ }
163
+ render() {
164
+ return o`
165
+ <div class="container" part="container">
166
+ <div class="shape" part="shape"></div>
167
+ </div>
168
+ `;
169
+ }
170
+ };
171
+ a([i({
172
+ type: String,
173
+ reflect: !0
174
+ })], e.prototype, "size", void 0);
175
+ a([i({
176
+ type: Boolean,
177
+ reflect: !0
178
+ })], e.prototype, "contained", void 0);
179
+ a([i({
180
+ type: String,
181
+ reflect: !0
182
+ })], e.prototype, "shape", void 0);
183
+ a([i({
184
+ type: Boolean,
185
+ reflect: !0
186
+ })], e.prototype, "paused", void 0);
187
+ a([i({ type: String })], e.prototype, "label", void 0);
188
+ e = a([n("md-loading-indicator")], e);
189
+ export {
190
+ e as t
191
+ };
192
+
193
+ //# sourceMappingURL=loading-indicator-CvWnZr9o.js.map