@universal-material/web 3.0.8 → 3.0.9

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 (364) hide show
  1. package/.editorconfig +8 -0
  2. package/.eleventy.cjs +21 -0
  3. package/.eslintignore +6 -0
  4. package/.eslintrc.json +98 -0
  5. package/.prettierrc.json +7 -0
  6. package/.vscode/extensions.json +9 -0
  7. package/CHANGELOG.md +98 -0
  8. package/LICENSE +28 -0
  9. package/docs/.nojekyll +0 -0
  10. package/docs/api/index.html +149 -0
  11. package/docs/docs.css +185 -0
  12. package/docs/examples/index.html +75 -0
  13. package/docs/examples/name-property/index.html +65 -0
  14. package/docs/index.html +75 -0
  15. package/docs/install/index.html +53 -0
  16. package/docs/prism-okaidia.css +123 -0
  17. package/docs/src/_api-section.pug +27 -0
  18. package/docs/src/_layout.pug +182 -0
  19. package/docs/src/components/button-set/alignment.html +29 -0
  20. package/docs/src/components/button-set/stack.html +5 -0
  21. package/docs/src/components/button-set/usage.html +35 -0
  22. package/docs/src/components/button-set.pug +16 -0
  23. package/docs/src/components/cards/card-media.html +39 -0
  24. package/docs/src/components/cards/card-with-actions.html +38 -0
  25. package/docs/src/components/cards/simple-card.html +3 -0
  26. package/docs/src/components/cards.pug +15 -0
  27. package/docs/src/components/checkbox/usage.html +33 -0
  28. package/docs/src/components/checkbox.pug +7 -0
  29. package/docs/src/components/chips/chip-input.html +73 -0
  30. package/docs/src/components/chips/default-chips.html +25 -0
  31. package/docs/src/components/chips/elevated-chips.html +25 -0
  32. package/docs/src/components/chips/selected-chips.html +50 -0
  33. package/docs/src/components/chips.pug +16 -0
  34. package/docs/src/components/common-buttons/anchor-buttons.html +6 -0
  35. package/docs/src/components/common-buttons/buttons-icons.html +24 -0
  36. package/docs/src/components/common-buttons/buttons-trailing-icons.html +25 -0
  37. package/docs/src/components/common-buttons/buttons-variants.html +6 -0
  38. package/docs/src/components/common-buttons/filled-colors.html +4 -0
  39. package/docs/src/components/common-buttons.pug +22 -0
  40. package/docs/src/components/data-tables/simple-table.html +47 -0
  41. package/docs/src/components/data-tables/table-footer.html +59 -0
  42. package/docs/src/components/data-tables/table-header.html +43 -0
  43. package/docs/src/components/data-tables.pug +15 -0
  44. package/docs/src/components/datepicker.pug +133 -0
  45. package/docs/src/components/dialogs/example.html +44 -0
  46. package/docs/src/components/dialogs.pug +19 -0
  47. package/docs/src/components/dividers/no-margin.html +7 -0
  48. package/docs/src/components/dividers/usage.html +7 -0
  49. package/docs/src/components/dividers.pug +13 -0
  50. package/docs/src/components/dropdown-menus/down-end.html +10 -0
  51. package/docs/src/components/dropdown-menus/down-left.html +10 -0
  52. package/docs/src/components/dropdown-menus/down-right.html +10 -0
  53. package/docs/src/components/dropdown-menus/down-start.html +10 -0
  54. package/docs/src/components/dropdown-menus/down.html +10 -0
  55. package/docs/src/components/dropdown-menus/up-end.html +10 -0
  56. package/docs/src/components/dropdown-menus/up-left.html +10 -0
  57. package/docs/src/components/dropdown-menus/up-right.html +10 -0
  58. package/docs/src/components/dropdown-menus/up-start.html +10 -0
  59. package/docs/src/components/dropdown-menus/up.html +10 -0
  60. package/docs/src/components/expansion-panel.pug +33 -0
  61. package/docs/src/components/fab/button-colors.html +18 -0
  62. package/docs/src/components/fab/button-sizes.html +11 -0
  63. package/docs/src/components/fab/extended-buttons.html +18 -0
  64. package/docs/src/components/fab/floating-action-area.html +5 -0
  65. package/docs/src/components/fab/floating-menu.html +10 -0
  66. package/docs/src/components/fab/lowered-buttons.html +6 -0
  67. package/docs/src/components/fab.pug +25 -0
  68. package/docs/src/components/icon-buttons/anchor-buttons.html +15 -0
  69. package/docs/src/components/icon-buttons/buttons-variants.html +15 -0
  70. package/docs/src/components/icon-buttons/toggle-buttons-manual.html +44 -0
  71. package/docs/src/components/icon-buttons/toggle-buttons.html +48 -0
  72. package/docs/src/components/icon-buttons.pug +18 -0
  73. package/docs/src/components/lists/list-avatars.html +14 -0
  74. package/docs/src/components/lists/list-custom-dividers.html +23 -0
  75. package/docs/src/components/lists/list-dividers.html +17 -0
  76. package/docs/src/components/lists/list-dynamic.html +26 -0
  77. package/docs/src/components/lists/list-hover.html +17 -0
  78. package/docs/src/components/lists/list-icons.html +17 -0
  79. package/docs/src/components/lists/list-indexed.html +123 -0
  80. package/docs/src/components/lists/list-sections.html +16 -0
  81. package/docs/src/components/lists/list-three-lines.html +20 -0
  82. package/docs/src/components/lists/list-two-lines.html +20 -0
  83. package/docs/src/components/lists/list-with-action.html +26 -0
  84. package/docs/src/components/lists/list-with-activated-item.html +17 -0
  85. package/docs/src/components/lists/simple-list.html +17 -0
  86. package/docs/src/components/lists.pug +94 -0
  87. package/docs/src/components/menus.pug +55 -0
  88. package/docs/src/components/progress/circular-progress.html +13 -0
  89. package/docs/src/components/progress/determinate-progress.html +3 -0
  90. package/docs/src/components/progress/indeterminate-progress.html +3 -0
  91. package/docs/src/components/progress/progress-color.html +3 -0
  92. package/docs/src/components/progress.pug +18 -0
  93. package/docs/src/components/ripple/usage.html +9 -0
  94. package/docs/src/components/ripple.pug +10 -0
  95. package/docs/src/components/selection-controls/checkbox.html +22 -0
  96. package/docs/src/components/selection-controls/radio-button.html +36 -0
  97. package/docs/src/components/selection-controls/switch.html +12 -0
  98. package/docs/src/components/selection-controls.pug +13 -0
  99. package/docs/src/components/sliders/example.html +42 -0
  100. package/docs/src/components/sliders.pug +7 -0
  101. package/docs/src/components/snackbar/example.html +35 -0
  102. package/docs/src/components/snackbars.pug +21 -0
  103. package/docs/src/components/steppers.pug +57 -0
  104. package/docs/src/components/tabs/example.html +45 -0
  105. package/docs/src/components/tabs.pug +8 -0
  106. package/docs/src/components/text-fields.pug +88 -0
  107. package/docs/src/components/toolbars/simple-toolbar.html +33 -0
  108. package/docs/src/components/toolbars.pug +7 -0
  109. package/docs/src/content/typography/example.html +15 -0
  110. package/docs/src/content/typography.pug +8 -0
  111. package/docs/src/css/docs.scss +189 -0
  112. package/docs/src/index.pug +10 -0
  113. package/docs/src/js/docs.js +161 -0
  114. package/docs/src/js/universal-material.js +757 -0
  115. package/docs/src/js/universal-material.js.map +1 -0
  116. package/docs/src/js/universal-material.min.js +17 -0
  117. package/docs/src/js/universal-material.min.js.map +1 -0
  118. package/docs/src/layout/grid.pug +15 -0
  119. package/docs/src/utilities/background-colors/common-colors.html +7 -0
  120. package/docs/src/utilities/background-colors/theme-colors.html +16 -0
  121. package/docs/src/utilities/background-colors.pug +10 -0
  122. package/docs/src/utilities/text-and-background-colors/common-colors.html +80 -0
  123. package/docs/src/utilities/text-and-background-colors/theme-colors.html +208 -0
  124. package/docs/src/utilities/text-and-background-colors.pug +10 -0
  125. package/docs/src/utilities/text-colors/common-colors.html +12 -0
  126. package/docs/src/utilities/text-colors/emphasis-colors.html +26 -0
  127. package/docs/src/utilities/text-colors/theme-colors.html +37 -0
  128. package/docs/src/utilities/text-colors.pug +13 -0
  129. package/gulpfile.js +225 -0
  130. package/index.html +11 -0
  131. package/package.json +1 -1
  132. package/rollup.config.js +42 -0
  133. package/src/_utils.scss +20 -0
  134. package/src/_variables.scss +68 -0
  135. package/src/button/button-base.styles.scss +75 -0
  136. package/src/button/button-base.ts +147 -0
  137. package/src/button/button-set.styles.scss +35 -0
  138. package/src/button/button-set.ts +33 -0
  139. package/src/button/button.styles.scss +97 -0
  140. package/src/button/button.ts +64 -0
  141. package/src/button/fab.styles.scss +90 -0
  142. package/src/button/fab.ts +55 -0
  143. package/src/button/icon-button.styles.scss +74 -0
  144. package/src/button/icon-button.ts +72 -0
  145. package/src/card/card-content.styles.scss +11 -0
  146. package/src/card/card-content.ts +45 -0
  147. package/src/card/card-media.styles.scss +9 -0
  148. package/src/card/card-media.ts +24 -0
  149. package/src/card/card.styles.scss +27 -0
  150. package/src/card/card.ts +37 -0
  151. package/src/checkbox/checkbox.ts +77 -0
  152. package/src/container/container.styles.scss +39 -0
  153. package/src/container/container.ts +24 -0
  154. package/src/divider/divider.styles.scss +13 -0
  155. package/src/divider/divider.ts +21 -0
  156. package/src/elevation/elevation.styles.scss +31 -0
  157. package/src/elevation/elevation.ts +17 -0
  158. package/{index.js → src/index.ts} +1 -1
  159. package/src/ripple/ripple.styles.scss +80 -0
  160. package/src/ripple/ripple.ts +150 -0
  161. package/src/shared/base.styles.scss +5 -0
  162. package/src/table/table-body.styles.scss +9 -0
  163. package/src/table/table-body.ts +21 -0
  164. package/src/table/table-cell.styles.scss +9 -0
  165. package/src/table/table-cell.ts +21 -0
  166. package/src/table/table-head.styles.scss +9 -0
  167. package/src/table/table-head.ts +21 -0
  168. package/src/table/table-header-cell.styles.scss +10 -0
  169. package/src/table/table-header-cell.ts +21 -0
  170. package/src/table/table-row.styles.scss +3 -0
  171. package/src/table/table-row.ts +21 -0
  172. package/src/table/table.styles.scss +12 -0
  173. package/{table/table.js → src/table/table.ts} +15 -6
  174. package/src/theme/color.ts +6 -0
  175. package/src/theme/css-var-builder.ts +36 -0
  176. package/{theme/index.js → src/theme/index.ts} +0 -1
  177. package/src/theme/neutral-colors.ts +21 -0
  178. package/src/theme/rgb-color.ts +19 -0
  179. package/src/theme/theme-builder.ts +201 -0
  180. package/{theme/theme-color.d.ts → src/theme/theme-color.ts} +3 -2
  181. package/tsconfig.json +36 -0
  182. package/web-dev-server.config.js +25 -0
  183. package/web-test-runner.config.js +120 -0
  184. package/button/button-base.d.ts +0 -43
  185. package/button/button-base.d.ts.map +0 -1
  186. package/button/button-base.js +0 -152
  187. package/button/button-base.js.map +0 -1
  188. package/button/button-base.styles.d.ts +0 -2
  189. package/button/button-base.styles.d.ts.map +0 -1
  190. package/button/button-base.styles.js +0 -75
  191. package/button/button-base.styles.js.map +0 -1
  192. package/button/button-set.d.ts +0 -20
  193. package/button/button-set.d.ts.map +0 -1
  194. package/button/button-set.js +0 -38
  195. package/button/button-set.js.map +0 -1
  196. package/button/button-set.styles.d.ts +0 -2
  197. package/button/button-set.styles.d.ts.map +0 -1
  198. package/button/button-set.styles.js +0 -39
  199. package/button/button-set.styles.js.map +0 -1
  200. package/button/button.d.ts +0 -34
  201. package/button/button.d.ts.map +0 -1
  202. package/button/button.js +0 -64
  203. package/button/button.js.map +0 -1
  204. package/button/button.styles.d.ts +0 -2
  205. package/button/button.styles.d.ts.map +0 -1
  206. package/button/button.styles.js +0 -96
  207. package/button/button.styles.js.map +0 -1
  208. package/button/fab.d.ts +0 -31
  209. package/button/fab.d.ts.map +0 -1
  210. package/button/fab.js +0 -63
  211. package/button/fab.js.map +0 -1
  212. package/button/fab.styles.d.ts +0 -2
  213. package/button/fab.styles.d.ts.map +0 -1
  214. package/button/fab.styles.js +0 -89
  215. package/button/fab.styles.js.map +0 -1
  216. package/button/icon-button.d.ts +0 -35
  217. package/button/icon-button.d.ts.map +0 -1
  218. package/button/icon-button.js +0 -79
  219. package/button/icon-button.js.map +0 -1
  220. package/button/icon-button.styles.d.ts +0 -2
  221. package/button/icon-button.styles.d.ts.map +0 -1
  222. package/button/icon-button.styles.js +0 -70
  223. package/button/icon-button.styles.js.map +0 -1
  224. package/card/card-content.d.ts +0 -13
  225. package/card/card-content.d.ts.map +0 -1
  226. package/card/card-content.js +0 -44
  227. package/card/card-content.js.map +0 -1
  228. package/card/card-content.styles.d.ts +0 -2
  229. package/card/card-content.styles.d.ts.map +0 -1
  230. package/card/card-content.styles.js +0 -15
  231. package/card/card-content.styles.js.map +0 -1
  232. package/card/card-media.d.ts +0 -12
  233. package/card/card-media.d.ts.map +0 -1
  234. package/card/card-media.js +0 -29
  235. package/card/card-media.js.map +0 -1
  236. package/card/card-media.styles.d.ts +0 -2
  237. package/card/card-media.styles.d.ts.map +0 -1
  238. package/card/card-media.styles.js +0 -13
  239. package/card/card-media.styles.js.map +0 -1
  240. package/card/card.d.ts +0 -19
  241. package/card/card.d.ts.map +0 -1
  242. package/card/card.js +0 -40
  243. package/card/card.js.map +0 -1
  244. package/card/card.styles.d.ts +0 -2
  245. package/card/card.styles.d.ts.map +0 -1
  246. package/card/card.styles.js +0 -28
  247. package/card/card.styles.js.map +0 -1
  248. package/checkbox/checkbox.d.ts +0 -16
  249. package/checkbox/checkbox.d.ts.map +0 -1
  250. package/checkbox/checkbox.js +0 -75
  251. package/checkbox/checkbox.js.map +0 -1
  252. package/container/container.d.ts +0 -13
  253. package/container/container.d.ts.map +0 -1
  254. package/container/container.js +0 -23
  255. package/container/container.js.map +0 -1
  256. package/container/container.styles.d.ts +0 -2
  257. package/container/container.styles.d.ts.map +0 -1
  258. package/container/container.styles.js +0 -43
  259. package/container/container.styles.js.map +0 -1
  260. package/custom-elements.json +0 -3706
  261. package/divider/divider.d.ts +0 -14
  262. package/divider/divider.d.ts.map +0 -1
  263. package/divider/divider.js +0 -27
  264. package/divider/divider.js.map +0 -1
  265. package/divider/divider.styles.d.ts +0 -2
  266. package/divider/divider.styles.d.ts.map +0 -1
  267. package/divider/divider.styles.js +0 -15
  268. package/divider/divider.styles.js.map +0 -1
  269. package/elevation/elevation.d.ts +0 -11
  270. package/elevation/elevation.d.ts.map +0 -1
  271. package/elevation/elevation.js +0 -21
  272. package/elevation/elevation.js.map +0 -1
  273. package/elevation/elevation.styles.d.ts +0 -2
  274. package/elevation/elevation.styles.d.ts.map +0 -1
  275. package/elevation/elevation.styles.js +0 -28
  276. package/elevation/elevation.styles.js.map +0 -1
  277. package/index.d.ts +0 -27
  278. package/index.d.ts.map +0 -1
  279. package/index.js.map +0 -1
  280. package/ripple/ripple.d.ts +0 -25
  281. package/ripple/ripple.d.ts.map +0 -1
  282. package/ripple/ripple.js +0 -119
  283. package/ripple/ripple.js.map +0 -1
  284. package/ripple/ripple.styles.d.ts +0 -2
  285. package/ripple/ripple.styles.d.ts.map +0 -1
  286. package/ripple/ripple.styles.js +0 -74
  287. package/ripple/ripple.styles.js.map +0 -1
  288. package/shared/base.styles.d.ts +0 -2
  289. package/shared/base.styles.d.ts.map +0 -1
  290. package/shared/base.styles.js +0 -9
  291. package/shared/base.styles.js.map +0 -1
  292. package/table/table-body.d.ts +0 -11
  293. package/table/table-body.d.ts.map +0 -1
  294. package/table/table-body.js +0 -21
  295. package/table/table-body.js.map +0 -1
  296. package/table/table-body.styles.d.ts +0 -2
  297. package/table/table-body.styles.d.ts.map +0 -1
  298. package/table/table-body.styles.js +0 -11
  299. package/table/table-body.styles.js.map +0 -1
  300. package/table/table-cell.d.ts +0 -11
  301. package/table/table-cell.d.ts.map +0 -1
  302. package/table/table-cell.js +0 -21
  303. package/table/table-cell.js.map +0 -1
  304. package/table/table-cell.styles.d.ts +0 -2
  305. package/table/table-cell.styles.d.ts.map +0 -1
  306. package/table/table-cell.styles.js +0 -11
  307. package/table/table-cell.styles.js.map +0 -1
  308. package/table/table-head.d.ts +0 -11
  309. package/table/table-head.d.ts.map +0 -1
  310. package/table/table-head.js +0 -21
  311. package/table/table-head.js.map +0 -1
  312. package/table/table-head.styles.d.ts +0 -2
  313. package/table/table-head.styles.d.ts.map +0 -1
  314. package/table/table-head.styles.js +0 -11
  315. package/table/table-head.styles.js.map +0 -1
  316. package/table/table-header-cell.d.ts +0 -11
  317. package/table/table-header-cell.d.ts.map +0 -1
  318. package/table/table-header-cell.js +0 -21
  319. package/table/table-header-cell.js.map +0 -1
  320. package/table/table-header-cell.styles.d.ts +0 -2
  321. package/table/table-header-cell.styles.d.ts.map +0 -1
  322. package/table/table-header-cell.styles.js +0 -12
  323. package/table/table-header-cell.styles.js.map +0 -1
  324. package/table/table-row.d.ts +0 -11
  325. package/table/table-row.d.ts.map +0 -1
  326. package/table/table-row.js +0 -21
  327. package/table/table-row.js.map +0 -1
  328. package/table/table-row.styles.d.ts +0 -2
  329. package/table/table-row.styles.d.ts.map +0 -1
  330. package/table/table-row.styles.js +0 -7
  331. package/table/table-row.styles.js.map +0 -1
  332. package/table/table.d.ts +0 -16
  333. package/table/table.d.ts.map +0 -1
  334. package/table/table.js.map +0 -1
  335. package/table/table.styles.d.ts +0 -2
  336. package/table/table.styles.d.ts.map +0 -1
  337. package/table/table.styles.js +0 -16
  338. package/table/table.styles.js.map +0 -1
  339. package/theme/color.d.ts +0 -7
  340. package/theme/color.d.ts.map +0 -1
  341. package/theme/color.js +0 -2
  342. package/theme/color.js.map +0 -1
  343. package/theme/css-var-builder.d.ts +0 -9
  344. package/theme/css-var-builder.d.ts.map +0 -1
  345. package/theme/css-var-builder.js +0 -25
  346. package/theme/css-var-builder.js.map +0 -1
  347. package/theme/index.d.ts +0 -2
  348. package/theme/index.d.ts.map +0 -1
  349. package/theme/index.js.map +0 -1
  350. package/theme/neutral-colors.d.ts +0 -4
  351. package/theme/neutral-colors.d.ts.map +0 -1
  352. package/theme/neutral-colors.js +0 -19
  353. package/theme/neutral-colors.js.map +0 -1
  354. package/theme/rgb-color.d.ts +0 -9
  355. package/theme/rgb-color.d.ts.map +0 -1
  356. package/theme/rgb-color.js +0 -13
  357. package/theme/rgb-color.js.map +0 -1
  358. package/theme/theme-builder.d.ts +0 -27
  359. package/theme/theme-builder.d.ts.map +0 -1
  360. package/theme/theme-builder.js +0 -146
  361. package/theme/theme-builder.js.map +0 -1
  362. package/theme/theme-color.d.ts.map +0 -1
  363. package/theme/theme-color.js +0 -2
  364. package/theme/theme-color.js.map +0 -1
@@ -0,0 +1,19 @@
1
+ import { blueFromArgb, greenFromArgb, redFromArgb } from '@material/material-color-utilities';
2
+
3
+ export class RgbColor {
4
+ r: number;
5
+ g: number;
6
+ b: number;
7
+
8
+ constructor(r: number, g: number, b: number) {
9
+ this.r = r;
10
+ this.g = g;
11
+ this.b = b;
12
+ }
13
+
14
+ static fromArgb(argb: number): RgbColor {
15
+ return new RgbColor(redFromArgb(argb), greenFromArgb(argb), blueFromArgb(argb));
16
+ }
17
+
18
+ toString = (): string => `${this.r},${this.g},${this.b}`;
19
+ }
@@ -0,0 +1,201 @@
1
+ import { argbFromHex, CorePalette, TonalPalette } from '@material/material-color-utilities';
2
+
3
+ import { Color } from './color.js';
4
+ import { CssVarBuilder } from './css-var-builder.js';
5
+ import { neutralColors, neutralVariantColors } from './neutral-colors.js';
6
+ import { ThemeColor } from './theme-color.js';
7
+
8
+ function getCss(selector: string, content: string): string {
9
+ return `${selector} {
10
+ ${content}}`;
11
+ }
12
+
13
+ export class ThemeBuilder {
14
+ cssClass: string | null;
15
+ colors: ThemeColor[] = [];
16
+ commonColors: ThemeColor[] = [];
17
+ neutralColorPalette!: TonalPalette;
18
+ neutralVariantColorPalette!: TonalPalette;
19
+
20
+ private partial = false;
21
+
22
+ private constructor() {
23
+ this.cssClass = null;
24
+ }
25
+
26
+ static create(primaryColorHex: string): ThemeBuilder {
27
+ return new ThemeBuilder()
28
+ .addColorFromHex('primary', primaryColorHex);
29
+ }
30
+
31
+ static createPartial(): ThemeBuilder {
32
+ const themeBuilder = new ThemeBuilder();
33
+ themeBuilder.partial = true;
34
+
35
+ return themeBuilder;
36
+ }
37
+
38
+ addColorFromHex(name: string, hex: string): ThemeBuilder {
39
+ const palette = TonalPalette.fromInt(argbFromHex(hex));
40
+
41
+ this.addColorFromPalette(name, palette);
42
+ return this;
43
+ }
44
+
45
+ addColorFromPalette(name: string, palette: TonalPalette): ThemeBuilder {
46
+ this.colors.push({name, lightTone: 40, darkTone: 80, tonalPalette: palette});
47
+ this.colors.push({name: `on-${name}`, lightTone: 100, darkTone: 20, tonalPalette: palette});
48
+ this.colors.push({name: `${name}-container`, lightTone: 90, darkTone: 30, tonalPalette: palette});
49
+ this.colors.push({name: `on-${name}-container`, lightTone: 10, darkTone: 90, tonalPalette: palette});
50
+
51
+ this.colors.push({name: `${name}-fixed`, fixedTone: 90, tonalPalette: palette});
52
+ this.colors.push({name: `${name}-fixed-dim`, fixedTone: 800, tonalPalette: palette});
53
+ this.colors.push({name: `on-${name}-fixed`, fixedTone: 10, tonalPalette: palette});
54
+ this.colors.push({name: `on-${name}-fixed-variant`, fixedTone: 30, tonalPalette: palette});
55
+ return this;
56
+ }
57
+
58
+ addCommonColor(name: string, hex: string): ThemeBuilder {
59
+ this.commonColors.push({name, tonalPalette: TonalPalette.fromInt(argbFromHex(hex))})
60
+ return this;
61
+ }
62
+
63
+ setCssClass(cssClass: string): ThemeBuilder {
64
+ this.cssClass = cssClass;
65
+ return this;
66
+ }
67
+
68
+ private ensureCssClassStartsWithDot(): void {
69
+ if (!this.cssClass || this.cssClass.startsWith('.')) {
70
+ return;
71
+ }
72
+
73
+ this.cssClass = `.${this.cssClass}`;
74
+ }
75
+
76
+ private ensureThemeColors(): void {
77
+
78
+ const primaryColor = this.colors.find(c => c.name === 'primary')!;
79
+
80
+ const palette = CorePalette.of(primaryColor.tonalPalette.tone(40));
81
+
82
+ if (!this.colors.find(c => c.name === 'secondary')) {
83
+ this.addColorFromPalette('secondary', palette.a2);
84
+ }
85
+
86
+ if (!this.colors.find(c => c.name === 'tertiary')) {
87
+ this.addColorFromPalette('tertiary', palette.a3);
88
+ }
89
+
90
+ if (!this.neutralColorPalette) {
91
+ this.neutralColorPalette = palette.n1;
92
+ }
93
+
94
+ if (!this.neutralVariantColorPalette) {
95
+ this.neutralVariantColorPalette = palette.n2;
96
+ }
97
+ }
98
+
99
+ private getNeutralVariables(dark: boolean): string {
100
+ const builder = CssVarBuilder.create();
101
+
102
+ this.addColors(builder, neutralColors, this.neutralColorPalette, dark);
103
+
104
+ builder
105
+ .add('--u-color-background', "var(--u-color-surface-container-highest)")
106
+ .add('--u-color-inverse-background', "var(--u-color-inverse-surface-container-highest)")
107
+ .add('--u-color-on-background', "var(--u-color-on-surface)")
108
+ .add('--u-color-on-inverse-background', "var(--u-color-inverse-on-surface)");
109
+
110
+ return builder.build();
111
+ }
112
+
113
+ private getNeutralVariantVariables(dark: boolean): string {
114
+ const builder = CssVarBuilder.create();
115
+
116
+ this.addColors(builder, neutralVariantColors, this.neutralColorPalette, dark);
117
+
118
+ return builder.build()
119
+ }
120
+
121
+ getColorVariables(color: ThemeColor, dark: boolean): string {
122
+
123
+ const builder = CssVarBuilder.create();
124
+
125
+ this.addToneColor(builder, color, color.tonalPalette, dark)
126
+
127
+ return builder.build();
128
+ }
129
+
130
+ private getColorsVariables(dark: boolean): string {
131
+ let variables = '';
132
+
133
+ for (const color of this.colors) {
134
+ variables += this.getColorVariables(color, dark);
135
+ }
136
+
137
+ if (this.neutralColorPalette) {
138
+ variables += this.getNeutralVariables(dark);
139
+ }
140
+
141
+ if (this.neutralVariantColorPalette) {
142
+ variables += this.getNeutralVariantVariables(dark);
143
+ }
144
+
145
+ return variables;
146
+ }
147
+
148
+ private addColors(builder: CssVarBuilder, colors: Color[], palette: TonalPalette, dark: boolean): void {
149
+ for (const color of colors) {
150
+ this.addToneColor(builder, color, palette, dark);
151
+ }
152
+ }
153
+
154
+ private addToneColor(builder: CssVarBuilder, color: Color, palette: TonalPalette, dark: boolean): void {
155
+ if (color.fixedTone !== undefined) {
156
+ builder.addFromArgb(color.name, palette.tone(color.fixedTone));
157
+ return;
158
+ }
159
+
160
+ const tone = dark
161
+ ? color.darkTone!
162
+ : color.lightTone!;
163
+
164
+ const inverseTone = dark
165
+ ? color.lightTone!
166
+ : color.darkTone!;
167
+
168
+ builder
169
+ .addFromArgb(color.name, palette.tone(tone))
170
+ .addFromArgb(`inverse-${color.name}`, palette.tone(inverseTone));
171
+
172
+ if (dark) {
173
+ return;
174
+ }
175
+
176
+ builder
177
+ .addFromArgb(`light-${color.name}`, palette.tone(color.lightTone!))
178
+ .addFromArgb(`dark-${color.name}`, palette.tone(color.darkTone!));
179
+ }
180
+
181
+ build(): string {
182
+
183
+ this.ensureCssClassStartsWithDot();
184
+
185
+ const lightCssClass = this.cssClass ?? ':root';
186
+ const darkCssClass = this.cssClass
187
+ ? `${this.cssClass}.u-dark-mode,
188
+ ${this.cssClass} .u-dark-mode`
189
+ : '.u-dark-mode';
190
+
191
+ if (!this.partial) {
192
+ this.ensureThemeColors();
193
+ }
194
+
195
+ const variables = `${getCss(lightCssClass, `${this.getColorsVariables(false)}`)}
196
+
197
+ ${getCss(darkCssClass, this.getColorsVariables(true))}
198
+ `;
199
+ return variables;
200
+ }
201
+ }
@@ -1,6 +1,7 @@
1
1
  import { TonalPalette } from '@material/material-color-utilities';
2
+
2
3
  import { Color } from './color.js';
4
+
3
5
  export interface ThemeColor extends Color {
4
- tonalPalette: TonalPalette;
6
+ tonalPalette: TonalPalette;
5
7
  }
6
- //# sourceMappingURL=theme-color.d.ts.map
package/tsconfig.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es2021",
4
+ "module": "es2020",
5
+ "lib": ["es2021", "DOM", "DOM.Iterable"],
6
+ "declaration": true,
7
+ "declarationMap": true,
8
+ "sourceMap": true,
9
+ "inlineSources": true,
10
+ "outDir": "./dist",
11
+ "rootDir": "./src",
12
+ "strict": true,
13
+ "noUnusedLocals": true,
14
+ "noUnusedParameters": true,
15
+ "noImplicitReturns": true,
16
+ "noFallthroughCasesInSwitch": true,
17
+ "noImplicitAny": true,
18
+ "noImplicitThis": true,
19
+ "moduleResolution": "node",
20
+ "allowSyntheticDefaultImports": true,
21
+ "experimentalDecorators": true,
22
+ "forceConsistentCasingInFileNames": true,
23
+ "noImplicitOverride": true,
24
+ "plugins": [
25
+ {
26
+ "name": "ts-lit-plugin",
27
+ "strict": true
28
+ }
29
+ ],
30
+ "types": ["mocha"]
31
+ },
32
+ "include": ["src/**/*.ts"],
33
+ "exclude": [
34
+ "./node_modules/lit/decorators.d.ts"
35
+ ]
36
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2021 Google LLC
4
+ * SPDX-License-Identifier: BSD-3-Clause
5
+ */
6
+
7
+ import {legacyPlugin} from '@web/dev-server-legacy';
8
+
9
+ const mode = process.env.MODE || 'dev';
10
+ if (!['dev', 'prod'].includes(mode)) {
11
+ throw new Error(`MODE must be "dev" or "prod", was "${mode}"`);
12
+ }
13
+
14
+ export default {
15
+ nodeResolve: {exportConditions: mode === 'dev' ? ['development'] : []},
16
+ preserveSymlinks: true,
17
+ plugins: [
18
+ legacyPlugin({
19
+ polyfills: {
20
+ // Manually imported in index.html file
21
+ webcomponents: false,
22
+ },
23
+ }),
24
+ ],
25
+ };
@@ -0,0 +1,120 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2021 Google LLC
4
+ * SPDX-License-Identifier: BSD-3-Clause
5
+ */
6
+
7
+ import {legacyPlugin} from '@web/dev-server-legacy';
8
+ import {playwrightLauncher} from '@web/test-runner-playwright';
9
+
10
+ const mode = process.env.MODE || 'dev';
11
+ if (!['dev', 'prod'].includes(mode)) {
12
+ throw new Error(`MODE must be "dev" or "prod", was "${mode}"`);
13
+ }
14
+
15
+ // Uncomment for testing on Sauce Labs
16
+ // Must run `npm i --save-dev @web/test-runner-saucelabs` and set
17
+ // SAUCE_USERNAME and SAUCE_USERNAME environment variables
18
+ // ===========
19
+ // import {createSauceLabsLauncher} from '@web/test-runner-saucelabs';
20
+ // const sauceLabsLauncher = createSauceLabsLauncher(
21
+ // {
22
+ // user: process.env.SAUCE_USERNAME,
23
+ // key: process.env.SAUCE_USERNAME,
24
+ // },
25
+ // {
26
+ // 'sauce:options': {
27
+ // name: 'unit tests',
28
+ // build: `${process.env.GITHUB_REF ?? 'local'} build ${
29
+ // process.env.GITHUB_RUN_NUMBER ?? ''
30
+ // }`,
31
+ // },
32
+ // }
33
+ // );
34
+
35
+ // Uncomment for testing on BrowserStack
36
+ // Must run `npm i --save-dev @web/test-runner-browserstack` and set
37
+ // BROWSER_STACK_USERNAME and BROWSER_STACK_ACCESS_KEY environment variables
38
+ // ===========
39
+ // import {browserstackLauncher as createBrowserstackLauncher} from '@web/test-runner-browserstack';
40
+ // const browserstackLauncher = (config) => createBrowserstackLauncher({
41
+ // capabilities: {
42
+ // 'browserstack.user': process.env.BROWSER_STACK_USERNAME,
43
+ // 'browserstack.key': process.env.BROWSER_STACK_ACCESS_KEY,
44
+ // project: 'my-element',
45
+ // name: 'unit tests',
46
+ // build: `${process.env.GITHUB_REF ?? 'local'} build ${
47
+ // process.env.GITHUB_RUN_NUMBER ?? ''
48
+ // }`,
49
+ // ...config,
50
+ // }
51
+ // });
52
+
53
+ const browsers = {
54
+ // Local browser testing via playwright
55
+ // ===========
56
+ chromium: playwrightLauncher({product: 'chromium'}),
57
+ firefox: playwrightLauncher({product: 'firefox'}),
58
+ webkit: playwrightLauncher({product: 'webkit'}),
59
+
60
+ // Uncomment example launchers for running on Sauce Labs
61
+ // ===========
62
+ // chromium: sauceLabsLauncher({browserName: 'chrome', browserVersion: 'latest', platformName: 'Windows 10'}),
63
+ // firefox: sauceLabsLauncher({browserName: 'firefox', browserVersion: 'latest', platformName: 'Windows 10'}),
64
+ // safari: sauceLabsLauncher({browserName: 'safari', browserVersion: 'latest', platformName: 'macOS 10.15'}),
65
+
66
+ // Uncomment example launchers for running on Sauce Labs
67
+ // ===========
68
+ // chromium: browserstackLauncher({browserName: 'Chrome', os: 'Windows', os_version: '10'}),
69
+ // firefox: browserstackLauncher({browserName: 'Firefox', os: 'Windows', os_version: '10'}),
70
+ // safari: browserstackLauncher({browserName: 'Safari', browser_version: '14.0', os: 'OS X', os_version: 'Big Sur'}),
71
+ };
72
+
73
+ // Prepend BROWSERS=x,y to `npm run test` to run a subset of browsers
74
+ // e.g. `BROWSERS=chromium,firefox npm run test`
75
+ const noBrowser = (b) => {
76
+ throw new Error(`No browser configured named '${b}'; using defaults`);
77
+ };
78
+ let commandLineBrowsers;
79
+ try {
80
+ commandLineBrowsers = process.env.BROWSERS?.split(',').map(
81
+ (b) => browsers[b] ?? noBrowser(b)
82
+ );
83
+ } catch (e) {
84
+ console.warn(e);
85
+ }
86
+
87
+ // https://modern-web.dev/docs/test-runner/cli-and-configuration/
88
+ export default {
89
+ rootDir: '.',
90
+ files: ['./test/**/*_test.js'],
91
+ nodeResolve: {exportConditions: mode === 'dev' ? ['development'] : []},
92
+ preserveSymlinks: true,
93
+ browsers: commandLineBrowsers ?? Object.values(browsers),
94
+ testFramework: {
95
+ // https://mochajs.org/api/mocha
96
+ config: {
97
+ ui: 'tdd',
98
+ timeout: '60000',
99
+ },
100
+ },
101
+ plugins: [
102
+ // Detect browsers without modules (e.g. IE11) and transform to SystemJS
103
+ // (https://modern-web.dev/docs/dev-server/plugins/legacy/).
104
+ legacyPlugin({
105
+ polyfills: {
106
+ webcomponents: true,
107
+ // Inject lit's polyfill-support module into test files, which is required
108
+ // for interfacing with the webcomponents polyfills
109
+ custom: [
110
+ {
111
+ name: 'lit-polyfill-support',
112
+ path: 'node_modules/lit/polyfill-support.js',
113
+ test: "!('attachShadow' in Element.prototype) || !('getRootNode' in Element.prototype) || window.ShadyDOM && window.ShadyDOM.force",
114
+ module: false,
115
+ },
116
+ ],
117
+ },
118
+ }),
119
+ ],
120
+ };
@@ -1,43 +0,0 @@
1
- import { HTMLTemplateResult, LitElement, nothing } from 'lit';
2
- import '../elevation/elevation.js';
3
- import '../ripple/ripple.js';
4
- export declare abstract class UmButtonBase extends LitElement {
5
- #private;
6
- static readonly formAssociated = true;
7
- /**
8
- * Whether the button is disabled or not.
9
- */
10
- disabled: boolean;
11
- /**
12
- * The URL that the link button points to.
13
- */
14
- href: string;
15
- /**
16
- * Where to display the linked `href` URL for a link button. Common options
17
- * include `_blank` to open in a new tab.
18
- */
19
- target: string;
20
- type: string;
21
- value: string;
22
- name: string | undefined;
23
- private readonly buttonElement;
24
- private readonly ripple;
25
- /**
26
- * The `<form>` element to associate the button with (its form owner). The value of this attribute must be the id of a `<form>` in the same document. (If this attribute is not set, the button is associated with its ancestor `<form>` element, if any.)
27
- * @link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#form
28
- */
29
- get form(): HTMLFormElement | null;
30
- constructor();
31
- protected render(): import("lit-html").TemplateResult<1>;
32
- private renderButton;
33
- private renderLink;
34
- protected abstract renderContent(): HTMLTemplateResult;
35
- connectedCallback(): void;
36
- disconnectedCallback(): void;
37
- focus(): void;
38
- blur(): void;
39
- protected getAriaLabel(): string | null | typeof nothing;
40
- private innerHandleClick;
41
- protected handleClick(_: UIEvent): void;
42
- }
43
- //# sourceMappingURL=button-base.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"button-base.d.ts","sourceRoot":"","sources":["../../src/button/button-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,kBAAkB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAGpE,OAAO,2BAA2B,CAAC;AACnC,OAAO,qBAAqB,CAAC;AAG7B,8BAAsB,YAAa,SAAQ,UAAU;;IAEnD,MAAM,CAAC,QAAQ,CAAC,cAAc,QAAQ;IAEtC;;OAEG;IACuC,QAAQ,UAAS;IAE3D;;OAEG;IACS,IAAI,SAAM;IAEtB;;;OAGG;IACS,MAAM,EAAE,MAAM,CAAM;IAEpB,IAAI,EAAE,MAAM,CAAY;IAET,KAAK,EAAE,MAAM,CAAM;IAClC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEtD;;;OAGG;IACH,IACI,IAAI,IAAI,eAAe,GAAG,IAAI,CAEjC;;cASkB,MAAM;IAMzB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,UAAU;IAelB,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,kBAAkB;IAE7C,iBAAiB;IAMjB,oBAAoB;IAMpB,KAAK;IAIL,IAAI;IAIb,SAAS,CAAC,YAAY,IAAI,MAAM,GAAG,IAAI,GAAG,OAAO,OAAO;IAIxD,OAAO,CAAC,gBAAgB;IA8BxB,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;CAGxC"}
@@ -1,152 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
13
- if (kind === "m") throw new TypeError("Private method is not writable");
14
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
15
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
16
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
17
- };
18
- var _UmButtonBase_elementInternals;
19
- import { html, LitElement, nothing } from 'lit';
20
- import { property, query } from 'lit/decorators.js';
21
- import '../elevation/elevation.js';
22
- import '../ripple/ripple.js';
23
- export class UmButtonBase extends LitElement {
24
- /**
25
- * The `<form>` element to associate the button with (its form owner). The value of this attribute must be the id of a `<form>` in the same document. (If this attribute is not set, the button is associated with its ancestor `<form>` element, if any.)
26
- * @link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#form
27
- */
28
- get form() {
29
- return __classPrivateFieldGet(this, _UmButtonBase_elementInternals, "f").form;
30
- }
31
- constructor() {
32
- super();
33
- /**
34
- * Whether the button is disabled or not.
35
- */
36
- this.disabled = false;
37
- /**
38
- * The URL that the link button points to.
39
- */
40
- this.href = '';
41
- /**
42
- * Where to display the linked `href` URL for a link button. Common options
43
- * include `_blank` to open in a new tab.
44
- */
45
- this.target = '';
46
- this.type = 'submit';
47
- this.value = '';
48
- _UmButtonBase_elementInternals.set(this, void 0);
49
- __classPrivateFieldSet(this, _UmButtonBase_elementInternals, this.attachInternals(), "f");
50
- }
51
- render() {
52
- return this.href
53
- ? this.renderLink()
54
- : this.renderButton();
55
- }
56
- renderButton() {
57
- return html `
58
- <button
59
- id="button"
60
- class="button"
61
- ?disabled=${this.disabled}
62
- aria-label="${this.getAriaLabel()}"
63
- type="button">
64
- <u-ripple ?disabled=${this.disabled}></u-ripple>
65
- <u-elevation></u-elevation>
66
- </button>
67
- ${this.renderContent()}`;
68
- }
69
- renderLink() {
70
- return html `<a
71
- id="link"
72
- class="button"
73
- href=${this.disabled ? nothing : this.href}
74
- aria-disabled=${this.disabled || nothing}
75
- aria-label="${this.getAriaLabel()}"
76
- target=${this.target || nothing}>
77
- <u-elevation></u-elevation>
78
- <u-ripple ?disabled=${this.disabled}></u-ripple>
79
- </a>
80
- ${this.renderContent()}`;
81
- }
82
- connectedCallback() {
83
- super.connectedCallback();
84
- this.addEventListener('click', this.innerHandleClick);
85
- }
86
- disconnectedCallback() {
87
- super.disconnectedCallback();
88
- this.removeEventListener('click', this.innerHandleClick);
89
- }
90
- focus() {
91
- this.buttonElement?.focus();
92
- }
93
- blur() {
94
- this.buttonElement?.blur();
95
- }
96
- getAriaLabel() {
97
- return this.ariaLabel || nothing;
98
- }
99
- innerHandleClick(event) {
100
- if (this.disabled) {
101
- return;
102
- }
103
- if (event.detail === 0) {
104
- this.ripple.createRipple();
105
- }
106
- this.handleClick(event);
107
- if (this.type === 'button' || !!this.href) {
108
- return;
109
- }
110
- if (!this.form) {
111
- return;
112
- }
113
- __classPrivateFieldGet(this, _UmButtonBase_elementInternals, "f").setFormValue(this.value);
114
- if (this.type === 'submit') {
115
- this.form.requestSubmit();
116
- return;
117
- }
118
- this.form.reset();
119
- }
120
- handleClick(_) {
121
- }
122
- }
123
- _UmButtonBase_elementInternals = new WeakMap();
124
- UmButtonBase.formAssociated = true;
125
- __decorate([
126
- property({ type: Boolean, reflect: true })
127
- ], UmButtonBase.prototype, "disabled", void 0);
128
- __decorate([
129
- property()
130
- ], UmButtonBase.prototype, "href", void 0);
131
- __decorate([
132
- property()
133
- ], UmButtonBase.prototype, "target", void 0);
134
- __decorate([
135
- property()
136
- ], UmButtonBase.prototype, "type", void 0);
137
- __decorate([
138
- property({ reflect: true })
139
- ], UmButtonBase.prototype, "value", void 0);
140
- __decorate([
141
- property()
142
- ], UmButtonBase.prototype, "name", void 0);
143
- __decorate([
144
- query('.button')
145
- ], UmButtonBase.prototype, "buttonElement", void 0);
146
- __decorate([
147
- query('u-ripple')
148
- ], UmButtonBase.prototype, "ripple", void 0);
149
- __decorate([
150
- property()
151
- ], UmButtonBase.prototype, "form", null);
152
- //# sourceMappingURL=button-base.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"button-base.js","sourceRoot":"","sources":["../../src/button/button-base.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, HTMLTemplateResult, LitElement, nothing } from 'lit';\nimport { property, query } from 'lit/decorators.js';\n\nimport '../elevation/elevation.js';\nimport '../ripple/ripple.js';\nimport { UmRipple } from '../ripple/ripple';\n\nexport abstract class UmButtonBase extends LitElement {\n\n static readonly formAssociated = true;\n\n /**\n * Whether the button is disabled or not.\n */\n @property({type: Boolean, reflect: true}) disabled = false;\n\n /**\n * The URL that the link button points to.\n */\n @property() href = '';\n\n /**\n * Where to display the linked `href` URL for a link button. Common options\n * include `_blank` to open in a new tab.\n */\n @property() target: string = '';\n\n @property() type: string = 'submit';\n\n @property({reflect: true}) value: string = '';\n @property() name: string | undefined;\n\n @query('.button') private readonly buttonElement!: HTMLElement;\n @query('u-ripple') private readonly ripple!: UmRipple;\n\n /**\n * The `<form>` element to associate the button with (its form owner). The value of this attribute must be the id of a `<form>` in the same document. (If this attribute is not set, the button is associated with its ancestor `<form>` element, if any.)\n * @link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#form\n */\n @property()\n get form(): HTMLFormElement | null {\n return this.#elementInternals.form;\n }\n\n readonly #elementInternals: ElementInternals;\n\n constructor() {\n super();\n this.#elementInternals = this.attachInternals();\n }\n\n protected override render() {\n return this.href\n ? this.renderLink()\n : this.renderButton();\n }\n\n private renderButton() {\n\n return html`\n <button\n id=\"button\"\n class=\"button\"\n ?disabled=${this.disabled}\n aria-label=\"${this.getAriaLabel()}\"\n type=\"button\">\n <u-ripple ?disabled=${this.disabled}></u-ripple>\n <u-elevation></u-elevation>\n </button>\n ${this.renderContent()}`;\n }\n\n private renderLink() {\n\n return html`<a\n id=\"link\"\n class=\"button\"\n href=${this.disabled ? nothing : this.href}\n aria-disabled=${this.disabled || nothing}\n aria-label=\"${this.getAriaLabel()}\"\n target=${this.target || nothing}>\n <u-elevation></u-elevation>\n <u-ripple ?disabled=${this.disabled}></u-ripple>\n </a>\n ${this.renderContent()}`;\n }\n\n protected abstract renderContent(): HTMLTemplateResult;\n\n override connectedCallback() {\n super.connectedCallback();\n\n this.addEventListener('click', this.innerHandleClick);\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n\n this.removeEventListener('click', this.innerHandleClick);\n }\n\n override focus() {\n this.buttonElement?.focus();\n }\n\n override blur() {\n this.buttonElement?.blur();\n }\n\n protected getAriaLabel(): string | null | typeof nothing {\n return this.ariaLabel || nothing;\n }\n\n private innerHandleClick(event: UIEvent): void {\n\n if (this.disabled) {\n return;\n }\n\n if (event.detail === 0) {\n this.ripple.createRipple();\n }\n\n this.handleClick(event);\n\n if (this.type === 'button' || !!this.href) {\n return;\n }\n\n if (!this.form) {\n return;\n }\n\n this.#elementInternals.setFormValue(this.value);\n\n if (this.type === 'submit') {\n this.form.requestSubmit();\n return;\n }\n\n this.form.reset();\n }\n\n protected handleClick(_: UIEvent): void {\n\n }\n}\n"]}
@@ -1,2 +0,0 @@
1
- export declare const styles: import("lit").CSSResult;
2
- //# sourceMappingURL=button-base.styles.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"button-base.styles.d.ts","sourceRoot":"","sources":["../../src/button/button-base.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,yBAwElB,CAAC"}