@muibook/components 19.1.1 → 19.3.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.
@@ -2,36 +2,6 @@
2
2
  "schemaVersion": "1.0.0",
3
3
  "readme": "",
4
4
  "modules": [
5
- {
6
- "kind": "javascript-module",
7
- "path": "src/components/mui-accordion/doc.ts",
8
- "declarations": [
9
- {
10
- "kind": "variable",
11
- "name": "muiDocs",
12
- "type": {
13
- "text": "MuiDocs"
14
- },
15
- "default": "{ Accordion: { title: \"Accordion\", description: \"A collapsible container used to reveal sections of related content. Useful for progressive disclosure, especially when space is limited or the content is secondary. On smaller viewports, accordions can replace tables to group and reveal related rows of data.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/1TykTEhPNTJlZdyzqAayEH/b5293336f033020bbcef964db811cdd3/Accordion_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=958-8558&t=0ytskb8cxriEmdz2-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/content-accordion--docs\"], website: [\"https://muibook.com/#/accordion\"], guides: [\"https://guides.muibook.com/accordion\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-accordion/index.ts\"], usage: { list: [ \"Use to progressively reveal grouped or secondary content.\", \"Can replace tables on small viewports when content is grouped by row.\", \"Ideal for mobile or narrow layouts where space is constrained.\", \"Stack, slat, or grid layouts can be used inside an accordion for custom structures.\", ], }, accessibility: { designerList: [ \"Accordion summary uses role='button' and tabindex='0' for keyboard access.\", \"Supports Enter and Space keys for toggling.\", \"aria-expanded reflects open/closed state.\", \"aria-controls links summary to detail with a unique ID.\", \"mui-heading applies semantic heading with role='heading' and aria-level.\", \"Chevron icon rotates visually and the state is conveyed via aria-expanded.\", ], engineerList: [ \"Accordion summary uses role='button' and tabindex='0' for keyboard access.\", \"Supports Enter and Space keys for toggling.\", \"aria-expanded reflects open/closed state.\", \"aria-controls links summary to detail with a unique ID.\", \"mui-heading applies semantic heading with role='heading' and aria-level.\", \"Chevron icon rotates visually and the state is conveyed via aria-expanded.\", ], }, anatomy: { list: [ \"Heading: Provides the accordion with a heading\", \"Icon: A chevron icon that indicates the state of the Accordion\", \"Detail: Define the detail content for the expanded section within the Accordion.\", ], image: \"https://images.ctfassets.net/i5uwscj4pkk2/4JgAhsxwz3YOt28fLTVgDB/b404f3407eb06e2f26a196da04f7d217/Accordion_-_Anatomy.png\", }, variants: { items: [ { key: \"accordion-block\", title: \"Accordion Block\", description: \"The block accordion is typically used within a page layout full-width to the parent container.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1L2XfteVwNBQcFlddTYmfi/c791eb538285e2cfb919342e84228811/accordion-block_-_Variants.png\", }, { key: \"accordion-inline\", title: \"Accordion Inline\", description: \"The inline accordion is typically used within a block layout as a secondary UI element to a block element.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/RMnvBLRsW3Vvq9V3yaTcW/86afba39ed0b7ffc00d0033b1b1bfd07/accordion_inline_-_Variants.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"menu-groups\", name: \"Menu Groups\", description: \"Accordions can be used in menus to collapse and expand groups of related items, helping keep navigation organized and reducing visual clutter.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/zFHrSdH3CYbZXOv8WFKkL/90cad70c32b40fca61a875263d4cc366/accordion_menu_-_composition.png\", }, { key: \"code-snippets\", name: \"Code snippets\", description: \"An accordion in a card footer allows code snippets or supporting details to be revealed on demand, keeping the card compact while still providing access to additional information.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7FKVgkCxv3UenOQTC9Tr4R/25c357aceea16b169c48775d7363df1d/accordion_card_footer_-_composition.png\", }, { key: \"account-activity\", name: \"Account Activity (Accordion + Card)\", description: \"Accordions can split account activity into segments, such as by year, with the ability to expand each section for detailed transactions. This makes large sets of data easier to scan and navigate.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4PEUUHgxpuDM6nDgdGOotY/bf078e07bc3fbabf07f03b99800e5306/accordion_card_body_-_composition.png\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [ { description: \"\", image: \"\" }, { description: \"\", image: \"\" }, ], dontContent: [{ description: \"\" }, { description: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, related: { items: [ { name: \"Card\", link: \"https://guides.muibook.com/card\" }, { name: \"Slat\", link: \"https://guides.muibook.com/slat\" }, ], }, }, }"
16
- }
17
- ],
18
- "exports": [
19
- {
20
- "kind": "js",
21
- "name": "muiDocs",
22
- "declaration": {
23
- "name": "muiDocs",
24
- "module": "src/components/mui-accordion/doc.ts"
25
- }
26
- }
27
- ]
28
- },
29
- {
30
- "kind": "javascript-module",
31
- "path": "src/components/mui-accordion/index.ts",
32
- "declarations": [],
33
- "exports": []
34
- },
35
5
  {
36
6
  "kind": "javascript-module",
37
7
  "path": "src/components/mui-addon/doc.ts",
@@ -101,6 +71,36 @@
101
71
  }
102
72
  ]
103
73
  },
74
+ {
75
+ "kind": "javascript-module",
76
+ "path": "src/components/mui-accordion/doc.ts",
77
+ "declarations": [
78
+ {
79
+ "kind": "variable",
80
+ "name": "muiDocs",
81
+ "type": {
82
+ "text": "MuiDocs"
83
+ },
84
+ "default": "{ Accordion: { title: \"Accordion\", description: \"A collapsible container used to reveal sections of related content. Useful for progressive disclosure, especially when space is limited or the content is secondary. On smaller viewports, accordions can replace tables to group and reveal related rows of data.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/1TykTEhPNTJlZdyzqAayEH/b5293336f033020bbcef964db811cdd3/Accordion_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=958-8558&t=0ytskb8cxriEmdz2-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/content-accordion--docs\"], website: [\"https://muibook.com/#/accordion\"], guides: [\"https://guides.muibook.com/accordion\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-accordion/index.ts\"], usage: { list: [ \"Use to progressively reveal grouped or secondary content.\", \"Can replace tables on small viewports when content is grouped by row.\", \"Ideal for mobile or narrow layouts where space is constrained.\", \"Stack, slat, or grid layouts can be used inside an accordion for custom structures.\", ], }, accessibility: { designerList: [ \"Accordion summary uses role='button' and tabindex='0' for keyboard access.\", \"Supports Enter and Space keys for toggling.\", \"aria-expanded reflects open/closed state.\", \"aria-controls links summary to detail with a unique ID.\", \"mui-heading applies semantic heading with role='heading' and aria-level.\", \"Chevron icon rotates visually and the state is conveyed via aria-expanded.\", ], engineerList: [ \"Accordion summary uses role='button' and tabindex='0' for keyboard access.\", \"Supports Enter and Space keys for toggling.\", \"aria-expanded reflects open/closed state.\", \"aria-controls links summary to detail with a unique ID.\", \"mui-heading applies semantic heading with role='heading' and aria-level.\", \"Chevron icon rotates visually and the state is conveyed via aria-expanded.\", ], }, anatomy: { list: [ \"Heading: Provides the accordion with a heading\", \"Icon: A chevron icon that indicates the state of the Accordion\", \"Detail: Define the detail content for the expanded section within the Accordion.\", ], image: \"https://images.ctfassets.net/i5uwscj4pkk2/4JgAhsxwz3YOt28fLTVgDB/b404f3407eb06e2f26a196da04f7d217/Accordion_-_Anatomy.png\", }, variants: { items: [ { key: \"accordion-block\", title: \"Accordion Block\", description: \"The block accordion is typically used within a page layout full-width to the parent container.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1L2XfteVwNBQcFlddTYmfi/c791eb538285e2cfb919342e84228811/accordion-block_-_Variants.png\", }, { key: \"accordion-inline\", title: \"Accordion Inline\", description: \"The inline accordion is typically used within a block layout as a secondary UI element to a block element.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/RMnvBLRsW3Vvq9V3yaTcW/86afba39ed0b7ffc00d0033b1b1bfd07/accordion_inline_-_Variants.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"menu-groups\", name: \"Menu Groups\", description: \"Accordions can be used in menus to collapse and expand groups of related items, helping keep navigation organized and reducing visual clutter.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/zFHrSdH3CYbZXOv8WFKkL/90cad70c32b40fca61a875263d4cc366/accordion_menu_-_composition.png\", }, { key: \"code-snippets\", name: \"Code snippets\", description: \"An accordion in a card footer allows code snippets or supporting details to be revealed on demand, keeping the card compact while still providing access to additional information.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7FKVgkCxv3UenOQTC9Tr4R/25c357aceea16b169c48775d7363df1d/accordion_card_footer_-_composition.png\", }, { key: \"account-activity\", name: \"Account Activity (Accordion + Card)\", description: \"Accordions can split account activity into segments, such as by year, with the ability to expand each section for detailed transactions. This makes large sets of data easier to scan and navigate.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4PEUUHgxpuDM6nDgdGOotY/bf078e07bc3fbabf07f03b99800e5306/accordion_card_body_-_composition.png\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [ { description: \"\", image: \"\" }, { description: \"\", image: \"\" }, ], dontContent: [{ description: \"\" }, { description: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, related: { items: [ { name: \"Card\", link: \"https://guides.muibook.com/card\" }, { name: \"Slat\", link: \"https://guides.muibook.com/slat\" }, ], }, }, }"
85
+ }
86
+ ],
87
+ "exports": [
88
+ {
89
+ "kind": "js",
90
+ "name": "muiDocs",
91
+ "declaration": {
92
+ "name": "muiDocs",
93
+ "module": "src/components/mui-accordion/doc.ts"
94
+ }
95
+ }
96
+ ]
97
+ },
98
+ {
99
+ "kind": "javascript-module",
100
+ "path": "src/components/mui-accordion/index.ts",
101
+ "declarations": [],
102
+ "exports": []
103
+ },
104
104
  {
105
105
  "kind": "javascript-module",
106
106
  "path": "src/components/mui-alert/doc.ts",
@@ -243,6 +243,107 @@
243
243
  }
244
244
  ]
245
245
  },
246
+ {
247
+ "kind": "javascript-module",
248
+ "path": "src/components/mui-avatar/doc.ts",
249
+ "declarations": [
250
+ {
251
+ "kind": "variable",
252
+ "name": "muiDocs",
253
+ "type": {
254
+ "text": "MuiDocs"
255
+ },
256
+ "default": "{ Avatar: { title: \"Avatar\", description: \"Avatar components are used to represent users or entities visually, often through images, initials, or icons.\", hero: [\"https://images.ctfassets.net/i5uwscj4pkk2/2Qj1aPRsHVZZs6eF8XO6XC/54dd3c04d5a0ac379050cfa6f45d9732/Avatar_-_Home_Image.png\"], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=1498-15366&t=2P2nhh7B70fl6xQ4-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-avatar--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-avatar/index.ts\"], website: [\"https://muibook.com/#/avatar\"], guides: [\"https://guides.muibook.com/avatar\"], usage: { list: [ \"Represent a user or entity visually in lists, chats, comments, or profiles.\", \"Display a profile photo, initials, or icon associated with a person or object.\", \"Use in compact UI elements where space is limited (e.g., tables, cards).\", \"Pair with user metadata (name, role, status) for context.\", \"Indicate presence, status, or selection in collaborative interfaces.\", \"Avatar can be slotted into Button for identity-led actions such as switching video platform profiles, opening an account menu, or accessing workspace controls.\", \"Use an avatar-only button when the avatar itself is the visible trigger for a profile dropdown, account settings drawer, workspace switcher, or compact dialog action.\", \"In global app headers, avatar-only buttons are a good fit for account settings, billing, support, or team context menus.\", \"When Avatar is the only content inside Button, let the avatar define the final size and treat Button as the interactive wrapper.\", ], }, accessibility: { designerList: [ \"Avatars should always include an accessible label via the label attribute to ensure screen readers can convey their purpose.\", \"When using images, ensure they are clear and appropriately sized for the avatar component.\", \"For avatars representing users, consider using initials or icons when images are not available to maintain visual consistency.\", ], engineerList: [ \"Avatars should always include an accessible label via the label attribute to ensure screen readers can convey their purpose.\", \"When using images, ensure they are clear and appropriately sized for the avatar component.\", \"For avatars representing users, consider using initials or icons when images are not available to maintain visual consistency.\", ], }, anatomy: { image: \"\", list: [ \"Image / Initials / Icon: The visible identity marker shown inside the avatar.\", \"Label: Accessible name announced to assistive technology.\", \"Status or Context (optional): Additional meaning can be conveyed through surrounding UI such as presence, role, or action context.\", ], }, variants: { items: [ { key: \"image\", title: \"Image\", description: \"Use when a profile or entity image is available and recognition matters.\", image: \"\", }, { key: \"initials\", title: \"Initials\", description: \"Use as the default fallback when no image is present but the entity has a clear name.\", image: \"\", }, { key: \"icon\", title: \"Icon\", description: \"Use for generic entities, products, or utility actions where a person-specific identity is not required.\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how Avatar fits into identity, communication, and account-oriented UI patterns.\", items: [ { key: \"account-menu\", name: \"Account Menu Trigger\", description: \"An avatar-only button used in a global app header to open account, billing, or support actions.\", image: \"\", }, { key: \"profile-switcher\", name: \"Profile Switcher\", description: \"A compact avatar trigger used to switch between people, channels, or workspace identities in a media or collaboration product.\", image: \"\", }, ], }, related: { items: [ { name: \"Button\", link: \"https://guides.muibook.com/button\", }, { name: \"Chip\", link: \"https://guides.muibook.com/chip\", }, { name: \"Slat\", link: \"https://guides.muibook.com/slat\", }, ], }, rules: [ { heading: \"Use the right identity source\", description: \"Choose the avatar content type based on confidence in the identity data and the importance of recognition.\", doContent: [ { description: \"Use a real image when recognition matters, initials when a name is available, and an icon for generic or product-level identities.\", image: \"\", }, ], dontContent: [ { description: \"Do not force decorative imagery or inconsistent fallback logic when the identity is unclear.\", image: \"\", }, ], }, ], behaviour: { list: [ \"Avatar is presentational by default and becomes interactive when wrapped by Button or another interactive parent.\", \"When used inside an avatar-only button, Avatar owns the visible size while Button owns interaction semantics, focus, and disabled behaviour.\", ], }, writing: { list: [ \"Provide a meaningful label so assistive technology can identify the person, entity, or action context represented by the avatar.\", ], }, }, }"
257
+ }
258
+ ],
259
+ "exports": [
260
+ {
261
+ "kind": "js",
262
+ "name": "muiDocs",
263
+ "declaration": {
264
+ "name": "muiDocs",
265
+ "module": "src/components/mui-avatar/doc.ts"
266
+ }
267
+ }
268
+ ]
269
+ },
270
+ {
271
+ "kind": "javascript-module",
272
+ "path": "src/components/mui-avatar/index.ts",
273
+ "declarations": [
274
+ {
275
+ "kind": "class",
276
+ "description": "",
277
+ "name": "MuiAvatar",
278
+ "members": [
279
+ {
280
+ "kind": "field",
281
+ "name": "_imageFailed",
282
+ "type": {
283
+ "text": "boolean | undefined"
284
+ },
285
+ "privacy": "private"
286
+ },
287
+ {
288
+ "kind": "method",
289
+ "name": "hasSlottedContent"
290
+ },
291
+ {
292
+ "kind": "method",
293
+ "name": "getInitials",
294
+ "parameters": [
295
+ {
296
+ "name": "label",
297
+ "type": {
298
+ "text": "string | null"
299
+ }
300
+ }
301
+ ]
302
+ },
303
+ {
304
+ "kind": "method",
305
+ "name": "getBackgroundCSS"
306
+ },
307
+ {
308
+ "kind": "method",
309
+ "name": "render"
310
+ }
311
+ ],
312
+ "attributes": [
313
+ {
314
+ "name": "label"
315
+ },
316
+ {
317
+ "name": "image"
318
+ },
319
+ {
320
+ "name": "size"
321
+ },
322
+ {
323
+ "name": "background"
324
+ },
325
+ {
326
+ "name": "background-color"
327
+ }
328
+ ],
329
+ "superclass": {
330
+ "name": "HTMLElement"
331
+ },
332
+ "tagName": "mui-avatar",
333
+ "customElement": true
334
+ }
335
+ ],
336
+ "exports": [
337
+ {
338
+ "kind": "custom-element-definition",
339
+ "name": "mui-avatar",
340
+ "declaration": {
341
+ "name": "MuiAvatar",
342
+ "module": "src/components/mui-avatar/index.ts"
343
+ }
344
+ }
345
+ ]
346
+ },
246
347
  {
247
348
  "kind": "javascript-module",
248
349
  "path": "src/components/mui-badge/doc.ts",
@@ -553,7 +654,7 @@
553
654
  },
554
655
  {
555
656
  "kind": "javascript-module",
556
- "path": "src/components/mui-avatar/doc.ts",
657
+ "path": "src/components/mui-button/doc.ts",
557
658
  "declarations": [
558
659
  {
559
660
  "kind": "variable",
@@ -561,7 +662,7 @@
561
662
  "type": {
562
663
  "text": "MuiDocs"
563
664
  },
564
- "default": "{ Avatar: { title: \"Avatar\", description: \"Avatar components are used to represent users or entities visually, often through images, initials, or icons.\", hero: [\"https://images.ctfassets.net/i5uwscj4pkk2/2Qj1aPRsHVZZs6eF8XO6XC/54dd3c04d5a0ac379050cfa6f45d9732/Avatar_-_Home_Image.png\"], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=1498-15366&t=2P2nhh7B70fl6xQ4-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-avatar--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-avatar/index.ts\"], website: [\"https://muibook.com/#/avatar\"], guides: [\"https://guides.muibook.com/avatar\"], usage: { list: [ \"Represent a user or entity visually in lists, chats, comments, or profiles.\", \"Display a profile photo, initials, or icon associated with a person or object.\", \"Use in compact UI elements where space is limited (e.g., tables, cards).\", \"Pair with user metadata (name, role, status) for context.\", \"Indicate presence, status, or selection in collaborative interfaces.\", ], }, accessibility: { designerList: [ \"Avatars should always include an accessible label via the label attribute to ensure screen readers can convey their purpose.\", \"When using images, ensure they are clear and appropriately sized for the avatar component.\", \"For avatars representing users, consider using initials or icons when images are not available to maintain visual consistency.\", ], engineerList: [ \"Avatars should always include an accessible label via the label attribute to ensure screen readers can convey their purpose.\", \"When using images, ensure they are clear and appropriately sized for the avatar component.\", \"For avatars representing users, consider using initials or icons when images are not available to maintain visual consistency.\", ], }, anatomy: { image: \"\", list: [\"\"], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"\", items: [ { key: \"\", name: \"\", description: \"\", image: \"\", }, ], }, related: { items: [ { name: \"\", link: \"\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
665
+ "default": "{ Button: { title: \"Button\", description: \"Buttons are essential UI elements that trigger actions when clicked or tapped. They should be easily recognisable, provide clear feedback, and be accessible to all users.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/20zrQqKqJ17evXhkPwlDhq/e7ce6604a49aef64f2c4056d16ea1d97/Button_-_Home_Image.png\", ], figma: [\"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=3-570&t=fSFYVey9aCoE5oQa-1\"], storybook: [\"https://stories.muibook.com/?path=/docs/actions-button--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-button/index.ts\"], website: [\"https://muibook.com/#/button\"], guides: [\"https://guides.muibook.com/button\"], usage: { list: [ \"Reserve buttons for core actions on a page.\", \"Avoid using too many buttons on a single page to prevent confusion.\", \"Use clear and concise label text on buttons.\", \"Ensure labels are action-oriented. E.g. 'Save'.\", \"Ensure sufficient contrast between button text and background.\", \"Buttons can include Avatar for profile, identity, and account-oriented actions.\", \"Use avatar-only buttons when the avatar itself is the visible trigger, such as opening an account menu, switching profiles on a video platform, or launching a compact settings drawer.\", \"When the button only contains mui-avatar, the button collapses to the avatar footprint while preserving interaction semantics, focus, and disabled behaviour.\", \"Avatar-only buttons work well with Dropdown, Drawer, and Dialog when you want the control to read as identity-first rather than as a standard text button.\", ], }, accessibility: { designerList: [ \"Never put tooltips on disabled buttons as Tooltips can't be reached on all devices or by some assitive technologies.\", \"Provide accessible labels for buttons.\", \"For icon-only buttons, ensure an aria-label is provided to describe the action, as screen readers cannot interpret icons alone.\", \"Ensure buttons are focusable via keyboard navigation.\", \"Use appropriate ARIA roles and properties.\", ], engineerList: [ \"Never put tooltips on disabled buttons as Tooltips can't be reached on all devices or by some assitive technologies.\", \"Provide accessible labels for buttons.\", \"For icon-only buttons, ensure an aria-label is provided to describe the action, as screen readers cannot interpret icons alone.\", \"Ensure buttons are focusable via keyboard navigation.\", \"Use appropriate ARIA roles and properties.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/2LUuCpBtbL794vr5DyhMCz/44b7a3b75d0418915ebcdbf43bf1214c/button-anatomy.png\", list: [ \"LABEL: Text describing the button action. Use action verbs or phrases to tell the user what will happen next, and follow the button label content guidelines.\", \"BEFORE: An optional area to include an icon before the label. Use an icon to add additional affordance where the icon has a clear and well-established meaning. Most buttons don't require an icon, so be consistent and deliberate when you do.\", \"AFTER: An optional area to include an icon after the label, often used for a chevron-down-arrow icon to indicate a dropdown menu or accordion experiences where the placement is on the far right of the button.\", \"ICON ONLY: Use when the action is easily understood and space is limited. For example: close, add, or menu toggle. Avoid for unfamiliar or complex actions.\", ], }, variants: { items: [ { key: \"primary\", title: \"Primary\", description: \"Used for the main action on a page. It should stand out visually and be used sparingly to avoid confusion. When an icon is slotted into a button, it automatically inherits the button’s default icon size. If you need a different look or emphasis, you can override the size as required.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7szaFYOxeEH9F6gl0NEGz0/9657b870cd37918ae15f30cfab8b3747/button-primary.png\", }, { key: \"primary-icon-only\", title: \"Primary: Icon-Only\", description: \"An icon only version of the primary button. Used for the main action on a page. Best when the icon meaning is immediately clear, such as submitting, navigating forward, or creating new items. Uses a small size icon when pairing with other buttons, or medium size icon for standalone actions.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/uKSyCIeL7vmWxqVoxxkRD/6d12cec0aaad006d0245a1f6dea8e7ad/button-primary-icon.png\", }, { key: \"secondary\", title: \"Secondary\", description: \"Used for secondary actions that are not as critical as the primary action. It should be distinguishable but less prominent. When an icon is slotted into a button, it automatically inherits the button’s default icon size. If you need a different look or emphasis, you can override the size as required.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5MgDmdtcMDIIsHKlzMNpj1/42fbbce26a313f72c670ff91ff4fb500/button-secondary.png\", }, { key: \"secondary\", title: \"Secondary\", description: \"Used for secondary actions that are not as critical as the primary action. It should be distinguishable but less prominent. When an icon is slotted into a button, it automatically inherits the button’s default icon size. If you need a different look or emphasis, you can override the size as required.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5MgDmdtcMDIIsHKlzMNpj1/42fbbce26a313f72c670ff91ff4fb500/button-secondary.png\", }, { key: \"secondary-icon-only\", title: \"Secondary: Icon-only\", description: \"An icon only version of the secondary button. Used for secondary actions that support the main task. Best for actions like edit, copy, or open in a new window. Uses a small size icon when pairing with other buttons, or medium size icon for standalone actions.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3ebS7TgW2aziGoqc59UZAQ/be7c2f7d7d06970b2ddfae9fed5562b3/button-secondary-icon.png\", }, { key: \"tertiary\", title: \"Tertiary\", description: \"Used for less important actions or actions that complement primary and secondary actions. They should be the least prominent. When an icon is slotted into a button, it automatically inherits the button’s default icon size. If you need a different look or emphasis, you can override the size as required.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/78O8tlBpDFb3rxooJkRGgs/27138560e395e947c8782feba06d3f6c/button-tertiary.png\", }, { key: \"tertiary-icon-only\", title: \"Tertiary: Icon-only\", description: \"An icon only version of the tertiary button. Designed for lightweight or supporting actions with minimal emphasis, such as info, settings, expand, open a menu, or close. Uses a small size icon when pairing with other buttons, or medium size icon for standalone actions.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/50Nmp65TaWcwTixZhpLoUT/af5c8743d1482969667cf2a063428759/button-tertiary-icon.png\", }, { key: \"overlay\", title: \"Overlay\", description: \"Use on layered media or tinted surfaces where a subtle translucent action is needed. Keeps controls readable over imagery while staying visually lightweight.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5MgDmdtcMDIIsHKlzMNpj1/42fbbce26a313f72c670ff91ff4fb500/button-secondary.png\", }, { key: \"attention\", title: \"Attention\", description: \"Used for critical or potentially destructive actions, such as deleting an item or submitting sensitive information. It should stand out clearly to alert users and prompt deliberate interaction. When an icon is slotted into a button, it automatically inherits the button’s default icon size. If you need a different look or emphasis, you can override the size as required.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6XBCZnwgBw6zp2fjJQR7ko/70a3c7e8931b4fbf442dd997a57e1058/button-attention.png\", }, { key: \"attention-icon-only\", title: \"Attention: Icon-only\", description: \"An icon only version of the attention button. Used for critical or potentially destructive actions, such as delete, remove, or report. Uses a small size icon when pairing with other buttons, or medium size icon for standalone actions.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1TDTCC0SZZJL3cBEmqjs8Q/29ba81f3f76fb4d15aaa93d25aec87d4/button-attention-icon.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"in-browser-design-guidelines\", name: \"In-browser Design Guidelines\", description: \"A promotional example showcasing the in-browser design guidelines feature available on the Muibook website.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5YR94S9N6P5No4lNQFBxZb/45360d599105d16309486d33ca0705f1/Button_-_Composition.png\", }, { key: \"onboarding-form\", name: \"Onboarding Form\", description: \"Demonstrates an onboarding form within a card, using logic to confirm terms acceptance. Components include Heading, Input Fields, Checkbox, and Button.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1NrgynTcdmVVKSYCsQwlOW/5fc4776c1860b498a59a2865b4e57ecb/Card-Onboarding-Composition.png\", }, ], }, related: { items: [ { name: \"Link\", link: \"https://guides.muibook.com/link\", }, { name: \"Icons\", link: \"https://guides.muibook.com/icons\", }, ], }, rules: [ { heading: \"Primary vs Secondary\", description: \"Primary buttons signify the main action on a page or view. Use only one per context to avoid confusion. Secondary buttons support the primary action and are used for supplementary or less critical choices.\", doContent: [ { description: \"Use one clear primary action, supported by a secondary button for an alternative or reversible choice.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5xunviJfjqUYYS5yWSfOqW/56b8cbaab4aeb86cb7585120c0ef911c/primary-actions-do.png\", }, ], dontContent: [ { description: \"Avoid giving multiple buttons equal visual weight, as this creates confusion about what to do next.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/64qD6QvbuqhFgHbj9IEOiD/f61a0250d0139abe4c8f6d9307ce5cad/primary-actions-do-not.png\", }, ], }, { heading: \"Primary and Tertiary\", description: \"Tertiary actions are low-priority, optional paths that support the experience without distracting from the primary or secondary actions. They are typically styled as text buttons and used for non-critical choices like “Skip” or “Learn more.”\", doContent: [ { description: \"The tertiary action offers an optional, less prominent path that doesn’t compete visually with the primary action.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3eFnCzhfq4d10CALfudUZU/de4b6a7d26964acae2245b73a158517d/tertiary-actions-do.png\", }, ], dontContent: [ { description: \"A tertiary action styled like a primary button creates visual confusion and implies equal importance, which undermines the intended hierarchy.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3K59awxzUKnnihZuDFyOpV/a8ba8a13d36bc63208a3079d0c4c86ac/tertiary-actions-do-not.png\", }, ], }, { heading: \"Pairing Buttons\", description: \"In circumstances where an icon-only button is paired with a button that includes both a label and an icon, use a medium icon for the icon-only button and an small icon for the labeled button. Follow a right-to-left layout, placing the primary action on the right.\", doContent: [ { description: \"Place the primary action on the right and use appropriate icon sizes: medium for icon-only, small for labeled buttons.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/34h9SltXeGjU2fRc5iM4PE/438f84d21e142c84bb98c1965a40b36b/button-groups-do.png\", }, ], dontContent: [ { description: \"Don’t place the primary action on the left or mismatch icon sizing for either button type.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5fwaA1NM6AAQMPbV2vwPMR/b0a491b6aca705f7493806fd13f99734/button-groups-do-not.png\", }, ], }, { heading: \"Table Button-Group\", description: \"You can group multiple actions in a table’s action cell, but be mindful not to overwhelm rows with too many buttons. Prioritize clarity by showing only the most relevant actions per row.\", doContent: [ { description: \"Use a secondary button for labeled actions paired with a tertiary icon-only button, and apply medium icons for icon-only buttons and small icons for labeled buttons.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7beVBzijhfRsyorthBC1fd/c7460f72456cdb1982b122df77dc9bf7/table-button-group-do.png\", }, ], dontContent: [ { description: \"Avoid using primary, tertiary, or attention variants for labeled buttons, as they can draw too much attention and disrupt the visual hierarchy.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7zoFP4Rl3InXCgP0tiDQg0/18ec719eb7a970da67bd12fea32c935b/table-button-group-do-not.png\", }, ], }, { heading: \"Button vs Link\", description: \"Buttons and links may look similar, but buttons are for triggering actions, while links are for navigating between pages or sections of your app or site.\", doContent: [ { description: \"Use a link when navigating to another page or view.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7xOE9DNKWgy1lZoT0FbMOW/cc13fbeeaa85b2507087645d925d7323/button-vs-link-do.png\", }, ], dontContent: [ { description: \"Don’t use a link to trigger tasks like submitting a form or saving data.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6tSAw6uBvg142Gzw7tenBc/4b8db682687b42f3c53fc32557cc4eee/button-vs-link-do-not.png\", }, ], }, { heading: \"Label Clarity\", description: \"\", doContent: [ { description: \"Use clear and concise labels for buttons: Ensure each button clearly indicates its action. E.g. 'Submit'.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3M9fgCF3JgFwDrooqXTvlf/92ad6b1c3faacebd8ea2884afadab24d/button-label-clarity-do.png\", }, ], dontContent: [ { description: \"Don't use ambiguous labels: Avoid using unclear or generic terms for buttons. E.g. 'Click here'.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1rXUNW1YiCVPJ2klPwL8WT/8137762316179653687bb1c1178ceb16/button-label-clarity-do-not.png\", }, ], }, { heading: \"Disabled Actions\", description: \"Avoid disabling call-to-action buttons to prevent form submission. Instead, consider using a combination of form validation, toasts, or alerts to inform users why they can’t proceed and how to resolve the issue.\", doContent: [ { description: \"Use form validation in combination with alerts to provide clear instructions on how to resolve the issue.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/41xe78AaqPHUxpd2RC6QoP/46b6f7217a8eb15bd928495d54a0728f/disabled-do.png\", }, ], dontContent: [ { description: \"Avoid disabling actions, as it prevents users from receiving feedback on why they can’t proceed.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6SiZPnnUlkMbNSJzxV8unt/7e6389d85eaac161d6cfd314190010f9/disabled-do-not.png\", }, ], }, { heading: \"Table Button: Icon-Only\", description: \"Use icon-only buttons in the end (far right) cell of a table row. When implementing tables in-browser, apply the correct action boolean and column auto-spacing to ensure the header and content align properly.\", doContent: [ { description: \"Use a tertiary icon-only button with a medium icon in the end table cell.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/EzbGECpviXXcjsmfftqEm/b21a44dec44b7243688fba26d2c9768c/table-button-do.png\", }, ], dontContent: [ { description: \"Don’t use other button variants or icon sizes in place of the designated icon-only approach.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/722XYLqqBwEJXE6qG0ZLDE/6e9a4d25fc5292688e62960090d92230/table-button-do-not.png\", }, ], }, { heading: \"Card, Dialog and Drawer Actions\", description: \"It is best practice to place actions in a footer for cards, dialogs, and drawers, providing a consistent location for users to find and interact with them.\", doContent: [ { description: \"Place actions in a footer within cards, dialogs, and drawers to ensure they are easily accessible and follow a consistent pattern.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4nFRwg1AOL74fQXM6OQvnV/d9c1eed80b86919656fb3ab8005f7d71/panel-actions-do.png\", }, ], dontContent: [ { description: \"Avoid placing actions in unconventional or hard-to-find locations within cards, dialogs, or drawers, as this can make them difficult for users to locate and use effectively.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3caBEJQxfRasuxw62RQVbw/4e3620f4e62f2fa8b8f8aa504625776a/panel-actions-do-not.png\", }, ], }, { heading: \"Icon-Only Actions\", description: \"\", doContent: [ { description: \"Use a 'medium' size icon when using an icon-only medium sized action\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3syzrNBEXbBjp5hGEUvF4M/0471f4b16939d8ee54deaf48997ff455/action-icon-do.png\", }, ], dontContent: [ { description: \"Avoid 'x-small', 'medium' or 'large' size icons within an icon-only medium sized action\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5V2TE85dY848jz1dP6Y0lC/b8e433c8abad5a4402ff1f86ddb8c848/action-icon-dont.png\", }, ], }, { heading: \"Text & Icon Actions\", description: \"Use icon-only buttons in the end (far right) cell of a table row. When implementing tables in-browser, apply the correct action boolean and column auto-spacing to ensure the header and content align properly.\", doContent: [ { description: \"Use the 'small' size icon within a medium sized action\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2W1xs6NPj3jRrW6ZaVGRvZ/3a11566b68fffda85bf5f780c4d6a394/dropdown-bar-icon-do.png\", }, ], dontContent: [ { description: \"Avoid 'x-small', 'medium' or 'large' size icons within a medium sized action\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6BgHzCgKqk44piisNH4tE6/c08d91a1cf5231a089844d20f6ab968c/dropdown-bar-icon-dont.png\", }, ], }, ], behaviour: { description: \"Buttons should provide visual feedback on hover and click. These states should be factored into the component and baked into the corresponding states in code.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3h2wNhGxd4f9AENDf3K7Qa/0ca6f8b224923e7fa9710735dc8f54e0/Button_-_Behaviour.png\", list: [ \"Default: Normal state.\", \"Hover: Changes when a user hovers over the button.\", \"Focus: Ensure buttons display a visible focus indicator when navigated to via keyboard.\", \"Disabled: Non-interactive, faded appearance.\", ], }, writing: { list: [ \"Keep button text short and action-oriented.\", \"Use sentence case for button text.\", \"Avoid using multiple lines of text on a button.\", ], }, }, }"
565
666
  }
566
667
  ],
567
668
  "exports": [
@@ -570,209 +671,117 @@
570
671
  "name": "muiDocs",
571
672
  "declaration": {
572
673
  "name": "muiDocs",
573
- "module": "src/components/mui-avatar/doc.ts"
674
+ "module": "src/components/mui-button/doc.ts"
574
675
  }
575
676
  }
576
677
  ]
577
678
  },
578
679
  {
579
680
  "kind": "javascript-module",
580
- "path": "src/components/mui-avatar/index.ts",
681
+ "path": "src/components/mui-button/index.ts",
581
682
  "declarations": [
582
683
  {
583
684
  "kind": "class",
584
685
  "description": "",
585
- "name": "MuiAvatar",
686
+ "name": "MuiButton",
586
687
  "members": [
587
688
  {
588
- "kind": "field",
589
- "name": "_imageFailed",
590
- "type": {
591
- "text": "boolean | undefined"
592
- },
593
- "privacy": "private"
689
+ "kind": "method",
690
+ "name": "syncButtonState",
691
+ "return": {
692
+ "type": {
693
+ "text": "void"
694
+ }
695
+ }
594
696
  },
595
697
  {
596
698
  "kind": "method",
597
- "name": "hasSlottedContent"
699
+ "name": "updateAvatarSizes",
700
+ "return": {
701
+ "type": {
702
+ "text": "void"
703
+ }
704
+ },
705
+ "parameters": [
706
+ {
707
+ "name": "nodes",
708
+ "type": {
709
+ "text": "Node[]"
710
+ }
711
+ }
712
+ ]
598
713
  },
599
714
  {
600
715
  "kind": "method",
601
- "name": "getInitials",
716
+ "name": "updateIconSizes",
717
+ "return": {
718
+ "type": {
719
+ "text": "void"
720
+ }
721
+ },
602
722
  "parameters": [
603
723
  {
604
- "name": "label",
724
+ "name": "nodes",
605
725
  "type": {
606
- "text": "string | null"
726
+ "text": "Node[]"
727
+ }
728
+ },
729
+ {
730
+ "name": "isIconOnly",
731
+ "type": {
732
+ "text": "boolean"
607
733
  }
608
734
  }
609
735
  ]
610
736
  },
611
737
  {
612
738
  "kind": "method",
613
- "name": "getBackgroundCSS"
739
+ "name": "updateBadgeSizes",
740
+ "return": {
741
+ "type": {
742
+ "text": "void"
743
+ }
744
+ },
745
+ "parameters": [
746
+ {
747
+ "name": "nodes",
748
+ "type": {
749
+ "text": "Node[]"
750
+ }
751
+ }
752
+ ]
614
753
  },
615
754
  {
616
755
  "kind": "method",
617
- "name": "render"
756
+ "name": "waitForPartMap",
757
+ "return": {
758
+ "type": {
759
+ "text": "Promise<void>"
760
+ }
761
+ }
618
762
  }
619
763
  ],
620
764
  "attributes": [
621
765
  {
622
- "name": "label"
766
+ "name": "onclick"
623
767
  },
624
768
  {
625
- "name": "image"
769
+ "name": "type"
626
770
  },
627
771
  {
628
- "name": "size"
772
+ "name": "aria-label"
629
773
  },
630
774
  {
631
- "name": "background"
775
+ "name": "disabled"
632
776
  },
633
777
  {
634
- "name": "background-color"
635
- }
636
- ],
637
- "superclass": {
638
- "name": "HTMLElement"
639
- },
640
- "tagName": "mui-avatar",
641
- "customElement": true
642
- }
643
- ],
644
- "exports": [
645
- {
646
- "kind": "custom-element-definition",
647
- "name": "mui-avatar",
648
- "declaration": {
649
- "name": "MuiAvatar",
650
- "module": "src/components/mui-avatar/index.ts"
651
- }
652
- }
653
- ]
654
- },
655
- {
656
- "kind": "javascript-module",
657
- "path": "src/components/mui-button/doc.ts",
658
- "declarations": [
659
- {
660
- "kind": "variable",
661
- "name": "muiDocs",
662
- "type": {
663
- "text": "MuiDocs"
664
- },
665
- "default": "{ Button: { title: \"Button\", description: \"Buttons are essential UI elements that trigger actions when clicked or tapped. They should be easily recognisable, provide clear feedback, and be accessible to all users.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/20zrQqKqJ17evXhkPwlDhq/e7ce6604a49aef64f2c4056d16ea1d97/Button_-_Home_Image.png\", ], figma: [\"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=3-570&t=fSFYVey9aCoE5oQa-1\"], storybook: [\"https://stories.muibook.com/?path=/docs/actions-button--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-button/index.ts\"], website: [\"https://muibook.com/#/button\"], guides: [\"https://guides.muibook.com/button\"], usage: { list: [ \"Reserve buttons for core actions on a page.\", \"Avoid using too many buttons on a single page to prevent confusion.\", \"Use clear and concise label text on buttons.\", \"Ensure labels are action-oriented. E.g. 'Save'.\", \"Ensure sufficient contrast between button text and background.\", ], }, accessibility: { designerList: [ \"Never put tooltips on disabled buttons as Tooltips can't be reached on all devices or by some assitive technologies.\", \"Provide accessible labels for buttons.\", \"For icon-only buttons, ensure an aria-label is provided to describe the action, as screen readers cannot interpret icons alone.\", \"Ensure buttons are focusable via keyboard navigation.\", \"Use appropriate ARIA roles and properties.\", ], engineerList: [ \"Never put tooltips on disabled buttons as Tooltips can't be reached on all devices or by some assitive technologies.\", \"Provide accessible labels for buttons.\", \"For icon-only buttons, ensure an aria-label is provided to describe the action, as screen readers cannot interpret icons alone.\", \"Ensure buttons are focusable via keyboard navigation.\", \"Use appropriate ARIA roles and properties.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/2LUuCpBtbL794vr5DyhMCz/44b7a3b75d0418915ebcdbf43bf1214c/button-anatomy.png\", list: [ \"LABEL: Text describing the button action. Use action verbs or phrases to tell the user what will happen next, and follow the button label content guidelines.\", \"BEFORE: An optional area to include an icon before the label. Use an icon to add additional affordance where the icon has a clear and well-established meaning. Most buttons don't require an icon, so be consistent and deliberate when you do.\", \"AFTER: An optional area to include an icon after the label, often used for a chevron-down-arrow icon to indicate a dropdown menu or accordion experiences where the placement is on the far right of the button.\", \"ICON ONLY: Use when the action is easily understood and space is limited. For example: close, add, or menu toggle. Avoid for unfamiliar or complex actions.\", ], }, variants: { items: [ { key: \"primary\", title: \"Primary\", description: \"Used for the main action on a page. It should stand out visually and be used sparingly to avoid confusion. When an icon is slotted into a button, it automatically inherits the button’s default icon size. If you need a different look or emphasis, you can override the size as required.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7szaFYOxeEH9F6gl0NEGz0/9657b870cd37918ae15f30cfab8b3747/button-primary.png\", }, { key: \"primary-icon-only\", title: \"Primary: Icon-Only\", description: \"An icon only version of the primary button. Used for the main action on a page. Best when the icon meaning is immediately clear, such as submitting, navigating forward, or creating new items. Uses a small size icon when pairing with other buttons, or medium size icon for standalone actions.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/uKSyCIeL7vmWxqVoxxkRD/6d12cec0aaad006d0245a1f6dea8e7ad/button-primary-icon.png\", }, { key: \"secondary\", title: \"Secondary\", description: \"Used for secondary actions that are not as critical as the primary action. It should be distinguishable but less prominent. When an icon is slotted into a button, it automatically inherits the button’s default icon size. If you need a different look or emphasis, you can override the size as required.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5MgDmdtcMDIIsHKlzMNpj1/42fbbce26a313f72c670ff91ff4fb500/button-secondary.png\", }, { key: \"secondary\", title: \"Secondary\", description: \"Used for secondary actions that are not as critical as the primary action. It should be distinguishable but less prominent. When an icon is slotted into a button, it automatically inherits the button’s default icon size. If you need a different look or emphasis, you can override the size as required.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5MgDmdtcMDIIsHKlzMNpj1/42fbbce26a313f72c670ff91ff4fb500/button-secondary.png\", }, { key: \"secondary-icon-only\", title: \"Secondary: Icon-only\", description: \"An icon only version of the secondary button. Used for secondary actions that support the main task. Best for actions like edit, copy, or open in a new window. Uses a small size icon when pairing with other buttons, or medium size icon for standalone actions.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3ebS7TgW2aziGoqc59UZAQ/be7c2f7d7d06970b2ddfae9fed5562b3/button-secondary-icon.png\", }, { key: \"tertiary\", title: \"Tertiary\", description: \"Used for less important actions or actions that complement primary and secondary actions. They should be the least prominent. When an icon is slotted into a button, it automatically inherits the button’s default icon size. If you need a different look or emphasis, you can override the size as required.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/78O8tlBpDFb3rxooJkRGgs/27138560e395e947c8782feba06d3f6c/button-tertiary.png\", }, { key: \"tertiary-icon-only\", title: \"Tertiary: Icon-only\", description: \"An icon only version of the tertiary button. Designed for lightweight or supporting actions with minimal emphasis, such as info, settings, expand, open a menu, or close. Uses a small size icon when pairing with other buttons, or medium size icon for standalone actions.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/50Nmp65TaWcwTixZhpLoUT/af5c8743d1482969667cf2a063428759/button-tertiary-icon.png\", }, { key: \"overlay\", title: \"Overlay\", description: \"Use on layered media or tinted surfaces where a subtle translucent action is needed. Keeps controls readable over imagery while staying visually lightweight.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5MgDmdtcMDIIsHKlzMNpj1/42fbbce26a313f72c670ff91ff4fb500/button-secondary.png\", }, { key: \"attention\", title: \"Attention\", description: \"Used for critical or potentially destructive actions, such as deleting an item or submitting sensitive information. It should stand out clearly to alert users and prompt deliberate interaction. When an icon is slotted into a button, it automatically inherits the button’s default icon size. If you need a different look or emphasis, you can override the size as required.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6XBCZnwgBw6zp2fjJQR7ko/70a3c7e8931b4fbf442dd997a57e1058/button-attention.png\", }, { key: \"attention-icon-only\", title: \"Attention: Icon-only\", description: \"An icon only version of the attention button. Used for critical or potentially destructive actions, such as delete, remove, or report. Uses a small size icon when pairing with other buttons, or medium size icon for standalone actions.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1TDTCC0SZZJL3cBEmqjs8Q/29ba81f3f76fb4d15aaa93d25aec87d4/button-attention-icon.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"in-browser-design-guidelines\", name: \"In-browser Design Guidelines\", description: \"A promotional example showcasing the in-browser design guidelines feature available on the Muibook website.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5YR94S9N6P5No4lNQFBxZb/45360d599105d16309486d33ca0705f1/Button_-_Composition.png\", }, { key: \"onboarding-form\", name: \"Onboarding Form\", description: \"Demonstrates an onboarding form within a card, using logic to confirm terms acceptance. Components include Heading, Input Fields, Checkbox, and Button.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1NrgynTcdmVVKSYCsQwlOW/5fc4776c1860b498a59a2865b4e57ecb/Card-Onboarding-Composition.png\", }, ], }, related: { items: [ { name: \"Link\", link: \"https://guides.muibook.com/link\", }, { name: \"Icons\", link: \"https://guides.muibook.com/icons\", }, ], }, rules: [ { heading: \"Primary vs Secondary\", description: \"Primary buttons signify the main action on a page or view. Use only one per context to avoid confusion. Secondary buttons support the primary action and are used for supplementary or less critical choices.\", doContent: [ { description: \"Use one clear primary action, supported by a secondary button for an alternative or reversible choice.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5xunviJfjqUYYS5yWSfOqW/56b8cbaab4aeb86cb7585120c0ef911c/primary-actions-do.png\", }, ], dontContent: [ { description: \"Avoid giving multiple buttons equal visual weight, as this creates confusion about what to do next.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/64qD6QvbuqhFgHbj9IEOiD/f61a0250d0139abe4c8f6d9307ce5cad/primary-actions-do-not.png\", }, ], }, { heading: \"Primary and Tertiary\", description: \"Tertiary actions are low-priority, optional paths that support the experience without distracting from the primary or secondary actions. They are typically styled as text buttons and used for non-critical choices like “Skip” or “Learn more.”\", doContent: [ { description: \"The tertiary action offers an optional, less prominent path that doesn’t compete visually with the primary action.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3eFnCzhfq4d10CALfudUZU/de4b6a7d26964acae2245b73a158517d/tertiary-actions-do.png\", }, ], dontContent: [ { description: \"A tertiary action styled like a primary button creates visual confusion and implies equal importance, which undermines the intended hierarchy.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3K59awxzUKnnihZuDFyOpV/a8ba8a13d36bc63208a3079d0c4c86ac/tertiary-actions-do-not.png\", }, ], }, { heading: \"Pairing Buttons\", description: \"In circumstances where an icon-only button is paired with a button that includes both a label and an icon, use a medium icon for the icon-only button and an small icon for the labeled button. Follow a right-to-left layout, placing the primary action on the right.\", doContent: [ { description: \"Place the primary action on the right and use appropriate icon sizes: medium for icon-only, small for labeled buttons.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/34h9SltXeGjU2fRc5iM4PE/438f84d21e142c84bb98c1965a40b36b/button-groups-do.png\", }, ], dontContent: [ { description: \"Don’t place the primary action on the left or mismatch icon sizing for either button type.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5fwaA1NM6AAQMPbV2vwPMR/b0a491b6aca705f7493806fd13f99734/button-groups-do-not.png\", }, ], }, { heading: \"Table Button-Group\", description: \"You can group multiple actions in a table’s action cell, but be mindful not to overwhelm rows with too many buttons. Prioritize clarity by showing only the most relevant actions per row.\", doContent: [ { description: \"Use a secondary button for labeled actions paired with a tertiary icon-only button, and apply medium icons for icon-only buttons and small icons for labeled buttons.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7beVBzijhfRsyorthBC1fd/c7460f72456cdb1982b122df77dc9bf7/table-button-group-do.png\", }, ], dontContent: [ { description: \"Avoid using primary, tertiary, or attention variants for labeled buttons, as they can draw too much attention and disrupt the visual hierarchy.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7zoFP4Rl3InXCgP0tiDQg0/18ec719eb7a970da67bd12fea32c935b/table-button-group-do-not.png\", }, ], }, { heading: \"Button vs Link\", description: \"Buttons and links may look similar, but buttons are for triggering actions, while links are for navigating between pages or sections of your app or site.\", doContent: [ { description: \"Use a link when navigating to another page or view.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7xOE9DNKWgy1lZoT0FbMOW/cc13fbeeaa85b2507087645d925d7323/button-vs-link-do.png\", }, ], dontContent: [ { description: \"Don’t use a link to trigger tasks like submitting a form or saving data.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6tSAw6uBvg142Gzw7tenBc/4b8db682687b42f3c53fc32557cc4eee/button-vs-link-do-not.png\", }, ], }, { heading: \"Label Clarity\", description: \"\", doContent: [ { description: \"Use clear and concise labels for buttons: Ensure each button clearly indicates its action. E.g. 'Submit'.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3M9fgCF3JgFwDrooqXTvlf/92ad6b1c3faacebd8ea2884afadab24d/button-label-clarity-do.png\", }, ], dontContent: [ { description: \"Don't use ambiguous labels: Avoid using unclear or generic terms for buttons. E.g. 'Click here'.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1rXUNW1YiCVPJ2klPwL8WT/8137762316179653687bb1c1178ceb16/button-label-clarity-do-not.png\", }, ], }, { heading: \"Disabled Actions\", description: \"Avoid disabling call-to-action buttons to prevent form submission. Instead, consider using a combination of form validation, toasts, or alerts to inform users why they can’t proceed and how to resolve the issue.\", doContent: [ { description: \"Use form validation in combination with alerts to provide clear instructions on how to resolve the issue.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/41xe78AaqPHUxpd2RC6QoP/46b6f7217a8eb15bd928495d54a0728f/disabled-do.png\", }, ], dontContent: [ { description: \"Avoid disabling actions, as it prevents users from receiving feedback on why they can’t proceed.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6SiZPnnUlkMbNSJzxV8unt/7e6389d85eaac161d6cfd314190010f9/disabled-do-not.png\", }, ], }, { heading: \"Table Button: Icon-Only\", description: \"Use icon-only buttons in the end (far right) cell of a table row. When implementing tables in-browser, apply the correct action boolean and column auto-spacing to ensure the header and content align properly.\", doContent: [ { description: \"Use a tertiary icon-only button with a medium icon in the end table cell.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/EzbGECpviXXcjsmfftqEm/b21a44dec44b7243688fba26d2c9768c/table-button-do.png\", }, ], dontContent: [ { description: \"Don’t use other button variants or icon sizes in place of the designated icon-only approach.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/722XYLqqBwEJXE6qG0ZLDE/6e9a4d25fc5292688e62960090d92230/table-button-do-not.png\", }, ], }, { heading: \"Card, Dialog and Drawer Actions\", description: \"It is best practice to place actions in a footer for cards, dialogs, and drawers, providing a consistent location for users to find and interact with them.\", doContent: [ { description: \"Place actions in a footer within cards, dialogs, and drawers to ensure they are easily accessible and follow a consistent pattern.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4nFRwg1AOL74fQXM6OQvnV/d9c1eed80b86919656fb3ab8005f7d71/panel-actions-do.png\", }, ], dontContent: [ { description: \"Avoid placing actions in unconventional or hard-to-find locations within cards, dialogs, or drawers, as this can make them difficult for users to locate and use effectively.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3caBEJQxfRasuxw62RQVbw/4e3620f4e62f2fa8b8f8aa504625776a/panel-actions-do-not.png\", }, ], }, { heading: \"Icon-Only Actions\", description: \"\", doContent: [ { description: \"Use a 'medium' size icon when using an icon-only medium sized action\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3syzrNBEXbBjp5hGEUvF4M/0471f4b16939d8ee54deaf48997ff455/action-icon-do.png\", }, ], dontContent: [ { description: \"Avoid 'x-small', 'medium' or 'large' size icons within an icon-only medium sized action\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5V2TE85dY848jz1dP6Y0lC/b8e433c8abad5a4402ff1f86ddb8c848/action-icon-dont.png\", }, ], }, { heading: \"Text & Icon Actions\", description: \"Use icon-only buttons in the end (far right) cell of a table row. When implementing tables in-browser, apply the correct action boolean and column auto-spacing to ensure the header and content align properly.\", doContent: [ { description: \"Use the 'small' size icon within a medium sized action\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2W1xs6NPj3jRrW6ZaVGRvZ/3a11566b68fffda85bf5f780c4d6a394/dropdown-bar-icon-do.png\", }, ], dontContent: [ { description: \"Avoid 'x-small', 'medium' or 'large' size icons within a medium sized action\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6BgHzCgKqk44piisNH4tE6/c08d91a1cf5231a089844d20f6ab968c/dropdown-bar-icon-dont.png\", }, ], }, ], behaviour: { description: \"Buttons should provide visual feedback on hover and click. These states should be factored into the component and baked into the corresponding states in code.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3h2wNhGxd4f9AENDf3K7Qa/0ca6f8b224923e7fa9710735dc8f54e0/Button_-_Behaviour.png\", list: [ \"Default: Normal state.\", \"Hover: Changes when a user hovers over the button.\", \"Focus: Ensure buttons display a visible focus indicator when navigated to via keyboard.\", \"Disabled: Non-interactive, faded appearance.\", ], }, writing: { list: [ \"Keep button text short and action-oriented.\", \"Use sentence case for button text.\", \"Avoid using multiple lines of text on a button.\", ], }, }, }"
666
- }
667
- ],
668
- "exports": [
669
- {
670
- "kind": "js",
671
- "name": "muiDocs",
672
- "declaration": {
673
- "name": "muiDocs",
674
- "module": "src/components/mui-button/doc.ts"
675
- }
676
- }
677
- ]
678
- },
679
- {
680
- "kind": "javascript-module",
681
- "path": "src/components/mui-button/index.ts",
682
- "declarations": [
683
- {
684
- "kind": "class",
685
- "description": "",
686
- "name": "MuiButton",
687
- "members": [
688
- {
689
- "kind": "method",
690
- "name": "updateAvatarSizes",
691
- "return": {
692
- "type": {
693
- "text": "void"
694
- }
695
- },
696
- "parameters": [
697
- {
698
- "name": "nodes",
699
- "type": {
700
- "text": "Node[]"
701
- }
702
- }
703
- ]
704
- },
705
- {
706
- "kind": "method",
707
- "name": "updateIconSizes",
708
- "return": {
709
- "type": {
710
- "text": "void"
711
- }
712
- },
713
- "parameters": [
714
- {
715
- "name": "nodes",
716
- "type": {
717
- "text": "Node[]"
718
- }
719
- },
720
- {
721
- "name": "isIconOnly",
722
- "type": {
723
- "text": "boolean"
724
- }
725
- }
726
- ]
727
- },
728
- {
729
- "kind": "method",
730
- "name": "updateBadgeSizes",
731
- "return": {
732
- "type": {
733
- "text": "void"
734
- }
735
- },
736
- "parameters": [
737
- {
738
- "name": "nodes",
739
- "type": {
740
- "text": "Node[]"
741
- }
742
- }
743
- ]
744
- },
745
- {
746
- "kind": "method",
747
- "name": "waitForPartMap",
748
- "return": {
749
- "type": {
750
- "text": "Promise<void>"
751
- }
752
- }
753
- }
754
- ],
755
- "attributes": [
756
- {
757
- "name": "onclick"
758
- },
759
- {
760
- "name": "type"
761
- },
762
- {
763
- "name": "aria-label"
764
- },
765
- {
766
- "name": "disabled"
767
- },
768
- {
769
- "name": "variant"
770
- },
771
- {
772
- "name": "size"
773
- },
774
- {
775
- "name": "usage"
778
+ "name": "variant"
779
+ },
780
+ {
781
+ "name": "size"
782
+ },
783
+ {
784
+ "name": "usage"
776
785
  }
777
786
  ],
778
787
  "superclass": {
@@ -1034,36 +1043,6 @@
1034
1043
  "declarations": [],
1035
1044
  "exports": []
1036
1045
  },
1037
- {
1038
- "kind": "javascript-module",
1039
- "path": "src/components/mui-carousel/doc.ts",
1040
- "declarations": [
1041
- {
1042
- "kind": "variable",
1043
- "name": "muiDocs",
1044
- "type": {
1045
- "text": "MuiDocs"
1046
- },
1047
- "default": "{ Carousel: { title: \"Carousel\", description: \"A carousel component with tab-based navigation, enabling users to switch between views or content sections with ease.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/55yS6ecrFIoh0pA08R98VB/07a93872e746c5723b7b4b21f0a9d56a/Carousel_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=958-8697&t=0ytskb8cxriEmdz2-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/navigation-carousel--docs\"], github: [\"https://github.com/michaeltrilford/muibook/tree/main/src/components/mui-carousel\"], website: [\"https://muibook.com/#/carousel\"], guides: [\"https://guides.muibook.com/carousel\"], usage: { list: [ \"Use to present grouped content that benefits from both tabbed access and horizontal transitions.\", \"Ideal for feature highlights, onboarding steps, or content previews.\", \"Ensure tab labels are short and clearly indicate the content behind each panel.\", \"Avoid using for unrelated content or when vertical scrolling is more appropriate.\", \"When adding custom content, account for the placement of carousel controls and maintain sufficient whitespace for readability and alignment.\", \"Swap out default controls when a different interaction pattern better suits the content or context.\", ], }, accessibility: { designerList: [ \"Users can navigate between carousel items using the left/right arrow keys, as well as Home and End keys.\", \"The active tab is always keyboard-focusable and shows a visible focus outline for clarity.\", \"Tabs are marked up using semantic roles (like tablist and tab) to help assistive technologies understand the structure.\", \"Behind the scenes, attributes like aria-selected and tabindex update automatically to reflect which tab is active.\", ], engineerList: [ \"Left/Right arrows, Home and End keys let keyboard users navigate between carousel items.\", \"aria-selected and tabindex attributes are updated on each tab-item when it becomes active or inactive.\", \"Each active tab-item can receive focus and shows a focus-visible outline.\", \"tab-bar uses role=tablist to group related tab-items and each tab-item uses role=tab within the tab-bar.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/7lrQyuy00XTDGTww5lWXsH/427804b3af03935cc06e8a691a5006a0/Carousel_-_Anatomy.png\", list: [ \"The outer wrapper that defines the structure, sliding behaviour, and background styling of the carousel.\", \"A flexible area where custom content is added. Designers are responsible for setting internal spacing, layout, and composition.\", \"Navigation elements such as tabs, dots, or arrows that float above the content. These controls can be customized or replaced based on the use case.\", ], }, variants: { items: [ { key: \"position\", title: \"Position\", description: \"Carousel controls can be positioned at any side or corner of the container, including top center, right middle, bottom center, left middle, top left, top right, bottom left, and bottom right.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/Yc6eg8YWdiiSiiPzR588D/bdfbad0967d9cc059310bd1406c656c5/position-bottom.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"product-carousel\", name: \"Product Carousel\", description: \"Demonstrates how to add custom compositions and layouts within the carousel panels.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4NRMfGil4AcMUh7FDhYyHz/7c4636822eba6d3ae15e684f50d10fdd/Carousel_-_Composition.png\", }, { key: \"carousel-showcase\", name: \"Carousel Showcase\", description: \"This example from the GuruSuite website demonstrates the carousel used to showcase two of the products on offer.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2TaRRm351HyujF9mT2w1wH/3958f69e939d20618751742130dc5f06/GuruSuite-Carousel-Composition.png\", }, ], }, related: { items: [ { name: \"Tab Bar\", link: \"https://guides.muibook.com/tab-bar\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
1048
- }
1049
- ],
1050
- "exports": [
1051
- {
1052
- "kind": "js",
1053
- "name": "muiDocs",
1054
- "declaration": {
1055
- "name": "muiDocs",
1056
- "module": "src/components/mui-carousel/doc.ts"
1057
- }
1058
- }
1059
- ]
1060
- },
1061
- {
1062
- "kind": "javascript-module",
1063
- "path": "src/components/mui-carousel/index.ts",
1064
- "declarations": [],
1065
- "exports": []
1066
- },
1067
1046
  {
1068
1047
  "kind": "javascript-module",
1069
1048
  "path": "src/components/mui-checkbox/doc.ts",
@@ -1172,6 +1151,36 @@
1172
1151
  }
1173
1152
  ]
1174
1153
  },
1154
+ {
1155
+ "kind": "javascript-module",
1156
+ "path": "src/components/mui-carousel/doc.ts",
1157
+ "declarations": [
1158
+ {
1159
+ "kind": "variable",
1160
+ "name": "muiDocs",
1161
+ "type": {
1162
+ "text": "MuiDocs"
1163
+ },
1164
+ "default": "{ Carousel: { title: \"Carousel\", description: \"A carousel component with tab-based navigation, enabling users to switch between views or content sections with ease.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/55yS6ecrFIoh0pA08R98VB/07a93872e746c5723b7b4b21f0a9d56a/Carousel_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=958-8697&t=0ytskb8cxriEmdz2-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/navigation-carousel--docs\"], github: [\"https://github.com/michaeltrilford/muibook/tree/main/src/components/mui-carousel\"], website: [\"https://muibook.com/#/carousel\"], guides: [\"https://guides.muibook.com/carousel\"], usage: { list: [ \"Use to present grouped content that benefits from both tabbed access and horizontal transitions.\", \"Ideal for feature highlights, onboarding steps, or content previews.\", \"Ensure tab labels are short and clearly indicate the content behind each panel.\", \"Avoid using for unrelated content or when vertical scrolling is more appropriate.\", \"When adding custom content, account for the placement of carousel controls and maintain sufficient whitespace for readability and alignment.\", \"Swap out default controls when a different interaction pattern better suits the content or context.\", ], }, accessibility: { designerList: [ \"Users can navigate between carousel items using the left/right arrow keys, as well as Home and End keys.\", \"The active tab is always keyboard-focusable and shows a visible focus outline for clarity.\", \"Tabs are marked up using semantic roles (like tablist and tab) to help assistive technologies understand the structure.\", \"Behind the scenes, attributes like aria-selected and tabindex update automatically to reflect which tab is active.\", ], engineerList: [ \"Left/Right arrows, Home and End keys let keyboard users navigate between carousel items.\", \"aria-selected and tabindex attributes are updated on each tab-item when it becomes active or inactive.\", \"Each active tab-item can receive focus and shows a focus-visible outline.\", \"tab-bar uses role=tablist to group related tab-items and each tab-item uses role=tab within the tab-bar.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/7lrQyuy00XTDGTww5lWXsH/427804b3af03935cc06e8a691a5006a0/Carousel_-_Anatomy.png\", list: [ \"The outer wrapper that defines the structure, sliding behaviour, and background styling of the carousel.\", \"A flexible area where custom content is added. Designers are responsible for setting internal spacing, layout, and composition.\", \"Navigation elements such as tabs, dots, or arrows that float above the content. These controls can be customized or replaced based on the use case.\", ], }, variants: { items: [ { key: \"position\", title: \"Position\", description: \"Carousel controls can be positioned at any side or corner of the container, including top center, right middle, bottom center, left middle, top left, top right, bottom left, and bottom right.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/Yc6eg8YWdiiSiiPzR588D/bdfbad0967d9cc059310bd1406c656c5/position-bottom.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"product-carousel\", name: \"Product Carousel\", description: \"Demonstrates how to add custom compositions and layouts within the carousel panels.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4NRMfGil4AcMUh7FDhYyHz/7c4636822eba6d3ae15e684f50d10fdd/Carousel_-_Composition.png\", }, { key: \"carousel-showcase\", name: \"Carousel Showcase\", description: \"This example from the GuruSuite website demonstrates the carousel used to showcase two of the products on offer.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2TaRRm351HyujF9mT2w1wH/3958f69e939d20618751742130dc5f06/GuruSuite-Carousel-Composition.png\", }, ], }, related: { items: [ { name: \"Tab Bar\", link: \"https://guides.muibook.com/tab-bar\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
1165
+ }
1166
+ ],
1167
+ "exports": [
1168
+ {
1169
+ "kind": "js",
1170
+ "name": "muiDocs",
1171
+ "declaration": {
1172
+ "name": "muiDocs",
1173
+ "module": "src/components/mui-carousel/doc.ts"
1174
+ }
1175
+ }
1176
+ ]
1177
+ },
1178
+ {
1179
+ "kind": "javascript-module",
1180
+ "path": "src/components/mui-carousel/index.ts",
1181
+ "declarations": [],
1182
+ "exports": []
1183
+ },
1175
1184
  {
1176
1185
  "kind": "javascript-module",
1177
1186
  "path": "src/components/mui-chip/doc.ts",
@@ -1831,7 +1840,7 @@
1831
1840
  "type": {
1832
1841
  "text": "MuiDocs"
1833
1842
  },
1834
- "default": "{ Dialog: { title: \"Dialog\", description: \"A modal window that prompts users to take a specific action or provide additional information without navigating away from the current context.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/4jrr9tVVDi9Kz8lhaxWToe/8169a3e57f30572fbf6dd504f360fedd/Dialog_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=780-4948&t=KhmyUmaNDWKTGtrH-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/content-dialog--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-dialog/index.ts\"], website: [\"https://muibook.com/#/dialog\"], guides: [\"https://guides.muibook.com/dialog\"], usage: { list: [ \"Used to alert the user of potentially a harmful action.\", \"Use for focused interactions that require attention and immediate action.\", \"Use content-max-height='none' when dialog content should size naturally (for example, native media players).\", ], }, accessibility: { designerList: [ \"Ensure dialogs are accessible via keyboard and screen readers.\", \"Use ARIA roles and properties to indicate the state of the dialog (visible/hidden).\", \"Ensure the focus remains within the dialog while it is open.\", ], engineerList: [ \"Uses role='dialog' and aria-modal='true' for screen readers.\", \"Supports aria-labelledby and aria-describedby to provide accessible titles and descriptions.\", \"Focus is managed by the browser’s native dialog behavior when open.\", \"The close button includes aria-label='Close Icon'.\", \"Footer is hidden when empty to reduce screen reader noise.\", \"Clicking the backdrop closes the dialog.\", \"When open, consumers must trap focus in the dialog and apply inert/aria-hidden to the background.\", \"The component exposes 'mui-dialog-open' and 'mui-dialog-close' events so external state (e.g. React setDialogOpen(false)) stays in sync with the dialog’s internal logic.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/3Qs9rIWX7LeUjQ3ioObKBe/4848a3b0ad303a12eef5739ddd1c6169/Dialog_-_Anatomy.png\", list: [ \"Heading: Text that describes the purpose or contents of the dialog.\", \"Close: An icon or button that allows users to close the dialog.\", \"Container: Controls the position of the dialog and appears as an overlay.\", \"Footer: Optional section for additional actions, such as 'Cancel' or 'Save'.\", ], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"\", items: [ { key: \"\", name: \"\", description: \"\", image: \"\", }, ], }, related: { items: [ { name: \"Drawer\", link: \"https://guides.muibook.com/drawer\", }, { name: \"Button\", link: \"https://guides.muibook.com/button\", }, ], }, rules: [ { heading: \"Dismiss the Dialog\", description: \"\", doContent: [ { description: \"Dismiss the Dialog by clicking the cross icon, cancel button or the surrounding background.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/VxeZZCz9ekrnQQ5AByJ5W/5671672f2bb94c91d913d443e6c73f75/dialog-dismiss-do.png\", }, ], dontContent: [ { description: \"Avoid hiding the close button or replacing the footer action with a close function.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/69Iqe3DgTqm9Xy1m1aBnlT/f858753bf988bb08e6255c3f3b790abe/dialog-dismiss-dont.png\", }, ], }, { heading: \"Content Clarity\", description: \"\", doContent: [ { description: \"Use a simple, stacked layout that ensures clarity and flexibility in the limited space. Keep the content clear, concise, and easy to read.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6Th9UaPwtSwR5TD93JvKOS/206fe41d70d2f20aa5ef02478eeb340a/dialog-content-do.png\", }, ], dontContent: [ { description: \"Don’t use complex layouts like grids or overcrowd the dialog with excessive content that may hinder readability.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5OeRzyHdAW5m7TrePK4Ksq/09d0b82ff09a67465b9606a95689063f/dialog-content-do-not.png\", }, ], }, ], behaviour: { list: [ \"Dialogs appear as a temporary overlay on top of the main content.\", \"The dialog smoothly animates onto the screen to enhance user experience.\", \"Users can click the background to dismiss the dialog.\", ], }, writing: { list: [ \"Concise Information: Keep dialog content simple and to the point.\", \"Clear Labels: Use clear labels for actions and navigation items.\", \"Avoid Overcrowding: Do not overcrowd the dialog with too much information.\", ], }, }, }"
1843
+ "default": "{ Dialog: { title: \"Dialog\", description: \"A modal window that prompts users to take a specific action or provide additional information without navigating away from the current context.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/4jrr9tVVDi9Kz8lhaxWToe/8169a3e57f30572fbf6dd504f360fedd/Dialog_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=780-4948&t=KhmyUmaNDWKTGtrH-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/content-dialog--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-dialog/index.ts\"], website: [\"https://muibook.com/#/dialog\"], guides: [\"https://guides.muibook.com/dialog\"], usage: { list: [ \"Used to alert the user of potentially a harmful action.\", \"Use for focused interactions that require attention and immediate action.\", \"Use content-max-height='none' when dialog content should size naturally (for example, native media players).\", \"When no title slot is provided, the dialog does not render the header row or built-in close action.\", ], }, accessibility: { designerList: [ \"Ensure dialogs are accessible via keyboard and screen readers.\", \"Use ARIA roles and properties to indicate the state of the dialog (visible/hidden).\", \"Ensure the focus remains within the dialog while it is open.\", ], engineerList: [ \"Uses role='dialog' and aria-modal='true' for screen readers.\", \"Supports aria-labelledby and aria-describedby to provide accessible titles and descriptions.\", \"Focus is managed by the browser’s native dialog behavior when open.\", \"When a title slot is present, the close button includes aria-label='Close Icon'.\", \"Footer is hidden when empty to reduce screen reader noise.\", \"Clicking the backdrop closes the dialog.\", \"When open, consumers must trap focus in the dialog and apply inert/aria-hidden to the background.\", \"The component exposes 'mui-dialog-open' and 'mui-dialog-close' events so external state (e.g. React setDialogOpen(false)) stays in sync with the dialog’s internal logic.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/3Qs9rIWX7LeUjQ3ioObKBe/4848a3b0ad303a12eef5739ddd1c6169/Dialog_-_Anatomy.png\", list: [ \"Heading: Optional text that describes the purpose or contents of the dialog.\", \"Close: Optional icon action shown when the dialog header is present.\", \"Container: Controls the position of the dialog and appears as an overlay.\", \"Footer: Optional section for additional actions, such as 'Cancel' or 'Save'.\", ], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"\", items: [ { key: \"\", name: \"\", description: \"\", image: \"\", }, ], }, related: { items: [ { name: \"Drawer\", link: \"https://guides.muibook.com/drawer\", }, { name: \"Button\", link: \"https://guides.muibook.com/button\", }, ], }, rules: [ { heading: \"Dismiss the Dialog\", description: \"\", doContent: [ { description: \"Dismiss the Dialog by clicking the cross icon, cancel button or the surrounding background.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/VxeZZCz9ekrnQQ5AByJ5W/5671672f2bb94c91d913d443e6c73f75/dialog-dismiss-do.png\", }, ], dontContent: [ { description: \"Avoid hiding the close button or replacing the footer action with a close function.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/69Iqe3DgTqm9Xy1m1aBnlT/f858753bf988bb08e6255c3f3b790abe/dialog-dismiss-dont.png\", }, ], }, { heading: \"Content Clarity\", description: \"\", doContent: [ { description: \"Use a simple, stacked layout that ensures clarity and flexibility in the limited space. Keep the content clear, concise, and easy to read.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6Th9UaPwtSwR5TD93JvKOS/206fe41d70d2f20aa5ef02478eeb340a/dialog-content-do.png\", }, ], dontContent: [ { description: \"Don’t use complex layouts like grids or overcrowd the dialog with excessive content that may hinder readability.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5OeRzyHdAW5m7TrePK4Ksq/09d0b82ff09a67465b9606a95689063f/dialog-content-do-not.png\", }, ], }, ], behaviour: { list: [ \"Dialogs appear as a temporary overlay on top of the main content.\", \"The dialog smoothly animates onto the screen to enhance user experience.\", \"Users can click the background to dismiss the dialog.\", ], }, writing: { list: [ \"Concise Information: Keep dialog content simple and to the point.\", \"Clear Labels: Use clear labels for actions and navigation items.\", \"Avoid Overcrowding: Do not overcrowd the dialog with too much information.\", ], }, }, }"
1835
1844
  }
1836
1845
  ],
1837
1846
  "exports": [
@@ -1878,6 +1887,27 @@
1878
1887
  },
1879
1888
  "privacy": "private"
1880
1889
  },
1890
+ {
1891
+ "kind": "field",
1892
+ "name": "headerEl",
1893
+ "type": {
1894
+ "text": "HTMLElement | null"
1895
+ },
1896
+ "privacy": "private"
1897
+ },
1898
+ {
1899
+ "kind": "field",
1900
+ "name": "titleSlot",
1901
+ "type": {
1902
+ "text": "HTMLSlotElement | null"
1903
+ },
1904
+ "privacy": "private"
1905
+ },
1906
+ {
1907
+ "kind": "method",
1908
+ "name": "updateHeaderVisibility",
1909
+ "privacy": "private"
1910
+ },
1881
1911
  {
1882
1912
  "kind": "method",
1883
1913
  "name": "updateFooterVisibility",
@@ -2453,7 +2483,7 @@
2453
2483
  {
2454
2484
  "kind": "field",
2455
2485
  "name": "innerHTML",
2456
- "default": "` <style> :host { display: flex; flex-direction: column; } .field-content { display: flex; flex-direction: column; } .message-container { display: none; } :host([has-message]) .message-container { display: flex; margin-top: var(--space-300); } :host([size=\"x-small\"][has-message]) .message-container { margin-top: var(--space-100); } :host([size=\"small\"][has-message]) .message-container { margin-top: var(--space-100); } :host([size=\"medium\"][has-message]) .message-container { margin-top: var(--space-300); } :host([size=\"large\"][has-message]) .message-container { margin-top: var(--space-300); } ::slotted(mui-checkbox) { padding-left: var(--space-025); } </style> <div class=\"field-content\"> <slot></slot> </div> <div class=\"message-container\"> <slot name=\"message\"></slot> <div class=\"message-fallback\"></div> </div> `"
2486
+ "default": "` <style> :host { display: flex; flex-direction: column; } .field-content { display: flex; flex-direction: column; } .message-container { display: none; } :host([has-message]) .message-container { display: flex; margin-top: var(--space-300); } :host([size=\"x-small\"][has-message]) .message-container { margin-top: var(--space-100); } :host([size=\"small\"][has-message]) .message-container { margin-top: var(--space-200); } :host([size=\"medium\"][has-message]) .message-container { margin-top: var(--space-300); } :host([size=\"large\"][has-message]) .message-container { margin-top: var(--space-300); } ::slotted(mui-checkbox) { padding-left: var(--space-025); } </style> <div class=\"field-content\"> <slot></slot> </div> <div class=\"message-container\"> <slot name=\"message\"></slot> <div class=\"message-fallback\"></div> </div> `"
2457
2487
  }
2458
2488
  ],
2459
2489
  "attributes": [
@@ -2753,7 +2783,7 @@
2753
2783
  },
2754
2784
  {
2755
2785
  "kind": "javascript-module",
2756
- "path": "src/components/mui-form-hint/doc.ts",
2786
+ "path": "src/components/mui-form-message/doc.ts",
2757
2787
  "declarations": [
2758
2788
  {
2759
2789
  "kind": "variable",
@@ -2761,7 +2791,7 @@
2761
2791
  "type": {
2762
2792
  "text": "MuiDocs"
2763
2793
  },
2764
- "default": "{ FormMessage: { title: \"Form Message\", description: \"Form Message (mui-form-message) provides supporting text below form controls for guidance, validation, and status messaging.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-form-message/index.ts\"], website: [\"https://muibook.com/#/form-message\"], guides: [\"https://guides.muibook.com/field\"], usage: { list: [ \"Use for supporting text below form controls.\", \"Use inside mui-field with slot='message' for consistent spacing and placement.\", \"When used in Form Group layouts, attach each Form Message to its specific Field using slot='message'.\", \"Form Message wraps Mui Body with form-oriented defaults.\", \"Form Message renders an info icon by default; provide slot='before' to replace it.\", \"Supporting copy is intentionally knocked back so inputs and selections stay visually primary.\", \"Slot icons in before/after using Mui Body slot behavior.\", \"Style state feedback through slotted icon color and text styling in usage context.\", \"Use size to match nearby body text (x-small, small, medium, large).\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"] }, anatomy: { image: \"\", list: [\"Optional leading slot\", \"Hint text\", \"Optional trailing slot\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Field\", link: \"https://guides.muibook.com/field\" }, { name: \"Input\", link: \"https://guides.muibook.com/input\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, FormHint: { title: \"Form Message\", description: \"Form Message (mui-form-message) provides supporting text below form controls for guidance, validation, and status messaging.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-form-message/index.ts\"], website: [\"https://muibook.com/#/form-message\"], guides: [\"https://guides.muibook.com/field\"], usage: { list: [ \"Use for supporting text below form controls.\", \"Use inside mui-field with slot='message' for consistent spacing and placement.\", \"When used in Form Group layouts, attach each Form Message to its specific Field using slot='message'.\", \"Form Message wraps Mui Body with form-oriented defaults.\", \"Form Message renders an info icon by default; provide slot='before' to replace it.\", \"Supporting copy is intentionally knocked back so inputs and selections stay visually primary.\", \"Slot icons in before/after using Mui Body slot behavior.\", \"Style state feedback through slotted icon color and text styling in usage context.\", \"Use size to match nearby body text (x-small, small, medium, large).\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"] }, anatomy: { image: \"\", list: [\"Optional leading slot\", \"Hint text\", \"Optional trailing slot\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Field\", link: \"https://guides.muibook.com/field\" }, { name: \"Input\", link: \"https://guides.muibook.com/input\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, }"
2794
+ "default": "{ FormMessage: { title: \"Form Message\", description: \"Form Message provides supporting text below form controls for guidance, validation, and status messaging.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-form-message/index.ts\"], website: [\"https://muibook.com/#/form-message\"], guides: [\"https://guides.muibook.com/field\"], usage: { list: [ \"Use for supporting text below form controls.\", \"Use inside mui-field with slot='message' for consistent spacing and placement.\", \"When used in Form Group layouts, attach each Form Message to its specific Field using slot='message'.\", \"Form Message wraps Mui Body with form-oriented defaults.\", \"Form Message renders an info icon by default; provide slot='before' to replace it.\", \"Supporting copy is intentionally knocked back so inputs and selections stay visually primary.\", \"Slot icons in before/after using Mui Body slot behavior.\", \"Style state feedback through slotted icon color and text styling in usage context.\", \"Use size to match nearby body text (x-small, small, medium, large).\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"] }, anatomy: { image: \"\", list: [\"Optional leading slot\", \"Hint text\", \"Optional trailing slot\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Field\", link: \"https://guides.muibook.com/field\" }, { name: \"Input\", link: \"https://guides.muibook.com/input\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, }"
2765
2795
  }
2766
2796
  ],
2767
2797
  "exports": [
@@ -2770,17 +2800,11 @@
2770
2800
  "name": "muiDocs",
2771
2801
  "declaration": {
2772
2802
  "name": "muiDocs",
2773
- "module": "src/components/mui-form-hint/doc.ts"
2803
+ "module": "src/components/mui-form-message/doc.ts"
2774
2804
  }
2775
2805
  }
2776
2806
  ]
2777
2807
  },
2778
- {
2779
- "kind": "javascript-module",
2780
- "path": "src/components/mui-form-hint/index.ts",
2781
- "declarations": [],
2782
- "exports": []
2783
- },
2784
2808
  {
2785
2809
  "kind": "javascript-module",
2786
2810
  "path": "src/components/mui-form-message/index.ts",
@@ -2970,6 +2994,36 @@
2970
2994
  }
2971
2995
  ]
2972
2996
  },
2997
+ {
2998
+ "kind": "javascript-module",
2999
+ "path": "src/components/mui-form-hint/doc.ts",
3000
+ "declarations": [
3001
+ {
3002
+ "kind": "variable",
3003
+ "name": "muiDocs",
3004
+ "type": {
3005
+ "text": "MuiDocs"
3006
+ },
3007
+ "default": "{ FormMessage: { title: \"Form Message\", description: \"Form Message (mui-form-message) provides supporting text below form controls for guidance, validation, and status messaging.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-form-message/index.ts\"], website: [\"https://muibook.com/#/form-message\"], guides: [\"https://guides.muibook.com/field\"], usage: { list: [ \"Use for supporting text below form controls.\", \"Use inside mui-field with slot='message' for consistent spacing and placement.\", \"When used in Form Group layouts, attach each Form Message to its specific Field using slot='message'.\", \"Form Message wraps Mui Body with form-oriented defaults.\", \"Form Message renders an info icon by default; provide slot='before' to replace it.\", \"Supporting copy is intentionally knocked back so inputs and selections stay visually primary.\", \"Slot icons in before/after using Mui Body slot behavior.\", \"Style state feedback through slotted icon color and text styling in usage context.\", \"Use size to match nearby body text (x-small, small, medium, large).\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"] }, anatomy: { image: \"\", list: [\"Optional leading slot\", \"Hint text\", \"Optional trailing slot\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Field\", link: \"https://guides.muibook.com/field\" }, { name: \"Input\", link: \"https://guides.muibook.com/input\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, FormHint: { title: \"Form Message\", description: \"Form Message (mui-form-message) provides supporting text below form controls for guidance, validation, and status messaging.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-form-message/index.ts\"], website: [\"https://muibook.com/#/form-message\"], guides: [\"https://guides.muibook.com/field\"], usage: { list: [ \"Use for supporting text below form controls.\", \"Use inside mui-field with slot='message' for consistent spacing and placement.\", \"When used in Form Group layouts, attach each Form Message to its specific Field using slot='message'.\", \"Form Message wraps Mui Body with form-oriented defaults.\", \"Form Message renders an info icon by default; provide slot='before' to replace it.\", \"Supporting copy is intentionally knocked back so inputs and selections stay visually primary.\", \"Slot icons in before/after using Mui Body slot behavior.\", \"Style state feedback through slotted icon color and text styling in usage context.\", \"Use size to match nearby body text (x-small, small, medium, large).\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"] }, anatomy: { image: \"\", list: [\"Optional leading slot\", \"Hint text\", \"Optional trailing slot\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Field\", link: \"https://guides.muibook.com/field\" }, { name: \"Input\", link: \"https://guides.muibook.com/input\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, }"
3008
+ }
3009
+ ],
3010
+ "exports": [
3011
+ {
3012
+ "kind": "js",
3013
+ "name": "muiDocs",
3014
+ "declaration": {
3015
+ "name": "muiDocs",
3016
+ "module": "src/components/mui-form-hint/doc.ts"
3017
+ }
3018
+ }
3019
+ ]
3020
+ },
3021
+ {
3022
+ "kind": "javascript-module",
3023
+ "path": "src/components/mui-form-hint/index.ts",
3024
+ "declarations": [],
3025
+ "exports": []
3026
+ },
2973
3027
  {
2974
3028
  "kind": "javascript-module",
2975
3029
  "path": "src/components/mui-form-section/doc.ts",
@@ -3595,7 +3649,7 @@
3595
3649
  },
3596
3650
  {
3597
3651
  "kind": "javascript-module",
3598
- "path": "src/components/mui-image/doc.ts",
3652
+ "path": "src/components/mui-illustrations/doc.ts",
3599
3653
  "declarations": [
3600
3654
  {
3601
3655
  "kind": "variable",
@@ -3603,7 +3657,7 @@
3603
3657
  "type": {
3604
3658
  "text": "MuiDocs"
3605
3659
  },
3606
- "default": "{ Image: { title: \"Image\", description: \"Displays an image alongside an optional caption to provide context, explanation, or attribution. Useful for supporting content visually while maintaining clarity through descriptive labelling.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/14eozXMPlzipgAfqaIR2Py/4e211990a30b4a08549deccfd30c71a9/Image_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=948-4194&t=0ytskb8cxriEmdz2-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/content-image--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-image/index.ts\"], website: [\"\"], guides: [\"https://guides.muibook.com/image\"], usage: { list: [ \"Use to display images that require additional context or explanation.\", \"Use height + crop + fit=cover when you need fixed-height visual crops.\", \"Use max-height with aspect-ratio for responsive image frames that should not exceed a visual cap.\", \"Use focal-x/focal-y or position to keep important content in frame.\", \"Use zoom carefully to tighten framing without switching to background-image.\", \"Captions should clarify the relevance of the image, not repeat surrounding content.\", \"Ideal for diagrams, UI examples, or content requiring attribution.\", \"Ensure images are accessible with alt text and meaningful captions.\", ], }, accessibility: { designerList: [ \"Use meaningful alt text that describes the image’s purpose.\", \"Use alt=&#8220;&#8221; for decorative images that don’t convey information.\", \"Use the caption slot for extended context, especially for diagrams or UI patterns.\", ], engineerList: [ \"Use meaningful alt text that describes the image’s purpose.\", \"Use alt=&#8220;&#8221; for decorative images that don’t convey information.\", \"Use the caption slot for extended context, especially for diagrams or UI patterns.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/3BSbMl1cqUOB6oDmFLQjRx/193889c0f6d3da6178d51e5fff06b8ed/Image_-_Anatomy.png\", list: [\"Standard styling for a hero image.\", \"Optional caption for the image.\"], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"muibook-resource\", name: \"Muibook Resource\", description: \"The Muibook documentation site uses MUI components to compose its layout, including headings, text, lists, buttons, icons, and image components.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3LVvuYDZWRnMhxNy6GMLNd/c5074a05eacb2c22c50ea172b3567c48/Muibook-List-Composition.png\", }, ], }, related: { items: [ { name: \"\", link: \"\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
3660
+ "default": "{ Illustrations: { title: \"Illustrations\", description: \"Large-format decorative visuals used to support empty states, onboarding moments, and explanatory content without competing with the primary interface.\", hero: [\"\"], figma: [\"\"], storybook: [\"\"], github: [\"https://github.com/michaeltrilford/muibook/tree/main/src/components/mui-illustrations\"], website: [\"https://muibook.com/#/illustrations\"], guides: [\"\"], usage: { list: [ \"Use illustrations to add tone and clarity to empty states, helper panels, and onboarding screens.\", \"Prefer one illustration per message area so the visual supports the content instead of competing with it.\", \"Use color='default' for light contexts and color='inverted' when the illustration needs to sit on dark surfaces.\", \"Use a custom CSS color only when the illustration needs to inherit a specific product accent.\", \"Keep illustration sizing consistent within the same product area.\", ], }, accessibility: { designerList: [\"\"], engineerList: [ \"Treat illustrations as decorative unless they communicate unique meaning that is not already present in adjacent text.\", ], }, anatomy: { image: \"\", list: [\"\"], }, variants: { items: [ { key: \"trash\", title: \"Trash\", description: \"A single illustration export for destructive, discard, or empty-bin related moments.\", image: \"\", }, ], }, compositions: { description: \"Illustrations are typically paired with heading, body copy, and one primary action.\", items: [ { key: \"empty-state\", name: \"Empty State\", description: \"A compact empty-state composition using an illustration to anchor the message.\", image: \"\", }, ], }, related: { items: [ { name: \"Icons\", link: \"https://guides.muibook.com/icons\" }, { name: \"Message\", link: \"https://guides.muibook.com/message\" }, { name: \"Card\", link: \"https://guides.muibook.com/card\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
3607
3661
  }
3608
3662
  ],
3609
3663
  "exports": [
@@ -3612,7 +3666,82 @@
3612
3666
  "name": "muiDocs",
3613
3667
  "declaration": {
3614
3668
  "name": "muiDocs",
3615
- "module": "src/components/mui-image/doc.ts"
3669
+ "module": "src/components/mui-illustrations/doc.ts"
3670
+ }
3671
+ }
3672
+ ]
3673
+ },
3674
+ {
3675
+ "kind": "javascript-module",
3676
+ "path": "src/components/mui-illustrations/index.ts",
3677
+ "declarations": [],
3678
+ "exports": []
3679
+ },
3680
+ {
3681
+ "kind": "javascript-module",
3682
+ "path": "src/components/mui-illustrations/trash.ts",
3683
+ "declarations": [
3684
+ {
3685
+ "kind": "class",
3686
+ "description": "",
3687
+ "name": "MuiIllustrationTrash",
3688
+ "members": [
3689
+ {
3690
+ "kind": "method",
3691
+ "name": "render",
3692
+ "return": {
3693
+ "type": {
3694
+ "text": "void"
3695
+ }
3696
+ }
3697
+ }
3698
+ ],
3699
+ "attributes": [
3700
+ {
3701
+ "name": "size"
3702
+ },
3703
+ {
3704
+ "name": "color"
3705
+ }
3706
+ ],
3707
+ "superclass": {
3708
+ "name": "HTMLElement"
3709
+ },
3710
+ "tagName": "mui-illustration-trash",
3711
+ "customElement": true
3712
+ }
3713
+ ],
3714
+ "exports": [
3715
+ {
3716
+ "kind": "custom-element-definition",
3717
+ "name": "mui-illustration-trash",
3718
+ "declaration": {
3719
+ "name": "MuiIllustrationTrash",
3720
+ "module": "src/components/mui-illustrations/trash.ts"
3721
+ }
3722
+ }
3723
+ ]
3724
+ },
3725
+ {
3726
+ "kind": "javascript-module",
3727
+ "path": "src/components/mui-image/doc.ts",
3728
+ "declarations": [
3729
+ {
3730
+ "kind": "variable",
3731
+ "name": "muiDocs",
3732
+ "type": {
3733
+ "text": "MuiDocs"
3734
+ },
3735
+ "default": "{ Image: { title: \"Image\", description: \"Displays an image alongside an optional caption to provide context, explanation, or attribution. Useful for supporting content visually while maintaining clarity through descriptive labelling.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/14eozXMPlzipgAfqaIR2Py/4e211990a30b4a08549deccfd30c71a9/Image_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=948-4194&t=0ytskb8cxriEmdz2-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/content-image--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-image/index.ts\"], website: [\"\"], guides: [\"https://guides.muibook.com/image\"], usage: { list: [ \"Use to display images that require additional context or explanation.\", \"Use height + crop + fit=cover when you need fixed-height visual crops.\", \"Use max-height with aspect-ratio for responsive image frames that should not exceed a visual cap.\", \"Use focal-x/focal-y or position to keep important content in frame.\", \"Use zoom carefully to tighten framing without switching to background-image.\", \"Captions should clarify the relevance of the image, not repeat surrounding content.\", \"Ideal for diagrams, UI examples, or content requiring attribution.\", \"Ensure images are accessible with alt text and meaningful captions.\", ], }, accessibility: { designerList: [ \"Use meaningful alt text that describes the image’s purpose.\", \"Use alt=&#8220;&#8221; for decorative images that don’t convey information.\", \"Use the caption slot for extended context, especially for diagrams or UI patterns.\", ], engineerList: [ \"Use meaningful alt text that describes the image’s purpose.\", \"Use alt=&#8220;&#8221; for decorative images that don’t convey information.\", \"Use the caption slot for extended context, especially for diagrams or UI patterns.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/3BSbMl1cqUOB6oDmFLQjRx/193889c0f6d3da6178d51e5fff06b8ed/Image_-_Anatomy.png\", list: [\"Standard styling for a hero image.\", \"Optional caption for the image.\"], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"muibook-resource\", name: \"Muibook Resource\", description: \"The Muibook documentation site uses MUI components to compose its layout, including headings, text, lists, buttons, icons, and image components.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3LVvuYDZWRnMhxNy6GMLNd/c5074a05eacb2c22c50ea172b3567c48/Muibook-List-Composition.png\", }, ], }, related: { items: [ { name: \"\", link: \"\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
3736
+ }
3737
+ ],
3738
+ "exports": [
3739
+ {
3740
+ "kind": "js",
3741
+ "name": "muiDocs",
3742
+ "declaration": {
3743
+ "name": "muiDocs",
3744
+ "module": "src/components/mui-image/doc.ts"
3616
3745
  }
3617
3746
  }
3618
3747
  ]
@@ -6902,6 +7031,70 @@
6902
7031
  }
6903
7032
  ]
6904
7033
  },
7034
+ {
7035
+ "kind": "javascript-module",
7036
+ "path": "src/components/mui-progress/doc.ts",
7037
+ "declarations": [
7038
+ {
7039
+ "kind": "variable",
7040
+ "name": "muiDocs",
7041
+ "type": {
7042
+ "text": "MuiDocs"
7043
+ },
7044
+ "default": "{ Progress: { title: \"Progress\", description: \"A Progress Bar visually represents completion status by filling a bar based on a percentage value. It gives users a clear indication of progress for a given task or process.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/2NPcL7tA0zGUWFLShr66fS/23d0050dce8c8379afc6deb8e351d049/Progress_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=948-4161&t=0ytskb8cxriEmdz2-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-progress--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-progress/index.ts\"], website: [\"https://muibook.com/#/progress\"], guides: [\"https://guides.muibook.com/progress\"], usage: { list: [ \"Show task progress – Indicate how much of a task or process has been completed.\", \"Display loading states – Represent the progress of a background operation, such as file uploads.\", \"Track step completion – Show progress in multi-step workflows or onboarding processes.\", \"Tune visual density and motion with component tokens such as --progress-radius, --progress-syncing-width, and --progress-pending-stripe-size.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/1iPll53Pmtgjh50qYwhsgY/908da9c51dd605895bd6306290fc6bd9/Progress_-_Anatomy.png\", list: [ \"Fill (Indicator) – The colored portion inside the track that represents the progress percentage.\", \"Track – The background of the progress bar, providing the visual boundary for progress.\", ], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"outcome-based-roadmap\", name: \"Outcome-Based Roadmap\", description: \"Example of an Outcome-Based Roadmap page showing objectives organised into Upcoming, Doing, and Finished columns. Progress bars indicate the completion status of each task, providing a clear view of overall progress.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3w5htPtfEz7QMCH9alVcwf/de35725fb4542b891bd695b900195291/Outcomes-Progress-Composition.png\", }, ], }, related: { items: [ { name: \"\", link: \"\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
7045
+ }
7046
+ ],
7047
+ "exports": [
7048
+ {
7049
+ "kind": "js",
7050
+ "name": "muiDocs",
7051
+ "declaration": {
7052
+ "name": "muiDocs",
7053
+ "module": "src/components/mui-progress/doc.ts"
7054
+ }
7055
+ }
7056
+ ]
7057
+ },
7058
+ {
7059
+ "kind": "javascript-module",
7060
+ "path": "src/components/mui-progress/index.ts",
7061
+ "declarations": [
7062
+ {
7063
+ "kind": "class",
7064
+ "description": "",
7065
+ "name": "MuiProgress",
7066
+ "members": [
7067
+ {
7068
+ "kind": "method",
7069
+ "name": "render"
7070
+ }
7071
+ ],
7072
+ "attributes": [
7073
+ {
7074
+ "name": "progress"
7075
+ },
7076
+ {
7077
+ "name": "state"
7078
+ }
7079
+ ],
7080
+ "superclass": {
7081
+ "name": "HTMLElement"
7082
+ },
7083
+ "tagName": "mui-progress",
7084
+ "customElement": true
7085
+ }
7086
+ ],
7087
+ "exports": [
7088
+ {
7089
+ "kind": "custom-element-definition",
7090
+ "name": "mui-progress",
7091
+ "declaration": {
7092
+ "name": "MuiProgress",
7093
+ "module": "src/components/mui-progress/index.ts"
7094
+ }
7095
+ }
7096
+ ]
7097
+ },
6905
7098
  {
6906
7099
  "kind": "javascript-module",
6907
7100
  "path": "src/components/mui-message/doc.ts",
@@ -7023,70 +7216,6 @@
7023
7216
  }
7024
7217
  ]
7025
7218
  },
7026
- {
7027
- "kind": "javascript-module",
7028
- "path": "src/components/mui-progress/doc.ts",
7029
- "declarations": [
7030
- {
7031
- "kind": "variable",
7032
- "name": "muiDocs",
7033
- "type": {
7034
- "text": "MuiDocs"
7035
- },
7036
- "default": "{ Progress: { title: \"Progress\", description: \"A Progress Bar visually represents completion status by filling a bar based on a percentage value. It gives users a clear indication of progress for a given task or process.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/2NPcL7tA0zGUWFLShr66fS/23d0050dce8c8379afc6deb8e351d049/Progress_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=948-4161&t=0ytskb8cxriEmdz2-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-progress--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-progress/index.ts\"], website: [\"https://muibook.com/#/progress\"], guides: [\"https://guides.muibook.com/progress\"], usage: { list: [ \"Show task progress – Indicate how much of a task or process has been completed.\", \"Display loading states – Represent the progress of a background operation, such as file uploads.\", \"Track step completion – Show progress in multi-step workflows or onboarding processes.\", \"Tune visual density and motion with component tokens such as --progress-radius, --progress-syncing-width, and --progress-pending-stripe-size.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/1iPll53Pmtgjh50qYwhsgY/908da9c51dd605895bd6306290fc6bd9/Progress_-_Anatomy.png\", list: [ \"Fill (Indicator) – The colored portion inside the track that represents the progress percentage.\", \"Track – The background of the progress bar, providing the visual boundary for progress.\", ], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"outcome-based-roadmap\", name: \"Outcome-Based Roadmap\", description: \"Example of an Outcome-Based Roadmap page showing objectives organised into Upcoming, Doing, and Finished columns. Progress bars indicate the completion status of each task, providing a clear view of overall progress.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3w5htPtfEz7QMCH9alVcwf/de35725fb4542b891bd695b900195291/Outcomes-Progress-Composition.png\", }, ], }, related: { items: [ { name: \"\", link: \"\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
7037
- }
7038
- ],
7039
- "exports": [
7040
- {
7041
- "kind": "js",
7042
- "name": "muiDocs",
7043
- "declaration": {
7044
- "name": "muiDocs",
7045
- "module": "src/components/mui-progress/doc.ts"
7046
- }
7047
- }
7048
- ]
7049
- },
7050
- {
7051
- "kind": "javascript-module",
7052
- "path": "src/components/mui-progress/index.ts",
7053
- "declarations": [
7054
- {
7055
- "kind": "class",
7056
- "description": "",
7057
- "name": "MuiProgress",
7058
- "members": [
7059
- {
7060
- "kind": "method",
7061
- "name": "render"
7062
- }
7063
- ],
7064
- "attributes": [
7065
- {
7066
- "name": "progress"
7067
- },
7068
- {
7069
- "name": "state"
7070
- }
7071
- ],
7072
- "superclass": {
7073
- "name": "HTMLElement"
7074
- },
7075
- "tagName": "mui-progress",
7076
- "customElement": true
7077
- }
7078
- ],
7079
- "exports": [
7080
- {
7081
- "kind": "custom-element-definition",
7082
- "name": "mui-progress",
7083
- "declaration": {
7084
- "name": "MuiProgress",
7085
- "module": "src/components/mui-progress/index.ts"
7086
- }
7087
- }
7088
- ]
7089
- },
7090
7219
  {
7091
7220
  "kind": "javascript-module",
7092
7221
  "path": "src/components/mui-prompt/doc.ts",
@@ -7791,7 +7920,7 @@
7791
7920
  },
7792
7921
  {
7793
7922
  "kind": "javascript-module",
7794
- "path": "src/components/mui-prompt-message/doc.ts",
7923
+ "path": "src/components/mui-prompt-preview/doc.ts",
7795
7924
  "declarations": [
7796
7925
  {
7797
7926
  "kind": "variable",
@@ -7799,7 +7928,7 @@
7799
7928
  "type": {
7800
7929
  "text": "MuiDocs"
7801
7930
  },
7802
- "default": "{ PromptMessage: { title: \"Prompt Message\", description: \"Prompt Message provides a consistent conversation row shell with avatar and message content slots.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-prompt-message/index.ts\"], website: [\"https://muibook.com/#/prompt-message\"], guides: [\"https://guides.muibook.com/body\"], usage: { list: [ \"Use for chat-style reply rows in assistant and support interfaces.\", \"This component is extracted from composition patterns to keep conversation shells consistent.\", \"Slot avatar content into slot='avatar'.\", \"Use body/content components for message text.\", \"Use size='x-small|small|medium|large' to scale avatar/text rhythm across dense and spacious layouts.\", \"Use variant='ghost' when the message row should render without surface treatment.\", \"Use density='compact' when padding should be removed for tight compositions.\", \"Prefer this component over ad hoc grid wrappers when building threaded chat content.\", ], }, accessibility: { designerList: [ \"Maintain clear speaker distinction through avatar + message pairing.\", \"Keep contrast and typography readable in long conversation threads.\", ], engineerList: [ \"Provide meaningful avatar labels where identity context matters.\", \"Preserve DOM reading order (identity first, then message content).\", \"Avoid injecting decorative-only text into message content; keep semantics focused on conversation copy.\", ], }, anatomy: { image: \"\", list: [\"Bubble container\", \"Avatar slot\", \"Message content slot\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Avatar\", link: \"https://guides.muibook.com/avatar\" }, { name: \"Body\", link: \"https://guides.muibook.com/body\" }, ], }, rules: [ { heading: \"Pattern Rule\", description: \"Use Prompt Message as the base conversation row primitive.\", doContent: [{ description: \"Compose identity + message content through avatar and body slots.\", image: \"\" }], dontContent: [{ description: \"Avoid custom one-off bubble containers per page.\", image: \"\" }], }, ], behaviour: { list: [ \"Avatar and message content align consistently across rows.\", ], }, writing: { list: [ \"Keep message copy concise and scannable in multi-row threads.\", ], }, }, }"
7931
+ "default": "{ PromptPreview: { title: \"Prompt Preview\", description: \"Prompt Preview shows long pasted content in a structured box with title and badge context.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-prompt-preview/index.ts\"], website: [\"https://muibook.com/#/prompt-preview\"], guides: [\"https://guides.muibook.com/input\"], usage: { list: [ \"Use before prompt submission when users paste long content.\", \"Show first-line identity and concise snippet for fast scanning.\", \"Use badge to classify payload types like JSON, CSS, or Insightful.\", \"Use `bg-image` to render a visual source and `image-tint` to tune color tone.\", \"Use `inverted` for high-contrast white-on-dark surfaces.\", \"Use `loading` during async enrichment flows (metadata, URL checks, or media probing).\", \"Set `loading-label` to provide clear accessible loading feedback.\", \"Use the `dismiss` event to track analytics/API updates before removing a preview.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"Keep preview text readable and avoid replacing the editable source input.\"], }, anatomy: { image: \"\", list: [\"Preview box\", \"Image surface (optional)\", \"Name line\", \"Type badge\", \"Snippet body\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Prompt\", link: \"https://guides.muibook.com/input\" }, { name: \"Badge\", link: \"https://guides.muibook.com/badge\" }, { name: \"Body\", link: \"https://guides.muibook.com/body\" }, ], }, rules: [{ heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }] }], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, }"
7803
7932
  }
7804
7933
  ],
7805
7934
  "exports": [
@@ -7808,136 +7937,46 @@
7808
7937
  "name": "muiDocs",
7809
7938
  "declaration": {
7810
7939
  "name": "muiDocs",
7811
- "module": "src/components/mui-prompt-message/doc.ts"
7940
+ "module": "src/components/mui-prompt-preview/doc.ts"
7812
7941
  }
7813
7942
  }
7814
7943
  ]
7815
7944
  },
7816
7945
  {
7817
7946
  "kind": "javascript-module",
7818
- "path": "src/components/mui-prompt-message/index.ts",
7947
+ "path": "src/components/mui-prompt-preview/index.ts",
7819
7948
  "declarations": [
7820
7949
  {
7821
7950
  "kind": "class",
7822
7951
  "description": "",
7823
- "name": "MuiPromptMessage",
7952
+ "name": "MuiPromptPreview",
7824
7953
  "members": [
7825
7954
  {
7826
7955
  "kind": "field",
7827
- "name": "avatarSlotEl",
7828
- "type": {
7829
- "text": "HTMLSlotElement | null"
7830
- },
7831
- "privacy": "private",
7832
- "default": "null"
7956
+ "name": "onDismiss",
7957
+ "privacy": "private"
7833
7958
  },
7834
7959
  {
7835
7960
  "kind": "field",
7836
- "name": "contentSlotEl",
7837
- "type": {
7838
- "text": "HTMLSlotElement | null"
7839
- },
7840
- "privacy": "private",
7841
- "default": "null"
7961
+ "name": "onOpenPreview",
7962
+ "privacy": "private"
7842
7963
  },
7843
7964
  {
7844
- "kind": "method",
7845
- "name": "render"
7965
+ "kind": "field",
7966
+ "name": "onKeyOpenPreview",
7967
+ "privacy": "private"
7846
7968
  },
7847
7969
  {
7848
- "kind": "method",
7849
- "name": "bindSlotSync",
7850
- "privacy": "private"
7851
- }
7852
- ],
7853
- "attributes": [
7970
+ "kind": "field",
7971
+ "name": "value"
7972
+ },
7854
7973
  {
7855
- "name": "size"
7974
+ "kind": "field",
7975
+ "name": "badge"
7856
7976
  },
7857
7977
  {
7858
- "name": "variant"
7859
- },
7860
- {
7861
- "name": "density"
7862
- }
7863
- ],
7864
- "superclass": {
7865
- "name": "HTMLElement"
7866
- },
7867
- "tagName": "mui-prompt-message",
7868
- "customElement": true
7869
- }
7870
- ],
7871
- "exports": [
7872
- {
7873
- "kind": "custom-element-definition",
7874
- "name": "mui-prompt-message",
7875
- "declaration": {
7876
- "name": "MuiPromptMessage",
7877
- "module": "src/components/mui-prompt-message/index.ts"
7878
- }
7879
- }
7880
- ]
7881
- },
7882
- {
7883
- "kind": "javascript-module",
7884
- "path": "src/components/mui-prompt-preview/doc.ts",
7885
- "declarations": [
7886
- {
7887
- "kind": "variable",
7888
- "name": "muiDocs",
7889
- "type": {
7890
- "text": "MuiDocs"
7891
- },
7892
- "default": "{ PromptPreview: { title: \"Prompt Preview\", description: \"Prompt Preview shows long pasted content in a structured box with title and badge context.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-prompt-preview/index.ts\"], website: [\"https://muibook.com/#/prompt-preview\"], guides: [\"https://guides.muibook.com/input\"], usage: { list: [ \"Use before prompt submission when users paste long content.\", \"Show first-line identity and concise snippet for fast scanning.\", \"Use badge to classify payload types like JSON, CSS, or Insightful.\", \"Use `bg-image` to render a visual source and `image-tint` to tune color tone.\", \"Use `inverted` for high-contrast white-on-dark surfaces.\", \"Use `loading` during async enrichment flows (metadata, URL checks, or media probing).\", \"Set `loading-label` to provide clear accessible loading feedback.\", \"Use the `dismiss` event to track analytics/API updates before removing a preview.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"Keep preview text readable and avoid replacing the editable source input.\"], }, anatomy: { image: \"\", list: [\"Preview box\", \"Image surface (optional)\", \"Name line\", \"Type badge\", \"Snippet body\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Prompt\", link: \"https://guides.muibook.com/input\" }, { name: \"Badge\", link: \"https://guides.muibook.com/badge\" }, { name: \"Body\", link: \"https://guides.muibook.com/body\" }, ], }, rules: [{ heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }] }], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, }"
7893
- }
7894
- ],
7895
- "exports": [
7896
- {
7897
- "kind": "js",
7898
- "name": "muiDocs",
7899
- "declaration": {
7900
- "name": "muiDocs",
7901
- "module": "src/components/mui-prompt-preview/doc.ts"
7902
- }
7903
- }
7904
- ]
7905
- },
7906
- {
7907
- "kind": "javascript-module",
7908
- "path": "src/components/mui-prompt-preview/index.ts",
7909
- "declarations": [
7910
- {
7911
- "kind": "class",
7912
- "description": "",
7913
- "name": "MuiPromptPreview",
7914
- "members": [
7915
- {
7916
- "kind": "field",
7917
- "name": "onDismiss",
7918
- "privacy": "private"
7919
- },
7920
- {
7921
- "kind": "field",
7922
- "name": "onOpenPreview",
7923
- "privacy": "private"
7924
- },
7925
- {
7926
- "kind": "field",
7927
- "name": "onKeyOpenPreview",
7928
- "privacy": "private"
7929
- },
7930
- {
7931
- "kind": "field",
7932
- "name": "value"
7933
- },
7934
- {
7935
- "kind": "field",
7936
- "name": "badge"
7937
- },
7938
- {
7939
- "kind": "field",
7940
- "name": "label"
7978
+ "kind": "field",
7979
+ "name": "label"
7941
7980
  },
7942
7981
  {
7943
7982
  "kind": "field",
@@ -8097,6 +8136,120 @@
8097
8136
  }
8098
8137
  ]
8099
8138
  },
8139
+ {
8140
+ "kind": "javascript-module",
8141
+ "path": "src/components/mui-prompt-message/doc.ts",
8142
+ "declarations": [
8143
+ {
8144
+ "kind": "variable",
8145
+ "name": "muiDocs",
8146
+ "type": {
8147
+ "text": "MuiDocs"
8148
+ },
8149
+ "default": "{ PromptMessage: { title: \"Prompt Message\", description: \"Prompt Message provides a consistent conversation row shell with avatar and message content slots.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-prompt-message/index.ts\"], website: [\"https://muibook.com/#/prompt-message\"], guides: [\"https://guides.muibook.com/body\"], usage: { list: [ \"Use for chat-style reply rows in assistant and support interfaces.\", \"This component is extracted from composition patterns to keep conversation shells consistent.\", \"Slot avatar content into slot='avatar'.\", \"Use body/content components for message text.\", \"Use size='x-small|small|medium|large' to scale avatar/text rhythm across dense and spacious layouts.\", \"Use variant='ghost' when the message row should render without surface treatment.\", \"Use density='compact' when padding should be removed for tight compositions.\", \"Prefer this component over ad hoc grid wrappers when building threaded chat content.\", ], }, accessibility: { designerList: [ \"Maintain clear speaker distinction through avatar + message pairing.\", \"Keep contrast and typography readable in long conversation threads.\", ], engineerList: [ \"Provide meaningful avatar labels where identity context matters.\", \"Preserve DOM reading order (identity first, then message content).\", \"Avoid injecting decorative-only text into message content; keep semantics focused on conversation copy.\", ], }, anatomy: { image: \"\", list: [\"Bubble container\", \"Avatar slot\", \"Message content slot\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Avatar\", link: \"https://guides.muibook.com/avatar\" }, { name: \"Body\", link: \"https://guides.muibook.com/body\" }, ], }, rules: [ { heading: \"Pattern Rule\", description: \"Use Prompt Message as the base conversation row primitive.\", doContent: [{ description: \"Compose identity + message content through avatar and body slots.\", image: \"\" }], dontContent: [{ description: \"Avoid custom one-off bubble containers per page.\", image: \"\" }], }, ], behaviour: { list: [ \"Avatar and message content align consistently across rows.\", ], }, writing: { list: [ \"Keep message copy concise and scannable in multi-row threads.\", ], }, }, }"
8150
+ }
8151
+ ],
8152
+ "exports": [
8153
+ {
8154
+ "kind": "js",
8155
+ "name": "muiDocs",
8156
+ "declaration": {
8157
+ "name": "muiDocs",
8158
+ "module": "src/components/mui-prompt-message/doc.ts"
8159
+ }
8160
+ }
8161
+ ]
8162
+ },
8163
+ {
8164
+ "kind": "javascript-module",
8165
+ "path": "src/components/mui-prompt-message/index.ts",
8166
+ "declarations": [
8167
+ {
8168
+ "kind": "class",
8169
+ "description": "",
8170
+ "name": "MuiPromptMessage",
8171
+ "members": [
8172
+ {
8173
+ "kind": "field",
8174
+ "name": "avatarSlotEl",
8175
+ "type": {
8176
+ "text": "HTMLSlotElement | null"
8177
+ },
8178
+ "privacy": "private",
8179
+ "default": "null"
8180
+ },
8181
+ {
8182
+ "kind": "field",
8183
+ "name": "contentSlotEl",
8184
+ "type": {
8185
+ "text": "HTMLSlotElement | null"
8186
+ },
8187
+ "privacy": "private",
8188
+ "default": "null"
8189
+ },
8190
+ {
8191
+ "kind": "method",
8192
+ "name": "render"
8193
+ },
8194
+ {
8195
+ "kind": "method",
8196
+ "name": "bindSlotSync",
8197
+ "privacy": "private"
8198
+ }
8199
+ ],
8200
+ "attributes": [
8201
+ {
8202
+ "name": "size"
8203
+ },
8204
+ {
8205
+ "name": "variant"
8206
+ },
8207
+ {
8208
+ "name": "density"
8209
+ }
8210
+ ],
8211
+ "superclass": {
8212
+ "name": "HTMLElement"
8213
+ },
8214
+ "tagName": "mui-prompt-message",
8215
+ "customElement": true
8216
+ }
8217
+ ],
8218
+ "exports": [
8219
+ {
8220
+ "kind": "custom-element-definition",
8221
+ "name": "mui-prompt-message",
8222
+ "declaration": {
8223
+ "name": "MuiPromptMessage",
8224
+ "module": "src/components/mui-prompt-message/index.ts"
8225
+ }
8226
+ }
8227
+ ]
8228
+ },
8229
+ {
8230
+ "kind": "javascript-module",
8231
+ "path": "src/components/mui-prompt-toggle/doc.ts",
8232
+ "declarations": [
8233
+ {
8234
+ "kind": "variable",
8235
+ "name": "muiDocs",
8236
+ "type": {
8237
+ "text": "MuiDocs"
8238
+ },
8239
+ "default": "{ PromptToggle: { title: \"Prompt Toggle\", description: \"Prompt Toggle switches between compact prompt actions and expanded active content inside Prompt.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-prompt-toggle/index.ts\"], website: [\"https://muibook.com/#/prompt-toggle\"], guides: [\"\"], usage: { list: [ \"Use inside mui-prompt when a compact action needs to expand into an active state, chip state, spinner, or close action.\", \"Use mode='icon' for the collapsed trigger state and mode='chip' for the expanded active state.\", \"Slot toggle content for the collapsed action and active or chip content for the expanded state.\", \"This pattern works well for context selectors, source pickers, tool toggles, or lightweight prompt-side dropdown triggers.\", \"Pair with Dropdown when the expanded state needs to reveal additional actions or menu choices.\", \"Use close or active controls when the expanded state should be dismissible without clearing the entire prompt.\", ], }, accessibility: { designerList: [ \"Keep the compact and expanded states visually related so users understand they represent the same prompt action.\", \"Use clear affordances for close or dismiss actions when expanded state can be exited independently.\", ], engineerList: [ \"Treat Prompt Toggle as a display-mode switcher; app state should still own the action, context, and dismissal logic.\", \"Ensure slotted toggle and active controls expose their own accessible labels when they are icon-only.\", ], }, anatomy: { image: \"\", list: [\"Collapsed toggle content\", \"Expanded active or chip content\", \"Optional close or spinner content\"], }, variants: { items: [ { key: \"icon\", title: \"Icon\", description: \"Collapsed state showing the prompt action trigger.\", image: \"\", }, { key: \"chip\", title: \"Chip\", description: \"Expanded or active state showing the selected context, dismiss action, or loading state.\", image: \"\", }, ], }, compositions: { description: \"Showcases prompt-side action patterns that transform from compact controls into richer active states.\", items: [ { key: \"context-toggle\", name: \"Prompt Context Toggle\", description: \"A compact prompt action that expands into an active chip with dismiss or close behavior.\", image: \"\", }, ], }, related: { items: [ { name: \"Prompt\", link: \"https://guides.muibook.com/prompt\" }, { name: \"Dropdown\", link: \"https://guides.muibook.com/dropdown\" }, { name: \"Button\", link: \"https://guides.muibook.com/button\" }, ], }, rules: [ { heading: \"Use for stateful prompt actions\", description: \"Prompt Toggle is for prompt actions that need a compact state and a richer active state in the same position.\", doContent: [ { description: \"Use it for context, source, or tool actions that start as a small trigger and then become an active chip, dropdown launcher, or dismissible action.\", image: \"\", }, ], dontContent: [ { description: \"Do not use it for static prompt actions that never change shape or state.\", image: \"\", }, ], }, ], behaviour: { list: [ \"mode='icon' shows toggle content and hides active, chip, close, and spinner content.\", \"mode='chip' shows active, chip, close, and spinner content and hides the compact toggle content.\", \"Prompt Toggle reacts to slotted content marked with slot names or context-* attributes so composed prompt actions can be shown or hidden consistently.\", ], }, writing: { list: [ \"Use short labels so the expanded chip or active state stays compact inside the prompt action rail.\", ], }, }, }"
8240
+ }
8241
+ ],
8242
+ "exports": [
8243
+ {
8244
+ "kind": "js",
8245
+ "name": "muiDocs",
8246
+ "declaration": {
8247
+ "name": "muiDocs",
8248
+ "module": "src/components/mui-prompt-toggle/doc.ts"
8249
+ }
8250
+ }
8251
+ ]
8252
+ },
8100
8253
  {
8101
8254
  "kind": "javascript-module",
8102
8255
  "path": "src/components/mui-prompt-toggle/index.ts",
@@ -8205,7 +8358,7 @@
8205
8358
  },
8206
8359
  {
8207
8360
  "kind": "javascript-module",
8208
- "path": "src/components/mui-radio/doc.ts",
8361
+ "path": "src/components/mui-radio-group/doc.ts",
8209
8362
  "declarations": [
8210
8363
  {
8211
8364
  "kind": "variable",
@@ -8213,7 +8366,7 @@
8213
8366
  "type": {
8214
8367
  "text": "MuiDocs"
8215
8368
  },
8216
- "default": "{ Radio: { title: \"Radio\", description: \"A radio control for selecting exactly one option from a set.\", hero: [\"\"], figma: [\"\"], storybook: [\"\"], github: [\"https://github.com/michaeltrilford/muibook/tree/main/src/components/mui-radio\"], website: [\"https://muibook.com/#/radio\"], guides: [\"\"], usage: { list: [ \"Use radio when users must choose one option from a known set.\", \"Group related radios using mui-radio-group for shared name and state handling.\", \"Use label / hide-label / optional on mui-radio-group to align with other fielded controls.\", \"Use size='x-small|small|medium|large' on radio or radio-group to scale controls consistently.\", ], }, accessibility: { designerList: [\"\"], engineerList: [ \"Use mui-radio-group to provide radiogroup semantics and shared selection state.\", \"Each radio should include visible text or aria-label when no visible label is present.\", ], }, anatomy: { image: \"\", list: [\"Unchecked\", \"Checked\", \"Disabled\"], }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }], }, compositions: { description: \"\", items: [], }, related: { items: [ { name: \"Checkbox\", link: \"https://guides.muibook.com/checkbox\" }, { name: \"Field\", link: \"https://guides.muibook.com/field\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, }"
8369
+ "default": "{ RadioGroup: { title: \"Radio Group\", description: \"Radio Group manages a related set of radios so exactly one option can be selected, labelled, and submitted together.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-radio-group/index.ts\"], website: [\"https://muibook.com/#/radio-group\"], guides: [\"\"], usage: { list: [ \"Use mui-radio-group when a user must select exactly one option from a known set.\", \"Set label when the group needs a visible question or section prompt.\", \"Use hide-label when nearby context already explains the group but an accessible label is still required.\", \"Use optional when the user may leave the group unselected.\", \"Set value on the group to control which radio is selected across the entire set.\", \"Use one size on the group so all child radios stay visually aligned.\", ], }, accessibility: { designerList: [ \"Use a clear group label so the set reads as one question rather than isolated controls.\", \"Reserve radio groups for mutually exclusive choices. If users can choose more than one option, use Checkbox instead.\", ], engineerList: [ \"mui-radio-group provides radiogroup semantics and forwards a shared name to child radios.\", \"Use the group label or aria-labelledby so assistive technology can announce the question before the options.\", \"Emit and listen to the group change event when app state should update from the selected value.\", ], }, anatomy: { image: \"\", list: [\"Group label\", \"Optional indicator\", \"Radio set\"], }, variants: { items: [ { key: \"default\", title: \"Default\", description: \"A standard labelled radio group for one required choice.\", image: \"\", }, { key: \"optional\", title: \"Optional\", description: \"Use when the group is supplementary and can be left unselected.\", image: \"\", }, { key: \"hidden-label\", title: \"Hidden Label\", description: \"Use when surrounding layout already provides the visible context but the group still needs an accessible label.\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"settings-choice\", name: \"Settings Choice\", description: \"A group of mutually exclusive account or preference options controlled as one field.\", image: \"\", }, ], }, related: { items: [ { name: \"Radio\", link: \"https://guides.muibook.com/radio\" }, { name: \"Field\", link: \"https://guides.muibook.com/field\" }, { name: \"Checkbox\", link: \"https://guides.muibook.com/checkbox\" }, ], }, rules: [ { heading: \"Use for single selection\", description: \"Radio Group is for one choice from a fixed set, not for independent toggles.\", doContent: [ { description: \"Use a radio group for choices like plan, delivery speed, or notification preference where only one answer is valid.\", image: \"\", }, ], dontContent: [ { description: \"Do not use radio group when users may select multiple options or when each option is an independent setting.\", image: \"\", }, ], }, ], behaviour: { list: [ \"The group syncs a shared name and size to all child radios.\", \"When value is set on the group, the matching child radio becomes checked and other checked radios are cleared.\", \"When disabled is set on the group, all child radios are disabled together.\", ], }, writing: { list: [ \"Write the label as the question or decision the radios answer, and keep option text mutually exclusive and easy to compare.\", ], }, }, }"
8217
8370
  }
8218
8371
  ],
8219
8372
  "exports": [
@@ -8222,173 +8375,215 @@
8222
8375
  "name": "muiDocs",
8223
8376
  "declaration": {
8224
8377
  "name": "muiDocs",
8225
- "module": "src/components/mui-radio/doc.ts"
8378
+ "module": "src/components/mui-radio-group/doc.ts"
8226
8379
  }
8227
8380
  }
8228
8381
  ]
8229
8382
  },
8230
8383
  {
8231
8384
  "kind": "javascript-module",
8232
- "path": "src/components/mui-radio/index.ts",
8385
+ "path": "src/components/mui-radio-group/index.ts",
8233
8386
  "declarations": [
8234
8387
  {
8235
8388
  "kind": "class",
8236
8389
  "description": "",
8237
- "name": "MuiRadio",
8390
+ "name": "MuiRadioGroup",
8238
8391
  "members": [
8239
8392
  {
8240
8393
  "kind": "field",
8241
- "name": "_changeHandler",
8394
+ "name": "_groupName",
8242
8395
  "type": {
8243
- "text": "(e: Event) => void | undefined"
8396
+ "text": "string"
8244
8397
  },
8245
- "privacy": "private"
8398
+ "privacy": "private",
8399
+ "default": "\"\""
8246
8400
  },
8247
8401
  {
8248
8402
  "kind": "method",
8249
- "name": "cleanupListeners",
8403
+ "name": "generateGroupName",
8250
8404
  "privacy": "private"
8251
8405
  },
8252
8406
  {
8253
8407
  "kind": "method",
8254
- "name": "setupListener",
8408
+ "name": "getRadios",
8409
+ "privacy": "private"
8410
+ },
8411
+ {
8412
+ "kind": "field",
8413
+ "name": "onRadioChange",
8255
8414
  "privacy": "private"
8256
8415
  },
8257
8416
  {
8258
8417
  "kind": "method",
8259
- "name": "render"
8260
- }
8261
- ],
8262
- "events": [
8418
+ "name": "syncRadios",
8419
+ "privacy": "private"
8420
+ },
8263
8421
  {
8264
- "name": "change",
8265
- "type": {
8266
- "text": "CustomEvent"
8267
- }
8422
+ "kind": "method",
8423
+ "name": "render",
8424
+ "privacy": "private"
8268
8425
  }
8269
8426
  ],
8270
8427
  "attributes": [
8271
8428
  {
8272
- "name": "checked"
8429
+ "name": "name"
8273
8430
  },
8274
8431
  {
8275
- "name": "disabled"
8432
+ "name": "value"
8276
8433
  },
8277
8434
  {
8278
- "name": "id"
8435
+ "name": "disabled"
8279
8436
  },
8280
8437
  {
8281
- "name": "name"
8438
+ "name": "size"
8282
8439
  },
8283
8440
  {
8284
- "name": "value"
8441
+ "name": "label"
8285
8442
  },
8286
8443
  {
8287
- "name": "aria-label"
8444
+ "name": "hide-label"
8288
8445
  },
8289
8446
  {
8290
- "name": "size"
8447
+ "name": "optional"
8291
8448
  }
8292
8449
  ],
8293
8450
  "superclass": {
8294
8451
  "name": "HTMLElement"
8295
8452
  },
8296
- "tagName": "mui-radio",
8453
+ "tagName": "mui-radio-group",
8297
8454
  "customElement": true
8298
8455
  }
8299
8456
  ],
8300
8457
  "exports": [
8301
8458
  {
8302
8459
  "kind": "custom-element-definition",
8303
- "name": "mui-radio",
8460
+ "name": "mui-radio-group",
8304
8461
  "declaration": {
8305
- "name": "MuiRadio",
8306
- "module": "src/components/mui-radio/index.ts"
8462
+ "name": "MuiRadioGroup",
8463
+ "module": "src/components/mui-radio-group/index.ts"
8307
8464
  }
8308
8465
  }
8309
8466
  ]
8310
8467
  },
8311
8468
  {
8312
8469
  "kind": "javascript-module",
8313
- "path": "src/components/mui-radio-group/index.ts",
8470
+ "path": "src/components/mui-responsive/doc.ts",
8314
8471
  "declarations": [
8315
8472
  {
8316
- "kind": "class",
8317
- "description": "",
8318
- "name": "MuiRadioGroup",
8319
- "members": [
8320
- {
8321
- "kind": "field",
8322
- "name": "_groupName",
8323
- "type": {
8324
- "text": "string"
8325
- },
8326
- "privacy": "private",
8327
- "default": "\"\""
8328
- },
8329
- {
8330
- "kind": "method",
8331
- "name": "generateGroupName",
8332
- "privacy": "private"
8473
+ "kind": "variable",
8474
+ "name": "muiDocs",
8475
+ "type": {
8476
+ "text": "MuiDocs"
8477
+ },
8478
+ "default": "{ Responsive: { title: \"Responsive\", description: \"Dynamically render UI based on viewport size\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/4UgRd1YdJAAZTThk4U97qE/8a322a53f71dc8b288385b5dd16b3469/Responsive_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=1059-12704&t=BwezUSymTClm00wJ-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/layout-responsive--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-responsive/index.ts\"], website: [\"https://muibook.com/#/responsive\"], guides: [\"https://guides.muibook.com/responsive\"], usage: { list: [ \"Use to adjust or swap UI components according to screen size for optimal experience.\", \"Ideal for tailoring layouts, navigation, or content density on different devices.\", \"Supports breakpoint-driven rendering to maintain clarity and usability.\", \"Avoid overly complex responsive behaviours that may confuse users or complicate maintenance.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { image: \"\", list: [\"\"], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"outcomes-roadmap-dashboard\", name: \"Outcomes Roadmap Dashboard\", description: \"Example of the responsive component in the Outcomes Roadmap Dashboard, demonstrating layout, title, and padding adjustments across breakpoints.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3FsXandRr1Z9BAKv33twxT/b0d0e4a8b6237bf7d38660111bceb8ab/responsive-composition.gif\", }, ], }, related: { items: [ { name: \"Stack\", link: \"https://guides.muibook.com/stack\", }, { name: \"Grid\", link: \"https://guides.muibook.com/grid\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
8479
+ }
8480
+ ],
8481
+ "exports": [
8482
+ {
8483
+ "kind": "js",
8484
+ "name": "muiDocs",
8485
+ "declaration": {
8486
+ "name": "muiDocs",
8487
+ "module": "src/components/mui-responsive/doc.ts"
8488
+ }
8489
+ }
8490
+ ]
8491
+ },
8492
+ {
8493
+ "kind": "javascript-module",
8494
+ "path": "src/components/mui-responsive/index.ts",
8495
+ "declarations": [
8496
+ {
8497
+ "kind": "class",
8498
+ "description": "",
8499
+ "name": "MuiR",
8500
+ "members": [
8501
+ {
8502
+ "kind": "field",
8503
+ "name": "slotEl",
8504
+ "type": {
8505
+ "text": "HTMLSlotElement | null"
8506
+ },
8507
+ "privacy": "private",
8508
+ "default": "null"
8333
8509
  },
8334
8510
  {
8335
- "kind": "method",
8336
- "name": "getRadios",
8337
- "privacy": "private"
8511
+ "kind": "field",
8512
+ "name": "mqlLow",
8513
+ "type": {
8514
+ "text": "MediaQueryList | null"
8515
+ },
8516
+ "privacy": "private",
8517
+ "default": "null"
8338
8518
  },
8339
8519
  {
8340
8520
  "kind": "field",
8341
- "name": "onRadioChange",
8342
- "privacy": "private"
8521
+ "name": "mqlHigh",
8522
+ "type": {
8523
+ "text": "MediaQueryList | null"
8524
+ },
8525
+ "privacy": "private",
8526
+ "default": "null"
8527
+ },
8528
+ {
8529
+ "kind": "field",
8530
+ "name": "mqlSingle",
8531
+ "type": {
8532
+ "text": "MediaQueryList | null"
8533
+ },
8534
+ "privacy": "private",
8535
+ "default": "null"
8536
+ },
8537
+ {
8538
+ "kind": "field",
8539
+ "name": "cleanup",
8540
+ "type": {
8541
+ "text": "(() => void) | null"
8542
+ },
8543
+ "privacy": "private",
8544
+ "default": "null"
8343
8545
  },
8344
8546
  {
8345
8547
  "kind": "method",
8346
- "name": "syncRadios",
8548
+ "name": "teardownResponsive",
8347
8549
  "privacy": "private"
8348
8550
  },
8349
8551
  {
8350
8552
  "kind": "method",
8351
- "name": "render",
8553
+ "name": "setupResponsive",
8352
8554
  "privacy": "private"
8555
+ },
8556
+ {
8557
+ "kind": "field",
8558
+ "name": "innerHTML",
8559
+ "default": "` <style>${styles}</style> <slot></slot> `"
8353
8560
  }
8354
8561
  ],
8355
8562
  "attributes": [
8356
8563
  {
8357
- "name": "name"
8358
- },
8359
- {
8360
- "name": "value"
8361
- },
8362
- {
8363
- "name": "disabled"
8364
- },
8365
- {
8366
- "name": "size"
8367
- },
8368
- {
8369
- "name": "label"
8564
+ "name": "breakpoint"
8370
8565
  },
8371
8566
  {
8372
- "name": "hide-label"
8567
+ "name": "breakpoint-low"
8373
8568
  },
8374
8569
  {
8375
- "name": "optional"
8570
+ "name": "breakpoint-high"
8376
8571
  }
8377
8572
  ],
8378
8573
  "superclass": {
8379
8574
  "name": "HTMLElement"
8380
8575
  },
8381
- "tagName": "mui-radio-group",
8576
+ "tagName": "mui-responsive",
8382
8577
  "customElement": true
8383
8578
  }
8384
8579
  ],
8385
8580
  "exports": [
8386
8581
  {
8387
8582
  "kind": "custom-element-definition",
8388
- "name": "mui-radio-group",
8583
+ "name": "mui-responsive",
8389
8584
  "declaration": {
8390
- "name": "MuiRadioGroup",
8391
- "module": "src/components/mui-radio-group/index.ts"
8585
+ "name": "MuiR",
8586
+ "module": "src/components/mui-responsive/index.ts"
8392
8587
  }
8393
8588
  }
8394
8589
  ]
@@ -8533,7 +8728,7 @@
8533
8728
  },
8534
8729
  {
8535
8730
  "kind": "javascript-module",
8536
- "path": "src/components/mui-responsive/doc.ts",
8731
+ "path": "src/components/mui-radio/doc.ts",
8537
8732
  "declarations": [
8538
8733
  {
8539
8734
  "kind": "variable",
@@ -8541,7 +8736,7 @@
8541
8736
  "type": {
8542
8737
  "text": "MuiDocs"
8543
8738
  },
8544
- "default": "{ Responsive: { title: \"Responsive\", description: \"Dynamically render UI based on viewport size\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/4UgRd1YdJAAZTThk4U97qE/8a322a53f71dc8b288385b5dd16b3469/Responsive_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=1059-12704&t=BwezUSymTClm00wJ-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/layout-responsive--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-responsive/index.ts\"], website: [\"https://muibook.com/#/responsive\"], guides: [\"https://guides.muibook.com/responsive\"], usage: { list: [ \"Use to adjust or swap UI components according to screen size for optimal experience.\", \"Ideal for tailoring layouts, navigation, or content density on different devices.\", \"Supports breakpoint-driven rendering to maintain clarity and usability.\", \"Avoid overly complex responsive behaviours that may confuse users or complicate maintenance.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { image: \"\", list: [\"\"], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"outcomes-roadmap-dashboard\", name: \"Outcomes Roadmap Dashboard\", description: \"Example of the responsive component in the Outcomes Roadmap Dashboard, demonstrating layout, title, and padding adjustments across breakpoints.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3FsXandRr1Z9BAKv33twxT/b0d0e4a8b6237bf7d38660111bceb8ab/responsive-composition.gif\", }, ], }, related: { items: [ { name: \"Stack\", link: \"https://guides.muibook.com/stack\", }, { name: \"Grid\", link: \"https://guides.muibook.com/grid\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
8739
+ "default": "{ Radio: { title: \"Radio\", description: \"A radio control for selecting exactly one option from a set.\", hero: [\"\"], figma: [\"\"], storybook: [\"\"], github: [\"https://github.com/michaeltrilford/muibook/tree/main/src/components/mui-radio\"], website: [\"https://muibook.com/#/radio\"], guides: [\"\"], usage: { list: [ \"Use radio when users must choose one option from a known set.\", \"Group related radios using mui-radio-group for shared name and state handling.\", \"Use label / hide-label / optional on mui-radio-group to align with other fielded controls.\", \"Use size='x-small|small|medium|large' on radio or radio-group to scale controls consistently.\", ], }, accessibility: { designerList: [\"\"], engineerList: [ \"Use mui-radio-group to provide radiogroup semantics and shared selection state.\", \"Each radio should include visible text or aria-label when no visible label is present.\", ], }, anatomy: { image: \"\", list: [\"Unchecked\", \"Checked\", \"Disabled\"], }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }], }, compositions: { description: \"\", items: [], }, related: { items: [ { name: \"Checkbox\", link: \"https://guides.muibook.com/checkbox\" }, { name: \"Field\", link: \"https://guides.muibook.com/field\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, }"
8545
8740
  }
8546
8741
  ],
8547
8742
  "exports": [
@@ -8550,113 +8745,95 @@
8550
8745
  "name": "muiDocs",
8551
8746
  "declaration": {
8552
8747
  "name": "muiDocs",
8553
- "module": "src/components/mui-responsive/doc.ts"
8748
+ "module": "src/components/mui-radio/doc.ts"
8554
8749
  }
8555
8750
  }
8556
8751
  ]
8557
8752
  },
8558
8753
  {
8559
8754
  "kind": "javascript-module",
8560
- "path": "src/components/mui-responsive/index.ts",
8755
+ "path": "src/components/mui-radio/index.ts",
8561
8756
  "declarations": [
8562
8757
  {
8563
8758
  "kind": "class",
8564
8759
  "description": "",
8565
- "name": "MuiR",
8760
+ "name": "MuiRadio",
8566
8761
  "members": [
8567
8762
  {
8568
8763
  "kind": "field",
8569
- "name": "slotEl",
8764
+ "name": "_changeHandler",
8570
8765
  "type": {
8571
- "text": "HTMLSlotElement | null"
8766
+ "text": "(e: Event) => void | undefined"
8572
8767
  },
8573
- "privacy": "private",
8574
- "default": "null"
8768
+ "privacy": "private"
8575
8769
  },
8576
8770
  {
8577
- "kind": "field",
8578
- "name": "mqlLow",
8579
- "type": {
8580
- "text": "MediaQueryList | null"
8581
- },
8582
- "privacy": "private",
8583
- "default": "null"
8771
+ "kind": "method",
8772
+ "name": "cleanupListeners",
8773
+ "privacy": "private"
8584
8774
  },
8585
8775
  {
8586
- "kind": "field",
8587
- "name": "mqlHigh",
8588
- "type": {
8589
- "text": "MediaQueryList | null"
8590
- },
8591
- "privacy": "private",
8592
- "default": "null"
8776
+ "kind": "method",
8777
+ "name": "setupListener",
8778
+ "privacy": "private"
8593
8779
  },
8594
8780
  {
8595
- "kind": "field",
8596
- "name": "mqlSingle",
8597
- "type": {
8598
- "text": "MediaQueryList | null"
8599
- },
8600
- "privacy": "private",
8601
- "default": "null"
8602
- },
8781
+ "kind": "method",
8782
+ "name": "render"
8783
+ }
8784
+ ],
8785
+ "events": [
8603
8786
  {
8604
- "kind": "field",
8605
- "name": "cleanup",
8787
+ "name": "change",
8606
8788
  "type": {
8607
- "text": "(() => void) | null"
8608
- },
8609
- "privacy": "private",
8610
- "default": "null"
8789
+ "text": "CustomEvent"
8790
+ }
8791
+ }
8792
+ ],
8793
+ "attributes": [
8794
+ {
8795
+ "name": "checked"
8611
8796
  },
8612
8797
  {
8613
- "kind": "method",
8614
- "name": "teardownResponsive",
8615
- "privacy": "private"
8798
+ "name": "disabled"
8616
8799
  },
8617
8800
  {
8618
- "kind": "method",
8619
- "name": "setupResponsive",
8620
- "privacy": "private"
8801
+ "name": "id"
8621
8802
  },
8622
8803
  {
8623
- "kind": "field",
8624
- "name": "innerHTML",
8625
- "default": "` <style>${styles}</style> <slot></slot> `"
8626
- }
8627
- ],
8628
- "attributes": [
8804
+ "name": "name"
8805
+ },
8629
8806
  {
8630
- "name": "breakpoint"
8807
+ "name": "value"
8631
8808
  },
8632
8809
  {
8633
- "name": "breakpoint-low"
8810
+ "name": "aria-label"
8634
8811
  },
8635
8812
  {
8636
- "name": "breakpoint-high"
8813
+ "name": "size"
8637
8814
  }
8638
8815
  ],
8639
8816
  "superclass": {
8640
8817
  "name": "HTMLElement"
8641
8818
  },
8642
- "tagName": "mui-responsive",
8819
+ "tagName": "mui-radio",
8643
8820
  "customElement": true
8644
8821
  }
8645
8822
  ],
8646
8823
  "exports": [
8647
8824
  {
8648
8825
  "kind": "custom-element-definition",
8649
- "name": "mui-responsive",
8826
+ "name": "mui-radio",
8650
8827
  "declaration": {
8651
- "name": "MuiR",
8652
- "module": "src/components/mui-responsive/index.ts"
8828
+ "name": "MuiRadio",
8829
+ "module": "src/components/mui-radio/index.ts"
8653
8830
  }
8654
8831
  }
8655
8832
  ]
8656
8833
  },
8657
8834
  {
8658
8835
  "kind": "javascript-module",
8659
- "path": "src/components/mui-rule/doc.ts",
8836
+ "path": "src/components/mui-select/doc.ts",
8660
8837
  "declarations": [
8661
8838
  {
8662
8839
  "kind": "variable",
@@ -8664,7 +8841,7 @@
8664
8841
  "type": {
8665
8842
  "text": "MuiDocs"
8666
8843
  },
8667
- "default": "{ Rule: { title: \"Rule\", description: \"A styling rule that visually separates or divides page elements.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/1MLQoDYuXhKOBDZQRZtBH7/6cd51d6b04fb62f1e04b0383c38d4cce/Rule_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=1059-12617&t=BwezUSymTClm00wJ-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/layout-rule--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-rule/index.ts\"], website: [\"https://muibook.com/#/rule\"], guides: [\"https://guides.muibook.com/rule\"], usage: { list: [ \"Use horizontal rules to separate sections or create visual breaks in flows.\", \"Use vertical rules to divide elements within a row or dense layout.\", \"Align with spacing and layout conventions to maintain visual rhythm.\", \"Avoid using as decoration—rules should support clarity and structure.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { image: \"\", list: [\"\"], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"\", items: [ { key: \"\", name: \"\", description: \"\", image: \"\", }, ], }, related: { items: [ { name: \"\", link: \"\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
8844
+ "default": "{ Select: { title: \"Select\", description: \"A versatile dropdown component for selecting from a list of options, supporting customisable styles and accessibility features.\", hero: [\"\"], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=117-2068&t=GMqx21isUVAMpLJp-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-select--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-select/index.ts\"], website: [\"\"], guides: [\"https://guides.muibook.com/select\"], usage: { list: [ \"Use for single or multiple selections from predefined options.\", \"Ideal for forms, filters, or settings where space is limited.\", \"Use size='x-small|small|medium|large' to align select scale with surrounding form controls.\", \"Use the optional attribute when a field is not required to show a clear (optional) marker in the label.\", \"Ensure options are clear and concise, with logical ordering.\", \"Avoid overly long lists without search or grouping functionality.\", ], }, accessibility: { designerList: [ \"A label is required for screen reader support, describing the purpose of the select.\", \"If hide-label is used, the label is visually hidden but still accessible via aria-label.\", \"The label and select are linked using for and id attributes. If no id is provided, one is generated.\", \"Optional fields can be explicitly communicated with the optional attribute without changing label association.\", \"Keyboard users see a clear focus style when navigating.\", \"The disabled attribute is native and fully supported by assistive tech.\", ], engineerList: [ \"A label is required for screen reader support, describing the purpose of the select.\", \"If hide-label is used, the label is visually hidden but still accessible via aria-label.\", \"The label and select are linked using for and id attributes. If no id is provided, one is generated.\", \"Optional fields can be explicitly communicated with the optional attribute without changing label association.\", \"Keyboard users see a clear focus style when navigating.\", \"The disabled attribute is native and fully supported by assistive tech.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/HcG0gphexJNvxrV1ZMe0G/39cb6647101b8fe95ead10bfe9f1bd6d/Select_-_Anatomy.png\", list: [ \"Label: Describes the purpose of the Select; required for accessibility. Can be hidden if the context is clear. Ensure the label text is still provided for developers to support screen reader access.\", \"Trigger: Displays the currently selected option and opens the list on interaction.\", \"Dropdown List: Contains selectable options in a list format.\", \"Option: Individual choice the user can select; shows label, stores value.\", ], }, variants: { items: [ { key: \"default\", title: \"Default\", description: \"Use for common form inputs where users must choose a single value from a clear and limited set.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/30vMoYiARbWBhbR62myex2/85b9d6dee432edea9a4c351222889227/Select-Default.png\", }, { key: \"hide-label\", title: \"Hide Label\", description: \"Use in dense layouts where a visual label would be redundant, such as grouped fields with clear section headings. Ensure the label name is documented for developers, as the component requires a label for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1zrjFOW3ZR5j33sryrXbn8/3ff80a7e652247f53cde5798e1d8bcfa/Select-Hide-Label.png\", }, { key: \"disabled\", title: \"Disabled\", description: \"Use when options are not currently applicable but should still be visible for context\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/25y8iR59VPmcf0FM17kjdw/eaafac160c620fd8bf6a5974a9a1ae75/Select-Disabled.png\", }, { key: \"error\", title: \"Error\", description: \"Use to indicate required or invalid input. Error messaging is handled by the Field component, so the Select is intended to be used in conjunction with it.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7siP5JLSnR2QxsP39mCWjx/ff55b2736582144e779c505fa4f20008/Select-Error.png\", }, { key: \"before\", title: \"Before\", description: \"The Select component is placed before the input area; use for supporting context like filter type. Select width should be defined in code. In Figma, replace the nested Select with a local version and apply a min-width to simulate the correct layout.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4FZPRXjCsLDe4mxqaJP0dm/5804a1a1784de47ef6576462687d1f3b/Select-Before.png\", }, { key: \"after\", title: \"After\", description: \"The Select component is placed after the input area; use for complementary context like currency type. Select width should be defined in code. In Figma, replace the nested Select with a local version and apply a min-width to simulate the correct layout.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7A9Py3FXpCnl7a9VcOA9Rj/59a226fe300af04ff2e7d5f5c1e9d855/Select-After.png\", }, ], }, compositions: { description: \"\", items: [ { key: \"\", name: \"\", description: \"\", image: \"\", }, ], }, related: { items: [ { name: \"Field\", link: \"https://guides.muibook.com/field\", }, { name: \"Input\", link: \"https://guides.muibook.com/input\", }, { name: \"File Upload\", link: \"https://guides.muibook.com/file-upload\", }, { name: \"Add on\", link: \"https://guides.muibook.com/add-on\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
8668
8845
  }
8669
8846
  ],
8670
8847
  "exports": [
@@ -8673,127 +8850,55 @@
8673
8850
  "name": "muiDocs",
8674
8851
  "declaration": {
8675
8852
  "name": "muiDocs",
8676
- "module": "src/components/mui-rule/doc.ts"
8853
+ "module": "src/components/mui-select/doc.ts"
8677
8854
  }
8678
8855
  }
8679
8856
  ]
8680
8857
  },
8681
8858
  {
8682
8859
  "kind": "javascript-module",
8683
- "path": "src/components/mui-rule/index.ts",
8860
+ "path": "src/components/mui-select/index.ts",
8684
8861
  "declarations": [
8685
8862
  {
8686
8863
  "kind": "class",
8687
8864
  "description": "",
8688
- "name": "MuiRule",
8865
+ "name": "MuiSelect",
8689
8866
  "members": [
8690
8867
  {
8691
- "kind": "method",
8692
- "name": "syncContextAttributes",
8693
- "privacy": "private"
8868
+ "kind": "field",
8869
+ "name": "partMap",
8870
+ "type": {
8871
+ "text": "string"
8872
+ },
8873
+ "default": "\"\""
8874
+ },
8875
+ {
8876
+ "kind": "field",
8877
+ "name": "_changeHandler",
8878
+ "type": {
8879
+ "text": "(e: Event) => void | undefined"
8880
+ }
8694
8881
  },
8695
8882
  {
8696
8883
  "kind": "method",
8697
- "name": "updateStyles"
8698
- }
8699
- ],
8700
- "attributes": [
8884
+ "name": "cleanupListeners"
8885
+ },
8701
8886
  {
8702
- "name": "length"
8887
+ "kind": "method",
8888
+ "name": "setupListener"
8703
8889
  },
8704
8890
  {
8705
- "name": "weight"
8891
+ "kind": "method",
8892
+ "name": "render"
8706
8893
  },
8707
8894
  {
8708
- "name": "direction"
8709
- }
8710
- ],
8711
- "superclass": {
8712
- "name": "HTMLElement"
8713
- },
8714
- "tagName": "mui-rule",
8715
- "customElement": true
8716
- }
8717
- ],
8718
- "exports": [
8719
- {
8720
- "kind": "custom-element-definition",
8721
- "name": "mui-rule",
8722
- "declaration": {
8723
- "name": "MuiRule",
8724
- "module": "src/components/mui-rule/index.ts"
8725
- }
8726
- }
8727
- ]
8728
- },
8729
- {
8730
- "kind": "javascript-module",
8731
- "path": "src/components/mui-select/doc.ts",
8732
- "declarations": [
8733
- {
8734
- "kind": "variable",
8735
- "name": "muiDocs",
8736
- "type": {
8737
- "text": "MuiDocs"
8738
- },
8739
- "default": "{ Select: { title: \"Select\", description: \"A versatile dropdown component for selecting from a list of options, supporting customisable styles and accessibility features.\", hero: [\"\"], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=117-2068&t=GMqx21isUVAMpLJp-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-select--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-select/index.ts\"], website: [\"\"], guides: [\"https://guides.muibook.com/select\"], usage: { list: [ \"Use for single or multiple selections from predefined options.\", \"Ideal for forms, filters, or settings where space is limited.\", \"Use size='x-small|small|medium|large' to align select scale with surrounding form controls.\", \"Use the optional attribute when a field is not required to show a clear (optional) marker in the label.\", \"Ensure options are clear and concise, with logical ordering.\", \"Avoid overly long lists without search or grouping functionality.\", ], }, accessibility: { designerList: [ \"A label is required for screen reader support, describing the purpose of the select.\", \"If hide-label is used, the label is visually hidden but still accessible via aria-label.\", \"The label and select are linked using for and id attributes. If no id is provided, one is generated.\", \"Optional fields can be explicitly communicated with the optional attribute without changing label association.\", \"Keyboard users see a clear focus style when navigating.\", \"The disabled attribute is native and fully supported by assistive tech.\", ], engineerList: [ \"A label is required for screen reader support, describing the purpose of the select.\", \"If hide-label is used, the label is visually hidden but still accessible via aria-label.\", \"The label and select are linked using for and id attributes. If no id is provided, one is generated.\", \"Optional fields can be explicitly communicated with the optional attribute without changing label association.\", \"Keyboard users see a clear focus style when navigating.\", \"The disabled attribute is native and fully supported by assistive tech.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/HcG0gphexJNvxrV1ZMe0G/39cb6647101b8fe95ead10bfe9f1bd6d/Select_-_Anatomy.png\", list: [ \"Label: Describes the purpose of the Select; required for accessibility. Can be hidden if the context is clear. Ensure the label text is still provided for developers to support screen reader access.\", \"Trigger: Displays the currently selected option and opens the list on interaction.\", \"Dropdown List: Contains selectable options in a list format.\", \"Option: Individual choice the user can select; shows label, stores value.\", ], }, variants: { items: [ { key: \"default\", title: \"Default\", description: \"Use for common form inputs where users must choose a single value from a clear and limited set.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/30vMoYiARbWBhbR62myex2/85b9d6dee432edea9a4c351222889227/Select-Default.png\", }, { key: \"hide-label\", title: \"Hide Label\", description: \"Use in dense layouts where a visual label would be redundant, such as grouped fields with clear section headings. Ensure the label name is documented for developers, as the component requires a label for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1zrjFOW3ZR5j33sryrXbn8/3ff80a7e652247f53cde5798e1d8bcfa/Select-Hide-Label.png\", }, { key: \"disabled\", title: \"Disabled\", description: \"Use when options are not currently applicable but should still be visible for context\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/25y8iR59VPmcf0FM17kjdw/eaafac160c620fd8bf6a5974a9a1ae75/Select-Disabled.png\", }, { key: \"error\", title: \"Error\", description: \"Use to indicate required or invalid input. Error messaging is handled by the Field component, so the Select is intended to be used in conjunction with it.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7siP5JLSnR2QxsP39mCWjx/ff55b2736582144e779c505fa4f20008/Select-Error.png\", }, { key: \"before\", title: \"Before\", description: \"The Select component is placed before the input area; use for supporting context like filter type. Select width should be defined in code. In Figma, replace the nested Select with a local version and apply a min-width to simulate the correct layout.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4FZPRXjCsLDe4mxqaJP0dm/5804a1a1784de47ef6576462687d1f3b/Select-Before.png\", }, { key: \"after\", title: \"After\", description: \"The Select component is placed after the input area; use for complementary context like currency type. Select width should be defined in code. In Figma, replace the nested Select with a local version and apply a min-width to simulate the correct layout.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7A9Py3FXpCnl7a9VcOA9Rj/59a226fe300af04ff2e7d5f5c1e9d855/Select-After.png\", }, ], }, compositions: { description: \"\", items: [ { key: \"\", name: \"\", description: \"\", image: \"\", }, ], }, related: { items: [ { name: \"Field\", link: \"https://guides.muibook.com/field\", }, { name: \"Input\", link: \"https://guides.muibook.com/input\", }, { name: \"File Upload\", link: \"https://guides.muibook.com/file-upload\", }, { name: \"Add on\", link: \"https://guides.muibook.com/add-on\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
8740
- }
8741
- ],
8742
- "exports": [
8743
- {
8744
- "kind": "js",
8745
- "name": "muiDocs",
8746
- "declaration": {
8747
- "name": "muiDocs",
8748
- "module": "src/components/mui-select/doc.ts"
8749
- }
8750
- }
8751
- ]
8752
- },
8753
- {
8754
- "kind": "javascript-module",
8755
- "path": "src/components/mui-select/index.ts",
8756
- "declarations": [
8757
- {
8758
- "kind": "class",
8759
- "description": "",
8760
- "name": "MuiSelect",
8761
- "members": [
8762
- {
8763
- "kind": "field",
8764
- "name": "partMap",
8765
- "type": {
8766
- "text": "string"
8767
- },
8768
- "default": "\"\""
8769
- },
8770
- {
8771
- "kind": "field",
8772
- "name": "_changeHandler",
8773
- "type": {
8774
- "text": "(e: Event) => void | undefined"
8775
- }
8776
- },
8777
- {
8778
- "kind": "method",
8779
- "name": "cleanupListeners"
8780
- },
8781
- {
8782
- "kind": "method",
8783
- "name": "setupListener"
8784
- },
8785
- {
8786
- "kind": "method",
8787
- "name": "render"
8788
- },
8789
- {
8790
- "kind": "method",
8791
- "name": "waitForPartMap",
8792
- "return": {
8793
- "type": {
8794
- "text": "Promise<void>"
8795
- }
8796
- }
8895
+ "kind": "method",
8896
+ "name": "waitForPartMap",
8897
+ "return": {
8898
+ "type": {
8899
+ "text": "Promise<void>"
8900
+ }
8901
+ }
8797
8902
  }
8798
8903
  ],
8799
8904
  "events": [
@@ -9010,6 +9115,36 @@
9010
9115
  }
9011
9116
  ]
9012
9117
  },
9118
+ {
9119
+ "kind": "javascript-module",
9120
+ "path": "src/components/mui-slat/doc.ts",
9121
+ "declarations": [
9122
+ {
9123
+ "kind": "variable",
9124
+ "name": "muiDocs",
9125
+ "type": {
9126
+ "text": "MuiDocs"
9127
+ },
9128
+ "default": "{ Slat: { title: \"Slat\", description: \"Used to display structured data in a stacked format, typically on smaller viewports or within narrow-width layouts. Slats offer flexibility to surface key content and support custom layouts, stacking, or expansion of additional details.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/2SHOSwTkf7V7Ql4OaobtMg/2cacf5103d02e00f67748578213f4433/Slat_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=957-8535&t=0ytskb8cxriEmdz2-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/content-slat--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-slat/index.ts\"], website: [\"https://muibook.com/#/slat\"], guides: [\"https://guides.muibook.com/slat\"], usage: { list: [ \"Suitable for displaying data in narrow-width containers, such as side panels\", \"Use as a responsive alternative to tables on mobile or narrow viewports\", \"Ideal for presenting structured data in a compact, scannable format\", \"Supports stacking labels and values for easier readability\", \"Can include expandable sections to reveal more content on demand\", \"Use with SlatGroup when rows need to be presented as a related set, such as wallet activity, settings lists, grouped account records, or transaction histories.\", ], }, accessibility: { designerList: [\"mui-slat uses role='row'\", \"slotted children inherit role='cell'\"], engineerList: [\"mui-slat uses role='row'\", \"slotted children inherit role='cell'\"], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/0OzwVoT0EyK1sR1ufn3Vw/3cbee51beec1240ebeaaad485bff5970/Slat_-_Anatomy.png\", list: [ \"Header (Start): Slot for the header of slat items.\", \"Header (End): Optional area for secondary information.\", \"Row (Start): Primary content slot in a slat layout.\", \"Row (End): Secondary content slot in a slat layout.\", \"Accessory: Use for an icon or other suitable elements within the limited space available.\", \"Action: Enables the slat to become a clickable action.\", ], }, variants: { items: [ { key: \"default\", title: \"Default\", description: \"Use for structured row content where information is primarily read rather than clicked.\", image: \"\", }, { key: \"header\", title: \"Header\", description: \"Use for section headers or grouped row labels where the slat introduces the items that follow.\", image: \"\", }, { key: \"action\", title: \"Action\", description: \"Use when the whole slat acts as the trigger, such as opening details, drilling into settings, or selecting a transaction.\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"smart-card\", name: \"Smart Card\", description: \"The Smart Card composition uses slats to present structured information in a compact format. Slats help organise details such as titles, descriptions, and supporting actions, making the card easy to scan and interact with.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/74knMtil1vp9nHPPWXM1kr/54f8d978b0a82bca2c126e8ab800826f/SmartCard_-_Card_Composition.png\", }, { key: \"account-activity\", name: \"Account Activity\", description: \"In Account Activity, slats are used to display a list of recent actions. Each slat provides a clear breakdown of primary details with optional secondary information, ensuring activity is both easy to read and consistent across the interface.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5GVrfo3fcsVnX7yduux6kE/978c2c6635bf19ee7e67ccd26744ad33/Slat_-_Account_Composition.png\", }, ], }, related: { items: [ { name: \"Slat Group\", link: \"https://guides.muibook.com/slat\", }, { name: \"Icons\", link: \"https://guides.muibook.com/icons\", }, ], }, rules: [ { heading: \"Choose the right slat variant\", description: \"Use the slat variant that matches the row’s job so grouped lists stay clear and predictable.\", doContent: [ { description: \"Use a header slat to introduce a grouped set, a default slat for readable content, and an action slat when the whole row should be interactive.\", image: \"\", }, ], dontContent: [ { description: \"Avoid making every slat interactive if the rows are only there to present information.\", image: \"\", }, ], }, ], behaviour: { list: [ \"Use the default variant when the slat is primarily informational, and use the action variant when the entire row should be interactive.\", \"Header slats work well as structural labels before a grouped run of related slats.\", ], }, writing: { list: [ \"Keep primary row content concise and scannable so labels, values, and actions remain easy to parse at a glance.\", ], }, }, SlatGroup: { title: \"Slat Group\", description: \"Slat Group arranges multiple slats into a related set so they can be presented as one grouped list or feed.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com/?path=/docs/content-slat--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-slat/index.ts\"], website: [\"https://muibook.com/#/slat\"], guides: [\"https://guides.muibook.com/slat\"], usage: { list: [ \"Use to group related slats into one compact list or section.\", \"Works well for wallet and account activity feeds where a header slat is followed by action or detail slats.\", \"A strong pattern is a header slat followed by grouped item slats for balances, recent activity, account options, or grouped settings.\", \"Use inside Card when grouped rows need a shared container or section framing.\", \"Pair with Rule between header and item sets when additional separation is needed.\", \"Use Slat for the individual row content and SlatGroup for the grouped structure.\", ], }, accessibility: { designerList: [\"Maintain a consistent row order so grouped content is easy to scan.\"], engineerList: [\"Use SlatGroup as structural grouping; individual mui-slat rows continue to own their row/cell semantics.\"], }, anatomy: { image: \"\", list: [\"Grouped slat container\", \"Optional header slat\", \"Related slat items\"], }, variants: { items: [ { key: \"default\", title: \"Default\", description: \"A grouped collection of related slats.\", image: \"\", }, ], }, compositions: { description: \"Showcases grouped slat patterns in real-world structures.\", items: [ { key: \"wallet-activity\", name: \"Wallet Activity\", description: \"A header slat followed by grouped activity rows, useful for transactions, balances, and recent account events.\", image: \"\", }, ], }, related: { items: [ { name: \"Slat\", link: \"https://guides.muibook.com/slat\", }, { name: \"Rule\", link: \"https://guides.muibook.com/rule\", }, { name: \"Card\", link: \"https://guides.muibook.com/card\", }, ], }, rules: [ { heading: \"Group meaningfully\", description: \"Use SlatGroup when multiple slats belong to the same topic, task, or account context and should be read together.\", doContent: [ { description: \"Group related rows such as a wallet summary, account activity, or a list of linked settings under one clear header or section label.\", image: \"\", }, ], dontContent: [ { description: \"Avoid using SlatGroup as a generic spacing wrapper when the rows do not share a clear relationship.\", image: \"\", }, ], }, ], behaviour: { list: [ \"SlatGroup provides structure for a related set while each slat continues to handle its own content and interaction behaviour.\", ], }, writing: { list: [ \"Use concise section labels so grouped rows are easy to scan and the relationship between items is obvious.\", ], }, }, }"
9129
+ }
9130
+ ],
9131
+ "exports": [
9132
+ {
9133
+ "kind": "js",
9134
+ "name": "muiDocs",
9135
+ "declaration": {
9136
+ "name": "muiDocs",
9137
+ "module": "src/components/mui-slat/doc.ts"
9138
+ }
9139
+ }
9140
+ ]
9141
+ },
9142
+ {
9143
+ "kind": "javascript-module",
9144
+ "path": "src/components/mui-slat/index.ts",
9145
+ "declarations": [],
9146
+ "exports": []
9147
+ },
9013
9148
  {
9014
9149
  "kind": "javascript-module",
9015
9150
  "path": "src/components/mui-skeleton/doc.ts",
@@ -9145,7 +9280,7 @@
9145
9280
  },
9146
9281
  {
9147
9282
  "kind": "javascript-module",
9148
- "path": "src/components/mui-slat/doc.ts",
9283
+ "path": "src/components/mui-rule/doc.ts",
9149
9284
  "declarations": [
9150
9285
  {
9151
9286
  "kind": "variable",
@@ -9153,7 +9288,7 @@
9153
9288
  "type": {
9154
9289
  "text": "MuiDocs"
9155
9290
  },
9156
- "default": "{ Slat: { title: \"Slat\", description: \"Used to display structured data in a stacked format, typically on smaller viewports or within narrow-width layouts. Slats offer flexibility to surface key content and support custom layouts, stacking, or expansion of additional details.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/2SHOSwTkf7V7Ql4OaobtMg/2cacf5103d02e00f67748578213f4433/Slat_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=957-8535&t=0ytskb8cxriEmdz2-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/content-slat--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-slat/index.ts\"], website: [\"https://muibook.com/#/slat\"], guides: [\"https://guides.muibook.com/slat\"], usage: { list: [ \"Suitable for displaying data in narrow-width containers, such as side panels\", \"Use as a responsive alternative to tables on mobile or narrow viewports\", \"deal for presenting structured data in a compact, scannable format\", \"Supports stacking labels and values for easier readability\", \"Can include expandable sections to reveal more content on demand\", ], }, accessibility: { designerList: [\"mui-slat uses role='row'\", \"slotted children inherit role='cell'\"], engineerList: [\"mui-slat uses role='row'\", \"slotted children inherit role='cell'\"], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/0OzwVoT0EyK1sR1ufn3Vw/3cbee51beec1240ebeaaad485bff5970/Slat_-_Anatomy.png\", list: [ \"Header (Start): Slot for the header of slat items.\", \"Header (End): Optional area for secondary information.\", \"Row (Start): Primary content slot in a slat layout.\", \"Row (End): Secondary content slot in a slat layout.\", \"Accessory: Use for an icon or other suitable elements within the limited space available.\", \"Action: Enables the slat to become a clickable action.\", ], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"smart-card\", name: \"Smart Card\", description: \"The Smart Card composition uses slats to present structured information in a compact format. Slats help organise details such as titles, descriptions, and supporting actions, making the card easy to scan and interact with.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/74knMtil1vp9nHPPWXM1kr/54f8d978b0a82bca2c126e8ab800826f/SmartCard_-_Card_Composition.png\", }, { key: \"account-activity\", name: \"Account Activity\", description: \"In Account Activity, slats are used to display a list of recent actions. Each slat provides a clear breakdown of primary details with optional secondary information, ensuring activity is both easy to read and consistent across the interface.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5GVrfo3fcsVnX7yduux6kE/978c2c6635bf19ee7e67ccd26744ad33/Slat_-_Account_Composition.png\", }, ], }, related: { items: [ { name: \"Icons\", link: \"https://guides.muibook.com/icons\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
9291
+ "default": "{ Rule: { title: \"Rule\", description: \"A styling rule that visually separates or divides page elements.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/1MLQoDYuXhKOBDZQRZtBH7/6cd51d6b04fb62f1e04b0383c38d4cce/Rule_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=1059-12617&t=BwezUSymTClm00wJ-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/layout-rule--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-rule/index.ts\"], website: [\"https://muibook.com/#/rule\"], guides: [\"https://guides.muibook.com/rule\"], usage: { list: [ \"Use horizontal rules to separate sections or create visual breaks in flows.\", \"Use vertical rules to divide elements within a row or dense layout.\", \"Align with spacing and layout conventions to maintain visual rhythm.\", \"Avoid using as decoration—rules should support clarity and structure.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { image: \"\", list: [\"\"], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"\", items: [ { key: \"\", name: \"\", description: \"\", image: \"\", }, ], }, related: { items: [ { name: \"\", link: \"\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
9157
9292
  }
9158
9293
  ],
9159
9294
  "exports": [
@@ -9162,16 +9297,58 @@
9162
9297
  "name": "muiDocs",
9163
9298
  "declaration": {
9164
9299
  "name": "muiDocs",
9165
- "module": "src/components/mui-slat/doc.ts"
9300
+ "module": "src/components/mui-rule/doc.ts"
9166
9301
  }
9167
9302
  }
9168
9303
  ]
9169
9304
  },
9170
9305
  {
9171
9306
  "kind": "javascript-module",
9172
- "path": "src/components/mui-slat/index.ts",
9173
- "declarations": [],
9174
- "exports": []
9307
+ "path": "src/components/mui-rule/index.ts",
9308
+ "declarations": [
9309
+ {
9310
+ "kind": "class",
9311
+ "description": "",
9312
+ "name": "MuiRule",
9313
+ "members": [
9314
+ {
9315
+ "kind": "method",
9316
+ "name": "syncContextAttributes",
9317
+ "privacy": "private"
9318
+ },
9319
+ {
9320
+ "kind": "method",
9321
+ "name": "updateStyles"
9322
+ }
9323
+ ],
9324
+ "attributes": [
9325
+ {
9326
+ "name": "length"
9327
+ },
9328
+ {
9329
+ "name": "weight"
9330
+ },
9331
+ {
9332
+ "name": "direction"
9333
+ }
9334
+ ],
9335
+ "superclass": {
9336
+ "name": "HTMLElement"
9337
+ },
9338
+ "tagName": "mui-rule",
9339
+ "customElement": true
9340
+ }
9341
+ ],
9342
+ "exports": [
9343
+ {
9344
+ "kind": "custom-element-definition",
9345
+ "name": "mui-rule",
9346
+ "declaration": {
9347
+ "name": "MuiRule",
9348
+ "module": "src/components/mui-rule/index.ts"
9349
+ }
9350
+ }
9351
+ ]
9175
9352
  },
9176
9353
  {
9177
9354
  "kind": "javascript-module",
@@ -9781,7 +9958,7 @@
9781
9958
  },
9782
9959
  {
9783
9960
  "kind": "javascript-module",
9784
- "path": "src/components/mui-stack/doc.ts",
9961
+ "path": "src/components/mui-stepper/doc.ts",
9785
9962
  "declarations": [
9786
9963
  {
9787
9964
  "kind": "variable",
@@ -9789,7 +9966,7 @@
9789
9966
  "type": {
9790
9967
  "text": "MuiDocs"
9791
9968
  },
9792
- "default": "{ Stack: { title: \"Stack\", description: \"A layout helper component that arranges its children in a horizontal or vertical flow with consistent spacing.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/37Cyk0jaIIKA8EBj2bp1ep/95d5adc24bccb051c355865d9e14bfa3/Stack_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=1059-12708&t=BwezUSymTClm00wJ-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/layout-stack--docs\"], github: [\"https://github.com/michaeltrilford/muibook/tree/main/src/components/mui-stack\"], website: [\"https://muibook.com/#/stack\"], guides: [\"https://guides.muibook.com/stack\"], usage: { list: [ \"Use to organise content or components in a single, consistent direction.\", \"Ideal for managing spacing without manual margin or padding adjustments.\", \"Supports responsive layouts by changing direction or spacing at breakpoints.\", \"Recognise it as a developer layout tool rather than a design asset.\", \"Use the space design token to maintain consistent gap spacing.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { image: \"\", list: [\"\"], }, variants: { description: \"While not a Figma component (designers should use auto-layout), it’s useful for designers to understand this pattern as engineers commonly use it to control layout and spacing.\", items: [ { key: \"horizontal\", title: \"Horizontal\", description: \"A layout component that arranges its children in a horizontal flow\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5tHpmQRhIWn0ACqjb1jNBu/d99ca0d9ada0af45cd0f1c2aaa7c995d/stack-horizontal.png\", }, { key: \"vertical\", title: \"Vertical\", description: \"A layout component that arranges its children in a vertical flow\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1w2YeWwXerMc2YGqfGm6KJ/898f3ef195e01f775ae880e0968dbaa6/stack-vertical.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"outcomes-roadmap-dashboard\", name: \"Outcomes Roadmap Dashboard\", description: \"Example of the responsive component in the Outcomes Roadmap Dashboard, demonstrating layout, title, and padding adjustments across breakpoints.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3FsXandRr1Z9BAKv33twxT/b0d0e4a8b6237bf7d38660111bceb8ab/responsive-composition.gif\", }, { key: \"outcomes-roadmap-roadmap\", name: \"Outcome-Based Roadmap\", description: \"Example of an Outcome-Based Roadmap page showing objectives organised into Upcoming, Doing, and Finished columns. Progress bars indicate the completion status of each task, providing a clear view of overall progress.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3w5htPtfEz7QMCH9alVcwf/de35725fb4542b891bd695b900195291/Outcomes-Progress-Composition.png\", }, { key: \"smart-card\", name: \"Smart Card\", description: \"The Smart Card composition uses slats to present structured information in a compact format. Slats help organise details such as titles, descriptions, and supporting actions, making the card easy to scan and interact with.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/74knMtil1vp9nHPPWXM1kr/54f8d978b0a82bca2c126e8ab800826f/SmartCard_-_Card_Composition.png\", }, ], }, related: { items: [ { name: \"Grid\", link: \"https://guides.muibook.com/grid\", }, { name: \"Responsive\", link: \"https://guides.muibook.com/responsive\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
9969
+ "default": "{ Stepper: { title: \"Stepper\", description: \"A Stepper component visually represents a sequence of steps in a process. It helps users understand progress and navigate through multi-step workflows. This component supports both horizontal and vertical orientations.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/423YAEfIeoDzzsK9ClbTkP/485c6c4f637080247caa150afed0ef14/Stepper_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=948-4195&t=0ytskb8cxriEmdz2-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/navigation-stepper--docs\"], github: [\"https://github.com/michaeltrilford/muibook/tree/main/src/components/mui-stepper\"], website: [\"https://muibook.com/#/stepper\"], guides: [\"https://guides.muibook.com/stepper\"], usage: { list: [ \"Use active-step to control the current step in a multi-step flow.\", \"Use size='x-small|small|medium' to match the density of the surrounding layout.\", \"Use interactive when users should be able to click and keyboard-navigate steps.\", \"Use linear with interactive to limit forward progression to the next available step while still allowing users to move backwards.\", \"Use explicit step states (success, pending, error, disabled) for async and validation workflows.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { description: \"The stepper uses two simple styles: active and inactive. Their meaning changes based on position in the sequence, representing progress through different states.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6Y5iyISdhK7PX8d1cHJxWv/761efb630c924af42ebf8d8bd5fabfb2/Stepper_-_Anatomy.png\", list: [ \"Active / Completed / Success: Indicates the current step or a task that has been successfully finished.\", \"Pending / Error / Disabled: Communicates processing, validation failure, or temporarily unavailable steps.\", \"Upcoming: Represents a step or task that has not yet started.\", ], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"review-items-task\", name: \"Review Items Task\", description: \"A permanent drawer remains visible at all times and is typically used for core navigation or tools that support the main content. It doesn’t open or close, and is always part of the current layout or workflow.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/rHTSU9sPUdmwrmGETRLcC/fa444ff8d8a72a28e8f10537324bbca3/drawer-composition-smart-bills.png\", }, ], }, related: { items: [ { name: \"\", link: \"\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
9793
9970
  }
9794
9971
  ],
9795
9972
  "exports": [
@@ -9798,20 +9975,20 @@
9798
9975
  "name": "muiDocs",
9799
9976
  "declaration": {
9800
9977
  "name": "muiDocs",
9801
- "module": "src/components/mui-stack/doc.ts"
9978
+ "module": "src/components/mui-stepper/doc.ts"
9802
9979
  }
9803
9980
  }
9804
9981
  ]
9805
9982
  },
9806
9983
  {
9807
9984
  "kind": "javascript-module",
9808
- "path": "src/components/mui-stack/index.ts",
9985
+ "path": "src/components/mui-stepper/index.ts",
9809
9986
  "declarations": [],
9810
9987
  "exports": []
9811
9988
  },
9812
9989
  {
9813
9990
  "kind": "javascript-module",
9814
- "path": "src/components/mui-stepper/doc.ts",
9991
+ "path": "src/components/mui-stack/doc.ts",
9815
9992
  "declarations": [
9816
9993
  {
9817
9994
  "kind": "variable",
@@ -9819,7 +9996,7 @@
9819
9996
  "type": {
9820
9997
  "text": "MuiDocs"
9821
9998
  },
9822
- "default": "{ Stepper: { title: \"Stepper\", description: \"A Stepper component visually represents a sequence of steps in a process. It helps users understand progress and navigate through multi-step workflows. This component supports both horizontal and vertical orientations.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/423YAEfIeoDzzsK9ClbTkP/485c6c4f637080247caa150afed0ef14/Stepper_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=948-4195&t=0ytskb8cxriEmdz2-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/navigation-stepper--docs\"], github: [\"https://github.com/michaeltrilford/muibook/tree/main/src/components/mui-stepper\"], website: [\"https://muibook.com/#/stepper\"], guides: [\"https://guides.muibook.com/stepper\"], usage: { list: [ \"Use active-step to control the current step in a multi-step flow.\", \"Use size='x-small|small|medium' to match the density of the surrounding layout.\", \"Use interactive when users should be able to click and keyboard-navigate steps.\", \"Use linear with interactive to limit forward progression to the next available step while still allowing users to move backwards.\", \"Use explicit step states (success, pending, error, disabled) for async and validation workflows.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { description: \"The stepper uses two simple styles: active and inactive. Their meaning changes based on position in the sequence, representing progress through different states.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6Y5iyISdhK7PX8d1cHJxWv/761efb630c924af42ebf8d8bd5fabfb2/Stepper_-_Anatomy.png\", list: [ \"Active / Completed / Success: Indicates the current step or a task that has been successfully finished.\", \"Pending / Error / Disabled: Communicates processing, validation failure, or temporarily unavailable steps.\", \"Upcoming: Represents a step or task that has not yet started.\", ], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"review-items-task\", name: \"Review Items Task\", description: \"A permanent drawer remains visible at all times and is typically used for core navigation or tools that support the main content. It doesn’t open or close, and is always part of the current layout or workflow.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/rHTSU9sPUdmwrmGETRLcC/fa444ff8d8a72a28e8f10537324bbca3/drawer-composition-smart-bills.png\", }, ], }, related: { items: [ { name: \"\", link: \"\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
9999
+ "default": "{ Stack: { title: \"Stack\", description: \"A layout helper component that arranges its children in a horizontal or vertical flow with consistent spacing.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/37Cyk0jaIIKA8EBj2bp1ep/95d5adc24bccb051c355865d9e14bfa3/Stack_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=1059-12708&t=BwezUSymTClm00wJ-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/layout-stack--docs\"], github: [\"https://github.com/michaeltrilford/muibook/tree/main/src/components/mui-stack\"], website: [\"https://muibook.com/#/stack\"], guides: [\"https://guides.muibook.com/stack\"], usage: { list: [ \"Use to organise content or components in a single, consistent direction.\", \"Ideal for managing spacing without manual margin or padding adjustments.\", \"Supports responsive layouts by changing direction or spacing at breakpoints.\", \"Recognise it as a developer layout tool rather than a design asset.\", \"Use the space design token to maintain consistent gap spacing.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { image: \"\", list: [\"\"], }, variants: { description: \"While not a Figma component (designers should use auto-layout), it’s useful for designers to understand this pattern as engineers commonly use it to control layout and spacing.\", items: [ { key: \"horizontal\", title: \"Horizontal\", description: \"A layout component that arranges its children in a horizontal flow\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5tHpmQRhIWn0ACqjb1jNBu/d99ca0d9ada0af45cd0f1c2aaa7c995d/stack-horizontal.png\", }, { key: \"vertical\", title: \"Vertical\", description: \"A layout component that arranges its children in a vertical flow\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1w2YeWwXerMc2YGqfGm6KJ/898f3ef195e01f775ae880e0968dbaa6/stack-vertical.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"outcomes-roadmap-dashboard\", name: \"Outcomes Roadmap Dashboard\", description: \"Example of the responsive component in the Outcomes Roadmap Dashboard, demonstrating layout, title, and padding adjustments across breakpoints.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3FsXandRr1Z9BAKv33twxT/b0d0e4a8b6237bf7d38660111bceb8ab/responsive-composition.gif\", }, { key: \"outcomes-roadmap-roadmap\", name: \"Outcome-Based Roadmap\", description: \"Example of an Outcome-Based Roadmap page showing objectives organised into Upcoming, Doing, and Finished columns. Progress bars indicate the completion status of each task, providing a clear view of overall progress.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3w5htPtfEz7QMCH9alVcwf/de35725fb4542b891bd695b900195291/Outcomes-Progress-Composition.png\", }, { key: \"smart-card\", name: \"Smart Card\", description: \"The Smart Card composition uses slats to present structured information in a compact format. Slats help organise details such as titles, descriptions, and supporting actions, making the card easy to scan and interact with.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/74knMtil1vp9nHPPWXM1kr/54f8d978b0a82bca2c126e8ab800826f/SmartCard_-_Card_Composition.png\", }, ], }, related: { items: [ { name: \"Grid\", link: \"https://guides.muibook.com/grid\", }, { name: \"Responsive\", link: \"https://guides.muibook.com/responsive\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
9823
10000
  }
9824
10001
  ],
9825
10002
  "exports": [
@@ -9828,14 +10005,14 @@
9828
10005
  "name": "muiDocs",
9829
10006
  "declaration": {
9830
10007
  "name": "muiDocs",
9831
- "module": "src/components/mui-stepper/doc.ts"
10008
+ "module": "src/components/mui-stack/doc.ts"
9832
10009
  }
9833
10010
  }
9834
10011
  ]
9835
10012
  },
9836
10013
  {
9837
10014
  "kind": "javascript-module",
9838
- "path": "src/components/mui-stepper/index.ts",
10015
+ "path": "src/components/mui-stack/index.ts",
9839
10016
  "declarations": [],
9840
10017
  "exports": []
9841
10018
  },
@@ -10005,36 +10182,6 @@
10005
10182
  "declarations": [],
10006
10183
  "exports": []
10007
10184
  },
10008
- {
10009
- "kind": "javascript-module",
10010
- "path": "src/components/mui-tabs/doc.ts",
10011
- "declarations": [
10012
- {
10013
- "kind": "variable",
10014
- "name": "muiDocs",
10015
- "type": {
10016
- "text": "MuiDocs"
10017
- },
10018
- "default": "{ Tabs: { title: \"Tabs\", description: \"Allows users to switch between views or content sections by selecting from a group of tabs. Tabs keep related content within a single surface, reducing the need for navigation and maintaining context.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/5EC8Uj4pMaQGe2UcNntYLX/040eb1feec8def04504dfa3729494b52/Tab_bar_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=126-560&t=ZfvVjZFxH7mQ72pi-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/navigation-tabbar--docs\"], github: [\"https://github.com/michaeltrilford/muibook/tree/main/src/components/mui-tabs\"], website: [\"https://muibook.com/#/tab-bar\"], guides: [\"https://guides.muibook.com/tab-bar\"], usage: { list: [ \"Use to organise related content or views at the same level of hierarchy.\", \"Ideal for toggling between sections without navigating away from the page.\", \"Use the size API (x-small, small, medium, large) to align tabs with adjacent buttons.\", \"Use named slots (before/after) to compose icons and badges in tab items.\", \"Use variant='dots' for compact pagination controls such as carousel navigation.\", \"Use variant='ghost' when you want only active-tab emphasis without outer tab bar chrome.\", \"Keep labels short, clear, and consistently styled.\", \"Avoid using when content is unrelated or exceeds a manageable number of tabs.\", ], }, accessibility: { designerList: [ \"Keyboard users can navigate across tabs using the left/right arrow keys, as well as Home and End keys to jump to the first or last tab.\", \"The active tab always shows a clear focus outline and can be navigated to using the keyboard.\", \"Tabs are grouped in a way that assistive technologies can understand, using standard roles and attributes.\", \"The system keeps track of which tab is active behind the scenes, so screen readers and keyboard users always stay in sync.\", ], engineerList: [ \"Left/Right arrows, Home and End keys let keyboard users navigate between tab-items.\", \"aria-selected and tabindex attributes are updated on each tab-item when it becomes active or inactive.\", \"Each active tab-item can receive focus and shows a focus-visible outline.\", \"tab-bar uses role=tablist to group related tab-items and each tab-item uses role=tab within the tab-bar.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/koeu63xbKYOWZgs8i0eev/983e09362714a2dcdcc7262889ba1236/Tabs_-_Anatomy.png\", list: [ \"Active: Indicates the currently selected tab.\", \"Inactive: Indicates a tab that is not selected and is waiting for user interaction.\", ], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"wallet\", name: \"Wallet\", description: \"This example shows a wallet view featuring a digital card, transaction and statement tabs. It demonstrates how foundational components like tabs, slats, and buttons can be composed to create flexible, real-world layouts.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6RoGBcahh63o16PAcEsgyX/36f5c8d9bf0e8754a574955b32ee6eda/Tab_Bar_-_Composition.png\", }, { key: \"product-carousel\", name: \"Product Carousel\", description: \"Demonstrates how to add custom compositions and layouts within the carousel panels.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4NRMfGil4AcMUh7FDhYyHz/7c4636822eba6d3ae15e684f50d10fdd/Carousel_-_Composition.png\", }, { key: \"carousel-showcase\", name: \"Carousel Showcase\", description: \"This example from the GuruSuite website demonstrates the carousel used to showcase two of the products on offer.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2TaRRm351HyujF9mT2w1wH/3958f69e939d20618751742130dc5f06/GuruSuite-Carousel-Composition.png\", }, ], }, related: { items: [ { name: \"Carousel\", link: \"https://guides.muibook.com/carousel\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
10019
- }
10020
- ],
10021
- "exports": [
10022
- {
10023
- "kind": "js",
10024
- "name": "muiDocs",
10025
- "declaration": {
10026
- "name": "muiDocs",
10027
- "module": "src/components/mui-tabs/doc.ts"
10028
- }
10029
- }
10030
- ]
10031
- },
10032
- {
10033
- "kind": "javascript-module",
10034
- "path": "src/components/mui-tabs/index.ts",
10035
- "declarations": [],
10036
- "exports": []
10037
- },
10038
10185
  {
10039
10186
  "kind": "javascript-module",
10040
10187
  "path": "src/components/mui-textarea/doc.ts",
@@ -10163,6 +10310,36 @@
10163
10310
  }
10164
10311
  ]
10165
10312
  },
10313
+ {
10314
+ "kind": "javascript-module",
10315
+ "path": "src/components/mui-tabs/doc.ts",
10316
+ "declarations": [
10317
+ {
10318
+ "kind": "variable",
10319
+ "name": "muiDocs",
10320
+ "type": {
10321
+ "text": "MuiDocs"
10322
+ },
10323
+ "default": "{ Tabs: { title: \"Tabs\", description: \"Allows users to switch between views or content sections by selecting from a group of tabs. Tabs keep related content within a single surface, reducing the need for navigation and maintaining context.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/5EC8Uj4pMaQGe2UcNntYLX/040eb1feec8def04504dfa3729494b52/Tab_bar_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=126-560&t=ZfvVjZFxH7mQ72pi-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/navigation-tabbar--docs\"], github: [\"https://github.com/michaeltrilford/muibook/tree/main/src/components/mui-tabs\"], website: [\"https://muibook.com/#/tab-bar\"], guides: [\"https://guides.muibook.com/tab-bar\"], usage: { list: [ \"Use to organise related content or views at the same level of hierarchy.\", \"Ideal for toggling between sections without navigating away from the page.\", \"Use the size API (x-small, small, medium, large) to align tabs with adjacent buttons.\", \"Use named slots (before/after) to compose icons and badges in tab items.\", \"Use variant='dots' for compact pagination controls such as carousel navigation.\", \"Use variant='ghost' when you want only active-tab emphasis without outer tab bar chrome.\", \"Keep labels short, clear, and consistently styled.\", \"Avoid using when content is unrelated or exceeds a manageable number of tabs.\", ], }, accessibility: { designerList: [ \"Keyboard users can navigate across tabs using the left/right arrow keys, as well as Home and End keys to jump to the first or last tab.\", \"The active tab always shows a clear focus outline and can be navigated to using the keyboard.\", \"Tabs are grouped in a way that assistive technologies can understand, using standard roles and attributes.\", \"The system keeps track of which tab is active behind the scenes, so screen readers and keyboard users always stay in sync.\", ], engineerList: [ \"Left/Right arrows, Home and End keys let keyboard users navigate between tab-items.\", \"aria-selected and tabindex attributes are updated on each tab-item when it becomes active or inactive.\", \"Each active tab-item can receive focus and shows a focus-visible outline.\", \"tab-bar uses role=tablist to group related tab-items and each tab-item uses role=tab within the tab-bar.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/koeu63xbKYOWZgs8i0eev/983e09362714a2dcdcc7262889ba1236/Tabs_-_Anatomy.png\", list: [ \"Active: Indicates the currently selected tab.\", \"Inactive: Indicates a tab that is not selected and is waiting for user interaction.\", ], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"wallet\", name: \"Wallet\", description: \"This example shows a wallet view featuring a digital card, transaction and statement tabs. It demonstrates how foundational components like tabs, slats, and buttons can be composed to create flexible, real-world layouts.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/6RoGBcahh63o16PAcEsgyX/36f5c8d9bf0e8754a574955b32ee6eda/Tab_Bar_-_Composition.png\", }, { key: \"product-carousel\", name: \"Product Carousel\", description: \"Demonstrates how to add custom compositions and layouts within the carousel panels.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4NRMfGil4AcMUh7FDhYyHz/7c4636822eba6d3ae15e684f50d10fdd/Carousel_-_Composition.png\", }, { key: \"carousel-showcase\", name: \"Carousel Showcase\", description: \"This example from the GuruSuite website demonstrates the carousel used to showcase two of the products on offer.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2TaRRm351HyujF9mT2w1wH/3958f69e939d20618751742130dc5f06/GuruSuite-Carousel-Composition.png\", }, ], }, related: { items: [ { name: \"Carousel\", link: \"https://guides.muibook.com/carousel\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
10324
+ }
10325
+ ],
10326
+ "exports": [
10327
+ {
10328
+ "kind": "js",
10329
+ "name": "muiDocs",
10330
+ "declaration": {
10331
+ "name": "muiDocs",
10332
+ "module": "src/components/mui-tabs/doc.ts"
10333
+ }
10334
+ }
10335
+ ]
10336
+ },
10337
+ {
10338
+ "kind": "javascript-module",
10339
+ "path": "src/components/mui-tabs/index.ts",
10340
+ "declarations": [],
10341
+ "exports": []
10342
+ },
10166
10343
  {
10167
10344
  "kind": "javascript-module",
10168
10345
  "path": "src/components/mui-accordion/block/index.ts",
@@ -10409,55 +10586,18 @@
10409
10586
  },
10410
10587
  {
10411
10588
  "kind": "javascript-module",
10412
- "path": "src/components/mui-accordion/group/index.ts",
10589
+ "path": "src/components/mui-accordion/inline/index.ts",
10413
10590
  "declarations": [
10414
10591
  {
10415
10592
  "kind": "class",
10416
10593
  "description": "",
10417
- "name": "MuiAccordionGroup",
10594
+ "name": "MuiAccordionInline",
10418
10595
  "members": [
10419
10596
  {
10420
10597
  "kind": "field",
10421
- "name": "accordions",
10598
+ "name": "summaryEl",
10422
10599
  "type": {
10423
- "text": "AccordionBlockElement[]"
10424
- },
10425
- "privacy": "private",
10426
- "default": "[]"
10427
- }
10428
- ],
10429
- "superclass": {
10430
- "name": "HTMLElement"
10431
- },
10432
- "tagName": "mui-accordion-group",
10433
- "customElement": true
10434
- }
10435
- ],
10436
- "exports": [
10437
- {
10438
- "kind": "custom-element-definition",
10439
- "name": "mui-accordion-group",
10440
- "declaration": {
10441
- "name": "MuiAccordionGroup",
10442
- "module": "src/components/mui-accordion/group/index.ts"
10443
- }
10444
- }
10445
- ]
10446
- },
10447
- {
10448
- "kind": "javascript-module",
10449
- "path": "src/components/mui-accordion/inline/index.ts",
10450
- "declarations": [
10451
- {
10452
- "kind": "class",
10453
- "description": "",
10454
- "name": "MuiAccordionInline",
10455
- "members": [
10456
- {
10457
- "kind": "field",
10458
- "name": "summaryEl",
10459
- "type": {
10460
- "text": "HTMLElement | null"
10600
+ "text": "HTMLElement | null"
10461
10601
  },
10462
10602
  "privacy": "private"
10463
10603
  },
@@ -10550,6 +10690,43 @@
10550
10690
  }
10551
10691
  ]
10552
10692
  },
10693
+ {
10694
+ "kind": "javascript-module",
10695
+ "path": "src/components/mui-accordion/group/index.ts",
10696
+ "declarations": [
10697
+ {
10698
+ "kind": "class",
10699
+ "description": "",
10700
+ "name": "MuiAccordionGroup",
10701
+ "members": [
10702
+ {
10703
+ "kind": "field",
10704
+ "name": "accordions",
10705
+ "type": {
10706
+ "text": "AccordionBlockElement[]"
10707
+ },
10708
+ "privacy": "private",
10709
+ "default": "[]"
10710
+ }
10711
+ ],
10712
+ "superclass": {
10713
+ "name": "HTMLElement"
10714
+ },
10715
+ "tagName": "mui-accordion-group",
10716
+ "customElement": true
10717
+ }
10718
+ ],
10719
+ "exports": [
10720
+ {
10721
+ "kind": "custom-element-definition",
10722
+ "name": "mui-accordion-group",
10723
+ "declaration": {
10724
+ "name": "MuiAccordionGroup",
10725
+ "module": "src/components/mui-accordion/group/index.ts"
10726
+ }
10727
+ }
10728
+ ]
10729
+ },
10553
10730
  {
10554
10731
  "kind": "javascript-module",
10555
10732
  "path": "src/components/mui-card/body/index.ts",
@@ -10630,32 +10807,6 @@
10630
10807
  }
10631
10808
  ]
10632
10809
  },
10633
- {
10634
- "kind": "javascript-module",
10635
- "path": "src/components/mui-card/footer/index.ts",
10636
- "declarations": [
10637
- {
10638
- "kind": "class",
10639
- "description": "",
10640
- "name": "MuiCardFooter",
10641
- "superclass": {
10642
- "name": "HTMLElement"
10643
- },
10644
- "tagName": "mui-card-footer",
10645
- "customElement": true
10646
- }
10647
- ],
10648
- "exports": [
10649
- {
10650
- "kind": "custom-element-definition",
10651
- "name": "mui-card-footer",
10652
- "declaration": {
10653
- "name": "MuiCardFooter",
10654
- "module": "src/components/mui-card/footer/index.ts"
10655
- }
10656
- }
10657
- ]
10658
- },
10659
10810
  {
10660
10811
  "kind": "javascript-module",
10661
10812
  "path": "src/components/mui-card/header/index.ts",
@@ -10816,6 +10967,32 @@
10816
10967
  }
10817
10968
  ]
10818
10969
  },
10970
+ {
10971
+ "kind": "javascript-module",
10972
+ "path": "src/components/mui-card/footer/index.ts",
10973
+ "declarations": [
10974
+ {
10975
+ "kind": "class",
10976
+ "description": "",
10977
+ "name": "MuiCardFooter",
10978
+ "superclass": {
10979
+ "name": "HTMLElement"
10980
+ },
10981
+ "tagName": "mui-card-footer",
10982
+ "customElement": true
10983
+ }
10984
+ ],
10985
+ "exports": [
10986
+ {
10987
+ "kind": "custom-element-definition",
10988
+ "name": "mui-card-footer",
10989
+ "declaration": {
10990
+ "name": "MuiCardFooter",
10991
+ "module": "src/components/mui-card/footer/index.ts"
10992
+ }
10993
+ }
10994
+ ]
10995
+ },
10819
10996
  {
10820
10997
  "kind": "javascript-module",
10821
10998
  "path": "src/components/mui-carousel/panel/index.ts",
@@ -10992,6 +11169,58 @@
10992
11169
  }
10993
11170
  ]
10994
11171
  },
11172
+ {
11173
+ "kind": "javascript-module",
11174
+ "path": "src/components/mui-stepper/step/index.ts",
11175
+ "declarations": [
11176
+ {
11177
+ "kind": "class",
11178
+ "description": "",
11179
+ "name": "MuiStep",
11180
+ "members": [
11181
+ {
11182
+ "kind": "method",
11183
+ "name": "render"
11184
+ }
11185
+ ],
11186
+ "attributes": [
11187
+ {
11188
+ "name": "state"
11189
+ },
11190
+ {
11191
+ "name": "resolved-state"
11192
+ },
11193
+ {
11194
+ "name": "title"
11195
+ },
11196
+ {
11197
+ "name": "direction"
11198
+ },
11199
+ {
11200
+ "name": "hide-icon"
11201
+ },
11202
+ {
11203
+ "name": "size"
11204
+ }
11205
+ ],
11206
+ "superclass": {
11207
+ "name": "HTMLElement"
11208
+ },
11209
+ "tagName": "mui-step",
11210
+ "customElement": true
11211
+ }
11212
+ ],
11213
+ "exports": [
11214
+ {
11215
+ "kind": "custom-element-definition",
11216
+ "name": "mui-step",
11217
+ "declaration": {
11218
+ "name": "MuiStep",
11219
+ "module": "src/components/mui-stepper/step/index.ts"
11220
+ }
11221
+ }
11222
+ ]
11223
+ },
10995
11224
  {
10996
11225
  "kind": "javascript-module",
10997
11226
  "path": "src/components/mui-slat/slat/index.ts",
@@ -11063,73 +11292,246 @@
11063
11292
  },
11064
11293
  {
11065
11294
  "kind": "javascript-module",
11066
- "path": "src/components/mui-stack/hstack/index.ts",
11295
+ "path": "src/components/mui-stepper/stepper/index.ts",
11067
11296
  "declarations": [
11068
11297
  {
11069
11298
  "kind": "class",
11070
11299
  "description": "",
11071
- "name": "MuiHStack",
11300
+ "name": "MuiStepper",
11072
11301
  "members": [
11073
11302
  {
11074
11303
  "kind": "field",
11075
- "name": "space",
11076
- "type": {
11077
- "text": "string"
11078
- },
11079
- "privacy": "private",
11080
- "default": "`var(--space-500)`"
11304
+ "name": "onKeyDown",
11305
+ "privacy": "private"
11081
11306
  },
11082
11307
  {
11083
11308
  "kind": "field",
11084
- "name": "alignX",
11085
- "type": {
11086
- "text": "string"
11087
- },
11309
+ "name": "steps",
11088
11310
  "privacy": "private",
11089
- "default": "`flex-start`"
11311
+ "readonly": true
11090
11312
  },
11091
11313
  {
11092
11314
  "kind": "field",
11093
- "name": "alignY",
11094
- "type": {
11095
- "text": "string"
11096
- },
11315
+ "name": "activeStepIndex",
11097
11316
  "privacy": "private",
11098
- "default": "`flex-start`"
11317
+ "readonly": true
11099
11318
  },
11100
11319
  {
11101
- "kind": "field",
11102
- "name": "styles",
11103
- "type": {
11104
- "text": "string"
11105
- },
11320
+ "kind": "method",
11321
+ "name": "emitStepChange",
11106
11322
  "privacy": "private",
11107
- "default": "` :host { display: block; } slot { display: flex; gap: var(--space); align-items: var(--alignY); justify-content: var(--alignX); } `"
11323
+ "parameters": [
11324
+ {
11325
+ "name": "previousIndex",
11326
+ "type": {
11327
+ "text": "number"
11328
+ }
11329
+ },
11330
+ {
11331
+ "name": "nextIndex",
11332
+ "type": {
11333
+ "text": "number"
11334
+ }
11335
+ },
11336
+ {
11337
+ "name": "source",
11338
+ "type": {
11339
+ "text": "\"click\" | \"keyboard\" | \"api\""
11340
+ }
11341
+ }
11342
+ ]
11108
11343
  },
11109
11344
  {
11110
11345
  "kind": "method",
11111
- "name": "waitForPartMap",
11112
- "return": {
11113
- "type": {
11114
- "text": "Promise<void>"
11346
+ "name": "setActiveStep",
11347
+ "privacy": "private",
11348
+ "parameters": [
11349
+ {
11350
+ "name": "index",
11351
+ "type": {
11352
+ "text": "number"
11353
+ }
11354
+ },
11355
+ {
11356
+ "name": "source",
11357
+ "type": {
11358
+ "text": "\"click\" | \"keyboard\" | \"api\""
11359
+ }
11115
11360
  }
11116
- }
11117
- }
11118
- ],
11119
- "attributes": [
11120
- {
11121
- "name": "space"
11122
- },
11123
- {
11124
- "name": "aligny"
11361
+ ]
11125
11362
  },
11126
11363
  {
11127
- "name": "alignx"
11128
- }
11129
- ],
11130
- "superclass": {
11131
- "name": "HTMLElement"
11132
- },
11364
+ "kind": "method",
11365
+ "name": "resolveStepState",
11366
+ "privacy": "private",
11367
+ "return": {
11368
+ "type": {
11369
+ "text": "string"
11370
+ }
11371
+ },
11372
+ "parameters": [
11373
+ {
11374
+ "name": "step",
11375
+ "type": {
11376
+ "text": "HTMLElement"
11377
+ }
11378
+ },
11379
+ {
11380
+ "name": "index",
11381
+ "type": {
11382
+ "text": "number"
11383
+ }
11384
+ },
11385
+ {
11386
+ "name": "activeIndex",
11387
+ "type": {
11388
+ "text": "number"
11389
+ }
11390
+ }
11391
+ ]
11392
+ },
11393
+ {
11394
+ "kind": "method",
11395
+ "name": "canActivateStep",
11396
+ "privacy": "private",
11397
+ "parameters": [
11398
+ {
11399
+ "name": "targetIndex",
11400
+ "type": {
11401
+ "text": "number"
11402
+ }
11403
+ },
11404
+ {
11405
+ "name": "activeIndex",
11406
+ "type": {
11407
+ "text": "number"
11408
+ }
11409
+ },
11410
+ {
11411
+ "name": "steps",
11412
+ "type": {
11413
+ "text": "HTMLElement[]"
11414
+ }
11415
+ }
11416
+ ]
11417
+ },
11418
+ {
11419
+ "kind": "method",
11420
+ "name": "render"
11421
+ }
11422
+ ],
11423
+ "events": [
11424
+ {
11425
+ "name": "step-change",
11426
+ "type": {
11427
+ "text": "CustomEvent"
11428
+ }
11429
+ }
11430
+ ],
11431
+ "attributes": [
11432
+ {
11433
+ "name": "direction"
11434
+ },
11435
+ {
11436
+ "name": "active-step"
11437
+ },
11438
+ {
11439
+ "name": "linear"
11440
+ },
11441
+ {
11442
+ "name": "interactive"
11443
+ },
11444
+ {
11445
+ "name": "size"
11446
+ }
11447
+ ],
11448
+ "superclass": {
11449
+ "name": "HTMLElement"
11450
+ },
11451
+ "tagName": "mui-stepper",
11452
+ "customElement": true
11453
+ }
11454
+ ],
11455
+ "exports": [
11456
+ {
11457
+ "kind": "custom-element-definition",
11458
+ "name": "mui-stepper",
11459
+ "declaration": {
11460
+ "name": "MuiStepper",
11461
+ "module": "src/components/mui-stepper/stepper/index.ts"
11462
+ }
11463
+ }
11464
+ ]
11465
+ },
11466
+ {
11467
+ "kind": "javascript-module",
11468
+ "path": "src/components/mui-stack/hstack/index.ts",
11469
+ "declarations": [
11470
+ {
11471
+ "kind": "class",
11472
+ "description": "",
11473
+ "name": "MuiHStack",
11474
+ "members": [
11475
+ {
11476
+ "kind": "field",
11477
+ "name": "space",
11478
+ "type": {
11479
+ "text": "string"
11480
+ },
11481
+ "privacy": "private",
11482
+ "default": "`var(--space-500)`"
11483
+ },
11484
+ {
11485
+ "kind": "field",
11486
+ "name": "alignX",
11487
+ "type": {
11488
+ "text": "string"
11489
+ },
11490
+ "privacy": "private",
11491
+ "default": "`flex-start`"
11492
+ },
11493
+ {
11494
+ "kind": "field",
11495
+ "name": "alignY",
11496
+ "type": {
11497
+ "text": "string"
11498
+ },
11499
+ "privacy": "private",
11500
+ "default": "`flex-start`"
11501
+ },
11502
+ {
11503
+ "kind": "field",
11504
+ "name": "styles",
11505
+ "type": {
11506
+ "text": "string"
11507
+ },
11508
+ "privacy": "private",
11509
+ "default": "` :host { display: block; } slot { display: flex; gap: var(--space); align-items: var(--alignY); justify-content: var(--alignX); } `"
11510
+ },
11511
+ {
11512
+ "kind": "method",
11513
+ "name": "waitForPartMap",
11514
+ "return": {
11515
+ "type": {
11516
+ "text": "Promise<void>"
11517
+ }
11518
+ }
11519
+ }
11520
+ ],
11521
+ "attributes": [
11522
+ {
11523
+ "name": "space"
11524
+ },
11525
+ {
11526
+ "name": "aligny"
11527
+ },
11528
+ {
11529
+ "name": "alignx"
11530
+ }
11531
+ ],
11532
+ "superclass": {
11533
+ "name": "HTMLElement"
11534
+ },
11133
11535
  "tagName": "mui-h-stack",
11134
11536
  "customElement": true,
11135
11537
  "cssParts": [
@@ -11295,6 +11697,43 @@
11295
11697
  }
11296
11698
  ]
11297
11699
  },
11700
+ {
11701
+ "kind": "javascript-module",
11702
+ "path": "src/components/mui-table/cell/index.ts",
11703
+ "declarations": [
11704
+ {
11705
+ "kind": "class",
11706
+ "description": "",
11707
+ "name": "MuiCell",
11708
+ "members": [
11709
+ {
11710
+ "kind": "method",
11711
+ "name": "render"
11712
+ }
11713
+ ],
11714
+ "attributes": [
11715
+ {
11716
+ "name": "align-y"
11717
+ }
11718
+ ],
11719
+ "superclass": {
11720
+ "name": "HTMLElement"
11721
+ },
11722
+ "tagName": "mui-cell",
11723
+ "customElement": true
11724
+ }
11725
+ ],
11726
+ "exports": [
11727
+ {
11728
+ "kind": "custom-element-definition",
11729
+ "name": "mui-cell",
11730
+ "declaration": {
11731
+ "name": "MuiCell",
11732
+ "module": "src/components/mui-table/cell/index.ts"
11733
+ }
11734
+ }
11735
+ ]
11736
+ },
11298
11737
  {
11299
11738
  "kind": "javascript-module",
11300
11739
  "path": "src/components/mui-stack/vstack/index.ts",
@@ -11531,315 +11970,53 @@
11531
11970
  },
11532
11971
  {
11533
11972
  "kind": "javascript-module",
11534
- "path": "src/components/mui-stepper/step/index.ts",
11973
+ "path": "src/components/mui-table/row/index.ts",
11535
11974
  "declarations": [
11536
11975
  {
11537
11976
  "kind": "class",
11538
11977
  "description": "",
11539
- "name": "MuiStep",
11978
+ "name": "MuiRow",
11540
11979
  "members": [
11541
11980
  {
11542
- "kind": "method",
11543
- "name": "render"
11544
- }
11545
- ],
11546
- "attributes": [
11547
- {
11548
- "name": "state"
11981
+ "kind": "field",
11982
+ "name": "tableObserver",
11983
+ "type": {
11984
+ "text": "MutationObserver | undefined"
11985
+ },
11986
+ "privacy": "private"
11549
11987
  },
11550
11988
  {
11551
- "name": "resolved-state"
11989
+ "kind": "method",
11990
+ "name": "syncContextAttributes",
11991
+ "privacy": "private"
11552
11992
  },
11553
11993
  {
11554
- "name": "title"
11994
+ "kind": "method",
11995
+ "name": "observeTableChanges",
11996
+ "privacy": "private"
11555
11997
  },
11556
11998
  {
11557
- "name": "direction"
11999
+ "kind": "method",
12000
+ "name": "clearActionPlaceholderStyles",
12001
+ "privacy": "private",
12002
+ "parameters": [
12003
+ {
12004
+ "name": "cell",
12005
+ "type": {
12006
+ "text": "Element"
12007
+ }
12008
+ }
12009
+ ]
11558
12010
  },
11559
12011
  {
11560
- "name": "hide-icon"
12012
+ "kind": "method",
12013
+ "name": "syncActionColumnState",
12014
+ "privacy": "private"
11561
12015
  },
11562
12016
  {
11563
- "name": "size"
11564
- }
11565
- ],
11566
- "superclass": {
11567
- "name": "HTMLElement"
11568
- },
11569
- "tagName": "mui-step",
11570
- "customElement": true
11571
- }
11572
- ],
11573
- "exports": [
11574
- {
11575
- "kind": "custom-element-definition",
11576
- "name": "mui-step",
11577
- "declaration": {
11578
- "name": "MuiStep",
11579
- "module": "src/components/mui-stepper/step/index.ts"
11580
- }
11581
- }
11582
- ]
11583
- },
11584
- {
11585
- "kind": "javascript-module",
11586
- "path": "src/components/mui-stepper/stepper/index.ts",
11587
- "declarations": [
11588
- {
11589
- "kind": "class",
11590
- "description": "",
11591
- "name": "MuiStepper",
11592
- "members": [
11593
- {
11594
- "kind": "field",
11595
- "name": "onKeyDown",
11596
- "privacy": "private"
11597
- },
11598
- {
11599
- "kind": "field",
11600
- "name": "steps",
11601
- "privacy": "private",
11602
- "readonly": true
11603
- },
11604
- {
11605
- "kind": "field",
11606
- "name": "activeStepIndex",
11607
- "privacy": "private",
11608
- "readonly": true
11609
- },
11610
- {
11611
- "kind": "method",
11612
- "name": "emitStepChange",
11613
- "privacy": "private",
11614
- "parameters": [
11615
- {
11616
- "name": "previousIndex",
11617
- "type": {
11618
- "text": "number"
11619
- }
11620
- },
11621
- {
11622
- "name": "nextIndex",
11623
- "type": {
11624
- "text": "number"
11625
- }
11626
- },
11627
- {
11628
- "name": "source",
11629
- "type": {
11630
- "text": "\"click\" | \"keyboard\" | \"api\""
11631
- }
11632
- }
11633
- ]
11634
- },
11635
- {
11636
- "kind": "method",
11637
- "name": "setActiveStep",
11638
- "privacy": "private",
11639
- "parameters": [
11640
- {
11641
- "name": "index",
11642
- "type": {
11643
- "text": "number"
11644
- }
11645
- },
11646
- {
11647
- "name": "source",
11648
- "type": {
11649
- "text": "\"click\" | \"keyboard\" | \"api\""
11650
- }
11651
- }
11652
- ]
11653
- },
11654
- {
11655
- "kind": "method",
11656
- "name": "resolveStepState",
11657
- "privacy": "private",
11658
- "return": {
11659
- "type": {
11660
- "text": "string"
11661
- }
11662
- },
11663
- "parameters": [
11664
- {
11665
- "name": "step",
11666
- "type": {
11667
- "text": "HTMLElement"
11668
- }
11669
- },
11670
- {
11671
- "name": "index",
11672
- "type": {
11673
- "text": "number"
11674
- }
11675
- },
11676
- {
11677
- "name": "activeIndex",
11678
- "type": {
11679
- "text": "number"
11680
- }
11681
- }
11682
- ]
11683
- },
11684
- {
11685
- "kind": "method",
11686
- "name": "canActivateStep",
11687
- "privacy": "private",
11688
- "parameters": [
11689
- {
11690
- "name": "targetIndex",
11691
- "type": {
11692
- "text": "number"
11693
- }
11694
- },
11695
- {
11696
- "name": "activeIndex",
11697
- "type": {
11698
- "text": "number"
11699
- }
11700
- },
11701
- {
11702
- "name": "steps",
11703
- "type": {
11704
- "text": "HTMLElement[]"
11705
- }
11706
- }
11707
- ]
11708
- },
11709
- {
11710
- "kind": "method",
11711
- "name": "render"
11712
- }
11713
- ],
11714
- "events": [
11715
- {
11716
- "name": "step-change",
11717
- "type": {
11718
- "text": "CustomEvent"
11719
- }
11720
- }
11721
- ],
11722
- "attributes": [
11723
- {
11724
- "name": "direction"
11725
- },
11726
- {
11727
- "name": "active-step"
11728
- },
11729
- {
11730
- "name": "linear"
11731
- },
11732
- {
11733
- "name": "interactive"
11734
- },
11735
- {
11736
- "name": "size"
11737
- }
11738
- ],
11739
- "superclass": {
11740
- "name": "HTMLElement"
11741
- },
11742
- "tagName": "mui-stepper",
11743
- "customElement": true
11744
- }
11745
- ],
11746
- "exports": [
11747
- {
11748
- "kind": "custom-element-definition",
11749
- "name": "mui-stepper",
11750
- "declaration": {
11751
- "name": "MuiStepper",
11752
- "module": "src/components/mui-stepper/stepper/index.ts"
11753
- }
11754
- }
11755
- ]
11756
- },
11757
- {
11758
- "kind": "javascript-module",
11759
- "path": "src/components/mui-table/cell/index.ts",
11760
- "declarations": [
11761
- {
11762
- "kind": "class",
11763
- "description": "",
11764
- "name": "MuiCell",
11765
- "members": [
11766
- {
11767
- "kind": "method",
11768
- "name": "render"
11769
- }
11770
- ],
11771
- "attributes": [
11772
- {
11773
- "name": "align-y"
11774
- }
11775
- ],
11776
- "superclass": {
11777
- "name": "HTMLElement"
11778
- },
11779
- "tagName": "mui-cell",
11780
- "customElement": true
11781
- }
11782
- ],
11783
- "exports": [
11784
- {
11785
- "kind": "custom-element-definition",
11786
- "name": "mui-cell",
11787
- "declaration": {
11788
- "name": "MuiCell",
11789
- "module": "src/components/mui-table/cell/index.ts"
11790
- }
11791
- }
11792
- ]
11793
- },
11794
- {
11795
- "kind": "javascript-module",
11796
- "path": "src/components/mui-table/row/index.ts",
11797
- "declarations": [
11798
- {
11799
- "kind": "class",
11800
- "description": "",
11801
- "name": "MuiRow",
11802
- "members": [
11803
- {
11804
- "kind": "field",
11805
- "name": "tableObserver",
11806
- "type": {
11807
- "text": "MutationObserver | undefined"
11808
- },
11809
- "privacy": "private"
11810
- },
11811
- {
11812
- "kind": "method",
11813
- "name": "syncContextAttributes",
11814
- "privacy": "private"
11815
- },
11816
- {
11817
- "kind": "method",
11818
- "name": "observeTableChanges",
11819
- "privacy": "private"
11820
- },
11821
- {
11822
- "kind": "method",
11823
- "name": "clearActionPlaceholderStyles",
11824
- "privacy": "private",
11825
- "parameters": [
11826
- {
11827
- "name": "cell",
11828
- "type": {
11829
- "text": "Element"
11830
- }
11831
- }
11832
- ]
11833
- },
11834
- {
11835
- "kind": "method",
11836
- "name": "syncActionColumnState",
11837
- "privacy": "private"
11838
- },
11839
- {
11840
- "kind": "method",
11841
- "name": "render",
11842
- "privacy": "private"
12017
+ "kind": "method",
12018
+ "name": "render",
12019
+ "privacy": "private"
11843
12020
  }
11844
12021
  ],
11845
12022
  "attributes": [
@@ -11868,32 +12045,6 @@
11868
12045
  }
11869
12046
  ]
11870
12047
  },
11871
- {
11872
- "kind": "javascript-module",
11873
- "path": "src/components/mui-table/row-group/index.ts",
11874
- "declarations": [
11875
- {
11876
- "kind": "class",
11877
- "description": "",
11878
- "name": "MuiRowGroup",
11879
- "superclass": {
11880
- "name": "HTMLElement"
11881
- },
11882
- "tagName": "mui-row-group",
11883
- "customElement": true
11884
- }
11885
- ],
11886
- "exports": [
11887
- {
11888
- "kind": "custom-element-definition",
11889
- "name": "mui-row-group",
11890
- "declaration": {
11891
- "name": "MuiRowGroup",
11892
- "module": "src/components/mui-table/row-group/index.ts"
11893
- }
11894
- }
11895
- ]
11896
- },
11897
12048
  {
11898
12049
  "kind": "javascript-module",
11899
12050
  "path": "src/components/mui-table/table/index.ts",
@@ -11992,6 +12143,32 @@
11992
12143
  }
11993
12144
  ]
11994
12145
  },
12146
+ {
12147
+ "kind": "javascript-module",
12148
+ "path": "src/components/mui-table/row-group/index.ts",
12149
+ "declarations": [
12150
+ {
12151
+ "kind": "class",
12152
+ "description": "",
12153
+ "name": "MuiRowGroup",
12154
+ "superclass": {
12155
+ "name": "HTMLElement"
12156
+ },
12157
+ "tagName": "mui-row-group",
12158
+ "customElement": true
12159
+ }
12160
+ ],
12161
+ "exports": [
12162
+ {
12163
+ "kind": "custom-element-definition",
12164
+ "name": "mui-row-group",
12165
+ "declaration": {
12166
+ "name": "MuiRowGroup",
12167
+ "module": "src/components/mui-table/row-group/index.ts"
12168
+ }
12169
+ }
12170
+ ]
12171
+ },
11995
12172
  {
11996
12173
  "kind": "javascript-module",
11997
12174
  "path": "src/components/mui-tabs/item/index.ts",