@muibook/components 11.0.1 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,7 +42,7 @@
42
42
  "type": {
43
43
  "text": "MuiDocs"
44
44
  },
45
- "default": "{ AddOn: { title: \"Add on\", description: \"Enhances form inputs by displaying supplementary information such as units, prefixes, or suffixes adjacent to the input field. Add Ons improve clarity by providing context without adding clutter to the input area.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/3GH67kZLZAjADf3kTIoSV3/82a1ab87bc13b25e6dc1e81c81f69532/AddOn_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=948-4065&t=rIU93UcpsUxOVNN9-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-addon--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-addon/index.ts\"], website: [\"https://muibook.com/#/addon\"], guides: [\"https://guides.muibook.com/add-on\"], usage: { list: [ \"Use to display units (e.g. %, $, kg) or fixed prefixes/suffixes alongside inputs.\", \"Ideal for improving data entry accuracy and user understanding.\", \"Ensure Add Ons are visually distinct but do not overpower the main input content.\", \"Avoid overcrowding inputs with multiple Add Ons to maintain clarity.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { list: [ \"Add-on placed before the Input Field\", \"Add-on placed after the Input Field\", \"Short text, an icon, or both to support input context.\", ], image: \"https://images.ctfassets.net/i5uwscj4pkk2/13NH06kdHIzm8hDGNBgihx/f5715279e5ab5e2ce6bfd5d38f5f2d1d/Add_on_-_Anatomy.png\", }, variants: { items: [ { key: \"text\", title: \"Text\", description: \"Use for units, currency, or short static labels.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/VfAoQuP8u7icg5s6Shwd6/f5f838a3ffda0d0839ef062af308fc97/text-variant.png\", }, { key: \"icon\", title: \"Icon\", description: \"Use for symbolic cues or clarification of the input’s intent.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1LY5GdVijhp7bpfRs3WyFc/6d1708bd25496d7f33acba796b8b2aa6/icon-variant.png\", }, ], }, related: { items: [ { name: \"Field\", link: \"https://guides.muibook.com/field\" }, { name: \"Input\", link: \"https://guides.muibook.com/input\" }, { name: \"Select\", link: \"https://guides.muibook.com/select\" }, { name: \"File Upload\", link: \"https://guides.muibook.com/file-upload\" }, { name: \"Icons\", link: \"https://guides.muibook.com/icons\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [ { description: \"\", image: \"\" }, { description: \"\", image: \"\" }, ], dontContent: [{ description: \"\" }, { description: \"\" }], }, ], compositions: { description: \"\", items: [ { key: \"\", name: \"\", description: \"\", image: \"\", }, ], }, behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
45
+ "default": "{ AddOn: { title: \"Add on\", description: \"Enhances form inputs by displaying supplementary information such as units, prefixes, or suffixes adjacent to the input field. Add Ons improve clarity by providing context without adding clutter to the input area.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/3GH67kZLZAjADf3kTIoSV3/82a1ab87bc13b25e6dc1e81c81f69532/AddOn_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=948-4065&t=rIU93UcpsUxOVNN9-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-addon--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-addon/index.ts\"], website: [\"https://muibook.com/#/addon\"], guides: [\"https://guides.muibook.com/add-on\"], usage: { list: [ \"Use to display units (e.g. %, $, kg) or fixed prefixes/suffixes alongside inputs.\", \"Ideal for improving data entry accuracy and user understanding.\", \"Use size (x-small to large) to match compact and dense input layouts.\", \"Ensure Add Ons are visually distinct but do not overpower the main input content.\", \"Avoid overcrowding inputs with multiple Add Ons to maintain clarity.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { list: [ \"Add-on placed before the Input Field\", \"Add-on placed after the Input Field\", \"Short text, an icon, or both to support input context.\", ], image: \"https://images.ctfassets.net/i5uwscj4pkk2/13NH06kdHIzm8hDGNBgihx/f5715279e5ab5e2ce6bfd5d38f5f2d1d/Add_on_-_Anatomy.png\", }, variants: { items: [ { key: \"text\", title: \"Text\", description: \"Use for units, currency, or short static labels.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/VfAoQuP8u7icg5s6Shwd6/f5f838a3ffda0d0839ef062af308fc97/text-variant.png\", }, { key: \"icon\", title: \"Icon\", description: \"Use for symbolic cues or clarification of the input’s intent.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1LY5GdVijhp7bpfRs3WyFc/6d1708bd25496d7f33acba796b8b2aa6/icon-variant.png\", }, ], }, related: { items: [ { name: \"Field\", link: \"https://guides.muibook.com/field\" }, { name: \"Input\", link: \"https://guides.muibook.com/input\" }, { name: \"Select\", link: \"https://guides.muibook.com/select\" }, { name: \"File Upload\", link: \"https://guides.muibook.com/file-upload\" }, { name: \"Icons\", link: \"https://guides.muibook.com/icons\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [ { description: \"\", image: \"\" }, { description: \"\", image: \"\" }, ], dontContent: [{ description: \"\" }, { description: \"\" }], }, ], compositions: { description: \"\", items: [ { key: \"\", name: \"\", description: \"\", image: \"\", }, ], }, behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
46
46
  }
47
47
  ],
48
48
  "exports": [
@@ -65,6 +65,11 @@
65
65
  "description": "",
66
66
  "name": "MuiAddon",
67
67
  "members": [
68
+ {
69
+ "kind": "method",
70
+ "name": "syncSlottedContent",
71
+ "privacy": "private"
72
+ },
68
73
  {
69
74
  "kind": "method",
70
75
  "name": "render"
@@ -73,6 +78,9 @@
73
78
  "attributes": [
74
79
  {
75
80
  "name": "slot"
81
+ },
82
+ {
83
+ "name": "size"
76
84
  }
77
85
  ],
78
86
  "superclass": {
@@ -715,36 +723,6 @@
715
723
  "declarations": [],
716
724
  "exports": []
717
725
  },
718
- {
719
- "kind": "javascript-module",
720
- "path": "src/components/mui-carousel/doc.ts",
721
- "declarations": [
722
- {
723
- "kind": "variable",
724
- "name": "muiDocs",
725
- "type": {
726
- "text": "MuiDocs"
727
- },
728
- "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: [\"\"], }, }, }"
729
- }
730
- ],
731
- "exports": [
732
- {
733
- "kind": "js",
734
- "name": "muiDocs",
735
- "declaration": {
736
- "name": "muiDocs",
737
- "module": "src/components/mui-carousel/doc.ts"
738
- }
739
- }
740
- ]
741
- },
742
- {
743
- "kind": "javascript-module",
744
- "path": "src/components/mui-carousel/index.ts",
745
- "declarations": [],
746
- "exports": []
747
- },
748
726
  {
749
727
  "kind": "javascript-module",
750
728
  "path": "src/components/mui-checkbox/doc.ts",
@@ -853,6 +831,36 @@
853
831
  }
854
832
  ]
855
833
  },
834
+ {
835
+ "kind": "javascript-module",
836
+ "path": "src/components/mui-carousel/doc.ts",
837
+ "declarations": [
838
+ {
839
+ "kind": "variable",
840
+ "name": "muiDocs",
841
+ "type": {
842
+ "text": "MuiDocs"
843
+ },
844
+ "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: [\"\"], }, }, }"
845
+ }
846
+ ],
847
+ "exports": [
848
+ {
849
+ "kind": "js",
850
+ "name": "muiDocs",
851
+ "declaration": {
852
+ "name": "muiDocs",
853
+ "module": "src/components/mui-carousel/doc.ts"
854
+ }
855
+ }
856
+ ]
857
+ },
858
+ {
859
+ "kind": "javascript-module",
860
+ "path": "src/components/mui-carousel/index.ts",
861
+ "declarations": [],
862
+ "exports": []
863
+ },
856
864
  {
857
865
  "kind": "javascript-module",
858
866
  "path": "src/components/mui-chip/doc.ts",
@@ -2058,7 +2066,7 @@
2058
2066
  "type": {
2059
2067
  "text": "MuiDocs"
2060
2068
  },
2061
- "default": "{ Field: { title: \"Field\", description: \"A Field allows users to input or select data. It includes a label, an optional required indicator, and supports validation feedback to communicate errors or requirements.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/1HqTclvMBXW2jyvUwLummp/ac1dc5c5a4c0596c2122b3f4bc06d0be/Field_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=112-620&t=GMqx21isUVAMpLJp-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-field--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-field/index.ts\"], website: [\"https://muibook.com/#/field\"], guides: [\"https://guides.muibook.com/field\"], usage: { list: [ \"Acts as a parent wrapper for form elements such as Input, Select, Textarea, and Radio Group.\", \"Use size='x-small|small|medium|large' on Field to keep slotted controls consistent.\", \"Use slot='message' for rich helper/validation content (for example, mui-form-message with icons).\", \"Inside Form Group, keep helper/validation content attached to each related Field via slot='message'.\", \"Use clear, descriptive labels so users understand the purpose of the form field.\", \"Mark required fields with an asterisk (*) and validate input before submission.\", \"Display validation messages in real-time or upon submission to guide corrections.\", \"Helper and supporting copy should be intentionally knocked back so form controls remain visually primary.\", ], }, accessibility: { designerList: [ \"A visible or hidden label is required to describe the input’s purpose for screen readers.\", \"Using hide-label keeps the label accessible via aria-label while hiding it visually.\", \"The label and input are linked using for and id; an id is auto-generated if not provided.\", \"Clear focus styles are shown to support keyboard navigation.\", ], engineerList: [ \"A label is required for screen reader support to describe the input’s purpose.\", \"If hide-label is used, the label is visually hidden but accessible via aria-label.\", \"The label and form element are linked via for and id. If no id is provided, one is generated.\", \"Clear focus styles are shown for keyboard users.\", \"The native disabled attribute is fully supported by assistive tech.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/5nW3j8xOoMpTGLTljUAqPI/6ea6a47139a044feaa63697a40753cf2/Field_-_Anatomy.png\", list: [ \"Label: The Field component supports a label, useful for grouping multiple inputs or when applying the label at the parent level is preferred.\", \"Message: Supports rendering static text or dynamic messages that reflect the field’s state, such as success, warning, or error.\", \"Slot: Allows insertion of related form components like Input or Select as children within the Field.\", \"Message Slot: Supports custom helper content using slot='message'.\", ], }, variants: { items: [ { key: \"default\", title: \"Default\", description: \"Standard field with label and no message. Used when no additional feedback is required.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7rycX2tj569EplbANsiQmA/3c4f173807e9a3f40750a49e31612285/default.png\", }, { key: \"default-with-message\", title: \"Default w/ Message\", description: \"Includes supporting text beneath the field. Use to provide guidance, context, or character limits.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1krnirIt4OKRZTkYRqXR2T/bbbb42a4afc3873407ceeb78e0fdb801/default-message.png\", }, { key: \"optional-with-message\", title: \"Optional w/ Message\", description: \"Use for non-blocking helper context. The optional token keeps emphasis low while preserving clarity.\", image: \"\", }, { key: \"success-with-message\", title: \"Success w/ Message\", description: \"Indicates a successful validation state. Use to confirm correct input, such as valid formatting or completion.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/kSXvQ6D4hvuP3c9bC0ZUa/319272dc75f0b08493753a49c0fbff75/success-message.png\", }, { key: \"warning-with-message\", title: \"Warning w/ Message\", description: \"Indicates a non-blocking issue. Use when input may be acceptable but needs user attention.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5YIUAUlqh3ZfzzDvq5YgN5/7bb42ed1049af149719796b5cfb1a949/warning-message.png\", }, { key: \"error-with-message\", title: \"Error w/ Message\", description: \"Displays a validation error. Use when input is invalid or required and has not been completed.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4yYS7D87CmJmnOVh75fwMc/c000af5c0ce3cb42a10c8e18b41d6312/error-message.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { 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: \"Input\", link: \"https://guides.muibook.com/input\" }, { name: \"Select\", link: \"https://guides.muibook.com/select\" }, { 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: [\"\"], }, }, }"
2069
+ "default": "{ Field: { title: \"Field\", description: \"A Field allows users to input or select data. It includes a label, an optional required indicator, and supports validation feedback to communicate errors or requirements.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/1HqTclvMBXW2jyvUwLummp/ac1dc5c5a4c0596c2122b3f4bc06d0be/Field_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=112-620&t=GMqx21isUVAMpLJp-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-field--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-field/index.ts\"], website: [\"https://muibook.com/#/field\"], guides: [\"https://guides.muibook.com/field\"], usage: { list: [ \"Acts as a parent wrapper for form elements such as Input, Select, Textarea, and Radio Group.\", \"Use size='x-small|small|medium|large' on Field and let it inherit size to the slotted control.\", \"Use slot='message' for rich helper/validation content (for example, mui-form-message with icons); Field inherits size to message content.\", \"Use optional on Field and let it inherit to the slotted form control label treatment.\", \"Inside Form Group, keep helper/validation content attached to each related Field via slot='message'.\", \"Use clear, descriptive labels so users understand the purpose of the form field.\", \"Mark required fields with an asterisk (*) and validate input before submission.\", \"Display validation messages in real-time or upon submission to guide corrections.\", \"Helper and supporting copy should be intentionally knocked back so form controls remain visually primary.\", ], }, accessibility: { designerList: [ \"A visible or hidden label is required to describe the input’s purpose for screen readers.\", \"Using hide-label keeps the label accessible via aria-label while hiding it visually.\", \"The label and input are linked using for and id; an id is auto-generated if not provided.\", \"Clear focus styles are shown to support keyboard navigation.\", ], engineerList: [ \"A label is required for screen reader support to describe the input’s purpose.\", \"If hide-label is used, the label is visually hidden but accessible via aria-label.\", \"The label and form element are linked via for and id. If no id is provided, one is generated.\", \"Clear focus styles are shown for keyboard users.\", \"The native disabled attribute is fully supported by assistive tech.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/5nW3j8xOoMpTGLTljUAqPI/6ea6a47139a044feaa63697a40753cf2/Field_-_Anatomy.png\", list: [ \"Label: The Field component supports a label, useful for grouping multiple inputs or when applying the label at the parent level is preferred.\", \"Message: Supports rendering static text or dynamic messages that reflect the field’s state, such as success, warning, or error.\", \"Slot: Allows insertion of related form components like Input or Select as children within the Field.\", \"Message Slot: Supports custom helper content using slot='message'.\", ], }, variants: { items: [ { key: \"default\", title: \"Default\", description: \"Standard field with label and no message. Used when no additional feedback is required.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7rycX2tj569EplbANsiQmA/3c4f173807e9a3f40750a49e31612285/default.png\", }, { key: \"default-with-message\", title: \"Default w/ Message\", description: \"Includes supporting text beneath the field. Use to provide guidance, context, or character limits.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1krnirIt4OKRZTkYRqXR2T/bbbb42a4afc3873407ceeb78e0fdb801/default-message.png\", }, { key: \"optional-with-message\", title: \"Optional w/ Message\", description: \"Use for non-blocking helper context. The optional token keeps emphasis low while preserving clarity.\", image: \"\", }, { key: \"success-with-message\", title: \"Success w/ Message\", description: \"Indicates a successful validation state. Use to confirm correct input, such as valid formatting or completion.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/kSXvQ6D4hvuP3c9bC0ZUa/319272dc75f0b08493753a49c0fbff75/success-message.png\", }, { key: \"warning-with-message\", title: \"Warning w/ Message\", description: \"Indicates a non-blocking issue. Use when input may be acceptable but needs user attention.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5YIUAUlqh3ZfzzDvq5YgN5/7bb42ed1049af149719796b5cfb1a949/warning-message.png\", }, { key: \"error-with-message\", title: \"Error w/ Message\", description: \"Displays a validation error. Use when input is invalid or required and has not been completed.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4yYS7D87CmJmnOVh75fwMc/c000af5c0ce3cb42a10c8e18b41d6312/error-message.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { 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: \"Input\", link: \"https://guides.muibook.com/input\" }, { name: \"Select\", link: \"https://guides.muibook.com/select\" }, { 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: [\"\"], }, }, }"
2062
2070
  }
2063
2071
  ],
2064
2072
  "exports": [
@@ -2101,6 +2109,10 @@
2101
2109
  "kind": "field",
2102
2110
  "name": "size"
2103
2111
  },
2112
+ {
2113
+ "kind": "field",
2114
+ "name": "optional"
2115
+ },
2104
2116
  {
2105
2117
  "kind": "method",
2106
2118
  "name": "passAttributesToChild"
@@ -2109,6 +2121,10 @@
2109
2121
  "kind": "method",
2110
2122
  "name": "renderMessage"
2111
2123
  },
2124
+ {
2125
+ "kind": "method",
2126
+ "name": "syncMessageSlotSizing"
2127
+ },
2112
2128
  {
2113
2129
  "kind": "method",
2114
2130
  "name": "bindSlotEvents"
@@ -2134,6 +2150,9 @@
2134
2150
  },
2135
2151
  {
2136
2152
  "name": "size"
2153
+ },
2154
+ {
2155
+ "name": "optional"
2137
2156
  }
2138
2157
  ],
2139
2158
  "superclass": {
@@ -3081,7 +3100,7 @@
3081
3100
  "type": {
3082
3101
  "text": "MuiDocs"
3083
3102
  },
3084
- "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.\", \"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=“” 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=“” 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: [\"\"], }, }, }"
3103
+ "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=“” 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=“” 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: [\"\"], }, }, }"
3085
3104
  }
3086
3105
  ],
3087
3106
  "exports": [
@@ -3103,6 +3122,85 @@
3103
3122
  "kind": "class",
3104
3123
  "description": "",
3105
3124
  "name": "MuiImage",
3125
+ "members": [
3126
+ {
3127
+ "kind": "field",
3128
+ "name": "observer",
3129
+ "type": {
3130
+ "text": "MutationObserver | null"
3131
+ },
3132
+ "privacy": "private",
3133
+ "default": "null"
3134
+ },
3135
+ {
3136
+ "kind": "method",
3137
+ "name": "syncChildSlots",
3138
+ "privacy": "private"
3139
+ },
3140
+ {
3141
+ "kind": "method",
3142
+ "name": "clampPercent",
3143
+ "privacy": "private",
3144
+ "parameters": [
3145
+ {
3146
+ "name": "value",
3147
+ "type": {
3148
+ "text": "string | null"
3149
+ }
3150
+ },
3151
+ {
3152
+ "name": "fallback",
3153
+ "type": {
3154
+ "text": "number"
3155
+ }
3156
+ }
3157
+ ]
3158
+ },
3159
+ {
3160
+ "kind": "method",
3161
+ "name": "getPosition",
3162
+ "privacy": "private"
3163
+ },
3164
+ {
3165
+ "kind": "method",
3166
+ "name": "getZoom",
3167
+ "privacy": "private"
3168
+ },
3169
+ {
3170
+ "kind": "method",
3171
+ "name": "render",
3172
+ "privacy": "private"
3173
+ }
3174
+ ],
3175
+ "attributes": [
3176
+ {
3177
+ "name": "height"
3178
+ },
3179
+ {
3180
+ "name": "fit"
3181
+ },
3182
+ {
3183
+ "name": "crop"
3184
+ },
3185
+ {
3186
+ "name": "position"
3187
+ },
3188
+ {
3189
+ "name": "zoom"
3190
+ },
3191
+ {
3192
+ "name": "focal-x"
3193
+ },
3194
+ {
3195
+ "name": "focal-y"
3196
+ },
3197
+ {
3198
+ "name": "radius"
3199
+ },
3200
+ {
3201
+ "name": "aspect-ratio"
3202
+ }
3203
+ ],
3106
3204
  "superclass": {
3107
3205
  "name": "HTMLElement"
3108
3206
  },
@@ -3131,7 +3229,7 @@
3131
3229
  "type": {
3132
3230
  "text": "MuiDocs"
3133
3231
  },
3134
- "default": "{ Input: { title: \"Input\", description: \"An input component for capturing user text, styled for consistency across your UI.\", hero: [\"\"], figma: [\"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=3-795&t=GMqx21isUVAMpLJp-1\"], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-input--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-input/index.ts\"], website: [\"https://muibook.com/#/input\"], guides: [\"https://guides.muibook.com/input\"], usage: { list: [ \"Ensure the purpose of the input is clear, either through a placeholder text or surrounding context.\", \"Ensure validation feedback is considered when using an input. E.g. Error text.\", \"Ensure the experience has clear focus states to support keyboard accessibility.\", \"Select the appropriate input types for the specific use case. E.g. Text, Email, Password.\", \"Use size='x-small|small|medium|large' to align inputs with surrounding form controls.\", \"Use mui-chip in before/after slots for tag-style contextual input patterns.\", \"Use placeholder text to provide context of the input use; avoid using them as primary labels.\", \"Avoid relying solely on placeholder text for instructions, as it disappears when users start typing.\", \"Use the optional attribute when a field is not required to show a clear (optional) marker in the label.\", \"Use max-length when input limits matter; the component shows a live character count.\", \"In React controlled mode, keep value updates isolated from structural attribute updates (label, type, placeholder, variant) to avoid focus loss while typing.\", ], }, accessibility: { designerList: [\"\"], engineerList: [ \"A label is required for screen reader support to describe the input's purpose.\", \"If hide-label is used, the label is visually hidden but accessible via aria-label.\", \"The label and input are linked via for and id. If no id is provided, one is generated.\", \"Clear focus styles are shown for keyboard users.\", \"The native disabled attribute is fully supported by assistive tech.\", \"Optional fields can be explicitly communicated with the optional attribute without changing label association.\", \"When max-length is set, users get visible character progress while native maxlength enforcement remains intact.\", \"For React integrations, prefer reading event.detail.value from the web component custom event instead of querying shadow DOM internals.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/5aiWlqSJ4BYCGtXn9MbGd/2734f1771c0e666806060bc85f753927/Input_-_Anatomy.png\", list: [ \"Label: Describes the purpose of the Input; 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.\", \"Text: The label or placeholder text that describes the input field’s purpose.\", \"Before: Optional icons can be placed before or after the text input for additional functionality or clarity (e.g., search or password visibility icons).\", \"After: Optional icons can be placed before or after the text input for additional functionality or clarity (e.g., search or password visibility icons).\", \"Slot Before: Allows insertion of an Add-On, Select, or Button before the input to provide contextual or interactive elements. Some design craft may be needed to align elements visually in tools like Figma.\", \"Slot After: Allows insertion of an Add-On, Select, or Button after the input to support or clarify the user’s entry. Some design craft may be needed to ensure alignment and spacing look accurate in design tools.\", ], }, variants: { items: [ { key: \"default\", title: \"Default\", description: \"The standard Input with visible label and no interaction or validation states applied. Used for most form field scenarios.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5t0SMtVRHvOSHiuHZ8jLfS/64da2bbaf5d2f4216f1c876f205c1298/input-default.png\", }, { key: \"hide-label\", title: \"Hide Label\", description: \"The label is visually hidden but remains accessible to screen readers. Use when the label context is already clear from surrounding UI. Ensure the label name is documented for developers, as the component requires a label for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4wC0xbPgmsMGi6YhMG8PnI/f01da9a977092a2da1e128fbee3325eb/input-hide-label.png\", }, { key: \"hover\", title: \"Hover\", description: \"Displays the hover state styling when a pointer is placed over the Input. Useful for demonstrating interactive feedback.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5IXEcxa2RxqubupHmblDhd/ab41eba34289194733a87994b096e95d/input-hover.png\", }, { key: \"focus\", title: \"Focus\", description: \"Shows the focus ring or border to indicate that the Input is currently active. Supports accessible keyboard navigation.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4AA4IcIdnov9MfSeY4rSdL/bbaf44297cdd4bd09d626b707dbe5f47/input-focus.png\", }, { key: \"error\", title: \"Error\", description: \"Displays a visual error style to indicate invalid input. Used with the Field component to surface validation messaging.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2LYMpJwtH7f8KfPYl0vwAg/385529402b5e73399320c9581c8e1301/input-error.png\", }, { key: \"input-field\", title: \"Input + Field\", description: \"Displays a visual error style to indicate invalid input. Used with the Field component to surface validation messaging.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/kSXvQ6D4hvuP3c9bC0ZUa/319272dc75f0b08493753a49c0fbff75/success-message.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"user-details\", name: \"User Details (Step 1)\", description: \"This composition uses an accordion to contain a step in a multi-step flow. It focuses on input fields with labels, placeholders, and optional states, keeping the layout compact and clear.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1L2XfteVwNBQcFlddTYmfi/c791eb538285e2cfb919342e84228811/accordion-block_-_Variants.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: \"Field\", link: \"https://guides.muibook.com/field\", }, { name: \"Select\", link: \"https://guides.muibook.com/select\", }, { 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: [\"\"], }, }, }"
3232
+ "default": "{ Input: { title: \"Input\", description: \"An input component for capturing user text, styled for consistency across your UI.\", hero: [\"\"], figma: [\"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=3-795&t=GMqx21isUVAMpLJp-1\"], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-input--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-input/index.ts\"], website: [\"https://muibook.com/#/input\"], guides: [\"https://guides.muibook.com/input\"], usage: { list: [ \"Ensure the purpose of the input is clear, either through a placeholder text or surrounding context.\", \"Ensure validation feedback is considered when using an input. E.g. Error text.\", \"Ensure the experience has clear focus states to support keyboard accessibility.\", \"Select the appropriate input types for the specific use case. E.g. Text, Email, Password.\", \"Use size='x-small|small|medium|large' to align inputs with surrounding form controls.\", \"Use slot='hint' for contextual overlays, including mui-hint with interactive tooltip content.\", \"Use mui-chip in before/after slots for tag-style contextual input patterns.\", \"Use placeholder text to provide context of the input use; avoid using them as primary labels.\", \"Avoid relying solely on placeholder text for instructions, as it disappears when users start typing.\", \"Use the optional attribute when a field is not required to show a clear (optional) marker in the label.\", \"Use max-length when input limits matter; the component shows a live character count.\", \"In React controlled mode, keep value updates isolated from structural attribute updates (label, type, placeholder, variant) to avoid focus loss while typing.\", ], }, accessibility: { designerList: [\"\"], engineerList: [ \"A label is required for screen reader support to describe the input's purpose.\", \"If hide-label is used, the label is visually hidden but accessible via aria-label.\", \"The label and input are linked via for and id. If no id is provided, one is generated.\", \"Clear focus styles are shown for keyboard users.\", \"The native disabled attribute is fully supported by assistive tech.\", \"Optional fields can be explicitly communicated with the optional attribute without changing label association.\", \"When max-length is set, users get visible character progress while native maxlength enforcement remains intact.\", \"For React integrations, prefer reading event.detail.value from the web component custom event instead of querying shadow DOM internals.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/5aiWlqSJ4BYCGtXn9MbGd/2734f1771c0e666806060bc85f753927/Input_-_Anatomy.png\", list: [ \"Label: Describes the purpose of the Input; 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.\", \"Text: The label or placeholder text that describes the input field’s purpose.\", \"Before: Optional icons can be placed before or after the text input for additional functionality or clarity (e.g., search or password visibility icons).\", \"After: Optional icons can be placed before or after the text input for additional functionality or clarity (e.g., search or password visibility icons).\", \"Slot Before: Allows insertion of an Add-On, Select, or Button before the input to provide contextual or interactive elements. Some design craft may be needed to align elements visually in tools like Figma.\", \"Slot After: Allows insertion of an Add-On, Select, or Button after the input to support or clarify the user’s entry. Some design craft may be needed to ensure alignment and spacing look accurate in design tools.\", ], }, variants: { items: [ { key: \"default\", title: \"Default\", description: \"The standard Input with visible label and no interaction or validation states applied. Used for most form field scenarios.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5t0SMtVRHvOSHiuHZ8jLfS/64da2bbaf5d2f4216f1c876f205c1298/input-default.png\", }, { key: \"hide-label\", title: \"Hide Label\", description: \"The label is visually hidden but remains accessible to screen readers. Use when the label context is already clear from surrounding UI. Ensure the label name is documented for developers, as the component requires a label for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4wC0xbPgmsMGi6YhMG8PnI/f01da9a977092a2da1e128fbee3325eb/input-hide-label.png\", }, { key: \"hover\", title: \"Hover\", description: \"Displays the hover state styling when a pointer is placed over the Input. Useful for demonstrating interactive feedback.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5IXEcxa2RxqubupHmblDhd/ab41eba34289194733a87994b096e95d/input-hover.png\", }, { key: \"focus\", title: \"Focus\", description: \"Shows the focus ring or border to indicate that the Input is currently active. Supports accessible keyboard navigation.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4AA4IcIdnov9MfSeY4rSdL/bbaf44297cdd4bd09d626b707dbe5f47/input-focus.png\", }, { key: \"error\", title: \"Error\", description: \"Displays a visual error style to indicate invalid input. Used with the Field component to surface validation messaging.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2LYMpJwtH7f8KfPYl0vwAg/385529402b5e73399320c9581c8e1301/input-error.png\", }, { key: \"input-field\", title: \"Input + Field\", description: \"Displays a visual error style to indicate invalid input. Used with the Field component to surface validation messaging.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/kSXvQ6D4hvuP3c9bC0ZUa/319272dc75f0b08493753a49c0fbff75/success-message.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"user-details\", name: \"User Details (Step 1)\", description: \"This composition uses an accordion to contain a step in a multi-step flow. It focuses on input fields with labels, placeholders, and optional states, keeping the layout compact and clear.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1L2XfteVwNBQcFlddTYmfi/c791eb538285e2cfb919342e84228811/accordion-block_-_Variants.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: \"Field\", link: \"https://guides.muibook.com/field\", }, { name: \"Select\", link: \"https://guides.muibook.com/select\", }, { 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: [\"\"], }, }, }"
3135
3233
  }
3136
3234
  ],
3137
3235
  "exports": [
@@ -5739,7 +5837,7 @@
5739
5837
  },
5740
5838
  {
5741
5839
  "kind": "javascript-module",
5742
- "path": "src/components/mui-markdown/doc.ts",
5840
+ "path": "src/components/mui-loader/doc.ts",
5743
5841
  "declarations": [
5744
5842
  {
5745
5843
  "kind": "variable",
@@ -5747,7 +5845,7 @@
5747
5845
  "type": {
5748
5846
  "text": "MuiDocs"
5749
5847
  },
5750
- "default": "{ Markdown: { title: \"Markdown\", description: \"Renders Markdown content using Muibook components so docs stay on-brand and framework-agnostic.\", hero: [\"\"], figma: [\"\"], storybook: [\"\"], github: [ \"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-markdown/index.ts\", ], website: [\"\"], guides: [\"\"], usage: { list: [ \"Use when Markdown content should render using Muibook components.\", \"Great for docs, release notes, and help content sourced from files or APIs.\", \"Supports GFM tables, code blocks, inline code, blockquotes, links, and images.\", \"Adds stable heading IDs for in-page navigation and TOC linking.\", \"Provides copy buttons for code blocks by default.\", \"Supports custom markers like grid, box, space, and rule.\", \"Use body-size and code-size to align typography with the surrounding UI.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { image: \"\", list: [\"\"], }, variants: { items: [ { key: \"default\", title: \"Default\", description: \"Markdown rendered with Muibook components.\", image: \"\", }, ], }, compositions: { description: \"Markdown can be used to author content that will render into Muibook layout and typography components.\", items: [ { key: \"docs\", name: \"Docs\", description: \"Use for rich documentation pages that need headings, lists, tables, and code blocks.\", image: \"\", }, ], }, related: { items: [ { name: \"Code\", link: \"https://guides.muibook.com/code\" }, { name: \"Table\", link: \"https://guides.muibook.com/table\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [ \"Accepts markdown via the markdown attribute or inner text content.\", \"Re-renders when markdown, body-size, or code-size attributes change.\", \"Observes text content when markdown is not set, so live edits are reflected.\", \"Renders tables into mui-table with horizontal scroll and a minimum width.\", \"Code blocks render mui-code with a copy button that writes to clipboard.\", ], }, writing: { list: [ \"Keep headings short and scannable.\", \"Prefer lists and short paragraphs for readability.\", \"Use markers like -- space-400 -- or -- grid-col-1fr-1fr -- for layout spacing and grids.\", ], }, }, }"
5848
+ "default": "{ Loader: { title: \"Loader\", description: \"The Loader component applies smooth, built-in transitions during page loads, content updates, or skeleton placeholders to maintain a seamless, polished experience.\", hero: [\"\"], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=1059-12710&t=BwezUSymTClm00wJ-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/feedback-loader--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-loader/index.ts\"], website: [\"\"], guides: [\"https://guides.muibook.com/loader\"], usage: { list: [ \"Wrap any page or UI section with Mui-Loader to automatically display loading animations.\", \"Ideal for initial page loads, content transitions, or skeleton screens while data is fetching.\", \"When crafting skeleton states inside Loader, prefer design tokens, rem units, and percentages over fixed pixel sizes.\", \"Compose placeholders with Muibook layout components such as mui-v-stack, mui-h-stack, and mui-grid for consistent spacing.\", \"Applied to pages or key components for seamless load transitions.\", \"Works seamlessly with other MUI components and layouts without additional setup.\", \"Use with Mui Spinner, skeletons, or other feedback to improve perceived performance.\", ], }, accessibility: { designerList: [ \"The loader is announced to screen readers via role='status', ensuring updates are conveyed politely.\", \"aria-busy is set to true when loading, indicating the region is currently in a 'busy' state.\", \"A visually hidden 'Loading…' text is included by default to provide meaningful content for screen readers, even if the slotted content is purely visual.\", \"The component respects the user’s reduced motion preferences via prefers-reduced-motion, preventing potentially distracting animations.\", \"No additional labels are required from the consumer, making it lightweight and flexible while remaining accessible by default.\", ], engineerList: [ \"The loader is announced to screen readers via role='status', ensuring updates are conveyed politely.\", \"aria-busy is set to true when loading, indicating the region is currently in a 'busy' state.\", \"A visually hidden 'Loading…' text is included by default to provide meaningful content for screen readers, even if the slotted content is purely visual.\", \"The component respects the user’s reduced motion preferences via prefers-reduced-motion, preventing potentially distracting animations.\", \"No additional labels are required from the consumer, making it lightweight and flexible while remaining accessible by default.\", ], }, anatomy: { image: \"\", list: [\"\"], }, variants: { items: [ { key: \"pulsate\", title: \"Pulsate\", description: \"\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5gZwRuH4Ojs38xlq7HAMCt/47be2502487c0d85955c203788442d12/pulse.gif\", }, { key: \"fade-in\", title: \"Fade-In\", description: \"\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/xPo8WGtJjoiW5y8gcXFJG/ed432ec413dc4839129139dad546e926/fade-in.gif\", }, { key: \"translate-up\", title: \"Translate: Up\", description: \"Default direction is Up. Ability to define the preferred direction: Up, Right, Down, Left.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4UTi4tmMxdiTDNR0wi5AOt/8d0e21d88eb33c71d1c7f69df8f42772/up.gif\", }, { key: \"translate-down\", title: \"Translate: Down\", description: \"Default direction is Up. Ability to define the preferred direction: Up, Right, Down, Left.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/63936AreBgAC7oxohQbLpY/e26318a5b4b6aaa790f363c4180d92ad/down.gif\", }, { key: \"translate-left\", title: \"Translate: Left\", description: \"Default direction is Up. Ability to define the preferred direction: Up, Right, Down, Left.\", image: \"hhttps://images.ctfassets.net/i5uwscj4pkk2/5Rzmo4ISRIfaY5aMAbO1U6/0db9896ce44b9704960fde8bc9b70a07/left.gif\", }, { key: \"translate-right\", title: \"Translate: Right\", description: \"Default direction is Up. Ability to define the preferred direction: Up, Right, Down, Left.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2pzlTEsdJj4FKmnsleLO0T/79a8d4fbecc3953a9ec21772df5ee9ac/right.gif\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"guru-outcomes-dashboard\", name: \"Guru Outcomes - Dashboard\", description: \"Use the <mui-loader> component to mask slow network or initial data load times. Combine its features to create a seamless loading experience.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7fsKn4mqKGieVh2D1EdyuR/a9afa145001e13470054aa9d7004127d/outcomes-home.gif\", }, { key: \"guru-outcomes-roadmap\", name: \"Guru Outcomes - Roadmap\", description: \"The Loader component in action on the roadmap page, smoothly loading the UI while masking delays and improving perceived performance.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7Hebis0o1mlvvDZlQRZfzl/f0c06679ab417f2ee624b570226da77d/outcomes-roadmap.gif\", }, ], }, related: { items: [ { name: \"Spinner\", link: \"https://guides.muibook.com/loader\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
5751
5849
  }
5752
5850
  ],
5753
5851
  "exports": [
@@ -5756,81 +5854,60 @@
5756
5854
  "name": "muiDocs",
5757
5855
  "declaration": {
5758
5856
  "name": "muiDocs",
5759
- "module": "src/components/mui-markdown/doc.ts"
5857
+ "module": "src/components/mui-loader/doc.ts"
5760
5858
  }
5761
5859
  }
5762
5860
  ]
5763
5861
  },
5764
5862
  {
5765
5863
  "kind": "javascript-module",
5766
- "path": "src/components/mui-markdown/index.ts",
5864
+ "path": "src/components/mui-loader/index.ts",
5767
5865
  "declarations": [
5768
5866
  {
5769
5867
  "kind": "class",
5770
5868
  "description": "",
5771
- "name": "MuiMarkdown",
5869
+ "name": "MuiLoader",
5772
5870
  "members": [
5773
- {
5774
- "kind": "field",
5775
- "name": "observer",
5776
- "type": {
5777
- "text": "MutationObserver | undefined"
5778
- },
5779
- "privacy": "private"
5780
- },
5781
5871
  {
5782
5872
  "kind": "method",
5783
- "name": "getBodySize",
5784
- "privacy": "private"
5785
- },
5786
- {
5787
- "kind": "method",
5788
- "name": "getCodeSize",
5789
- "privacy": "private"
5790
- },
5791
- {
5792
- "kind": "method",
5793
- "name": "getMarkdown",
5794
- "privacy": "private"
5795
- },
5796
- {
5797
- "kind": "method",
5798
- "name": "render",
5799
- "privacy": "private"
5873
+ "name": "render"
5800
5874
  }
5801
5875
  ],
5802
5876
  "attributes": [
5803
5877
  {
5804
- "name": "markdown"
5878
+ "name": "loading"
5805
5879
  },
5806
5880
  {
5807
- "name": "body-size"
5881
+ "name": "animation"
5808
5882
  },
5809
5883
  {
5810
- "name": "code-size"
5884
+ "name": "direction"
5885
+ },
5886
+ {
5887
+ "name": "duration"
5811
5888
  }
5812
5889
  ],
5813
5890
  "superclass": {
5814
5891
  "name": "HTMLElement"
5815
5892
  },
5816
- "tagName": "mui-markdown",
5893
+ "tagName": "mui-loader",
5817
5894
  "customElement": true
5818
5895
  }
5819
5896
  ],
5820
5897
  "exports": [
5821
5898
  {
5822
5899
  "kind": "custom-element-definition",
5823
- "name": "mui-markdown",
5900
+ "name": "mui-loader",
5824
5901
  "declaration": {
5825
- "name": "MuiMarkdown",
5826
- "module": "src/components/mui-markdown/index.ts"
5902
+ "name": "MuiLoader",
5903
+ "module": "src/components/mui-loader/index.ts"
5827
5904
  }
5828
5905
  }
5829
5906
  ]
5830
5907
  },
5831
5908
  {
5832
5909
  "kind": "javascript-module",
5833
- "path": "src/components/mui-media-player/doc.ts",
5910
+ "path": "src/components/mui-markdown/doc.ts",
5834
5911
  "declarations": [
5835
5912
  {
5836
5913
  "kind": "variable",
@@ -5838,7 +5915,7 @@
5838
5915
  "type": {
5839
5916
  "text": "MuiDocs"
5840
5917
  },
5841
- "default": "{ MediaPlayer: { title: \"Media Player\", description: \"Media Player renders native audio/video and provider embeds (YouTube, SoundCloud) from a single src input. This is a new exploration for the system and will iterate over time.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-media-player/index.ts\"], website: [\"https://muibook.com/#/media-player\"], guides: [\"https://guides.muibook.com/prompt\"], usage: { list: [ \"Use for pasted media links when you want consistent in-product preview behavior.\", \"Rely on auto-detection for YouTube, SoundCloud, mp4/webm, and mp3/wav links.\", \"Set type only when you need to force a specific renderer.\", \"Native media controls include a seek-time hover bubble and a clickable time mode toggle (elapsed/total and remaining/total).\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"Provide meaningful context around media purpose and avoid autoplay unless required.\"], }, anatomy: { image: \"\", list: [\"Media frame\", \"Native controls (video/audio)\", \"Progress/time row (native only)\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Prompt\", link: \"https://guides.muibook.com/prompt\" }, { name: \"Prompt Preview\", link: \"https://guides.muibook.com/prompt-preview\" }, ], }, rules: [{ heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }] }], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, }"
5918
+ "default": "{ Markdown: { title: \"Markdown\", description: \"Renders Markdown content using Muibook components so docs stay on-brand and framework-agnostic.\", hero: [\"\"], figma: [\"\"], storybook: [\"\"], github: [ \"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-markdown/index.ts\", ], website: [\"\"], guides: [\"\"], usage: { list: [ \"Use when Markdown content should render using Muibook components.\", \"Great for docs, release notes, and help content sourced from files or APIs.\", \"Supports GFM tables, code blocks, inline code, blockquotes, links, and images.\", \"Adds stable heading IDs for in-page navigation and TOC linking.\", \"Provides copy buttons for code blocks by default.\", \"Supports custom markers like grid, box, space, and rule.\", \"Use body-size and code-size to align typography with the surrounding UI.\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"\"], }, anatomy: { image: \"\", list: [\"\"], }, variants: { items: [ { key: \"default\", title: \"Default\", description: \"Markdown rendered with Muibook components.\", image: \"\", }, ], }, compositions: { description: \"Markdown can be used to author content that will render into Muibook layout and typography components.\", items: [ { key: \"docs\", name: \"Docs\", description: \"Use for rich documentation pages that need headings, lists, tables, and code blocks.\", image: \"\", }, ], }, related: { items: [ { name: \"Code\", link: \"https://guides.muibook.com/code\" }, { name: \"Table\", link: \"https://guides.muibook.com/table\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [ \"Accepts markdown via the markdown attribute or inner text content.\", \"Re-renders when markdown, body-size, or code-size attributes change.\", \"Observes text content when markdown is not set, so live edits are reflected.\", \"Renders tables into mui-table with horizontal scroll and a minimum width.\", \"Code blocks render mui-code with a copy button that writes to clipboard.\", ], }, writing: { list: [ \"Keep headings short and scannable.\", \"Prefer lists and short paragraphs for readability.\", \"Use markers like -- space-400 -- or -- grid-col-1fr-1fr -- for layout spacing and grids.\", ], }, }, }"
5842
5919
  }
5843
5920
  ],
5844
5921
  "exports": [
@@ -5847,63 +5924,78 @@
5847
5924
  "name": "muiDocs",
5848
5925
  "declaration": {
5849
5926
  "name": "muiDocs",
5850
- "module": "src/components/mui-media-player/doc.ts"
5927
+ "module": "src/components/mui-markdown/doc.ts"
5851
5928
  }
5852
5929
  }
5853
5930
  ]
5854
5931
  },
5855
5932
  {
5856
5933
  "kind": "javascript-module",
5857
- "path": "src/components/mui-media-player/index.ts",
5934
+ "path": "src/components/mui-markdown/index.ts",
5858
5935
  "declarations": [
5859
5936
  {
5860
5937
  "kind": "class",
5861
5938
  "description": "",
5862
- "name": "MuiMediaPlayer",
5939
+ "name": "MuiMarkdown",
5863
5940
  "members": [
5864
5941
  {
5865
5942
  "kind": "field",
5866
- "name": "countdownMode",
5943
+ "name": "observer",
5867
5944
  "type": {
5868
- "text": "boolean"
5945
+ "text": "MutationObserver | undefined"
5946
+ },
5947
+ "privacy": "private"
5948
+ },
5949
+ {
5950
+ "kind": "field",
5951
+ "name": "lightboxEl",
5952
+ "type": {
5953
+ "text": "HTMLDivElement | null"
5869
5954
  },
5870
5955
  "privacy": "private",
5871
- "default": "false"
5956
+ "default": "null"
5872
5957
  },
5873
5958
  {
5874
5959
  "kind": "method",
5875
- "name": "resolveType",
5876
- "privacy": "private",
5877
- "return": {
5878
- "type": {
5879
- "text": "ResolvedType"
5880
- }
5881
- },
5882
- "parameters": [
5883
- {
5884
- "name": "src",
5885
- "type": {
5886
- "text": "string"
5887
- }
5888
- }
5889
- ]
5960
+ "name": "getBodySize",
5961
+ "privacy": "private"
5890
5962
  },
5891
5963
  {
5892
5964
  "kind": "method",
5893
- "name": "getYouTubeEmbed",
5965
+ "name": "getCodeSize",
5966
+ "privacy": "private"
5967
+ },
5968
+ {
5969
+ "kind": "method",
5970
+ "name": "getMarkdown",
5971
+ "privacy": "private"
5972
+ },
5973
+ {
5974
+ "kind": "method",
5975
+ "name": "getRenderRoot",
5976
+ "privacy": "private"
5977
+ },
5978
+ {
5979
+ "kind": "method",
5980
+ "name": "isLightboxEnabled",
5981
+ "privacy": "private"
5982
+ },
5983
+ {
5984
+ "kind": "method",
5985
+ "name": "applyTableColumns",
5894
5986
  "privacy": "private",
5895
5987
  "parameters": [
5896
5988
  {
5897
- "name": "src",
5989
+ "name": "renderRoot",
5898
5990
  "type": {
5899
- "text": "string"
5991
+ "text": "ParentNode"
5900
5992
  }
5901
5993
  }
5902
5994
  ]
5903
5995
  },
5904
5996
  {
5905
5997
  "kind": "method",
5906
- "name": "getSoundcloudEmbed",
5998
+ "name": "openLightbox",
5907
5999
  "privacy": "private",
5908
6000
  "parameters": [
5909
6001
  {
@@ -5911,76 +6003,98 @@
5911
6003
  "type": {
5912
6004
  "text": "string"
5913
6005
  }
6006
+ },
6007
+ {
6008
+ "name": "alt",
6009
+ "type": {
6010
+ "text": "string"
6011
+ }
6012
+ },
6013
+ {
6014
+ "name": "caption",
6015
+ "optional": true,
6016
+ "type": {
6017
+ "text": "string"
6018
+ }
5914
6019
  }
5915
6020
  ]
5916
6021
  },
5917
6022
  {
5918
6023
  "kind": "method",
5919
- "name": "formatTime",
6024
+ "name": "closeLightbox",
6025
+ "privacy": "private"
6026
+ },
6027
+ {
6028
+ "kind": "method",
6029
+ "name": "bindHandlers",
5920
6030
  "privacy": "private",
5921
6031
  "parameters": [
5922
6032
  {
5923
- "name": "seconds",
6033
+ "name": "renderRoot",
5924
6034
  "type": {
5925
- "text": "number"
6035
+ "text": "ParentNode"
5926
6036
  }
5927
6037
  }
5928
6038
  ]
5929
6039
  },
5930
6040
  {
5931
6041
  "kind": "method",
5932
- "name": "bindControls",
6042
+ "name": "render",
5933
6043
  "privacy": "private"
5934
- },
5935
- {
5936
- "kind": "method",
5937
- "name": "render"
5938
6044
  }
5939
6045
  ],
5940
- "attributes": [
6046
+ "events": [
5941
6047
  {
5942
- "name": "src"
6048
+ "name": "mui-markdown-lightbox-change",
6049
+ "type": {
6050
+ "text": "CustomEvent"
6051
+ }
5943
6052
  },
5944
6053
  {
5945
- "name": "type"
5946
- },
6054
+ "name": "mui-markdown-image-click",
6055
+ "type": {
6056
+ "text": "CustomEvent"
6057
+ }
6058
+ }
6059
+ ],
6060
+ "attributes": [
5947
6061
  {
5948
- "name": "autoplay"
6062
+ "name": "markdown"
5949
6063
  },
5950
6064
  {
5951
- "name": "muted"
6065
+ "name": "body-size"
5952
6066
  },
5953
6067
  {
5954
- "name": "loop"
6068
+ "name": "code-size"
5955
6069
  },
5956
6070
  {
5957
- "name": "poster"
6071
+ "name": "render-mode"
5958
6072
  },
5959
6073
  {
5960
- "name": "prefer-native-controls"
6074
+ "name": "lightbox"
5961
6075
  }
5962
6076
  ],
5963
6077
  "superclass": {
5964
6078
  "name": "HTMLElement"
5965
6079
  },
5966
- "tagName": "mui-media-player",
6080
+ "tagName": "mui-markdown",
5967
6081
  "customElement": true
5968
6082
  }
5969
6083
  ],
5970
6084
  "exports": [
5971
6085
  {
5972
6086
  "kind": "custom-element-definition",
5973
- "name": "mui-media-player",
6087
+ "name": "mui-markdown",
5974
6088
  "declaration": {
5975
- "name": "MuiMediaPlayer",
5976
- "module": "src/components/mui-media-player/index.ts"
6089
+ "name": "MuiMarkdown",
6090
+ "module": "src/components/mui-markdown/index.ts"
5977
6091
  }
5978
6092
  }
5979
6093
  ]
5980
6094
  },
5981
6095
  {
5982
6096
  "kind": "javascript-module",
5983
- "path": "src/components/mui-message/doc.ts",
6097
+ "path": "src/components/mui-media-player/doc.ts",
5984
6098
  "declarations": [
5985
6099
  {
5986
6100
  "kind": "variable",
@@ -5988,7 +6102,7 @@
5988
6102
  "type": {
5989
6103
  "text": "MuiDocs"
5990
6104
  },
5991
- "default": "{ Message: { title: \"Message\", description: \"The message component provides persistent, non-dismissible notifications that remain visible until the system determines they should be suspended. Unlike alerts, these messages are static elements integrated into the page layout, offering continuous information without disrupting the user’s workflow.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/01OU9JbOlDZGvbpkq2ismi/b0410cb8002858ded88987d9556daa04/Message_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=9-1053&t=ZA9uH4LK37tSuk6r-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/feedback-message--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-message/index.ts\"], website: [\"https://muibook.com/#/message\"], guides: [\"https://guides.muibook.com/message\"], usage: { list: [ \"Plain: A subtle, transparent style suited for vibrant backgrounds where minimal visual impact is preferred.\", \"Neutral: A calm, balanced tone for non-critical, persistent messages.\", \"Positive: To confirm successful actions like form submissions, saves, or completed tasks.\", \"Info: To share feature announcements, enhancements, or contextual onboarding tips.\", \"Warning: Caution users about potential issues such as unsaved changes or upcoming expirations.\", \"Attention: Highlight urgent issues like system errors or security breaches requiring immediate action.\", ], }, accessibility: { designerList: [ \"ARIA-live is built in, using POLITE + ASSERTIVE for screen readers.\", \"Neutral, Postive, Info support the role of STATUS for screen reader feedback.\", \"Warning, Attention support the role of ALERT for screen reader feedback.\", ], engineerList: [ \"ARIA-live is built in, using POLITE + ASSERTIVE for screen readers.\", \"Neutral, Postive, Info support the role of STATUS for screen reader feedback.\", \"Warning, Attention support the role of ALERT for screen reader feedback.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/6S1MOtZZKP2bxYuIUNScSC/993a910363fbfbba29a3de384ecb182a/Message_-_Anatomy.png\", list: [ \"Preset icon: Communicates the type of message visually. E.g. neutral, positive, info, warning, attention.\", \"Customisable title: Allows for a general heading that describes the message details or guidance relevant to the situation.\", \"Customisable text: Allows for specific details or guidance relevant to the situation.\", ], }, variants: { items: [ { key: \"plain\", title: \"Plain\", description: \"A subtle, transparent style designed for vibrant backgrounds where minimal visual impact is preferred. Best for passive messages like accessibility notes, system status, or routine updates. Use for non-critical information that doesn’t require immediate attention or action. This variant sets aria-live='polite' and role='status' for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/21KWc3TZOJPqZ2BtZ3ngrY/3cbf4aa6df3a72f195eebaa8fe8ecfde/message-plain.png\", }, { key: \"neutral\", title: \"Neutral\", description: \"The Neutral state offers a calm, balanced tone for non-critical, persistent messages. It is suitable for displaying non-urgent information, such as background status like sync confirmation or feature explanations. This variant uses aria-live='polite' and role='status' for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2VF8KPxaXCm6P4dlpsAnXs/5a2011d1a63a900dcdd6669ec5c097e9/message-neutral.png\", }, { key: \"positive\", title: \"Positive\", description: \"The Positive state conveys successful actions, confirmations, or achievements, helping foster a sense of accomplishment and satisfaction. It’s used to indicate things like successful form submissions, completed tasks, or acknowledged milestones. This variant uses aria-live='polite' and role='status' for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2HOuPOpHOuMGuVUoPAs5MI/ff1e156bc8f31e580972289fcc7bf3d7/message-positive.png\", }, { key: \"info\", title: \"Info\", description: \"The Info state provides helpful messages that inform users about system status, feature updates, or changes—guiding them without urgency. It’s suitable for announcing new features, enhancements, or system changes, and works well for onboarding tips or contextual help. This variant uses aria-live='polite' and role='status' for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1x63W880Trpx0GYiYQJhCt/72c09a93d6ec34a18bc15310927fe9ef/message-info.png\", }, { key: \"warning\", title: \"Warning\", description: \"The Warning state alerts users to potential issues that may require attention, helping prevent errors or misunderstandings. It’s commonly used to notify users of unsaved changes, actions with potential consequences, or upcoming limitations or expirations. This variant uses aria-live='assertive' and role='alert' for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/50V1Ap7vVxPUWRbbKh0kx5/2fe4c203befa779087c8b23984d951b7/message-warning.png\", }, { key: \"attention\", title: \"Attention\", description: \"The Attention state demands immediate user focus, highlighting critical issues that require prompt action. It’s used to alert users to urgent problems like system errors or security breaches, or for time-sensitive notifications that significantly impact the user experience. This variant uses aria-live='assertive' and role='alert' for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5GXIEuluNJBlg8h4hDCfWH/ddeec560354ab06af73bf5c5d8749c12/message-attention.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"plain-message\", name: \"Plain message\", description: \"This example uses the Plain variant, suitable for both white and colored backgrounds. It’s ideal for presenting information passively, without demanding user attention. In this case, it’s used to deliver accessibility notes.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3akJJDd28DOIhQrYq6g4y2/456c02f32dc9c40d84d92371b7ddbead/message-composition-neutral.png\", }, { key: \"info-message\", name: \"Info message\", description: \"Use a page-level Info message to remind users to log in to the provided tools, ensuring the MUI Guidelines are shown instead of the default guidelines.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1ySFimf3eEleYLPKomWuem/34772aed4257db976f2ca8cb633d3d5b/message-composition-info.png\", }, ], }, related: { items: [ { name: \"Alert\", link: \"https://guides.muibook.com/alert\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
6105
+ "default": "{ MediaPlayer: { title: \"Media Player\", description: \"Media Player renders native audio/video and provider embeds (YouTube, SoundCloud) from a single src input. This is a new exploration for the system and will iterate over time.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-media-player/index.ts\"], website: [\"https://muibook.com/#/media-player\"], guides: [\"https://guides.muibook.com/prompt\"], usage: { list: [ \"Use for pasted media links when you want consistent in-product preview behavior.\", \"Rely on auto-detection for YouTube, SoundCloud, mp4/webm, and mp3/wav links.\", \"Set type only when you need to force a specific renderer.\", \"Native media controls include a seek-time hover bubble and a clickable time mode toggle (elapsed/total and remaining/total).\", ], }, accessibility: { designerList: [\"\"], engineerList: [\"Provide meaningful context around media purpose and avoid autoplay unless required.\"], }, anatomy: { image: \"\", list: [\"Media frame\", \"Native controls (video/audio)\", \"Progress/time row (native only)\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Prompt\", link: \"https://guides.muibook.com/prompt\" }, { name: \"Prompt Preview\", link: \"https://guides.muibook.com/prompt-preview\" }, ], }, rules: [{ heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }] }], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, }"
5992
6106
  }
5993
6107
  ],
5994
6108
  "exports": [
@@ -5997,111 +6111,140 @@
5997
6111
  "name": "muiDocs",
5998
6112
  "declaration": {
5999
6113
  "name": "muiDocs",
6000
- "module": "src/components/mui-message/doc.ts"
6114
+ "module": "src/components/mui-media-player/doc.ts"
6001
6115
  }
6002
6116
  }
6003
6117
  ]
6004
6118
  },
6005
6119
  {
6006
6120
  "kind": "javascript-module",
6007
- "path": "src/components/mui-message/index.ts",
6121
+ "path": "src/components/mui-media-player/index.ts",
6008
6122
  "declarations": [
6009
6123
  {
6010
6124
  "kind": "class",
6011
6125
  "description": "",
6012
- "name": "MuiMessage",
6126
+ "name": "MuiMediaPlayer",
6013
6127
  "members": [
6014
6128
  {
6015
6129
  "kind": "field",
6016
- "name": "contentSlotListener",
6130
+ "name": "countdownMode",
6017
6131
  "type": {
6018
- "text": "(() => void) | null"
6132
+ "text": "boolean"
6019
6133
  },
6020
6134
  "privacy": "private",
6021
- "default": "null"
6135
+ "default": "false"
6022
6136
  },
6023
6137
  {
6024
6138
  "kind": "method",
6025
- "name": "getMessageSize",
6139
+ "name": "resolveType",
6026
6140
  "privacy": "private",
6027
6141
  "return": {
6028
6142
  "type": {
6029
- "text": "MessageSize"
6143
+ "text": "ResolvedType"
6030
6144
  }
6031
- }
6145
+ },
6146
+ "parameters": [
6147
+ {
6148
+ "name": "src",
6149
+ "type": {
6150
+ "text": "string"
6151
+ }
6152
+ }
6153
+ ]
6032
6154
  },
6033
6155
  {
6034
6156
  "kind": "method",
6035
- "name": "getInlineContentSize",
6157
+ "name": "getYouTubeEmbed",
6036
6158
  "privacy": "private",
6037
- "return": {
6038
- "type": {
6039
- "text": "string"
6159
+ "parameters": [
6160
+ {
6161
+ "name": "src",
6162
+ "type": {
6163
+ "text": "string"
6164
+ }
6040
6165
  }
6041
- },
6166
+ ]
6167
+ },
6168
+ {
6169
+ "kind": "method",
6170
+ "name": "getSoundcloudEmbed",
6171
+ "privacy": "private",
6042
6172
  "parameters": [
6043
6173
  {
6044
- "name": "size",
6174
+ "name": "src",
6045
6175
  "type": {
6046
- "text": "MessageSize"
6176
+ "text": "string"
6047
6177
  }
6048
6178
  }
6049
6179
  ]
6050
6180
  },
6051
6181
  {
6052
6182
  "kind": "method",
6053
- "name": "setupContentSlot",
6183
+ "name": "formatTime",
6054
6184
  "privacy": "private",
6055
6185
  "parameters": [
6056
6186
  {
6057
- "name": "size",
6187
+ "name": "seconds",
6058
6188
  "type": {
6059
- "text": "MessageSize"
6189
+ "text": "number"
6060
6190
  }
6061
6191
  }
6062
6192
  ]
6063
6193
  },
6064
6194
  {
6065
6195
  "kind": "method",
6066
- "name": "render",
6196
+ "name": "bindControls",
6067
6197
  "privacy": "private"
6198
+ },
6199
+ {
6200
+ "kind": "method",
6201
+ "name": "render"
6068
6202
  }
6069
6203
  ],
6070
6204
  "attributes": [
6071
6205
  {
6072
- "name": "variant"
6206
+ "name": "src"
6073
6207
  },
6074
6208
  {
6075
- "name": "heading"
6209
+ "name": "type"
6076
6210
  },
6077
6211
  {
6078
- "name": "icon"
6212
+ "name": "autoplay"
6079
6213
  },
6080
6214
  {
6081
- "name": "size"
6215
+ "name": "muted"
6216
+ },
6217
+ {
6218
+ "name": "loop"
6219
+ },
6220
+ {
6221
+ "name": "poster"
6222
+ },
6223
+ {
6224
+ "name": "prefer-native-controls"
6082
6225
  }
6083
6226
  ],
6084
6227
  "superclass": {
6085
6228
  "name": "HTMLElement"
6086
6229
  },
6087
- "tagName": "mui-message",
6230
+ "tagName": "mui-media-player",
6088
6231
  "customElement": true
6089
6232
  }
6090
6233
  ],
6091
6234
  "exports": [
6092
6235
  {
6093
6236
  "kind": "custom-element-definition",
6094
- "name": "mui-message",
6237
+ "name": "mui-media-player",
6095
6238
  "declaration": {
6096
- "name": "MuiMessage",
6097
- "module": "src/components/mui-message/index.ts"
6239
+ "name": "MuiMediaPlayer",
6240
+ "module": "src/components/mui-media-player/index.ts"
6098
6241
  }
6099
6242
  }
6100
6243
  ]
6101
6244
  },
6102
6245
  {
6103
6246
  "kind": "javascript-module",
6104
- "path": "src/components/mui-loader/doc.ts",
6247
+ "path": "src/components/mui-message/doc.ts",
6105
6248
  "declarations": [
6106
6249
  {
6107
6250
  "kind": "variable",
@@ -6109,7 +6252,7 @@
6109
6252
  "type": {
6110
6253
  "text": "MuiDocs"
6111
6254
  },
6112
- "default": "{ Loader: { title: \"Loader\", description: \"The Loader component applies smooth, built-in transitions during page loads, content updates, or skeleton placeholders to maintain a seamless, polished experience.\", hero: [\"\"], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=1059-12710&t=BwezUSymTClm00wJ-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/feedback-loader--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-loader/index.ts\"], website: [\"\"], guides: [\"https://guides.muibook.com/loader\"], usage: { list: [ \"Wrap any page or UI section with Mui-Loader to automatically display loading animations.\", \"Ideal for initial page loads, content transitions, or skeleton screens while data is fetching.\", \"Applied to pages or key components for seamless load transitions.\", \"Works seamlessly with other MUI components and layouts without additional setup.\", \"Use with Mui Spinner, skeletons, or other feedback to improve perceived performance.\", ], }, accessibility: { designerList: [ \"The loader is announced to screen readers via role='status', ensuring updates are conveyed politely.\", \"aria-busy is set to true when loading, indicating the region is currently in a 'busy' state.\", \"A visually hidden 'Loading…' text is included by default to provide meaningful content for screen readers, even if the slotted content is purely visual.\", \"The component respects the user’s reduced motion preferences via prefers-reduced-motion, preventing potentially distracting animations.\", \"No additional labels are required from the consumer, making it lightweight and flexible while remaining accessible by default.\", ], engineerList: [ \"The loader is announced to screen readers via role='status', ensuring updates are conveyed politely.\", \"aria-busy is set to true when loading, indicating the region is currently in a 'busy' state.\", \"A visually hidden 'Loading…' text is included by default to provide meaningful content for screen readers, even if the slotted content is purely visual.\", \"The component respects the user’s reduced motion preferences via prefers-reduced-motion, preventing potentially distracting animations.\", \"No additional labels are required from the consumer, making it lightweight and flexible while remaining accessible by default.\", ], }, anatomy: { image: \"\", list: [\"\"], }, variants: { items: [ { key: \"pulsate\", title: \"Pulsate\", description: \"\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5gZwRuH4Ojs38xlq7HAMCt/47be2502487c0d85955c203788442d12/pulse.gif\", }, { key: \"fade-in\", title: \"Fade-In\", description: \"\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/xPo8WGtJjoiW5y8gcXFJG/ed432ec413dc4839129139dad546e926/fade-in.gif\", }, { key: \"translate-up\", title: \"Translate: Up\", description: \"Default direction is Up. Ability to define the preferred direction: Up, Right, Down, Left.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/4UTi4tmMxdiTDNR0wi5AOt/8d0e21d88eb33c71d1c7f69df8f42772/up.gif\", }, { key: \"translate-down\", title: \"Translate: Down\", description: \"Default direction is Up. Ability to define the preferred direction: Up, Right, Down, Left.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/63936AreBgAC7oxohQbLpY/e26318a5b4b6aaa790f363c4180d92ad/down.gif\", }, { key: \"translate-left\", title: \"Translate: Left\", description: \"Default direction is Up. Ability to define the preferred direction: Up, Right, Down, Left.\", image: \"hhttps://images.ctfassets.net/i5uwscj4pkk2/5Rzmo4ISRIfaY5aMAbO1U6/0db9896ce44b9704960fde8bc9b70a07/left.gif\", }, { key: \"translate-right\", title: \"Translate: Right\", description: \"Default direction is Up. Ability to define the preferred direction: Up, Right, Down, Left.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2pzlTEsdJj4FKmnsleLO0T/79a8d4fbecc3953a9ec21772df5ee9ac/right.gif\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"guru-outcomes-dashboard\", name: \"Guru Outcomes - Dashboard\", description: \"Use the <mui-loader> component to mask slow network or initial data load times. Combine its features to create a seamless loading experience.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7fsKn4mqKGieVh2D1EdyuR/a9afa145001e13470054aa9d7004127d/outcomes-home.gif\", }, { key: \"guru-outcomes-roadmap\", name: \"Guru Outcomes - Roadmap\", description: \"The Loader component in action on the roadmap page, smoothly loading the UI while masking delays and improving perceived performance.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/7Hebis0o1mlvvDZlQRZfzl/f0c06679ab417f2ee624b570226da77d/outcomes-roadmap.gif\", }, ], }, related: { items: [ { name: \"Spinner\", link: \"https://guides.muibook.com/loader\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
6255
+ "default": "{ Message: { title: \"Message\", description: \"The message component provides persistent, non-dismissible notifications that remain visible until the system determines they should be suspended. Unlike alerts, these messages are static elements integrated into the page layout, offering continuous information without disrupting the user’s workflow.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/01OU9JbOlDZGvbpkq2ismi/b0410cb8002858ded88987d9556daa04/Message_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=9-1053&t=ZA9uH4LK37tSuk6r-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/feedback-message--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-message/index.ts\"], website: [\"https://muibook.com/#/message\"], guides: [\"https://guides.muibook.com/message\"], usage: { list: [ \"Plain: A subtle, transparent style suited for vibrant backgrounds where minimal visual impact is preferred.\", \"Neutral: A calm, balanced tone for non-critical, persistent messages.\", \"Positive: To confirm successful actions like form submissions, saves, or completed tasks.\", \"Info: To share feature announcements, enhancements, or contextual onboarding tips.\", \"Warning: Caution users about potential issues such as unsaved changes or upcoming expirations.\", \"Attention: Highlight urgent issues like system errors or security breaches requiring immediate action.\", ], }, accessibility: { designerList: [ \"ARIA-live is built in, using POLITE + ASSERTIVE for screen readers.\", \"Neutral, Postive, Info support the role of STATUS for screen reader feedback.\", \"Warning, Attention support the role of ALERT for screen reader feedback.\", ], engineerList: [ \"ARIA-live is built in, using POLITE + ASSERTIVE for screen readers.\", \"Neutral, Postive, Info support the role of STATUS for screen reader feedback.\", \"Warning, Attention support the role of ALERT for screen reader feedback.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/6S1MOtZZKP2bxYuIUNScSC/993a910363fbfbba29a3de384ecb182a/Message_-_Anatomy.png\", list: [ \"Preset icon: Communicates the type of message visually. E.g. neutral, positive, info, warning, attention.\", \"Customisable title: Allows for a general heading that describes the message details or guidance relevant to the situation.\", \"Customisable text: Allows for specific details or guidance relevant to the situation.\", ], }, variants: { items: [ { key: \"plain\", title: \"Plain\", description: \"A subtle, transparent style designed for vibrant backgrounds where minimal visual impact is preferred. Best for passive messages like accessibility notes, system status, or routine updates. Use for non-critical information that doesn’t require immediate attention or action. This variant sets aria-live='polite' and role='status' for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/21KWc3TZOJPqZ2BtZ3ngrY/3cbf4aa6df3a72f195eebaa8fe8ecfde/message-plain.png\", }, { key: \"neutral\", title: \"Neutral\", description: \"The Neutral state offers a calm, balanced tone for non-critical, persistent messages. It is suitable for displaying non-urgent information, such as background status like sync confirmation or feature explanations. This variant uses aria-live='polite' and role='status' for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2VF8KPxaXCm6P4dlpsAnXs/5a2011d1a63a900dcdd6669ec5c097e9/message-neutral.png\", }, { key: \"positive\", title: \"Positive\", description: \"The Positive state conveys successful actions, confirmations, or achievements, helping foster a sense of accomplishment and satisfaction. It’s used to indicate things like successful form submissions, completed tasks, or acknowledged milestones. This variant uses aria-live='polite' and role='status' for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/2HOuPOpHOuMGuVUoPAs5MI/ff1e156bc8f31e580972289fcc7bf3d7/message-positive.png\", }, { key: \"info\", title: \"Info\", description: \"The Info state provides helpful messages that inform users about system status, feature updates, or changes—guiding them without urgency. It’s suitable for announcing new features, enhancements, or system changes, and works well for onboarding tips or contextual help. This variant uses aria-live='polite' and role='status' for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1x63W880Trpx0GYiYQJhCt/72c09a93d6ec34a18bc15310927fe9ef/message-info.png\", }, { key: \"warning\", title: \"Warning\", description: \"The Warning state alerts users to potential issues that may require attention, helping prevent errors or misunderstandings. It’s commonly used to notify users of unsaved changes, actions with potential consequences, or upcoming limitations or expirations. This variant uses aria-live='assertive' and role='alert' for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/50V1Ap7vVxPUWRbbKh0kx5/2fe4c203befa779087c8b23984d951b7/message-warning.png\", }, { key: \"attention\", title: \"Attention\", description: \"The Attention state demands immediate user focus, highlighting critical issues that require prompt action. It’s used to alert users to urgent problems like system errors or security breaches, or for time-sensitive notifications that significantly impact the user experience. This variant uses aria-live='assertive' and role='alert' for accessibility.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/5GXIEuluNJBlg8h4hDCfWH/ddeec560354ab06af73bf5c5d8749c12/message-attention.png\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"plain-message\", name: \"Plain message\", description: \"This example uses the Plain variant, suitable for both white and colored backgrounds. It’s ideal for presenting information passively, without demanding user attention. In this case, it’s used to deliver accessibility notes.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/3akJJDd28DOIhQrYq6g4y2/456c02f32dc9c40d84d92371b7ddbead/message-composition-neutral.png\", }, { key: \"info-message\", name: \"Info message\", description: \"Use a page-level Info message to remind users to log in to the provided tools, ensuring the MUI Guidelines are shown instead of the default guidelines.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/1ySFimf3eEleYLPKomWuem/34772aed4257db976f2ca8cb633d3d5b/message-composition-info.png\", }, ], }, related: { items: [ { name: \"Alert\", link: \"https://guides.muibook.com/alert\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
6113
6256
  }
6114
6257
  ],
6115
6258
  "exports": [
@@ -6118,53 +6261,104 @@
6118
6261
  "name": "muiDocs",
6119
6262
  "declaration": {
6120
6263
  "name": "muiDocs",
6121
- "module": "src/components/mui-loader/doc.ts"
6264
+ "module": "src/components/mui-message/doc.ts"
6122
6265
  }
6123
6266
  }
6124
6267
  ]
6125
6268
  },
6126
6269
  {
6127
6270
  "kind": "javascript-module",
6128
- "path": "src/components/mui-loader/index.ts",
6271
+ "path": "src/components/mui-message/index.ts",
6129
6272
  "declarations": [
6130
6273
  {
6131
6274
  "kind": "class",
6132
6275
  "description": "",
6133
- "name": "MuiLoader",
6276
+ "name": "MuiMessage",
6134
6277
  "members": [
6278
+ {
6279
+ "kind": "field",
6280
+ "name": "contentSlotListener",
6281
+ "type": {
6282
+ "text": "(() => void) | null"
6283
+ },
6284
+ "privacy": "private",
6285
+ "default": "null"
6286
+ },
6135
6287
  {
6136
6288
  "kind": "method",
6137
- "name": "render"
6289
+ "name": "getMessageSize",
6290
+ "privacy": "private",
6291
+ "return": {
6292
+ "type": {
6293
+ "text": "MessageSize"
6294
+ }
6295
+ }
6296
+ },
6297
+ {
6298
+ "kind": "method",
6299
+ "name": "getInlineContentSize",
6300
+ "privacy": "private",
6301
+ "return": {
6302
+ "type": {
6303
+ "text": "string"
6304
+ }
6305
+ },
6306
+ "parameters": [
6307
+ {
6308
+ "name": "size",
6309
+ "type": {
6310
+ "text": "MessageSize"
6311
+ }
6312
+ }
6313
+ ]
6314
+ },
6315
+ {
6316
+ "kind": "method",
6317
+ "name": "setupContentSlot",
6318
+ "privacy": "private",
6319
+ "parameters": [
6320
+ {
6321
+ "name": "size",
6322
+ "type": {
6323
+ "text": "MessageSize"
6324
+ }
6325
+ }
6326
+ ]
6327
+ },
6328
+ {
6329
+ "kind": "method",
6330
+ "name": "render",
6331
+ "privacy": "private"
6138
6332
  }
6139
6333
  ],
6140
6334
  "attributes": [
6141
6335
  {
6142
- "name": "loading"
6336
+ "name": "variant"
6143
6337
  },
6144
6338
  {
6145
- "name": "animation"
6339
+ "name": "heading"
6146
6340
  },
6147
6341
  {
6148
- "name": "direction"
6342
+ "name": "icon"
6149
6343
  },
6150
6344
  {
6151
- "name": "duration"
6345
+ "name": "size"
6152
6346
  }
6153
6347
  ],
6154
6348
  "superclass": {
6155
6349
  "name": "HTMLElement"
6156
6350
  },
6157
- "tagName": "mui-loader",
6351
+ "tagName": "mui-message",
6158
6352
  "customElement": true
6159
6353
  }
6160
6354
  ],
6161
6355
  "exports": [
6162
6356
  {
6163
6357
  "kind": "custom-element-definition",
6164
- "name": "mui-loader",
6358
+ "name": "mui-message",
6165
6359
  "declaration": {
6166
- "name": "MuiLoader",
6167
- "module": "src/components/mui-loader/index.ts"
6360
+ "name": "MuiMessage",
6361
+ "module": "src/components/mui-message/index.ts"
6168
6362
  }
6169
6363
  }
6170
6364
  ]
@@ -6235,7 +6429,7 @@
6235
6429
  },
6236
6430
  {
6237
6431
  "kind": "javascript-module",
6238
- "path": "src/components/mui-prompt-message/doc.ts",
6432
+ "path": "src/components/mui-prompt/doc.ts",
6239
6433
  "declarations": [
6240
6434
  {
6241
6435
  "kind": "variable",
@@ -6243,7 +6437,7 @@
6243
6437
  "type": {
6244
6438
  "text": "MuiDocs"
6245
6439
  },
6246
- "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.\", ], }, }, }"
6440
+ "default": "{ Prompt: { title: \"Prompt\", description: \"Prompt provides a reusable prompt surface with floating actions and Enter-to-submit behavior.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-prompt/index.ts\"], website: [\"https://muibook.com/#/prompt\"], guides: [\"https://guides.muibook.com/input\"], usage: { list: [ \"Use for AI/chat prompt entry surfaces with action controls.\", \"In Muibook stories, use the Interactive Prompt story at the top of the page as the primary end-to-end reference (paste/upload/context/submit).\", \"This component is extracted from composition patterns to standardize prompt behavior across experiences.\", \"Keep prompt as a controlled input in app state: write value via attribute/property and sync from input events.\", \"Use Enter submit for fast send flows; keep Shift+Enter for multiline authoring.\", \"Press Enter to submit and Shift+Enter to add a newline.\", \"Set enter-submit='false' to disable Enter submit behavior.\", \"Use slot='actions' for utility actions (attach, source, tools).\", \"Prompt includes a default submit control in actions-right; override by slotting your own actions-right control when needed.\", \"All utility actions are intended to be slotted so product teams can wire behavior from app state.\", \"A default fan trigger is included out-of-the-box; provide slot='actions-trigger' only when customizing.\", \"Use slot='actions-right' when you need a custom submit/toggle action instead of the default.\", \"Set loading to show built-in async feedback spinner beside actions-right while requests are in flight.\", \"Use loading-label to provide accessible status text for the spinner.\", \"Use actions-fan for fan-out behavior (closed by default), and add fan-open only when you want it open by default.\", \"fan-open normalizes fan behavior in composed trees by enabling fan mode when needed.\", \"Use context-mode='icon|chip' with slotted <mui-prompt-toggle> for app-driven context state.\", \"Fan spread, speed, and amplitude are fixed to system defaults; tune through component tokens/CSS where needed.\", \"Built-in preview dialog handling is enabled for prompt-preview-open events.\", \"Set preview-threshold-chars to control when pasted text is converted into preview attachments.\", \"Set preview-overflow-to-preview='false' to always paste text directly into the textarea.\", \"When internal preview dialog handling is enabled, slotted prompt previews are auto-clickable by default.\", \"Set preview-auto-clickable='false' to keep previews non-clickable unless explicitly configured.\", \"Set preview-loading to force slotted previews into loading state while async metadata resolves.\", \"Set preview-loading='auto' to mirror prompt loading state onto slotted previews.\", \"Use preview-loading-label to provide accessible loading text for preview spinners.\", \"Use error-message for direct prompt-level error feedback rendered below the input.\", \"Set debug to render built-in submit debug telemetry (status + JSON payload) below the prompt.\", \"Use slot='error' to render fully custom error content when product needs bespoke treatment.\", \"Use setError(message) and clearError() for app-driven validation and transport error handling.\", \"Use prompt-paste to ingest user clipboard payloads and convert them into prompt-preview items.\", \"Use prompt-preview-open to react to preview activation and update app-level analytics/state.\", \"For native media previews, use direct .mp4/.mp3 values so the built-in dialog opens with native media controls.\", \"Prefer system/semantic tokens for color-top-* values when theming prompt color surfaces.\", \"For React wrappers, map CustomEvent handlers to props (onSubmit, onPromptPaste, onPromptPreviewOpen, onEscape).\", \"Mark the trigger action with fan-trigger; if omitted, the first action is used.\", \"Prefer this component instead of ad hoc prompt wrappers when the same interaction model is needed.\", ], }, accessibility: { designerList: [ \"Provide clear prompt intent through nearby heading/body context; placeholder alone should not carry all instruction.\", \"Ensure action icons are understandable and consistently positioned (utility actions left, submit/state action right).\", \"Keep status text low-emphasis visually, but persistent enough to communicate send state changes.\", ], engineerList: [ \"Support keyboard parity: Enter submits, Shift+Enter adds newline.\", \"If showing send status, use an aria-live region so updates are announced to assistive tech.\", \"Do not trap focus; users must be able to tab into and out of the prompt and actions naturally.\", \"Ensure a clear placeholder or label context for prompt intent.\", \"Provide aria-label values for icon-only action buttons slotted into actions.\", \"When authoring themes, rely on public --prompt-* tokens and attributes rather than internal prompt CSS variables.\", ], }, anatomy: { image: \"\", list: [\"Prompt surface\", \"Input area\", \"Action slot\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Input\", link: \"https://guides.muibook.com/input\" }, { name: \"Button\", link: \"https://guides.muibook.com/button\" }, ], }, rules: [ { heading: \"Pattern Rule\", description: \"Use Prompt as the shared prompt-surface primitive; keep product-specific flows in compositions.\", doContent: [ { description: \"Reuse this component when Enter submit + floating actions are expected.\", image: \"\" }, ], dontContent: [ { description: \"Do not rebuild the prompt shell in each composition with custom wrappers.\", image: \"\" }, ], }, ], behaviour: { list: [ \"Enter emits a submit event with current value.\", \"Shift+Enter inserts a newline.\", \"Pasting emits prompt-paste with detected payload metadata for consumers to store and render previews.\", \"Short text paste remains in the textarea; long text and binary paste can be converted to preview items based on threshold settings.\", \"Clicking a preview emits prompt-preview-open with normalized preview payload (badge, value, image metadata).\", \"Escape emits escape and closes fan actions when open.\", \"Error feedback supports dismiss and optional expand/collapse for long copy.\", \"Clicking content inside a slotted <mui-prompt-toggle> emits prompt-context-change and switches to context chip mode.\", \"Dismissing content marked with [context-chip] emits prompt-context-dismiss and returns to icon mode.\", \"Actions remain anchored at the prompt edge while text grows.\", \"Action behavior should be equivalent whether triggered by keyboard submit or click.\", \"When loading is set, prompt shows async spinner feedback near submit and blocks additional submits.\", ], }, writing: { list: [\"Use clear placeholder prompts that describe expected user input.\"], }, }, }"
6247
6441
  }
6248
6442
  ],
6249
6443
  "exports": [
@@ -6252,159 +6446,55 @@
6252
6446
  "name": "muiDocs",
6253
6447
  "declaration": {
6254
6448
  "name": "muiDocs",
6255
- "module": "src/components/mui-prompt-message/doc.ts"
6449
+ "module": "src/components/mui-prompt/doc.ts"
6256
6450
  }
6257
6451
  }
6258
6452
  ]
6259
6453
  },
6260
6454
  {
6261
6455
  "kind": "javascript-module",
6262
- "path": "src/components/mui-prompt-message/index.ts",
6456
+ "path": "src/components/mui-prompt/index.ts",
6263
6457
  "declarations": [
6264
6458
  {
6265
6459
  "kind": "class",
6266
6460
  "description": "",
6267
- "name": "MuiPromptMessage",
6461
+ "name": "MuiPrompt",
6268
6462
  "members": [
6269
6463
  {
6270
6464
  "kind": "field",
6271
- "name": "resizeObserver",
6465
+ "name": "triggerEl",
6272
6466
  "type": {
6273
- "text": "ResizeObserver | null"
6467
+ "text": "HTMLElement | null"
6274
6468
  },
6275
6469
  "privacy": "private",
6276
6470
  "default": "null"
6277
6471
  },
6278
6472
  {
6279
6473
  "kind": "field",
6280
- "name": "avatarSlotEl",
6474
+ "name": "previewShellEl",
6281
6475
  "type": {
6282
- "text": "HTMLSlotElement | null"
6476
+ "text": "HTMLElement | null"
6283
6477
  },
6284
6478
  "privacy": "private",
6285
6479
  "default": "null"
6286
6480
  },
6287
6481
  {
6288
6482
  "kind": "field",
6289
- "name": "contentSlotEl",
6483
+ "name": "previewRowEl",
6290
6484
  "type": {
6291
- "text": "HTMLSlotElement | null"
6485
+ "text": "HTMLElement | null"
6292
6486
  },
6293
6487
  "privacy": "private",
6294
6488
  "default": "null"
6295
6489
  },
6296
6490
  {
6297
- "kind": "method",
6298
- "name": "render"
6299
- },
6300
- {
6301
- "kind": "method",
6302
- "name": "bindSlotSync",
6303
- "privacy": "private"
6304
- },
6305
- {
6306
- "kind": "method",
6307
- "name": "bindLayoutSync",
6308
- "privacy": "private"
6309
- }
6310
- ],
6311
- "attributes": [
6312
- {
6313
- "name": "size"
6314
- },
6315
- {
6316
- "name": "variant"
6317
- },
6318
- {
6319
- "name": "density"
6320
- }
6321
- ],
6322
- "superclass": {
6323
- "name": "HTMLElement"
6324
- },
6325
- "tagName": "mui-prompt-message",
6326
- "customElement": true
6327
- }
6328
- ],
6329
- "exports": [
6330
- {
6331
- "kind": "custom-element-definition",
6332
- "name": "mui-prompt-message",
6333
- "declaration": {
6334
- "name": "MuiPromptMessage",
6335
- "module": "src/components/mui-prompt-message/index.ts"
6336
- }
6337
- }
6338
- ]
6339
- },
6340
- {
6341
- "kind": "javascript-module",
6342
- "path": "src/components/mui-prompt/doc.ts",
6343
- "declarations": [
6344
- {
6345
- "kind": "variable",
6346
- "name": "muiDocs",
6347
- "type": {
6348
- "text": "MuiDocs"
6349
- },
6350
- "default": "{ Prompt: { title: \"Prompt\", description: \"Prompt provides a reusable prompt surface with floating actions and Enter-to-submit behavior.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-prompt/index.ts\"], website: [\"https://muibook.com/#/prompt\"], guides: [\"https://guides.muibook.com/input\"], usage: { list: [ \"Use for AI/chat prompt entry surfaces with action controls.\", \"In Muibook stories, use the Interactive Prompt story at the top of the page as the primary end-to-end reference (paste/upload/context/submit).\", \"This component is extracted from composition patterns to standardize prompt behavior across experiences.\", \"Keep prompt as a controlled input in app state: write value via attribute/property and sync from input events.\", \"Use Enter submit for fast send flows; keep Shift+Enter for multiline authoring.\", \"Press Enter to submit and Shift+Enter to add a newline.\", \"Set enter-submit='false' to disable Enter submit behavior.\", \"Use slot='actions' for utility actions (attach, source, tools).\", \"Prompt includes a default submit control in actions-right; override by slotting your own actions-right control when needed.\", \"All utility actions are intended to be slotted so product teams can wire behavior from app state.\", \"A default fan trigger is included out-of-the-box; provide slot='actions-trigger' only when customizing.\", \"Use slot='actions-right' when you need a custom submit/toggle action instead of the default.\", \"Set loading to show built-in async feedback spinner beside actions-right while requests are in flight.\", \"Use loading-label to provide accessible status text for the spinner.\", \"Use actions-fan to enable fan-out action behavior from a trigger action.\", \"Use context-mode='icon|chip' with slotted <mui-prompt-toggle> for app-driven context state.\", \"Fan spread, speed, and amplitude are fixed to system defaults; tune through component tokens/CSS where needed.\", \"Built-in preview dialog handling is enabled for prompt-preview-open events.\", \"Set preview-threshold-chars to control when pasted text is converted into preview attachments.\", \"Set preview-overflow-to-preview='false' to always paste text directly into the textarea.\", \"When internal preview dialog handling is enabled, slotted prompt previews are auto-clickable by default.\", \"Set preview-auto-clickable='false' to keep previews non-clickable unless explicitly configured.\", \"Use error-message for direct prompt-level error feedback rendered below the input.\", \"Set debug to render built-in submit debug telemetry (status + JSON payload) below the prompt.\", \"Use slot='error' to render fully custom error content when product needs bespoke treatment.\", \"Use setError(message) and clearError() for app-driven validation and transport error handling.\", \"Use prompt-paste to ingest user clipboard payloads and convert them into prompt-preview items.\", \"Use prompt-preview-open to react to preview activation and update app-level analytics/state.\", \"For native media previews, use direct .mp4/.mp3 values so the built-in dialog opens with native media controls.\", \"For React wrappers, map CustomEvent handlers to props (onSubmit, onPromptPaste, onPromptPreviewOpen, onEscape).\", \"Mark the trigger action with fan-trigger; if omitted, the first action is used.\", \"Prefer this component instead of ad hoc prompt wrappers when the same interaction model is needed.\", ], }, accessibility: { designerList: [ \"Provide clear prompt intent through nearby heading/body context; placeholder alone should not carry all instruction.\", \"Ensure action icons are understandable and consistently positioned (utility actions left, submit/state action right).\", \"Keep status text low-emphasis visually, but persistent enough to communicate send state changes.\", ], engineerList: [ \"Support keyboard parity: Enter submits, Shift+Enter adds newline.\", \"If showing send status, use an aria-live region so updates are announced to assistive tech.\", \"Do not trap focus; users must be able to tab into and out of the prompt and actions naturally.\", \"Ensure a clear placeholder or label context for prompt intent.\", \"Provide aria-label values for icon-only action buttons slotted into actions.\", ], }, anatomy: { image: \"\", list: [\"Prompt surface\", \"Input area\", \"Action slot\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Input\", link: \"https://guides.muibook.com/input\" }, { name: \"Button\", link: \"https://guides.muibook.com/button\" }, ], }, rules: [ { heading: \"Pattern Rule\", description: \"Use Prompt as the shared prompt-surface primitive; keep product-specific flows in compositions.\", doContent: [ { description: \"Reuse this component when Enter submit + floating actions are expected.\", image: \"\" }, ], dontContent: [ { description: \"Do not rebuild the prompt shell in each composition with custom wrappers.\", image: \"\" }, ], }, ], behaviour: { list: [ \"Enter emits a submit event with current value.\", \"Shift+Enter inserts a newline.\", \"Pasting emits prompt-paste with detected payload metadata for consumers to store and render previews.\", \"Short text paste remains in the textarea; long text and binary paste can be converted to preview items based on threshold settings.\", \"Clicking a preview emits prompt-preview-open with normalized preview payload (badge, value, image metadata).\", \"Escape emits escape and closes fan actions when open.\", \"Error feedback supports dismiss and optional expand/collapse for long copy.\", \"Clicking content inside a slotted <mui-prompt-toggle> emits prompt-context-change and switches to context chip mode.\", \"Dismissing content marked with [context-chip] emits prompt-context-dismiss and returns to icon mode.\", \"Actions remain anchored at the prompt edge while text grows.\", \"Action behavior should be equivalent whether triggered by keyboard submit or click.\", \"When loading is set, prompt shows async spinner feedback near submit and blocks additional submits.\", ], }, writing: { list: [\"Use clear placeholder prompts that describe expected user input.\"], }, }, }"
6351
- }
6352
- ],
6353
- "exports": [
6354
- {
6355
- "kind": "js",
6356
- "name": "muiDocs",
6357
- "declaration": {
6358
- "name": "muiDocs",
6359
- "module": "src/components/mui-prompt/doc.ts"
6360
- }
6361
- }
6362
- ]
6363
- },
6364
- {
6365
- "kind": "javascript-module",
6366
- "path": "src/components/mui-prompt/index.ts",
6367
- "declarations": [
6368
- {
6369
- "kind": "class",
6370
- "description": "",
6371
- "name": "MuiPrompt",
6372
- "members": [
6373
- {
6374
- "kind": "field",
6375
- "name": "triggerEl",
6376
- "type": {
6377
- "text": "HTMLElement | null"
6378
- },
6379
- "privacy": "private",
6380
- "default": "null"
6381
- },
6382
- {
6383
- "kind": "field",
6384
- "name": "previewShellEl",
6385
- "type": {
6386
- "text": "HTMLElement | null"
6387
- },
6388
- "privacy": "private",
6389
- "default": "null"
6390
- },
6391
- {
6392
- "kind": "field",
6393
- "name": "previewRowEl",
6394
- "type": {
6395
- "text": "HTMLElement | null"
6396
- },
6397
- "privacy": "private",
6398
- "default": "null"
6399
- },
6400
- {
6401
- "kind": "field",
6402
- "name": "previewSlotEl",
6403
- "type": {
6404
- "text": "HTMLSlotElement | null"
6405
- },
6406
- "privacy": "private",
6407
- "default": "null"
6491
+ "kind": "field",
6492
+ "name": "previewSlotEl",
6493
+ "type": {
6494
+ "text": "HTMLSlotElement | null"
6495
+ },
6496
+ "privacy": "private",
6497
+ "default": "null"
6408
6498
  },
6409
6499
  {
6410
6500
  "kind": "field",
@@ -6571,6 +6661,11 @@
6571
6661
  "name": "onContextChipDismiss",
6572
6662
  "privacy": "private"
6573
6663
  },
6664
+ {
6665
+ "kind": "method",
6666
+ "name": "ensureFanMode",
6667
+ "privacy": "private"
6668
+ },
6574
6669
  {
6575
6670
  "kind": "method",
6576
6671
  "name": "runColorFade",
@@ -6737,6 +6832,20 @@
6737
6832
  }
6738
6833
  ]
6739
6834
  },
6835
+ {
6836
+ "kind": "method",
6837
+ "name": "syncPreviewLoadingState",
6838
+ "privacy": "private",
6839
+ "parameters": [
6840
+ {
6841
+ "name": "assigned",
6842
+ "optional": true,
6843
+ "type": {
6844
+ "text": "Element[]"
6845
+ }
6846
+ }
6847
+ ]
6848
+ },
6740
6849
  {
6741
6850
  "kind": "method",
6742
6851
  "name": "normalizePreviewDetail",
@@ -6909,6 +7018,12 @@
6909
7018
  {
6910
7019
  "name": "preview-auto-clickable"
6911
7020
  },
7021
+ {
7022
+ "name": "preview-loading"
7023
+ },
7024
+ {
7025
+ "name": "preview-loading-label"
7026
+ },
6912
7027
  {
6913
7028
  "name": "preview-dialog-width"
6914
7029
  },
@@ -6976,6 +7091,110 @@
6976
7091
  }
6977
7092
  ]
6978
7093
  },
7094
+ {
7095
+ "kind": "javascript-module",
7096
+ "path": "src/components/mui-prompt-message/doc.ts",
7097
+ "declarations": [
7098
+ {
7099
+ "kind": "variable",
7100
+ "name": "muiDocs",
7101
+ "type": {
7102
+ "text": "MuiDocs"
7103
+ },
7104
+ "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.\", ], }, }, }"
7105
+ }
7106
+ ],
7107
+ "exports": [
7108
+ {
7109
+ "kind": "js",
7110
+ "name": "muiDocs",
7111
+ "declaration": {
7112
+ "name": "muiDocs",
7113
+ "module": "src/components/mui-prompt-message/doc.ts"
7114
+ }
7115
+ }
7116
+ ]
7117
+ },
7118
+ {
7119
+ "kind": "javascript-module",
7120
+ "path": "src/components/mui-prompt-message/index.ts",
7121
+ "declarations": [
7122
+ {
7123
+ "kind": "class",
7124
+ "description": "",
7125
+ "name": "MuiPromptMessage",
7126
+ "members": [
7127
+ {
7128
+ "kind": "field",
7129
+ "name": "resizeObserver",
7130
+ "type": {
7131
+ "text": "ResizeObserver | null"
7132
+ },
7133
+ "privacy": "private",
7134
+ "default": "null"
7135
+ },
7136
+ {
7137
+ "kind": "field",
7138
+ "name": "avatarSlotEl",
7139
+ "type": {
7140
+ "text": "HTMLSlotElement | null"
7141
+ },
7142
+ "privacy": "private",
7143
+ "default": "null"
7144
+ },
7145
+ {
7146
+ "kind": "field",
7147
+ "name": "contentSlotEl",
7148
+ "type": {
7149
+ "text": "HTMLSlotElement | null"
7150
+ },
7151
+ "privacy": "private",
7152
+ "default": "null"
7153
+ },
7154
+ {
7155
+ "kind": "method",
7156
+ "name": "render"
7157
+ },
7158
+ {
7159
+ "kind": "method",
7160
+ "name": "bindSlotSync",
7161
+ "privacy": "private"
7162
+ },
7163
+ {
7164
+ "kind": "method",
7165
+ "name": "bindLayoutSync",
7166
+ "privacy": "private"
7167
+ }
7168
+ ],
7169
+ "attributes": [
7170
+ {
7171
+ "name": "size"
7172
+ },
7173
+ {
7174
+ "name": "variant"
7175
+ },
7176
+ {
7177
+ "name": "density"
7178
+ }
7179
+ ],
7180
+ "superclass": {
7181
+ "name": "HTMLElement"
7182
+ },
7183
+ "tagName": "mui-prompt-message",
7184
+ "customElement": true
7185
+ }
7186
+ ],
7187
+ "exports": [
7188
+ {
7189
+ "kind": "custom-element-definition",
7190
+ "name": "mui-prompt-message",
7191
+ "declaration": {
7192
+ "name": "MuiPromptMessage",
7193
+ "module": "src/components/mui-prompt-message/index.ts"
7194
+ }
7195
+ }
7196
+ ]
7197
+ },
6979
7198
  {
6980
7199
  "kind": "javascript-module",
6981
7200
  "path": "src/components/mui-prompt-preview/doc.ts",
@@ -6986,7 +7205,7 @@
6986
7205
  "type": {
6987
7206
  "text": "MuiDocs"
6988
7207
  },
6989
- "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 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: [\"\"] }, }, }"
7208
+ "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: [\"\"] }, }, }"
6990
7209
  }
6991
7210
  ],
6992
7211
  "exports": [
@@ -7168,6 +7387,12 @@
7168
7387
  },
7169
7388
  {
7170
7389
  "name": "clickable"
7390
+ },
7391
+ {
7392
+ "name": "loading"
7393
+ },
7394
+ {
7395
+ "name": "loading-label"
7171
7396
  }
7172
7397
  ],
7173
7398
  "superclass": {
@@ -7840,43 +8065,671 @@
7840
8065
  "default": "\"\""
7841
8066
  },
7842
8067
  {
7843
- "kind": "field",
7844
- "name": "_changeHandler",
7845
- "type": {
7846
- "text": "(e: Event) => void | undefined"
7847
- }
8068
+ "kind": "field",
8069
+ "name": "_changeHandler",
8070
+ "type": {
8071
+ "text": "(e: Event) => void | undefined"
8072
+ }
8073
+ },
8074
+ {
8075
+ "kind": "method",
8076
+ "name": "cleanupListeners"
8077
+ },
8078
+ {
8079
+ "kind": "method",
8080
+ "name": "setupListener"
8081
+ },
8082
+ {
8083
+ "kind": "method",
8084
+ "name": "render"
8085
+ },
8086
+ {
8087
+ "kind": "method",
8088
+ "name": "waitForPartMap",
8089
+ "return": {
8090
+ "type": {
8091
+ "text": "Promise<void>"
8092
+ }
8093
+ }
8094
+ }
8095
+ ],
8096
+ "events": [
8097
+ {
8098
+ "name": "change",
8099
+ "type": {
8100
+ "text": "CustomEvent"
8101
+ }
8102
+ },
8103
+ {
8104
+ "name": "input",
8105
+ "type": {
8106
+ "text": "CustomEvent"
8107
+ }
8108
+ }
8109
+ ],
8110
+ "attributes": [
8111
+ {
8112
+ "name": "name"
8113
+ },
8114
+ {
8115
+ "name": "value"
8116
+ },
8117
+ {
8118
+ "name": "id"
8119
+ },
8120
+ {
8121
+ "name": "label"
8122
+ },
8123
+ {
8124
+ "name": "options"
8125
+ },
8126
+ {
8127
+ "name": "disabled"
8128
+ },
8129
+ {
8130
+ "name": "hide-label"
8131
+ },
8132
+ {
8133
+ "name": "variant"
8134
+ },
8135
+ {
8136
+ "name": "optional"
8137
+ },
8138
+ {
8139
+ "name": "size"
8140
+ }
8141
+ ],
8142
+ "superclass": {
8143
+ "name": "HTMLElement"
8144
+ },
8145
+ "tagName": "mui-select",
8146
+ "customElement": true
8147
+ }
8148
+ ],
8149
+ "exports": [
8150
+ {
8151
+ "kind": "custom-element-definition",
8152
+ "name": "mui-select",
8153
+ "declaration": {
8154
+ "name": "MuiSelect",
8155
+ "module": "src/components/mui-select/index.ts"
8156
+ }
8157
+ }
8158
+ ]
8159
+ },
8160
+ {
8161
+ "kind": "javascript-module",
8162
+ "path": "src/components/mui-skeleton/doc.ts",
8163
+ "declarations": [
8164
+ {
8165
+ "kind": "variable",
8166
+ "name": "muiDocs",
8167
+ "type": {
8168
+ "text": "MuiDocs"
8169
+ },
8170
+ "default": "{ Skeleton: { title: \"Skeleton\", description: \"Skeleton provides reusable placeholder blocks for loading and wireframe prototyping flows.\", hero: [\"\"], figma: [\"\"], storybook: [\"https://stories.muibook.com\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-skeleton/index.ts\"], website: [\"https://muibook.com/#/skeleton\"], guides: [\"https://guides.muibook.com/loader\"], usage: { list: [ \"Use line skeletons for text placeholders and rect/circle for media/avatar placeholders.\", \"Prefer token, rem, and percentage sizing over fixed pixel values for responsive placeholder design.\", \"Use Muibook layout components (mui-v-stack, mui-h-stack, mui-grid) to compose skeleton structures.\", \"Use duration to slow down shimmer in calmer loading contexts.\", \"Use max-width to constrain placeholder length without inline styles.\", \"Use before/after slots to compose action or avatar placeholders around loading content.\", \"Set loading='false' to reveal real content in the same markup shell.\", ], }, accessibility: { designerList: [\"\"], engineerList: [ \"Skeleton is decorative by default; keep it paired with semantic loading context at section/page level.\", \"Respect prefers-reduced-motion by avoiding mandatory motion-only communication.\", ], }, anatomy: { image: \"\", list: [\"Before slot\", \"Skeleton blocks\", \"After slot\", \"Optional content reveal slot\"] }, variants: { items: [{ key: \"\", title: \"\", description: \"\", image: \"\" }] }, compositions: { description: \"\", items: [] }, related: { items: [ { name: \"Loader\", link: \"https://guides.muibook.com/loader\" }, { name: \"Spinner\", link: \"https://guides.muibook.com/loader\" }, ], }, rules: [{ heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }] }], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, }"
8171
+ }
8172
+ ],
8173
+ "exports": [
8174
+ {
8175
+ "kind": "js",
8176
+ "name": "muiDocs",
8177
+ "declaration": {
8178
+ "name": "muiDocs",
8179
+ "module": "src/components/mui-skeleton/doc.ts"
8180
+ }
8181
+ }
8182
+ ]
8183
+ },
8184
+ {
8185
+ "kind": "javascript-module",
8186
+ "path": "src/components/mui-skeleton/index.ts",
8187
+ "declarations": [
8188
+ {
8189
+ "kind": "class",
8190
+ "description": "",
8191
+ "name": "MuiSkeleton",
8192
+ "members": [
8193
+ {
8194
+ "kind": "method",
8195
+ "name": "getSizeHeight",
8196
+ "privacy": "private",
8197
+ "parameters": [
8198
+ {
8199
+ "name": "size",
8200
+ "type": {
8201
+ "text": "string"
8202
+ }
8203
+ }
8204
+ ]
8205
+ },
8206
+ {
8207
+ "kind": "method",
8208
+ "name": "getCircleSize",
8209
+ "privacy": "private",
8210
+ "parameters": [
8211
+ {
8212
+ "name": "size",
8213
+ "type": {
8214
+ "text": "string"
8215
+ }
8216
+ }
8217
+ ]
8218
+ },
8219
+ {
8220
+ "kind": "method",
8221
+ "name": "getLineWidths",
8222
+ "privacy": "private",
8223
+ "parameters": [
8224
+ {
8225
+ "name": "lines",
8226
+ "type": {
8227
+ "text": "number"
8228
+ }
8229
+ }
8230
+ ]
8231
+ },
8232
+ {
8233
+ "kind": "method",
8234
+ "name": "render"
8235
+ }
8236
+ ],
8237
+ "attributes": [
8238
+ {
8239
+ "name": "shape"
8240
+ },
8241
+ {
8242
+ "name": "size"
8243
+ },
8244
+ {
8245
+ "name": "width"
8246
+ },
8247
+ {
8248
+ "name": "height"
8249
+ },
8250
+ {
8251
+ "name": "radius"
8252
+ },
8253
+ {
8254
+ "name": "animation"
8255
+ },
8256
+ {
8257
+ "name": "lines"
8258
+ },
8259
+ {
8260
+ "name": "gap"
8261
+ },
8262
+ {
8263
+ "name": "loading"
8264
+ },
8265
+ {
8266
+ "name": "line-widths"
8267
+ },
8268
+ {
8269
+ "name": "max-width"
8270
+ },
8271
+ {
8272
+ "name": "duration"
8273
+ }
8274
+ ],
8275
+ "superclass": {
8276
+ "name": "HTMLElement"
8277
+ },
8278
+ "tagName": "mui-skeleton",
8279
+ "customElement": true
8280
+ }
8281
+ ],
8282
+ "exports": [
8283
+ {
8284
+ "kind": "custom-element-definition",
8285
+ "name": "mui-skeleton",
8286
+ "declaration": {
8287
+ "name": "MuiSkeleton",
8288
+ "module": "src/components/mui-skeleton/index.ts"
8289
+ }
8290
+ }
8291
+ ]
8292
+ },
8293
+ {
8294
+ "kind": "javascript-module",
8295
+ "path": "src/components/mui-slat/doc.ts",
8296
+ "declarations": [
8297
+ {
8298
+ "kind": "variable",
8299
+ "name": "muiDocs",
8300
+ "type": {
8301
+ "text": "MuiDocs"
8302
+ },
8303
+ "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: [\"\"], }, }, }"
8304
+ }
8305
+ ],
8306
+ "exports": [
8307
+ {
8308
+ "kind": "js",
8309
+ "name": "muiDocs",
8310
+ "declaration": {
8311
+ "name": "muiDocs",
8312
+ "module": "src/components/mui-slat/doc.ts"
8313
+ }
8314
+ }
8315
+ ]
8316
+ },
8317
+ {
8318
+ "kind": "javascript-module",
8319
+ "path": "src/components/mui-slat/index.ts",
8320
+ "declarations": [],
8321
+ "exports": []
8322
+ },
8323
+ {
8324
+ "kind": "javascript-module",
8325
+ "path": "src/components/mui-slide-frame/doc.ts",
8326
+ "declarations": [
8327
+ {
8328
+ "kind": "variable",
8329
+ "name": "muiDocs",
8330
+ "type": {
8331
+ "text": "MuiDocs"
8332
+ },
8333
+ "default": "{ SlideFrame: { title: \"Slide Frame\", description: \"Slide Frame is a composable presentation surface for UI-builder workflows. It supports configurable ratio, variants, radius, image composition, and overflow handling.\", hero: [\"\"], figma: [\"\"], storybook: [\"\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-slide-frame/index.ts\"], website: [\"https://muibook.com/#/slide-frame\"], guides: [\"https://guides.muibook.com/slide-frame\"], usage: { list: [ \"Use as a single-slide shell and compose internals with existing components like Stack, Grid, Card, and Media.\", \"Use ratio='16:9|4:3|1:1|custom' for presentation formats.\", \"Use title for built-in header text and footer-text for built-in footer copy.\", \"Section counter is built into the footer and updates with active-section.\", \"Use slot='header-after' and slot='footer-after' for trailing actions.\", \"Use slot='header-description' for secondary lines.\", \"Use variant='default|plain|ghost' to control frame chrome.\", \"Use radius='default|none|small|medium|large' to align with your layout language.\", \"Use scroll to opt into surface scrolling when content exceeds the frame.\", \"Use preview to show warning treatment for draft/unreviewed slide states.\", \"Use lightbox to open slotted image content in a built-in dialog when clicked.\", \"When multiple sections exist, users can navigate with arrow keys or horizontal swipe gestures.\", \"Use header/footer slots for frame-level controls, metadata, or actions.\", ], }, accessibility: { designerList: [\"\"], engineerList: [ \"The surface is focusable in present mode and supports keyboard section navigation with arrow keys.\", \"Use hide-counter when you need to suppress the built-in Section X/Y footer counter.\", \"Expose external controls for next/previous actions when building guided presentation flows.\", ], }, anatomy: { image: \"\", list: [\"Header Slot\", \"Surface\", \"Image Slot\", \"Default Slot Content\", \"Notes Slot\", \"Footer Slot\"], }, variants: { items: [ { key: \"default\", title: \"Default\", description: \"Standard frame with ratio and padding control.\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [], }, related: { items: [ { name: \"Stack\", link: \"https://guides.muibook.com/stack\" }, { name: \"Grid\", link: \"https://guides.muibook.com/grid\" }, { name: \"Card\", link: \"https://guides.muibook.com/card\" }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"] }, writing: { list: [\"\"] }, }, }"
8334
+ }
8335
+ ],
8336
+ "exports": [
8337
+ {
8338
+ "kind": "js",
8339
+ "name": "muiDocs",
8340
+ "declaration": {
8341
+ "name": "muiDocs",
8342
+ "module": "src/components/mui-slide-frame/doc.ts"
8343
+ }
8344
+ }
8345
+ ]
8346
+ },
8347
+ {
8348
+ "kind": "javascript-module",
8349
+ "path": "src/components/mui-slide-frame/index.ts",
8350
+ "declarations": [
8351
+ {
8352
+ "kind": "class",
8353
+ "description": "",
8354
+ "name": "MuiSlideFrame",
8355
+ "members": [
8356
+ {
8357
+ "kind": "field",
8358
+ "name": "defaultSlot",
8359
+ "type": {
8360
+ "text": "HTMLSlotElement | null"
8361
+ },
8362
+ "privacy": "private",
8363
+ "default": "null"
8364
+ },
8365
+ {
8366
+ "kind": "field",
8367
+ "name": "headerSlot",
8368
+ "type": {
8369
+ "text": "HTMLSlotElement | null"
8370
+ },
8371
+ "privacy": "private",
8372
+ "default": "null"
8373
+ },
8374
+ {
8375
+ "kind": "field",
8376
+ "name": "headerAfterSlot",
8377
+ "type": {
8378
+ "text": "HTMLSlotElement | null"
8379
+ },
8380
+ "privacy": "private",
8381
+ "default": "null"
8382
+ },
8383
+ {
8384
+ "kind": "field",
8385
+ "name": "headerDescriptionSlot",
8386
+ "type": {
8387
+ "text": "HTMLSlotElement | null"
8388
+ },
8389
+ "privacy": "private",
8390
+ "default": "null"
8391
+ },
8392
+ {
8393
+ "kind": "field",
8394
+ "name": "footerSlot",
8395
+ "type": {
8396
+ "text": "HTMLSlotElement | null"
8397
+ },
8398
+ "privacy": "private",
8399
+ "default": "null"
8400
+ },
8401
+ {
8402
+ "kind": "field",
8403
+ "name": "footerAfterSlot",
8404
+ "type": {
8405
+ "text": "HTMLSlotElement | null"
8406
+ },
8407
+ "privacy": "private",
8408
+ "default": "null"
8409
+ },
8410
+ {
8411
+ "kind": "field",
8412
+ "name": "footerDescriptionSlot",
8413
+ "type": {
8414
+ "text": "HTMLSlotElement | null"
8415
+ },
8416
+ "privacy": "private",
8417
+ "default": "null"
8418
+ },
8419
+ {
8420
+ "kind": "field",
8421
+ "name": "notesSlot",
8422
+ "type": {
8423
+ "text": "HTMLSlotElement | null"
8424
+ },
8425
+ "privacy": "private",
8426
+ "default": "null"
8427
+ },
8428
+ {
8429
+ "kind": "field",
8430
+ "name": "imageSlot",
8431
+ "type": {
8432
+ "text": "HTMLSlotElement | null"
8433
+ },
8434
+ "privacy": "private",
8435
+ "default": "null"
8436
+ },
8437
+ {
8438
+ "kind": "field",
8439
+ "name": "surfaceEl",
8440
+ "type": {
8441
+ "text": "HTMLElement | null"
8442
+ },
8443
+ "privacy": "private",
8444
+ "default": "null"
8445
+ },
8446
+ {
8447
+ "kind": "field",
8448
+ "name": "pointerStartX",
8449
+ "type": {
8450
+ "text": "number | null"
8451
+ },
8452
+ "privacy": "private",
8453
+ "default": "null"
8454
+ },
8455
+ {
8456
+ "kind": "field",
8457
+ "name": "pointerStartY",
8458
+ "type": {
8459
+ "text": "number | null"
8460
+ },
8461
+ "privacy": "private",
8462
+ "default": "null"
8463
+ },
8464
+ {
8465
+ "kind": "field",
8466
+ "name": "onSlotChange",
8467
+ "privacy": "private"
8468
+ },
8469
+ {
8470
+ "kind": "field",
8471
+ "name": "onChromeSlotChange",
8472
+ "privacy": "private"
8473
+ },
8474
+ {
8475
+ "kind": "field",
8476
+ "name": "onSurfaceClick",
8477
+ "privacy": "private"
8478
+ },
8479
+ {
8480
+ "kind": "field",
8481
+ "name": "onPointerDown",
8482
+ "privacy": "private"
8483
+ },
8484
+ {
8485
+ "kind": "field",
8486
+ "name": "onPointerUp",
8487
+ "privacy": "private"
8488
+ },
8489
+ {
8490
+ "kind": "field",
8491
+ "name": "onKeyDown",
8492
+ "privacy": "private"
8493
+ },
8494
+ {
8495
+ "kind": "field",
8496
+ "name": "onDocumentKeyDown",
8497
+ "privacy": "private"
8498
+ },
8499
+ {
8500
+ "kind": "method",
8501
+ "name": "getSections",
8502
+ "privacy": "private"
8503
+ },
8504
+ {
8505
+ "kind": "method",
8506
+ "name": "getActiveSectionIndex",
8507
+ "privacy": "private"
8508
+ },
8509
+ {
8510
+ "kind": "method",
8511
+ "name": "setActiveSectionIndex",
8512
+ "privacy": "private",
8513
+ "parameters": [
8514
+ {
8515
+ "name": "index",
8516
+ "type": {
8517
+ "text": "number"
8518
+ }
8519
+ }
8520
+ ]
8521
+ },
8522
+ {
8523
+ "kind": "method",
8524
+ "name": "nextSection"
8525
+ },
8526
+ {
8527
+ "kind": "method",
8528
+ "name": "prevSection"
8529
+ },
8530
+ {
8531
+ "kind": "method",
8532
+ "name": "addSection",
8533
+ "parameters": [
8534
+ {
8535
+ "name": "content",
8536
+ "optional": true,
8537
+ "type": {
8538
+ "text": "HTMLElement | string"
8539
+ }
8540
+ }
8541
+ ]
8542
+ },
8543
+ {
8544
+ "kind": "method",
8545
+ "name": "toggleNotes",
8546
+ "parameters": [
8547
+ {
8548
+ "name": "force",
8549
+ "optional": true,
8550
+ "type": {
8551
+ "text": "boolean"
8552
+ }
8553
+ }
8554
+ ]
8555
+ },
8556
+ {
8557
+ "kind": "method",
8558
+ "name": "resolveRatio",
8559
+ "privacy": "private"
8560
+ },
8561
+ {
8562
+ "kind": "method",
8563
+ "name": "syncSections",
8564
+ "privacy": "private"
8565
+ },
8566
+ {
8567
+ "kind": "method",
8568
+ "name": "handleArrowNavigation",
8569
+ "privacy": "private",
8570
+ "parameters": [
8571
+ {
8572
+ "name": "event",
8573
+ "type": {
8574
+ "text": "KeyboardEvent"
8575
+ }
8576
+ }
8577
+ ]
8578
+ },
8579
+ {
8580
+ "kind": "method",
8581
+ "name": "isEditableTarget",
8582
+ "privacy": "private",
8583
+ "parameters": [
8584
+ {
8585
+ "name": "target",
8586
+ "type": {
8587
+ "text": "EventTarget | null"
8588
+ }
8589
+ }
8590
+ ]
8591
+ },
8592
+ {
8593
+ "kind": "method",
8594
+ "name": "shouldHandleGlobalKeys",
8595
+ "privacy": "private",
8596
+ "parameters": [
8597
+ {
8598
+ "name": "event",
8599
+ "type": {
8600
+ "text": "KeyboardEvent"
8601
+ }
8602
+ }
8603
+ ]
8604
+ },
8605
+ {
8606
+ "kind": "method",
8607
+ "name": "render",
8608
+ "privacy": "private"
8609
+ },
8610
+ {
8611
+ "kind": "method",
8612
+ "name": "syncChromeState",
8613
+ "privacy": "private"
8614
+ },
8615
+ {
8616
+ "kind": "method",
8617
+ "name": "handleSurfaceClick",
8618
+ "privacy": "private",
8619
+ "parameters": [
8620
+ {
8621
+ "name": "event",
8622
+ "type": {
8623
+ "text": "Event"
8624
+ }
8625
+ }
8626
+ ]
7848
8627
  },
7849
8628
  {
7850
8629
  "kind": "method",
7851
- "name": "cleanupListeners"
8630
+ "name": "handlePointerDown",
8631
+ "privacy": "private",
8632
+ "parameters": [
8633
+ {
8634
+ "name": "event",
8635
+ "type": {
8636
+ "text": "PointerEvent"
8637
+ }
8638
+ }
8639
+ ]
7852
8640
  },
7853
8641
  {
7854
8642
  "kind": "method",
7855
- "name": "setupListener"
8643
+ "name": "handlePointerUp",
8644
+ "privacy": "private",
8645
+ "parameters": [
8646
+ {
8647
+ "name": "event",
8648
+ "type": {
8649
+ "text": "PointerEvent"
8650
+ }
8651
+ }
8652
+ ]
7856
8653
  },
7857
8654
  {
7858
8655
  "kind": "method",
7859
- "name": "render"
8656
+ "name": "resolveLightboxImage",
8657
+ "privacy": "private",
8658
+ "parameters": [
8659
+ {
8660
+ "name": "path",
8661
+ "type": {
8662
+ "text": "EventTarget[]"
8663
+ }
8664
+ },
8665
+ {
8666
+ "name": "assigned",
8667
+ "type": {
8668
+ "text": "Element[]"
8669
+ }
8670
+ }
8671
+ ]
7860
8672
  },
7861
8673
  {
7862
8674
  "kind": "method",
7863
- "name": "waitForPartMap",
7864
- "return": {
7865
- "type": {
7866
- "text": "Promise<void>"
8675
+ "name": "openLightbox",
8676
+ "privacy": "private",
8677
+ "parameters": [
8678
+ {
8679
+ "name": "src",
8680
+ "type": {
8681
+ "text": "string"
8682
+ }
8683
+ },
8684
+ {
8685
+ "name": "alt",
8686
+ "type": {
8687
+ "text": "string"
8688
+ }
7867
8689
  }
7868
- }
8690
+ ]
8691
+ },
8692
+ {
8693
+ "kind": "method",
8694
+ "name": "escapeHtml",
8695
+ "privacy": "private",
8696
+ "parameters": [
8697
+ {
8698
+ "name": "value",
8699
+ "type": {
8700
+ "text": "string"
8701
+ }
8702
+ }
8703
+ ]
7869
8704
  }
7870
8705
  ],
7871
8706
  "events": [
7872
8707
  {
7873
- "name": "change",
8708
+ "name": "section-change",
7874
8709
  "type": {
7875
8710
  "text": "CustomEvent"
7876
8711
  }
7877
8712
  },
7878
8713
  {
7879
- "name": "input",
8714
+ "name": "section-add",
8715
+ "type": {
8716
+ "text": "CustomEvent"
8717
+ }
8718
+ },
8719
+ {
8720
+ "name": "notes-toggle",
8721
+ "type": {
8722
+ "text": "CustomEvent"
8723
+ }
8724
+ },
8725
+ {
8726
+ "name": "lightbox-close",
8727
+ "type": {
8728
+ "text": "CustomEvent"
8729
+ }
8730
+ },
8731
+ {
8732
+ "name": "lightbox-open",
7880
8733
  "type": {
7881
8734
  "text": "CustomEvent"
7882
8735
  }
@@ -7884,84 +8737,69 @@
7884
8737
  ],
7885
8738
  "attributes": [
7886
8739
  {
7887
- "name": "name"
8740
+ "name": "ratio"
7888
8741
  },
7889
8742
  {
7890
- "name": "value"
8743
+ "name": "ratio-width"
7891
8744
  },
7892
8745
  {
7893
- "name": "id"
8746
+ "name": "ratio-height"
7894
8747
  },
7895
8748
  {
7896
- "name": "label"
8749
+ "name": "present"
7897
8750
  },
7898
8751
  {
7899
- "name": "options"
8752
+ "name": "active-section"
7900
8753
  },
7901
8754
  {
7902
- "name": "disabled"
8755
+ "name": "padding"
7903
8756
  },
7904
8757
  {
7905
- "name": "hide-label"
8758
+ "name": "notes-open"
7906
8759
  },
7907
8760
  {
7908
8761
  "name": "variant"
7909
8762
  },
7910
8763
  {
7911
- "name": "optional"
8764
+ "name": "radius"
7912
8765
  },
7913
8766
  {
7914
- "name": "size"
8767
+ "name": "title"
8768
+ },
8769
+ {
8770
+ "name": "footer-text"
8771
+ },
8772
+ {
8773
+ "name": "hide-counter"
8774
+ },
8775
+ {
8776
+ "name": "preview"
8777
+ },
8778
+ {
8779
+ "name": "lightbox"
8780
+ },
8781
+ {
8782
+ "name": "scroll"
7915
8783
  }
7916
8784
  ],
7917
8785
  "superclass": {
7918
8786
  "name": "HTMLElement"
7919
8787
  },
7920
- "tagName": "mui-select",
8788
+ "tagName": "mui-slide-frame",
7921
8789
  "customElement": true
7922
8790
  }
7923
8791
  ],
7924
8792
  "exports": [
7925
8793
  {
7926
8794
  "kind": "custom-element-definition",
7927
- "name": "mui-select",
7928
- "declaration": {
7929
- "name": "MuiSelect",
7930
- "module": "src/components/mui-select/index.ts"
7931
- }
7932
- }
7933
- ]
7934
- },
7935
- {
7936
- "kind": "javascript-module",
7937
- "path": "src/components/mui-slat/doc.ts",
7938
- "declarations": [
7939
- {
7940
- "kind": "variable",
7941
- "name": "muiDocs",
7942
- "type": {
7943
- "text": "MuiDocs"
7944
- },
7945
- "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: [\"\"], }, }, }"
7946
- }
7947
- ],
7948
- "exports": [
7949
- {
7950
- "kind": "js",
7951
- "name": "muiDocs",
8795
+ "name": "mui-slide-frame",
7952
8796
  "declaration": {
7953
- "name": "muiDocs",
7954
- "module": "src/components/mui-slat/doc.ts"
8797
+ "name": "MuiSlideFrame",
8798
+ "module": "src/components/mui-slide-frame/index.ts"
7955
8799
  }
7956
8800
  }
7957
8801
  ]
7958
8802
  },
7959
- {
7960
- "kind": "javascript-module",
7961
- "path": "src/components/mui-slat/index.ts",
7962
- "declarations": [],
7963
- "exports": []
7964
- },
7965
8803
  {
7966
8804
  "kind": "javascript-module",
7967
8805
  "path": "src/components/mui-smart-card/doc.ts",
@@ -8193,7 +9031,7 @@
8193
9031
  "type": {
8194
9032
  "text": "MuiDocs"
8195
9033
  },
8196
- "default": "{ Switch: { title: \"Switch\", description: \"A Switch is a UI component used to toggle between two states, typically “on” and “off.” It provides a clear visual indication of an active or inactive setting.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/0dWww7c9wOs9YLPwgsTyy/323dcb62a6be394bbba8f268c8ae62b9/Switch_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=147-1003&t=FSv3FEahG8VQW1FZ-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-switch--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-switch/index.ts\"], website: [\"https://muibook.com/#/switch\"], guides: [\"https://guides.muibook.com/switch\"], usage: { list: [ \"Enable or disable a setting – Toggle features like dark mode or notifications.\", \"Control device states – Switch on/off smart devices or system settings.\", \"Trigger immediate actions – Instantly apply changes without requiring confirmation.\", ], }, accessibility: { designerList: [\"\"], engineerList: [ \"A label is required and applied as aria-label to describe the switch’s purpose.\", \"Uses role='switch' and updates aria-checked for assistive tech.\", \"The label isn’t shown visually—context is provided through icons or nearby text.\", \"disabled sets aria-disabled and blocks interaction.\", \"Supports keyboard navigation with visible focus styles.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/5XNIjIfzNIfo3uIavVlSCU/7bbdc09ee60c7fa03ab19ff2dab558a8/Switch_-_Anatomy.png\", list: [ \"Thumb (Handle) – The movable part that toggles between the on and off states.\", \"Off Track: The background when the switch is in the “off” state.\", \"On Track: The background when the switch is in the “on” state.\", ], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"theme-switch\", name: \"Theme Switch\", description: \"This example from the Muibook Docs website demonstrates a switch component used to toggle the interface between light and dark modes.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/19NvfLGnzRI4MebRSU2aMH/d6ffcca7dffb6c7b843cafc83b812d90/SwitchTheme-Composition.png\", }, ], }, related: { items: [ { name: \"Checkbox\", link: \"https://guides.muibook.com/checkbox\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
9034
+ "default": "{ Switch: { title: \"Switch\", description: \"A Switch is a UI component used to toggle between two states, typically “on” and “off.” It provides a clear visual indication of an active or inactive setting.\", hero: [ \"https://images.ctfassets.net/i5uwscj4pkk2/0dWww7c9wOs9YLPwgsTyy/323dcb62a6be394bbba8f268c8ae62b9/Switch_-_Home_Image.png\", ], figma: [ \"https://www.figma.com/design/l0mt1lXu97XoHJCEdnrWLp/Mui-Design-System?node-id=147-1003&t=FSv3FEahG8VQW1FZ-1\", ], storybook: [\"https://stories.muibook.com/?path=/docs/inputs-switch--docs\"], github: [\"https://github.com/michaeltrilford/muibook/blob/main/src/components/mui-switch/index.ts\"], website: [\"https://muibook.com/#/switch\"], guides: [\"https://guides.muibook.com/switch\"], usage: { list: [ \"Enable or disable a setting – Toggle features like dark mode or notifications.\", \"Control device states – Switch on/off smart devices or system settings.\", \"Trigger immediate actions – Instantly apply changes without requiring confirmation.\", \"Use size='x-small|small|medium|large' to match switch density with surrounding controls.\", ], }, accessibility: { designerList: [\"\"], engineerList: [ \"A label is required and applied as aria-label to describe the switch’s purpose.\", \"Uses role='switch' and updates aria-checked for assistive tech.\", \"The label isn’t shown visually—context is provided through icons or nearby text.\", \"disabled sets aria-disabled and blocks interaction.\", \"Supports keyboard navigation with visible focus styles.\", ], }, anatomy: { image: \"https://images.ctfassets.net/i5uwscj4pkk2/5XNIjIfzNIfo3uIavVlSCU/7bbdc09ee60c7fa03ab19ff2dab558a8/Switch_-_Anatomy.png\", list: [ \"Thumb (Handle) – The movable part that toggles between the on and off states.\", \"Off Track: The background when the switch is in the “off” state.\", \"On Track: The background when the switch is in the “on” state.\", ], }, variants: { items: [ { key: \"\", title: \"\", description: \"\", image: \"\", }, ], }, compositions: { description: \"Showcases actual use cases, demonstrating how the component fits into real-world UI scenarios.\", items: [ { key: \"theme-switch\", name: \"Theme Switch\", description: \"This example from the Muibook Docs website demonstrates a switch component used to toggle the interface between light and dark modes.\", image: \"https://images.ctfassets.net/i5uwscj4pkk2/19NvfLGnzRI4MebRSU2aMH/d6ffcca7dffb6c7b843cafc83b812d90/SwitchTheme-Composition.png\", }, ], }, related: { items: [ { name: \"Checkbox\", link: \"https://guides.muibook.com/checkbox\", }, ], }, rules: [ { heading: \"\", description: \"\", doContent: [{ description: \"\", image: \"\" }], dontContent: [{ description: \"\", image: \"\" }], }, ], behaviour: { list: [\"\"], }, writing: { list: [\"\"], }, }, }"
8197
9035
  }
8198
9036
  ],
8199
9037
  "exports": [
@@ -8296,6 +9134,9 @@
8296
9134
  },
8297
9135
  {
8298
9136
  "name": "checked"
9137
+ },
9138
+ {
9139
+ "name": "size"
8299
9140
  }
8300
9141
  ],
8301
9142
  "superclass": {
@@ -9291,58 +10132,6 @@
9291
10132
  }
9292
10133
  ]
9293
10134
  },
9294
- {
9295
- "kind": "javascript-module",
9296
- "path": "src/components/mui-stepper/step/index.ts",
9297
- "declarations": [
9298
- {
9299
- "kind": "class",
9300
- "description": "",
9301
- "name": "MuiStep",
9302
- "members": [
9303
- {
9304
- "kind": "method",
9305
- "name": "render"
9306
- }
9307
- ],
9308
- "attributes": [
9309
- {
9310
- "name": "state"
9311
- },
9312
- {
9313
- "name": "resolved-state"
9314
- },
9315
- {
9316
- "name": "title"
9317
- },
9318
- {
9319
- "name": "direction"
9320
- },
9321
- {
9322
- "name": "hide-icon"
9323
- },
9324
- {
9325
- "name": "size"
9326
- }
9327
- ],
9328
- "superclass": {
9329
- "name": "HTMLElement"
9330
- },
9331
- "tagName": "mui-step",
9332
- "customElement": true
9333
- }
9334
- ],
9335
- "exports": [
9336
- {
9337
- "kind": "custom-element-definition",
9338
- "name": "mui-step",
9339
- "declaration": {
9340
- "name": "MuiStep",
9341
- "module": "src/components/mui-stepper/step/index.ts"
9342
- }
9343
- }
9344
- ]
9345
- },
9346
10135
  {
9347
10136
  "kind": "javascript-module",
9348
10137
  "path": "src/components/mui-stack/hstack/index.ts",
@@ -9490,23 +10279,75 @@
9490
10279
  "name": "alignx"
9491
10280
  },
9492
10281
  {
9493
- "name": "aligny"
10282
+ "name": "aligny"
10283
+ }
10284
+ ],
10285
+ "superclass": {
10286
+ "name": "HTMLElement"
10287
+ },
10288
+ "tagName": "mui-v-stack",
10289
+ "customElement": true
10290
+ }
10291
+ ],
10292
+ "exports": [
10293
+ {
10294
+ "kind": "custom-element-definition",
10295
+ "name": "mui-v-stack",
10296
+ "declaration": {
10297
+ "name": "MuiVStack",
10298
+ "module": "src/components/mui-stack/vstack/index.ts"
10299
+ }
10300
+ }
10301
+ ]
10302
+ },
10303
+ {
10304
+ "kind": "javascript-module",
10305
+ "path": "src/components/mui-stepper/step/index.ts",
10306
+ "declarations": [
10307
+ {
10308
+ "kind": "class",
10309
+ "description": "",
10310
+ "name": "MuiStep",
10311
+ "members": [
10312
+ {
10313
+ "kind": "method",
10314
+ "name": "render"
10315
+ }
10316
+ ],
10317
+ "attributes": [
10318
+ {
10319
+ "name": "state"
10320
+ },
10321
+ {
10322
+ "name": "resolved-state"
10323
+ },
10324
+ {
10325
+ "name": "title"
10326
+ },
10327
+ {
10328
+ "name": "direction"
10329
+ },
10330
+ {
10331
+ "name": "hide-icon"
10332
+ },
10333
+ {
10334
+ "name": "size"
9494
10335
  }
9495
10336
  ],
9496
10337
  "superclass": {
9497
10338
  "name": "HTMLElement"
9498
10339
  },
9499
- "tagName": "mui-v-stack",
10340
+ "tagName": "mui-step",
9500
10341
  "customElement": true
9501
10342
  }
9502
10343
  ],
9503
10344
  "exports": [
9504
10345
  {
9505
10346
  "kind": "custom-element-definition",
9506
- "name": "mui-v-stack",
10347
+ "name": "mui-step",
9507
10348
  "declaration": {
9508
- "name": "MuiVStack",
9509
- "module": "src/components/mui-stack/vstack/index.ts"
10349
+ "name": "MuiStep",
10350
+ "module": "src/components/mui-stepper/step/index.ts"
9510
10351
  }
9511
10352
  }
9512
10353
  ]
@@ -9684,32 +10525,6 @@
9684
10525
  }
9685
10526
  ]
9686
10527
  },
9687
- {
9688
- "kind": "javascript-module",
9689
- "path": "src/components/mui-table/row-group/index.ts",
9690
- "declarations": [
9691
- {
9692
- "kind": "class",
9693
- "description": "",
9694
- "name": "MuiRowGroup",
9695
- "superclass": {
9696
- "name": "HTMLElement"
9697
- },
9698
- "tagName": "mui-row-group",
9699
- "customElement": true
9700
- }
9701
- ],
9702
- "exports": [
9703
- {
9704
- "kind": "custom-element-definition",
9705
- "name": "mui-row-group",
9706
- "declaration": {
9707
- "name": "MuiRowGroup",
9708
- "module": "src/components/mui-table/row-group/index.ts"
9709
- }
9710
- }
9711
- ]
9712
- },
9713
10528
  {
9714
10529
  "kind": "javascript-module",
9715
10530
  "path": "src/components/mui-table/cell/index.ts",
@@ -9790,6 +10605,78 @@
9790
10605
  }
9791
10606
  ]
9792
10607
  },
10608
+ {
10609
+ "kind": "javascript-module",
10610
+ "path": "src/components/mui-tabs/controller/index.ts",
10611
+ "declarations": [
10612
+ {
10613
+ "kind": "class",
10614
+ "description": "",
10615
+ "name": "MuiTabController",
10616
+ "members": [
10617
+ {
10618
+ "kind": "method",
10619
+ "name": "initializePanels",
10620
+ "privacy": "private",
10621
+ "return": {
10622
+ "type": {
10623
+ "text": "void"
10624
+ }
10625
+ }
10626
+ },
10627
+ {
10628
+ "kind": "method",
10629
+ "name": "handleTabChange",
10630
+ "return": {
10631
+ "type": {
10632
+ "text": "void"
10633
+ }
10634
+ },
10635
+ "parameters": [
10636
+ {
10637
+ "name": "event",
10638
+ "type": {
10639
+ "text": "Event"
10640
+ }
10641
+ }
10642
+ ]
10643
+ },
10644
+ {
10645
+ "kind": "method",
10646
+ "name": "updatePanels",
10647
+ "return": {
10648
+ "type": {
10649
+ "text": "void"
10650
+ }
10651
+ },
10652
+ "parameters": [
10653
+ {
10654
+ "name": "activeId",
10655
+ "type": {
10656
+ "text": "string"
10657
+ }
10658
+ }
10659
+ ]
10660
+ }
10661
+ ],
10662
+ "superclass": {
10663
+ "name": "HTMLElement"
10664
+ },
10665
+ "tagName": "mui-tab-controller",
10666
+ "customElement": true
10667
+ }
10668
+ ],
10669
+ "exports": [
10670
+ {
10671
+ "kind": "custom-element-definition",
10672
+ "name": "mui-tab-controller",
10673
+ "declaration": {
10674
+ "name": "MuiTabController",
10675
+ "module": "src/components/mui-tabs/controller/index.ts"
10676
+ }
10677
+ }
10678
+ ]
10679
+ },
9793
10680
  {
9794
10681
  "kind": "javascript-module",
9795
10682
  "path": "src/components/mui-table/table/index.ts",
@@ -9818,45 +10705,26 @@
9818
10705
  },
9819
10706
  {
9820
10707
  "kind": "javascript-module",
9821
- "path": "src/components/mui-tabs/panel/index.ts",
10708
+ "path": "src/components/mui-table/row-group/index.ts",
9822
10709
  "declarations": [
9823
10710
  {
9824
10711
  "kind": "class",
9825
10712
  "description": "",
9826
- "name": "MuiTabPanel",
9827
- "members": [
9828
- {
9829
- "kind": "field",
9830
- "name": "item",
9831
- "type": {
9832
- "text": "string | null"
9833
- }
9834
- },
9835
- {
9836
- "kind": "field",
9837
- "name": "innerHTML",
9838
- "default": "` <style> :host { display: block; } :host([hidden]) { display: none !important; } .inner { padding: var(--tab-panel-padding, 0); } </style> <div class=\"inner\"> <slot></slot> </div> `"
9839
- }
9840
- ],
9841
- "attributes": [
9842
- {
9843
- "name": "item"
9844
- }
9845
- ],
10713
+ "name": "MuiRowGroup",
9846
10714
  "superclass": {
9847
10715
  "name": "HTMLElement"
9848
10716
  },
9849
- "tagName": "mui-tab-panel",
10717
+ "tagName": "mui-row-group",
9850
10718
  "customElement": true
9851
10719
  }
9852
10720
  ],
9853
10721
  "exports": [
9854
10722
  {
9855
10723
  "kind": "custom-element-definition",
9856
- "name": "mui-tab-panel",
10724
+ "name": "mui-row-group",
9857
10725
  "declaration": {
9858
- "name": "MuiTabPanel",
9859
- "module": "src/components/mui-tabs/panel/index.ts"
10726
+ "name": "MuiRowGroup",
10727
+ "module": "src/components/mui-table/row-group/index.ts"
9860
10728
  }
9861
10729
  }
9862
10730
  ]
@@ -9966,78 +10834,6 @@
9966
10834
  }
9967
10835
  ]
9968
10836
  },
9969
- {
9970
- "kind": "javascript-module",
9971
- "path": "src/components/mui-tabs/controller/index.ts",
9972
- "declarations": [
9973
- {
9974
- "kind": "class",
9975
- "description": "",
9976
- "name": "MuiTabController",
9977
- "members": [
9978
- {
9979
- "kind": "method",
9980
- "name": "initializePanels",
9981
- "privacy": "private",
9982
- "return": {
9983
- "type": {
9984
- "text": "void"
9985
- }
9986
- }
9987
- },
9988
- {
9989
- "kind": "method",
9990
- "name": "handleTabChange",
9991
- "return": {
9992
- "type": {
9993
- "text": "void"
9994
- }
9995
- },
9996
- "parameters": [
9997
- {
9998
- "name": "event",
9999
- "type": {
10000
- "text": "Event"
10001
- }
10002
- }
10003
- ]
10004
- },
10005
- {
10006
- "kind": "method",
10007
- "name": "updatePanels",
10008
- "return": {
10009
- "type": {
10010
- "text": "void"
10011
- }
10012
- },
10013
- "parameters": [
10014
- {
10015
- "name": "activeId",
10016
- "type": {
10017
- "text": "string"
10018
- }
10019
- }
10020
- ]
10021
- }
10022
- ],
10023
- "superclass": {
10024
- "name": "HTMLElement"
10025
- },
10026
- "tagName": "mui-tab-controller",
10027
- "customElement": true
10028
- }
10029
- ],
10030
- "exports": [
10031
- {
10032
- "kind": "custom-element-definition",
10033
- "name": "mui-tab-controller",
10034
- "declaration": {
10035
- "name": "MuiTabController",
10036
- "module": "src/components/mui-tabs/controller/index.ts"
10037
- }
10038
- }
10039
- ]
10040
- },
10041
10837
  {
10042
10838
  "kind": "javascript-module",
10043
10839
  "path": "src/components/mui-tabs/tab-bar/index.ts",
@@ -10197,6 +10993,51 @@
10197
10993
  }
10198
10994
  }
10199
10995
  ]
10996
+ },
10997
+ {
10998
+ "kind": "javascript-module",
10999
+ "path": "src/components/mui-tabs/panel/index.ts",
11000
+ "declarations": [
11001
+ {
11002
+ "kind": "class",
11003
+ "description": "",
11004
+ "name": "MuiTabPanel",
11005
+ "members": [
11006
+ {
11007
+ "kind": "field",
11008
+ "name": "item",
11009
+ "type": {
11010
+ "text": "string | null"
11011
+ }
11012
+ },
11013
+ {
11014
+ "kind": "field",
11015
+ "name": "innerHTML",
11016
+ "default": "` <style> :host { display: block; } :host([hidden]) { display: none !important; } .inner { padding: var(--tab-panel-padding, 0); } </style> <div class=\"inner\"> <slot></slot> </div> `"
11017
+ }
11018
+ ],
11019
+ "attributes": [
11020
+ {
11021
+ "name": "item"
11022
+ }
11023
+ ],
11024
+ "superclass": {
11025
+ "name": "HTMLElement"
11026
+ },
11027
+ "tagName": "mui-tab-panel",
11028
+ "customElement": true
11029
+ }
11030
+ ],
11031
+ "exports": [
11032
+ {
11033
+ "kind": "custom-element-definition",
11034
+ "name": "mui-tab-panel",
11035
+ "declaration": {
11036
+ "name": "MuiTabPanel",
11037
+ "module": "src/components/mui-tabs/panel/index.ts"
11038
+ }
11039
+ }
11040
+ ]
10200
11041
  }
10201
11042
  ]
10202
11043
  }