@trimble-oss/moduswebcomponents-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/index.js +337 -0
- package/package.json +39 -0
- package/versions/1.0.0/component-docs/_all_components.json +56 -0
- package/versions/1.0.0/component-docs/modus-wc-autocomplete.json +415 -0
- package/versions/1.0.0/component-docs/modus-wc-date.json +227 -0
- package/versions/1.0.0/component-docs/modus-wc-dropdown-menu.json +164 -0
- package/versions/1.0.0/component-docs/modus-wc-logo.json +61 -0
- package/versions/1.0.0/component-docs/modus-wc-menu-item.json +165 -0
- package/versions/1.0.0/component-docs/modus-wc-menu.json +106 -0
- package/versions/1.0.0/component-docs/modus-wc-navbar.json +290 -0
- package/versions/1.0.0/component-docs/modus-wc-profile-menu.json +64 -0
- package/versions/1.0.0/component-docs/modus-wc-side-navigation.json +102 -0
- package/versions/1.0.0/component-docs/modus-wc-table.json +202 -0
- package/versions/1.0.0/component-docs/modus-wc-tooltip.json +94 -0
- package/versions/1.0.0/component-docs/modus-wc-typography.json +78 -0
- package/versions/1.0.0/docs/_all_docs.json +15 -0
- package/versions/1.0.0/docs/angular.mdx +374 -0
- package/versions/1.0.0/docs/getting-started.mdx +131 -0
- package/versions/1.0.7/component-docs/_all_components.json +55 -0
- package/versions/1.0.7/component-docs/modus-wc-autocomplete.json +405 -0
- package/versions/1.0.7/component-docs/modus-wc-table.json +202 -0
- package/versions/1.0.7/component-docs/modus-wc-tooltip.json +94 -0
- package/versions/1.0.7/docs/_all_docs.json +15 -0
- package/versions/1.0.7/docs/angular.mdx +374 -0
- package/versions/1.1.0/component-docs/_all_components.json +56 -0
- package/versions/1.1.0/component-docs/modus-wc-autocomplete.json +405 -0
- package/versions/1.1.0/component-docs/modus-wc-navbar.json +290 -0
- package/versions/1.1.0/component-docs/modus-wc-profile-menu.json +64 -0
- package/versions/1.1.0/component-docs/modus-wc-side-navigation.json +102 -0
- package/versions/1.1.0/component-docs/modus-wc-table.json +202 -0
- package/versions/1.1.0/component-docs/modus-wc-tooltip.json +94 -0
- package/versions/1.1.0/component-docs/modus-wc-typography.json +78 -0
- package/versions/1.1.0/docs/_all_docs.json +15 -0
- package/versions/1.1.0/docs/angular.mdx +374 -0
- package/versions/1.1.0/docs/getting-started.mdx +131 -0
- package/versions/1.1.1/component-docs/_all_components.json +56 -0
- package/versions/1.1.1/component-docs/modus-wc-autocomplete.json +405 -0
- package/versions/1.1.1/component-docs/modus-wc-navbar.json +290 -0
- package/versions/1.1.1/component-docs/modus-wc-profile-menu.json +64 -0
- package/versions/1.1.1/component-docs/modus-wc-side-navigation.json +102 -0
- package/versions/1.1.1/component-docs/modus-wc-table.json +202 -0
- package/versions/1.1.1/component-docs/modus-wc-tooltip.json +94 -0
- package/versions/1.1.1/component-docs/modus-wc-typography.json +78 -0
- package/versions/1.1.1/docs/_all_docs.json +15 -0
- package/versions/1.1.1/docs/angular.mdx +374 -0
- package/versions/1.1.1/docs/getting-started.mdx +131 -0
- package/versions/base/component-docs/_all_components.json +55 -0
- package/versions/base/component-docs/modus-wc-accordion.json +48 -0
- package/versions/base/component-docs/modus-wc-alert.json +112 -0
- package/versions/base/component-docs/modus-wc-autocomplete.json +397 -0
- package/versions/base/component-docs/modus-wc-avatar.json +83 -0
- package/versions/base/component-docs/modus-wc-badge.json +68 -0
- package/versions/base/component-docs/modus-wc-breadcrumbs.json +63 -0
- package/versions/base/component-docs/modus-wc-button-group.json +100 -0
- package/versions/base/component-docs/modus-wc-button.json +130 -0
- package/versions/base/component-docs/modus-wc-card.json +98 -0
- package/versions/base/component-docs/modus-wc-checkbox.json +149 -0
- package/versions/base/component-docs/modus-wc-chip.json +132 -0
- package/versions/base/component-docs/modus-wc-collapse.json +90 -0
- package/versions/base/component-docs/modus-wc-date.json +227 -0
- package/versions/base/component-docs/modus-wc-divider.json +85 -0
- package/versions/base/component-docs/modus-wc-dropdown-menu.json +154 -0
- package/versions/base/component-docs/modus-wc-file-dropzone.json +155 -0
- package/versions/base/component-docs/modus-wc-handle.json +135 -0
- package/versions/base/component-docs/modus-wc-icon.json +722 -0
- package/versions/base/component-docs/modus-wc-input-feedback.json +71 -0
- package/versions/base/component-docs/modus-wc-input-label.json +84 -0
- package/versions/base/component-docs/modus-wc-loader.json +65 -0
- package/versions/base/component-docs/modus-wc-logo.json +61 -0
- package/versions/base/component-docs/modus-wc-menu-item.json +173 -0
- package/versions/base/component-docs/modus-wc-menu.json +86 -0
- package/versions/base/component-docs/modus-wc-modal.json +108 -0
- package/versions/base/component-docs/modus-wc-navbar.json +280 -0
- package/versions/base/component-docs/modus-wc-number-input.json +219 -0
- package/versions/base/component-docs/modus-wc-pagination.json +103 -0
- package/versions/base/component-docs/modus-wc-panel.json +76 -0
- package/versions/base/component-docs/modus-wc-progress.json +86 -0
- package/versions/base/component-docs/modus-wc-radio.json +139 -0
- package/versions/base/component-docs/modus-wc-rating.json +117 -0
- package/versions/base/component-docs/modus-wc-select.json +159 -0
- package/versions/base/component-docs/modus-wc-side-navigation.json +102 -0
- package/versions/base/component-docs/modus-wc-skeleton.json +65 -0
- package/versions/base/component-docs/modus-wc-slider.json +163 -0
- package/versions/base/component-docs/modus-wc-stepper.json +47 -0
- package/versions/base/component-docs/modus-wc-switch.json +149 -0
- package/versions/base/component-docs/modus-wc-table.json +202 -0
- package/versions/base/component-docs/modus-wc-tabs.json +86 -0
- package/versions/base/component-docs/modus-wc-text-input.json +278 -0
- package/versions/base/component-docs/modus-wc-textarea.json +215 -0
- package/versions/base/component-docs/modus-wc-theme-switcher.json +49 -0
- package/versions/base/component-docs/modus-wc-time-input.json +211 -0
- package/versions/base/component-docs/modus-wc-toast.json +56 -0
- package/versions/base/component-docs/modus-wc-toolbar.json +44 -0
- package/versions/base/component-docs/modus-wc-tooltip.json +94 -0
- package/versions/base/component-docs/modus-wc-typography.json +73 -0
- package/versions/base/component-docs/modus-wc-utility-panel.json +86 -0
- package/versions/base/docs/_all_docs.json +15 -0
- package/versions/base/docs/accessibility.mdx +32 -0
- package/versions/base/docs/angular.mdx +346 -0
- package/versions/base/docs/form-inputs.mdx +86 -0
- package/versions/base/docs/getting-started.mdx +91 -0
- package/versions/base/docs/modus-figma-mcp-integration-guide.mdx +254 -0
- package/versions/base/docs/modus-icon-usage.mdx +210 -0
- package/versions/base/docs/react.mdx +129 -0
- package/versions/base/docs/styling.mdx +107 -0
- package/versions/base/docs/testing.mdx +18 -0
- package/versions/base/docs/vue.mdx +159 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "A customizable modal component used to display content in a dialog. This component supports 'header', 'content', and 'footer' `<slot>` elements for inserting custom HTML.",
|
|
3
|
+
"properties": [
|
|
4
|
+
{
|
|
5
|
+
"name": "backdrop",
|
|
6
|
+
"type": "'default' | 'static'",
|
|
7
|
+
"description": "The modal's backdrop. Specify 'static' for a backdrop that doesn't close the modal when clicked outside the modal content.",
|
|
8
|
+
"default": "'default'",
|
|
9
|
+
"mutable": false,
|
|
10
|
+
"end_line": 27
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"name": "customClass",
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Custom CSS class to apply",
|
|
16
|
+
"default": "''",
|
|
17
|
+
"mutable": false,
|
|
18
|
+
"end_line": 30
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "fullscreen",
|
|
22
|
+
"type": "boolean",
|
|
23
|
+
"description": "Specifies whether the modal should be displayed full-screen",
|
|
24
|
+
"default": "false",
|
|
25
|
+
"mutable": false,
|
|
26
|
+
"end_line": 33
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"name": "modalId",
|
|
30
|
+
"type": "string",
|
|
31
|
+
"description": "The ID of the inner dialog element",
|
|
32
|
+
"default": null,
|
|
33
|
+
"mutable": false,
|
|
34
|
+
"end_line": 36
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "position",
|
|
38
|
+
"type": "'bottom' | 'center' | 'top'",
|
|
39
|
+
"description": "Specifies the position of the modal",
|
|
40
|
+
"default": "'center'",
|
|
41
|
+
"mutable": false,
|
|
42
|
+
"end_line": 39
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "showClose",
|
|
46
|
+
"type": "boolean",
|
|
47
|
+
"description": "Specifies whether to show the close icon button at the top right of modal",
|
|
48
|
+
"default": "true",
|
|
49
|
+
"mutable": false,
|
|
50
|
+
"end_line": 42
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "showFullscreenToggle",
|
|
54
|
+
"type": "boolean",
|
|
55
|
+
"description": "Specifies whether to show the fullscreen toggle icon button",
|
|
56
|
+
"default": "false",
|
|
57
|
+
"mutable": false,
|
|
58
|
+
"end_line": 45
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
"events": [],
|
|
62
|
+
"methods": [],
|
|
63
|
+
"slots": [
|
|
64
|
+
{
|
|
65
|
+
"name": "header",
|
|
66
|
+
"description": "Slot for header content"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "content",
|
|
70
|
+
"description": "Slot for content content"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "footer",
|
|
74
|
+
"description": "Slot for footer content"
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"examples": {
|
|
78
|
+
"basic": "<modus-wc-button id=\"open-modal-btn\" @buttonClick=${() => handleModalVisibility('show')}>\n Open modal\n</modus-wc-button>\n<modus-wc-modal\n aria-label=\"Example modal\"\n custom-class=${ifDefined(args['custom-class'])}\n fullscreen=${args.fullscreen}\n modal-id=${modalId}\n backdrop=${args.backdrop}\n position=${args.position}\n show-close=${args['show-close']}\n show-fullscreen-toggle=${args['show-fullscreen-toggle']}\n>\n <span slot=\"header\">Modal Title</span>\n <span slot=\"content\"> This is sample modal content. </span>\n <modus-wc-button slot=\"footer\" id=\"close-modal-btn\" @buttonClick=${() => handleModalVisibility('hide')}>\n Close\n </modus-wc-button>\n</modus-wc-modal>\n${illustrativeScript}",
|
|
79
|
+
"variations": [],
|
|
80
|
+
"args": {
|
|
81
|
+
"backdrop": "'default'",
|
|
82
|
+
"custom-class": "''",
|
|
83
|
+
"fullscreen": "false",
|
|
84
|
+
"modal-id": "'my_modal_1'",
|
|
85
|
+
"position": "'center'",
|
|
86
|
+
"show-close": "true",
|
|
87
|
+
"show-fullscreen-toggle": "false"
|
|
88
|
+
},
|
|
89
|
+
"argTypes": {},
|
|
90
|
+
"usage": []
|
|
91
|
+
},
|
|
92
|
+
"tag": "modus-wc-modal",
|
|
93
|
+
"storyExample": {
|
|
94
|
+
"template": "<modus-wc-button id=\"open-modal-btn\" @buttonClick=${() => handleModalVisibility('show')}>\n Open modal\n</modus-wc-button>\n<modus-wc-modal\n aria-label=\"Example modal\"\n custom-class=${ifDefined(args['custom-class'])}\n fullscreen=${args.fullscreen}\n modal-id=${modalId}\n backdrop=${args.backdrop}\n position=${args.position}\n show-close=${args['show-close']}\n show-fullscreen-toggle=${args['show-fullscreen-toggle']}\n>\n <span slot=\"header\">Modal Title</span>\n <span slot=\"content\"> This is sample modal content. </span>\n <modus-wc-button slot=\"footer\" id=\"close-modal-btn\" @buttonClick=${() => handleModalVisibility('hide')}>\n Close\n </modus-wc-button>\n</modus-wc-modal>\n${illustrativeScript}",
|
|
95
|
+
"args": {
|
|
96
|
+
"backdrop": "'default'",
|
|
97
|
+
"custom-class": "''",
|
|
98
|
+
"fullscreen": "false",
|
|
99
|
+
"modal-id": "'my_modal_1'",
|
|
100
|
+
"position": "'center'",
|
|
101
|
+
"show-close": "true",
|
|
102
|
+
"show-fullscreen-toggle": "false"
|
|
103
|
+
},
|
|
104
|
+
"argTypes": {},
|
|
105
|
+
"events": [],
|
|
106
|
+
"fullContent": "import { Meta, StoryObj } from '@storybook/web-components';\nimport { html } from 'lit';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { generateRandomId } from '../utils';\n\ninterface ModalArgs {\n backdrop: 'default' | 'static';\n 'custom-class'?: string;\n fullscreen: boolean;\n 'modal-id'?: string;\n position: 'bottom' | 'center' | 'top';\n 'show-close': boolean;\n 'show-fullscreen-toggle': boolean;\n}\n\nconst meta: Meta<ModalArgs> = {\n title: 'Components/Modal',\n component: 'modus-wc-modal',\n args: {\n backdrop: 'default',\n 'custom-class': '',\n fullscreen: false,\n 'modal-id': 'my_modal_1',\n position: 'center',\n 'show-close': true,\n 'show-fullscreen-toggle': false,\n },\n argTypes: {\n backdrop: {\n control: { type: 'select' },\n options: ['default', 'static'],\n },\n position: {\n control: { type: 'select' },\n options: ['bottom', 'center', 'top'],\n },\n },\n parameters: {\n layout: 'centered',\n },\n};\n\nexport default meta;\n\ntype Story = StoryObj<ModalArgs>;\nconst illustrativeScript = html`\n <script>\n // This is to illustrate how to implement modal visibility handling\n // const modalId = document\n // .querySelector('modus-wc-modal')\n // .getAttribute('modal-id');\n // const handleModalVisibility = (action) => {\n // const modal = document.getElementById(modalId);\n // if (modal) {\n // if (action === 'show') {\n // modal.showModal();\n // } else {\n // modal.close();\n // }\n // }\n // };\n // const openButton = document.getElementById('open-modal-btn');\n // const closeButton = document.getElementById('close-modal-btn');\n // openButton.addEventListener('click', () =>\n // handleModalVisibility('show')\n // );\n // closeButton.addEventListener('click', () =>\n // handleModalVisibility('hide')\n // );\n </script>\n`;\n\nexport const Default: Story = {\n render: (args) => {\n const modalId = `${args['modal-id']}${generateRandomId(4)}}`;\n\n const handleModalVisibility = (action: 'show' | 'hide') => {\n const modal = document.getElementById(modalId) as HTMLDialogElement;\n if (modal) {\n if (action === 'show') {\n modal.showModal();\n } else {\n modal.close();\n }\n }\n };\n\n // prettier-ignore\n return html`\n<modus-wc-button id=\"open-modal-btn\" @buttonClick=${() => handleModalVisibility('show')}>\n Open modal\n</modus-wc-button>\n<modus-wc-modal\n aria-label=\"Example modal\"\n custom-class=${ifDefined(args['custom-class'])}\n fullscreen=${args.fullscreen}\n modal-id=${modalId}\n backdrop=${args.backdrop}\n position=${args.position}\n show-close=${args['show-close']}\n show-fullscreen-toggle=${args['show-fullscreen-toggle']}\n>\n <span slot=\"header\">Modal Title</span>\n <span slot=\"content\"> This is sample modal content. </span>\n <modus-wc-button slot=\"footer\" id=\"close-modal-btn\" @buttonClick=${() => handleModalVisibility('hide')}>\n Close\n </modus-wc-button>\n</modus-wc-modal>\n${illustrativeScript}\n `;\n },\n};\n\nexport const CustomWidthAndHeight: Story = {\n render: (args) => {\n const modalId = `${args['modal-id']}${generateRandomId(4)}}`;\n\n const handleModalVisibility = (action: 'show' | 'hide') => {\n const modal = document.getElementById(modalId) as HTMLDialogElement;\n if (modal) {\n if (action === 'show') {\n modal.showModal();\n } else {\n modal.close();\n }\n }\n };\n\n // prettier-ignore\n return html`\n<style>\n .expanded-modal .modus-wc-modal-box {\n width: 80%;\n max-width: none;\n height: 60%;\n max-height: none;\n }\n</style>\n<modus-wc-button id=\"open-modal-btn\" @buttonClick=${() => handleModalVisibility('show')}>\n Open modal\n</modus-wc-button>\n<modus-wc-modal\n aria-label=\"Example modal\"\n custom-class=\"expanded-modal\"\n modal-id=${modalId}\n backdrop=${ifDefined(args.backdrop)}\n position=${ifDefined(args.position)}\n show-close=${ifDefined(args['show-close'])}\n>\n <span slot=\"header\">Modal Title</span>\n <p slot=\"content\">Sample modal content.</p>\n <modus-wc-button slot=\"footer\" id=\"close-modal-btn\" @buttonClick=${() => handleModalVisibility('hide')}>\n Close\n </modus-wc-button>\n</modus-wc-modal>\n${illustrativeScript}\n `;\n },\n};\n\nexport const Migration: Story = {\n parameters: {\n docs: {\n description: {\n story: `\n#### Breaking Changes\n\n - Modal identification is now required via the \\`modal-id\\` prop.\n - 2.0 requires the use of slots for a fully customizable \\`header\\`, \\`content\\`, and \\`footer\\`.\n Primary and secondary buttons as well as \\`header-text\\` are no longer built-in.\n - In 1.0, modals had built-in open/close state management with methods. 2.0 uses the native HTML dialog\n element with \\`modal-id\\` to target the dialog with native \\`showModal()\\` and \\`close()\\` methods.\n\n#### Prop Mapping\n\n| 1.0 Prop | 2.0 Prop | Notes |\n|------------------------------|-------------------------|-----------------------------------------------|\n| aria-label | aria-label | |\n| backdrop | backdrop | |\n| fullscreen | fullscreen | |\n| header-text | | Not carried over, use \\`header\\` slot instead |\n| primary-button-aria-label | | Not carried over, use \\`footer\\` slot instead |\n| primary-button-disabled | | Not carried over, use \\`footer\\` slot instead |\n| primary-button-text | | Not carried over, use \\`footer\\` slot instead |\n| secondary-button-aria-label | | Not carried over, use \\`footer\\` slot instead |\n| secondary-button-disabled | | Not carried over, use \\`footer\\` slot instead |\n| secondary-button-text | | Not carried over, use \\`footer\\` slot instead |\n| show-fullscreen-toggle | show-fullscreen-toggle | |\n| z-index | | Not carried over, use CSS instead |\n\n#### Event Mapping\n\n| 1.0 Event | 2.0 Event | Notes |\n|----------------------|-----------|-----------------------------------------------------------------------------------|\n| closed | | Not carried over, use dialog \\`close()\\` event instead |\n| opened | | Not carried over, use dialog \\`showModal()\\` event instead |\n| primaryButtonClick | | Not carried over, handle with events on custom buttons in \\`footer\\` slot instead |\n| secondaryButtonClick | | Not carried over, handle with events on custom buttons in \\`footer\\` slot instead |\n `,\n },\n },\n controls: { disable: true },\n canvas: { disable: true },\n },\n render: () => html`<div></div>`,\n};\n"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "A customizable navbar component used for top level navigation of all Trimble applications. The component supports a 'main-menu', 'notifications', and 'apps' <slot> for injecting custom HTML menus. It also supports a 'start', 'center', and 'end' `<slot>` for injecting additional custom HTML.",
|
|
3
|
+
"properties": [
|
|
4
|
+
{
|
|
5
|
+
"name": "appsMenuOpen",
|
|
6
|
+
"type": "boolean",
|
|
7
|
+
"description": "The open state of the apps menu.",
|
|
8
|
+
"default": "false",
|
|
9
|
+
"mutable": true,
|
|
10
|
+
"end_line": 95
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"name": "condensed",
|
|
14
|
+
"type": "boolean",
|
|
15
|
+
"description": "Applies condensed layout and styling.",
|
|
16
|
+
"default": "false",
|
|
17
|
+
"mutable": false,
|
|
18
|
+
"end_line": 98
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "condensedMenuOpen",
|
|
22
|
+
"type": "boolean",
|
|
23
|
+
"description": "The open state of the condensed menu.",
|
|
24
|
+
"default": "false",
|
|
25
|
+
"mutable": true,
|
|
26
|
+
"end_line": 101
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"name": "customClass",
|
|
30
|
+
"type": "string",
|
|
31
|
+
"description": "Custom CSS class to apply to the host element.",
|
|
32
|
+
"default": "''",
|
|
33
|
+
"mutable": false,
|
|
34
|
+
"end_line": 104
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "mainMenuOpen",
|
|
38
|
+
"type": "boolean",
|
|
39
|
+
"description": "The open state of the main menu.",
|
|
40
|
+
"default": "false",
|
|
41
|
+
"mutable": true,
|
|
42
|
+
"end_line": 107
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "notificationsMenuOpen",
|
|
46
|
+
"type": "boolean",
|
|
47
|
+
"description": "The open state of the notifications menu.",
|
|
48
|
+
"default": "false",
|
|
49
|
+
"mutable": true,
|
|
50
|
+
"end_line": 110
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "searchDebounceMs",
|
|
54
|
+
"type": "number",
|
|
55
|
+
"description": "Debounce time in milliseconds for search input changes. Default is 300ms.",
|
|
56
|
+
"default": "300",
|
|
57
|
+
"mutable": false,
|
|
58
|
+
"end_line": 113
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "searchInputOpen",
|
|
62
|
+
"type": "boolean",
|
|
63
|
+
"description": "The open state of the search input.",
|
|
64
|
+
"default": "false",
|
|
65
|
+
"mutable": true,
|
|
66
|
+
"end_line": 116
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "textOverrides",
|
|
70
|
+
"type": "INavbarTextOverrides",
|
|
71
|
+
"description": "Text replacements for the navbar.",
|
|
72
|
+
"default": null,
|
|
73
|
+
"mutable": false,
|
|
74
|
+
"end_line": 119
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "userCard",
|
|
78
|
+
"type": "INavbarUserCard",
|
|
79
|
+
"description": "User information used to render the user card.",
|
|
80
|
+
"default": null,
|
|
81
|
+
"mutable": false,
|
|
82
|
+
"end_line": 122
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "userMenuOpen",
|
|
86
|
+
"type": "boolean",
|
|
87
|
+
"description": "The open state of the user menu.",
|
|
88
|
+
"default": "false",
|
|
89
|
+
"mutable": true,
|
|
90
|
+
"end_line": 125
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "visibility",
|
|
94
|
+
"type": "INavbarVisibility",
|
|
95
|
+
"description": "The visibility of individual navbar buttons. Default is user profile visible, others hidden.",
|
|
96
|
+
"default": "{ ai: false, apps: false, help: false, mainMenu: false, notifications: false, search: false, searchInput: false, user: true, }",
|
|
97
|
+
"mutable": false,
|
|
98
|
+
"end_line": 137
|
|
99
|
+
}
|
|
100
|
+
],
|
|
101
|
+
"events": [
|
|
102
|
+
{
|
|
103
|
+
"name": "aiClick",
|
|
104
|
+
"detail": "MouseEvent | KeyboardEvent",
|
|
105
|
+
"description": "Event emitted when the AI button is clicked or activated via keyboard.",
|
|
106
|
+
"end_line": 140
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"name": "appsClick",
|
|
110
|
+
"detail": "MouseEvent | KeyboardEvent",
|
|
111
|
+
"description": "Event emitted when the apps button is clicked or activated via keyboard.",
|
|
112
|
+
"end_line": 143
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"name": "appsMenuOpenChange",
|
|
116
|
+
"detail": "boolean",
|
|
117
|
+
"description": "Event emitted when the apps menu open state changes.",
|
|
118
|
+
"end_line": 146
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"name": "condensedMenuOpenChange",
|
|
122
|
+
"detail": "boolean",
|
|
123
|
+
"description": "Event emitted when the condensed menu open state changes.",
|
|
124
|
+
"end_line": 149
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"name": "helpClick",
|
|
128
|
+
"detail": "MouseEvent | KeyboardEvent",
|
|
129
|
+
"description": "Event emitted when the help button is clicked or activated via keyboard.",
|
|
130
|
+
"end_line": 152
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"name": "mainMenuOpenChange",
|
|
134
|
+
"detail": "boolean",
|
|
135
|
+
"description": "Event emitted when the main menu open state changes.",
|
|
136
|
+
"end_line": 155
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"name": "myTrimbleClick",
|
|
140
|
+
"detail": "MouseEvent | KeyboardEvent",
|
|
141
|
+
"description": "Event emitted when the user profile Access MyTrimble button is clicked or activated via keyboard.",
|
|
142
|
+
"end_line": 158
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"name": "notificationsClick",
|
|
146
|
+
"detail": "MouseEvent | KeyboardEvent",
|
|
147
|
+
"description": "Event emitted when the notifications button is clicked or activated via keyboard.",
|
|
148
|
+
"end_line": 161
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"name": "notificationsMenuOpenChange",
|
|
152
|
+
"detail": "boolean",
|
|
153
|
+
"description": "Event emitted when the notifications menu open state changes.",
|
|
154
|
+
"end_line": 164
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"name": "searchChange",
|
|
158
|
+
"detail": "{ value: string }",
|
|
159
|
+
"description": "Event emitted when the search input value is changed.",
|
|
160
|
+
"end_line": 167
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"name": "searchClick",
|
|
164
|
+
"detail": "MouseEvent | KeyboardEvent",
|
|
165
|
+
"description": "Event emitted when the search button is clicked or activated via keyboard.",
|
|
166
|
+
"end_line": 170
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"name": "searchInputOpenChange",
|
|
170
|
+
"detail": "boolean",
|
|
171
|
+
"description": "Event emitted when the search input open state changes.",
|
|
172
|
+
"end_line": 173
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"name": "signOutClick",
|
|
176
|
+
"detail": "MouseEvent | KeyboardEvent",
|
|
177
|
+
"description": "Event emitted when the user profile sign out button is clicked or activated via keyboard.",
|
|
178
|
+
"end_line": 176
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"name": "trimbleLogoClick",
|
|
182
|
+
"detail": "MouseEvent | KeyboardEvent",
|
|
183
|
+
"description": "Event emitted when the Trimble logo is clicked or activated via keyboard.",
|
|
184
|
+
"end_line": 179
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"name": "userMenuOpenChange",
|
|
188
|
+
"detail": "boolean",
|
|
189
|
+
"description": "Event emitted when the user menu open state changes.",
|
|
190
|
+
"end_line": 182
|
|
191
|
+
}
|
|
192
|
+
],
|
|
193
|
+
"methods": [],
|
|
194
|
+
"slots": [
|
|
195
|
+
{
|
|
196
|
+
"name": "main-menu",
|
|
197
|
+
"description": "Slot for main-menu content"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"name": "start",
|
|
201
|
+
"description": "Slot for start content"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"name": "center",
|
|
205
|
+
"description": "Slot for center content"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"name": "end",
|
|
209
|
+
"description": "Slot for end content"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"name": "notifications",
|
|
213
|
+
"description": "Slot for notifications content"
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"name": "apps",
|
|
217
|
+
"description": "Slot for apps content"
|
|
218
|
+
}
|
|
219
|
+
],
|
|
220
|
+
"examples": {
|
|
221
|
+
"basic": "<style>\n div[id^='story--components-navbar--default'] {\n border: 1px dashed black;\n height: 360px;\n overflow: hidden;\n }\n [slot=main-menu] {\n background-color: #0063a3;\n color: white;\n height: 400px;\n }\n</style>\n<modus-wc-navbar\n ?apps-menu-open=${args['apps-menu-open']}\n ?condensed=${args.condensed}\n ?condensed-menu-open=${args['condensed-menu-open']}\n custom-class=${ifDefined(args['custom-class'])}\n ?main-menu-open=${args['main-menu-open']}\n ?notifications-menu-open=${args['notifications-menu-open']}\n search-debounce-ms=${ifDefined(args['search-debounce-ms'])}\n ?search-input-open=${args['search-input-open']}\n .textOverrides=${ifDefined(args['text-overrides'])}\n .userCard=${args['user-card']}\n ?user-menu-open=${args['user-menu-open']}\n .visibility=${args.visibility}\n>\n <div slot=\"main-menu\">Main menu contents</div>\n <div slot=\"notifications\">Notification contents</div>\n <div slot=\"apps\">App drawer contents</div>\n</modus-wc-navbar>\n<script>\n// Added this block to demonstrate how to handle navbar visibility settings using JavaScript.\n// const visibility = {\n// ai: true,\n// apps: true,\n// help: true,\n// mainMenu: true,\n// notifications: true,\n// search: true,\n// searchInput: true,\n// user: true,\n// };\n// const userCard = {\n// avatarAlt: 'Sonic',\n// avatarSrc: 'https://i1.sndcdn.com/artworks-000405996468-wmh3uv-t500x500.jpg',\n// email: 'sonic@trimble.com',\n// name: 'Sonic the Hedgehog',\n// };\n// const navbar = document.querySelector('modus-wc-navbar');\n// navbar.visibility = visibility;\n// navbar.userCard = userCard;\n</script>",
|
|
222
|
+
"variations": [],
|
|
223
|
+
"args": {
|
|
224
|
+
"condensed": "false",
|
|
225
|
+
"search-debounce-ms": "300",
|
|
226
|
+
"text-overrides": "textOverrides",
|
|
227
|
+
"user-card": "userCard"
|
|
228
|
+
},
|
|
229
|
+
"argTypes": {},
|
|
230
|
+
"usage": [],
|
|
231
|
+
"events": [
|
|
232
|
+
"aiClick",
|
|
233
|
+
"appsClick",
|
|
234
|
+
"appsMenuOpenChange",
|
|
235
|
+
"condensedMenuOpenChange",
|
|
236
|
+
"helpClick",
|
|
237
|
+
"mainMenuOpenChange",
|
|
238
|
+
"myTrimbleClick",
|
|
239
|
+
"notificationsMenuOpenChange",
|
|
240
|
+
"notificationsClick",
|
|
241
|
+
"searchChange",
|
|
242
|
+
"searchClick",
|
|
243
|
+
"searchInputOpenChange",
|
|
244
|
+
"signOutClick",
|
|
245
|
+
"trimbleLogoClick",
|
|
246
|
+
"userMenuOpenChange",
|
|
247
|
+
""
|
|
248
|
+
]
|
|
249
|
+
},
|
|
250
|
+
"tag": "modus-wc-navbar",
|
|
251
|
+
"storyExample": {
|
|
252
|
+
"template": "<style>\n div[id^='story--components-navbar--default'] {\n border: 1px dashed black;\n height: 360px;\n overflow: hidden;\n }\n [slot=main-menu] {\n background-color: #0063a3;\n color: white;\n height: 400px;\n }\n</style>\n<modus-wc-navbar\n ?apps-menu-open=${args['apps-menu-open']}\n ?condensed=${args.condensed}\n ?condensed-menu-open=${args['condensed-menu-open']}\n custom-class=${ifDefined(args['custom-class'])}\n ?main-menu-open=${args['main-menu-open']}\n ?notifications-menu-open=${args['notifications-menu-open']}\n search-debounce-ms=${ifDefined(args['search-debounce-ms'])}\n ?search-input-open=${args['search-input-open']}\n .textOverrides=${ifDefined(args['text-overrides'])}\n .userCard=${args['user-card']}\n ?user-menu-open=${args['user-menu-open']}\n .visibility=${args.visibility}\n>\n <div slot=\"main-menu\">Main menu contents</div>\n <div slot=\"notifications\">Notification contents</div>\n <div slot=\"apps\">App drawer contents</div>\n</modus-wc-navbar>\n<script>\n// Added this block to demonstrate how to handle navbar visibility settings using JavaScript.\n// const visibility = {\n// ai: true,\n// apps: true,\n// help: true,\n// mainMenu: true,\n// notifications: true,\n// search: true,\n// searchInput: true,\n// user: true,\n// };\n// const userCard = {\n// avatarAlt: 'Sonic',\n// avatarSrc: 'https://i1.sndcdn.com/artworks-000405996468-wmh3uv-t500x500.jpg',\n// email: 'sonic@trimble.com',\n// name: 'Sonic the Hedgehog',\n// };\n// const navbar = document.querySelector('modus-wc-navbar');\n// navbar.visibility = visibility;\n// navbar.userCard = userCard;\n</script>",
|
|
253
|
+
"args": {
|
|
254
|
+
"condensed": "false",
|
|
255
|
+
"search-debounce-ms": "300",
|
|
256
|
+
"text-overrides": "textOverrides",
|
|
257
|
+
"user-card": "userCard"
|
|
258
|
+
},
|
|
259
|
+
"argTypes": {},
|
|
260
|
+
"events": [
|
|
261
|
+
"aiClick",
|
|
262
|
+
"appsClick",
|
|
263
|
+
"appsMenuOpenChange",
|
|
264
|
+
"condensedMenuOpenChange",
|
|
265
|
+
"helpClick",
|
|
266
|
+
"mainMenuOpenChange",
|
|
267
|
+
"myTrimbleClick",
|
|
268
|
+
"notificationsMenuOpenChange",
|
|
269
|
+
"notificationsClick",
|
|
270
|
+
"searchChange",
|
|
271
|
+
"searchClick",
|
|
272
|
+
"searchInputOpenChange",
|
|
273
|
+
"signOutClick",
|
|
274
|
+
"trimbleLogoClick",
|
|
275
|
+
"userMenuOpenChange",
|
|
276
|
+
""
|
|
277
|
+
],
|
|
278
|
+
"fullContent": "import { withActions } from '@storybook/addon-actions/decorator';\nimport { Meta, StoryObj } from '@storybook/web-components';\nimport { html } from 'lit';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport {\n INavbarTextOverrides,\n INavbarUserCard,\n INavbarVisibility,\n} from './modus-wc-navbar';\n\nconst textOverrides: INavbarTextOverrides = {\n apps: 'Apps',\n help: 'Help',\n notifications: 'Notifications',\n search: 'Search',\n};\n\nconst userCard: INavbarUserCard = {\n avatarAlt: 'Sonic',\n avatarSrc: 'https://i1.sndcdn.com/artworks-000405996468-wmh3uv-t500x500.jpg',\n email: 'sonic@trimble.com',\n name: 'Sonic the Hedgehog',\n};\n\nconst visibility: INavbarVisibility = {\n ai: true,\n apps: true,\n help: true,\n mainMenu: true,\n notifications: true,\n search: true,\n searchInput: true,\n user: true,\n};\n\ninterface NavbarArgs {\n 'apps-menu-open'?: boolean;\n condensed?: boolean;\n 'condensed-menu-open'?: boolean;\n 'custom-class'?: string;\n 'main-menu-open'?: boolean;\n 'notifications-menu-open'?: boolean;\n 'search-debounce-ms'?: number;\n 'search-input-open'?: boolean;\n 'text-overrides'?: INavbarTextOverrides;\n 'user-card': INavbarUserCard;\n 'user-menu-open'?: boolean;\n visibility?: INavbarVisibility;\n}\n\nconst meta: Meta<NavbarArgs> = {\n title: 'Components/Navbar',\n component: 'modus-wc-navbar',\n args: {\n condensed: false,\n 'search-debounce-ms': 300,\n 'text-overrides': textOverrides,\n 'user-card': userCard,\n visibility,\n },\n argTypes: {\n 'text-overrides': {\n description: 'Text replacements for navbar menu items',\n table: {\n type: {\n detail: `\n Interface: INavbarTextOverrides\n Properties:\n - apps (string, optional): Replaces the text for \"Apps\" in the condensed menu\n - help (string, optional): Replaces the text for \"Help\" in the condensed menu\n - notifications (string, optional): Replaces the text for \"Notifications\" in the condensed menu\n - search (string, optional): Replaces the text for \"Search\" in the condensed menu\n `,\n },\n },\n control: {\n type: 'object',\n },\n },\n 'user-card': {\n description: 'User profile card information',\n table: {\n type: {\n detail: `\n Interface: IUserCard\n Properties:\n - avatarAlt (string, optional): The alt value to set on the avatar\n - avatarSrc (string, optional): The avatar image source value\n - email (string): The email address of the user\n - myTrimbleButton (string, optional): Text override for the Access MyTrimble button, allows for translation\n - name (string): The name of the user\n - signOutButton (string, optional): Text override for the Sign out button, allows for translation\n `,\n },\n },\n },\n visibility: {\n description: 'Controls visibility of individual navbar buttons',\n table: {\n type: {\n detail: `\n Interface: INavbarVisibility\n Properties:\n - ai (boolean, optional): Controls visibility of the AI button\n - apps (boolean, optional): Controls visibility of the apps button\n - help (boolean, optional): Controls visibility of the help button\n - mainMenu (boolean, optional): Controls visibility of the main menu button\n - notifications (boolean, optional): Controls visibility of the notifications button\n - search (boolean, optional): Controls visibility of the search button\n - searchInput (boolean, optional): Controls visibility of the search input\n - user (boolean, optional): Controls visibility of the user button\n `,\n },\n },\n },\n },\n decorators: [withActions],\n parameters: {\n actions: {\n handles: [\n 'aiClick',\n 'appsClick',\n 'appsMenuOpenChange',\n 'condensedMenuOpenChange',\n 'helpClick',\n 'mainMenuOpenChange',\n 'myTrimbleClick',\n 'notificationsMenuOpenChange',\n 'notificationsClick',\n 'searchChange',\n 'searchClick',\n 'searchInputOpenChange',\n 'signOutClick',\n 'trimbleLogoClick',\n 'userMenuOpenChange',\n ],\n },\n layout: 'padded',\n },\n};\n\nexport default meta;\n\ntype Story = StoryObj<NavbarArgs>;\n\nconst Template: Story = {\n render: (args) => {\n // prettier-ignore\n return html`\n<style>\n div[id^='story--components-navbar--default'] {\n border: 1px dashed black;\n height: 360px;\n overflow: hidden;\n }\n [slot=main-menu] {\n background-color: #0063a3;\n color: white;\n height: 400px;\n }\n</style>\n<modus-wc-navbar\n ?apps-menu-open=${args['apps-menu-open']}\n ?condensed=${args.condensed}\n ?condensed-menu-open=${args['condensed-menu-open']}\n custom-class=${ifDefined(args['custom-class'])}\n ?main-menu-open=${args['main-menu-open']}\n ?notifications-menu-open=${args['notifications-menu-open']}\n search-debounce-ms=${ifDefined(args['search-debounce-ms'])}\n ?search-input-open=${args['search-input-open']}\n .textOverrides=${ifDefined(args['text-overrides'])}\n .userCard=${args['user-card']}\n ?user-menu-open=${args['user-menu-open']}\n .visibility=${args.visibility}\n>\n <div slot=\"main-menu\">Main menu contents</div>\n <div slot=\"notifications\">Notification contents</div>\n <div slot=\"apps\">App drawer contents</div>\n</modus-wc-navbar>\n<script>\n// Added this block to demonstrate how to handle navbar visibility settings using JavaScript.\n// const visibility = {\n// ai: true,\n// apps: true,\n// help: true,\n// mainMenu: true,\n// notifications: true,\n// search: true,\n// searchInput: true,\n// user: true,\n// };\n// const userCard = {\n// avatarAlt: 'Sonic',\n// avatarSrc: 'https://i1.sndcdn.com/artworks-000405996468-wmh3uv-t500x500.jpg',\n// email: 'sonic@trimble.com',\n// name: 'Sonic the Hedgehog',\n// };\n// const navbar = document.querySelector('modus-wc-navbar');\n// navbar.visibility = visibility;\n// navbar.userCard = userCard;\n</script>\n\n `;\n },\n};\n\nexport const Default: Story = { ...Template };\n\nexport const CustomMenuAndSlots: Story = {\n render: (args) => {\n function toggleCustomUserMenu(e) {\n const customIcon = e.currentTarget;\n const menu = customIcon.parentElement?.querySelector('#custom-user-menu');\n menu?.classList.toggle('hidden');\n }\n return html`\n <div id=\"custom-menu-and-slots\">\n <style>\n #custom-menu-and-slots .modus-wc-navbar {\n align-items: center;\n display: flex;\n gap: 0.2rem;\n padding: 0 1rem;\n width: 100%;\n }\n .modus-wc-card-body {\n padding: 1rem;\n }\n #custom-menu-and-slots .modus-wc-navbar-center,\n #custom-menu-and-slots .modus-wc-navbar-end,\n #custom-menu-and-slots .modus-wc-navbar-start {\n align-items: center;\n display: flex;\n flex: 1;\n }\n #custom-menu-and-slots .modus-wc-navbar-center {\n background: #d9d9d969;\n justify-content: center;\n }\n #custom-menu-and-slots .modus-wc-navbar-end {\n background: #d9d9d969;\n justify-content: flex-end;\n }\n #custom-menu-and-slots .modus-wc-navbar-start {\n background: #d9d9d969;\n justify-content: flex-start;\n }\n #custom-user-menu {\n position: absolute;\n right: 10px;\n top: 50px;\n z-index: 1000;\n }\n #custom-user-menu.hidden {\n display: none;\n }\n .custom-user-email {\n font-size: 0.8rem;\n }\n .custom-user-icon {\n cursor: pointer;\n margin-inline-start: 8px;\n margin-inline-end: 8px;\n position: relative;\n top: 3px;\n }\n .custom-user-menu-header {\n border-bottom: 1px solid #e0e0e0;\n margin-bottom: 8px;\n padding: 8px 16px;\n }\n .custom-user-menu-title {\n font-weight: bold;\n }\n div[id^='story--components-navbar--custom-menu-and-slots'] {\n border: 1px dashed black;\n height: 365px;\n }\n .menu-item {\n align-items: center;\n cursor: pointer;\n display: flex;\n padding: 8px;\n }\n .slot-bg {\n align-items: center;\n display: flex;\n font-weight: 600;\n height: 40px;\n justify-content: center;\n opacity: 0.4;\n }\n </style>\n <modus-wc-navbar\n ?apps-menu-open=${args['apps-menu-open']}\n ?condensed=${args.condensed}\n ?condensed-menu-open=${args['condensed-menu-open']}\n custom-class=${ifDefined(args['custom-class'])}\n ?main-menu-open=${args['main-menu-open']}\n ?notifications-menu-open=${args['notifications-menu-open']}\n search-debounce-ms=${ifDefined(args['search-debounce-ms'])}\n ?search-input-open=${args['search-input-open']}\n .textOverrides=${ifDefined(args['text-overrides'])}\n .userCard=${args['user-card']}\n ?user-menu-open=${args['user-menu-open']}\n .visibility=${{\n ai: false,\n apps: false,\n help: false,\n mainMenu: false,\n notifications: false,\n search: false,\n searchInput: false,\n user: false,\n }}\n >\n <div slot=\"main-menu\">Main menu contents</div>\n <div slot=\"notifications\">Notification contents</div>\n <div slot=\"apps\">App drawer contents</div>\n\n <!-- Slots demonstration -->\n <div slot=\"start\">\n <div class=\"slot-bg\">Left slot</div>\n </div>\n <div slot=\"center\">\n <div class=\"slot-bg\">Center slot</div>\n </div>\n <div slot=\"end\">\n <div class=\"slot-bg\">Right slot</div>\n <div class=\"custom-user-icon\" @click=${toggleCustomUserMenu}>\n <modus-wc-avatar\n alt=\"Sonic the Hedgehog\"\n img-src=\"https://i1.sndcdn.com/artworks-000405996468-wmh3uv-t500x500.jpg\"\n size=\"xs\"\n shape=\"circle\"\n ></modus-wc-avatar>\n </div>\n\n <!-- Custom user menu -->\n <modus-wc-card id=\"custom-user-menu\" bordered=\"true\">\n <div class=\"custom-user-menu-header\">\n <div class=\"custom-user-menu-title\">Custom Menu</div>\n <div class=\"custom-user-email\">custom.user@example.com</div>\n </div>\n <div class=\"menu-item\">\n <span class=\"menu-item-icon\"\n ><modus-wc-icon\n name=\"settings_solid\"\n size=\"16px\"\n ></modus-wc-icon\n ></span>\n <span class=\"custom-user-icon\">Account Settings</span>\n </div>\n <div class=\"menu-item\">\n <span class=\"menu-item-icon\"\n ><modus-wc-icon\n name=\"person_solid\"\n size=\"16px\"\n ></modus-wc-icon\n ></span>\n <span class=\"custom-user-icon\">Profile</span>\n </div>\n <div class=\"menu-item\">\n <span class=\"menu-item-icon\"\n ><modus-wc-icon name=\"sign_out\" size=\"16px\"></modus-wc-icon\n ></span>\n <span class=\"custom-user-icon\">Logout</span>\n </div>\n </modus-wc-card>\n </div>\n </modus-wc-navbar>\n </div>\n <script>\n // Added this block to demonstrate how to toggle a custom user menu and manage navbar visibility settings using JavaScript.\n // const toggleCustomUserMenu = (e) => {\n // const customIcon = e.currentTarget;\n // const menu = customIcon.parentElement?.querySelector('#custom-user-menu');\n // menu?.classList.toggle('hidden');\n // };\n // const navbar = document.querySelector('modus-wc-navbar');\n // const userIcon = document.querySelector('.custom-user-icon');\n // if (userIcon) {\n // userIcon.addEventListener('click', toggleCustomUserMenu);\n // }\n // if (navbar) {\n // navbar.visibility = {\n // ai: false,\n // apps: false,\n // help: false,\n // mainMenu: false,\n // notifications: false,\n // search: false,\n // searchInput: false,\n // user: false\n // };\n // }\n </script>\n `;\n },\n};\n"
|
|
279
|
+
}
|
|
280
|
+
}
|