@muibook/components 1.0.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 (248) hide show
  1. package/LICENSE +21 -0
  2. package/dist/create-mui-app/assets/index-DfcB3F-s.js +597 -0
  3. package/dist/create-mui-app/create-mui-app.css +1 -0
  4. package/dist/create-mui-app/index.html +21 -0
  5. package/dist/esm/_redirects +1 -0
  6. package/dist/esm/favicon.ico +0 -0
  7. package/dist/esm/index/index.js +71 -0
  8. package/dist/esm/logo192.png +0 -0
  9. package/dist/esm/mui-accordion/block/index.js +168 -0
  10. package/dist/esm/mui-accordion/group/index.js +26 -0
  11. package/dist/esm/mui-accordion/index.js +3 -0
  12. package/dist/esm/mui-accordion/inline/index.js +96 -0
  13. package/dist/esm/mui-addon/index.js +46 -0
  14. package/dist/esm/mui-alert/index.js +109 -0
  15. package/dist/esm/mui-badge/index.js +43 -0
  16. package/dist/esm/mui-body/index.js +82 -0
  17. package/dist/esm/mui-button/index.js +296 -0
  18. package/dist/esm/mui-button-group/index.js +23 -0
  19. package/dist/esm/mui-card/body/index.js +48 -0
  20. package/dist/esm/mui-card/card/index.js +43 -0
  21. package/dist/esm/mui-card/footer/index.js +62 -0
  22. package/dist/esm/mui-card/header/index.js +29 -0
  23. package/dist/esm/mui-card/index.js +4 -0
  24. package/dist/esm/mui-carousel/controller/index.js +117 -0
  25. package/dist/esm/mui-carousel/index.js +2 -0
  26. package/dist/esm/mui-carousel/panel/index.js +29 -0
  27. package/dist/esm/mui-code/index.js +56 -0
  28. package/dist/esm/mui-container/index.js +57 -0
  29. package/dist/esm/mui-field/index.js +44 -0
  30. package/dist/esm/mui-file-upload/index.js +100 -0
  31. package/dist/esm/mui-grid/index.js +42 -0
  32. package/dist/esm/mui-heading/index.js +36 -0
  33. package/dist/esm/mui-icons/accessibility/index.js +55 -0
  34. package/dist/esm/mui-icons/add/index.js +55 -0
  35. package/dist/esm/mui-icons/attention/index.js +55 -0
  36. package/dist/esm/mui-icons/check/index.js +55 -0
  37. package/dist/esm/mui-icons/close/index.js +55 -0
  38. package/dist/esm/mui-icons/down-chevron/index.js +55 -0
  39. package/dist/esm/mui-icons/globe/index.js +55 -0
  40. package/dist/esm/mui-icons/grid/index.js +55 -0
  41. package/dist/esm/mui-icons/index.js +23 -0
  42. package/dist/esm/mui-icons/info/index.js +55 -0
  43. package/dist/esm/mui-icons/left-arrow/index.js +55 -0
  44. package/dist/esm/mui-icons/left-chevron/index.js +55 -0
  45. package/dist/esm/mui-icons/menu/index.js +55 -0
  46. package/dist/esm/mui-icons/message/index.js +55 -0
  47. package/dist/esm/mui-icons/moon/index.js +55 -0
  48. package/dist/esm/mui-icons/notification/index.js +55 -0
  49. package/dist/esm/mui-icons/right-chevron/index.js +55 -0
  50. package/dist/esm/mui-icons/stop/index.js +55 -0
  51. package/dist/esm/mui-icons/subtract/index.js +55 -0
  52. package/dist/esm/mui-icons/sun/index.js +55 -0
  53. package/dist/esm/mui-icons/toggle/index.js +72 -0
  54. package/dist/esm/mui-icons/up-arrow/index.js +55 -0
  55. package/dist/esm/mui-icons/up-chevron/index.js +55 -0
  56. package/dist/esm/mui-icons/warning/index.js +55 -0
  57. package/dist/esm/mui-image/index.js +49 -0
  58. package/dist/esm/mui-input/index.js +207 -0
  59. package/dist/esm/mui-link/index.js +263 -0
  60. package/dist/esm/mui-list/index.js +2 -0
  61. package/dist/esm/mui-list/item/index.js +65 -0
  62. package/dist/esm/mui-list/list/index.js +31 -0
  63. package/dist/esm/mui-message/index.js +90 -0
  64. package/dist/esm/mui-quote/index.js +27 -0
  65. package/dist/esm/mui-responsive/index.js +30 -0
  66. package/dist/esm/mui-rule/index.js +32 -0
  67. package/dist/esm/mui-select/index.js +204 -0
  68. package/dist/esm/mui-slat/index.js +21 -0
  69. package/dist/esm/mui-smart-card/index.js +335 -0
  70. package/dist/esm/mui-stack/hstack/index.js +52 -0
  71. package/dist/esm/mui-stack/index.js +2 -0
  72. package/dist/esm/mui-stack/vstack/index.js +52 -0
  73. package/dist/esm/mui-switch/index.js +143 -0
  74. package/dist/esm/mui-table/cell/index.js +64 -0
  75. package/dist/esm/mui-table/index.js +4 -0
  76. package/dist/esm/mui-table/row/index.js +26 -0
  77. package/dist/esm/mui-table/row-group/index.js +24 -0
  78. package/dist/esm/mui-table/table/index.js +21 -0
  79. package/dist/esm/mui-tabs/controller/index.js +23 -0
  80. package/dist/esm/mui-tabs/index.js +4 -0
  81. package/dist/esm/mui-tabs/item/index.js +61 -0
  82. package/dist/esm/mui-tabs/panel/index.js +32 -0
  83. package/dist/esm/mui-tabs/tab-bar/index.js +136 -0
  84. package/dist/esm/mui-utils/part-map/index.js +49 -0
  85. package/dist/muibook/_redirects +1 -0
  86. package/dist/muibook/assets/base-B4dO4n0A.js +198 -0
  87. package/dist/muibook/assets/components-YZ3tjmIt.js +122 -0
  88. package/dist/muibook/assets/contextual-D648xs_u.js +59 -0
  89. package/dist/muibook/assets/image-1080-Bg-8LoSs.js +1 -0
  90. package/dist/muibook/assets/index-0bBJZTXh.js +135 -0
  91. package/dist/muibook/assets/index-B4Lbi-ZX.js +82 -0
  92. package/dist/muibook/assets/index-BJJtzLti.js +144 -0
  93. package/dist/muibook/assets/index-BN6UEWFf.js +439 -0
  94. package/dist/muibook/assets/index-Bc68V_xw.js +140 -0
  95. package/dist/muibook/assets/index-BnpaoEYs.js +386 -0
  96. package/dist/muibook/assets/index-BrZBJGo2.js +4276 -0
  97. package/dist/muibook/assets/index-Bx-SU7T2.js +98 -0
  98. package/dist/muibook/assets/index-C10sNeH-.js +64 -0
  99. package/dist/muibook/assets/index-C4ZnvuXX.js +333 -0
  100. package/dist/muibook/assets/index-C7Tqc5BR.js +325 -0
  101. package/dist/muibook/assets/index-CAkZAmud.js +514 -0
  102. package/dist/muibook/assets/index-CCegrD2J.js +130 -0
  103. package/dist/muibook/assets/index-CHZJlumm.js +95 -0
  104. package/dist/muibook/assets/index-CPZ8jubJ.js +308 -0
  105. package/dist/muibook/assets/index-CSLqxg9p.js +73 -0
  106. package/dist/muibook/assets/index-CT3BsW8R.js +177 -0
  107. package/dist/muibook/assets/index-CYYG9dAN.js +270 -0
  108. package/dist/muibook/assets/index-CdghbWW3.js +42 -0
  109. package/dist/muibook/assets/index-CfD1WQYQ.js +106 -0
  110. package/dist/muibook/assets/index-Ch40uilB.js +52 -0
  111. package/dist/muibook/assets/index-CwAai54c.js +263 -0
  112. package/dist/muibook/assets/index-CyWt9f96.js +336 -0
  113. package/dist/muibook/assets/index-D8hXO6aa.js +131 -0
  114. package/dist/muibook/assets/index-DBkw7VLa.js +431 -0
  115. package/dist/muibook/assets/index-DI0vNTNv.js +56 -0
  116. package/dist/muibook/assets/index-DNImaJPY.js +96 -0
  117. package/dist/muibook/assets/index-DP6CCnt0.js +257 -0
  118. package/dist/muibook/assets/index-DR5X8zCc.js +67 -0
  119. package/dist/muibook/assets/index-DZQ8pS6y.js +133 -0
  120. package/dist/muibook/assets/index-DlZ1b9ZK.js +233 -0
  121. package/dist/muibook/assets/index-DwnvCJk0.js +177 -0
  122. package/dist/muibook/assets/index-_4AZFkzS.js +328 -0
  123. package/dist/muibook/assets/index-dkW0Vbeg.js +429 -0
  124. package/dist/muibook/assets/index-ehE10GAP.js +40 -0
  125. package/dist/muibook/assets/index-icuV1guL.js +69 -0
  126. package/dist/muibook/assets/index-qOE8f0sK.js +72 -0
  127. package/dist/muibook/assets/layout-BT0xIYa9.js +184 -0
  128. package/dist/muibook/assets/mui-D6S1tQ24.js +1 -0
  129. package/dist/muibook/assets/mui-logo-mobile-DuEMz_jq.js +31 -0
  130. package/dist/muibook/assets/semantic-cbNjeY5p.js +111 -0
  131. package/dist/muibook/assets/spacing-DY3cAXq0.js +82 -0
  132. package/dist/muibook/assets/surface-CMaW9FgJ.js +148 -0
  133. package/dist/muibook/assets/text-TVCTYde0.js +130 -0
  134. package/dist/muibook/assets/visual-B_21dq90.js +96 -0
  135. package/dist/muibook/buttercup.png +0 -0
  136. package/dist/muibook/create-mui-app.jpg +0 -0
  137. package/dist/muibook/crystal.png +0 -0
  138. package/dist/muibook/diamond.png +0 -0
  139. package/dist/muibook/emerald.svg +13 -0
  140. package/dist/muibook/favicon.ico +0 -0
  141. package/dist/muibook/hero-guides.png +0 -0
  142. package/dist/muibook/hero-outcomes.png +0 -0
  143. package/dist/muibook/image-1080.png +0 -0
  144. package/dist/muibook/image-220.png +0 -0
  145. package/dist/muibook/image-395.png +0 -0
  146. package/dist/muibook/index.html +38 -0
  147. package/dist/muibook/logo192.png +0 -0
  148. package/dist/muibook/mui-tokens.jpg +0 -0
  149. package/dist/muibook/muibook.css +1 -0
  150. package/dist/muibook/premier.png +0 -0
  151. package/dist/muibook/ruby.svg +13 -0
  152. package/dist/muibook/sapphire.png +0 -0
  153. package/dist/muibook/sapphire.svg +13 -0
  154. package/dist/muibook/snowy-mint.png +0 -0
  155. package/dist/types/components/mui-accordion/block/index.d.ts +2 -0
  156. package/dist/types/components/mui-accordion/group/index.d.ts +1 -0
  157. package/dist/types/components/mui-accordion/index.d.ts +3 -0
  158. package/dist/types/components/mui-accordion/inline/index.d.ts +2 -0
  159. package/dist/types/components/mui-accordion/mui-accordion-block/index.d.ts +2 -0
  160. package/dist/types/components/mui-accordion/mui-accordion-group/index.d.ts +1 -0
  161. package/dist/types/components/mui-accordion/mui-accordion-inline/index.d.ts +2 -0
  162. package/dist/types/components/mui-addon/index.d.ts +1 -0
  163. package/dist/types/components/mui-alert/index.d.ts +1 -0
  164. package/dist/types/components/mui-badge/index.d.ts +1 -0
  165. package/dist/types/components/mui-body/index.d.ts +1 -0
  166. package/dist/types/components/mui-button/index.d.ts +1 -0
  167. package/dist/types/components/mui-button-group/index.d.ts +1 -0
  168. package/dist/types/components/mui-card/body/index.d.ts +1 -0
  169. package/dist/types/components/mui-card/card/index.d.ts +1 -0
  170. package/dist/types/components/mui-card/footer/index.d.ts +1 -0
  171. package/dist/types/components/mui-card/header/index.d.ts +1 -0
  172. package/dist/types/components/mui-card/index.d.ts +4 -0
  173. package/dist/types/components/mui-carousel/controller/index.d.ts +1 -0
  174. package/dist/types/components/mui-carousel/index.d.ts +2 -0
  175. package/dist/types/components/mui-carousel/panel/index.d.ts +1 -0
  176. package/dist/types/components/mui-code/index.d.ts +1 -0
  177. package/dist/types/components/mui-container/index.d.ts +1 -0
  178. package/dist/types/components/mui-field/index.d.ts +1 -0
  179. package/dist/types/components/mui-file-upload/index.d.ts +1 -0
  180. package/dist/types/components/mui-grid/index.d.ts +1 -0
  181. package/dist/types/components/mui-heading/index.d.ts +1 -0
  182. package/dist/types/components/mui-icons/accessibility.d.ts +1 -0
  183. package/dist/types/components/mui-icons/add.d.ts +1 -0
  184. package/dist/types/components/mui-icons/attention.d.ts +1 -0
  185. package/dist/types/components/mui-icons/check.d.ts +1 -0
  186. package/dist/types/components/mui-icons/chevron.d.ts +1 -0
  187. package/dist/types/components/mui-icons/close.d.ts +1 -0
  188. package/dist/types/components/mui-icons/down-chevron.d.ts +1 -0
  189. package/dist/types/components/mui-icons/globe.d.ts +1 -0
  190. package/dist/types/components/mui-icons/grid.d.ts +1 -0
  191. package/dist/types/components/mui-icons/index.d.ts +23 -0
  192. package/dist/types/components/mui-icons/info.d.ts +1 -0
  193. package/dist/types/components/mui-icons/left-arrow.d.ts +1 -0
  194. package/dist/types/components/mui-icons/left-chevron.d.ts +1 -0
  195. package/dist/types/components/mui-icons/menu.d.ts +1 -0
  196. package/dist/types/components/mui-icons/message.d.ts +1 -0
  197. package/dist/types/components/mui-icons/moon.d.ts +1 -0
  198. package/dist/types/components/mui-icons/mui-icon-add.d.ts +1 -0
  199. package/dist/types/components/mui-icons/mui-icon-down-chevron.d.ts +1 -0
  200. package/dist/types/components/mui-icons/mui-icon-moon.d.ts +1 -0
  201. package/dist/types/components/mui-icons/mui-icon-right-chevron.d.ts +1 -0
  202. package/dist/types/components/mui-icons/mui-icon-sun.d.ts +1 -0
  203. package/dist/types/components/mui-icons/notification.d.ts +1 -0
  204. package/dist/types/components/mui-icons/right-chevron.d.ts +1 -0
  205. package/dist/types/components/mui-icons/stop.d.ts +1 -0
  206. package/dist/types/components/mui-icons/subtract.d.ts +1 -0
  207. package/dist/types/components/mui-icons/sun.d.ts +1 -0
  208. package/dist/types/components/mui-icons/toggle.d.ts +1 -0
  209. package/dist/types/components/mui-icons/up-arrow.d.ts +1 -0
  210. package/dist/types/components/mui-icons/up-chevron.d.ts +1 -0
  211. package/dist/types/components/mui-icons/warning.d.ts +1 -0
  212. package/dist/types/components/mui-image/index.d.ts +1 -0
  213. package/dist/types/components/mui-input/index.d.ts +1 -0
  214. package/dist/types/components/mui-link/index.d.ts +1 -0
  215. package/dist/types/components/mui-list/index.d.ts +2 -0
  216. package/dist/types/components/mui-list/item/index.d.ts +1 -0
  217. package/dist/types/components/mui-list/list/index.d.ts +1 -0
  218. package/dist/types/components/mui-message/index.d.ts +1 -0
  219. package/dist/types/components/mui-quote/index.d.ts +1 -0
  220. package/dist/types/components/mui-responsive/index.d.ts +1 -0
  221. package/dist/types/components/mui-rule/index.d.ts +1 -0
  222. package/dist/types/components/mui-select/index.d.ts +1 -0
  223. package/dist/types/components/mui-slat/index.d.ts +1 -0
  224. package/dist/types/components/mui-smart-card/index.d.ts +1 -0
  225. package/dist/types/components/mui-stack/hstack/index.d.ts +1 -0
  226. package/dist/types/components/mui-stack/index.d.ts +2 -0
  227. package/dist/types/components/mui-stack/mui-hstack/index.d.ts +1 -0
  228. package/dist/types/components/mui-stack/mui-vstack/index.d.ts +1 -0
  229. package/dist/types/components/mui-stack/vstack/index.d.ts +1 -0
  230. package/dist/types/components/mui-switch/index.d.ts +1 -0
  231. package/dist/types/components/mui-table/cell/index.d.ts +1 -0
  232. package/dist/types/components/mui-table/index.d.ts +4 -0
  233. package/dist/types/components/mui-table/row/index.d.ts +1 -0
  234. package/dist/types/components/mui-table/row/row.d.ts +1 -0
  235. package/dist/types/components/mui-table/row-group/index.d.ts +1 -0
  236. package/dist/types/components/mui-table/table/index.d.ts +1 -0
  237. package/dist/types/components/mui-tabs/controller/index.d.ts +1 -0
  238. package/dist/types/components/mui-tabs/index.d.ts +4 -0
  239. package/dist/types/components/mui-tabs/item/index.d.ts +1 -0
  240. package/dist/types/components/mui-tabs/panel/index.d.ts +1 -0
  241. package/dist/types/components/mui-tabs/tab-bar/index.d.ts +1 -0
  242. package/dist/types/create-app/index.d.ts +15 -0
  243. package/dist/types/create-mui-app/index.d.ts +15 -0
  244. package/dist/types/index.d.ts +68 -0
  245. package/dist/types/muibook/index.d.ts +93 -0
  246. package/dist/types/utils/part-map/index.d.ts +3 -0
  247. package/package.json +345 -0
  248. package/readme.md +84 -0
@@ -0,0 +1,30 @@
1
+ class o extends HTMLElement {
2
+ constructor() {
3
+ super(), this.slotEl = null, this.mql = null;
4
+ const t = this.attachShadow({ mode: "open" }), e = (
5
+ /*css*/
6
+ `
7
+ :host { display: block; }
8
+ `
9
+ );
10
+ t.innerHTML = `
11
+ <style>${e}</style>
12
+ <slot></slot>
13
+ `, this.slotEl = t.querySelector("slot");
14
+ }
15
+ static get observedAttributes() {
16
+ return ["breakpoint"];
17
+ }
18
+ connectedCallback() {
19
+ const t = this.getAttribute("breakpoint");
20
+ if (!t || !this.slotEl) return;
21
+ this.mql = window.matchMedia(`(max-width: ${t}px)`);
22
+ const e = (s) => {
23
+ this.slotEl.setAttribute("name", s ? "showBelow" : "showAbove");
24
+ };
25
+ e(this.mql.matches), this.mql.addEventListener("change", (s) => {
26
+ e(s.matches);
27
+ });
28
+ }
29
+ }
30
+ customElements.define("mui-responsive", o);
@@ -0,0 +1,32 @@
1
+ class r extends HTMLElement {
2
+ static get observedAttributes() {
3
+ return ["length", "weight", "direction"];
4
+ }
5
+ constructor() {
6
+ super();
7
+ const i = this.attachShadow({ mode: "open" });
8
+ let h = "horizontal", t = "100%", e = "1px";
9
+ this.setAttribute("role", "presentation"), this.setAttribute("direction", this.getAttribute("direction") || h), this.setAttribute("length", this.getAttribute("length") || t), this.setAttribute("weight", this.getAttribute("weight") || e);
10
+ const s = (
11
+ /*css*/
12
+ `
13
+ :host {
14
+ display: block;
15
+ background: var(--border-color);
16
+ }
17
+ :host([direction="horizontal"]) {
18
+ width: ${this.getAttribute("length") || t};
19
+ height: ${this.getAttribute("weight") || e};
20
+ }
21
+ :host([direction="vertical"]) {
22
+ height: ${this.getAttribute("length") || t};
23
+ width: ${this.getAttribute("weight") || e};
24
+ }
25
+ `
26
+ );
27
+ i.innerHTML = `
28
+ <style>${s}</style>
29
+ `;
30
+ }
31
+ }
32
+ customElements.define("mui-rule", r);
@@ -0,0 +1,204 @@
1
+ import { getPartMap as i } from "../mui-utils/part-map/index.js";
2
+ class f extends HTMLElement {
3
+ constructor() {
4
+ super(), this.partMap = "", this.attachShadow({ mode: "open" });
5
+ }
6
+ static get observedAttributes() {
7
+ return ["name", "value", "id", "label", "options", "disabled", "hide-label", "variant"];
8
+ }
9
+ async connectedCallback() {
10
+ await this.waitForPartMap(), this.partMap = i("text", "visual"), this.render(), this.setupListener();
11
+ }
12
+ attributeChangedCallback(e, o) {
13
+ if (!this.shadowRoot) return;
14
+ const r = (
15
+ /** @type {HTMLSelectElement | null} */
16
+ this.shadowRoot.querySelector("select")
17
+ );
18
+ e === "value" && r && (r.value = o || ""), e === "disabled" && r && (o === null || o === "false" ? r.removeAttribute("disabled") : r.setAttribute("disabled", "")), ["options", "label", "hide-label"].includes(e) && (this.render(), this.setupListener());
19
+ }
20
+ setupListener() {
21
+ if (!this.shadowRoot) return;
22
+ const e = this.shadowRoot.querySelector("select");
23
+ if (e) {
24
+ const o = e.cloneNode(!0);
25
+ e.parentNode && e.parentNode.replaceChild(o, e), o.addEventListener("change", (r) => {
26
+ const a = r.target;
27
+ a && this.dispatchEvent(
28
+ new CustomEvent("change", {
29
+ detail: { value: a.value },
30
+ bubbles: !0,
31
+ composed: !0
32
+ })
33
+ );
34
+ });
35
+ }
36
+ }
37
+ render() {
38
+ if (!this.shadowRoot) return;
39
+ const e = this.getAttribute("name") || "", o = this.getAttribute("id") || `mui-select-${Math.random().toString(36).substr(2, 9)}`, r = this.getAttribute("label") || "", a = this.getAttribute("value") || "", s = this.hasAttribute("hide-label"), c = this.hasAttribute("disabled"), d = this.getAttribute("options") || "[]", b = this.getAttribute("aria-label") || "", l = this.getAttribute("variant") || "", h = l || "";
40
+ s && !r && console.warn(
41
+ "mui-select Accessibility warning: When using 'hide-label', please provide a 'label' attribute so an 'aria-label' can be generated for screen reader support."
42
+ ), !r && !b && console.warn(
43
+ "mui-select Accessibility warning: A 'label' or 'aria-label' attribute is required for screen reader accessibility."
44
+ );
45
+ const u = s && r ? `aria-label="${r}"` : "";
46
+ let n = [];
47
+ try {
48
+ n = JSON.parse(d);
49
+ } catch (t) {
50
+ console.error("Invalid JSON in options attribute", t);
51
+ }
52
+ const v = n.map((t) => `<option value="${t.value}" ${t.value === a ? "selected" : ""}>${t.label}</option>`).join(""), p = (
53
+ /*html*/
54
+ `
55
+ <style>
56
+ :host {
57
+ display: inline-block;
58
+ width: 100%;
59
+ position: relative;
60
+ }
61
+ label {
62
+ font-size: var(--text-font-size);
63
+ font-weight: var(--font-weight-medium);
64
+ margin-bottom: var(--space-100);
65
+ color: var(--text-color);
66
+ display: block;
67
+ }
68
+ select {
69
+ min-height: 4.4rem;
70
+ line-height: var(--text-line-height);
71
+ padding: var(--space-200) var(--space-300);
72
+ font-size: var(--text-font-size);
73
+ border: var(--border-thin);
74
+ border-color: var(--form-default-border-color);
75
+ border-radius: var(--radius-100);
76
+ color: var(--text-color);
77
+ background: var(--input-background);
78
+ width: 100%;
79
+ box-sizing: border-box;
80
+ appearance: none;
81
+ }
82
+ select:hover {
83
+ border-color: var(--form-default-border-color-hover);
84
+ }
85
+ select:focus {
86
+ outline: var(--outline-thick);
87
+ }
88
+ select:disabled {
89
+ opacity: 0.4;
90
+ background-color: var(--input-background-disabled);
91
+ cursor: not-allowed;
92
+ }
93
+ select.success {
94
+ color: var(--form-success-text-color);
95
+ border-color: var(--form-success-border-color);
96
+ box-shadow: 0 0 0 2px var(--form-success-border-color);
97
+ }
98
+ select.warning {
99
+ color: var(--form-warning-text-color);
100
+ border-color: var(--form-warning-border-color);
101
+ box-shadow: 0 0 0 2px var(--form-warning-border-color);
102
+ }
103
+ select.error {
104
+ color: var(--form-error-text-color);
105
+ border-color: var(--form-error-border-color);
106
+ box-shadow: 0 0 0 2px var(--form-error-border-color);
107
+ }
108
+ select.success:hover {
109
+ color: var(--form-success-text-color-hover);
110
+ border-color: var(--form-success-border-color-hover);
111
+ box-shadow: 0 0 0 2px var(--form-success-border-color-hover);
112
+ }
113
+ select.warning:hover {
114
+ color: var(--form-warning-text-color-hover);
115
+ border-color: var(--form-warning-border-color-hover);
116
+ box-shadow: 0 0 0 2px var(--form-warning-border-color-hover);
117
+ }
118
+ select.error:hover {
119
+ color: var(--form-error-text-color-hover);
120
+ border-color: var(--form-error-border-color-hover);
121
+ box-shadow: 0 0 0 2px var(--form-error-border-color-hover);
122
+ }
123
+ .vh {
124
+ position: absolute;
125
+ width: 1px;
126
+ height: 1px;
127
+ margin: -1px;
128
+ padding: 0;
129
+ overflow: hidden;
130
+ clip: rect(0 0 0 0);
131
+ white-space: nowrap;
132
+ border: 0;
133
+ }
134
+ .chevron {
135
+ position: absolute;
136
+ right: var(--space-300);
137
+ top: 50%;
138
+ transform: translateY(-50%);
139
+ padding: var(--space-300);
140
+ padding-left: var(--space-000);
141
+ padding-right: var(--space-000);
142
+ background: var(--input-background);
143
+ box-shadow: -4px 0 4px 0 var(--input-background);
144
+ pointer-events: none;
145
+ }
146
+
147
+ /* ========================================================================== */
148
+ /* STYLE ADJUSTMENTS WHEN SELECT IS SLOTTED WITHIN INPUT */
149
+ /* Related styles unique to this usage is found in the mui-input/index.js */
150
+ /* ========================================================================== */
151
+
152
+ /* ========================================================================== */
153
+ /* BEFORE: When a SELECT has slot="before" applied to host for INPUT usage */
154
+ /* ========================================================================== */
155
+
156
+ :host([slot="before"]) select {
157
+ border-right: none;
158
+ border-top-right-radius: var(--radius-000);
159
+ border-bottom-right-radius: var(--radius-000);
160
+ }
161
+
162
+ /* ========================================================================== */
163
+ /* AFTER: When a SELECT has slot="after" applied to host for INPUT usage */
164
+ /* ========================================================================== */
165
+
166
+ :host([slot="after"]) select {
167
+ border-left: none;
168
+ border-top-left-radius: var(--radius-000);
169
+ border-bottom-left-radius: var(--radius-000);
170
+ }
171
+
172
+ /* Ensure feedback styles appear above INPUT */
173
+ select.success,
174
+ select.warning,
175
+ select.error {
176
+ z-index: 1;
177
+ }
178
+
179
+ /* ========================================================================== */
180
+
181
+ </style>
182
+ ${r ? (
183
+ /*html*/
184
+ `<label for="${o}" class="${s ? "vh" : ""}">${r}</label>`
185
+ ) : ""}
186
+ <select class="${h}" part="${this.partMap || ""}" name="${e}" id="${o}" ${u} ${c ? "disabled" : ""} >
187
+ ${v}
188
+ </select>
189
+ <mui-icon-down-chevron class="chevron" size="x-small"></mui-icon-down-chevron>
190
+ `
191
+ );
192
+ this.shadowRoot.innerHTML = p;
193
+ }
194
+ waitForPartMap() {
195
+ return new Promise((e) => {
196
+ if (typeof i == "function") return e();
197
+ const o = () => {
198
+ typeof i == "function" ? e() : requestAnimationFrame(o);
199
+ };
200
+ o();
201
+ });
202
+ }
203
+ }
204
+ customElements.define("mui-select", f);
@@ -0,0 +1,21 @@
1
+ class t extends HTMLElement {
2
+ constructor() {
3
+ super(), this.attachShadow({ mode: "open" });
4
+ }
5
+ connectedCallback() {
6
+ this.setAttribute("role", "table"), this.shadowRoot && (this.shadowRoot.innerHTML = /*html*/
7
+ `
8
+ <style>
9
+ :host {
10
+ display: grid;
11
+ grid-template-columns: 1fr 1fr;
12
+ gap: var(--space-500);
13
+ box-sizing: border-box;
14
+ }
15
+ </style>
16
+ <slot name="start"></slot>
17
+ <slot name="end"></slot>
18
+ `);
19
+ }
20
+ }
21
+ customElements.define("mui-slat", t);
@@ -0,0 +1,335 @@
1
+ class b extends HTMLElement {
2
+ static get observedAttributes() {
3
+ return [
4
+ "state",
5
+ "number",
6
+ "variant",
7
+ "partner",
8
+ "type",
9
+ "logo",
10
+ "logo-width",
11
+ "logo-height",
12
+ "bg-color",
13
+ "bg-image",
14
+ "inverted"
15
+ ];
16
+ }
17
+ constructor() {
18
+ super(), this.attachShadow({ mode: "open" });
19
+ }
20
+ attributeChangedCallback() {
21
+ this.render();
22
+ }
23
+ connectedCallback() {
24
+ this.render();
25
+ }
26
+ render() {
27
+ const p = this.getAttribute("state") || "default", l = this.getAttribute("number") || "0000", n = this.getAttribute("bg-color"), o = this.getAttribute("bg-image"), u = this.getAttribute("variant") || "plain", e = this.hasAttribute("inverted"), s = this.getAttribute("type") || "", d = p === "frozen", c = this.getAttribute("logo") || "", g = this.getAttribute("partner") || "", a = this.getAttribute("logo-height"), t = a && !isNaN(parseInt(a, 10)) ? parseInt(a, 10) : void 0;
28
+ t && t > 126 && console.warn(
29
+ `[mui-smart-card] The logo height (${t}px) exceeds the recommended maximum of 126px. This may affect vertical alignment or visual consistency.`
30
+ );
31
+ let r = "card", i = "";
32
+ u === "animated" ? r += " animated" : r += " plain", o ? i = `
33
+ background-image: url(${o});
34
+ background-size: cover;
35
+ background-position: center;
36
+ background-repeat: no-repeat;
37
+ ` : n ? i = `background: ${n};` : i = `
38
+ background: ${e ? "linear-gradient(180deg, var(--grey-900) 0%, var(--black) 100%)" : "linear-gradient(180deg, var(--grey-200) 0%, var(--white) 100%)"};
39
+ `, this.shadowRoot && (this.shadowRoot.innerHTML = /*html*/
40
+ `
41
+ <style>
42
+ @keyframes cardAnimationMobile {
43
+ 0% {
44
+ background-size: 101.265823% auto;
45
+ background-position: center;
46
+ }
47
+ 60% {
48
+ background-size: 106.329114% auto;
49
+ background-position: center;
50
+ }
51
+ 100% {
52
+ background-size: 101.265823% auto;
53
+ background-position: center;
54
+ }
55
+ }
56
+
57
+ @keyframes cardAnimationDesktop {
58
+ 0% {
59
+ background-size: 400px auto;
60
+ background-position: center;
61
+ }
62
+ 60% {
63
+ background-size: 420px auto;
64
+ background-position: center;
65
+ }
66
+ 100% {
67
+ background-size: 400px auto;
68
+ background-position: center;
69
+ }
70
+ }
71
+
72
+ @keyframes cardGradient {
73
+ 0% { background-position: 0% 10%; }
74
+ 50% { background-position: 100% 91%; }
75
+ 100% { background-position: 0% 10%; }
76
+ }
77
+
78
+ :host {
79
+ width: 100%;
80
+ max-width: 395px;
81
+ min-width: 247px;
82
+ border-radius: var(--radius-300);
83
+ overflow: hidden;
84
+ box-shadow: 0 0px 8px rgb(0 0 0 / 12%), 0 2px 16px rgb(0 0 0 / 12%),
85
+ 0 4px 20px rgb(0 0 0 / 12%), 0 12px 28px rgb(0 0 0 / 12%);
86
+ }
87
+
88
+ .card-top {
89
+ display: flex;
90
+ justify-content: space-between;
91
+ align-items: flex-start;
92
+ padding: calc(var(--space-300) + var(--space-025));
93
+ padding-bottom: 0;
94
+ }
95
+
96
+ /* Company */
97
+ /* =========================================== */
98
+ .logo {
99
+ display: flex;
100
+ justify-content: flex-end;
101
+ align-items: start;
102
+ max-width: 60%;
103
+ max-height: 60%;
104
+ overflow: hidden;
105
+ }
106
+
107
+ .logo img {
108
+ max-width: 100%;
109
+ max-height: 100%;
110
+ object-fit: contain;
111
+ display: block;
112
+ width: auto;
113
+ height: ${t ? `calc(${t}px / 1.5)` : "auto"};
114
+ }
115
+
116
+ @media (min-width: 500px) {
117
+ .logo img {
118
+ width: auto;
119
+ height: ${t ? `${t}px` : "auto"};
120
+ }
121
+ }
122
+
123
+ /* Invert Logic */
124
+ /* =========================================== */
125
+ .type,
126
+ .card-number::part(display) {
127
+ color: ${e ? "var(--white)" : "var(--black)"};
128
+ text-shadow: ${e ? "0 0px 8px rgb(0 0 0 / 12%);" : "0 0px 8px rgb(255 255 255 / 12%);"};
129
+ }
130
+
131
+ img {
132
+ filter: ${e ? "drop-shadow(0px 1px 0px var(--black-opacity-60))" : "drop-shadow(0px 1px 0px var(--white-opacity-60))"};
133
+ }
134
+
135
+
136
+ .inner {
137
+ box-shadow: ${e ? "inset 0 1px 0 0 rgb(255 255 255 / 20%), 0 1px 0 0 rgb(0 0 0 / 10%)" : "inset 0 1px 0 0 rgb(255 255 255 / 60%), 0 1px 0 0 rgb(0 0 0 / 40%)"};
138
+ }
139
+
140
+ .card.animated .inner::after {
141
+ background: linear-gradient(${e ? "120deg, rgb(255 255 255 / 2%) 30%, rgb(255 255 255 / 8%) 40%, rgb(255 255 255 / 4%) 40%" : "120deg, rgb(255 255 255 / 2%) 30%, rgb(255 255 255 / 25%) 40%, rgb(255 255 255 / 8%) 40%"});
142
+ }
143
+
144
+ /* Type */
145
+ /* =========================================== */
146
+ .type {
147
+ font-size: var(--text-font-size-xs);
148
+ line-height: var(--text-line-height-xs);
149
+ text-transform: uppercase;
150
+ letter-spacing: var(--space-025);
151
+ font-weight: var(--font-weight-medium);
152
+ }
153
+ @media (min-width: 500px) {
154
+ .type {
155
+ font-size: var(--text-font-size-s);
156
+ line-height: var(--text-line-height-s);
157
+ }
158
+ }
159
+
160
+ /* Card Number */
161
+ /* =========================================== */
162
+ .card-number {
163
+ bottom: calc(var(--space-300) + var(--space-025));
164
+ left: calc(var(--space-300) + var(--space-025));
165
+ position: absolute;
166
+ z-index: 1;
167
+ }
168
+
169
+ .card-number::part(display) {
170
+ display: flex;
171
+ gap: var(--space-100);
172
+ box-sizing: border-box;
173
+ font-size: var(--text-font-size-xs);
174
+ line-height: var(--text-line-height-xs);
175
+ font-weight: var(--font-weight-medium);
176
+ }
177
+
178
+ @media (min-width: 500px) {
179
+ .card-number::part(display) {
180
+ font-size: var(--text-font-size-s);
181
+ line-height: var(--text-line-height-s);
182
+ }
183
+ }
184
+
185
+ /* Provider */
186
+ /* =========================================== */
187
+ .card-partner {
188
+ height: auto;
189
+ width: auto;
190
+ display: flex;
191
+ justify-content: end;
192
+ align-items: end;
193
+ bottom: calc(var(--space-300) + var(--space-025));
194
+ right: calc(var(--space-300) + var(--space-025));
195
+ position: absolute;
196
+ z-index: 1;
197
+ }
198
+
199
+ .card-partner img {
200
+ width: calc(100% / 1.5);
201
+ height: auto;
202
+ }
203
+
204
+ @media (min-width: 500px) {
205
+ .card-partner img {
206
+ width: 100%;
207
+ }
208
+ }
209
+
210
+ /* Variant - Base */
211
+ /* =========================================== */
212
+ .card {
213
+ position: relative;
214
+ box-sizing: border-box;
215
+ display: grid;
216
+ grid-template-rows: 1fr auto;
217
+ -webkit-font-smoothing: antialiased;
218
+ font-size: 14px;
219
+ width: 100%;
220
+ max-width: 395px;
221
+ max-height: 248px;
222
+ min-width: 247px;
223
+ aspect-ratio: 1014 / 638;
224
+ }
225
+
226
+ .inner {
227
+ display: grid;
228
+ grid-template-rows: 1fr auto;
229
+ border-radius: var(--radius-300);
230
+ }
231
+
232
+ /* Variant - Virtual */
233
+ /* =========================================== */
234
+ .card.animated .inner {
235
+ animation-name: cardAnimationMobile;
236
+ animation-duration: 10s;
237
+ transform: translateZ(0);
238
+ position: relative;
239
+ animation-iteration-count: infinite;
240
+ animation-direction: alternate;
241
+ animation-timing-function: ease-in-out;
242
+ }
243
+
244
+ @media (min-width: 500px) {
245
+ .card.animated .inner {
246
+ animation-name: cardAnimationDesktop;
247
+ }
248
+ }
249
+
250
+ .card.animated .inner::before {
251
+ content: "";
252
+ width: 100%;
253
+ height: 100%;
254
+ position: absolute;
255
+ z-index: 1;
256
+ border-radius: 16px;
257
+ }
258
+
259
+ .card.animated .inner::after {
260
+ content: "";
261
+ width: 100%;
262
+ height: 100%;
263
+ border-radius: 16px;
264
+ background-size: 150% 150%;
265
+ animation: cardGradient 45s ease-in-out infinite;
266
+ transform: translateZ(0);
267
+ position: absolute;
268
+ }
269
+
270
+ /* Frozen State */
271
+ /* =========================================== */
272
+ .frozen {
273
+ filter: grayscale(100%);
274
+ transition: filter 0.2s ease-in-out;
275
+ position: relative;
276
+ }
277
+ .frozen .inner {
278
+ filter: blur(16px);
279
+ transition: filter 0.2s ease-in-out;
280
+ }
281
+ .frozen:hover {
282
+ filter: grayscale(0%);
283
+ }
284
+ .frozen:hover .inner {
285
+ filter: blur(0);
286
+ }
287
+ mui-badge {
288
+ position: absolute;
289
+ z-index: 1;
290
+ top: 50%;
291
+ left: 50%;
292
+ transform: translateX(-50%) translateY(-50%);
293
+ opacity: 1;
294
+ transition: opacity 0.2s ease-in-out;
295
+ }
296
+
297
+ .frozen:hover mui-badge { opacity: 0; }
298
+
299
+ </style>
300
+
301
+ <div
302
+
303
+ class="${r}
304
+ ${d ? "frozen" : ""}"
305
+ >
306
+ ${d ? "<mui-badge>Frozen</mui-badge>" : ""}
307
+
308
+ <div class="inner" style="${i}">
309
+ <div class="card-top">
310
+ <span class="type">${s ? `${s}` : ""}</span>
311
+ ${c ? `
312
+ <div class="logo">
313
+ <img src="${c}" class="logo-img" />
314
+ </div>` : ""}
315
+ </div>
316
+
317
+ <mui-body class="card-number"><span>••••</span><span>${l}</span></mui-body>
318
+
319
+ <div class="card-partner">
320
+
321
+ ${g ? `
322
+
323
+ <img src="${g}" class="logo-img" alt="partner logo"/>
324
+ ` : ""}
325
+
326
+
327
+
328
+ </div>
329
+ </div>
330
+
331
+ </div>
332
+ `);
333
+ }
334
+ }
335
+ customElements.define("mui-smart-card", b);
@@ -0,0 +1,52 @@
1
+ import { getPartMap as a } from "../../mui-utils/part-map/index.js";
2
+ class e extends HTMLElement {
3
+ static get observedAttributes() {
4
+ return ["space", "alignY", "alignX"];
5
+ }
6
+ constructor() {
7
+ super(), this.attachShadow({ mode: "open" }), this.space = "var(--space-500)", this.alignY = "flex-start", this.alignX = "flex-start", this.styles = /*css*/
8
+ `
9
+ :host {
10
+ display: block;
11
+ }
12
+ slot {
13
+ display: flex;
14
+ gap: var(--space);
15
+ align-items: var(--alignY);
16
+ justify-content: var(--alignX);
17
+ }
18
+ `;
19
+ }
20
+ async connectedCallback() {
21
+ if (!this.shadowRoot) return;
22
+ await this.waitForPartMap();
23
+ const t = a("spacing", "layout", "visual");
24
+ this.shadowRoot.innerHTML = /*html*/
25
+ `
26
+ <style>${this.styles}</style>
27
+ <slot
28
+ part="${t}"
29
+ style="
30
+ --space: ${this.getAttribute("space") || this.space};
31
+ --alignY: ${this.getAttribute("alignY") || this.alignY};
32
+ --alignX: ${this.getAttribute("alignX") || this.alignX};
33
+ ">
34
+ </slot>
35
+ `;
36
+ }
37
+ attributeChangedCallback(t, s) {
38
+ if (!this.shadowRoot) return;
39
+ const i = this.shadowRoot.querySelector("slot");
40
+ i && (t === "space" && i.style.setProperty("--space", s || this.space), t === "alignY" && i.style.setProperty("--alignY", s || this.alignY), t === "alignX" && i.style.setProperty("--alignX", s || this.alignX));
41
+ }
42
+ waitForPartMap() {
43
+ return new Promise((t) => {
44
+ if (typeof a == "function") return t();
45
+ const s = () => {
46
+ typeof a == "function" ? t() : requestAnimationFrame(s);
47
+ };
48
+ s();
49
+ });
50
+ }
51
+ }
52
+ customElements.define("mui-h-stack", e);
@@ -0,0 +1,2 @@
1
+ import "./hstack/index.js";
2
+ import "./vstack/index.js";